diff --git a/antarest/__init__.py b/antarest/__init__.py index 29054100d1..9895b016bd 100644 --- a/antarest/__init__.py +++ b/antarest/__init__.py @@ -7,9 +7,9 @@ # Standard project metadata -__version__ = "2.16.7" +__version__ = "2.17" __author__ = "RTE, Antares Web Team" -__date__ = "2024-03-05" +__date__ = "2024-05-15" # noinspection SpellCheckingInspection __credits__ = "(c) Réseau de Transport de l’Électricité (RTE)" diff --git a/antarest/core/configdata/model.py b/antarest/core/configdata/model.py index 8db2522b43..cb58784493 100644 --- a/antarest/core/configdata/model.py +++ b/antarest/core/configdata/model.py @@ -2,8 +2,7 @@ from typing import Any, Optional from pydantic import BaseModel -from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, Sequence, String # type: ignore -from sqlalchemy.orm import relationship # type: ignore +from sqlalchemy import Column, Integer, String # type: ignore from antarest.core.persistence import Base diff --git a/antarest/core/exceptions.py b/antarest/core/exceptions.py index 9094d322be..0ca8af4f7d 100644 --- a/antarest/core/exceptions.py +++ b/antarest/core/exceptions.py @@ -1,6 +1,6 @@ import re +import typing as t from http import HTTPStatus -from typing import Any, Optional from fastapi.exceptions import HTTPException @@ -158,6 +158,17 @@ def __str__(self) -> str: return self.detail +class DuplicateSTStorageId(HTTPException): + """Exception raised when trying to create a short-term storage with an already existing id.""" + + def __init__(self, study_id: str, area_id: str, st_storage_id: str) -> None: + detail = f"Short term storage '{st_storage_id}' already exists in area '{area_id}'" + super().__init__(HTTPStatus.CONFLICT, detail) + + def __str__(self) -> str: + return self.detail + + class ThermalClusterMatrixNotFound(MatrixNotFound): """Matrix of the thermal cluster is not found (404 Not Found)""" @@ -304,7 +315,7 @@ def __init__(self) -> None: class StudyDeletionNotAllowed(HTTPException): - def __init__(self, uuid: str, message: Optional[str] = None) -> None: + def __init__(self, uuid: str, message: t.Optional[str] = None) -> None: msg = f"Study {uuid} (not managed) is not allowed to be deleted" if message: msg += f"\n{message}" @@ -355,7 +366,7 @@ def __init__(self, message: str) -> None: super().__init__(HTTPStatus.BAD_REQUEST, message) -class BindingConstraintNotFoundError(HTTPException): +class BindingConstraintNotFound(HTTPException): def __init__(self, message: str) -> None: super().__init__(HTTPStatus.NOT_FOUND, message) @@ -365,11 +376,6 @@ def __init__(self, message: str) -> None: super().__init__(HTTPStatus.NOT_FOUND, message) -class ConstraintAlreadyExistError(HTTPException): - def __init__(self, message: str) -> None: - super().__init__(HTTPStatus.NOT_FOUND, message) - - class DuplicateConstraintName(HTTPException): def __init__(self, message: str) -> None: super().__init__(HTTPStatus.CONFLICT, message) @@ -385,20 +391,72 @@ def __init__(self, message: str) -> None: super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) -class IncoherenceBetweenMatricesLength(HTTPException): - def __init__(self, detail: Any) -> None: - super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, detail) +class MatrixWidthMismatchError(HTTPException): + def __init__(self, message: str) -> None: + super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) -class MissingDataError(HTTPException): +class WrongMatrixHeightError(HTTPException): def __init__(self, message: str) -> None: - super().__init__(HTTPStatus.NOT_FOUND, message) + super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) -class ConstraintIdNotFoundError(HTTPException): - def __init__(self, message: str) -> None: +class ConstraintTermNotFound(HTTPException): + """ + Exception raised when a constraint term is not found. + """ + + def __init__(self, binding_constraint_id: str, *ids: str) -> None: + count = len(ids) + id_enum = ", ".join(f"'{term}'" for term in ids) + message = { + 0: f"Constraint terms not found in BC '{binding_constraint_id}'", + 1: f"Constraint term {id_enum} not found in BC '{binding_constraint_id}'", + 2: f"Constraint terms {id_enum} not found in BC '{binding_constraint_id}'", + }[min(count, 2)] super().__init__(HTTPStatus.NOT_FOUND, message) + def __str__(self) -> str: + """Return a string representation of the exception.""" + return self.detail + + +class DuplicateConstraintTerm(HTTPException): + """ + Exception raised when an attempt is made to create a constraint term which already exists. + """ + + def __init__(self, binding_constraint_id: str, *ids: str) -> None: + count = len(ids) + id_enum = ", ".join(f"'{term}'" for term in ids) + message = { + 0: f"Constraint terms already exist in BC '{binding_constraint_id}'", + 1: f"Constraint term {id_enum} already exists in BC '{binding_constraint_id}'", + 2: f"Constraint terms {id_enum} already exist in BC '{binding_constraint_id}'", + }[min(count, 2)] + super().__init__(HTTPStatus.CONFLICT, message) + + def __str__(self) -> str: + """Return a string representation of the exception.""" + return self.detail + + +class InvalidConstraintTerm(HTTPException): + """ + Exception raised when a constraint term is not correctly specified (no term data). + """ + + def __init__(self, binding_constraint_id: str, term_json: str) -> None: + message = ( + f"Invalid constraint term for binding constraint '{binding_constraint_id}': {term_json}," + f" term 'data' is missing or empty" + ) + super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) + + def __str__(self) -> str: + """Return a string representation of the exception.""" + return self.detail + class LayerNotFound(HTTPException): def __init__(self) -> None: diff --git a/antarest/core/filesystem_blueprint.py b/antarest/core/filesystem_blueprint.py index 3b15ebd03a..bf247978b2 100644 --- a/antarest/core/filesystem_blueprint.py +++ b/antarest/core/filesystem_blueprint.py @@ -15,7 +15,6 @@ from starlette.responses import PlainTextResponse, StreamingResponse from antarest.core.config import Config -from antarest.core.jwt import JWTUser from antarest.core.utils.web import APITag from antarest.login.auth import Auth diff --git a/antarest/launcher/web.py b/antarest/launcher/web.py index 051eba2cc4..14eb39aee2 100644 --- a/antarest/launcher/web.py +++ b/antarest/launcher/web.py @@ -231,7 +231,7 @@ def get_solver_versions( "value": "local", }, }, - ) + ), ) -> List[str]: """ Get list of supported solver versions defined in the configuration. @@ -268,7 +268,7 @@ def get_nb_cores( "value": "local", }, }, - ) + ), ) -> Dict[str, int]: """ Retrieve the numer of cores of the launcher. diff --git a/antarest/main.py b/antarest/main.py index 2187088d2b..3973c79ace 100644 --- a/antarest/main.py +++ b/antarest/main.py @@ -61,7 +61,7 @@ class PathType: from antarest.main import PathType parser = argparse.ArgumentParser() - parser.add_argument('--input', type=PathType(file_ok=True, exists=True)) + parser.add_argument("--input", type=PathType(file_ok=True, exists=True)) args = parser.parse_args() print(args.input) diff --git a/antarest/matrixstore/main.py b/antarest/matrixstore/main.py index ddd29c2d36..b59e3eb87a 100644 --- a/antarest/matrixstore/main.py +++ b/antarest/matrixstore/main.py @@ -1,7 +1,6 @@ from typing import Optional from fastapi import FastAPI -from fastapi_jwt_auth.exceptions import AuthJWTException # type: ignore from antarest.core.config import Config from antarest.core.filetransfer.service import FileTransferManager diff --git a/antarest/matrixstore/repository.py b/antarest/matrixstore/repository.py index 9ab44a69ec..8f3e78f082 100644 --- a/antarest/matrixstore/repository.py +++ b/antarest/matrixstore/repository.py @@ -6,8 +6,8 @@ import numpy as np from filelock import FileLock from numpy import typing as npt -from sqlalchemy import and_, exists # type: ignore -from sqlalchemy.orm import Session, aliased # type: ignore +from sqlalchemy import exists # type: ignore +from sqlalchemy.orm import Session # type: ignore from antarest.core.utils.fastapi_sqlalchemy import db from antarest.matrixstore.model import Matrix, MatrixContent, MatrixData, MatrixDataSet diff --git a/antarest/study/business/advanced_parameters_management.py b/antarest/study/business/advanced_parameters_management.py index 6cd0825322..f18e47a71f 100644 --- a/antarest/study/business/advanced_parameters_management.py +++ b/antarest/study/business/advanced_parameters_management.py @@ -91,7 +91,7 @@ def check_accuracy_on_correlation(cls, v: str) -> str: return "" allowed_values = ["wind", "load", "solar"] - values_list = re.split("\s*,\s*", v.strip()) + values_list = re.split(r"\s*,\s*", v.strip()) if len(values_list) != len(set(values_list)): raise ValueError("Duplicate value") diff --git a/antarest/study/business/all_optional_meta.py b/antarest/study/business/all_optional_meta.py new file mode 100644 index 0000000000..06ddc012d8 --- /dev/null +++ b/antarest/study/business/all_optional_meta.py @@ -0,0 +1,94 @@ +import typing as t + +import pydantic.fields +import pydantic.main +from pydantic import BaseModel + +from antarest.core.utils.string import to_camel_case + + +class AllOptionalMetaclass(pydantic.main.ModelMetaclass): + """ + Metaclass that makes all fields of a Pydantic model optional. + + Usage: + class MyModel(BaseModel, metaclass=AllOptionalMetaclass): + field1: str + field2: int + ... + + Instances of the model can be created even if not all fields are provided during initialization. + Default values, when provided, are used unless `use_none` is set to `True`. + """ + + def __new__( + cls: t.Type["AllOptionalMetaclass"], + name: str, + bases: t.Tuple[t.Type[t.Any], ...], + namespaces: t.Dict[str, t.Any], + use_none: bool = False, + **kwargs: t.Dict[str, t.Any], + ) -> t.Any: + """ + Create a new instance of the metaclass. + + Args: + name: Name of the class to create. + bases: Base classes of the class to create (a Pydantic model). + namespaces: namespace of the class to create that defines the fields of the model. + use_none: If `True`, the default value of the fields is set to `None`. + Note that this field is not part of the Pydantic model, but it is an extension. + **kwargs: Additional keyword arguments used by the metaclass. + """ + # Modify the annotations of the class (but not of the ancestor classes) + # in order to make all fields optional. + # If the current model inherits from another model, the annotations of the ancestor models + # are not modified, because the fields are already converted to `ModelField`. + annotations = namespaces.get("__annotations__", {}) + for field_name, field_type in annotations.items(): + if not field_name.startswith("__"): + # Making already optional fields optional is not a problem (nothing is changed). + annotations[field_name] = t.Optional[field_type] + namespaces["__annotations__"] = annotations + + if use_none: + # Modify the namespace fields to set their default value to `None`. + for field_name, field_info in namespaces.items(): + if isinstance(field_info, pydantic.fields.FieldInfo): + field_info.default = None + field_info.default_factory = None + + # Create the class: all annotations are converted into `ModelField`. + instance = super().__new__(cls, name, bases, namespaces, **kwargs) + + # Modify the inherited fields of the class to make them optional + # and set their default value to `None`. + model_field: pydantic.fields.ModelField + for field_name, model_field in instance.__fields__.items(): + model_field.required = False + model_field.allow_none = True + if use_none: + model_field.default = None + model_field.default_factory = None + model_field.field_info.default = None + + return instance + + +MODEL = t.TypeVar("MODEL", bound=t.Type[BaseModel]) + + +def camel_case_model(model: MODEL) -> MODEL: + """ + This decorator can be used to modify a model to use camel case aliases. + + Args: + model: The pydantic model to modify. + + Returns: + The modified model. + """ + model.__config__.alias_generator = to_camel_case + for field_name, field in model.__fields__.items(): + field.alias = to_camel_case(field_name) + return model diff --git a/antarest/study/business/area_management.py b/antarest/study/business/area_management.py index 544f18d8cf..8f0758d9dc 100644 --- a/antarest/study/business/area_management.py +++ b/antarest/study/business/area_management.py @@ -1,15 +1,24 @@ +import enum import logging import re -from enum import Enum -from typing import Any, Dict, List, Optional, Sequence, Tuple +import typing as t -from pydantic import BaseModel +from pydantic import BaseModel, Extra, Field -from antarest.core.exceptions import DuplicateAreaName, LayerNotAllowedToBeDeleted, LayerNotFound +from antarest.core.exceptions import ConfigFileNotFound, DuplicateAreaName, LayerNotAllowedToBeDeleted, LayerNotFound +from antarest.core.model import JSON +from antarest.study.business.all_optional_meta import AllOptionalMetaclass, camel_case_model from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import Patch, PatchArea, PatchCluster, RawStudy, Study from antarest.study.repository import StudyMetadataRepository from antarest.study.storage.patch_service import PatchService +from antarest.study.storage.rawstudy.model.filesystem.config.area import ( + AdequacyPathProperties, + AreaFolder, + OptimizationProperties, + ThermalAreasProperties, + UIProperties, +) from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, DistrictSet, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.storage_service import StudyStorageService @@ -21,7 +30,7 @@ logger = logging.getLogger(__name__) -class AreaType(Enum): +class AreaType(enum.Enum): AREA = "AREA" DISTRICT = "DISTRICT" @@ -29,44 +38,86 @@ class AreaType(Enum): class AreaCreationDTO(BaseModel): name: str type: AreaType - metadata: Optional[PatchArea] - set: Optional[List[str]] + metadata: t.Optional[PatchArea] + set: t.Optional[t.List[str]] +# review: is this class necessary? class ClusterInfoDTO(PatchCluster): id: str name: str enabled: bool = True unitcount: int = 0 nominalcapacity: int = 0 - group: Optional[str] = None - min_stable_power: Optional[int] = None - min_up_time: Optional[int] = None - min_down_time: Optional[int] = None - spinning: Optional[float] = None - marginal_cost: Optional[float] = None - spread_cost: Optional[float] = None - market_bid_cost: Optional[float] = None + group: t.Optional[str] = None + min_stable_power: t.Optional[int] = None + min_up_time: t.Optional[int] = None + min_down_time: t.Optional[int] = None + spinning: t.Optional[float] = None + marginal_cost: t.Optional[float] = None + spread_cost: t.Optional[float] = None + market_bid_cost: t.Optional[float] = None class AreaInfoDTO(AreaCreationDTO): id: str - thermals: Optional[List[ClusterInfoDTO]] = None - - -class AreaUI(BaseModel): - x: int - y: int - color_rgb: Tuple[int, int, int] + thermals: t.Optional[t.List[ClusterInfoDTO]] = None class LayerInfoDTO(BaseModel): id: str name: str - areas: List[str] + areas: t.List[str] + +class UpdateAreaUi(BaseModel, extra="forbid", allow_population_by_field_name=True): + """ + DTO for updating area UI + + Usage: + + >>> from antarest.study.business.area_management import UpdateAreaUi + >>> from pprint import pprint + + >>> obj = { + ... "x": -673.75, + ... "y": 301.5, + ... "color_rgb": [230, 108, 44], + ... "layerX": {"0": -230, "4": -230, "6": -95, "7": -230, "8": -230}, + ... "layerY": {"0": 136, "4": 136, "6": 39, "7": 136, "8": 136}, + ... "layerColor": { + ... "0": "230, 108, 44", + ... "4": "230, 108, 44", + ... "6": "230, 108, 44", + ... "7": "230, 108, 44", + ... "8": "230, 108, 44", + ... }, + ... } + + >>> model = UpdateAreaUi(**obj) + >>> pprint(model.dict(by_alias=True), width=80) + {'colorRgb': [230, 108, 44], + 'layerColor': {0: '230, 108, 44', + 4: '230, 108, 44', + 6: '230, 108, 44', + 7: '230, 108, 44', + 8: '230, 108, 44'}, + 'layerX': {0: -230, 4: -230, 6: -95, 7: -230, 8: -230}, + 'layerY': {0: 136, 4: 136, 6: 39, 7: 136, 8: 136}, + 'x': -673, + 'y': 301} -def _get_ui_info_map(file_study: FileStudy, area_ids: Sequence[str]) -> Dict[str, Any]: + """ + + x: int = Field(title="X position") + y: int = Field(title="Y position") + color_rgb: t.Sequence[int] = Field(title="RGB color", alias="colorRgb") + layer_x: t.Mapping[int, int] = Field(default_factory=dict, title="X position of each layer", alias="layerX") + layer_y: t.Mapping[int, int] = Field(default_factory=dict, title="Y position of each layer", alias="layerY") + layer_color: t.Mapping[int, str] = Field(default_factory=dict, title="Color of each layer", alias="layerColor") + + +def _get_ui_info_map(file_study: FileStudy, area_ids: t.Sequence[str]) -> t.Dict[str, t.Any]: """ Get the UI information (a JSON object) for each selected Area. @@ -84,7 +135,9 @@ def _get_ui_info_map(file_study: FileStudy, area_ids: Sequence[str]) -> Dict[str # instead of raising an obscure exception. if not area_ids: return {} + ui_info_map = file_study.tree.get(["input", "areas", ",".join(area_ids), "ui"]) + # If there is only one ID in the `area_ids`, the result returned from # the `file_study.tree.get` call will be a single UI object. # On the other hand, if there are multiple values in `area_ids`, @@ -92,25 +145,258 @@ def _get_ui_info_map(file_study: FileStudy, area_ids: Sequence[str]) -> Dict[str # and the values are the corresponding UI objects. if len(area_ids) == 1: ui_info_map = {area_ids[0]: ui_info_map} + + # Convert to UIProperties to ensure that the UI object is valid. + ui_info_map = {area_id: UIProperties(**ui_info).to_config() for area_id, ui_info in ui_info_map.items()} + return ui_info_map -def _get_area_layers(area_uis: Dict[str, Any], area: str) -> List[str]: +def _get_area_layers(area_uis: t.Dict[str, t.Any], area: str) -> t.List[str]: if area in area_uis and "ui" in area_uis[area] and "layers" in area_uis[area]["ui"]: return re.split(r"\s+", (str(area_uis[area]["ui"]["layers"]) or "")) return [] +_ALL_AREAS_PATH = "input/areas" +_THERMAL_AREAS_PATH = "input/thermal/areas" + + +# noinspection SpellCheckingInspection +class _BaseAreaDTO( + OptimizationProperties.FilteringSection, + OptimizationProperties.ModalOptimizationSection, + AdequacyPathProperties.AdequacyPathSection, + extra=Extra.forbid, + validate_assignment=True, + allow_population_by_field_name=True, +): + """ + Represents an area output. + + Aggregates the fields of the `OptimizationProperties` and `AdequacyPathProperties` classes, + but without the `UIProperties` fields. + + Add the fields extracted from the `/input/thermal/areas.ini` information: + + - `average_unsupplied_energy_cost` is extracted from `unserverd_energy_cost`, + - `average_spilled_energy_cost` is extracted from `spilled_energy_cost`. + """ + + average_unsupplied_energy_cost: float = Field(0.0, description="average unserverd energy cost (€/MWh)") + average_spilled_energy_cost: float = Field(0.0, description="average spilled energy cost (€/MWh)") + + +# noinspection SpellCheckingInspection +@camel_case_model +class AreaOutput(_BaseAreaDTO, metaclass=AllOptionalMetaclass, use_none=True): + """ + DTO object use to get the area information using a flat structure. + """ + + @classmethod + def from_model( + cls, + area_folder: AreaFolder, + *, + average_unsupplied_energy_cost: float, + average_spilled_energy_cost: float, + ) -> "AreaOutput": + """ + Creates a `GetAreaDTO` object from configuration data. + + Args: + area_folder: Configuration data read from the `/input/areas/` information. + average_unsupplied_energy_cost: Unserverd energy cost (€/MWh). + average_spilled_energy_cost: Spilled energy cost (€/MWh). + Returns: + The `GetAreaDTO` object. + """ + obj = { + "average_unsupplied_energy_cost": average_unsupplied_energy_cost, + "average_spilled_energy_cost": average_spilled_energy_cost, + **area_folder.optimization.filtering.dict(by_alias=False), + **area_folder.optimization.nodal_optimization.dict(by_alias=False), + # adequacy_patch is only available if study version >= 830. + **(area_folder.adequacy_patch.adequacy_patch.dict(by_alias=False) if area_folder.adequacy_patch else {}), + } + return cls(**obj) + + def _to_optimization(self) -> OptimizationProperties: + obj = {name: getattr(self, name) for name in OptimizationProperties.FilteringSection.__fields__} + filtering_section = OptimizationProperties.FilteringSection(**obj) + obj = {name: getattr(self, name) for name in OptimizationProperties.ModalOptimizationSection.__fields__} + nodal_optimization_section = OptimizationProperties.ModalOptimizationSection(**obj) + return OptimizationProperties( + filtering=filtering_section, + nodal_optimization=nodal_optimization_section, + ) + + def _to_adequacy_patch(self) -> t.Optional[AdequacyPathProperties]: + obj = {name: getattr(self, name) for name in AdequacyPathProperties.AdequacyPathSection.__fields__} + # If all fields are `None`, the object is empty. + if all(value is None for value in obj.values()): + return None + adequacy_path_section = AdequacyPathProperties.AdequacyPathSection(**obj) + return AdequacyPathProperties(adequacy_patch=adequacy_path_section) + + @property + def area_folder(self) -> AreaFolder: + area_folder = AreaFolder( + optimization=self._to_optimization(), + adequacy_patch=self._to_adequacy_patch(), + # UI properties are not configurable in Table Mode + ) + return area_folder + + class AreaManager: + """ + Manages operations related to areas in a study, including retrieval, creation, and updates. + + Attributes: + storage_service: The service responsible for study storage operations. + patch_service: The service responsible for study patch operations. + This service is used to store additional data for each area, in particular the country + of origin (`country`) and a list of tags for searching (`tags`). + """ + def __init__( self, storage_service: StudyStorageService, repository: StudyMetadataRepository, ) -> None: + """ + Initializes the AreaManager. + + Args: + storage_service: The service responsible for study storage operations. + repository: The repository for study metadata operations. + """ self.storage_service = storage_service self.patch_service = PatchService(repository=repository) - def get_all_areas(self, study: RawStudy, area_type: Optional[AreaType] = None) -> List[AreaInfoDTO]: + # noinspection SpellCheckingInspection + def get_all_area_props(self, study: RawStudy) -> t.Mapping[str, AreaOutput]: + """ + Retrieves all areas of a study. + + Args: + study: The raw study object. + Returns: + A mapping of area IDs to area properties. + Raises: + ConfigFileNotFound: if a configuration file is not found. + """ + file_study = self.storage_service.get_storage(study).get_raw(study) + + # Get the area information from the `/input/areas/` file. + path = _ALL_AREAS_PATH + try: + areas_cfg = file_study.tree.get(path.split("/"), depth=5) + except KeyError: + raise ConfigFileNotFound(path) from None + else: + # "list" and "sets" must be removed: we only need areas. + areas_cfg.pop("list", None) + areas_cfg.pop("sets", None) + + # Get the unserverd and spilled energy costs from the `/input/thermal/areas.ini` file. + path = _THERMAL_AREAS_PATH + try: + thermal_cfg = file_study.tree.get(path.split("/"), depth=3) + except KeyError: + raise ConfigFileNotFound(path) from None + else: + thermal_areas = ThermalAreasProperties(**thermal_cfg) + + # areas_cfg contains a dictionary where the keys are the area IDs, + # and the values are objects that can be converted to `AreaFolder`. + area_map = {} + for area_id, area_cfg in areas_cfg.items(): + area_folder = AreaFolder(**area_cfg) + area_map[area_id] = AreaOutput.from_model( + area_folder, + average_unsupplied_energy_cost=thermal_areas.unserverd_energy_cost.get(area_id, 0.0), + average_spilled_energy_cost=thermal_areas.spilled_energy_cost.get(area_id, 0.0), + ) + + return area_map + + # noinspection SpellCheckingInspection + def update_areas_props( + self, study: RawStudy, update_areas_by_ids: t.Mapping[str, AreaOutput] + ) -> t.Mapping[str, AreaOutput]: + """ + Update the properties of ares. + + Args: + study: The raw study object. + update_areas_by_ids: A mapping of area IDs to area properties. + + Returns: + A mapping of ALL area IDs to area properties. + """ + old_areas_by_ids = self.get_all_area_props(study) + new_areas_by_ids = {k: v for k, v in old_areas_by_ids.items()} + + # Prepare the commands to update the thermal clusters. + commands = [] + command_context = self.storage_service.variant_study_service.command_factory.command_context + + for area_id, update_area in update_areas_by_ids.items(): + # Update the area properties. + old_area = old_areas_by_ids[area_id] + new_area = old_area.copy(update=update_area.dict(by_alias=False, exclude_none=True)) + new_areas_by_ids[area_id] = new_area + + # Convert the DTO to a configuration object and update the configuration file. + old_area_folder = old_area.area_folder + new_area_folder = new_area.area_folder + + if old_area_folder.optimization != new_area_folder.optimization: + commands.append( + UpdateConfig( + target=f"input/areas/{area_id}/optimization", + data=new_area_folder.optimization.to_config(), + command_context=command_context, + ) + ) + if old_area_folder.adequacy_patch != new_area_folder.adequacy_patch and new_area_folder.adequacy_patch: + commands.append( + UpdateConfig( + target=f"input/areas/{area_id}/adequacy_patch", + data=new_area_folder.adequacy_patch.to_config(), + command_context=command_context, + ) + ) + if old_area.average_unsupplied_energy_cost != new_area.average_unsupplied_energy_cost: + commands.append( + UpdateConfig( + target=f"input/thermal/areas/unserverdenergycost/{area_id}", + data=new_area.average_unsupplied_energy_cost, + command_context=command_context, + ) + ) + if old_area.average_spilled_energy_cost != new_area.average_spilled_energy_cost: + commands.append( + UpdateConfig( + target=f"input/thermal/areas/spilledenergycost:{area_id}", + data=new_area.average_spilled_energy_cost, + command_context=command_context, + ) + ) + + file_study = self.storage_service.get_storage(study).get_raw(study) + execute_or_add_commands(study, file_study, commands, self.storage_service) + + return new_areas_by_ids + + @staticmethod + def get_table_schema() -> JSON: + return AreaOutput.schema() + + def get_all_areas(self, study: RawStudy, area_type: t.Optional[AreaType] = None) -> t.List[AreaInfoDTO]: """ Retrieves all areas and districts of a raw study based on the area type. @@ -124,9 +410,9 @@ def get_all_areas(self, study: RawStudy, area_type: Optional[AreaType] = None) - storage_service = self.storage_service.get_storage(study) file_study = storage_service.get_raw(study) metadata = self.patch_service.get(study) - areas_metadata: Dict[str, PatchArea] = metadata.areas or {} - cfg_areas: Dict[str, Area] = file_study.config.areas - result: List[AreaInfoDTO] = [] + areas_metadata: t.Dict[str, PatchArea] = metadata.areas or {} + cfg_areas: t.Dict[str, Area] = file_study.config.areas + result: t.List[AreaInfoDTO] = [] if area_type is None or area_type == AreaType.AREA: result.extend( @@ -141,7 +427,7 @@ def get_all_areas(self, study: RawStudy, area_type: Optional[AreaType] = None) - ) if area_type is None or area_type == AreaType.DISTRICT: - cfg_sets: Dict[str, DistrictSet] = file_study.config.sets + cfg_sets: t.Dict[str, DistrictSet] = file_study.config.sets result.extend( AreaInfoDTO( id=set_id, @@ -155,7 +441,7 @@ def get_all_areas(self, study: RawStudy, area_type: Optional[AreaType] = None) - return result - def get_all_areas_ui_info(self, study: RawStudy) -> Dict[str, Any]: + def get_all_areas_ui_info(self, study: RawStudy) -> t.Dict[str, t.Any]: """ Retrieve information about all areas' user interface (UI) from the study. @@ -173,7 +459,7 @@ def get_all_areas_ui_info(self, study: RawStudy) -> Dict[str, Any]: area_ids = list(file_study.config.areas) return _get_ui_info_map(file_study, area_ids) - def get_layers(self, study: RawStudy) -> List[LayerInfoDTO]: + def get_layers(self, study: RawStudy) -> t.List[LayerInfoDTO]: storage_service = self.storage_service.get_storage(study) file_study = storage_service.get_raw(study) area_ids = list(file_study.config.areas) @@ -196,7 +482,7 @@ def get_layers(self, study: RawStudy) -> List[LayerInfoDTO]: for layer in layers ] - def update_layer_areas(self, study: RawStudy, layer_id: str, areas: List[str]) -> None: + def update_layer_areas(self, study: RawStudy, layer_id: str, areas: t.List[str]) -> None: logger.info(f"Updating layer {layer_id} with areas {areas}") file_study = self.storage_service.get_storage(study).get_raw(study) layers = file_study.tree.get(["layers", "layers", "layers"]) @@ -213,9 +499,9 @@ def update_layer_areas(self, study: RawStudy, layer_id: str, areas: List[str]) - ] to_remove_areas = [area for area in existing_areas if area not in areas] to_add_areas = [area for area in areas if area not in existing_areas] - commands: List[ICommand] = [] + commands: t.List[ICommand] = [] - def create_update_commands(area_id: str) -> List[ICommand]: + def create_update_commands(area_id: str) -> t.List[ICommand]: return [ UpdateConfig( target=f"input/areas/{area_id}/ui/layerX", @@ -235,7 +521,7 @@ def create_update_commands(area_id: str) -> List[ICommand]: ] for area in to_remove_areas: - area_to_remove_layers: List[str] = _get_area_layers(areas_ui, area) + area_to_remove_layers: t.List[str] = _get_area_layers(areas_ui, area) if layer_id in areas_ui[area]["layerX"]: del areas_ui[area]["layerX"][layer_id] if layer_id in areas_ui[area]["layerY"]: @@ -246,7 +532,7 @@ def create_update_commands(area_id: str) -> List[ICommand]: ) commands.extend(create_update_commands(area)) for area in to_add_areas: - area_to_add_layers: List[str] = _get_area_layers(areas_ui, area) + area_to_add_layers: t.List[str] = _get_area_layers(areas_ui, area) if layer_id not in areas_ui[area]["layerX"]: areas_ui[area]["layerX"][layer_id] = areas_ui[area]["ui"]["x"] if layer_id not in areas_ui[area]["layerY"]: @@ -365,33 +651,40 @@ def update_area_metadata( set=area_or_set.get_areas(list(file_study.config.areas)) if isinstance(area_or_set, DistrictSet) else [], ) - def update_area_ui(self, study: Study, area_id: str, area_ui: AreaUI, layer: str = "0") -> None: + def update_area_ui(self, study: Study, area_id: str, area_ui: UpdateAreaUi, layer: str = "0") -> None: + obj = { + "x": area_ui.x, + "y": area_ui.y, + "color_r": area_ui.color_rgb[0], + "color_g": area_ui.color_rgb[1], + "color_b": area_ui.color_rgb[2], + } file_study = self.storage_service.get_storage(study).get_raw(study) commands = ( [ UpdateConfig( target=f"input/areas/{area_id}/ui/ui/x", - data=area_ui.x, + data=obj["x"], command_context=self.storage_service.variant_study_service.command_factory.command_context, ), UpdateConfig( target=f"input/areas/{area_id}/ui/ui/y", - data=area_ui.y, + data=obj["y"], command_context=self.storage_service.variant_study_service.command_factory.command_context, ), UpdateConfig( target=f"input/areas/{area_id}/ui/ui/color_r", - data=area_ui.color_rgb[0], + data=obj["color_r"], command_context=self.storage_service.variant_study_service.command_factory.command_context, ), UpdateConfig( target=f"input/areas/{area_id}/ui/ui/color_g", - data=area_ui.color_rgb[1], + data=obj["color_g"], command_context=self.storage_service.variant_study_service.command_factory.command_context, ), UpdateConfig( target=f"input/areas/{area_id}/ui/ui/color_b", - data=area_ui.color_rgb[2], + data=obj["color_b"], command_context=self.storage_service.variant_study_service.command_factory.command_context, ), ] @@ -402,17 +695,17 @@ def update_area_ui(self, study: Study, area_id: str, area_ui: AreaUI, layer: str [ UpdateConfig( target=f"input/areas/{area_id}/ui/layerX/{layer}", - data=area_ui.x, + data=obj["x"], command_context=self.storage_service.variant_study_service.command_factory.command_context, ), UpdateConfig( target=f"input/areas/{area_id}/ui/layerY/{layer}", - data=area_ui.y, + data=obj["y"], command_context=self.storage_service.variant_study_service.command_factory.command_context, ), UpdateConfig( target=f"input/areas/{area_id}/ui/layerColor/{layer}", - data=f"{str(area_ui.color_rgb[0])} , {str(area_ui.color_rgb[1])} , {str(area_ui.color_rgb[2])}", + data=f"{obj['color_r']},{obj['color_g']},{obj['color_b']}", command_context=self.storage_service.variant_study_service.command_factory.command_context, ), ] @@ -423,7 +716,7 @@ def update_thermal_cluster_metadata( self, study: Study, area_id: str, - clusters_metadata: Dict[str, PatchCluster], + clusters_metadata: t.Dict[str, PatchCluster], ) -> AreaInfoDTO: file_study = self.storage_service.get_storage(study).get_raw(study) patch = self.patch_service.get(study) @@ -452,7 +745,7 @@ def delete_area(self, study: Study, area_id: str) -> None: def _update_with_cluster_metadata( area: str, info: ClusterInfoDTO, - cluster_patch: Dict[str, PatchCluster], + cluster_patch: t.Dict[str, PatchCluster], ) -> ClusterInfoDTO: patch = cluster_patch.get(f"{area}.{info.id}", PatchCluster()) info.code_oi = patch.code_oi @@ -460,14 +753,11 @@ def _update_with_cluster_metadata( return info @staticmethod - def _get_clusters(file_study: FileStudy, area: str, metadata_patch: Patch) -> List[ClusterInfoDTO]: + def _get_clusters(file_study: FileStudy, area: str, metadata_patch: Patch) -> t.List[ClusterInfoDTO]: thermal_clusters_data = file_study.tree.get(["input", "thermal", "clusters", area, "list"]) cluster_patch = metadata_patch.thermal_clusters or {} - return [ - AreaManager._update_with_cluster_metadata( - area, - ClusterInfoDTO.parse_obj({**thermal_clusters_data[tid], "id": tid}), - cluster_patch, - ) - for tid in thermal_clusters_data + result = [ + AreaManager._update_with_cluster_metadata(area, ClusterInfoDTO(id=tid, **obj), cluster_patch) + for tid, obj in thermal_clusters_data.items() ] + return result diff --git a/antarest/study/business/areas/properties_management.py b/antarest/study/business/areas/properties_management.py index 7b09a08cf4..2014c554dc 100644 --- a/antarest/study/business/areas/properties_management.py +++ b/antarest/study/business/areas/properties_management.py @@ -2,11 +2,11 @@ from builtins import sorted from typing import Any, Dict, Iterable, List, Optional, Set, cast -from pydantic import Field, root_validator +from pydantic import root_validator -from antarest.study.business.enum_ignore_case import EnumIgnoreCase from antarest.study.business.utils import FieldInfo, FormFieldsBaseModel, execute_or_add_commands from antarest.study.model import Study +from antarest.study.storage.rawstudy.model.filesystem.config.area import AdequacyPatchMode from antarest.study.storage.rawstudy.model.filesystem.folder_node import ChildNotFoundError from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig @@ -37,12 +37,6 @@ def decode_filter(encoded_value: Set[str], current_filter: Optional[str] = None) return ", ".join(sort_filter_options(encoded_value)) -class AdequacyPatchMode(EnumIgnoreCase): - OUTSIDE = "outside" - INSIDE = "inside" - VIRTUAL = "virtual" - - class PropertiesFormFields(FormFieldsBaseModel): energy_cost_unsupplied: Optional[float] energy_cost_spilled: Optional[float] diff --git a/antarest/study/business/areas/renewable_management.py b/antarest/study/business/areas/renewable_management.py index 7858409f17..1009c9d22c 100644 --- a/antarest/study/business/areas/renewable_management.py +++ b/antarest/study/business/areas/renewable_management.py @@ -1,11 +1,14 @@ +import collections import json import typing as t from pydantic import validator from antarest.core.exceptions import DuplicateRenewableCluster, RenewableClusterConfigNotFound, RenewableClusterNotFound +from antarest.core.model import JSON +from antarest.study.business.all_optional_meta import AllOptionalMetaclass, camel_case_model from antarest.study.business.enum_ignore_case import EnumIgnoreCase -from antarest.study.business.utils import AllOptionalMetaclass, camel_case_model, execute_or_add_commands +from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import Study from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.renewable import ( @@ -21,16 +24,9 @@ from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig -__all__ = ( - "RenewableClusterInput", - "RenewableClusterCreation", - "RenewableClusterOutput", - "RenewableManager", - "TimeSeriesInterpretation", -) - _CLUSTER_PATH = "input/renewables/clusters/{area_id}/list/{cluster_id}" _CLUSTERS_PATH = "input/renewables/clusters/{area_id}/list" +_ALL_CLUSTERS_PATH = "input/renewables/clusters" class TimeSeriesInterpretation(EnumIgnoreCase): @@ -144,6 +140,42 @@ def get_clusters(self, study: Study, area_id: str) -> t.Sequence[RenewableCluste return [create_renewable_output(study.version, cluster_id, cluster) for cluster_id, cluster in clusters.items()] + def get_all_renewables_props( + self, + study: Study, + ) -> t.Mapping[str, t.Mapping[str, RenewableClusterOutput]]: + """ + Retrieve all renewable clusters from all areas within a study. + + Args: + study: Study from which to retrieve the clusters. + + Returns: + A mapping of area IDs to a mapping of cluster IDs to cluster output. + + Raises: + RenewableClusterConfigNotFound: If no clusters are found in the specified area. + """ + + file_study = self._get_file_study(study) + path = _ALL_CLUSTERS_PATH + try: + # may raise KeyError if the path is missing + clusters = file_study.tree.get(path.split("/"), depth=5) + # may raise KeyError if "list" is missing + clusters = {area_id: cluster_list["list"] for area_id, cluster_list in clusters.items()} + except KeyError: + raise RenewableClusterConfigNotFound(path) + + study_version = study.version + renewables_by_areas: t.MutableMapping[str, t.MutableMapping[str, RenewableClusterOutput]] + renewables_by_areas = collections.defaultdict(dict) + for area_id, cluster_obj in clusters.items(): + for cluster_id, cluster in cluster_obj.items(): + renewables_by_areas[area_id][cluster_id] = create_renewable_output(study_version, cluster_id, cluster) + + return renewables_by_areas + def create_cluster( self, study: Study, area_id: str, cluster_data: RenewableClusterCreation ) -> RenewableClusterOutput: @@ -327,3 +359,42 @@ def duplicate_cluster( execute_or_add_commands(study, self._get_file_study(study), commands, self.storage_service) return RenewableClusterOutput(**new_config.dict(by_alias=False)) + + def update_renewables_props( + self, + study: Study, + update_renewables_by_areas: t.Mapping[str, t.Mapping[str, RenewableClusterInput]], + ) -> t.Mapping[str, t.Mapping[str, RenewableClusterOutput]]: + old_renewables_by_areas = self.get_all_renewables_props(study) + new_renewables_by_areas = {area_id: dict(clusters) for area_id, clusters in old_renewables_by_areas.items()} + + # Prepare the commands to update the renewable clusters. + commands = [] + for area_id, update_renewables_by_ids in update_renewables_by_areas.items(): + old_renewables_by_ids = old_renewables_by_areas[area_id] + for renewable_id, update_cluster in update_renewables_by_ids.items(): + # Update the renewable cluster properties. + old_cluster = old_renewables_by_ids[renewable_id] + new_cluster = old_cluster.copy(update=update_cluster.dict(by_alias=False, exclude_none=True)) + new_renewables_by_areas[area_id][renewable_id] = new_cluster + + # Convert the DTO to a configuration object and update the configuration file. + properties = create_renewable_config( + study.version, **new_cluster.dict(by_alias=False, exclude_none=True) + ) + path = _CLUSTER_PATH.format(area_id=area_id, cluster_id=renewable_id) + cmd = UpdateConfig( + target=path, + data=json.loads(properties.json(by_alias=True, exclude={"id"})), + command_context=self.storage_service.variant_study_service.command_factory.command_context, + ) + commands.append(cmd) + + file_study = self.storage_service.get_storage(study).get_raw(study) + execute_or_add_commands(study, file_study, commands, self.storage_service) + + return new_renewables_by_areas + + @staticmethod + def get_table_schema() -> JSON: + return RenewableClusterOutput.schema() diff --git a/antarest/study/business/areas/st_storage_management.py b/antarest/study/business/areas/st_storage_management.py index c6d4e9f868..373f8c3ea4 100644 --- a/antarest/study/business/areas/st_storage_management.py +++ b/antarest/study/business/areas/st_storage_management.py @@ -1,3 +1,4 @@ +import collections import functools import json import operator @@ -15,13 +16,16 @@ STStorageMatrixNotFound, STStorageNotFound, ) -from antarest.study.business.utils import AllOptionalMetaclass, camel_case_model, execute_or_add_commands +from antarest.core.model import JSON +from antarest.study.business.all_optional_meta import AllOptionalMetaclass, camel_case_model +from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import Study from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import ( - STStorageConfig, + STStorage880Config, + STStorage880Properties, + STStorageConfigType, STStorageGroup, - STStorageProperties, create_st_storage_config, ) from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy @@ -32,18 +36,9 @@ from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig -__all__ = ( - "STStorageManager", - "STStorageCreation", - "STStorageInput", - "STStorageOutput", - "STStorageMatrix", - "STStorageTimeSeries", -) - @camel_case_model -class STStorageInput(STStorageProperties, metaclass=AllOptionalMetaclass, use_none=True): +class STStorageInput(STStorage880Properties, metaclass=AllOptionalMetaclass, use_none=True): """ Model representing the form used to EDIT an existing short-term storage. """ @@ -79,13 +74,13 @@ def validate_name(cls, name: t.Optional[str]) -> str: return name # noinspection PyUnusedLocal - def to_config(self, study_version: t.Union[str, int]) -> STStorageConfig: + def to_config(self, study_version: t.Union[str, int]) -> STStorageConfigType: values = self.dict(by_alias=False, exclude_none=True) - return STStorageConfig(**values) + return create_st_storage_config(study_version=study_version, **values) @camel_case_model -class STStorageOutput(STStorageConfig): +class STStorageOutput(STStorage880Config, metaclass=AllOptionalMetaclass, use_none=True): """ Model representing the form used to display the details of a short-term storage entry. """ @@ -104,12 +99,6 @@ def schema_extra(schema: t.MutableMapping[str, t.Any]) -> None: initial_level_optim=True, ) - @classmethod - def from_config(cls, storage_id: str, config: t.Mapping[str, t.Any]) -> "STStorageOutput": - storage = STStorageConfig(**config, id=storage_id) - values = storage.dict(by_alias=False) - return cls(**values) - # ============= # Time series @@ -229,6 +218,7 @@ def validate_rule_curve( _STORAGE_LIST_PATH = "input/st-storage/clusters/{area_id}/list/{storage_id}" _STORAGE_SERIES_PATH = "input/st-storage/series/{area_id}/{storage_id}/{ts_name}" +_ALL_STORAGE_PATH = "input/st-storage/clusters" def _get_values_by_ids(file_study: FileStudy, area_id: str) -> t.Mapping[str, t.Mapping[str, t.Any]]: @@ -241,6 +231,16 @@ def _get_values_by_ids(file_study: FileStudy, area_id: str) -> t.Mapping[str, t. raise STStorageConfigNotFound(path, area_id) from None +def create_storage_output( + study_version: t.Union[str, int], + cluster_id: str, + config: t.Mapping[str, t.Any], +) -> "STStorageOutput": + obj = create_st_storage_config(study_version=study_version, **config, id=cluster_id) + kwargs = obj.dict(by_alias=False) + return STStorageOutput(**kwargs) + + class STStorageManager: """ Manage short-term storage configuration in a study @@ -291,7 +291,7 @@ def create_storage( output = self.get_storage(study, area_id, storage_id=storage.id) return output - def _make_create_cluster_cmd(self, area_id: str, cluster: STStorageConfig) -> CreateSTStorage: + def _make_create_cluster_cmd(self, area_id: str, cluster: STStorageConfigType) -> CreateSTStorage: command = CreateSTStorage( area_id=area_id, parameters=cluster, @@ -326,11 +326,80 @@ def get_storages( # Sort STStorageConfig by groups and then by name order_by = operator.attrgetter("group", "name") - all_configs = sorted( - (STStorageConfig(id=storage_id, **options) for storage_id, options in config.items()), - key=order_by, - ) - return tuple(STStorageOutput(**config.dict(by_alias=False)) for config in all_configs) + study_version = int(study.version) + storages = [create_storage_output(study_version, storage_id, options) for storage_id, options in config.items()] + return sorted(storages, key=order_by) + + def get_all_storages_props( + self, + study: Study, + ) -> t.Mapping[str, t.Mapping[str, STStorageOutput]]: + """ + Retrieve all short-term storages from all areas within a study. + + Args: + study: Study from which to retrieve the storages. + + Returns: + A mapping of area IDs to a mapping of storage IDs to storage configurations. + + Raises: + STStorageConfigNotFound: If no storages are found in the specified area. + """ + + file_study = self._get_file_study(study) + path = _ALL_STORAGE_PATH + try: + # may raise KeyError if the path is missing + storages = file_study.tree.get(path.split("/"), depth=5) + # may raise KeyError if "list" is missing + storages = {area_id: cluster_list["list"] for area_id, cluster_list in storages.items()} + except KeyError: + raise STStorageConfigNotFound(path) from None + + study_version = study.version + storages_by_areas: t.MutableMapping[str, t.MutableMapping[str, STStorageOutput]] + storages_by_areas = collections.defaultdict(dict) + for area_id, cluster_obj in storages.items(): + for cluster_id, cluster in cluster_obj.items(): + storages_by_areas[area_id][cluster_id] = create_storage_output(study_version, cluster_id, cluster) + + return storages_by_areas + + def update_storages_props( + self, + study: Study, + update_storages_by_areas: t.Mapping[str, t.Mapping[str, STStorageInput]], + ) -> t.Mapping[str, t.Mapping[str, STStorageOutput]]: + old_storages_by_areas = self.get_all_storages_props(study) + new_storages_by_areas = {area_id: dict(clusters) for area_id, clusters in old_storages_by_areas.items()} + + # Prepare the commands to update the storage clusters. + commands = [] + for area_id, update_storages_by_ids in update_storages_by_areas.items(): + old_storages_by_ids = old_storages_by_areas[area_id] + for storage_id, update_cluster in update_storages_by_ids.items(): + # Update the storage cluster properties. + old_cluster = old_storages_by_ids[storage_id] + new_cluster = old_cluster.copy(update=update_cluster.dict(by_alias=False, exclude_none=True)) + new_storages_by_areas[area_id][storage_id] = new_cluster + + # Convert the DTO to a configuration object and update the configuration file. + properties = create_st_storage_config( + study.version, **new_cluster.dict(by_alias=False, exclude_none=True) + ) + path = _STORAGE_LIST_PATH.format(area_id=area_id, storage_id=storage_id) + cmd = UpdateConfig( + target=path, + data=json.loads(properties.json(by_alias=True, exclude={"id"})), + command_context=self.storage_service.variant_study_service.command_factory.command_context, + ) + commands.append(cmd) + + file_study = self.storage_service.get_storage(study).get_raw(study) + execute_or_add_commands(study, file_study, commands, self.storage_service) + + return new_storages_by_areas def get_storage( self, @@ -356,7 +425,7 @@ def get_storage( config = file_study.tree.get(path.split("/"), depth=1) except KeyError: raise STStorageNotFound(path, storage_id) from None - return STStorageOutput.from_config(storage_id, config) + return create_storage_output(int(study.version), storage_id, config) def update_storage( self, @@ -469,7 +538,12 @@ def duplicate_cluster(self, study: Study, area_id: str, source_id: str, new_clus # Cluster duplication current_cluster = self.get_storage(study, area_id, source_id) current_cluster.name = new_cluster_name - creation_form = STStorageCreation(**current_cluster.dict(by_alias=False, exclude={"id"})) + fields_to_exclude = {"id"} + # We should remove the field 'enabled' for studies before v8.8 as it didn't exist + if int(study.version) < 880: + fields_to_exclude.add("enabled") + creation_form = STStorageCreation(**current_cluster.dict(by_alias=False, exclude=fields_to_exclude)) + new_config = creation_form.to_config(study.version) create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config) @@ -613,3 +687,7 @@ def validate_matrices( # Validation successful return True + + @staticmethod + def get_table_schema() -> JSON: + return STStorageOutput.schema() diff --git a/antarest/study/business/areas/thermal_management.py b/antarest/study/business/areas/thermal_management.py index 9fea2c568d..205965eb54 100644 --- a/antarest/study/business/areas/thermal_management.py +++ b/antarest/study/business/areas/thermal_management.py @@ -1,10 +1,20 @@ +import collections import json import typing as t +from pathlib import Path from pydantic import validator -from antarest.core.exceptions import DuplicateThermalCluster, ThermalClusterConfigNotFound, ThermalClusterNotFound -from antarest.study.business.utils import AllOptionalMetaclass, camel_case_model, execute_or_add_commands +from antarest.core.exceptions import ( + DuplicateThermalCluster, + MatrixWidthMismatchError, + ThermalClusterConfigNotFound, + ThermalClusterNotFound, + WrongMatrixHeightError, +) +from antarest.core.model import JSON +from antarest.study.business.all_optional_meta import AllOptionalMetaclass, camel_case_model +from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import Study from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.thermal import ( @@ -29,6 +39,7 @@ _CLUSTER_PATH = "input/thermal/clusters/{area_id}/list/{cluster_id}" _CLUSTERS_PATH = "input/thermal/clusters/{area_id}/list" +_ALL_CLUSTERS_PATH = "input/thermal/clusters" @camel_case_model @@ -178,6 +189,79 @@ def get_clusters( study_version = study.version return [create_thermal_output(study_version, cluster_id, cluster) for cluster_id, cluster in clusters.items()] + def get_all_thermals_props( + self, + study: Study, + ) -> t.Mapping[str, t.Mapping[str, ThermalClusterOutput]]: + """ + Retrieve all thermal clusters from all areas within a study. + + Args: + study: Study from which to retrieve the clusters. + + Returns: + A mapping of area IDs to a mapping of cluster IDs to thermal cluster configurations. + + Raises: + ThermalClusterConfigNotFound: If no clusters are found in the specified area. + """ + + file_study = self._get_file_study(study) + path = _ALL_CLUSTERS_PATH + try: + # may raise KeyError if the path is missing + clusters = file_study.tree.get(path.split("/"), depth=5) + # may raise KeyError if "list" is missing + clusters = {area_id: cluster_list["list"] for area_id, cluster_list in clusters.items()} + except KeyError: + raise ThermalClusterConfigNotFound(path) from None + + study_version = study.version + thermals_by_areas: t.MutableMapping[str, t.MutableMapping[str, ThermalClusterOutput]] + thermals_by_areas = collections.defaultdict(dict) + for area_id, cluster_obj in clusters.items(): + for cluster_id, cluster in cluster_obj.items(): + thermals_by_areas[area_id][cluster_id] = create_thermal_output(study_version, cluster_id, cluster) + + return thermals_by_areas + + def update_thermals_props( + self, + study: Study, + update_thermals_by_areas: t.Mapping[str, t.Mapping[str, ThermalClusterInput]], + ) -> t.Mapping[str, t.Mapping[str, ThermalClusterOutput]]: + old_thermals_by_areas = self.get_all_thermals_props(study) + new_thermals_by_areas = {area_id: dict(clusters) for area_id, clusters in old_thermals_by_areas.items()} + + # Prepare the commands to update the thermal clusters. + commands = [] + for area_id, update_thermals_by_ids in update_thermals_by_areas.items(): + old_thermals_by_ids = old_thermals_by_areas[area_id] + for thermal_id, update_cluster in update_thermals_by_ids.items(): + # Update the thermal cluster properties. + old_cluster = old_thermals_by_ids[thermal_id] + new_cluster = old_cluster.copy(update=update_cluster.dict(by_alias=False, exclude_none=True)) + new_thermals_by_areas[area_id][thermal_id] = new_cluster + + # Convert the DTO to a configuration object and update the configuration file. + properties = create_thermal_config(study.version, **new_cluster.dict(by_alias=False, exclude_none=True)) + path = _CLUSTER_PATH.format(area_id=area_id, cluster_id=thermal_id) + cmd = UpdateConfig( + target=path, + data=json.loads(properties.json(by_alias=True, exclude={"id"})), + command_context=self.storage_service.variant_study_service.command_factory.command_context, + ) + commands.append(cmd) + + file_study = self.storage_service.get_storage(study).get_raw(study) + execute_or_add_commands(study, file_study, commands, self.storage_service) + + return new_thermals_by_areas + + @staticmethod + def get_table_schema() -> JSON: + return ThermalClusterOutput.schema() + def create_cluster(self, study: Study, area_id: str, cluster_data: ThermalClusterCreation) -> ThermalClusterOutput: """ Create a new cluster. @@ -338,6 +422,11 @@ def duplicate_cluster( f"input/thermal/prepro/{area_id}/{lower_new_id}/modulation", f"input/thermal/prepro/{area_id}/{lower_new_id}/data", ] + if int(study.version) >= 870: + source_paths.append(f"input/thermal/series/{area_id}/{lower_source_id}/CO2Cost") + source_paths.append(f"input/thermal/series/{area_id}/{lower_source_id}/fuelCost") + new_paths.append(f"input/thermal/series/{area_id}/{lower_new_id}/CO2Cost") + new_paths.append(f"input/thermal/series/{area_id}/{lower_new_id}/fuelCost") # Prepare and execute commands commands: t.List[t.Union[CreateCluster, ReplaceMatrix]] = [create_cluster_cmd] @@ -351,3 +440,38 @@ def duplicate_cluster( execute_or_add_commands(study, self._get_file_study(study), commands, self.storage_service) return ThermalClusterOutput(**new_config.dict(by_alias=False)) + + def validate_series(self, study: Study, area_id: str, cluster_id: str) -> bool: + lower_cluster_id = cluster_id.lower() + thermal_cluster_path = Path(f"input/thermal/series/{area_id}/{lower_cluster_id}") + series_path = [thermal_cluster_path / "series"] + if int(study.version) >= 870: + series_path.append(thermal_cluster_path / "CO2Cost") + series_path.append(thermal_cluster_path / "fuelCost") + + ts_widths: t.MutableMapping[int, t.MutableSequence[str]] = {} + for ts_path in series_path: + matrix = self.storage_service.get_storage(study).get(study, ts_path.as_posix()) + matrix_data = matrix["data"] + matrix_height = len(matrix_data) + # We ignore empty matrices as there are default matrices for the simulator. + if matrix_data != [[]] and matrix_height != 8760: + raise WrongMatrixHeightError( + f"The matrix {ts_path.name} should have 8760 rows, currently: {matrix_height}" + ) + matrix_width = len(matrix_data[0]) + if matrix_width > 1: + ts_widths.setdefault(matrix_width, []).append(ts_path.name) + + if len(ts_widths) > 1: + messages = [] + for width, name_list in ts_widths.items(): + names = ", ".join([f"'{name}'" for name in name_list]) + message = { + 1: f"matrix {names} has {width} columns", + 2: f"matrices {names} have {width} columns", + }[min(2, len(name_list))] + messages.append(message) + raise MatrixWidthMismatchError("Mismatch widths: " + "; ".join(messages)) + + return True diff --git a/antarest/study/business/binding_constraint_management.py b/antarest/study/business/binding_constraint_management.py index a382277bd5..28881ef874 100644 --- a/antarest/study/business/binding_constraint_management.py +++ b/antarest/study/business/binding_constraint_management.py @@ -1,27 +1,33 @@ import collections import itertools +import json import logging -from typing import Any, Dict, List, Mapping, MutableSequence, Optional, Sequence, Union +import typing as t import numpy as np from pydantic import BaseModel, Field, root_validator, validator from requests.utils import CaseInsensitiveDict from antarest.core.exceptions import ( - BindingConstraintNotFoundError, - ConstraintAlreadyExistError, - ConstraintIdNotFoundError, + BindingConstraintNotFound, + ConstraintTermNotFound, DuplicateConstraintName, - IncoherenceBetweenMatricesLength, + DuplicateConstraintTerm, InvalidConstraintName, + InvalidConstraintTerm, InvalidFieldForVersionError, - MissingDataError, - NoConstraintError, + MatrixWidthMismatchError, + WrongMatrixHeightError, ) +from antarest.core.model import JSON from antarest.core.utils.string import to_camel_case -from antarest.study.business.utils import AllOptionalMetaclass, camel_case_model, execute_or_add_commands +from antarest.study.business.all_optional_meta import camel_case_model +from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import Study -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( + BindingConstraintFrequency, + BindingConstraintOperator, +) from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.storage_service import StudyStorageService @@ -37,12 +43,14 @@ from antarest.study.storage.variantstudy.business.matrix_constants.binding_constraint.series_before_v87 import ( default_bc_weekly_daily as default_bc_weekly_daily_86, ) -from antarest.study.storage.variantstudy.model.command.common import BindingConstraintOperator from antarest.study.storage.variantstudy.model.command.create_binding_constraint import ( + DEFAULT_GROUP, + EXPECTED_MATRIX_SHAPES, + TERM_MATRICES, BindingConstraintMatrices, - BindingConstraintProperties, - BindingConstraintProperties870, + BindingConstraintPropertiesBase, CreateBindingConstraint, + OptionalProperties, ) from antarest.study.storage.variantstudy.model.command.remove_binding_constraint import RemoveBindingConstraint from antarest.study.storage.variantstudy.model.command.update_binding_constraint import UpdateBindingConstraint @@ -50,9 +58,6 @@ logger = logging.getLogger(__name__) -DEFAULT_GROUP = "default" -"""Default group name for binding constraints if missing or empty.""" - class LinkTerm(BaseModel): """ @@ -103,13 +108,13 @@ class ConstraintTerm(BaseModel): data: the constraint term data (link or cluster), if any. """ - id: Optional[str] - weight: Optional[float] - offset: Optional[int] - data: Optional[Union[LinkTerm, ClusterTerm]] + id: t.Optional[str] + weight: t.Optional[float] + offset: t.Optional[int] + data: t.Optional[t.Union[LinkTerm, ClusterTerm]] @validator("id") - def id_to_lower(cls, v: Optional[str]) -> Optional[str]: + def id_to_lower(cls, v: t.Optional[str]) -> t.Optional[str]: """Ensure the ID is lower case.""" if v is None: return None @@ -140,11 +145,11 @@ class ConstraintFilters(BaseModel, frozen=True, extra="forbid"): """ bc_id: str = "" - enabled: Optional[bool] = None - operator: Optional[BindingConstraintOperator] = None + enabled: t.Optional[bool] = None + operator: t.Optional[BindingConstraintOperator] = None comments: str = "" group: str = "" - time_step: Optional[BindingConstraintFrequency] = None + time_step: t.Optional[BindingConstraintFrequency] = None area_name: str = "" cluster_name: str = "" link_id: str = "" @@ -224,13 +229,13 @@ def match_filters(self, constraint: "ConstraintOutput") -> bool: @camel_case_model -class ConstraintInput870(BindingConstraintProperties870, metaclass=AllOptionalMetaclass, use_none=True): +class ConstraintInput870(OptionalProperties): pass @camel_case_model class ConstraintInput(BindingConstraintMatrices, ConstraintInput870): - terms: MutableSequence[ConstraintTerm] = Field( + terms: t.MutableSequence[ConstraintTerm] = Field( default_factory=lambda: [], ) @@ -240,8 +245,8 @@ class ConstraintCreation(ConstraintInput): name: str @root_validator(pre=True) - def check_matrices_dimensions(cls, values: Dict[str, Any]) -> Dict[str, Any]: - for _key in ["time_step", "less_term_matrix", "equal_term_matrix", "greater_term_matrix"]: + def check_matrices_dimensions(cls, values: t.Dict[str, t.Any]) -> t.Dict[str, t.Any]: + for _key in ["time_step"] + TERM_MATRICES: _camel = to_camel_case(_key) values[_key] = values.pop(_camel, values.get(_key)) @@ -255,15 +260,11 @@ def check_matrices_dimensions(cls, values: Dict[str, Any]) -> Dict[str, Any]: # Also, we use the same matrices for "weekly" and "daily" frequencies, # because the solver calculates the weekly matrix from the daily matrix. # See https://github.com/AntaresSimulatorTeam/AntaREST/issues/1843 - expected_rows = { - BindingConstraintFrequency.HOURLY: 8784, - BindingConstraintFrequency.DAILY: 366, - BindingConstraintFrequency.WEEKLY: 366, - }[_time_step] + expected_rows = EXPECTED_MATRIX_SHAPES[_time_step][0] # Collect the matrix shapes matrix_shapes = {} - for _field_name in ["values", "less_term_matrix", "equal_term_matrix", "greater_term_matrix"]: + for _field_name in ["values"] + TERM_MATRICES: if _matrix := values.get(_field_name): _array = np.array(_matrix) # We only store the shape if the array is not empty @@ -295,58 +296,102 @@ def check_matrices_dimensions(cls, values: Dict[str, Any]) -> Dict[str, Any]: @camel_case_model -class ConstraintOutputBase(BindingConstraintProperties): +class ConstraintOutputBase(BindingConstraintPropertiesBase): id: str name: str - terms: MutableSequence[ConstraintTerm] = Field( - default_factory=lambda: [], - ) + terms: t.MutableSequence[ConstraintTerm] = Field(default_factory=lambda: []) + + +@camel_case_model +class ConstraintOutput830(ConstraintOutputBase): + filter_year_by_year: str = "" + filter_synthesis: str = "" @camel_case_model -class ConstraintOutput870(ConstraintOutputBase): +class ConstraintOutput870(ConstraintOutput830): group: str = DEFAULT_GROUP -ConstraintOutput = Union[ConstraintOutputBase, ConstraintOutput870] +# WARNING: Do not change the order of the following line, it is used to determine +# the type of the output constraint in the FastAPI endpoint. +ConstraintOutput = t.Union[ConstraintOutputBase, ConstraintOutput830, ConstraintOutput870] -def _validate_binding_constraints(file_study: FileStudy, bcs: Sequence[ConstraintOutput]) -> bool: +def _get_references_by_widths( + file_study: FileStudy, bcs: t.Sequence[ConstraintOutput] +) -> t.Mapping[int, t.Sequence[t.Tuple[str, str]]]: + """ + Iterates over each BC and its associated matrices. + For each matrix, it checks its width according to the expected matrix shapes. + It then groups the binding constraints by these widths. + + Notes: + The height of the matrices may vary depending on the time step, + but the width should be consistent within a group of binding constraints. + """ if int(file_study.config.version) < 870: matrix_id_fmts = {"{bc_id}"} else: matrix_id_fmts = {"{bc_id}_eq", "{bc_id}_lt", "{bc_id}_gt"} - references_by_shapes = collections.defaultdict(list) + references_by_width: t.Dict[int, t.List[t.Tuple[str, str]]] = {} _total = len(bcs) * len(matrix_id_fmts) for _index, (bc, fmt) in enumerate(itertools.product(bcs, matrix_id_fmts), 1): + bc_id = bc.id matrix_id = fmt.format(bc_id=bc.id) - logger.info(f"⏲ Validating BC '{bc.id}': {matrix_id=} [{_index}/{_total}]") - _obj = file_study.tree.get(url=["input", "bindingconstraints", matrix_id]) - _array = np.array(_obj["data"], dtype=float) - if _array.size == 0 or _array.shape[1] == 1: + logger.info(f"⏲ Validating BC '{bc_id}': {matrix_id=} [{_index}/{_total}]") + obj = file_study.tree.get(url=["input", "bindingconstraints", matrix_id]) + matrix = np.array(obj["data"], dtype=float) + # We ignore empty matrices as there are default matrices for the simulator. + if not matrix.size: continue - references_by_shapes[_array.shape].append((bc.id, matrix_id)) - del _obj - del _array - - if len(references_by_shapes) > 1: - most_common = collections.Counter(references_by_shapes.keys()).most_common() - invalid_constraints = collections.defaultdict(list) - for shape, _ in most_common[1:]: - references = references_by_shapes[shape] + + matrix_height = matrix.shape[0] + expected_height = EXPECTED_MATRIX_SHAPES[bc.time_step][0] + if matrix_height != expected_height: + raise WrongMatrixHeightError( + f"The binding constraint '{bc.name}' should have {expected_height} rows, currently: {matrix_height}" + ) + matrix_width = matrix.shape[1] + if matrix_width > 1: + references_by_width.setdefault(matrix_width, []).append((bc_id, matrix_id)) + + return references_by_width + + +def _validate_binding_constraints(file_study: FileStudy, bcs: t.Sequence[ConstraintOutput]) -> bool: + """ + Validates the binding constraints within a group. + """ + references_by_widths = _get_references_by_widths(file_study, bcs) + + if len(references_by_widths) > 1: + most_common = collections.Counter(references_by_widths.keys()).most_common() + invalid_constraints: t.Dict[str, str] = {} + + for width, _ in most_common[1:]: + references = references_by_widths[width] for bc_id, matrix_id in references: - invalid_constraints[bc_id].append(f"'{matrix_id}' {shape}") - expected_shape = most_common[0][0] - detail = { - "msg": f"Matrix shapes mismatch in binding constraints group. Expected shape: {expected_shape}", - "invalid_constraints": dict(invalid_constraints), - } - raise IncoherenceBetweenMatricesLength(detail) + existing_key = invalid_constraints.get(bc_id, "") + if existing_key: + existing_key += ", " + existing_key += f"'{matrix_id}' has {width} columns" + invalid_constraints[bc_id] = existing_key + + expected_width = most_common[0][0] + raise MatrixWidthMismatchError( + f"Mismatch widths: the most common width in the group is {expected_width}" + f" but we have: {invalid_constraints!r}" + ) return True +# noinspection SpellCheckingInspection +_ALL_BINDING_CONSTRAINTS_PATH = "input/bindingconstraints/bindingconstraints" + + class BindingConstraintManager: def __init__( self, @@ -355,9 +400,7 @@ def __init__( self.storage_service = storage_service @staticmethod - def parse_and_add_terms( - key: str, value: Any, adapted_constraint: Union[ConstraintOutputBase, ConstraintOutput870] - ) -> None: + def parse_and_add_terms(key: str, value: t.Any, adapted_constraint: ConstraintOutput) -> None: """Parse a single term from the constraint dictionary and add it to the adapted_constraint model.""" if "%" in key or "." in key: separator = "%" if "%" in key else "." @@ -391,26 +434,26 @@ def parse_and_add_terms( ) @staticmethod - def constraint_model_adapter(constraint: Mapping[str, Any], version: int) -> ConstraintOutput: + def constraint_model_adapter(constraint: t.Mapping[str, t.Any], version: int) -> ConstraintOutput: """ - Adapts a constraint configuration to the appropriate version-specific format. + Adapts a binding constraint configuration to the appropriate model version. - Parameters: - - constraint: A dictionary or model representing the constraint to be adapted. - This can either be a dictionary coming from client input or an existing - model that needs reformatting. - - version: An integer indicating the target version of the study configuration. This is used to + Args: + constraint: A dictionary or model representing the constraint to be adapted. + This can either be a dictionary coming from client input or an existing + model that needs reformatting. + version: An integer indicating the target version of the study configuration. This is used to determine which model class to instantiate and which default values to apply. Returns: - - A new instance of either `ConstraintOutputBase` or `ConstraintOutput870`, - populated with the adapted values from the input constraint, and conforming to the - structure expected by the specified version. + A new instance of either `ConstraintOutputBase`, `ConstraintOutput830`, or `ConstraintOutput870`, + populated with the adapted values from the input constraint, and conforming to the + structure expected by the specified version. Note: - This method is crucial for ensuring backward compatibility and future-proofing the application - as it evolves. It allows client-side data to be accurately represented within the config and - ensures data integrity when storing or retrieving constraint configurations from the database. + This method is crucial for ensuring backward compatibility and future-proofing the application + as it evolves. It allows client-side data to be accurately represented within the config and + ensures data integrity when storing or retrieving constraint configurations from the database. """ constraint_output = { @@ -423,18 +466,20 @@ def constraint_model_adapter(constraint: Mapping[str, Any], version: int) -> Con "terms": constraint.get("terms", []), } - if version >= 840: - constraint_output["filter_year_by_year"] = constraint.get("filter_year_by_year") or constraint.get( - "filter-year-by-year", "" - ) - constraint_output["filter_synthesis"] = constraint.get("filter_synthesis") or constraint.get( - "filter-synthesis", "" - ) - - adapted_constraint: Union[ConstraintOutputBase, ConstraintOutput870] + if version >= 830: + _filter_year_by_year = constraint.get("filter_year_by_year") or constraint.get("filter-year-by-year", "") + _filter_synthesis = constraint.get("filter_synthesis") or constraint.get("filter-synthesis", "") + constraint_output["filter_year_by_year"] = _filter_year_by_year + constraint_output["filter_synthesis"] = _filter_synthesis if version >= 870: constraint_output["group"] = constraint.get("group", DEFAULT_GROUP) + + # Choose the right model according to the version + adapted_constraint: ConstraintOutput + if version >= 870: adapted_constraint = ConstraintOutput870(**constraint_output) + elif version >= 830: + adapted_constraint = ConstraintOutput830(**constraint_output) else: adapted_constraint = ConstraintOutputBase(**constraint_output) @@ -447,7 +492,7 @@ def constraint_model_adapter(constraint: Mapping[str, Any], version: int) -> Con return adapted_constraint @staticmethod - def terms_to_coeffs(terms: Sequence[ConstraintTerm]) -> Dict[str, List[float]]: + def terms_to_coeffs(terms: t.Sequence[ConstraintTerm]) -> t.Dict[str, t.List[float]]: """ Converts a sequence of terms into a dictionary mapping each term's ID to its coefficients, including the weight and, optionally, the offset. @@ -476,26 +521,26 @@ def get_binding_constraint(self, study: Study, bc_id: str) -> ConstraintOutput: A ConstraintOutput object representing the binding constraint with the specified ID. Raises: - BindingConstraintNotFoundError: If no binding constraint with the specified ID is found. + BindingConstraintNotFound: If no binding constraint with the specified ID is found. """ storage_service = self.storage_service.get_storage(study) file_study = storage_service.get_raw(study) config = file_study.tree.get(["input", "bindingconstraints", "bindingconstraints"]) - constraints_by_id: Dict[str, ConstraintOutput] = CaseInsensitiveDict() # type: ignore + constraints_by_id: t.Dict[str, ConstraintOutput] = CaseInsensitiveDict() # type: ignore for constraint in config.values(): constraint_config = self.constraint_model_adapter(constraint, int(study.version)) constraints_by_id[constraint_config.id] = constraint_config if bc_id not in constraints_by_id: - raise BindingConstraintNotFoundError(f"Binding constraint '{bc_id}' not found") + raise BindingConstraintNotFound(f"Binding constraint '{bc_id}' not found") return constraints_by_id[bc_id] def get_binding_constraints( self, study: Study, filters: ConstraintFilters = ConstraintFilters() - ) -> Sequence[ConstraintOutput]: + ) -> t.Sequence[ConstraintOutput]: """ Retrieves all binding constraints within a given study, optionally filtered by specific criteria. @@ -513,7 +558,7 @@ def get_binding_constraints( filtered_constraints = list(filter(lambda c: filters.match_filters(c), outputs)) return filtered_constraints - def get_grouped_constraints(self, study: Study) -> Mapping[str, Sequence[ConstraintOutput]]: + def get_grouped_constraints(self, study: Study) -> t.Mapping[str, t.Sequence[ConstraintOutput]]: """ Retrieves and groups all binding constraints by their group names within a given study. @@ -542,7 +587,7 @@ def get_grouped_constraints(self, study: Study) -> Mapping[str, Sequence[Constra return grouped_constraints - def get_constraints_by_group(self, study: Study, group_name: str) -> Sequence[ConstraintOutput]: + def get_constraints_by_group(self, study: Study, group_name: str) -> t.Sequence[ConstraintOutput]: """ Retrieve all binding constraints belonging to a specified group within a study. @@ -554,12 +599,12 @@ def get_constraints_by_group(self, study: Study, group_name: str) -> Sequence[Co A list of ConstraintOutput objects that belong to the specified group. Raises: - BindingConstraintNotFoundError: If the specified group name is not found among the constraint groups. + BindingConstraintNotFound: If the specified group name is not found among the constraint groups. """ grouped_constraints = self.get_grouped_constraints(study) if group_name not in grouped_constraints: - raise BindingConstraintNotFoundError(f"Group '{group_name}' not found") + raise BindingConstraintNotFound(f"Group '{group_name}' not found") return grouped_constraints[group_name] @@ -580,14 +625,14 @@ def validate_constraint_group(self, study: Study, group_name: str) -> bool: True if the group exists and the constraints within the group are valid; False otherwise. Raises: - BindingConstraintNotFoundError: If no matching group name is found in a case-insensitive manner. + BindingConstraintNotFound: If no matching group name is found in a case-insensitive manner. """ storage_service = self.storage_service.get_storage(study) file_study = storage_service.get_raw(study) grouped_constraints = self.get_grouped_constraints(study) if group_name not in grouped_constraints: - raise BindingConstraintNotFoundError(f"Group '{group_name}' not found") + raise BindingConstraintNotFound(f"Group '{group_name}' not found") constraints = grouped_constraints[group_name] return _validate_binding_constraints(file_study, constraints) @@ -617,11 +662,12 @@ def validate_constraint_groups(self, study: Study) -> bool: for group_name, bcs in grouped_constraints.items(): try: _validate_binding_constraints(file_study, bcs) - except IncoherenceBetweenMatricesLength as e: + except MatrixWidthMismatchError as e: invalid_groups[group_name] = e.detail if invalid_groups: - raise IncoherenceBetweenMatricesLength(invalid_groups) + err_msg = ", ".join(f"'{grp}': {msg}" for grp, msg in sorted(invalid_groups.items())) + raise MatrixWidthMismatchError(err_msg) return True @@ -641,38 +687,28 @@ def create_binding_constraint( check_attributes_coherence(data, version) - new_constraint = { - "name": data.name, - "enabled": data.enabled, - "time_step": data.time_step, - "operator": data.operator, - "coeffs": self.terms_to_coeffs(data.terms), - "values": data.values, - "less_term_matrix": data.less_term_matrix, - "equal_term_matrix": data.equal_term_matrix, - "greater_term_matrix": data.greater_term_matrix, - "filter_year_by_year": data.filter_year_by_year, - "filter_synthesis": data.filter_synthesis, - "comments": data.comments or "", + new_constraint = {"name": data.name, **json.loads(data.json(exclude={"terms", "name"}, exclude_none=True))} + args = { + **new_constraint, + "command_context": self.storage_service.variant_study_service.command_factory.command_context, } + if data.terms: + args["coeffs"] = self.terms_to_coeffs(data.terms) - if version >= 870: - new_constraint["group"] = data.group or DEFAULT_GROUP - - command = CreateBindingConstraint( - **new_constraint, command_context=self.storage_service.variant_study_service.command_factory.command_context - ) + command = CreateBindingConstraint(**args) # Validates the matrices. Needed when the study is a variant because we only append the command to the list if isinstance(study, VariantStudy): - command.validates_and_fills_matrices(specific_matrices=None, version=version, create=True) + time_step = data.time_step or BindingConstraintFrequency.HOURLY + command.validates_and_fills_matrices( + time_step=time_step, specific_matrices=None, version=version, create=True + ) file_study = self.storage_service.get_storage(study).get_raw(study) execute_or_add_commands(study, file_study, [command], self.storage_service) # Processes the constraints to add them inside the endpoint response. new_constraint["id"] = bc_id - new_constraint["type"] = data.time_step return self.constraint_model_adapter(new_constraint, version) def update_binding_constraint( @@ -686,33 +722,16 @@ def update_binding_constraint( study_version = int(study.version) check_attributes_coherence(data, study_version) - # Because the update_binding_constraint command requires every attribute we have to fill them all. - # This creates a `big` command even though we only updated one field. - # fixme : Change the architecture to avoid this type of misconception upd_constraint = { "id": binding_constraint_id, - "enabled": data.enabled if data.enabled is not None else existing_constraint.enabled, - "time_step": data.time_step or existing_constraint.time_step, - "operator": data.operator or existing_constraint.operator, - "coeffs": self.terms_to_coeffs(data.terms) or self.terms_to_coeffs(existing_constraint.terms), - "comments": data.comments or existing_constraint.comments, + **json.loads(data.json(exclude={"terms", "name"}, exclude_none=True)), } - - if study_version >= 840: - upd_constraint["filter_year_by_year"] = data.filter_year_by_year or existing_constraint.filter_year_by_year - upd_constraint["filter_synthesis"] = data.filter_synthesis or existing_constraint.filter_synthesis - - if study_version >= 870: - upd_constraint["group"] = data.group or existing_constraint.group # type: ignore - args = { **upd_constraint, "command_context": self.storage_service.variant_study_service.command_factory.command_context, } - - for term in ["values", "less_term_matrix", "equal_term_matrix", "greater_term_matrix"]: - if matrices_to_update := getattr(data, term): - args[term] = matrices_to_update + if data.terms: + args["coeffs"] = self.terms_to_coeffs(data.terms) if data.time_step is not None and data.time_step != existing_constraint.time_step: # The user changed the time step, we need to update the matrix accordingly @@ -722,24 +741,51 @@ def update_binding_constraint( # Validates the matrices. Needed when the study is a variant because we only append the command to the list if isinstance(study, VariantStudy): - updated_matrices = [ - term for term in ["less_term_matrix", "equal_term_matrix", "greater_term_matrix"] if getattr(data, term) - ] + updated_matrices = [term for term in TERM_MATRICES if getattr(data, term)] + time_step = data.time_step or existing_constraint.time_step command.validates_and_fills_matrices( - specific_matrices=updated_matrices, version=study_version, create=False + time_step=time_step, specific_matrices=updated_matrices, version=study_version, create=False ) execute_or_add_commands(study, file_study, [command], self.storage_service) - # Processes the constraints to add them inside the endpoint response. + # Constructs the endpoint response. upd_constraint["name"] = existing_constraint.name - upd_constraint["type"] = upd_constraint["time_step"] - # Replace coeffs by the terms - del upd_constraint["coeffs"] + upd_constraint["type"] = upd_constraint.get("time_step", existing_constraint.time_step) upd_constraint["terms"] = data.terms or existing_constraint.terms - + new_fields = ["enabled", "operator", "comments", "terms"] + if study_version >= 830: + new_fields.extend(["filter_year_by_year", "filter_synthesis"]) + if study_version >= 870: + new_fields.append("group") + for field in new_fields: + if field not in upd_constraint: + upd_constraint[field] = getattr(data, field) or getattr(existing_constraint, field) return self.constraint_model_adapter(upd_constraint, study_version) + def update_binding_constraints( + self, + study: Study, + bcs_by_ids: t.Mapping[str, ConstraintInput], + ) -> t.Mapping[str, ConstraintOutput]: + """ + Updates multiple binding constraints within a study. + + Args: + study: The study from which to update the constraints. + bcs_by_ids: A mapping of binding constraint IDs to their updated configurations. + + Returns: + A dictionary of the updated binding constraints, indexed by their IDs. + + Raises: + BindingConstraintNotFound: If any of the specified binding constraint IDs are not found. + """ + updated_constraints = {} + for bc_id, data in bcs_by_ids.items(): + updated_constraints[bc_id] = self.update_binding_constraint(study, bc_id, data) + return updated_constraints + def remove_binding_constraint(self, study: Study, binding_constraint_id: str) -> None: """ Removes a binding constraint from a study. @@ -749,7 +795,7 @@ def remove_binding_constraint(self, study: Study, binding_constraint_id: str) -> binding_constraint_id: The ID of the binding constraint to remove. Raises: - BindingConstraintNotFoundError: If no binding constraint with the specified ID is found. + BindingConstraintNotFound: If no binding constraint with the specified ID is found. """ # Check the existence of the binding constraint before removing it bc = self.get_binding_constraint(study, binding_constraint_id) @@ -758,113 +804,101 @@ def remove_binding_constraint(self, study: Study, binding_constraint_id: str) -> command = RemoveBindingConstraint(id=bc.id, command_context=command_context) execute_or_add_commands(study, file_study, [command], self.storage_service) - def update_constraint_term( - self, - study: Study, - binding_constraint_id: str, - term: ConstraintTerm, + def _update_constraint_with_terms( + self, study: Study, bc: ConstraintOutput, terms: t.Mapping[str, ConstraintTerm] ) -> None: - file_study = self.storage_service.get_storage(study).get_raw(study) - constraint = self.get_binding_constraint(study, binding_constraint_id) - constraint_terms = constraint.terms # existing constraint terms - if not constraint_terms: - raise NoConstraintError(study.id) - - term_id = term.id if isinstance(term, ConstraintTerm) else term - if term_id is None: - raise ConstraintIdNotFoundError(study.id) - - term_id_index = find_constraint_term_id(constraint_terms, term_id) - if term_id_index < 0: - raise ConstraintIdNotFoundError(study.id) - - if isinstance(term, ConstraintTerm): - updated_term_id = term.data.generate_id() if term.data else term_id - current_constraint = constraint_terms[term_id_index] - - constraint_terms[term_id_index] = ConstraintTerm( - id=updated_term_id, - weight=term.weight or current_constraint.weight, - offset=term.offset, - data=term.data or current_constraint.data, - ) - else: - del constraint_terms[term_id_index] - - coeffs = {term.id: [term.weight, term.offset] if term.offset else [term.weight] for term in constraint_terms} - + coeffs = { + term_id: [term.weight, term.offset] if term.offset else [term.weight] for term_id, term in terms.items() + } command = UpdateBindingConstraint( - id=constraint.id, - enabled=constraint.enabled, - time_step=constraint.time_step, - operator=constraint.operator, + id=bc.id, coeffs=coeffs, - filter_year_by_year=constraint.filter_year_by_year, - filter_synthesis=constraint.filter_synthesis, - comments=constraint.comments, command_context=self.storage_service.variant_study_service.command_factory.command_context, ) + file_study = self.storage_service.get_storage(study).get_raw(study) execute_or_add_commands(study, file_study, [command], self.storage_service) - def create_constraint_term( + def update_constraint_terms( self, study: Study, binding_constraint_id: str, - constraint_term: ConstraintTerm, + constraint_terms: t.Sequence[ConstraintTerm], + update_mode: str = "replace", ) -> None: - file_study = self.storage_service.get_storage(study).get_raw(study) - constraint = self.get_binding_constraint(study, binding_constraint_id) - - if constraint_term.data is None: - raise MissingDataError("Add new constraint term : data is missing") - - constraint_id = constraint_term.data.generate_id() - constraint_terms = constraint.terms or [] - if find_constraint_term_id(constraint_terms, constraint_id) >= 0: - raise ConstraintAlreadyExistError(study.id) - - constraint_terms.append( - ConstraintTerm( - id=constraint_id, - weight=constraint_term.weight if constraint_term.weight is not None else 0.0, - offset=constraint_term.offset, - data=constraint_term.data, - ) - ) + """ + Update or add the specified constraint terms. - coeffs = {} + Args: + study: The study from which to update the binding constraint. + binding_constraint_id: The ID of the binding constraint to update. + constraint_terms: The constraint terms to update. + update_mode: The update mode, either "replace" or "add". + """ + if update_mode == "add": + for term in constraint_terms: + if term.data is None: + raise InvalidConstraintTerm(binding_constraint_id, term.json()) - for term in constraint_terms: - coeffs[term.id] = [term.weight] - if term.offset: - coeffs[term.id].append(term.offset) + constraint = self.get_binding_constraint(study, binding_constraint_id) + existing_terms = collections.OrderedDict((term.generate_id(), term) for term in constraint.terms) + updated_terms = collections.OrderedDict((term.generate_id(), term) for term in constraint_terms) + + if update_mode == "replace": + missing_terms = set(updated_terms) - set(existing_terms) + if missing_terms: + raise ConstraintTermNotFound(binding_constraint_id, *missing_terms) + elif update_mode == "add": + duplicate_terms = set(updated_terms) & set(existing_terms) + if duplicate_terms: + raise DuplicateConstraintTerm(binding_constraint_id, *duplicate_terms) + else: # pragma: no cover + raise NotImplementedError(f"Unsupported update mode: {update_mode}") + + existing_terms.update(updated_terms) + self._update_constraint_with_terms(study, constraint, existing_terms) + + def create_constraint_terms( + self, study: Study, binding_constraint_id: str, constraint_terms: t.Sequence[ConstraintTerm] + ) -> None: + """ + Adds new constraint terms to an existing binding constraint. - command = UpdateBindingConstraint( - id=constraint.id, - enabled=constraint.enabled, - time_step=constraint.time_step, - operator=constraint.operator, - coeffs=coeffs, - comments=constraint.comments, - filter_year_by_year=constraint.filter_year_by_year, - filter_synthesis=constraint.filter_synthesis, - command_context=self.storage_service.variant_study_service.command_factory.command_context, - ) - execute_or_add_commands(study, file_study, [command], self.storage_service) + Args: + study: The study from which to update the binding constraint. + binding_constraint_id: The ID of the binding constraint to update. + constraint_terms: The constraint terms to add. + """ + return self.update_constraint_terms(study, binding_constraint_id, constraint_terms, update_mode="add") - # FIXME create a dedicated delete service def remove_constraint_term( self, study: Study, binding_constraint_id: str, term_id: str, ) -> None: - return self.update_constraint_term(study, binding_constraint_id, term_id) # type: ignore + """ + Remove a constraint term from an existing binding constraint. + + Args: + study: The study from which to update the binding constraint. + binding_constraint_id: The ID of the binding constraint to update. + term_id: The ID of the term to remove. + """ + constraint = self.get_binding_constraint(study, binding_constraint_id) + existing_terms = collections.OrderedDict((term.generate_id(), term) for term in constraint.terms) + removed_term = existing_terms.pop(term_id, None) + if removed_term is None: + raise ConstraintTermNotFound(binding_constraint_id, term_id) + self._update_constraint_with_terms(study, constraint, existing_terms) + + @staticmethod + def get_table_schema() -> JSON: + return ConstraintOutput870.schema() def _replace_matrices_according_to_frequency_and_version( - data: ConstraintInput, version: int, args: Dict[str, Any] -) -> Dict[str, Any]: + data: ConstraintInput, version: int, args: t.Dict[str, t.Any] +) -> t.Dict[str, t.Any]: if version < 870: if "values" not in args: matrix = { @@ -879,21 +913,13 @@ def _replace_matrices_according_to_frequency_and_version( BindingConstraintFrequency.DAILY.value: default_bc_weekly_daily_87, BindingConstraintFrequency.WEEKLY.value: default_bc_weekly_daily_87, }[data.time_step].tolist() - for term in ["less_term_matrix", "equal_term_matrix", "greater_term_matrix"]: + for term in TERM_MATRICES: if term not in args: args[term] = matrix return args -def find_constraint_term_id(constraints_term: Sequence[ConstraintTerm], constraint_term_id: str) -> int: - try: - index = [elm.id for elm in constraints_term].index(constraint_term_id) - return index - except ValueError: - return -1 - - -def check_attributes_coherence(data: Union[ConstraintCreation, ConstraintInput], study_version: int) -> None: +def check_attributes_coherence(data: t.Union[ConstraintCreation, ConstraintInput], study_version: int) -> None: if study_version < 870: if data.group: raise InvalidFieldForVersionError( diff --git a/antarest/study/business/link_management.py b/antarest/study/business/link_management.py index 971b0ca376..375a539fd8 100644 --- a/antarest/study/business/link_management.py +++ b/antarest/study/business/link_management.py @@ -1,12 +1,19 @@ -from typing import Any, Dict, List, Optional +import typing as t from pydantic import BaseModel +from antarest.core.exceptions import ConfigFileNotFound +from antarest.core.model import JSON +from antarest.study.business.all_optional_meta import AllOptionalMetaclass, camel_case_model from antarest.study.business.utils import execute_or_add_commands -from antarest.study.model import Study +from antarest.study.model import RawStudy +from antarest.study.storage.rawstudy.model.filesystem.config.links import LinkProperties from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.model.command.create_link import CreateLink from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink +from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig + +_ALL_LINKS_PATH = "input/links" class LinkUIDTO(BaseModel): @@ -18,37 +25,29 @@ class LinkUIDTO(BaseModel): class LinkInfoDTO(BaseModel): area1: str area2: str - ui: Optional[LinkUIDTO] = None - - -class GenericElement(BaseModel): - id: str - name: str - - -class GenericItem(BaseModel): - element: GenericElement - item_list: List[GenericElement] + ui: t.Optional[LinkUIDTO] = None -class AllCLustersAndLinks(BaseModel): - links: List[GenericItem] - clusters: List[GenericItem] +@camel_case_model +class LinkOutput(LinkProperties, metaclass=AllOptionalMetaclass, use_none=True): + """ + DTO object use to get the link information. + """ class LinkManager: def __init__(self, storage_service: StudyStorageService) -> None: self.storage_service = storage_service - def get_all_links(self, study: Study, with_ui: bool = False) -> List[LinkInfoDTO]: + def get_all_links(self, study: RawStudy, with_ui: bool = False) -> t.List[LinkInfoDTO]: file_study = self.storage_service.get_storage(study).get_raw(study) result = [] for area_id, area in file_study.config.areas.items(): - links_config: Optional[Dict[str, Any]] = None + links_config: t.Optional[t.Dict[str, t.Any]] = None if with_ui: links_config = file_study.tree.get(["input", "links", area_id, "properties"]) for link in area.links: - ui_info: Optional[LinkUIDTO] = None + ui_info: t.Optional[LinkUIDTO] = None if with_ui and links_config and link in links_config: ui_info = LinkUIDTO( color=f"{links_config[link].get('colorr', '163')},{links_config[link].get('colorg', '163')},{links_config[link].get('colorb', '163')}", @@ -59,7 +58,7 @@ def get_all_links(self, study: Study, with_ui: bool = False) -> List[LinkInfoDTO return result - def create_link(self, study: Study, link_creation_info: LinkInfoDTO) -> LinkInfoDTO: + def create_link(self, study: RawStudy, link_creation_info: LinkInfoDTO) -> LinkInfoDTO: storage_service = self.storage_service.get_storage(study) file_study = storage_service.get_raw(study) command = CreateLink( @@ -73,7 +72,7 @@ def create_link(self, study: Study, link_creation_info: LinkInfoDTO) -> LinkInfo area2=link_creation_info.area2, ) - def delete_link(self, study: Study, area1_id: str, area2_id: str) -> None: + def delete_link(self, study: RawStudy, area1_id: str, area2_id: str) -> None: file_study = self.storage_service.get_storage(study).get_raw(study) command = RemoveLink( area1=area1_id, @@ -81,3 +80,67 @@ def delete_link(self, study: Study, area1_id: str, area2_id: str) -> None: command_context=self.storage_service.variant_study_service.command_factory.command_context, ) execute_or_add_commands(study, file_study, [command], self.storage_service) + + def get_all_links_props(self, study: RawStudy) -> t.Mapping[t.Tuple[str, str], LinkOutput]: + """ + Retrieves all links properties from the study. + + Args: + study: The raw study object. + Returns: + A mapping of link IDS `(area1_id, area2_id)` to link properties. + Raises: + ConfigFileNotFound: if a configuration file is not found. + """ + file_study = self.storage_service.get_storage(study).get_raw(study) + + # Get the link information from the `input/links/{area1}/properties.ini` file. + path = _ALL_LINKS_PATH + try: + links_cfg = file_study.tree.get(path.split("/"), depth=5) + except KeyError: + raise ConfigFileNotFound(path) from None + + # areas_cfg contains a dictionary where the keys are the area IDs, + # and the values are objects that can be converted to `LinkFolder`. + links_by_ids = {} + for area1_id, entries in links_cfg.items(): + property_map = entries.get("properties") or {} + for area2_id, properties_cfg in property_map.items(): + area1_id, area2_id = sorted([area1_id, area2_id]) + properties = LinkProperties(**properties_cfg) + links_by_ids[(area1_id, area2_id)] = LinkOutput(**properties.dict(by_alias=False)) + + return links_by_ids + + def update_links_props( + self, + study: RawStudy, + update_links_by_ids: t.Mapping[t.Tuple[str, str], LinkOutput], + ) -> t.Mapping[t.Tuple[str, str], LinkOutput]: + old_links_by_ids = self.get_all_links_props(study) + new_links_by_ids = {} + file_study = self.storage_service.get_storage(study).get_raw(study) + commands = [] + for (area1, area2), update_link_dto in update_links_by_ids.items(): + # Update the link properties. + old_link_dto = old_links_by_ids[(area1, area2)] + new_link_dto = old_link_dto.copy(update=update_link_dto.dict(by_alias=False, exclude_none=True)) + new_links_by_ids[(area1, area2)] = new_link_dto + + # Convert the DTO to a configuration object and update the configuration file. + properties = LinkProperties(**new_link_dto.dict(by_alias=False)) + path = f"{_ALL_LINKS_PATH}/{area1}/properties" + cmd = UpdateConfig( + target=path, + data={area2: properties.to_config()}, + command_context=self.storage_service.variant_study_service.command_factory.command_context, + ) + commands.append(cmd) + + execute_or_add_commands(study, file_study, commands, self.storage_service) + return new_links_by_ids + + @staticmethod + def get_table_schema() -> JSON: + return LinkOutput.schema() diff --git a/antarest/study/business/table_mode_management.py b/antarest/study/business/table_mode_management.py index 8a83c21047..65687af9c9 100644 --- a/antarest/study/business/table_mode_management.py +++ b/antarest/study/business/table_mode_management.py @@ -1,586 +1,259 @@ -from typing import Any, Dict, List, Optional, TypedDict, Union - -from pydantic import StrictFloat -from pydantic.types import StrictBool, StrictInt, StrictStr - -from antarest.study.business.areas.properties_management import AdequacyPatchMode -from antarest.study.business.areas.renewable_management import TimeSeriesInterpretation -from antarest.study.business.binding_constraint_management import BindingConstraintManager +import collections +import typing as t + +import numpy as np +import pandas as pd + +from antarest.core.model import JSON +from antarest.study.business.area_management import AreaManager, AreaOutput +from antarest.study.business.areas.renewable_management import RenewableClusterInput, RenewableManager +from antarest.study.business.areas.st_storage_management import STStorageInput, STStorageManager +from antarest.study.business.areas.thermal_management import ThermalClusterInput, ThermalManager +from antarest.study.business.binding_constraint_management import BindingConstraintManager, ConstraintInput from antarest.study.business.enum_ignore_case import EnumIgnoreCase -from antarest.study.business.utils import FormFieldsBaseModel, execute_or_add_commands -from antarest.study.common.default_values import FilteringOptions, LinkProperties, NodalOptimization +from antarest.study.business.link_management import LinkManager, LinkOutput from antarest.study.model import RawStudy -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency -from antarest.study.storage.rawstudy.model.filesystem.config.thermal import LawOption, LocalTSGenerationBehavior -from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.storage_service import StudyStorageService -from antarest.study.storage.variantstudy.model.command.icommand import ICommand -from antarest.study.storage.variantstudy.model.command.update_binding_constraint import UpdateBindingConstraint -from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig - - -class TableTemplateType(EnumIgnoreCase): - AREA = "area" - LINK = "link" - CLUSTER = "cluster" - RENEWABLE = "renewable" - BINDING_CONSTRAINT = "binding constraint" - - -class AssetType(EnumIgnoreCase): - AC = "ac" - DC = "dc" - GAZ = "gaz" - VIRT = "virt" - OTHER = "other" - - -class TransmissionCapacity(EnumIgnoreCase): - INFINITE = "infinite" - IGNORE = "ignore" - ENABLED = "enabled" - - -class BindingConstraintOperator(EnumIgnoreCase): - LESS = "less" - GREATER = "greater" - BOTH = "both" - EQUAL = "equal" - - -class AreaColumns(FormFieldsBaseModel): - # Optimization - Nodal optimization - non_dispatchable_power: Optional[StrictBool] - dispatchable_hydro_power: Optional[StrictBool] - other_dispatchable_power: Optional[StrictBool] - average_unsupplied_energy_cost: Optional[Union[StrictFloat, StrictInt]] - spread_unsupplied_energy_cost: Optional[Union[StrictFloat, StrictInt]] - average_spilled_energy_cost: Optional[Union[StrictFloat, StrictInt]] - spread_spilled_energy_cost: Optional[Union[StrictFloat, StrictInt]] - # Optimization - Filtering - filter_synthesis: Optional[StrictStr] - filter_year_by_year: Optional[StrictStr] - # Adequacy patch - adequacy_patch_mode: Optional[AdequacyPatchMode] - - -class LinkColumns(FormFieldsBaseModel): - hurdles_cost: Optional[StrictBool] - loop_flow: Optional[StrictBool] - use_phase_shifter: Optional[StrictBool] - transmission_capacities: Optional[TransmissionCapacity] - asset_type: Optional[AssetType] - link_style: Optional[StrictStr] - link_width: Optional[StrictInt] - display_comments: Optional[StrictBool] - filter_synthesis: Optional[StrictStr] - filter_year_by_year: Optional[StrictStr] - - -class ClusterColumns(FormFieldsBaseModel): - group: Optional[StrictStr] - enabled: Optional[StrictBool] - must_run: Optional[StrictBool] - unit_count: Optional[StrictInt] - nominal_capacity: Optional[StrictInt] - min_stable_power: Optional[StrictInt] - spinning: Optional[StrictInt] - min_up_time: Optional[StrictInt] - min_down_time: Optional[StrictInt] - co2: Optional[StrictInt] - marginal_cost: Optional[StrictInt] - fixed_cost: Optional[StrictInt] - startup_cost: Optional[StrictInt] - market_bid_cost: Optional[StrictInt] - spread_cost: Optional[StrictInt] - ts_gen: Optional[LocalTSGenerationBehavior] - volatility_forced: Optional[StrictInt] - volatility_planned: Optional[StrictInt] - law_forced: Optional[LawOption] - law_planned: Optional[LawOption] - +from antarest.study.storage.rawstudy.model.filesystem.folder_node import ChildNotFoundError -class RenewableColumns(FormFieldsBaseModel): - group: Optional[StrictStr] - ts_interpretation: Optional[TimeSeriesInterpretation] - enabled: Optional[StrictBool] - unit_count: Optional[StrictInt] - nominal_capacity: Optional[StrictInt] +_TableIndex = str # row name +_TableColumn = str # column name +_CellValue = t.Any # cell value (str, int, float, bool, enum, etc.) +TableDataDTO = t.Mapping[_TableIndex, t.Mapping[_TableColumn, _CellValue]] -class BindingConstraintColumns(FormFieldsBaseModel): - type: Optional[BindingConstraintFrequency] - operator: Optional[BindingConstraintOperator] - enabled: Optional[StrictBool] - group: Optional[StrictStr] - - -class ColumnInfo(TypedDict): - path: str - default_value: Any - - -class PathVars(TypedDict, total=False): - # Area - id: str - # Link - area1: str - area2: str - # Cluster, Renewable - area: str - cluster: str - - -AREA_PATH = "input/areas/{area}" -THERMAL_PATH = "input/thermal/areas" -LINK_GLOB_PATH = "input/links/{area1}/properties" -LINK_PATH = f"{LINK_GLOB_PATH}/{{area2}}" -CLUSTER_GLOB_PATH = "input/thermal/clusters/{area}/list" -CLUSTER_PATH = f"{CLUSTER_GLOB_PATH}/{{cluster}}" -RENEWABLE_GLOB_PATH = "input/renewables/clusters/{area}/list" -RENEWABLE_PATH = f"{RENEWABLE_GLOB_PATH}/{{cluster}}" -BINDING_CONSTRAINT_PATH = "input/bindingconstraints/bindingconstraints" - -FIELDS_INFO_BY_TYPE: Dict[TableTemplateType, Dict[str, ColumnInfo]] = { - TableTemplateType.AREA: { - "non_dispatchable_power": { - "path": f"{AREA_PATH}/optimization/nodal optimization/non-dispatchable-power", - "default_value": NodalOptimization.NON_DISPATCHABLE_POWER, - }, - "dispatchable_hydro_power": { - "path": f"{AREA_PATH}/optimization/nodal optimization/dispatchable-hydro-power", - "default_value": NodalOptimization.DISPATCHABLE_HYDRO_POWER, - }, - "other_dispatchable_power": { - "path": f"{AREA_PATH}/optimization/nodal optimization/other-dispatchable-power", - "default_value": NodalOptimization.OTHER_DISPATCHABLE_POWER, - }, - "average_unsupplied_energy_cost": { - "path": f"{THERMAL_PATH}/unserverdenergycost/{{area}}", - "default_value": NodalOptimization.SPREAD_UNSUPPLIED_ENERGY_COST, - }, - "spread_unsupplied_energy_cost": { - "path": f"{AREA_PATH}/optimization/nodal optimization/spread-unsupplied-energy-cost", - "default_value": NodalOptimization.SPREAD_UNSUPPLIED_ENERGY_COST, - }, - "average_spilled_energy_cost": { - "path": f"{THERMAL_PATH}/spilledenergycost/{{area}}", - "default_value": NodalOptimization.SPREAD_SPILLED_ENERGY_COST, - }, - "spread_spilled_energy_cost": { - "path": f"{AREA_PATH}/optimization/nodal optimization/spread-spilled-energy-cost", - "default_value": NodalOptimization.SPREAD_SPILLED_ENERGY_COST, - }, - "filter_synthesis": { - "path": f"{AREA_PATH}/optimization/filtering/filter-synthesis", - "default_value": FilteringOptions.FILTER_SYNTHESIS, - }, - "filter_year_by_year": { - "path": f"{AREA_PATH}/optimization/filtering/filter-year-by-year", - "default_value": FilteringOptions.FILTER_YEAR_BY_YEAR, - }, - "adequacy_patch_mode": { - "path": f"{AREA_PATH}/adequacy_patch/adequacy-patch/adequacy-patch-mode", - "default_value": AdequacyPatchMode.OUTSIDE.value, - }, - }, - TableTemplateType.LINK: { - "hurdles_cost": { - "path": f"{LINK_PATH}/hurdles-cost", - "default_value": LinkProperties.HURDLES_COST, - }, - "loop_flow": { - "path": f"{LINK_PATH}/loop-flow", - "default_value": LinkProperties.LOOP_FLOW, - }, - "use_phase_shifter": { - "path": f"{LINK_PATH}/use-phase-shifter", - "default_value": LinkProperties.USE_PHASE_SHIFTER, - }, - "transmission_capacities": { - "path": f"{LINK_PATH}/transmission-capacities", - "default_value": LinkProperties.TRANSMISSION_CAPACITIES, - }, - "asset_type": { - "path": f"{LINK_PATH}/asset-type", - "default_value": LinkProperties.ASSET_TYPE, - }, - "link_style": { - "path": f"{LINK_PATH}/link-style", - "default_value": LinkProperties.LINK_STYLE, - }, - "link_width": { - "path": f"{LINK_PATH}/link-width", - "default_value": LinkProperties.LINK_WIDTH, - }, - "display_comments": { - "path": f"{LINK_PATH}/display-comments", - "default_value": LinkProperties.DISPLAY_COMMENTS, - }, - "filter_synthesis": { - "path": f"{LINK_PATH}/filter-synthesis", - "default_value": FilteringOptions.FILTER_SYNTHESIS, - }, - "filter_year_by_year": { - "path": f"{LINK_PATH}/filter-year-by-year", - "default_value": FilteringOptions.FILTER_YEAR_BY_YEAR, - }, - }, - TableTemplateType.CLUSTER: { - "group": { - "path": f"{CLUSTER_PATH}/group", - "default_value": "", - }, - "enabled": { - "path": f"{CLUSTER_PATH}/enabled", - "default_value": True, - }, - "must_run": { - "path": f"{CLUSTER_PATH}/must-run", - "default_value": False, - }, - "unit_count": { - "path": f"{CLUSTER_PATH}/unitcount", - "default_value": 0, - }, - "nominal_capacity": { - "path": f"{CLUSTER_PATH}/nominalcapacity", - "default_value": 0, - }, - "min_stable_power": { - "path": f"{CLUSTER_PATH}/min-stable-power", - "default_value": 0, - }, - "spinning": { - "path": f"{CLUSTER_PATH}/spinning", - "default_value": 0, - }, - "min_up_time": { - "path": f"{CLUSTER_PATH}/min-up-time", - "default_value": 1, - }, - "min_down_time": { - "path": f"{CLUSTER_PATH}/min-down-time", - "default_value": 1, - }, - "co2": { - "path": f"{CLUSTER_PATH}/co2", - "default_value": 0, - }, - "marginal_cost": { - "path": f"{CLUSTER_PATH}/marginal-cost", - "default_value": 0, - }, - "fixed_cost": { - "path": f"{CLUSTER_PATH}/fixed-cost", - "default_value": 0, - }, - "startup_cost": { - "path": f"{CLUSTER_PATH}/startup-cost", - "default_value": 0, - }, - "market_bid_cost": { - "path": f"{CLUSTER_PATH}/market-bid-cost", - "default_value": 0, - }, - "spread_cost": { - "path": f"{CLUSTER_PATH}/spread-cost", - "default_value": 0, - }, - "ts_gen": { - "path": f"{CLUSTER_PATH}/gen-ts", - "default_value": LocalTSGenerationBehavior.USE_GLOBAL.value, - }, - "volatility_forced": { - "path": f"{CLUSTER_PATH}/volatility.forced", - "default_value": 0, - }, - "volatility_planned": { - "path": f"{CLUSTER_PATH}/volatility.planned", - "default_value": 0, - }, - "law_forced": { - "path": f"{CLUSTER_PATH}/law.forced", - "default_value": LawOption.UNIFORM.value, - }, - "law_planned": { - "path": f"{CLUSTER_PATH}/law.planned", - "default_value": LawOption.UNIFORM.value, - }, - }, - TableTemplateType.RENEWABLE: { - "group": { - "path": f"{RENEWABLE_PATH}/group", - "default_value": "", - }, - "ts_interpretation": { - "path": f"{RENEWABLE_PATH}/ts-interpretation", - "default_value": TimeSeriesInterpretation.POWER_GENERATION.value, - }, - "enabled": { - "path": f"{RENEWABLE_PATH}/enabled", - "default_value": True, - }, - "unit_count": { - "path": f"{RENEWABLE_PATH}/unitcount", - "default_value": 0, - }, - "nominal_capacity": { - "path": f"{RENEWABLE_PATH}/nominalcapacity", - "default_value": 0, - }, - }, - TableTemplateType.BINDING_CONSTRAINT: { - "type": { - "path": f"{BINDING_CONSTRAINT_PATH}/type", - "default_value": BindingConstraintFrequency.HOURLY.value, - }, - "operator": { - "path": f"{BINDING_CONSTRAINT_PATH}/operator", - "default_value": BindingConstraintOperator.LESS.value, - }, - "enabled": { - "path": f"{BINDING_CONSTRAINT_PATH}/enabled", - "default_value": True, - }, - "group": { - "path": f"{BINDING_CONSTRAINT_PATH}/group", - "default_value": None, - }, - }, -} - -COLUMNS_MODELS_BY_TYPE = { - TableTemplateType.AREA: AreaColumns, - TableTemplateType.LINK: LinkColumns, - TableTemplateType.CLUSTER: ClusterColumns, - TableTemplateType.RENEWABLE: RenewableColumns, - TableTemplateType.BINDING_CONSTRAINT: BindingConstraintColumns, -} - -ColumnsModelTypes = Union[ - AreaColumns, - LinkColumns, - ClusterColumns, - RenewableColumns, - BindingConstraintColumns, -] - - -def _get_glob_object(file_study: FileStudy, table_type: TableTemplateType) -> Dict[str, Any]: +class TableModeType(EnumIgnoreCase): """ - Retrieves the fields of an object according to its type (area, link, thermal cluster...). - - Args: - file_study: A file study from which the configuration can be read. - table_type: Type of the object. - - Returns: - Dictionary containing the fields used in Table mode. - - Raises: - ChildNotFoundError: if one of the Area IDs is not found in the configuration. + Table types. + + This enum is used to define the different types of tables that can be created + by the user to leverage the editing capabilities of multiple objects at once. + + Attributes: + AREA: Area table. + LINK: Link table. + THERMAL: Thermal clusters table. + RENEWABLE: Renewable clusters table. + ST_STORAGE: Short-Term Storages table. + BINDING_CONSTRAINT: Binding constraints table. """ - # sourcery skip: extract-method - if table_type == TableTemplateType.AREA: - info_map: Dict[str, Any] = file_study.tree.get(url=AREA_PATH.format(area="*").split("/"), depth=3) - area_ids = list(file_study.config.areas) - # If there is only one ID in the `area_ids`, the result returned from - # the `file_study.tree.get` call will be a single object. - # On the other hand, if there are multiple values in `area_ids`, - # the result will be a dictionary where the keys are the IDs, - # and the values are the corresponding objects. - if len(area_ids) == 1: - info_map = {area_ids[0]: info_map} - # Add thermal fields in info_map - thermal_fields = file_study.tree.get(THERMAL_PATH.split("/")) - for field, field_props in thermal_fields.items(): - for area_id, value in field_props.items(): - if area_id in info_map: - info_map[area_id][field] = value - return info_map - url = { - TableTemplateType.LINK: LINK_GLOB_PATH.format(area1="*").split("/"), - TableTemplateType.CLUSTER: CLUSTER_GLOB_PATH.format(area="*").split("/"), - TableTemplateType.RENEWABLE: RENEWABLE_GLOB_PATH.format(area="*").split("/"), - TableTemplateType.BINDING_CONSTRAINT: BINDING_CONSTRAINT_PATH.split("/"), - }[table_type] - - return file_study.tree.get(url) + AREA = "areas" + LINK = "links" + THERMAL = "thermals" + RENEWABLE = "renewables" + # Avoid "storages" because we may have "lt-storages" (long-term storages) in the future + ST_STORAGE = "st-storages" + # Avoid "constraints" because we may have other kinds of constraints in the future + BINDING_CONSTRAINT = "binding-constraints" + + @classmethod + def _missing_(cls, value: object) -> t.Optional["EnumIgnoreCase"]: + if isinstance(value, str): + # handle aliases of old table types + value = value.upper() + aliases = { + "AREA": cls.AREA, + "LINK": cls.LINK, + "CLUSTER": cls.THERMAL, + "RENEWABLE": cls.RENEWABLE, + "BINDING CONSTRAINT": cls.BINDING_CONSTRAINT, + } + if value in aliases: + return aliases[value] + return super()._missing_(value) class TableModeManager: - def __init__(self, storage_service: StudyStorageService) -> None: - self.storage_service = storage_service - - def get_table_data( + def __init__( self, - study: RawStudy, - table_type: TableTemplateType, - columns: List[str], - ) -> Dict[str, ColumnsModelTypes]: - file_study = self.storage_service.get_storage(study).get_raw(study) - columns_model = COLUMNS_MODELS_BY_TYPE[table_type] - fields_info = FIELDS_INFO_BY_TYPE[table_type] - glob_object = _get_glob_object(file_study, table_type) - - def get_column_value(col: str, data: Dict[str, Any]) -> Any: - f_info = fields_info[col] - relative_path = TableModeManager.__get_relative_path(f_info["path"], table_type) - return TableModeManager.__get_value( - relative_path, - data, - f_info["default_value"], - ) - - if table_type == TableTemplateType.AREA: - return { - area_id: columns_model.construct( - **{col: get_column_value(col, data) for col in columns} - ) # type: ignore - for area_id, data in glob_object.items() + area_manager: AreaManager, + link_manager: LinkManager, + thermal_manager: ThermalManager, + renewable_manager: RenewableManager, + st_storage_manager: STStorageManager, + binding_constraint_manager: BindingConstraintManager, + ) -> None: + self._area_manager = area_manager + self._link_manager = link_manager + self._thermal_manager = thermal_manager + self._renewable_manager = renewable_manager + self._st_storage_manager = st_storage_manager + self._binding_constraint_manager = binding_constraint_manager + + def _get_table_data_unsafe(self, study: RawStudy, table_type: TableModeType) -> TableDataDTO: + if table_type == TableModeType.AREA: + areas_map = self._area_manager.get_all_area_props(study) + data = {area_id: area.dict(by_alias=True) for area_id, area in areas_map.items()} + elif table_type == TableModeType.LINK: + links_map = self._link_manager.get_all_links_props(study) + data = { + f"{area1_id} / {area2_id}": link.dict(by_alias=True) for (area1_id, area2_id), link in links_map.items() } - - if table_type == TableTemplateType.BINDING_CONSTRAINT: - return { - data["id"]: columns_model.construct( - **{col: get_column_value(col, data) for col in columns} - ) # type: ignore - for data in glob_object.values() + elif table_type == TableModeType.THERMAL: + thermals_by_areas = self._thermal_manager.get_all_thermals_props(study) + data = { + f"{area_id} / {cluster_id}": cluster.dict(by_alias=True, exclude={"id", "name"}) + for area_id, thermals_by_ids in thermals_by_areas.items() + for cluster_id, cluster in thermals_by_ids.items() } + elif table_type == TableModeType.RENEWABLE: + renewables_by_areas = self._renewable_manager.get_all_renewables_props(study) + data = { + f"{area_id} / {cluster_id}": cluster.dict(by_alias=True, exclude={"id", "name"}) + for area_id, renewables_by_ids in renewables_by_areas.items() + for cluster_id, cluster in renewables_by_ids.items() + } + elif table_type == TableModeType.ST_STORAGE: + storages_by_areas = self._st_storage_manager.get_all_storages_props(study) + data = { + f"{area_id} / {cluster_id}": cluster.dict(by_alias=True, exclude={"id", "name"}) + for area_id, storages_by_ids in storages_by_areas.items() + for cluster_id, cluster in storages_by_ids.items() + } + elif table_type == TableModeType.BINDING_CONSTRAINT: + bc_seq = self._binding_constraint_manager.get_binding_constraints(study) + data = {bc.id: bc.dict(by_alias=True, exclude={"id", "name", "terms"}) for bc in bc_seq} + else: # pragma: no cover + raise NotImplementedError(f"Table type {table_type} not implemented") + return data - obj: Dict[str, Any] = {} - for id_1, value_1 in glob_object.items(): - for id_2, value_2 in value_1.items(): - obj[f"{id_1} / {id_2}"] = columns_model.construct( - **{col: get_column_value(col, value_2) for col in columns} - ) - - return obj - - def set_table_data( + def get_table_data( self, study: RawStudy, - table_type: TableTemplateType, - data: Dict[str, ColumnsModelTypes], - ) -> None: - commands: List[ICommand] = [] - bindings_by_id = None - command_context = self.storage_service.variant_study_service.command_factory.command_context - - for key, columns in data.items(): - path_vars = TableModeManager.__get_path_vars_from_key(table_type, key) - - if table_type == TableTemplateType.BINDING_CONSTRAINT: - file_study = self.storage_service.get_storage(study).get_raw(study) - bindings_by_id = bindings_by_id or { - binding["id"]: binding for binding in _get_glob_object(file_study, table_type).values() - } - binding_id = path_vars["id"] - current_binding = bindings_by_id.get(binding_id, None) - - if current_binding: - col_values = columns.dict(exclude_none=True) - current_binding_dto = BindingConstraintManager.constraint_model_adapter( - current_binding, int(study.version) - ) - - commands.append( - UpdateBindingConstraint( - id=binding_id, - enabled=col_values.get("enabled", current_binding_dto.enabled), - time_step=col_values.get("type", current_binding_dto.time_step), - operator=col_values.get("operator", current_binding_dto.operator), - coeffs=BindingConstraintManager.terms_to_coeffs(current_binding_dto.terms), - command_context=command_context, - ) - ) - else: - for col, val in columns.__iter__(): - if val is not None: - commands.append( - UpdateConfig( - target=TableModeManager.__get_column_path(table_type, path_vars, col), - data=val, - command_context=command_context, - ) - ) - - if commands: - file_study = self.storage_service.get_storage(study).get_raw(study) - execute_or_add_commands(study, file_study, commands, self.storage_service) - - @staticmethod - def __get_value(path: List[str], data: Dict[str, Any], default_value: Any) -> Any: - if len(path): - return TableModeManager.__get_value(path[1:], data.get(path[0], {}), default_value) - return data if data != {} else default_value - - @staticmethod - def __get_relative_path( - path: str, - table_type: TableTemplateType, - ) -> List[str]: - base_path = "" - path_arr = path.split("/") - - if table_type == TableTemplateType.AREA: - if path.startswith(THERMAL_PATH): - base_path = THERMAL_PATH - # Remove {area} - path_arr = path_arr[:-1] - else: - base_path = AREA_PATH - elif table_type == TableTemplateType.LINK: - base_path = LINK_PATH - elif table_type == TableTemplateType.CLUSTER: - base_path = CLUSTER_PATH - elif table_type == TableTemplateType.RENEWABLE: - base_path = RENEWABLE_PATH - elif table_type == TableTemplateType.BINDING_CONSTRAINT: - base_path = BINDING_CONSTRAINT_PATH - - return path_arr[len(base_path.split("/")) :] - - @staticmethod - def __get_column_path( - table_type: TableTemplateType, - path_vars: PathVars, - column: str, - ) -> str: - path = FIELDS_INFO_BY_TYPE[table_type][column]["path"] - - if table_type == TableTemplateType.AREA: - return path.format(area=path_vars["id"]) - if table_type == TableTemplateType.LINK: - return path.format(area1=path_vars["area1"], area2=path_vars["area2"]) - if table_type in [ - TableTemplateType.CLUSTER, - TableTemplateType.RENEWABLE, - ]: - return path.format(area=path_vars["area"], cluster=path_vars["cluster"]) - - return path - - @staticmethod - def __get_path_vars_from_key( - table_type: TableTemplateType, - key: str, - ) -> PathVars: - if table_type in [ - TableTemplateType.AREA, - TableTemplateType.BINDING_CONSTRAINT, - ]: - return PathVars(id=key) - if table_type == TableTemplateType.LINK: - area1, area2 = [v.strip() for v in key.split("/")] - return PathVars(area1=area1, area2=area2) - if table_type in [ - TableTemplateType.CLUSTER, - TableTemplateType.RENEWABLE, - ]: - area, cluster = [v.strip() for v in key.split("/")] - return PathVars(area=area, cluster=cluster) - - return PathVars() + table_type: TableModeType, + columns: t.Sequence[_TableColumn], + ) -> TableDataDTO: + """ + Get the table data of the specified type for the given study. + + Args: + study: The study to get the table data from. + table_type: The type of the table. + columns: The columns to include in the table. If empty, all columns are included. + + Returns: + The table data as a dictionary of dictionaries. + Where keys are the row names and values are dictionaries of column names and cell values. + """ + try: + data = self._get_table_data_unsafe(study, table_type) + except ChildNotFoundError: + # It's better to return an empty table than raising an 404 error + return {} + + df = pd.DataFrame.from_dict(data, orient="index") # type: ignore + if columns: + # Create a new dataframe with the listed columns. + df = pd.DataFrame(df, columns=columns) # type: ignore + + # According to the study version, some properties may not be present, + # so we need to drop columns that are all NaN. + df = df.dropna(axis=1, how="all") + + # Convert NaN to `None` because it is not JSON-serializable + df.replace(np.nan, None, inplace=True) + + return t.cast(TableDataDTO, df.to_dict(orient="index")) + + def update_table_data( + self, + study: RawStudy, + table_type: TableModeType, + data: TableDataDTO, + ) -> TableDataDTO: + """ + Update the properties of the objects in the study using the provided data. + + Args: + study: The study to update the objects in. + table_type: The type of the table. + data: The new properties of the objects as a dictionary of dictionaries. + Where keys are the row names and values are dictionaries of column names and cell values. + + Returns: + The updated properties of the objects including the old ones. + """ + if table_type == TableModeType.AREA: + # Use AreaOutput to update properties of areas, which may include `None` values + area_props_by_ids = {key: AreaOutput(**values) for key, values in data.items()} + areas_map = self._area_manager.update_areas_props(study, area_props_by_ids) + data = {area_id: area.dict(by_alias=True, exclude_none=True) for area_id, area in areas_map.items()} + return data + elif table_type == TableModeType.LINK: + links_map = {tuple(key.split(" / ")): LinkOutput(**values) for key, values in data.items()} + updated_map = self._link_manager.update_links_props(study, links_map) # type: ignore + data = { + f"{area1_id} / {area2_id}": link.dict(by_alias=True) + for (area1_id, area2_id), link in updated_map.items() + } + return data + elif table_type == TableModeType.THERMAL: + thermals_by_areas: t.MutableMapping[str, t.MutableMapping[str, ThermalClusterInput]] + thermals_by_areas = collections.defaultdict(dict) + for key, values in data.items(): + area_id, cluster_id = key.split(" / ") + thermals_by_areas[area_id][cluster_id] = ThermalClusterInput(**values) + thermals_map = self._thermal_manager.update_thermals_props(study, thermals_by_areas) + data = { + f"{area_id} / {cluster_id}": cluster.dict(by_alias=True, exclude={"id", "name"}) + for area_id, thermals_by_ids in thermals_map.items() + for cluster_id, cluster in thermals_by_ids.items() + } + return data + elif table_type == TableModeType.RENEWABLE: + renewables_by_areas: t.MutableMapping[str, t.MutableMapping[str, RenewableClusterInput]] + renewables_by_areas = collections.defaultdict(dict) + for key, values in data.items(): + area_id, cluster_id = key.split(" / ") + renewables_by_areas[area_id][cluster_id] = RenewableClusterInput(**values) + renewables_map = self._renewable_manager.update_renewables_props(study, renewables_by_areas) + data = { + f"{area_id} / {cluster_id}": cluster.dict(by_alias=True, exclude={"id", "name"}) + for area_id, renewables_by_ids in renewables_map.items() + for cluster_id, cluster in renewables_by_ids.items() + } + return data + elif table_type == TableModeType.ST_STORAGE: + storages_by_areas: t.MutableMapping[str, t.MutableMapping[str, STStorageInput]] + storages_by_areas = collections.defaultdict(dict) + for key, values in data.items(): + area_id, cluster_id = key.split(" / ") + storages_by_areas[area_id][cluster_id] = STStorageInput(**values) + storages_map = self._st_storage_manager.update_storages_props(study, storages_by_areas) + data = { + f"{area_id} / {cluster_id}": cluster.dict(by_alias=True, exclude={"id", "name"}) + for area_id, storages_by_ids in storages_map.items() + for cluster_id, cluster in storages_by_ids.items() + } + return data + elif table_type == TableModeType.BINDING_CONSTRAINT: + bcs_by_ids = {key: ConstraintInput(**values) for key, values in data.items()} + bcs_map = self._binding_constraint_manager.update_binding_constraints(study, bcs_by_ids) + return {bc_id: bc.dict(by_alias=True, exclude={"id", "name", "terms"}) for bc_id, bc in bcs_map.items()} + else: # pragma: no cover + raise NotImplementedError(f"Table type {table_type} not implemented") + + def get_table_schema(self, table_type: TableModeType) -> JSON: + """ + Get the properties of the table columns which type is provided as a parameter. + + Args: + table_type: The type of the table. + + Returns: + JSON Schema which allows to know the name, title and type of each column. + """ + if table_type == TableModeType.AREA: + return self._area_manager.get_table_schema() + elif table_type == TableModeType.LINK: + return self._link_manager.get_table_schema() + elif table_type == TableModeType.THERMAL: + return self._thermal_manager.get_table_schema() + elif table_type == TableModeType.RENEWABLE: + return self._renewable_manager.get_table_schema() + elif table_type == TableModeType.ST_STORAGE: + return self._st_storage_manager.get_table_schema() + elif table_type == TableModeType.BINDING_CONSTRAINT: + return self._binding_constraint_manager.get_table_schema() + else: # pragma: no cover + raise NotImplementedError(f"Table type {table_type} not implemented") diff --git a/antarest/study/business/thematic_trimming_field_infos.py b/antarest/study/business/thematic_trimming_field_infos.py index 30d95a9393..3baabd8014 100644 --- a/antarest/study/business/thematic_trimming_field_infos.py +++ b/antarest/study/business/thematic_trimming_field_infos.py @@ -4,7 +4,8 @@ import typing as t -from antarest.study.business.utils import AllOptionalMetaclass, FormFieldsBaseModel +from antarest.study.business.all_optional_meta import AllOptionalMetaclass +from antarest.study.business.utils import FormFieldsBaseModel class ThematicTrimmingFormFields(FormFieldsBaseModel, metaclass=AllOptionalMetaclass, use_none=True): @@ -191,7 +192,7 @@ class ThematicTrimmingFormFields(FormFieldsBaseModel, metaclass=AllOptionalMetac "sts_inj_by_plant": {"topic": _SHORT_TERM_STORAGES, "path": "STS inj by plant", "default_value": True, "start_version": 860}, "sts_withdrawal_by_plant": {"topic": _SHORT_TERM_STORAGES, "path": "STS withdrawal by plant", "default_value": True, "start_version": 860}, "sts_lvl_by_plant": {"topic": _SHORT_TERM_STORAGES, "path": "STS lvl by plant", "default_value": True, "start_version": 860}, - "sts_cashflow_by_cluster": {"topic": _SHORT_TERM_STORAGES, "path": "STS Cashflow By Cluster", "default_value": True, "start_version": 860}, + "sts_cashflow_by_cluster": {"topic": _SHORT_TERM_STORAGES, "path": "STS Cashflow By Cluster", "default_value": True, "start_version": 880}, # topic: "Short-Term Storages - Group" "psp_open_injection": {"topic": _SHORT_TERM_STORAGES_GROUP, "path": "PSP_open_injection", "default_value": True, "start_version": 860}, "psp_open_withdrawal": {"topic": _SHORT_TERM_STORAGES_GROUP, "path": "PSP_open_withdrawal", "default_value": True, "start_version": 860}, diff --git a/antarest/study/business/timeseries_config_management.py b/antarest/study/business/timeseries_config_management.py index fac397b3be..418921e7f0 100644 --- a/antarest/study/business/timeseries_config_management.py +++ b/antarest/study/business/timeseries_config_management.py @@ -6,7 +6,7 @@ from antarest.study.business.enum_ignore_case import EnumIgnoreCase from antarest.study.business.utils import GENERAL_DATA_PATH, FormFieldsBaseModel, execute_or_add_commands from antarest.study.model import Study -from antarest.study.storage.rawstudy.model.filesystem.config.model import ENR_MODELLING +from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig @@ -193,7 +193,7 @@ def __get_form_fields_for_type( input_ = general_data.get("input", {}) output = general_data.get("output", {}) - is_aggregated = file_study.config.enr_modelling == ENR_MODELLING.AGGREGATED.value + is_aggregated = file_study.config.enr_modelling == EnrModelling.AGGREGATED.value if ts_type == TSType.RENEWABLES and is_aggregated: return None diff --git a/antarest/study/business/utils.py b/antarest/study/business/utils.py index 53596bf797..8c4b567b22 100644 --- a/antarest/study/business/utils.py +++ b/antarest/study/business/utils.py @@ -1,7 +1,5 @@ import typing as t -import pydantic.fields -import pydantic.main from pydantic import BaseModel from antarest.core.exceptions import CommandApplicationError @@ -82,90 +80,3 @@ class FieldInfo(t.TypedDict, total=False): encode: t.Optional[t.Callable[[t.Any], t.Any]] # (encoded_value, current_value) -> decoded_value decode: t.Optional[t.Callable[[t.Any, t.Optional[t.Any]], t.Any]] - - -class AllOptionalMetaclass(pydantic.main.ModelMetaclass): - """ - Metaclass that makes all fields of a Pydantic model optional. - - Usage: - class MyModel(BaseModel, metaclass=AllOptionalMetaclass): - field1: str - field2: int - ... - - Instances of the model can be created even if not all fields are provided during initialization. - Default values, when provided, are used unless `use_none` is set to `True`. - """ - - def __new__( - cls: t.Type["AllOptionalMetaclass"], - name: str, - bases: t.Tuple[t.Type[t.Any], ...], - namespaces: t.Dict[str, t.Any], - use_none: bool = False, - **kwargs: t.Dict[str, t.Any], - ) -> t.Any: - """ - Create a new instance of the metaclass. - - Args: - name: Name of the class to create. - bases: Base classes of the class to create (a Pydantic model). - namespaces: namespace of the class to create that defines the fields of the model. - use_none: If `True`, the default value of the fields is set to `None`. - Note that this field is not part of the Pydantic model, but it is an extension. - **kwargs: Additional keyword arguments used by the metaclass. - """ - # Modify the annotations of the class (but not of the ancestor classes) - # in order to make all fields optional. - # If the current model inherits from another model, the annotations of the ancestor models - # are not modified, because the fields are already converted to `ModelField`. - annotations = namespaces.get("__annotations__", {}) - for field_name, field_type in annotations.items(): - if not field_name.startswith("__"): - # Making already optional fields optional is not a problem (nothing is changed). - annotations[field_name] = t.Optional[field_type] - namespaces["__annotations__"] = annotations - - if use_none: - # Modify the namespace fields to set their default value to `None`. - for field_name, field_info in namespaces.items(): - if isinstance(field_info, pydantic.fields.FieldInfo): - field_info.default = None - field_info.default_factory = None - - # Create the class: all annotations are converted into `ModelField`. - instance = super().__new__(cls, name, bases, namespaces, **kwargs) - - # Modify the inherited fields of the class to make them optional - # and set their default value to `None`. - model_field: pydantic.fields.ModelField - for field_name, model_field in instance.__fields__.items(): - model_field.required = False - model_field.allow_none = True - if use_none: - model_field.default = None - model_field.default_factory = None - model_field.field_info.default = None - - return instance - - -MODEL = t.TypeVar("MODEL", bound=t.Type[BaseModel]) - - -def camel_case_model(model: MODEL) -> MODEL: - """ - This decorator can be used to modify a model to use camel case aliases. - - Args: - model: The pydantic model to modify. - - Returns: - The modified model. - """ - model.__config__.alias_generator = to_camel_case - for field_name, field in model.__fields__.items(): - field.alias = to_camel_case(field_name) - return model diff --git a/antarest/study/business/xpansion_management.py b/antarest/study/business/xpansion_management.py index 1bb80cfbaf..22c612af9a 100644 --- a/antarest/study/business/xpansion_management.py +++ b/antarest/study/business/xpansion_management.py @@ -11,8 +11,8 @@ from antarest.core.exceptions import BadZipBinary from antarest.core.model import JSON +from antarest.study.business.all_optional_meta import AllOptionalMetaclass from antarest.study.business.enum_ignore_case import EnumIgnoreCase -from antarest.study.business.utils import AllOptionalMetaclass from antarest.study.model import Study from antarest.study.storage.rawstudy.model.filesystem.bucket_node import BucketNode from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy diff --git a/antarest/study/common/default_values.py b/antarest/study/common/default_values.py index cab69d477d..be2eda1111 100644 --- a/antarest/study/common/default_values.py +++ b/antarest/study/common/default_values.py @@ -1,3 +1,6 @@ +from enum import Enum + + class FilteringOptions: FILTER_SYNTHESIS: str = "hourly, daily, weekly, monthly, annual" FILTER_YEAR_BY_YEAR: str = "hourly, daily, weekly, monthly, annual" @@ -25,3 +28,15 @@ class LinkProperties: COLORR: int = 112 COLORG: int = 112 COLORB: int = 112 + + +class AreasQueryFile(str, Enum): + VALUES = "values" + DETAILS = "details" + DETAILS_ST_STORAGE = "details-st-storage" + DETAILS_RES = "details-res" + + +class LinksQueryFile(str, Enum): + VALUES = "values" + DETAILS = "details" diff --git a/antarest/study/common/studystorage.py b/antarest/study/common/studystorage.py index c6a271a66f..e10b44a48c 100644 --- a/antarest/study/common/studystorage.py +++ b/antarest/study/common/studystorage.py @@ -1,18 +1,20 @@ +import typing as t from abc import ABC, abstractmethod from pathlib import Path -from typing import BinaryIO, Generic, List, Optional, Sequence, TypeVar, Union from antarest.core.exceptions import StudyNotFoundError from antarest.core.model import JSON from antarest.core.requests import RequestParameters +from antarest.study.common.default_values import AreasQueryFile, LinksQueryFile from antarest.study.model import Study, StudyMetadataDTO, StudyMetadataPatchDTO, StudySimResultDTO from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfigDTO from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency -T = TypeVar("T", bound=Study) +T = t.TypeVar("T", bound=Study) -class IStudyStorageService(ABC, Generic[T]): +class IStudyStorageService(ABC, t.Generic[T]): @abstractmethod def create(self, metadata: T) -> T: """ @@ -23,7 +25,6 @@ def create(self, metadata: T) -> T: Returns: new study information """ - raise NotImplementedError() @abstractmethod def get( @@ -44,7 +45,58 @@ def get( Returns: study data formatted in json """ - raise NotImplementedError() + + @abstractmethod + def aggregate_areas_data( + self, + metadata: T, + output_id: str, + query_file: AreasQueryFile, + frequency: MatrixFrequency, + mc_years: t.Sequence[int], + areas_ids: t.Sequence[str], + columns_names: t.Sequence[str], + ) -> t.Dict[str, t.Any]: + """ + Entry point to fetch areas data inside study's output. + + Args: + metadata: study for which we want to perform the aggregation + output_id: simulation ID + query_file: "values", "details", "details-st-storage", "details-res" + frequency: "hourly", "daily", "weekly", "monthly", "annual" + mc_years: list of Monte Carlo years to consider, if empty, all years are considered + areas_ids: list of areas to consider, if empty, all areas are considered + columns_names: list of columns to consider, if empty, all columns are considered + + Returns: the areas aggregated data in a JSON format + + """ + + @abstractmethod + def aggregate_links_data( + self, + metadata: T, + output_id: str, + query_file: LinksQueryFile, + frequency: MatrixFrequency, + mc_years: t.Sequence[int], + columns_names: t.Sequence[str], + ) -> t.Dict[str, t.Any]: + """ + Entry point to fetch links raw data inside study's output. + + Args: + metadata: study for which we want to perform the aggregation + output_id: simulation ID + query_file: "values", "details" + frequency: "hourly", "daily", "weekly", "monthly", "annual" + mc_years: list of Monte Carlo years to consider, if empty, all years are considered + columns_names: list of columns to consider, if empty, all columns are considered + + Returns: the links aggregated data in a JSON format + + """ @abstractmethod def exists(self, metadata: T) -> bool: @@ -56,10 +108,9 @@ def exists(self, metadata: T) -> bool: Returns: true if study presents in disk, false else. """ - raise NotImplementedError() @abstractmethod - def copy(self, src_meta: T, dest_name: str, groups: Sequence[str], with_outputs: bool = False) -> T: + def copy(self, src_meta: T, dest_name: str, groups: t.Sequence[str], with_outputs: bool = False) -> T: """ Create a new study by copying a reference study. @@ -72,7 +123,6 @@ def copy(self, src_meta: T, dest_name: str, groups: Sequence[str], with_outputs: Returns: The newly created study. """ - raise NotImplementedError() @abstractmethod def patch_update_study_metadata(self, study: T, metadata: StudyMetadataPatchDTO) -> StudyMetadataDTO: @@ -85,15 +135,14 @@ def patch_update_study_metadata(self, study: T, metadata: StudyMetadataPatchDTO) Returns: study metadata """ - raise NotImplementedError() @abstractmethod def import_output( self, study: T, - output: Union[BinaryIO, Path], - output_name: Optional[str] = None, - ) -> Optional[str]: + output: t.Union[t.BinaryIO, Path], + output_name: t.Optional[str] = None, + ) -> t.Optional[str]: """ Import an output Args: @@ -102,18 +151,17 @@ def import_output( output_name: Optional name suffix to append to the output name Returns: None """ - raise NotImplementedError() @abstractmethod def get_study_information(self, metadata: T) -> StudyMetadataDTO: - raise NotImplementedError() + """Get study information.""" @abstractmethod def get_raw( self, metadata: T, use_cache: bool = True, - output_dir: Optional[Path] = None, + output_dir: t.Optional[Path] = None, ) -> FileStudy: """ Fetch a study raw tree object and its config @@ -124,10 +172,9 @@ def get_raw( Returns: the config and study tree object """ - raise NotImplementedError() @abstractmethod - def get_study_sim_result(self, metadata: T) -> List[StudySimResultDTO]: + def get_study_sim_result(self, metadata: T) -> t.List[StudySimResultDTO]: """ Get global result information @@ -137,7 +184,6 @@ def get_study_sim_result(self, metadata: T) -> List[StudySimResultDTO]: Returns: study output data """ - raise NotImplementedError() @abstractmethod def set_reference_output(self, metadata: T, output_id: str, status: bool) -> None: @@ -149,7 +195,6 @@ def set_reference_output(self, metadata: T, output_id: str, status: bool) -> Non output_id: the id of output to set the reference status. status: true to set it as reference, false to unset it. """ - raise NotImplementedError() @abstractmethod def delete(self, metadata: T) -> None: @@ -161,7 +206,6 @@ def delete(self, metadata: T) -> None: Returns: """ - raise NotImplementedError() @abstractmethod def delete_output(self, metadata: T, output_id: str) -> None: @@ -174,7 +218,6 @@ def delete_output(self, metadata: T, output_id: str) -> None: Returns: """ - raise NotImplementedError() @abstractmethod def get_study_path(self, metadata: Study) -> Path: @@ -186,7 +229,6 @@ def get_study_path(self, metadata: Study) -> Path: Returns: study path """ - raise NotImplementedError() def _check_study_exists(self, metadata: Study) -> None: """ @@ -214,7 +256,6 @@ def export_study(self, metadata: T, target: Path, outputs: bool = True) -> Path: Returns: Path: The path to the created ZIP file containing the study files. """ - raise NotImplementedError() @abstractmethod def export_output(self, metadata: T, output_id: str, target: Path) -> None: @@ -228,7 +269,6 @@ def export_output(self, metadata: T, output_id: str, target: Path) -> None: Returns: zip file with study files compressed inside """ - raise NotImplementedError() @abstractmethod def export_study_flat( @@ -236,7 +276,7 @@ def export_study_flat( metadata: T, dst_path: Path, outputs: bool = True, - output_list_filter: Optional[List[str]] = None, + output_list_filter: t.Optional[t.List[str]] = None, denormalize: bool = True, ) -> None: """ @@ -249,10 +289,9 @@ def export_study_flat( output_list_filter: list of outputs to keep (None indicate all outputs). denormalize: denormalize the study (replace matrix links by real matrices). """ - raise NotImplementedError() @abstractmethod - def get_synthesis(self, metadata: T, params: Optional[RequestParameters] = None) -> FileStudyTreeConfigDTO: + def get_synthesis(self, metadata: T, params: t.Optional[RequestParameters] = None) -> FileStudyTreeConfigDTO: """ Return study synthesis Args: @@ -261,16 +300,16 @@ def get_synthesis(self, metadata: T, params: Optional[RequestParameters] = None) Returns: FileStudyTreeConfigDTO """ - raise NotImplementedError() @abstractmethod def initialize_additional_data(self, study: T) -> bool: - raise NotImplementedError() + """Initialize additional data for a study.""" @abstractmethod def archive_study_output(self, study: T, output_id: str) -> bool: - raise NotImplementedError() + """Archive a study output.""" + # noinspection SpellCheckingInspection @abstractmethod def unarchive_study_output(self, study: T, output_id: str, keep_src_zip: bool) -> bool: - raise NotImplementedError() + """Un-archive a study output.""" diff --git a/antarest/study/model.py b/antarest/study/model.py index 40737debad..ad3d1f0fb4 100644 --- a/antarest/study/model.py +++ b/antarest/study/model.py @@ -46,9 +46,10 @@ "850": "empty_study_850.zip", "860": "empty_study_860.zip", "870": "empty_study_870.zip", + "880": "empty_study_880.zip", } -NEW_DEFAULT_STUDY_VERSION: str = "870" +NEW_DEFAULT_STUDY_VERSION: str = "880" class StudyGroup(Base): # type:ignore diff --git a/antarest/study/repository.py b/antarest/study/repository.py index 93237ff850..81c2463c69 100644 --- a/antarest/study/repository.py +++ b/antarest/study/repository.py @@ -23,9 +23,7 @@ def escape_like(string: str, escape_char: str = "\\") -> str: from sqlalchemy_utils import escape_like - query = session.query(User).filter( - User.name.ilike(escape_like('John')) - ) + query = session.query(User).filter(User.name.ilike(escape_like("John"))) Args: string: a string to escape @@ -257,9 +255,17 @@ def get_all( # pagination if pagination.page_nb or pagination.page_size: - q = q.offset(pagination.page_nb * pagination.page_size).limit(pagination.page_size) - - studies: t.Sequence[Study] = q.all() + limit = pagination.page_size + offset = pagination.page_nb * pagination.page_size + end = offset + limit + if sort_by is None: + q = q.order_by(entity.name.asc()) + if study_filter.groups or study_filter.tags: + studies: t.Sequence[Study] = q.all()[offset:end] + return studies + q = q.offset(offset).limit(limit) + + studies = q.all() return studies def count_studies(self, study_filter: StudyFilter = StudyFilter()) -> int: @@ -305,12 +311,9 @@ def _search_studies( else: q = q.filter(not_(RawStudy.missing.is_(None))) - if study_filter.users is not None: - q = q.options(joinedload(entity.owner)) - if study_filter.groups is not None: - q = q.options(joinedload(entity.groups)) - if study_filter.tags is not None: - q = q.options(joinedload(entity.tags)) + q = q.options(joinedload(entity.owner)) + q = q.options(joinedload(entity.groups)) + q = q.options(joinedload(entity.tags)) q = q.options(joinedload(entity.additional_data)) if study_filter.managed is not None: diff --git a/antarest/study/service.py b/antarest/study/service.py index c13f755aad..aab951326b 100644 --- a/antarest/study/service.py +++ b/antarest/study/service.py @@ -38,7 +38,6 @@ from antarest.core.jwt import DEFAULT_ADMIN_USER, JWTGroup, JWTUser from antarest.core.model import JSON, SUB_JSON, PermissionInfo, PublicMode, StudyPermissionType from antarest.core.requests import RequestParameters, UserHasNotPermissionError -from antarest.core.roles import RoleType from antarest.core.tasks.model import TaskListFilter, TaskResult, TaskStatus, TaskType from antarest.core.tasks.service import ITaskService, TaskUpdateNotifier, noop_notifier from antarest.core.utils.fastapi_sqlalchemy import db @@ -49,7 +48,7 @@ from antarest.study.business.adequacy_patch_management import AdequacyPatchManager from antarest.study.business.advanced_parameters_management import AdvancedParamsManager from antarest.study.business.allocation_management import AllocationManager -from antarest.study.business.area_management import AreaCreationDTO, AreaInfoDTO, AreaManager, AreaType, AreaUI +from antarest.study.business.area_management import AreaCreationDTO, AreaInfoDTO, AreaManager, AreaType, UpdateAreaUi from antarest.study.business.areas.hydro_management import HydroManager from antarest.study.business.areas.properties_management import PropertiesManager from antarest.study.business.areas.renewable_management import RenewableManager @@ -75,6 +74,7 @@ XpansionCandidateDTO, XpansionManager, ) +from antarest.study.common.default_values import AreasQueryFile, LinksQueryFile from antarest.study.model import ( DEFAULT_WORKSPACE_NAME, NEW_DEFAULT_STUDY_VERSION, @@ -108,6 +108,7 @@ from antarest.study.storage.rawstudy.model.filesystem.ini_file_node import IniFileNode from antarest.study.storage.rawstudy.model.filesystem.inode import INode from antarest.study.storage.rawstudy.model.filesystem.matrix.input_series_matrix import InputSeriesMatrix +from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency from antarest.study.storage.rawstudy.model.filesystem.matrix.output_series_matrix import OutputSeriesMatrix from antarest.study.storage.rawstudy.model.filesystem.raw_file_node import RawFileNode from antarest.study.storage.rawstudy.raw_study_service import RawStudyService @@ -273,13 +274,20 @@ def __init__( self.thermal_manager = ThermalManager(self.storage_service) self.st_storage_manager = STStorageManager(self.storage_service) self.ts_config_manager = TimeSeriesConfigManager(self.storage_service) - self.table_mode_manager = TableModeManager(self.storage_service) self.playlist_manager = PlaylistManager(self.storage_service) self.scenario_builder_manager = ScenarioBuilderManager(self.storage_service) self.xpansion_manager = XpansionManager(self.storage_service) self.matrix_manager = MatrixManager(self.storage_service) self.binding_constraint_manager = BindingConstraintManager(self.storage_service) self.correlation_manager = CorrelationManager(self.storage_service) + self.table_mode_manager = TableModeManager( + self.areas, + self.links, + self.thermal_manager, + self.renewable_manager, + self.st_storage_manager, + self.binding_constraint_manager, + ) self.cache_service = cache_service self.config = config self.on_deletion_callbacks: t.List[t.Callable[[str], None]] = [] @@ -317,6 +325,72 @@ def get( return self.storage_service.get_storage(study).get(study, url, depth, formatted) + def aggregate_areas_data( + self, + uuid: str, + output_id: str, + query_file: AreasQueryFile, + frequency: MatrixFrequency, + mc_years: t.Sequence[int], + areas_ids: t.Sequence[str], + columns_names: t.Sequence[str], + params: RequestParameters, + ) -> JSON: + """ + Get study data inside filesystem + Args: + uuid: study uuid + output_id: simulation output ID + query_file: which types of data to retrieve ("values", "details", "details-st-storage", "details-res") + frequency: yearly, monthly, weekly, daily or hourly. + mc_years: list of monte-carlo years, if empty, all years are selected + areas_ids: list of areas names, if empty, all areas are selected + columns_names: columns to be selected, if empty, all columns are selected + params: request parameters + + Returns: data study formatted in json + + """ + study = self.get_study(uuid) + assert_permission(params.user, study, StudyPermissionType.READ) + output = self.storage_service.get_storage(study).aggregate_areas_data( + study, output_id, query_file, frequency, mc_years, areas_ids, columns_names + ) + + return output + + def aggregate_links_data( + self, + uuid: str, + output_id: str, + query_file: LinksQueryFile, + frequency: MatrixFrequency, + mc_years: t.Sequence[int], + columns_names: t.Sequence[str], + params: RequestParameters, + ) -> JSON: + """ + Get study data inside filesystem + Args: + uuid: study uuid + output_id: simulation output ID + query_file: which types of data to retrieve ("values", "details") + frequency: yearly, monthly, weekly, daily or hourly. + mc_years: list of monte-carlo years, if empty, all years are selected + columns_names: columns to be selected, if empty, all columns are selected + params: request parameters + + Returns: data study formatted in json + + """ + study = self.get_study(uuid) + assert_permission(params.user, study, StudyPermissionType.READ) + output = self.storage_service.get_storage(study).aggregate_links_data( + study, output_id, query_file, frequency, mc_years, columns_names + ) + + return output + def get_logs( self, study_id: str, @@ -1216,11 +1290,13 @@ def export_task(notifier: TaskUpdateNotifier) -> TaskResult: ) return FileResponse( tmp_export_file, - headers={"Content-Disposition": "inline"} - if filetype == ExportFormat.JSON - else { - "Content-Disposition": f'attachment; filename="output-{output_id}.{"tar.gz" if filetype == ExportFormat.TAR_GZ else "zip"}' - }, + headers=( + {"Content-Disposition": "inline"} + if filetype == ExportFormat.JSON + else { + "Content-Disposition": f'attachment; filename="output-{output_id}.{"tar.gz" if filetype == ExportFormat.TAR_GZ else "zip"}' + } + ), media_type=filetype, ) else: @@ -1318,13 +1394,7 @@ def import_study( study = self.storage_service.raw_study_service.import_study(study, stream) study.updated_at = datetime.utcnow() - # status = self._analyse_study(study) - self._save_study( - study, - owner=params.user, - group_ids=group_ids, - # content_status=status, - ) + self._save_study(study, params.user, group_ids) self.event_bus.push( Event( type=EventType.STUDY_CREATED, @@ -1786,7 +1856,7 @@ def update_area_ui( self, uuid: str, area_id: str, - area_ui: AreaUI, + area_ui: UpdateAreaUi, layer: str, params: RequestParameters, ) -> None: @@ -1936,7 +2006,6 @@ def _save_study( study: Study, owner: t.Optional[JWTUser] = None, group_ids: t.Sequence[str] = (), - content_status: StudyContentStatus = StudyContentStatus.VALID, ) -> None: """ Create or update a study with specified attributes. @@ -1948,29 +2017,24 @@ def _save_study( study: The study to be saved or updated. owner: The owner of the study (current authenticated user). group_ids: The list of group IDs to associate with the study. - content_status: The new content status for the study. Raises: UserHasNotPermissionError: - If the owner is not specified or has invalid authentication, - or if permission is denied for any of the specified group IDs. + If the owner or the group role is not specified. """ if not owner: raise UserHasNotPermissionError("owner is not specified or has invalid authentication") if isinstance(study, RawStudy): - study.content_status = content_status + study.content_status = StudyContentStatus.VALID study.owner = self.user_service.get_user(owner.impersonator, params=RequestParameters(user=owner)) study.groups.clear() for gid in group_ids: - jwt_group: t.Optional[JWTGroup] = next(filter(lambda g: g.id == gid, owner.groups), None) # type: ignore - if ( - jwt_group is None - or jwt_group.role is None - or (jwt_group.role < RoleType.WRITER and not owner.is_site_admin()) - ): + owned_groups = (g for g in owner.groups if g.id == gid) + jwt_group: t.Optional[JWTGroup] = next(owned_groups, None) + if jwt_group is None or jwt_group.role is None: raise UserHasNotPermissionError(f"Permission denied for group ID: {gid}") study.groups.append(Group(id=jwt_group.id, name=jwt_group.name)) diff --git a/antarest/study/storage/abstract_storage_service.py b/antarest/study/storage/abstract_storage_service.py index af76bf533d..5a249ea011 100644 --- a/antarest/study/storage/abstract_storage_service.py +++ b/antarest/study/storage/abstract_storage_service.py @@ -2,17 +2,21 @@ import logging import shutil import tempfile +import typing as t from abc import ABC from pathlib import Path -from typing import BinaryIO, List, Optional, Union from uuid import uuid4 +import numpy as np +import pandas as pd + from antarest.core.config import Config from antarest.core.exceptions import BadOutputError, StudyOutputNotFoundError from antarest.core.interfaces.cache import CacheConstants, ICache from antarest.core.model import JSON, PublicMode from antarest.core.utils.utils import StopWatch, extract_zip, unzip, zip_dir from antarest.login.model import GroupDTO +from antarest.study.common.default_values import AreasQueryFile, LinksQueryFile from antarest.study.common.studystorage import IStudyStorageService, T from antarest.study.model import ( DEFAULT_WORKSPACE_NAME, @@ -30,11 +34,62 @@ from antarest.study.storage.rawstudy.model.filesystem.config.files import get_playlist from antarest.study.storage.rawstudy.model.filesystem.config.model import Simulation from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy, StudyFactory +from antarest.study.storage.rawstudy.model.filesystem.folder_node import ChildNotFoundError +from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency from antarest.study.storage.rawstudy.model.helpers import FileStudyHelpers from antarest.study.storage.utils import extract_output_name, fix_study_root, remove_from_cache logger = logging.getLogger(__name__) +TEMPLATE_PARTS = "output/{sim_id}/economy/mc-ind" +"""Template for the path to reach the output data.""" +HORIZON_TEMPLATE = "output/{sim_id}/about-the-study/parameters" +# noinspection SpellCheckingInspection +MCYEAR_COL = "mcYear" +"""Column name for the Monte Carlo year.""" +AREA_COL = "area" +"""Column name for the area.""" +LINK_COL = "link" +"""Column name for the link.""" +TIME_ID_COL = "timeId" +"""Column name for the time index.""" +TIME_COL = "time" +"""Column name for the timestamp.""" +MC_YEAR_INDEX = 0 +"""Index in path parts starting from the Monte Carlo year to determine the Monte Carlo year.""" +AREA_INDEX = 2 +"""Index in path parts starting from the Monte Carlo year to determine the area name.""" +LINK_END_1_INDEX = 2 +"""Index in path parts starting from the Monte Carlo year to determine the link first vertex.""" +LINK_END_2_INDEX = 3 +"""Index in path parts starting from the Monte Carlo year to determine the link second vertex.""" +QUERY_FILE_INDEX = -2 +"""Index in path parts starting from the Monte Carlo year to determine the if we fetch values, details etc .""" +FREQUENCY_INDEX = -2 +"""Index in path parts starting from the Monte Carlo year to determine matrix frequency.""" + + +def flatten_tree(path_tree: t.Dict[str, t.Any]) -> t.List[t.List[str]]: + """ + Flatten paths tree + Args: + path_tree: tree to flatten + + Returns: list of all tree paths parts flattened + + """ + + result = [] + + for key, value in path_tree.items(): + if isinstance(value, dict) and value: + result.extend([[key] + sub for sub in flatten_tree(value)]) + elif value: + result.append([key, value]) + else: + result.append([key]) + return result + class AbstractStorageService(IStudyStorageService[T], ABC): def __init__( @@ -85,7 +140,7 @@ def get_study_information( patch_metadata = patch.study or PatchStudy() study_workspace = getattr(study, "workspace", DEFAULT_WORKSPACE_NAME) - folder: Optional[str] = None + folder: t.Optional[str] = None if hasattr(study, "folder"): folder = study.folder @@ -142,7 +197,7 @@ def get( if url == "" and depth == -1: cache_id = f"{CacheConstants.RAW_STUDY}/{metadata.id}" - from_cache: Optional[JSON] = None + from_cache: t.Optional[JSON] = None if use_cache: from_cache = self.cache.get(cache_id) if from_cache is not None: @@ -157,10 +212,195 @@ def get( del study return data + def aggregate_areas_data( + self, + metadata: T, + output_id: str, + query_file: AreasQueryFile, + frequency: MatrixFrequency, + mc_years: t.Sequence[int], + areas_ids: t.Sequence[str], + columns_names: t.Sequence[str], + ) -> t.Dict[str, t.Any]: + """ + Entry point to fetch areas raw data. + Args: + metadata: study file + output_id: simulation ID + query_file: "values", "details", "details-st-storage", "details-res" + frequency: "hourly", "daily", "weekly", "monthly", "annual" + mc_years: list of Monte Carlo years to be selected (empty list means all) + areas_ids: list of areas names to be selected (empty list means all) + columns_names: list of columns names to be selected (empty list means all) + + Returns: JSON (DF like matrix) representing the aggregated areas data + + """ + study = self.get_raw(metadata) + # retrieve the horizon from the study output + parameters = study.tree.get(url=HORIZON_TEMPLATE.format(sim_id=output_id).split("/")) + horizon = parameters.get("general", {}).get("horizon", "Annual") + + # root parts to retrieve the data + parts = TEMPLATE_PARTS.format(sim_id=output_id).split("/") + mc_years_parts = flatten_tree(study.tree.get(parts, depth=1)) + # Monte Carlo years filtering + if mc_years: + mc_years_parts = [mc_year_parts for mc_year_parts in mc_years_parts if int(mc_year_parts[0]) in mc_years] + mc_years_parts = [mc_year_parts + ["areas"] for mc_year_parts in mc_years_parts] + full_areas_parts = [] + for mc_year_parts in mc_years_parts: + areas_parts = flatten_tree(study.tree.get(parts + mc_year_parts, depth=1)) + # Areas names filtering + if areas_ids: + areas_parts = [area_parts for area_parts in areas_parts if area_parts[0] in areas_ids] + full_areas_parts.extend([mc_year_parts + area_parts for area_parts in areas_parts]) + all_paths_parts = [] + for mc_year_area_parts in full_areas_parts: + files_parts = flatten_tree(study.tree.get(parts + mc_year_area_parts, depth=-1)) + all_paths_parts.extend([mc_year_area_parts + file_parts for file_parts in files_parts]) + # Frequency filtering + all_paths_parts = [path_parts for path_parts in all_paths_parts if frequency in path_parts[FREQUENCY_INDEX]] + # query file filtering + all_paths_parts = [path_parts for path_parts in all_paths_parts if query_file in path_parts[QUERY_FILE_INDEX]] + + final_df = pd.DataFrame() + for path_parts in all_paths_parts: + try: + node_data = study.tree.get(parts + path_parts[:-1]) + except ChildNotFoundError: + continue + + # normalize columns' names + node_data["columns"] = ( + [(col[0].upper()).strip() for col in node_data["columns"]] + if query_file == AreasQueryFile.VALUES + else [((" ".join(col)).upper()).strip() for col in node_data["columns"]] + ) + # create a DataFrame from the node data + df = pd.DataFrame(**node_data) + # columns filtering + if columns_names: + # noinspection PyTypeChecker + df = df[[col for col in df.columns if col in columns_names]] + + # rearrange columns order + new_column_order = df.columns.values.tolist() + new_column_order = [AREA_COL, MCYEAR_COL, TIME_ID_COL, TIME_COL] + new_column_order + + # add column for areas and one to record the Monte Carlo year + df[MCYEAR_COL] = [int(path_parts[MC_YEAR_INDEX])] * len(df) + df[AREA_COL] = [path_parts[AREA_INDEX]] * len(df) + # add a column for the time id + df[TIME_ID_COL] = list(range(1, len(df) + 1)) + # add horizon column + if frequency == MatrixFrequency.ANNUAL: + df[TIME_COL] = [horizon] * len(df) + else: + df[TIME_COL] = df.index + + # Reorganize the columns + df = df.reindex(columns=new_column_order) + + final_df = pd.concat([final_df, df], ignore_index=True) + + # replace np.nan by None + final_df = final_df.replace({np.nan: None}) + + return {str(k): v for k, v in final_df.to_dict(orient="split").items()} + + def aggregate_links_data( + self, + metadata: T, + output_id: str, + query_file: LinksQueryFile, + frequency: MatrixFrequency, + mc_years: t.Sequence[int], + columns_names: t.Sequence[str], + ) -> t.Dict[str, t.Any]: + """ + Entry point to fetch links raw data. + Args: + metadata: study file + output_id: simulation ID + query_file: "values", "details" + frequency: "hourly", "daily", "weekly", "monthly", "annual" + mc_years: list of Monte Carlo years to be selected (empty list means all) + columns_names: list of columns names to be selected (empty list means all) + + Returns: JSON (DF like matrix) representing the aggregated links data + + """ + study = self.get_raw(metadata) + # retrieve the horizon from the study output + parameters = study.tree.get(url=HORIZON_TEMPLATE.format(sim_id=output_id).split("/")) + horizon = parameters.get("general", {}).get("horizon", "Annual") + + # root parts to retrieve the data + parts = TEMPLATE_PARTS.format(sim_id=output_id).split("/") + mc_years_parts = flatten_tree(study.tree.get(parts, depth=1)) + # Monte Carlo years filtering + if mc_years: + mc_years_parts = [mc_year_parts for mc_year_parts in mc_years_parts if int(mc_year_parts[0]) in mc_years] + mc_years_parts = [mc_year_parts + ["links"] for mc_year_parts in mc_years_parts] + all_paths_parts = [] + for mc_year_parts in mc_years_parts: + files_parts = flatten_tree(study.tree.get(parts + mc_year_parts, depth=-1)) + all_paths_parts.extend([mc_year_parts + file_parts for file_parts in files_parts]) + # Frequency filtering + all_paths_parts = [path_parts for path_parts in all_paths_parts if frequency in path_parts[FREQUENCY_INDEX]] + # query file filtering + all_paths_parts = [path_parts for path_parts in all_paths_parts if query_file in path_parts[QUERY_FILE_INDEX]] + + final_df = pd.DataFrame() + for path_parts in all_paths_parts: + try: + node_data = study.tree.get(parts + path_parts[:-1]) + except ChildNotFoundError: + continue + + # normalize columns' names + node_data["columns"] = ( + [(col[0].upper()).strip() for col in node_data["columns"]] + if query_file == LinksQueryFile.VALUES + else [((" ".join(col)).upper()).strip() for col in node_data["columns"]] + ) + # create a DataFrame from the node data + df = pd.DataFrame(**node_data) + # columns filtering + if columns_names: + # noinspection PyTypeChecker + df = df[[col for col in df.columns if col in columns_names]] + + # rearrange columns order + new_column_order = df.columns.values.tolist() + new_column_order = [LINK_COL, MCYEAR_COL, TIME_ID_COL, TIME_COL] + new_column_order + + # add the Monte Carlo and link columns + df[MCYEAR_COL] = [int(path_parts[MC_YEAR_INDEX])] * len(df) + df[LINK_COL] = [path_parts[LINK_END_1_INDEX] + " - " + path_parts[LINK_END_2_INDEX]] * len(df) + # add a column for the time id + df[TIME_ID_COL] = list(range(1, len(df) + 1)) + # add horizon column + if frequency == MatrixFrequency.ANNUAL: + df[TIME_COL] = [horizon] * len(df) + else: + df[TIME_COL] = df.index + + # Reorganize the columns + df = df.reindex(columns=new_column_order) + + final_df = pd.concat([final_df, df], ignore_index=True) + + # replace np.nan by None + final_df = final_df.replace({np.nan: None}) + + return {str(k): v for k, v in final_df.to_dict(orient="split").items()} + def get_study_sim_result( self, study: T, - ) -> List[StudySimResultDTO]: + ) -> t.List[StudySimResultDTO]: """ Get global result information Args: @@ -169,7 +409,7 @@ def get_study_sim_result( """ study_data = self.get_raw(study) patch_metadata = self.patch_service.get(study) - results: List[StudySimResultDTO] = [] + results: t.List[StudySimResultDTO] = [] if study_data.config.outputs is not None: reference = (patch_metadata.outputs or PatchOutputs()).reference for output in study_data.config.outputs: @@ -209,9 +449,9 @@ def get_study_sim_result( def import_output( self, metadata: T, - output: Union[BinaryIO, Path], - output_name: Optional[str] = None, - ) -> Optional[str]: + output: t.Union[t.BinaryIO, Path], + output_name: t.Optional[str] = None, + ) -> t.Optional[str]: """ Import additional output in an existing study. @@ -229,7 +469,7 @@ def import_output( path_output = Path(metadata.path) / "output" / f"imported_output_{str(uuid4())}" study_id = metadata.id path_output.mkdir(parents=True) - output_full_name: Optional[str] + output_full_name: t.Optional[str] is_zipped = False stopwatch = StopWatch() try: diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/area.py b/antarest/study/storage/rawstudy/model/filesystem/config/area.py new file mode 100644 index 0000000000..5ade25159f --- /dev/null +++ b/antarest/study/storage/rawstudy/model/filesystem/config/area.py @@ -0,0 +1,541 @@ +""" +Object model used to read and update area configuration. +""" + +import typing as t + +from pydantic import Field, root_validator, validator + +from antarest.study.business.enum_ignore_case import EnumIgnoreCase +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import ( + validate_color_rgb, + validate_colors, + validate_filtering, +) +from antarest.study.storage.rawstudy.model.filesystem.config.ini_properties import IniProperties + + +# noinspection SpellCheckingInspection +class OptimizationProperties(IniProperties): + """ + Object linked to `/input/areas//optimization.ini` information. + + Usage: + + >>> from antarest.study.storage.rawstudy.model.filesystem.config.area import OptimizationProperties + >>> from pprint import pprint + + Create and validate a new Optimization object from a dictionary read from a configuration file. + + >>> obj = { + ... "filtering": { + ... "filter-synthesis": "hourly, daily, weekly, monthly, annual", + ... "filter-year-by-year": "annual,hourly", + ... }, + ... "nodal optimization": { + ... "non-dispatchable-power": "true", + ... "dispatchable-hydro-power": "false", + ... "spread-unsupplied-energy-cost": "1500", + ... "spread-spilled-energy-cost": "317.2500", + ... }, + ... } + + >>> opt = OptimizationProperties(**obj) + + >>> pprint(opt.dict(by_alias=True), width=80) + {'filtering': {'filter-synthesis': 'hourly, daily, weekly, monthly, annual', + 'filter-year-by-year': 'hourly, annual'}, + 'nodal optimization': {'dispatchable-hydro-power': False, + 'non-dispatchable-power': True, + 'other-dispatchable-power': True, + 'spread-spilled-energy-cost': 317.25, + 'spread-unsupplied-energy-cost': 1500.0}} + + Update the filtering configuration : + + >>> opt.filtering.filter_synthesis = "hourly,weekly,monthly,annual,century" + >>> opt.filtering.filter_year_by_year = "hourly, monthly, annual" + + Update the modal optimization configuration : + + >>> opt.nodal_optimization.non_dispatchable_power = False + >>> opt.nodal_optimization.spread_spilled_energy_cost = 0.0 + + Convert the object to a dictionary for writing to a configuration file: + + >>> pprint(opt.dict(by_alias=True, exclude_defaults=True), width=80) + {'filtering': {'filter-synthesis': 'hourly, weekly, monthly, annual', + 'filter-year-by-year': 'hourly, monthly, annual'}, + 'nodal optimization': {'dispatchable-hydro-power': False, + 'non-dispatchable-power': False, + 'spread-unsupplied-energy-cost': 1500.0}} + """ + + class FilteringSection(IniProperties): + """Configuration read from section `[filtering]` of `/input/areas//optimization.ini`.""" + + filter_synthesis: str = Field("", alias="filter-synthesis") + filter_year_by_year: str = Field("", alias="filter-year-by-year") + + @validator("filter_synthesis", "filter_year_by_year", pre=True) + def _validate_filtering(cls, v: t.Any) -> str: + return validate_filtering(v) + + # noinspection SpellCheckingInspection + class ModalOptimizationSection(IniProperties): + """Configuration read from section `[nodal optimization]` of `/input/areas//optimization.ini`.""" + + non_dispatchable_power: bool = Field(default=True, alias="non-dispatchable-power") + dispatchable_hydro_power: bool = Field(default=True, alias="dispatchable-hydro-power") + other_dispatchable_power: bool = Field(default=True, alias="other-dispatchable-power") + spread_unsupplied_energy_cost: float = Field(default=0.0, ge=0, alias="spread-unsupplied-energy-cost") + spread_spilled_energy_cost: float = Field(default=0.0, ge=0, alias="spread-spilled-energy-cost") + + filtering: FilteringSection = Field( + default_factory=FilteringSection, + alias="filtering", + ) + nodal_optimization: ModalOptimizationSection = Field( + default_factory=ModalOptimizationSection, + alias="nodal optimization", + ) + + +class AdequacyPatchMode(EnumIgnoreCase): + """ + Adequacy patch mode. + + Only available if study version >= 830. + """ + + OUTSIDE = "outside" + INSIDE = "inside" + VIRTUAL = "virtual" + + +class AdequacyPathProperties(IniProperties): + """ + Object linked to `/input/areas//adequacy_patch.ini` information. + + Only available if study version >= 830. + """ + + class AdequacyPathSection(IniProperties): + """Configuration read from section `[adequacy-patch]` of `/input/areas//adequacy_patch.ini`.""" + + adequacy_patch_mode: AdequacyPatchMode = Field(default=AdequacyPatchMode.OUTSIDE, alias="adequacy-patch-mode") + + adequacy_patch: AdequacyPathSection = Field(default_factory=AdequacyPathSection, alias="adequacy-patch") + + +class AreaUI(IniProperties): + """ + Style of an area in the map or in a layer. + + Usage: + + >>> from antarest.study.storage.rawstudy.model.filesystem.config.area import AreaUI + >>> from pprint import pprint + + Create and validate a new AreaUI object from a dictionary read from a configuration file. + + >>> obj = { + ... "x": 1148, + ... "y": 144, + ... "color_r": 0, + ... "color_g": 128, + ... "color_b": 255, + ... } + >>> ui = AreaUI(**obj) + >>> pprint(ui.dict(by_alias=True), width=80) + {'colorRgb': '#0080FF', 'x': 1148, 'y': 144} + + Update the color: + + >>> ui.color_rgb = (192, 168, 127) + >>> pprint(ui.dict(by_alias=True), width=80) + {'colorRgb': '#C0A87F', 'x': 1148, 'y': 144} + """ + + x: int = Field(0, description="x coordinate of the area in the map") + y: int = Field(0, description="y coordinate of the area in the map") + color_rgb: str = Field( + "#E66C2C", + alias="colorRgb", + description="color of the area in the map", + ) + + @validator("color_rgb", pre=True) + def _validate_color_rgb(cls, v: t.Any) -> str: + return validate_color_rgb(v) + + @root_validator(pre=True) + def _validate_colors(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: + return validate_colors(values) + + def to_config(self) -> t.Mapping[str, t.Any]: + """ + Convert the object to a dictionary for writing to a configuration file: + + Usage: + + >>> from antarest.study.storage.rawstudy.model.filesystem.config.area import AreaUI + >>> from pprint import pprint + + >>> ui = AreaUI(x=1148, y=144, color_rgb="#0080FF") + >>> pprint(ui.to_config(), width=80) + {'color_b': 255, 'color_g': 128, 'color_r': 0, 'x': 1148, 'y': 144} + """ + r = int(self.color_rgb[1:3], 16) + g = int(self.color_rgb[3:5], 16) + b = int(self.color_rgb[5:7], 16) + return {"x": self.x, "y": self.y, "color_r": r, "color_g": g, "color_b": b} + + +class UIProperties(IniProperties): + """ + Object linked to `/input/areas//ui.ini` information. + + Usage: + + >>> from antarest.study.storage.rawstudy.model.filesystem.config.area import UIProperties + >>> from pprint import pprint + + UIProperties has default values for `style` and `layers`: + + >>> ui = UIProperties() + >>> pprint(ui.dict(), width=80) + {'layer_styles': {0: {'color_rgb': '#E66C2C', 'x': 0, 'y': 0}}, + 'layers': {0}, + 'style': {'color_rgb': '#E66C2C', 'x': 0, 'y': 0}} + + Create and validate a new UI object from a dictionary read from a configuration file. + + >>> obj = { + ... "ui": { + ... "x": 1148, + ... "y": 144, + ... "color_r": 0, + ... "color_g": 128, + ... "color_b": 255, + ... "layers": "0 7", + ... }, + ... "layerX": {"0": 1148, "7": 18}, + ... "layerY": {"0": 144, "7": -22}, + ... "layerColor": { + ... "0": "0 , 128 , 255", + ... "4": "0 , 128 , 255", + ... "6": "192 , 168 , 99", + ... "7": "0 , 128 , 255", + ... "8": "0 , 128 , 255", + ... }, + ... } + + >>> ui = UIProperties(**obj) + >>> pprint(ui.dict(), width=80) + {'layer_styles': {0: {'color_rgb': '#0080FF', 'x': 1148, 'y': 144}, + 4: {'color_rgb': '#0080FF', 'x': 1148, 'y': 144}, + 6: {'color_rgb': '#C0A863', 'x': 1148, 'y': 144}, + 7: {'color_rgb': '#0080FF', 'x': 18, 'y': -22}, + 8: {'color_rgb': '#0080FF', 'x': 1148, 'y': 144}}, + 'layers': {0, 7}, + 'style': {'color_rgb': '#0080FF', 'x': 1148, 'y': 144}} + + """ + + style: AreaUI = Field( + default_factory=AreaUI, + description="style of the area in the map: coordinates and color", + ) + layers: t.Set[int] = Field( + default_factory=set, + description="layers where the area is visible", + ) + layer_styles: t.Dict[int, AreaUI] = Field( + default_factory=dict, + description="style of the area in each layer", + alias="layerStyles", + ) + + @root_validator(pre=True) + def _set_default_style(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: + """Defined the default style if missing.""" + style = values.get("style") + if style is None: + values["style"] = AreaUI() + elif isinstance(style, dict): + values["style"] = AreaUI(**style) + else: + values["style"] = AreaUI(**style.dict()) + return values + + @root_validator(pre=True) + def _set_default_layers(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: + """Define the default layers if missing.""" + _layers = values.get("layers") + if _layers is None: + values["layers"] = {0} + return values + + @root_validator(pre=True) + def _set_default_layer_styles(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: + """Define the default layer styles if missing.""" + layer_styles = values.get("layer_styles") + if layer_styles is None: + values["layer_styles"] = {0: AreaUI()} + elif isinstance(layer_styles, dict): + values["layer_styles"] = {0: AreaUI()} + for key, style in layer_styles.items(): + key = int(key) + if isinstance(style, dict): + values["layer_styles"][key] = AreaUI(**style) + else: + values["layer_styles"][key] = AreaUI(**style.dict()) + else: + raise TypeError(f"Invalid type for layer_styles: {type(layer_styles)}") + return values + + @root_validator(pre=True) + def _validate_layers(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: + # Parse the `[ui]` section (if any) + ui_section = values.pop("ui", {}) + if ui_section: + # If `layers` is a single integer, convert it to `str` first + layers = str(ui_section.pop("layers", "0")) + values["layers"] = set([int(layer) for layer in layers.split()]) + values["style"].x = ui_section.pop("x", values["style"].x) + values["style"].y = ui_section.pop("y", values["style"].y) + values["style"].color_rgb = ( + ui_section.pop("color_r", values["style"].color_rgb[0]), + ui_section.pop("color_g", values["style"].color_rgb[1]), + ui_section.pop("color_b", values["style"].color_rgb[2]), + ) + + # Parse the `[layerX]`, `[layerY]` and `[layerColor]` sections (if any) + layer_x_section = values.pop("layerX", {}) + layer_y_section = values.pop("layerY", {}) + layer_color_section = values.pop("layerColor", {}) + # Key are converted to `int` and values to `str` (for splitting) + layer_x_section = {int(layer): str(x) for layer, x in layer_x_section.items()} + layer_y_section = {int(layer): str(y) for layer, y in layer_y_section.items()} + layer_color_section = {int(layer): str(color) for layer, color in layer_color_section.items()} + # indexes must contain all the keys from the three sections + indexes = set(layer_x_section) | set(layer_y_section) | set(layer_color_section) + if indexes: + layer_styles = {index: values["style"].copy() for index in indexes} + for layer, x in layer_x_section.items(): + layer_styles[layer].x = int(x) + for layer, y in layer_y_section.items(): + layer_styles[layer].y = int(y) + for layer, color in layer_color_section.items(): + r, g, b = [int(c) for c in color.split(",")] + layer_styles[layer].color_rgb = r, g, b + values["layer_styles"].update(layer_styles) + values["layers"] = values["layers"].intersection(indexes) + + return values + + def to_config(self) -> t.Mapping[str, t.Mapping[str, t.Any]]: + """ + Convert the object to a dictionary for writing to a configuration file: + + Usage: + + >>> from antarest.study.storage.rawstudy.model.filesystem.config.area import UIProperties + >>> from pprint import pprint + + >>> ui = UIProperties( + ... style=AreaUI(x=1148, y=144, color_rgb=(0, 128, 255)), + ... layers={0, 7}, + ... layer_styles={ + ... 6: AreaUI(x=1148, y=144, color_rgb="#C0A863"), + ... 7: AreaUI(x=18, y=-22, color_rgb=(0, 128, 255)), + ... }, + ... ) + >>> pprint(ui.to_config(), width=80) + {'layerColor': {'0': '230, 108, 44', '6': '192, 168, 99', '7': '0, 128, 255'}, + 'layerX': {'0': 0, '6': 1148, '7': 18}, + 'layerY': {'0': 0, '6': 144, '7': -22}, + 'ui': {'color_b': 255, + 'color_g': 128, + 'color_r': 0, + 'layers': '0 7', + 'x': 1148, + 'y': 144}} + """ + obj: t.MutableMapping[str, t.MutableMapping[str, t.Any]] = { + "ui": {}, + "layerX": {}, + "layerY": {}, + "layerColor": {}, + } + obj["ui"].update(self.style.to_config()) + obj["ui"]["layers"] = " ".join(str(layer) for layer in sorted(self.layers)) + for layer, style in self.layer_styles.items(): + obj["layerX"][str(layer)] = style.x + obj["layerY"][str(layer)] = style.y + r = int(style.color_rgb[1:3], 16) + g = int(style.color_rgb[3:5], 16) + b = int(style.color_rgb[5:7], 16) + obj["layerColor"][str(layer)] = f"{r}, {g}, {b}" + return obj + + +class AreaFolder(IniProperties): + """ + Object linked to `/input/areas/` information. + + Usage: + + >>> from antarest.study.storage.rawstudy.model.filesystem.config.area import AreaFolder + >>> from pprint import pprint + + Create and validate a new AreaProperties object from a dictionary read from a configuration file. + + >>> obj = AreaFolder() + >>> pprint(obj.dict(), width=80) + {'adequacy_patch': None, + 'optimization': {'filtering': {'filter_synthesis': '', + 'filter_year_by_year': ''}, + 'nodal_optimization': {'dispatchable_hydro_power': True, + 'non_dispatchable_power': True, + 'other_dispatchable_power': True, + 'spread_spilled_energy_cost': 0.0, + 'spread_unsupplied_energy_cost': 0.0}}, + 'ui': {'layer_styles': {0: {'color_rgb': '#E66C2C', 'x': 0, 'y': 0}}, + 'layers': {0}, + 'style': {'color_rgb': '#E66C2C', 'x': 0, 'y': 0}}} + + >>> pprint(obj.to_config(), width=80) + {'optimization': {'filtering': {'filter-synthesis': '', + 'filter-year-by-year': ''}, + 'nodal optimization': {'dispatchable-hydro-power': True, + 'non-dispatchable-power': True, + 'other-dispatchable-power': True, + 'spread-spilled-energy-cost': 0.0, + 'spread-unsupplied-energy-cost': 0.0}}, + 'ui': {'layerColor': {'0': '230, 108, 44'}, + 'layerX': {'0': 0}, + 'layerY': {'0': 0}, + 'ui': {'color_b': 44, + 'color_g': 108, + 'color_r': 230, + 'layers': '0', + 'x': 0, + 'y': 0}}} + + We can construct an AreaProperties object from invalid data: + + >>> data = { + ... "optimization": { + ... "filtering": {"filter-synthesis": "annual, centennial"}, + ... "nodal optimization": { + ... "spread-spilled-energy-cost": "15.5", + ... "spread-unsupplied-energy-cost": "yes", + ... }, + ... }, + ... "ui": {"style": {"color_rgb": (0, 128, 256)}}, + ... } + + >>> obj = AreaFolder.construct(**data) + >>> pprint(obj.dict(), width=80) + {'adequacy_patch': None, + 'optimization': {'filtering': {'filter-synthesis': 'annual, centennial'}, + 'nodal optimization': {'spread-spilled-energy-cost': '15.5', + 'spread-unsupplied-energy-cost': 'yes'}}, + 'ui': {'style': {'color_rgb': (0, 128, 256)}}} + + >>> AreaFolder.validate(data) + Traceback (most recent call last): + ... + pydantic.error_wrappers.ValidationError: 1 validation error for AreaFolder + optimization -> nodal optimization -> spread-unsupplied-energy-cost + value is not a valid float (type=type_error.float) + """ + + optimization: OptimizationProperties = Field( + default_factory=OptimizationProperties, + description="optimization configuration", + ) + adequacy_patch: t.Optional[AdequacyPathProperties] = Field( + None, + description="adequacy patch configuration", + ) + ui: UIProperties = Field( + default_factory=UIProperties, + description="UI configuration", + ) + + +# noinspection SpellCheckingInspection +class ThermalAreasProperties(IniProperties): + """ + Object linked to `/input/thermal/areas.ini` information. + + Usage: + + >>> from antarest.study.storage.rawstudy.model.filesystem.config.area import ThermalAreasProperties + >>> from pprint import pprint + + Create and validate a new ThermalArea object from a dictionary read from a configuration file:: + + [unserverdenergycost] + at = 4000.80 + be = 3500 + de = 1250 + fr = 138.50 + + [spilledenergycost] + cz = 100.0 + + >>> obj = { + ... "unserverdenergycost": { + ... "at": "4000.80", + ... "be": "3500", + ... "de": "1250", + ... "fr": "138.50", + ... }, + ... "spilledenergycost": { + ... "cz": "100.0", + ... }, + ... } + >>> area = ThermalAreasProperties(**obj) + >>> pprint(area.dict(), width=80) + {'spilled_energy_cost': {'cz': 100.0}, + 'unserverd_energy_cost': {'at': 4000.8, + 'be': 3500.0, + 'de': 1250.0, + 'fr': 138.5}} + + Update the unserverd energy cost: + + >>> area.unserverd_energy_cost["at"] = 6500.0 + >>> area.unserverd_energy_cost["fr"] = 0.0 + >>> pprint(area.dict(), width=80) + {'spilled_energy_cost': {'cz': 100.0}, + 'unserverd_energy_cost': {'at': 6500.0, 'be': 3500.0, 'de': 1250.0, 'fr': 0.0}} + + Convert the object to a dictionary for writing to a configuration file: + + >>> pprint(area.to_config(), width=80) + {'spilledenergycost': {'cz': 100.0}, + 'unserverdenergycost': {'at': 6500.0, 'be': 3500.0, 'de': 1250.0, 'fr': 0.0}} + """ + + unserverd_energy_cost: t.MutableMapping[str, float] = Field( + default_factory=dict, + alias="unserverdenergycost", + description="unserverd energy cost (€/MWh) of each area", + ) + + spilled_energy_cost: t.MutableMapping[str, float] = Field( + default_factory=dict, + alias="spilledenergycost", + description="spilled energy cost (€/MWh) of each area", + ) + + @validator("unserverd_energy_cost", "spilled_energy_cost", pre=True) + def _validate_energy_cost(cls, v: t.Any) -> t.MutableMapping[str, float]: + if isinstance(v, dict): + return {str(k): float(v) for k, v in v.items()} + raise TypeError(f"Invalid type for energy cost: {type(v)}") diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/binding_constraint.py b/antarest/study/storage/rawstudy/model/filesystem/config/binding_constraint.py index a396ea950d..11749cf456 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/binding_constraint.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/binding_constraint.py @@ -1,28 +1,18 @@ -import typing as t -from enum import Enum +""" +Object model used to read and update binding constraint configuration. +""" -from pydantic import BaseModel +from antarest.study.business.enum_ignore_case import EnumIgnoreCase -class BindingConstraintFrequency(str, Enum): +class BindingConstraintFrequency(EnumIgnoreCase): """ - Frequency of binding constraint - - - HOURLY: hourly time series with 8784 lines - - DAILY: daily time series with 366 lines - - WEEKLY: weekly time series with 366 lines (same as daily) - - Usage example: - - >>> bcf = BindingConstraintFrequency.HOURLY - >>> bcf == "hourly" - True - >>> bcf = BindingConstraintFrequency.DAILY - >>> "daily" == bcf - True - >>> bcf = BindingConstraintFrequency.WEEKLY - >>> bcf != "daily" - True + Frequency of a binding constraint. + + Attributes: + HOURLY: hourly time series with 8784 lines + DAILY: daily time series with 366 lines + WEEKLY: weekly time series with 366 lines (same as daily) """ HOURLY = "hourly" @@ -30,8 +20,18 @@ class BindingConstraintFrequency(str, Enum): WEEKLY = "weekly" -class BindingConstraintDTO(BaseModel): - id: str - areas: t.Set[str] - clusters: t.Set[str] - time_step: BindingConstraintFrequency +class BindingConstraintOperator(EnumIgnoreCase): + """ + Operator of a binding constraint. + + Attributes: + LESS: less than or equal to + GREATER: greater than or equal to + BOTH: both LESS and GREATER + EQUAL: equal to + """ + + LESS = "less" + GREATER = "greater" + BOTH = "both" + EQUAL = "equal" diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py b/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py index 4563a0d217..1c84019294 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py @@ -3,13 +3,12 @@ In the near future, this set of classes may be used for solar, wind and hydro clusters. """ + import functools import typing as t from pydantic import BaseModel, Extra, Field -__all__ = ("ItemProperties", "ClusterProperties") - @functools.total_ordering class ItemProperties( @@ -69,10 +68,16 @@ class ClusterProperties(ItemProperties): # Activity status: # - True: the plant may generate. # - False: not yet commissioned, moth-balled, etc. - enabled: bool = Field(default=True, description="Activity status") + enabled: bool = Field(default=True, description="Activity status", title="Enabled") # noinspection SpellCheckingInspection - unit_count: int = Field(default=1, ge=1, description="Unit count", alias="unitcount") + unit_count: int = Field( + default=1, + ge=1, + description="Unit count", + alias="unitcount", + title="Unit Count", + ) # noinspection SpellCheckingInspection nominal_capacity: float = Field( @@ -80,6 +85,7 @@ class ClusterProperties(ItemProperties): ge=0, description="Nominal capacity (MW per unit)", alias="nominalcapacity", + title="Nominal Capacity", ) @property diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py b/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py new file mode 100644 index 0000000000..74f93f5c46 --- /dev/null +++ b/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py @@ -0,0 +1,77 @@ +import typing as t + +_ALL_FILTERING = ["hourly", "daily", "weekly", "monthly", "annual"] + + +def extract_filtering(v: t.Any) -> t.Sequence[str]: + """ + Extract filtering values from a comma-separated list of values. + """ + + if v is None: + values = set() + elif isinstance(v, str): + values = {x.strip() for x in v.lower().split(",")} if v else set() + elif isinstance(v, (list, tuple)): + values = set(x.strip().lower() for x in v) + else: + raise TypeError(f"Invalid type for filtering: {type(v)!r}") + + try: + return sorted(values, key=lambda x: _ALL_FILTERING.index(x)) + except ValueError as e: + raise ValueError(f"Invalid value for filtering: {e!s}") from None + + +def validate_filtering(v: t.Any) -> str: + """ + Validate the filtering field and convert it to a comma separated string. + """ + + return ", ".join(extract_filtering(v)) + + +# noinspection SpellCheckingInspection +def validate_colors(values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: + """ + Validate ``color_rgb``, ``color_r``, ``color_g``, ``color_b`` and convert them to ``color_rgb``. + """ + + def _pop_any(dictionary: t.MutableMapping[str, t.Any], *keys: str) -> t.Any: + """Save as `pop` but for multiple keys. Return the first found value.""" + return next((dictionary.pop(key, None) for key in keys if key in dictionary), None) + + color_r = _pop_any(values, "color_r", "colorr") + color_g = _pop_any(values, "color_g", "colorg") + color_b = _pop_any(values, "color_b", "colorb") + if color_r is not None and color_g is not None and color_b is not None: + values["color_rgb"] = color_r, color_g, color_b + return values + + +def validate_color_rgb(v: t.Any) -> str: + """ + Validate RGB color field and convert it to color code. + + Accepts: + - a string in the format "#RRGGBB" + - a string in the format "rgb(R, G, B)" + - a string in the format "R, G, B" + - a list or tuple of 3 integers + """ + + if isinstance(v, str): + if v.startswith("#"): + r = int(v[1:3], 16) + g = int(v[3:5], 16) + b = int(v[5:7], 16) + elif v.startswith("rgb("): + r, g, b = [int(c) for c in v[4:-1].split(",")] + else: + r, g, b = [int(c) for c in v.split(",")] + elif isinstance(v, (list, tuple)): + r, g, b = map(int, v) + else: + raise TypeError(f"Invalid type for 'color_rgb': {type(v)}") + + return f"#{r:02X}{g:02X}{b:02X}" diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/files.py b/antarest/study/storage/rawstudy/model/filesystem/config/files.py index 3248b6560a..6f49c9f6fa 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/files.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/files.py @@ -10,16 +10,15 @@ from antarest.core.model import JSON from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( - BindingConstraintDTO, - BindingConstraintFrequency, -) +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency from antarest.study.storage.rawstudy.model.filesystem.config.exceptions import ( SimulationParsingError, XpansionParsingError, ) +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import extract_filtering from antarest.study.storage.rawstudy.model.filesystem.config.model import ( Area, + BindingConstraintDTO, DistrictSet, FileStudyTreeConfig, Link, @@ -83,6 +82,48 @@ def build(study_path: Path, study_id: str, output_path: t.Optional[Path] = None) ) +def _extract_text_from_zip(root: Path, posix_path: str) -> t.Sequence[str]: + """ + Extracts text from a file inside a ZIP archive and returns it as a list of lines. + + Args: + root: The path to the ZIP archive. + posix_path: The relative path to the file inside the ZIP archive. + + Returns: + A list of lines in the file. If the file is not found, an empty list is returned. + """ + with zipfile.ZipFile(root) as zf: + try: + with zf.open(posix_path) as f: + text = f.read().decode("utf-8") + return text.splitlines(keepends=False) + except KeyError: + return [] + + +def _extract_ini_from_zip(root: Path, posix_path: str, multi_ini_keys: t.Sequence[str] = ()) -> t.Mapping[str, t.Any]: + """ + Extracts data from an INI file inside a ZIP archive and returns it as a dictionary. + + Args: + root: The path to the ZIP archive. + posix_path: The relative path to the file inside the ZIP archive. + multi_ini_keys: List of keys to use for multi INI files. + + Returns: + A dictionary of keys/values in the INI file. If the file is not found, an empty dictionary is returned. + """ + reader = IniReader(multi_ini_keys) + with zipfile.ZipFile(root) as zf: + try: + with zf.open(posix_path) as f: + buffer = io.StringIO(f.read().decode("utf-8")) + return reader.read(buffer) + except KeyError: + return {} + + def _extract_data_from_file( root: Path, inside_root_path: Path, @@ -110,14 +151,7 @@ def _extract_data_from_file( if file_type == FileType.TXT: # Parse the file as a list of lines, return an empty list if missing. if is_zip_file: - with zipfile.ZipFile(root) as zf: - try: - with zf.open(posix_path) as f: - text = f.read().decode("utf-8") - return text.splitlines(keepends=False) - except KeyError: - # File not found in the ZIP archive - return [] + return _extract_text_from_zip(root, posix_path) else: output_data_path = root / inside_root_path try: @@ -127,19 +161,12 @@ def _extract_data_from_file( elif file_type in {FileType.MULTI_INI, FileType.SIMPLE_INI}: # Parse the file as a dictionary of keys/values, return an empty dictionary if missing. - reader = IniReader(multi_ini_keys) if is_zip_file: - with zipfile.ZipFile(root) as zf: - try: - with zf.open(posix_path) as f: - buffer = io.StringIO(f.read().decode("utf-8")) - return reader.read(buffer) - except KeyError: - # File not found in the ZIP archive - return {} + return _extract_ini_from_zip(root, posix_path, multi_ini_keys=multi_ini_keys) else: output_data_path = root / inside_root_path try: + reader = IniReader(multi_ini_keys) return reader.read(output_data_path) except FileNotFoundError: return {} @@ -294,7 +321,7 @@ def _parse_xpansion_version(path: Path) -> str: raise XpansionParsingError(xpansion_json, f"key '{exc}' not found in JSON object") from exc -_regex_eco_adq = re.compile("^([0-9]{8}-[0-9]{4})(eco|adq)-?(.*)") +_regex_eco_adq = re.compile(r"^(\d{8}-\d{4})(eco|adq)-?(.*)") match_eco_adq = _regex_eco_adq.match @@ -359,14 +386,36 @@ def get_playlist(config: JSON) -> t.Optional[t.Dict[int, float]]: def parse_area(root: Path, area: str) -> "Area": + """ + Parse an area configuration and extract its filtering configuration. + + Args: + root: The root directory of the study. + area: The name of the area to parse. + + Returns: + The area configuration. + """ area_id = transform_name_to_id(area) + + # Parse the optimization INI file to extract the filtering configuration. + # The file is optional, so we use a default value to avoid a parsing error. + optimization = _extract_data_from_file( + root=root, + inside_root_path=Path(f"input/areas/{area_id}/optimization.ini"), + file_type=FileType.SIMPLE_INI, + ) + filtering = optimization.get("filtering", {}) + filter_synthesis = extract_filtering(filtering.get("filter-synthesis", "")) + filter_year_by_year = extract_filtering(filtering.get("filter-year-by-year", "")) + return Area( name=area, - links=_parse_links(root, area_id), + links=_parse_links_filtering(root, area_id), thermals=_parse_thermal(root, area_id), renewables=_parse_renewables(root, area_id), - filters_synthesis=_parse_filters_synthesis(root, area_id), - filters_year=_parse_filters_year(root, area_id), + filters_synthesis=filter_synthesis, + filters_year=filter_year_by_year, st_storages=_parse_st_storage(root, area_id), ) @@ -444,33 +493,14 @@ def _parse_st_storage(root: Path, area: str) -> t.List[STStorageConfigType]: return config_list -def _parse_links(root: Path, area: str) -> t.Dict[str, Link]: +def _parse_links_filtering(root: Path, area: str) -> t.Dict[str, Link]: properties_ini = _extract_data_from_file( root=root, inside_root_path=Path(f"input/links/{area}/properties.ini"), file_type=FileType.SIMPLE_INI, ) - return {link: Link.from_json(properties_ini[link]) for link in list(properties_ini.keys())} - - -def _parse_filters_synthesis(root: Path, area: str) -> t.List[str]: - optimization = _extract_data_from_file( - root=root, - inside_root_path=Path(f"input/areas/{area}/optimization.ini"), - file_type=FileType.SIMPLE_INI, - ) - filters: str = optimization["filtering"]["filter-synthesis"] - return Link.split(filters) - - -def _parse_filters_year(root: Path, area: str) -> t.List[str]: - optimization = _extract_data_from_file( - root=root, - inside_root_path=Path(f"input/areas/{area}/optimization.ini"), - file_type=FileType.SIMPLE_INI, - ) - filters: str = optimization["filtering"]["filter-year-by-year"] - return Link.split(filters) + links_by_ids = {link_id: Link(**obj) for link_id, obj in properties_ini.items()} + return links_by_ids def _check_build_on_solver_tests(test_dir: Path) -> None: diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/ini_properties.py b/antarest/study/storage/rawstudy/model/filesystem/config/ini_properties.py new file mode 100644 index 0000000000..51f10a5ca5 --- /dev/null +++ b/antarest/study/storage/rawstudy/model/filesystem/config/ini_properties.py @@ -0,0 +1,52 @@ +import json +import typing as t + +from pydantic import BaseModel, Extra + + +class IniProperties( + BaseModel, + # On reading, if the configuration contains an extra field, it is better + # to forbid it, because it allows errors to be detected early. + # Ignoring extra attributes can hide errors. + extra=Extra.forbid, + # If a field is updated on assignment, it is also validated. + validate_assignment=True, + # On testing, we can use snake_case for field names. + allow_population_by_field_name=True, +): + """ + Base class for configuration sections. + """ + + def to_config(self) -> t.Mapping[str, t.Any]: + """ + Convert the object to a dictionary for writing to a configuration file (`*.ini`). + + Returns: + A dictionary with the configuration values. + """ + + config = {} + for field_name, field in self.__fields__.items(): + value = getattr(self, field_name) + if value is None: + continue + if isinstance(value, IniProperties): + config[field.alias] = value.to_config() + else: + config[field.alias] = json.loads(json.dumps(value)) + return config + + @classmethod + def construct(cls, _fields_set: t.Optional[t.Set[str]] = None, **values: t.Any) -> "IniProperties": + """ + Construct a new model instance from a dict of values, replacing aliases with real field names. + """ + # The pydantic construct() function does not allow aliases to be handled. + aliases = {(field.alias or name): name for name, field in cls.__fields__.items()} + renamed_values = {aliases.get(k, k): v for k, v in values.items()} + if _fields_set is not None: + _fields_set = {aliases.get(f, f) for f in _fields_set} + # noinspection PyTypeChecker + return super().construct(_fields_set, **renamed_values) diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/links.py b/antarest/study/storage/rawstudy/model/filesystem/config/links.py new file mode 100644 index 0000000000..7ebc0e2176 --- /dev/null +++ b/antarest/study/storage/rawstudy/model/filesystem/config/links.py @@ -0,0 +1,161 @@ +""" +Object model used to read and update link configuration. +""" + +import typing as t + +from pydantic import Field, root_validator, validator + +from antarest.study.business.enum_ignore_case import EnumIgnoreCase +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import ( + validate_color_rgb, + validate_colors, + validate_filtering, +) +from antarest.study.storage.rawstudy.model.filesystem.config.ini_properties import IniProperties + + +# noinspection SpellCheckingInspection +class AssetType(EnumIgnoreCase): + """ + Enum representing the type of asset for a link between two areas. + + Attributes: + AC: Represents an Alternating Current link. This is the most common type of electricity transmission. + DC: Represents a Direct Current link. This is typically used for long-distance transmission. + GAZ: Represents a gas link. This is used when the link is related to gas transmission. + VIRT: Represents a virtual link. This is used when the link doesn't physically exist + but is used for modeling purposes. + OTHER: Represents any other type of link that doesn't fall into the above categories. + """ + + AC = "ac" + DC = "dc" + GAZ = "gaz" + VIRT = "virt" + OTHER = "other" + + +class TransmissionCapacity(EnumIgnoreCase): + """ + Enum representing the transmission capacity of a link. + + Attributes: + INFINITE: Represents a link with infinite transmission capacity. + This means there are no limits on the amount of electricity that can be transmitted. + IGNORE: Represents a link where the transmission capacity is ignored. + This means the capacity is not considered during simulations. + ENABLED: Represents a link with a specific transmission capacity. + This means the capacity is considered in the model and has a certain limit. + """ + + INFINITE = "infinite" + IGNORE = "ignore" + ENABLED = "enabled" + + +class LinkProperties(IniProperties): + """ + Configuration read from a section in the `input/links//properties.ini` file. + + Usage: + + >>> from antarest.study.storage.rawstudy.model.filesystem.config.links import LinkProperties + >>> from pprint import pprint + + Create and validate a new `LinkProperties` object from a dictionary read from a configuration file. + + >>> obj = { + ... "hurdles-cost": "false", + ... "loop-flow": "false", + ... "use-phase-shifter": "false", + ... "transmission-capacities": "infinite", + ... "asset-type": "ac", + ... "link-style": "plain", + ... "link-width": "1", + ... "colorr": "80", + ... "colorg": "192", + ... "colorb": "255", + ... "comments": "This is a link", + ... "display-comments": "true", + ... "filter-synthesis": "hourly, daily, weekly, monthly, annual", + ... "filter-year-by-year": "hourly, daily, weekly, monthly, annual", + ... } + + >>> opt = LinkProperties(**obj) + + >>> pprint(opt.dict(by_alias=True), width=80) + {'asset-type': , + 'colorRgb': '#50C0FF', + 'comments': 'This is a link', + 'display-comments': True, + 'filter-synthesis': 'hourly, daily, weekly, monthly, annual', + 'filter-year-by-year': 'hourly, daily, weekly, monthly, annual', + 'hurdles-cost': False, + 'link-style': 'plain', + 'link-width': 1, + 'loop-flow': False, + 'transmission-capacities': , + 'use-phase-shifter': False} + + >>> pprint(opt.to_config(), width=80) + {'asset-type': 'ac', + 'colorb': 255, + 'colorg': 192, + 'colorr': 80, + 'comments': 'This is a link', + 'display-comments': True, + 'filter-synthesis': 'hourly, daily, weekly, monthly, annual', + 'filter-year-by-year': 'hourly, daily, weekly, monthly, annual', + 'hurdles-cost': False, + 'link-style': 'plain', + 'link-width': 1, + 'loop-flow': False, + 'transmission-capacities': 'infinite', + 'use-phase-shifter': False} + """ + + hurdles_cost: bool = Field(default=False, alias="hurdles-cost") + loop_flow: bool = Field(default=False, alias="loop-flow") + use_phase_shifter: bool = Field(default=False, alias="use-phase-shifter") + transmission_capacities: TransmissionCapacity = Field( + default=TransmissionCapacity.ENABLED, alias="transmission-capacities" + ) + asset_type: AssetType = Field(default=AssetType.AC, alias="asset-type") + link_style: str = Field(default="plain", alias="link-style") + link_width: int = Field(default=1, alias="link-width") + comments: str = Field(default="", alias="comments") # unknown field?! + display_comments: bool = Field(default=True, alias="display-comments") + filter_synthesis: str = Field(default="", alias="filter-synthesis") + filter_year_by_year: str = Field(default="", alias="filter-year-by-year") + color_rgb: str = Field( + "#707070", + alias="colorRgb", + description="color of the area in the map", + ) + + @validator("filter_synthesis", "filter_year_by_year", pre=True) + def _validate_filtering(cls, v: t.Any) -> str: + return validate_filtering(v) + + @validator("color_rgb", pre=True) + def _validate_color_rgb(cls, v: t.Any) -> str: + return validate_color_rgb(v) + + @root_validator(pre=True) + def _validate_colors(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: + return validate_colors(values) + + # noinspection SpellCheckingInspection + def to_config(self) -> t.Mapping[str, t.Any]: + """ + Convert the object to a dictionary for writing to a configuration file. + """ + obj = dict(super().to_config()) + color_rgb = obj.pop("colorRgb", "#707070") + return { + "colorr": int(color_rgb[1:3], 16), + "colorg": int(color_rgb[3:5], 16), + "colorb": int(color_rgb[5:7], 16), + **obj, + } diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/model.py b/antarest/study/storage/rawstudy/model/filesystem/config/model.py index 79400d8165..ff79c51073 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/model.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/model.py @@ -1,61 +1,62 @@ import re -from enum import Enum +import typing as t from pathlib import Path -from typing import Dict, List, Optional -from pydantic import Extra -from pydantic.main import BaseModel +from pydantic import BaseModel, Field, root_validator -from antarest.core.model import JSON from antarest.core.utils.utils import DTO +from antarest.study.business.enum_ignore_case import EnumIgnoreCase -from .binding_constraint import BindingConstraintDTO +from .binding_constraint import BindingConstraintFrequency +from .field_validators import extract_filtering from .renewable import RenewableConfigType from .st_storage import STStorageConfigType from .thermal import ThermalConfigType -class ENR_MODELLING(Enum): +class EnrModelling(EnumIgnoreCase): AGGREGATED = "aggregated" CLUSTERS = "clusters" -class Link(BaseModel): +class Link(BaseModel, extra="ignore"): """ Object linked to /input/links//properties.ini information - """ - filters_synthesis: List[str] - filters_year: List[str] + Attributes: + filters_synthesis: list of filters for synthesis data + filters_year: list of filters for year-by-year data - @staticmethod - def from_json(properties: JSON) -> "Link": - return Link( - filters_year=Link.split(properties["filter-year-by-year"]), - filters_synthesis=Link.split(properties["filter-synthesis"]), - ) + Notes: + Ignore extra fields, because we only need `filter-synthesis` and `filter-year-by-year`. + """ - @staticmethod - def split(line: str) -> List[str]: - return [token.strip() for token in line.split(",") if token.strip() != ""] + filters_synthesis: t.List[str] = Field(default_factory=list) + filters_year: t.List[str] = Field(default_factory=list) + @root_validator(pre=True) + def validation(cls, values: t.MutableMapping[str, t.Any]) -> t.MutableMapping[str, t.Any]: + # note: field names are in kebab-case in the INI file + filters_synthesis = values.pop("filter-synthesis", values.pop("filters_synthesis", "")) + filters_year = values.pop("filter-year-by-year", values.pop("filters_year", "")) + values["filters_synthesis"] = extract_filtering(filters_synthesis) + values["filters_year"] = extract_filtering(filters_year) + return values -class Area(BaseModel): + +class Area(BaseModel, extra="forbid"): """ Object linked to /input//optimization.ini information """ - class Config: - extra = Extra.forbid - name: str - links: Dict[str, Link] - thermals: List[ThermalConfigType] - renewables: List[RenewableConfigType] - filters_synthesis: List[str] - filters_year: List[str] + links: t.Dict[str, Link] + thermals: t.List[ThermalConfigType] + renewables: t.List[RenewableConfigType] + filters_synthesis: t.List[str] + filters_year: t.List[str] # since v8.6 - st_storages: List[STStorageConfigType] = [] + st_storages: t.List[STStorageConfigType] = [] class DistrictSet(BaseModel): @@ -64,14 +65,14 @@ class DistrictSet(BaseModel): """ ALL = ["hourly", "daily", "weekly", "monthly", "annual"] - name: Optional[str] = None + name: t.Optional[str] = None inverted_set: bool = False - areas: Optional[List[str]] = None + areas: t.Optional[t.List[str]] = None output: bool = True - filters_synthesis: List[str] = ALL - filters_year: List[str] = ALL + filters_synthesis: t.List[str] = ALL + filters_year: t.List[str] = ALL - def get_areas(self, all_areas: List[str]) -> List[str]: + def get_areas(self, all_areas: t.List[str]) -> t.List[str]: if self.inverted_set: return list(set(all_areas).difference(set(self.areas or []))) return self.areas or [] @@ -89,7 +90,7 @@ class Simulation(BaseModel): synthesis: bool by_year: bool error: bool - playlist: Optional[List[int]] + playlist: t.Optional[t.List[int]] archived: bool = False xpansion: str @@ -99,6 +100,13 @@ def get_file(self) -> str: return f"{self.date}{modes[self.mode]}{dash}{self.name}" +class BindingConstraintDTO(BaseModel): + id: str + areas: t.Set[str] + clusters: t.Set[str] + time_step: BindingConstraintFrequency + + class FileStudyTreeConfig(DTO): """ Root object to handle all study parameters which impact tree structure @@ -110,16 +118,16 @@ def __init__( path: Path, study_id: str, version: int, - output_path: Optional[Path] = None, - areas: Optional[Dict[str, Area]] = None, - sets: Optional[Dict[str, DistrictSet]] = None, - outputs: Optional[Dict[str, Simulation]] = None, - bindings: Optional[List[BindingConstraintDTO]] = None, + output_path: t.Optional[Path] = None, + areas: t.Optional[t.Dict[str, Area]] = None, + sets: t.Optional[t.Dict[str, DistrictSet]] = None, + outputs: t.Optional[t.Dict[str, Simulation]] = None, + bindings: t.Optional[t.List[BindingConstraintDTO]] = None, store_new_set: bool = False, - archive_input_series: Optional[List[str]] = None, - enr_modelling: str = ENR_MODELLING.AGGREGATED.value, - cache: Optional[Dict[str, List[str]]] = None, - zip_path: Optional[Path] = None, + archive_input_series: t.Optional[t.List[str]] = None, + enr_modelling: str = EnrModelling.AGGREGATED.value, + cache: t.Optional[t.Dict[str, t.List[str]]] = None, + zip_path: t.Optional[Path] = None, ): self.study_path = study_path self.path = path @@ -138,7 +146,7 @@ def __init__( def next_file(self, name: str, is_output: bool = False) -> "FileStudyTreeConfig": if is_output and name in self.outputs and self.outputs[name].archived: - zip_path: Optional[Path] = self.path / f"{name}.zip" + zip_path: t.Optional[Path] = self.path / f"{name}.zip" else: zip_path = self.zip_path @@ -176,43 +184,43 @@ def at_file(self, filepath: Path) -> "FileStudyTreeConfig": cache=self.cache, ) - def area_names(self) -> List[str]: + def area_names(self) -> t.List[str]: return self.cache.get("%areas", list(self.areas.keys())) - def set_names(self, only_output: bool = True) -> List[str]: + def set_names(self, only_output: bool = True) -> t.List[str]: return self.cache.get( f"%districts%{only_output}", [k for k, v in self.sets.items() if v.output or not only_output], ) - def get_thermal_ids(self, area: str) -> List[str]: + def get_thermal_ids(self, area: str) -> t.List[str]: """ Returns a list of thermal cluster IDs for a given area. Note that IDs may not be in lower case (but series IDs are). """ return self.cache.get(f"%thermal%{area}%{area}", [th.id for th in self.areas[area].thermals]) - def get_renewable_ids(self, area: str) -> List[str]: + def get_renewable_ids(self, area: str) -> t.List[str]: """ Returns a list of renewable cluster IDs for a given area. Note that IDs may not be in lower case (but series IDs are). """ return self.cache.get(f"%renewable%{area}", [r.id for r in self.areas[area].renewables]) - def get_st_storage_ids(self, area: str) -> List[str]: + def get_st_storage_ids(self, area: str) -> t.List[str]: return self.cache.get(f"%st-storage%{area}", [s.id for s in self.areas[area].st_storages]) - def get_links(self, area: str) -> List[str]: + def get_links(self, area: str) -> t.List[str]: return self.cache.get(f"%links%{area}", list(self.areas[area].links.keys())) - def get_filters_synthesis(self, area: str, link: Optional[str] = None) -> List[str]: + def get_filters_synthesis(self, area: str, link: t.Optional[str] = None) -> t.List[str]: if link: return self.areas[area].links[link].filters_synthesis if area in self.sets and self.sets[area].output: return self.sets[area].filters_synthesis return self.areas[area].filters_synthesis - def get_filters_year(self, area: str, link: Optional[str] = None) -> List[str]: + def get_filters_year(self, area: str, link: t.Optional[str] = None) -> t.List[str]: if link: return self.areas[area].links[link].filters_year if area in self.sets and self.sets[area].output: @@ -245,15 +253,15 @@ class FileStudyTreeConfigDTO(BaseModel): path: Path study_id: str version: int - output_path: Optional[Path] = None - areas: Dict[str, Area] = dict() - sets: Dict[str, DistrictSet] = dict() - outputs: Dict[str, Simulation] = dict() - bindings: List[BindingConstraintDTO] = list() + output_path: t.Optional[Path] = None + areas: t.Dict[str, Area] = dict() + sets: t.Dict[str, DistrictSet] = dict() + outputs: t.Dict[str, Simulation] = dict() + bindings: t.List[BindingConstraintDTO] = list() store_new_set: bool = False - archive_input_series: List[str] = list() - enr_modelling: str = ENR_MODELLING.AGGREGATED.value - zip_path: Optional[Path] = None + archive_input_series: t.List[str] = list() + enr_modelling: str = EnrModelling.AGGREGATED.value + zip_path: t.Optional[Path] = None @staticmethod def from_build_config( diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py b/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py index 4d34e21637..ed0716147a 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py @@ -6,15 +6,6 @@ from antarest.study.storage.rawstudy.model.filesystem.config.cluster import ClusterProperties from antarest.study.storage.rawstudy.model.filesystem.config.identifier import IgnoreCaseIdentifier -__all__ = ( - "TimeSeriesInterpretation", - "RenewableProperties", - "RenewableConfig", - "RenewableConfigType", - "create_renewable_config", - "RenewableClusterGroup", -) - class TimeSeriesInterpretation(EnumIgnoreCase): """ @@ -73,11 +64,13 @@ class RenewableProperties(ClusterProperties): """ group: RenewableClusterGroup = Field( + title="Renewable Cluster Group", default=RenewableClusterGroup.OTHER1, description="Renewable Cluster Group", ) ts_interpretation: TimeSeriesInterpretation = Field( + title="Time Series Interpretation", default=TimeSeriesInterpretation.POWER_GENERATION, description="Time series interpretation", alias="ts-interpretation", @@ -105,6 +98,22 @@ class RenewableConfig(RenewableProperties, IgnoreCaseIdentifier): RenewableConfigType = RenewableConfig +def get_renewable_config_cls(study_version: t.Union[str, int]) -> t.Type[RenewableConfig]: + """ + Retrieves the renewable configuration class based on the study version. + + Args: + study_version: The version of the study. + + Returns: + The renewable configuration class. + """ + version = int(study_version) + if version >= 810: + return RenewableConfig + raise ValueError(f"Unsupported study version {study_version}, required 810 or above.") + + def create_renewable_config(study_version: t.Union[str, int], **kwargs: t.Any) -> RenewableConfigType: """ Factory method to create a renewable configuration model. @@ -119,4 +128,5 @@ def create_renewable_config(study_version: t.Union[str, int], **kwargs: t.Any) - Raises: ValueError: If the study version is not supported. """ - return RenewableConfig(**kwargs) + cls = get_renewable_config_cls(study_version) + return cls(**kwargs) diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py b/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py index 58efc0ceb8..3355ba571a 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py @@ -6,14 +6,6 @@ from antarest.study.storage.rawstudy.model.filesystem.config.cluster import ItemProperties from antarest.study.storage.rawstudy.model.filesystem.config.identifier import LowerCaseIdentifier -__all__ = ( - "STStorageGroup", - "STStorageProperties", - "STStorageConfig", - "STStorageConfigType", - "create_st_storage_config", -) - class STStorageGroup(EnumIgnoreCase): """ @@ -50,46 +42,64 @@ class STStorageProperties(ItemProperties): group: STStorageGroup = Field( STStorageGroup.OTHER1, description="Energy storage system group", + title="Short-Term Storage Group", ) injection_nominal_capacity: float = Field( 0, description="Injection nominal capacity (MW)", ge=0, alias="injectionnominalcapacity", + title="Injection Nominal Capacity", ) withdrawal_nominal_capacity: float = Field( 0, description="Withdrawal nominal capacity (MW)", ge=0, alias="withdrawalnominalcapacity", + title="Withdrawal Nominal Capacity", ) reservoir_capacity: float = Field( 0, description="Reservoir capacity (MWh)", ge=0, alias="reservoircapacity", + title="Reservoir Capacity", ) efficiency: float = Field( 1, description="Efficiency of the storage system (%)", ge=0, le=1, + title="Efficiency", ) - # The `initial_level` value must be between 0 and 1, but the default value is 0. + # The `initial_level` value must be between 0 and 1, but the default value is 0.5 initial_level: float = Field( 0.5, description="Initial level of the storage system (%)", ge=0, le=1, alias="initiallevel", + title="Initial Level", ) initial_level_optim: bool = Field( False, description="Flag indicating if the initial level is optimized", alias="initialleveloptim", + title="Initial Level Optimization", ) +class STStorage880Properties(STStorageProperties): + """ + Short term storage configuration model for 880 study. + """ + + # Activity status: + # - True: the plant may generate. + # - False: Ignored by the simulator. + enabled: bool = Field(default=True, description="Activity status") + + # noinspection SpellCheckingInspection class STStorageConfig(STStorageProperties, LowerCaseIdentifier): """ @@ -116,7 +126,45 @@ class STStorageConfig(STStorageProperties, LowerCaseIdentifier): """ -STStorageConfigType = STStorageConfig +class STStorage880Config(STStorage880Properties, LowerCaseIdentifier): + """ + Short Term Storage properties for study in version 8.8 or above. + + Usage: + + >>> from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import STStorage880Config + + >>> st = STStorage880Config(name="Storage 1", group="battery", enabled=False) + >>> st.id + 'storage 1' + >>> st.group == STStorageGroup.BATTERY + True + >>> st.enabled + False + """ + + +# NOTE: In the following Union, it is important to place the older version first, +# because otherwise, creating a short term storage always creates a v8.8 one. +STStorageConfigType = t.Union[STStorageConfig, STStorage880Config] + + +def get_st_storage_config_cls(study_version: t.Union[str, int]) -> t.Type[STStorageConfigType]: + """ + Retrieves the short-term storage configuration class based on the study version. + + Args: + study_version: The version of the study. + + Returns: + The short-term storage configuration class. + """ + version = int(study_version) + if version >= 880: + return STStorage880Config + elif version >= 860: + return STStorageConfig + raise ValueError(f"Unsupported study version: {version}") def create_st_storage_config(study_version: t.Union[str, int], **kwargs: t.Any) -> STStorageConfigType: @@ -133,7 +181,5 @@ def create_st_storage_config(study_version: t.Union[str, int], **kwargs: t.Any) Raises: ValueError: If the study version is not supported. """ - version = int(study_version) - if version < 860: - raise ValueError(f"Unsupported study version: {version}") - return STStorageConfig(**kwargs) + cls = get_st_storage_config_cls(study_version) + return cls(**kwargs) diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py b/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py index f2a810025a..dcd0bc7729 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py @@ -6,20 +6,6 @@ from antarest.study.storage.rawstudy.model.filesystem.config.cluster import ClusterProperties from antarest.study.storage.rawstudy.model.filesystem.config.identifier import IgnoreCaseIdentifier -__all__ = ( - "LawOption", - "LocalTSGenerationBehavior", - "Thermal860Config", - "Thermal870Config", - "Thermal870Properties", - "ThermalClusterGroup", - "ThermalConfig", - "ThermalConfigType", - "ThermalCostGeneration", - "ThermalProperties", - "create_thermal_config", -) - class LocalTSGenerationBehavior(EnumIgnoreCase): """ @@ -108,17 +94,20 @@ class ThermalProperties(ClusterProperties): group: ThermalClusterGroup = Field( default=ThermalClusterGroup.OTHER1, description="Thermal Cluster Group", + title="Thermal Cluster Group", ) gen_ts: LocalTSGenerationBehavior = Field( default=LocalTSGenerationBehavior.USE_GLOBAL, description="Time Series Generation Option", alias="gen-ts", + title="Time Series Generation", ) min_stable_power: float = Field( default=0.0, description="Min. Stable Power (MW)", alias="min-stable-power", + title="Min. Stable Power", ) min_up_time: int = Field( default=1, @@ -126,6 +115,7 @@ class ThermalProperties(ClusterProperties): le=168, description="Min. Up time (h)", alias="min-up-time", + title="Min. Up Time", ) min_down_time: int = Field( default=1, @@ -133,17 +123,20 @@ class ThermalProperties(ClusterProperties): le=168, description="Min. Down time (h)", alias="min-down-time", + title="Min. Down Time", ) must_run: bool = Field( default=False, description="Must run flag", alias="must-run", + title="Must Run", ) spinning: float = Field( default=0.0, ge=0, le=100, description="Spinning (%)", + title="Spinning", ) volatility_forced: float = Field( default=0.0, @@ -151,6 +144,7 @@ class ThermalProperties(ClusterProperties): le=1, description="Forced Volatility", alias="volatility.forced", + title="Forced Volatility", ) volatility_planned: float = Field( default=0.0, @@ -158,51 +152,60 @@ class ThermalProperties(ClusterProperties): le=1, description="Planned volatility", alias="volatility.planned", + title="Planned Volatility", ) law_forced: LawOption = Field( default=LawOption.UNIFORM, description="Forced Law (ts-generator)", alias="law.forced", + title="Forced Law", ) law_planned: LawOption = Field( default=LawOption.UNIFORM, description="Planned Law (ts-generator)", alias="law.planned", + title="Planned Law", ) marginal_cost: float = Field( default=0.0, ge=0, description="Marginal cost (euros/MWh)", alias="marginal-cost", + title="Marginal Cost", ) spread_cost: float = Field( default=0.0, ge=0, description="Spread (euros/MWh)", alias="spread-cost", + title="Spread Cost", ) fixed_cost: float = Field( default=0.0, ge=0, description="Fixed cost (euros/hour)", alias="fixed-cost", + title="Fixed Cost", ) startup_cost: float = Field( default=0.0, ge=0, description="Startup cost (euros/startup)", alias="startup-cost", + title="Startup Cost", ) market_bid_cost: float = Field( default=0.0, ge=0, description="Market bid cost (euros/MWh)", alias="market-bid-cost", + title="Market Bid Cost", ) co2: float = Field( default=0.0, ge=0, description="Emission rate of CO2 (t/MWh)", + title="Emission rate of CO2", ) @@ -215,62 +218,74 @@ class Thermal860Properties(ThermalProperties): default=0.0, ge=0, description="Emission rate of NH3 (t/MWh)", + title="Emission rate of NH3", ) so2: float = Field( default=0.0, ge=0, description="Emission rate of SO2 (t/MWh)", + title="Emission rate of SO2", ) nox: float = Field( default=0.0, ge=0, description="Emission rate of NOX (t/MWh)", + title="Emission rate of NOX", ) pm2_5: float = Field( default=0.0, ge=0, description="Emission rate of PM 2.5 (t/MWh)", + title="Emission rate of PM 2.5", alias="pm2_5", ) pm5: float = Field( default=0.0, ge=0, description="Emission rate of PM 5 (t/MWh)", + title="Emission rate of PM 5", ) pm10: float = Field( default=0.0, ge=0, description="Emission rate of PM 10 (t/MWh)", + title="Emission rate of PM 10", ) nmvoc: float = Field( default=0.0, ge=0, description="Emission rate of NMVOC (t/MWh)", + title="Emission rate of NMVOC", ) op1: float = Field( default=0.0, ge=0, description="Emission rate of pollutant 1 (t/MWh)", + title="Emission rate of pollutant 1", ) op2: float = Field( default=0.0, ge=0, description="Emission rate of pollutant 2 (t/MWh)", + title="Emission rate of pollutant 2", ) op3: float = Field( default=0.0, ge=0, description="Emission rate of pollutant 3 (t/MWh)", + title="Emission rate of pollutant 3", ) op4: float = Field( default=0.0, ge=0, description="Emission rate of pollutant 4 (t/MWh)", + title="Emission rate of pollutant 4", ) op5: float = Field( default=0.0, ge=0, description="Emission rate of pollutant 5 (t/MWh)", + title="Emission rate of pollutant 5", ) @@ -284,18 +299,21 @@ class Thermal870Properties(Thermal860Properties): default=ThermalCostGeneration.SET_MANUALLY, alias="costgeneration", description="Cost generation option", + title="Cost Generation", ) efficiency: float = Field( default=100.0, ge=0, le=100, description="Efficiency (%)", + title="Efficiency", ) # Even if `variableomcost` is a cost it could be negative. variable_o_m_cost: float = Field( default=0.0, description="Operating and Maintenance Cost (€/MWh)", alias="variableomcost", + title="Variable O&M Cost", ) @@ -375,6 +393,25 @@ class Thermal870Config(Thermal870Properties, IgnoreCaseIdentifier): ThermalConfigType = t.Union[Thermal870Config, Thermal860Config, ThermalConfig] +def get_thermal_config_cls(study_version: t.Union[str, int]) -> t.Type[ThermalConfigType]: + """ + Retrieves the thermal configuration class based on the study version. + + Args: + study_version: The version of the study. + + Returns: + The thermal configuration class. + """ + version = int(study_version) + if version >= 870: + return Thermal870Config + elif version == 860: + return Thermal860Config + else: + return ThermalConfig + + def create_thermal_config(study_version: t.Union[str, int], **kwargs: t.Any) -> ThermalConfigType: """ Factory method to create a thermal configuration model. @@ -389,10 +426,5 @@ def create_thermal_config(study_version: t.Union[str, int], **kwargs: t.Any) -> Raises: ValueError: If the study version is not supported. """ - version = int(study_version) - if version >= 870: - return Thermal870Config(**kwargs) - elif version == 860: - return Thermal860Config(**kwargs) - else: - return ThermalConfig(**kwargs) + cls = get_thermal_config_cls(study_version) + return cls(**kwargs) diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/date_serializer.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/date_serializer.py index 37e0badb0c..909140b68a 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/date_serializer.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/date_serializer.py @@ -68,7 +68,7 @@ class HourlyMatrixSerializer(IDateMatrixSerializer): def build_date(self, index: pd.Index) -> pd.DataFrame: def _map(row: str) -> Tuple[str, int, str, str, str]: - m, d, h = re.split("[\s/]", row) + m, d, h = re.split(r"[\s/]", row) return "", 1, d, IDateMatrixSerializer._R_MONTHS[m], h items = index.map(_map).tolist() diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro_ini.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro_ini.py index 95f48a48f3..2065ea45e5 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro_ini.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro_ini.py @@ -4,7 +4,20 @@ class InputHydroIni(IniFileNode): + # noinspection SpellCheckingInspection def __init__(self, context: ContextServer, config: FileStudyTreeConfig): + # The "use heuristic", "follow load" and "reservoir capacity" parameters are missing here, + # but are well taken into account in the `HydroManager` class and can be modified + # by the user in the graphical interface. + # + # They are very used in the representation of hydro. + # - "use heuristic" allows to define a reservoir management mode which consists + # in turbinating a certain fixed quantity each week. + # - "reservoir capacity" is the capacity of the reservoir in MWh. + # - "follow load" is a parameter whose activation (with others) helps to define + # the amount of water that can be turbinated for each reservoir each week. + # This amount depends on the consumption of the node on which the reservoir is located, hence the name. + sections = [ "inter-daily-breakdown", "intra-daily-modulation", diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/input.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/input.py index 88b58c5369..4e26ff0c9c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/input.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/input.py @@ -1,4 +1,4 @@ -from antarest.study.storage.rawstudy.model.filesystem.config.model import ENR_MODELLING +from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling from antarest.study.storage.rawstudy.model.filesystem.folder_node import FolderNode from antarest.study.storage.rawstudy.model.filesystem.inode import TREE from antarest.study.storage.rawstudy.model.filesystem.root.input.areas.areas import InputAreas @@ -37,7 +37,7 @@ def build(self) -> TREE: "wind": InputWind(self.context, self.config.next_file("wind")), } - if self.config.enr_modelling == ENR_MODELLING.CLUSTERS.value: + if self.config.enr_modelling == EnrModelling.CLUSTERS.value: children["renewables"] = ClusteredRenewables(self.context, self.config.next_file("renewables")) if self.config.version >= 860: children["st-storage"] = InputSTStorage(self.context, self.config.next_file("st-storage")) diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/thermal.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/thermal.py index a93c4378cb..c11083a882 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/thermal.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/thermal.py @@ -2,6 +2,7 @@ from antarest.study.storage.rawstudy.model.filesystem.inode import TREE from antarest.study.storage.rawstudy.model.filesystem.matrix.constants import default_scenario_hourly from antarest.study.storage.rawstudy.model.filesystem.matrix.input_series_matrix import InputSeriesMatrix +from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency class InputThermalSeriesAreaThermal(FolderNode): @@ -13,4 +14,17 @@ def build(self) -> TREE: default_empty=default_scenario_hourly, ), } + if self.config.version >= 870: + children["CO2Cost"] = InputSeriesMatrix( + self.context, + self.config.next_file("CO2Cost.txt"), + freq=MatrixFrequency.HOURLY, + default_empty=default_scenario_hourly, + ) + children["fuelCost"] = InputSeriesMatrix( + self.context, + self.config.next_file("fuelCost.txt"), + freq=MatrixFrequency.HOURLY, + default_empty=default_scenario_hourly, + ) return children diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/area.py index d2b9541a22..dc5726554d 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/area.py @@ -53,7 +53,7 @@ def build(self) -> TREE: self.area, ) - # has_enr_clusters = self.config.enr_modelling == ENR_MODELLING.CLUSTERS.value and + # has_enr_clusters = self.config.enr_modelling == EnrModelling.CLUSTERS.value and # len(self.config.get_renewable_ids(self.area)) > 0 # todo get the config related to this output (now this may fail if input has changed since the launch) has_enr_clusters = True diff --git a/antarest/study/storage/study_download_utils.py b/antarest/study/storage/study_download_utils.py index 9cc25d5586..c89d60b380 100644 --- a/antarest/study/storage/study_download_utils.py +++ b/antarest/study/storage/study_download_utils.py @@ -22,7 +22,7 @@ StudyDownloadType, TimeSerie, ) -from antarest.study.storage.rawstudy.model.filesystem.config.model import ENR_MODELLING, Area, FileStudyTreeConfig +from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, EnrModelling, FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.rawstudy.model.filesystem.folder_node import ChildNotFoundError, FilterError, FolderNode from antarest.study.storage.rawstudy.model.filesystem.inode import INode @@ -98,7 +98,7 @@ def level_output_filter( data: StudyDownloadDTO, ) -> None: cluster_details = [f"details-{data.level.value}"] - if study.config.enr_modelling == ENR_MODELLING.CLUSTERS.value: + if study.config.enr_modelling == EnrModelling.CLUSTERS.value: cluster_details += [f"details-res-{data.level.value}"] files_matcher = ( diff --git a/antarest/study/storage/study_upgrader/__init__.py b/antarest/study/storage/study_upgrader/__init__.py index 1ff75f64be..6bfbf712be 100644 --- a/antarest/study/storage/study_upgrader/__init__.py +++ b/antarest/study/storage/study_upgrader/__init__.py @@ -7,7 +7,6 @@ from http import HTTPStatus from http.client import HTTPException from pathlib import Path -from typing import Callable, List, NamedTuple from antarest.core.exceptions import StudyValidationError @@ -21,6 +20,12 @@ from .upgrader_850 import upgrade_850 from .upgrader_860 import upgrade_860 from .upgrader_870 import upgrade_870 +from .upgrader_880 import upgrade_880 + +STUDY_ANTARES = "study.antares" +""" +Main file of an Antares study containing the caption, the version, the creation date, etc. +""" logger = logging.getLogger(__name__) @@ -47,6 +52,7 @@ class UpgradeMethod(t.NamedTuple): UpgradeMethod("840", "850", upgrade_850, [_GENERAL_DATA_PATH]), UpgradeMethod("850", "860", upgrade_860, [Path("input"), _GENERAL_DATA_PATH]), UpgradeMethod("860", "870", upgrade_870, [Path("input/thermal"), Path("input/bindingconstraints")]), + UpgradeMethod("870", "880", upgrade_880, [Path("input/st-storage/clusters")]), ] @@ -105,7 +111,7 @@ def get_current_version(study_path: Path) -> str: `study.antares` file or does not match the expected format. """ - antares_path = study_path / "study.antares" + antares_path = study_path / STUDY_ANTARES pattern = r"version\s*=\s*([\w.-]+)\s*" with antares_path.open(encoding="utf-8") as lines: for line in lines: @@ -163,8 +169,8 @@ def can_upgrade_version(from_version: str, to_version: str) -> t.List[Path]: def _update_study_antares_file(target_version: str, study_path: Path) -> None: - file = study_path / "study.antares" - content = file.read_text(encoding="utf-8") + antares_path = study_path / STUDY_ANTARES + content = antares_path.read_text(encoding="utf-8") content = re.sub( r"^version\s*=.*$", f"version = {target_version}", @@ -177,7 +183,7 @@ def _update_study_antares_file(target_version: str, study_path: Path) -> None: content, flags=re.MULTILINE, ) - file.write_text(content, encoding="utf-8") + antares_path.write_text(content, encoding="utf-8") def _copies_only_necessary_files(files_to_upgrade: t.List[Path], study_path: Path, tmp_path: Path) -> t.List[Path]: @@ -192,10 +198,13 @@ def _copies_only_necessary_files(files_to_upgrade: t.List[Path], study_path: Pat without any children that has parents already in the list. """ files_to_copy = _filters_out_children_files(files_to_upgrade) - files_to_copy.append(Path("study.antares")) + files_to_copy.append(Path(STUDY_ANTARES)) files_to_retrieve = [] for path in files_to_copy: entire_path = study_path / path + if not entire_path.exists(): + # This can happen when upgrading a study to v8.8. + continue if entire_path.is_dir(): if not (tmp_path / path).exists(): shutil.copytree(entire_path, tmp_path / path, dirs_exist_ok=True) diff --git a/antarest/study/storage/study_upgrader/upgrader_870.py b/antarest/study/storage/study_upgrader/upgrader_870.py index a2afc4bd1f..9b67a77c52 100644 --- a/antarest/study/storage/study_upgrader/upgrader_870.py +++ b/antarest/study/storage/study_upgrader/upgrader_870.py @@ -50,10 +50,15 @@ def upgrade_870(study_path: Path) -> None: # Add properties for thermal clusters in .ini file ini_files = study_path.glob("input/thermal/clusters/*/list.ini") + thermal_path = study_path / Path("input/thermal/series") for ini_file_path in ini_files: data = IniReader().read(ini_file_path) - for section in data: - data[section]["costgeneration"] = "SetManually" - data[section]["efficiency"] = 100 - data[section]["variableomcost"] = 0 + area_id = ini_file_path.parent.name + for cluster in data: + new_thermal_path = thermal_path / area_id / cluster.lower() + (new_thermal_path / "CO2Cost.txt").touch() + (new_thermal_path / "fuelCost.txt").touch() + data[cluster]["costgeneration"] = "SetManually" + data[cluster]["efficiency"] = 100 + data[cluster]["variableomcost"] = 0 IniWriter().write(data, ini_file_path) diff --git a/antarest/study/storage/study_upgrader/upgrader_880.py b/antarest/study/storage/study_upgrader/upgrader_880.py new file mode 100644 index 0000000000..0de50cff4b --- /dev/null +++ b/antarest/study/storage/study_upgrader/upgrader_880.py @@ -0,0 +1,32 @@ +import glob +from pathlib import Path + +from antarest.study.storage.rawstudy.ini_reader import IniReader +from antarest.study.storage.rawstudy.ini_writer import IniWriter +from antarest.study.storage.rawstudy.model.filesystem.root.settings.generaldata import DUPLICATE_KEYS + + +# noinspection SpellCheckingInspection +def upgrade_880(study_path: Path) -> None: + """ + Upgrade the study configuration to version 880. + + NOTE: + The file `study.antares` is not upgraded here. + + Args: + study_path: path to the study directory. + """ + st_storage_path = study_path / "input" / "st-storage" / "clusters" + if not st_storage_path.exists(): + # The folder only exists for studies in v8.6+ that have some short term storage clusters. + # For every other case, this upgrader has nothing to do. + return + writer = IniWriter(special_keys=DUPLICATE_KEYS) + cluster_files = glob.glob(str(st_storage_path / "*" / "list.ini")) + for file in cluster_files: + file_path = Path(file) + cluster_list = IniReader().read(file_path) + for cluster in cluster_list: + cluster_list[cluster]["enabled"] = True + writer.write(cluster_list, file_path) diff --git a/antarest/study/storage/variantstudy/business/command_extractor.py b/antarest/study/storage/variantstudy/business/command_extractor.py index 9aa5a9b397..4ac5070a69 100644 --- a/antarest/study/storage/variantstudy/business/command_extractor.py +++ b/antarest/study/storage/variantstudy/business/command_extractor.py @@ -1,6 +1,6 @@ import base64 import logging -from typing import List, Optional, Tuple, cast +import typing as t import numpy as np @@ -9,13 +9,11 @@ from antarest.matrixstore.model import MatrixData from antarest.matrixstore.service import ISimpleMatrixService from antarest.study.storage.patch_service import PatchService -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency from antarest.study.storage.rawstudy.model.filesystem.config.files import get_playlist from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.rawstudy.model.filesystem.root.filestudytree import FileStudyTree from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants from antarest.study.storage.variantstudy.business.utils import strip_matrix_protocol -from antarest.study.storage.variantstudy.model.command.common import BindingConstraintOperator from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster @@ -40,7 +38,7 @@ def _find_binding_config(binding_id: str, study_tree: FileStudyTree) -> JSON: url = ["input", "bindingconstraints", "bindingconstraints"] for binding_config in study_tree.get(url).values(): if binding_config["id"] == binding_id: - return cast(JSON, binding_config) + return t.cast(JSON, binding_config) raise ValueError(f"Binding constraint '{binding_id}' not found in '{''.join(url)}'") @@ -56,7 +54,7 @@ def __init__(self, matrix_service: ISimpleMatrixService, patch_service: PatchSer patch_service=self.patch_service, ) - def extract_area(self, study: FileStudy, area_id: str) -> Tuple[List[ICommand], List[ICommand]]: + def extract_area(self, study: FileStudy, area_id: str) -> t.Tuple[t.List[ICommand], t.List[ICommand]]: stopwatch = StopWatch() study_tree = study.tree study_config = study.config @@ -64,7 +62,7 @@ def extract_area(self, study: FileStudy, area_id: str) -> Tuple[List[ICommand], optimization_data = study_tree.get(["input", "areas", area_id, "optimization"]) ui_data = study_tree.get(["input", "areas", area_id, "ui"]) - study_commands: List[ICommand] = [ + study_commands: t.List[ICommand] = [ CreateArea( area_name=area.name, command_context=self.command_context, @@ -83,7 +81,7 @@ def extract_area(self, study: FileStudy, area_id: str) -> Tuple[List[ICommand], stopwatch.log_elapsed(lambda x: logger.info(f"Area command extraction done in {x}s")) links_data = study_tree.get(["input", "links", area_id, "properties"]) - links_commands: List[ICommand] = [] + links_commands: t.List[ICommand] = [] for link in area.links: links_commands += self.extract_link(study, area_id, link, links_data) @@ -142,8 +140,8 @@ def extract_link( study: FileStudy, area1: str, area2: str, - links_data: Optional[JSON] = None, - ) -> List[ICommand]: + links_data: t.Optional[JSON] = None, + ) -> t.List[ICommand]: study_tree = study.tree link_command = CreateLink( area1=area1, @@ -162,7 +160,7 @@ def extract_link( command_context=self.command_context, ) null_matrix_id = strip_matrix_protocol(self.generator_matrix_constants.get_null_matrix()) - commands: List[ICommand] = [link_command, link_config_command] + commands: t.List[ICommand] = [link_command, link_config_command] if study.config.version < 820: commands.append( self.generate_replace_matrix( @@ -193,7 +191,7 @@ def extract_link( ) return commands - def _extract_cluster(self, study: FileStudy, area_id: str, cluster_id: str, renewables: bool) -> List[ICommand]: + def _extract_cluster(self, study: FileStudy, area_id: str, cluster_id: str, renewables: bool) -> t.List[ICommand]: study_tree = study.tree if renewables: cluster_type = "renewables" # with a final "s" @@ -209,7 +207,7 @@ def _extract_cluster(self, study: FileStudy, area_id: str, cluster_id: str, rene null_matrix_id = strip_matrix_protocol(self.generator_matrix_constants.get_null_matrix()) # Note that cluster IDs are case-insensitive, but series IDs are in lower case. series_id = cluster_id.lower() - study_commands: List[ICommand] = [ + study_commands: t.List[ICommand] = [ create_cluster_command( area_id=area_id, cluster_name=cluster.id, @@ -239,13 +237,13 @@ def _extract_cluster(self, study: FileStudy, area_id: str, cluster_id: str, rene ) return study_commands - def extract_cluster(self, study: FileStudy, area_id: str, thermal_id: str) -> List[ICommand]: + def extract_cluster(self, study: FileStudy, area_id: str, thermal_id: str) -> t.List[ICommand]: return self._extract_cluster(study, area_id, thermal_id, False) - def extract_renewables_cluster(self, study: FileStudy, area_id: str, renewables_id: str) -> List[ICommand]: + def extract_renewables_cluster(self, study: FileStudy, area_id: str, renewables_id: str) -> t.List[ICommand]: return self._extract_cluster(study, area_id, renewables_id, True) - def extract_hydro(self, study: FileStudy, area_id: str) -> List[ICommand]: + def extract_hydro(self, study: FileStudy, area_id: str) -> t.List[ICommand]: study_tree = study.tree commands = [ self.generate_replace_matrix( @@ -306,8 +304,8 @@ def extract_hydro(self, study: FileStudy, area_id: str) -> List[ICommand]: return commands - def extract_district(self, study: FileStudy, district_id: str) -> List[ICommand]: - study_commands: List[ICommand] = [] + def extract_district(self, study: FileStudy, district_id: str) -> t.List[ICommand]: + study_commands: t.List[ICommand] = [] study_config = study.config study_tree = study.tree district_config = study_config.sets[district_id] @@ -325,64 +323,66 @@ def extract_district(self, study: FileStudy, district_id: str) -> List[ICommand] ) return study_commands - def extract_comments(self, study: FileStudy) -> List[ICommand]: + def extract_comments(self, study: FileStudy) -> t.List[ICommand]: study_tree = study.tree - content = cast(bytes, study_tree.get(["settings", "comments"])) + content = t.cast(bytes, study_tree.get(["settings", "comments"])) comments = content.decode("utf-8") - return [ - UpdateComments( - comments=comments, - command_context=self.command_context, - ) - ] + return [UpdateComments(comments=comments, command_context=self.command_context)] def extract_binding_constraint( self, study: FileStudy, binding_id: str, - bindings_data: Optional[JSON] = None, - ) -> List[ICommand]: + bindings_data: t.Optional[JSON] = None, + ) -> t.List[ICommand]: study_tree = study.tree + + # Retrieve binding constraint properties from the study tree, + # so, field names follow the same convention as the INI file. binding: JSON = _find_binding_config(binding_id, study_tree) if bindings_data is None else bindings_data - binding_constraint_command = CreateBindingConstraint( - name=binding["name"], - enabled=binding["enabled"], - time_step=BindingConstraintFrequency(binding["type"]), - operator=BindingConstraintOperator(binding["operator"]), - coeffs={ - coeff: [float(el) for el in str(value).split("%")] - for coeff, value in binding.items() - if "%" in coeff or "." in coeff - }, - comments=binding.get("comments", None), - command_context=self.command_context, - ) - study_commands: List[ICommand] = [ - binding_constraint_command, - self.generate_replace_matrix( - study_tree, - ["input", "bindingconstraints", binding["id"]], - ), - ] - return study_commands - def generate_update_config( - self, - study_tree: FileStudyTree, - url: List[str], - ) -> ICommand: + # Extract the binding constraint ID, which is recalculated from the name in the command + bc_id = binding.pop("id") + + # Extract binding constraint terms, which keys contain "%" or "." + terms = {} + for term_id, value in sorted(binding.items()): + if "%" in term_id or "." in term_id: + weight, _, offset = str(value).partition("%") + term_value = [float(weight), int(offset)] if offset else [float(weight)] + terms[term_id] = term_value + del binding[term_id] + + # Extract the matrices associated with the binding constraint + if study.config.version < 870: + urls = {"values": ["input", "bindingconstraints", bc_id]} + else: + urls = { + "less_term_matrix": ["input", "bindingconstraints", f"{bc_id}_lt"], + "greater_term_matrix": ["input", "bindingconstraints", f"{bc_id}_gt"], + "equal_term_matrix": ["input", "bindingconstraints", f"{bc_id}_eq"], + } + + matrices: t.Dict[str, t.List[t.List[float]]] = {} + for name, url in urls.items(): + matrix = study_tree.get(url) + if matrix is not None: + matrices[name] = matrix["data"] + + # Create the command to create the binding constraint + create_cmd = CreateBindingConstraint(**binding, **matrices, coeffs=terms, command_context=self.command_context) + + return [create_cmd] + + def generate_update_config(self, study_tree: FileStudyTree, url: t.List[str]) -> ICommand: data = study_tree.get(url) - return UpdateConfig( - target="/".join(url), - data=data, - command_context=self.command_context, - ) + return UpdateConfig(target="/".join(url), data=data, command_context=self.command_context) - def generate_update_rawfile(self, study_tree: FileStudyTree, url: List[str]) -> ICommand: + def generate_update_raw_file(self, study_tree: FileStudyTree, url: t.List[str]) -> ICommand: data = study_tree.get(url) return UpdateRawFile( target="/".join(url), - b64Data=base64.b64encode(cast(bytes, data)).decode("utf-8"), + b64Data=base64.b64encode(t.cast(bytes, data)).decode("utf-8"), command_context=self.command_context, ) @@ -390,7 +390,7 @@ def generate_update_comments( self, study_tree: FileStudyTree, ) -> ICommand: - content = cast(bytes, study_tree.get(["settings", "comments"])) + content = t.cast(bytes, study_tree.get(["settings", "comments"])) comments = content.decode("utf-8") return UpdateComments( comments=comments, @@ -414,8 +414,8 @@ def generate_update_playlist( def generate_replace_matrix( self, study_tree: FileStudyTree, - url: List[str], - default_value: Optional[str] = None, + url: t.List[str], + default_value: t.Optional[str] = None, ) -> ICommand: data = study_tree.get(url) if isinstance(data, str): @@ -425,7 +425,7 @@ def generate_replace_matrix( else: matrix = [[]] if default_value is None else default_value if isinstance(matrix, np.ndarray): - matrix = cast(List[List[MatrixData]], matrix.tolist()) + matrix = t.cast(t.List[t.List[MatrixData]], matrix.tolist()) return ReplaceMatrix( target="/".join(url), matrix=matrix, diff --git a/antarest/study/storage/variantstudy/business/command_reverter.py b/antarest/study/storage/variantstudy/business/command_reverter.py index fa4de66c06..089589576f 100644 --- a/antarest/study/storage/variantstudy/business/command_reverter.py +++ b/antarest/study/storage/variantstudy/business/command_reverter.py @@ -1,13 +1,16 @@ import logging +import typing as t from pathlib import Path -from typing import Callable, Dict, List from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.rawstudy.model.filesystem.folder_node import ChildNotFoundError from antarest.study.storage.variantstudy.model.command.common import CommandName from antarest.study.storage.variantstudy.model.command.create_area import CreateArea -from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint +from antarest.study.storage.variantstudy.model.command.create_binding_constraint import ( + TERM_MATRICES, + CreateBindingConstraint, +) from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster from antarest.study.storage.variantstudy.model.command.create_district import CreateDistrict from antarest.study.storage.variantstudy.model.command.create_link import CreateLink @@ -35,39 +38,39 @@ class CommandReverter: def __init__(self) -> None: - self.method_dict: Dict[ + self.method_dict: t.Dict[ CommandName, - Callable[[ICommand, List[ICommand], FileStudy], List[ICommand]], + t.Callable[[ICommand, t.List[ICommand], FileStudy], t.List[ICommand]], ] = {command_name: getattr(self, f"_revert_{command_name.value}") for command_name in CommandName} @staticmethod - def _revert_create_area(base_command: CreateArea, history: List["ICommand"], base: FileStudy) -> List[ICommand]: + def _revert_create_area(base_command: CreateArea, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: area_id = transform_name_to_id(base_command.area_name) return [RemoveArea(id=area_id, command_context=base_command.command_context)] @staticmethod - def _revert_remove_area(base_command: RemoveArea, history: List["ICommand"], base: FileStudy) -> List[ICommand]: + def _revert_remove_area(base_command: RemoveArea, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveArea is not available") @staticmethod def _revert_create_district( base_command: CreateDistrict, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: district_id = transform_name_to_id(base_command.name) return [RemoveDistrict(id=district_id, command_context=base_command.command_context)] @staticmethod def _revert_remove_district( base_command: RemoveDistrict, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveDistrict is not available") @staticmethod - def _revert_create_link(base_command: CreateLink, history: List["ICommand"], base: FileStudy) -> List[ICommand]: + def _revert_create_link(base_command: CreateLink, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: return [ RemoveLink( area1=base_command.area1, @@ -77,24 +80,24 @@ def _revert_create_link(base_command: CreateLink, history: List["ICommand"], bas ] @staticmethod - def _revert_remove_link(base_command: RemoveLink, history: List["ICommand"], base: FileStudy) -> List[ICommand]: + def _revert_remove_link(base_command: RemoveLink, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveLink is not available") @staticmethod def _revert_create_binding_constraint( base_command: CreateBindingConstraint, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: bind_id = transform_name_to_id(base_command.name) return [RemoveBindingConstraint(id=bind_id, command_context=base_command.command_context)] @staticmethod def _revert_update_binding_constraint( base_command: UpdateBindingConstraint, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: for command in reversed(history): if isinstance(command, UpdateBindingConstraint) and command.id == base_command.id: return [command] @@ -112,8 +115,8 @@ def _revert_update_binding_constraint( } matrix_service = command.command_context.matrix_service - for matrix_name in ["values", "less_term_matrix", "equal_term_matrix", "greater_term_matrix"]: - matrix = command.__getattribute__(matrix_name) + for matrix_name in ["values"] + TERM_MATRICES: + matrix = getattr(command, matrix_name) if matrix is not None: args[matrix_name] = matrix_service.get_matrix_id(matrix) @@ -124,24 +127,24 @@ def _revert_update_binding_constraint( @staticmethod def _revert_remove_binding_constraint( base_command: RemoveBindingConstraint, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveBindingConstraint is not available") @staticmethod def _revert_update_scenario_builder( base_command: UpdateScenarioBuilder, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: # todo make the diff between base study scenariobuilder data and base_command raise NotImplementedError("The revert function for UpdateScenarioBuilder is not available") @staticmethod def _revert_create_cluster( - base_command: CreateCluster, history: List["ICommand"], base: FileStudy - ) -> List[ICommand]: + base_command: CreateCluster, history: t.List["ICommand"], base: FileStudy + ) -> t.List[ICommand]: cluster_id = transform_name_to_id(base_command.cluster_name) return [ RemoveCluster( @@ -153,16 +156,16 @@ def _revert_create_cluster( @staticmethod def _revert_remove_cluster( - base_command: RemoveCluster, history: List["ICommand"], base: FileStudy - ) -> List[ICommand]: + base_command: RemoveCluster, history: t.List["ICommand"], base: FileStudy + ) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveCluster is not available") @staticmethod def _revert_create_renewables_cluster( base_command: CreateRenewablesCluster, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: cluster_id = transform_name_to_id(base_command.cluster_name) return [ RemoveRenewablesCluster( @@ -175,17 +178,17 @@ def _revert_create_renewables_cluster( @staticmethod def _revert_remove_renewables_cluster( base_command: RemoveRenewablesCluster, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveRenewablesCluster is not available") @staticmethod def _revert_create_st_storage( base_command: CreateSTStorage, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: storage_id = base_command.parameters.id return [ RemoveSTStorage( @@ -198,15 +201,15 @@ def _revert_create_st_storage( @staticmethod def _revert_remove_st_storage( base_command: RemoveSTStorage, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveSTStorage is not available") @staticmethod def _revert_replace_matrix( - base_command: ReplaceMatrix, history: List["ICommand"], base: FileStudy - ) -> List[ICommand]: + base_command: ReplaceMatrix, history: t.List["ICommand"], base: FileStudy + ) -> t.List[ICommand]: for command in reversed(history): if isinstance(command, ReplaceMatrix) and command.target == base_command.target: return [command] @@ -219,8 +222,10 @@ def _revert_replace_matrix( return [] # if the matrix does not exist, there is nothing to revert @staticmethod - def _revert_update_config(base_command: UpdateConfig, history: List["ICommand"], base: FileStudy) -> List[ICommand]: - update_config_list: List[UpdateConfig] = [] + def _revert_update_config( + base_command: UpdateConfig, history: t.List["ICommand"], base: FileStudy + ) -> t.List[ICommand]: + update_config_list: t.List[UpdateConfig] = [] self_target_path = Path(base_command.target) parent_path: Path = Path("../model/command") for command in reversed(history): @@ -234,7 +239,7 @@ def _revert_update_config(base_command: UpdateConfig, history: List["ICommand"], parent_path = Path(command.target) break - output_list: List[ICommand] = [ + output_list: t.List[ICommand] = [ command for command in update_config_list[::-1] if parent_path in Path(command.target).parents or str(parent_path) == command.target @@ -257,9 +262,9 @@ def _revert_update_config(base_command: UpdateConfig, history: List["ICommand"], @staticmethod def _revert_update_comments( base_command: UpdateComments, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: for command in reversed(history): if isinstance(command, UpdateComments): return [command] @@ -272,9 +277,9 @@ def _revert_update_comments( @staticmethod def _revert_update_playlist( base_command: UpdatePlaylist, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: for command in reversed(history): if isinstance(command, UpdatePlaylist): return [command] @@ -285,33 +290,39 @@ def _revert_update_playlist( return [] # if the file does not exist, there is nothing to revert @staticmethod - def _revert_update_file(base_command: UpdateRawFile, history: List["ICommand"], base: FileStudy) -> List[ICommand]: + def _revert_update_file( + base_command: UpdateRawFile, history: t.List["ICommand"], base: FileStudy + ) -> t.List[ICommand]: for command in reversed(history): if isinstance(command, UpdateRawFile) and command.target == base_command.target: return [command] - return [base_command.get_command_extractor().generate_update_rawfile(base.tree, base_command.target.split("/"))] + extractor = base_command.get_command_extractor() + return [extractor.generate_update_raw_file(base.tree, base_command.target.split("/"))] @staticmethod def _revert_update_district( base_command: UpdateDistrict, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: for command in reversed(history): - if isinstance(command, UpdateDistrict) and command.id == base_command.id: - return [command] - elif isinstance(command, CreateDistrict) and transform_name_to_id(command.name) == base_command.id: + # fmt: off + if ( + (isinstance(command, UpdateDistrict) and command.id == base_command.id) or + (isinstance(command, CreateDistrict) and transform_name_to_id(command.name) == base_command.id) + ): return [command] - return [base_command.get_command_extractor().generate_update_district(base, base_command.id)] + extractor = base_command.get_command_extractor() + return [extractor.generate_update_district(base, base_command.id)] def revert( self, base_command: ICommand, - history: List["ICommand"], + history: t.List["ICommand"], base: FileStudy, - ) -> List[ICommand]: + ) -> t.List[ICommand]: """ Generate a list of commands to revert the given command. diff --git a/antarest/study/storage/variantstudy/business/utils_binding_constraint.py b/antarest/study/storage/variantstudy/business/utils_binding_constraint.py index 0779f7e048..ebbeeec739 100644 --- a/antarest/study/storage/variantstudy/business/utils_binding_constraint.py +++ b/antarest/study/storage/variantstudy/business/utils_binding_constraint.py @@ -1,101 +1,7 @@ import typing as t -from antarest.core.model import JSON -from antarest.matrixstore.model import MatrixData -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( - BindingConstraintDTO, - BindingConstraintFrequency, -) -from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig -from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.model.command.common import BindingConstraintOperator, CommandOutput - - -def apply_binding_constraint( - study_data: FileStudy, - binding_constraints: JSON, - new_key: str, - bd_id: str, - name: str, - comments: t.Optional[str], - enabled: bool, - freq: BindingConstraintFrequency, - operator: BindingConstraintOperator, - coeffs: t.Dict[str, t.List[float]], - values: t.Union[t.List[t.List[MatrixData]], str, None], - less_term_matrix: t.Union[t.List[t.List[MatrixData]], str, None], - greater_term_matrix: t.Union[t.List[t.List[MatrixData]], str, None], - equal_term_matrix: t.Union[t.List[t.List[MatrixData]], str, None], - filter_year_by_year: t.Optional[str] = None, - filter_synthesis: t.Optional[str] = None, - group: t.Optional[str] = None, -) -> CommandOutput: - version = study_data.config.version - binding_constraints[new_key] = { - "name": name, - "id": bd_id, - "enabled": enabled, - "type": freq.value, - "operator": operator.value, - } - if group: - binding_constraints[new_key]["group"] = group - if version >= 830: - if filter_year_by_year: - binding_constraints[new_key]["filter-year-by-year"] = filter_year_by_year - if filter_synthesis: - binding_constraints[new_key]["filter-synthesis"] = filter_synthesis - if comments is not None: - binding_constraints[new_key]["comments"] = comments - - for link_or_cluster in coeffs: - if "%" in link_or_cluster: - area_1, area_2 = link_or_cluster.split("%") - if area_1 not in study_data.config.areas or area_2 not in study_data.config.areas[area_1].links: - return CommandOutput( - status=False, - message=f"Link '{link_or_cluster}' does not exist in binding constraint '{bd_id}'", - ) - elif "." in link_or_cluster: - # Cluster IDs are stored in lower case in the binding constraints file. - area, cluster_id = link_or_cluster.split(".") - thermal_ids = {thermal.id.lower() for thermal in study_data.config.areas[area].thermals} - if area not in study_data.config.areas or cluster_id.lower() not in thermal_ids: - return CommandOutput( - status=False, - message=f"Cluster '{link_or_cluster}' does not exist in binding constraint '{bd_id}'", - ) - else: - raise NotImplementedError(f"Invalid link or thermal ID: {link_or_cluster}") - - # this is weird because Antares Simulator only accept int as offset - if len(coeffs[link_or_cluster]) == 2: - coeffs[link_or_cluster][1] = int(coeffs[link_or_cluster][1]) - - binding_constraints[new_key][link_or_cluster] = "%".join( - [str(coeff_val) for coeff_val in coeffs[link_or_cluster]] - ) - parse_bindings_coeffs_and_save_into_config(bd_id, study_data.config, coeffs) - study_data.tree.save( - binding_constraints, - ["input", "bindingconstraints", "bindingconstraints"], - ) - if values: - if not isinstance(values, str): # pragma: no cover - raise TypeError(repr(values)) - if version < 870: - study_data.tree.save(values, ["input", "bindingconstraints", bd_id]) - for matrix_term, matrix_name, matrix_alias in zip( - [less_term_matrix, greater_term_matrix, equal_term_matrix], - ["less_term_matrix", "greater_term_matrix", "equal_term_matrix"], - ["lt", "gt", "eq"], - ): - if matrix_term: - if not isinstance(matrix_term, str): # pragma: no cover - raise TypeError(repr(matrix_term)) - if version >= 870: - study_data.tree.save(matrix_term, ["input", "bindingconstraints", f"{bd_id}_{matrix_alias}"]) - return CommandOutput(status=True) +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency +from antarest.study.storage.rawstudy.model.filesystem.config.model import BindingConstraintDTO, FileStudyTreeConfig def parse_bindings_coeffs_and_save_into_config( diff --git a/antarest/study/storage/variantstudy/command_factory.py b/antarest/study/storage/variantstudy/command_factory.py index 5cf298b15e..c4803ce0cc 100644 --- a/antarest/study/storage/variantstudy/command_factory.py +++ b/antarest/study/storage/variantstudy/command_factory.py @@ -1,4 +1,4 @@ -from typing import List +import typing as t from antarest.core.model import JSON from antarest.matrixstore.service import ISimpleMatrixService @@ -74,14 +74,19 @@ def __init__( patch_service=patch_service, ) - def _to_single_command(self, action: str, args: JSON, version: int) -> ICommand: + def _to_single_command(self, action: str, args: JSON, version: int, command_id: t.Optional[str]) -> ICommand: """Convert a single CommandDTO to ICommand.""" if action in COMMAND_MAPPING: command_class = COMMAND_MAPPING[action] - return command_class(**args, command_context=self.command_context, version=version) # type: ignore + return command_class( # type: ignore + **args, + command_context=self.command_context, + version=version, + command_id=command_id, + ) raise NotImplementedError(action) - def to_command(self, command_dto: CommandDTO) -> List[ICommand]: + def to_command(self, command_dto: CommandDTO) -> t.List[ICommand]: """ Convert a CommandDTO to a list of ICommand. @@ -96,12 +101,15 @@ def to_command(self, command_dto: CommandDTO) -> List[ICommand]: """ args = command_dto.args if isinstance(args, dict): - return [self._to_single_command(command_dto.action, args, command_dto.version)] + return [self._to_single_command(command_dto.action, args, command_dto.version, command_dto.id)] elif isinstance(args, list): - return [self._to_single_command(command_dto.action, argument, command_dto.version) for argument in args] + return [ + self._to_single_command(command_dto.action, argument, command_dto.version, command_dto.id) + for argument in args + ] raise NotImplementedError() - def to_commands(self, cmd_dto_list: List[CommandDTO]) -> List[ICommand]: + def to_commands(self, cmd_dto_list: t.List[CommandDTO]) -> t.List[ICommand]: """ Convert a list of CommandDTO to a list of ICommand. diff --git a/antarest/study/storage/variantstudy/model/command/common.py b/antarest/study/storage/variantstudy/model/command/common.py index a6ac905fd9..40ec8629cf 100644 --- a/antarest/study/storage/variantstudy/model/command/common.py +++ b/antarest/study/storage/variantstudy/model/command/common.py @@ -8,13 +8,6 @@ class CommandOutput: message: str = "" -class BindingConstraintOperator(Enum): - BOTH = "both" - EQUAL = "equal" - GREATER = "greater" - LESS = "less" - - class CoeffType(Enum): THERMAL = "thermal" LINK = "link" diff --git a/antarest/study/storage/variantstudy/model/command/create_area.py b/antarest/study/storage/variantstudy/model/command/create_area.py index d2114c254e..f956ef298c 100644 --- a/antarest/study/storage/variantstudy/model/command/create_area.py +++ b/antarest/study/storage/variantstudy/model/command/create_area.py @@ -5,8 +5,8 @@ from antarest.core.model import JSON from antarest.study.common.default_values import FilteringOptions, NodalOptimization from antarest.study.storage.rawstudy.model.filesystem.config.model import ( - ENR_MODELLING, Area, + EnrModelling, FileStudyTreeConfig, transform_name_to_id, ) @@ -238,7 +238,7 @@ def _apply(self, study_data: FileStudy) -> CommandOutput: f"waterValues_{area_id}" ] = self.command_context.generator_matrix_constants.get_null_matrix() - if version >= 810 and study_data.config.enr_modelling == ENR_MODELLING.CLUSTERS.value: + if version >= 810 and study_data.config.enr_modelling == EnrModelling.CLUSTERS.value: new_area_data["input"]["renewables"] = { "clusters": {area_id: {"list": {}}}, } diff --git a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py index 5a832b7d29..96e9643165 100644 --- a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py @@ -1,38 +1,39 @@ +import json import typing as t from abc import ABCMeta import numpy as np -from pydantic import BaseModel, Extra, Field, root_validator +from pydantic import BaseModel, Extra, Field, root_validator, validator from antarest.matrixstore.model import MatrixData -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency +from antarest.study.business.all_optional_meta import AllOptionalMetaclass +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( + BindingConstraintFrequency, + BindingConstraintOperator, +) +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import validate_filtering from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants from antarest.study.storage.variantstudy.business.utils import validate_matrix from antarest.study.storage.variantstudy.business.utils_binding_constraint import ( - apply_binding_constraint, parse_bindings_coeffs_and_save_into_config, ) -from antarest.study.storage.variantstudy.model.command.common import ( - BindingConstraintOperator, - CommandName, - CommandOutput, -) +from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand from antarest.study.storage.variantstudy.model.model import CommandDTO -__all__ = ( - "AbstractBindingConstraintCommand", - "CreateBindingConstraint", - "check_matrix_values", - "BindingConstraintProperties", - "BindingConstraintProperties870", - "BindingConstraintMatrices", -) +TERM_MATRICES = ["less_term_matrix", "equal_term_matrix", "greater_term_matrix"] +DEFAULT_GROUP = "default" MatrixType = t.List[t.List[MatrixData]] +EXPECTED_MATRIX_SHAPES = { + BindingConstraintFrequency.HOURLY: (8784, 3), + BindingConstraintFrequency.DAILY: (366, 3), + BindingConstraintFrequency.WEEKLY: (366, 3), +} + def check_matrix_values(time_step: BindingConstraintFrequency, values: MatrixType, version: int) -> None: """ @@ -53,14 +54,9 @@ def check_matrix_values(time_step: BindingConstraintFrequency, values: MatrixTyp # Also, we use the same matrices for "weekly" and "daily" frequencies, # because the solver calculates the weekly matrix from the daily matrix. # See https://github.com/AntaresSimulatorTeam/AntaREST/issues/1843 - shapes = { - BindingConstraintFrequency.HOURLY: (8784, 3), - BindingConstraintFrequency.DAILY: (366, 3), - BindingConstraintFrequency.WEEKLY: (366, 3), - } # Check the matrix values and create the corresponding matrix link array = np.array(values, dtype=np.float64) - expected_shape = shapes[time_step] + expected_shape = EXPECTED_MATRIX_SHAPES[time_step] actual_shape = array.shape if version < 870: if actual_shape != expected_shape: @@ -71,17 +67,81 @@ def check_matrix_values(time_step: BindingConstraintFrequency, values: MatrixTyp raise ValueError("Matrix values cannot contain NaN") -class BindingConstraintProperties(BaseModel, extra=Extra.forbid, allow_population_by_field_name=True): +# ================================================================================= +# Binding constraint properties classes +# ================================================================================= + + +class BindingConstraintPropertiesBase(BaseModel, extra=Extra.forbid, allow_population_by_field_name=True): enabled: bool = True - time_step: BindingConstraintFrequency = BindingConstraintFrequency.HOURLY + time_step: BindingConstraintFrequency = Field(BindingConstraintFrequency.HOURLY, alias="type") operator: BindingConstraintOperator = BindingConstraintOperator.EQUAL - comments: t.Optional[str] = None - filter_year_by_year: t.Optional[str] = None - filter_synthesis: t.Optional[str] = None + comments: str = "" + + @classmethod + def from_dict(cls, **attrs: t.Any) -> "BindingConstraintPropertiesBase": + """ + Instantiate a class from a dictionary excluding unknown or `None` fields. + """ + attrs = {k: v for k, v in attrs.items() if k in cls.__fields__ and v is not None} + return cls(**attrs) + + +class BindingConstraintProperties830(BindingConstraintPropertiesBase): + filter_year_by_year: str = Field("", alias="filter-year-by-year") + filter_synthesis: str = Field("", alias="filter-synthesis") + + @validator("filter_synthesis", "filter_year_by_year", pre=True) + def _validate_filtering(cls, v: t.Any) -> str: + return validate_filtering(v) + + +class BindingConstraintProperties870(BindingConstraintProperties830): + group: str = DEFAULT_GROUP + + +BindingConstraintProperties = t.Union[ + BindingConstraintPropertiesBase, + BindingConstraintProperties830, + BindingConstraintProperties870, +] + + +def get_binding_constraint_config_cls(study_version: t.Union[str, int]) -> t.Type[BindingConstraintProperties]: + """ + Retrieves the binding constraint configuration class based on the study version. + """ + version = int(study_version) + if version >= 870: + return BindingConstraintProperties870 + elif version >= 830: + return BindingConstraintProperties830 + else: + return BindingConstraintPropertiesBase + + +def create_binding_constraint_config(study_version: t.Union[str, int], **kwargs: t.Any) -> BindingConstraintProperties: + """ + Factory method to create a binding constraint configuration model. + + Args: + study_version: The version of the study. + **kwargs: The properties to be used to initialize the model. + + Returns: + The binding_constraint configuration model. + """ + cls = get_binding_constraint_config_cls(study_version) + return cls.from_dict(**kwargs) -class BindingConstraintProperties870(BindingConstraintProperties): - group: t.Optional[str] = None +class OptionalProperties(BindingConstraintProperties870, metaclass=AllOptionalMetaclass, use_none=True): + pass + + +# ================================================================================= +# Binding constraint matrices classes +# ================================================================================= class BindingConstraintMatrices(BaseModel, extra=Extra.forbid, allow_population_by_field_name=True): @@ -122,35 +182,41 @@ def check_matrices( "You cannot fill 'values' (matrix before v8.7) and a matrix term:" " 'less_term_matrix', 'greater_term_matrix' or 'equal_term_matrix' (matrices since v8.7)" ) + return values -class AbstractBindingConstraintCommand( - BindingConstraintProperties870, BindingConstraintMatrices, ICommand, metaclass=ABCMeta -): +# ================================================================================= +# Binding constraint command classes +# ================================================================================= + + +class AbstractBindingConstraintCommand(OptionalProperties, BindingConstraintMatrices, ICommand, metaclass=ABCMeta): """ Abstract class for binding constraint commands. """ - coeffs: t.Dict[str, t.List[float]] + coeffs: t.Optional[t.Dict[str, t.List[float]]] def to_dto(self) -> CommandDTO: - args = { - "enabled": self.enabled, - "time_step": self.time_step.value, - "operator": self.operator.value, - "coeffs": self.coeffs, - "comments": self.comments, - "filter_year_by_year": self.filter_year_by_year, - "filter_synthesis": self.filter_synthesis, - } + json_command = json.loads(self.json(exclude={"command_context"})) + args = {} + for field in ["enabled", "coeffs", "comments", "time_step", "operator"]: + if json_command[field]: + args[field] = json_command[field] + + # The `filter_year_by_year` and `filter_synthesis` attributes are only available for studies since v8.3 + if self.filter_synthesis: + args["filter_synthesis"] = self.filter_synthesis + if self.filter_year_by_year: + args["filter_year_by_year"] = self.filter_year_by_year # The `group` attribute is only available for studies since v8.7 if self.group: args["group"] = self.group matrix_service = self.command_context.matrix_service - for matrix_name in ["values", "less_term_matrix", "greater_term_matrix", "equal_term_matrix"]: + for matrix_name in TERM_MATRICES + ["values"]: matrix_attr = getattr(self, matrix_name, None) if matrix_attr is not None: args[matrix_name] = matrix_service.get_matrix_id(matrix_attr) @@ -171,11 +237,9 @@ def get_inner_matrices(self) -> t.List[str]: ] def get_corresponding_matrices( - self, v: t.Optional[t.Union[MatrixType, str]], version: int, create: bool + self, v: t.Optional[t.Union[MatrixType, str]], time_step: BindingConstraintFrequency, version: int, create: bool ) -> t.Optional[str]: - constants: GeneratorMatrixConstants - constants = self.command_context.generator_matrix_constants - time_step = self.time_step + constants: GeneratorMatrixConstants = self.command_context.generator_matrix_constants if v is None: if not create: @@ -206,17 +270,81 @@ def get_corresponding_matrices( raise TypeError(repr(v)) def validates_and_fills_matrices( - self, *, specific_matrices: t.Optional[t.List[str]], version: int, create: bool + self, + *, + time_step: BindingConstraintFrequency, + specific_matrices: t.Optional[t.List[str]], + version: int, + create: bool, ) -> None: if version < 870: - self.values = self.get_corresponding_matrices(self.values, version, create) + self.values = self.get_corresponding_matrices(self.values, time_step, version, create) elif specific_matrices: for matrix in specific_matrices: - setattr(self, matrix, self.get_corresponding_matrices(getattr(self, matrix), version, create)) + setattr( + self, matrix, self.get_corresponding_matrices(getattr(self, matrix), time_step, version, create) + ) else: - self.less_term_matrix = self.get_corresponding_matrices(self.less_term_matrix, version, create) - self.greater_term_matrix = self.get_corresponding_matrices(self.greater_term_matrix, version, create) - self.equal_term_matrix = self.get_corresponding_matrices(self.equal_term_matrix, version, create) + self.less_term_matrix = self.get_corresponding_matrices(self.less_term_matrix, time_step, version, create) + self.greater_term_matrix = self.get_corresponding_matrices( + self.greater_term_matrix, time_step, version, create + ) + self.equal_term_matrix = self.get_corresponding_matrices(self.equal_term_matrix, time_step, version, create) + + def apply_binding_constraint( + self, study_data: FileStudy, binding_constraints: t.Dict[str, t.Any], new_key: str, bd_id: str + ) -> CommandOutput: + version = study_data.config.version + + if self.coeffs: + for link_or_cluster in self.coeffs: + if "%" in link_or_cluster: + area_1, area_2 = link_or_cluster.split("%") + if area_1 not in study_data.config.areas or area_2 not in study_data.config.areas[area_1].links: + return CommandOutput( + status=False, + message=f"Link '{link_or_cluster}' does not exist in binding constraint '{bd_id}'", + ) + elif "." in link_or_cluster: + # Cluster IDs are stored in lower case in the binding constraints file. + area, cluster_id = link_or_cluster.split(".") + thermal_ids = {thermal.id.lower() for thermal in study_data.config.areas[area].thermals} + if area not in study_data.config.areas or cluster_id.lower() not in thermal_ids: + return CommandOutput( + status=False, + message=f"Cluster '{link_or_cluster}' does not exist in binding constraint '{bd_id}'", + ) + else: + raise NotImplementedError(f"Invalid link or thermal ID: {link_or_cluster}") + + # this is weird because Antares Simulator only accept int as offset + if len(self.coeffs[link_or_cluster]) == 2: + self.coeffs[link_or_cluster][1] = int(self.coeffs[link_or_cluster][1]) + + binding_constraints[new_key][link_or_cluster] = "%".join( + [str(coeff_val) for coeff_val in self.coeffs[link_or_cluster]] + ) + parse_bindings_coeffs_and_save_into_config(bd_id, study_data.config, self.coeffs or {}) + study_data.tree.save( + binding_constraints, + ["input", "bindingconstraints", "bindingconstraints"], + ) + if self.values: + if not isinstance(self.values, str): # pragma: no cover + raise TypeError(repr(self.values)) + if version < 870: + study_data.tree.save(self.values, ["input", "bindingconstraints", bd_id]) + for matrix_term, matrix_name, matrix_alias in zip( + [self.less_term_matrix, self.equal_term_matrix, self.greater_term_matrix], + TERM_MATRICES, + ["lt", "eq", "gt"], + ): + if matrix_term: + if not isinstance(matrix_term, str): # pragma: no cover + raise TypeError(repr(matrix_term)) + if version >= 870: + study_data.tree.save(matrix_term, ["input", "bindingconstraints", f"{bd_id}_{matrix_alias}"]) + return CommandOutput(status=True) class CreateBindingConstraint(AbstractBindingConstraintCommand): @@ -232,34 +360,26 @@ class CreateBindingConstraint(AbstractBindingConstraintCommand): def _apply_config(self, study_data_config: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: bd_id = transform_name_to_id(self.name) - parse_bindings_coeffs_and_save_into_config(bd_id, study_data_config, self.coeffs) + parse_bindings_coeffs_and_save_into_config(bd_id, study_data_config, self.coeffs or {}) return CommandOutput(status=True), {} def _apply(self, study_data: FileStudy) -> CommandOutput: binding_constraints = study_data.tree.get(["input", "bindingconstraints", "bindingconstraints"]) - new_key = len(binding_constraints) + new_key = str(len(binding_constraints)) bd_id = transform_name_to_id(self.name) - self.validates_and_fills_matrices(specific_matrices=None, version=study_data.config.version, create=True) - return apply_binding_constraint( - study_data, - binding_constraints, - str(new_key), - bd_id, - self.name, - self.comments, - self.enabled, - self.time_step, - self.operator, - self.coeffs, - self.values, - self.less_term_matrix, - self.greater_term_matrix, - self.equal_term_matrix, - self.filter_year_by_year, - self.filter_synthesis, - self.group, + study_version = study_data.config.version + props = create_binding_constraint_config(study_version, **self.dict()) + obj = json.loads(props.json(by_alias=True)) + + new_binding = {"id": bd_id, "name": self.name, **obj} + + binding_constraints[new_key] = new_binding + + self.validates_and_fills_matrices( + time_step=props.time_step, specific_matrices=None, version=study_version, create=True ) + return super().apply_binding_constraint(study_data, binding_constraints, new_key, bd_id) def to_dto(self) -> CommandDTO: dto = super().to_dto() @@ -269,49 +389,32 @@ def to_dto(self) -> CommandDTO: def match_signature(self) -> str: return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.name) - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, CreateBindingConstraint): - return False - simple_match = self.name == other.name - if not equal: - return simple_match - return ( - simple_match - and self.enabled == other.enabled - and self.time_step == other.time_step - and self.operator == other.operator - and self.coeffs == other.coeffs - and self.values == other.values - and self.comments == other.comments - and self.less_term_matrix == other.less_term_matrix - and self.greater_term_matrix == other.greater_term_matrix - and self.equal_term_matrix == other.equal_term_matrix - and self.group == other.group - and self.filter_synthesis == other.filter_synthesis - and self.filter_year_by_year == other.filter_year_by_year - ) - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: from antarest.study.storage.variantstudy.model.command.update_binding_constraint import UpdateBindingConstraint other = t.cast(CreateBindingConstraint, other) bd_id = transform_name_to_id(self.name) - - args = { - "id": bd_id, - "enabled": other.enabled, - "time_step": other.time_step, - "operator": other.operator, - "coeffs": other.coeffs, - "filter_year_by_year": other.filter_year_by_year, - "filter_synthesis": other.filter_synthesis, - "comments": other.comments, - "command_context": other.command_context, - "group": other.group, - } + args = {"id": bd_id, "command_context": other.command_context} + + excluded_fields = frozenset(ICommand.__fields__) + self_command = json.loads(self.json(exclude=excluded_fields)) + other_command = json.loads(other.json(exclude=excluded_fields)) + properties = [ + "enabled", + "coeffs", + "comments", + "filter_year_by_year", + "filter_synthesis", + "group", + "time_step", + "operator", + ] + for prop in properties: + if self_command[prop] != other_command[prop]: + args[prop] = other_command[prop] matrix_service = self.command_context.matrix_service - for matrix_name in ["values", "less_term_matrix", "equal_term_matrix", "greater_term_matrix"]: + for matrix_name in ["values"] + TERM_MATRICES: self_matrix = getattr(self, matrix_name) # matrix, ID or `None` other_matrix = getattr(other, matrix_name) # matrix, ID or `None` self_matrix_id = None if self_matrix is None else matrix_service.get_matrix_id(self_matrix) @@ -320,3 +423,10 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: args[matrix_name] = other_matrix_id return [UpdateBindingConstraint(**args)] + + def match(self, other: "ICommand", equal: bool = False) -> bool: + if not isinstance(other, self.__class__): + return False + if not equal: + return self.name == other.name + return super().match(other, equal) diff --git a/antarest/study/storage/variantstudy/model/command/create_cluster.py b/antarest/study/storage/variantstudy/model/command/create_cluster.py index f9edfba949..a884eb7b9c 100644 --- a/antarest/study/storage/variantstudy/model/command/create_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_cluster.py @@ -115,6 +115,7 @@ def _apply(self, study_data: FileStudy) -> CommandOutput: # Series identifiers are in lower case. series_id = cluster_id.lower() + null_matrix = self.command_context.generator_matrix_constants.get_null_matrix() new_cluster_data: JSON = { "input": { "thermal": { @@ -127,14 +128,13 @@ def _apply(self, study_data: FileStudy) -> CommandOutput: } } }, - "series": { - self.area_id: { - series_id: {"series": self.command_context.generator_matrix_constants.get_null_matrix()} - } - }, + "series": {self.area_id: {series_id: {"series": null_matrix}}}, } } } + if study_data.config.version >= 870: + new_cluster_data["input"]["thermal"]["series"][self.area_id][series_id]["CO2Cost"] = null_matrix + new_cluster_data["input"]["thermal"]["series"][self.area_id][series_id]["fuelCost"] = null_matrix study_data.tree.save(new_cluster_data) return output diff --git a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py index ab61d8f710..3e5ad8e213 100644 --- a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py @@ -4,8 +4,8 @@ from antarest.core.model import JSON from antarest.study.storage.rawstudy.model.filesystem.config.model import ( - ENR_MODELLING, Area, + EnrModelling, FileStudyTreeConfig, transform_name_to_id, ) @@ -42,7 +42,7 @@ def validate_cluster_name(cls, val: str) -> str: return val def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: - if study_data.enr_modelling != ENR_MODELLING.CLUSTERS.value: + if study_data.enr_modelling != EnrModelling.CLUSTERS.value: # Since version 8.1 of the solver, we can use renewable clusters # instead of "Load", "Wind" and "Solar" objects for modelling. # When the "renewable-generation-modelling" parameter is set to "aggregated", @@ -50,7 +50,7 @@ def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutpu # To use renewable clusters, the parameter must therefore be set to "clusters". message = ( f"Parameter 'renewable-generation-modelling'" - f" must be set to '{ENR_MODELLING.CLUSTERS.value}'" + f" must be set to '{EnrModelling.CLUSTERS.value}'" f" instead of '{study_data.enr_modelling}'" ) return CommandOutput(status=False, message=message), {} diff --git a/antarest/study/storage/variantstudy/model/command/icommand.py b/antarest/study/storage/variantstudy/model/command/icommand.py index 6a17c34c10..1c5c704320 100644 --- a/antarest/study/storage/variantstudy/model/command/icommand.py +++ b/antarest/study/storage/variantstudy/model/command/icommand.py @@ -1,6 +1,7 @@ import logging +import typing as t +import uuid from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Any, Dict, List, Tuple from pydantic import BaseModel, Extra @@ -11,20 +12,31 @@ from antarest.study.storage.variantstudy.model.command_context import CommandContext from antarest.study.storage.variantstudy.model.model import CommandDTO -if TYPE_CHECKING: # False at runtime, for mypy +if t.TYPE_CHECKING: # False at runtime, for mypy from antarest.study.storage.variantstudy.business.command_extractor import CommandExtractor MATCH_SIGNATURE_SEPARATOR = "%" logger = logging.getLogger(__name__) -class ICommand(ABC, BaseModel, extra=Extra.forbid, arbitrary_types_allowed=True): +class ICommand(ABC, BaseModel, extra=Extra.forbid, arbitrary_types_allowed=True, copy_on_model_validation="deep"): + """ + Interface for all commands that can be applied to a study. + + Attributes: + command_id: The ID of the command extracted from the database, if any. + command_name: The name of the command. + version: The version of the command (currently always equal to 1). + command_context: The context of the command. + """ + + command_id: t.Optional[uuid.UUID] = None command_name: CommandName version: int command_context: CommandContext @abstractmethod - def _apply_config(self, study_data: FileStudyTreeConfig) -> Tuple[CommandOutput, Dict[str, Any]]: + def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: """ Applies configuration changes to the study data. @@ -98,7 +110,6 @@ def match_signature(self) -> str: """Returns the command signature.""" raise NotImplementedError() - @abstractmethod def match(self, other: "ICommand", equal: bool = False) -> bool: """ Indicate if the other command is the same type and targets the same element. @@ -109,10 +120,15 @@ def match(self, other: "ICommand", equal: bool = False) -> bool: Returns: True if the command match with the other else False """ - raise NotImplementedError() + if not isinstance(other, self.__class__): + return False + excluded_fields = set(ICommand.__fields__) + this_values = self.dict(exclude=excluded_fields) + that_values = other.dict(exclude=excluded_fields) + return this_values == that_values @abstractmethod - def _create_diff(self, other: "ICommand") -> List["ICommand"]: + def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: """ Creates a list of commands representing the differences between the current instance and another `ICommand` object. @@ -126,7 +142,7 @@ def _create_diff(self, other: "ICommand") -> List["ICommand"]: """ raise NotImplementedError() - def create_diff(self, other: "ICommand") -> List["ICommand"]: + def create_diff(self, other: "ICommand") -> t.List["ICommand"]: """ Creates a list of commands representing the differences between the current instance and another `ICommand` object. @@ -142,7 +158,7 @@ def create_diff(self, other: "ICommand") -> List["ICommand"]: return self._create_diff(other) @abstractmethod - def get_inner_matrices(self) -> List[str]: + def get_inner_matrices(self) -> t.List[str]: """ Retrieves the list of matrix IDs. """ diff --git a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py index 2bd52825c6..958e9d81f1 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py @@ -26,11 +26,11 @@ def _apply_config(self, study_data: FileStudyTreeConfig) -> Tuple[CommandOutput, dict(), ) study_data.bindings.remove(next(iter([bind for bind in study_data.bindings if bind.id == self.id]))) - return CommandOutput(status=True), dict() + return CommandOutput(status=True), {} def _apply(self, study_data: FileStudy) -> CommandOutput: if self.id not in [bind.id for bind in study_data.config.bindings]: - return CommandOutput(status=False, message="Binding constraint not found") + return CommandOutput(status=False, message=f"Binding constraint not found: '{self.id}'") binding_constraints = study_data.tree.get(["input", "bindingconstraints", "bindingconstraints"]) new_binding_constraints: JSON = {} index = 0 diff --git a/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py index 70ad16702f..8befaccac1 100644 --- a/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py @@ -1,17 +1,20 @@ -from typing import Any, Dict, List, Optional, Tuple +import json +from typing import Any, Dict, List, Mapping, Optional, Tuple from antarest.core.model import JSON from antarest.matrixstore.model import MatrixData +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.utils_binding_constraint import apply_binding_constraint from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput -from antarest.study.storage.variantstudy.model.command.create_binding_constraint import AbstractBindingConstraintCommand +from antarest.study.storage.variantstudy.model.command.create_binding_constraint import ( + TERM_MATRICES, + AbstractBindingConstraintCommand, + create_binding_constraint_config, +) from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand from antarest.study.storage.variantstudy.model.model import CommandDTO -__all__ = ("UpdateBindingConstraint",) - MatrixType = List[List[MatrixData]] @@ -35,76 +38,71 @@ class UpdateBindingConstraint(AbstractBindingConstraintCommand): def _apply_config(self, study_data: FileStudyTreeConfig) -> Tuple[CommandOutput, Dict[str, Any]]: return CommandOutput(status=True), {} + def _find_binding_config(self, binding_constraints: Mapping[str, JSON]) -> Optional[Tuple[str, JSON]]: + """ + Find the binding constraint with the given ID in the list of binding constraints, + and returns its index and configuration, or `None` if it does not exist. + """ + for index, binding_config in binding_constraints.items(): + if binding_config["id"] == self.id: + # convert to string because the index could be an integer + return str(index), binding_config + return None + def _apply(self, study_data: FileStudy) -> CommandOutput: binding_constraints = study_data.tree.get(["input", "bindingconstraints", "bindingconstraints"]) - binding: Optional[JSON] = None - new_key: Optional[str] = None - for key, binding_config in binding_constraints.items(): - if binding_config["id"] == self.id: - binding = binding_config - new_key = key - break - if binding is None or new_key is None: + index_and_cfg = self._find_binding_config(binding_constraints) + if index_and_cfg is None: return CommandOutput( status=False, - message="Failed to retrieve existing binding constraint", + message="The binding constraint with ID '{self.id}' does not exist", ) - # fmt: off - updated_matrices = [term for term in ["less_term_matrix", "equal_term_matrix", "greater_term_matrix"] if self.__getattribute__(term)] - self.validates_and_fills_matrices(specific_matrices=updated_matrices or None, version=study_data.config.version, create=False) - # fmt: on - - return apply_binding_constraint( - study_data, - binding_constraints, - new_key, - self.id, - binding["name"], - self.comments, - self.enabled, - self.time_step, - self.operator, - self.coeffs, - self.values, - self.less_term_matrix, - self.greater_term_matrix, - self.equal_term_matrix, - self.filter_year_by_year, - self.filter_synthesis, - self.group, + index, actual_cfg = index_and_cfg + + updated_matrices = [term for term in TERM_MATRICES if hasattr(self, term) and getattr(self, term)] + study_version = study_data.config.version + time_step = self.time_step or BindingConstraintFrequency(actual_cfg.get("type")) + self.validates_and_fills_matrices( + time_step=time_step, specific_matrices=updated_matrices or None, version=study_version, create=False ) + study_version = study_data.config.version + props = create_binding_constraint_config(study_version, **self.dict()) + obj = json.loads(props.json(by_alias=True, exclude_unset=True)) + + updated_cfg = binding_constraints[index] + updated_cfg.update(obj) + + if self.coeffs: + # Remove terms which IDs contain a "%" or a "." in their name + term_ids = {k for k in updated_cfg if "%" in k or "." in k} + binding_constraints[index] = {k: v for k, v in updated_cfg.items() if k not in term_ids} + + return super().apply_binding_constraint(study_data, binding_constraints, index, self.id) + def to_dto(self) -> CommandDTO: - dto = super().to_dto() - dto.args["id"] = self.id # type: ignore - return dto + matrices = ["values"] + TERM_MATRICES + matrix_service = self.command_context.matrix_service + + excluded_fields = frozenset(ICommand.__fields__) + json_command = json.loads(self.json(exclude=excluded_fields, exclude_none=True)) + for key in json_command: + if key in matrices: + json_command[key] = matrix_service.get_matrix_id(json_command[key]) + + return CommandDTO(action=self.command_name.value, args=json_command, version=self.version) def match_signature(self) -> str: return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.id) - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, UpdateBindingConstraint): - return False - simple_match = self.id == other.id - if not equal: - return simple_match - return ( - simple_match - and self.enabled == other.enabled - and self.time_step == other.time_step - and self.operator == other.operator - and self.coeffs == other.coeffs - and self.values == other.values - and self.less_term_matrix == other.less_term_matrix - and self.greater_term_matrix == other.greater_term_matrix - and self.equal_term_matrix == other.equal_term_matrix - and self.comments == other.comments - and self.group == other.group - and self.filter_synthesis == other.filter_synthesis - and self.filter_year_by_year == other.filter_year_by_year - ) - def _create_diff(self, other: "ICommand") -> List["ICommand"]: return [other] + + def match(self, other: "ICommand", equal: bool = False) -> bool: + if not isinstance(other, self.__class__): + return False + if not equal: + return self.id == other.id + return super().match(other, equal) diff --git a/antarest/study/storage/variantstudy/model/command/update_config.py b/antarest/study/storage/variantstudy/model/command/update_config.py index 91caa6a738..29887d42e1 100644 --- a/antarest/study/storage/variantstudy/model/command/update_config.py +++ b/antarest/study/storage/variantstudy/model/command/update_config.py @@ -27,7 +27,7 @@ class UpdateConfig(ICommand): data: Union[str, int, float, bool, JSON, None] def _apply_config(self, study_data: FileStudyTreeConfig) -> Tuple[CommandOutput, Dict[str, Any]]: - return CommandOutput(status=True, message="ok"), dict() + return CommandOutput(status=True, message="ok"), {} def _apply(self, study_data: FileStudy) -> CommandOutput: url = self.target.split("/") diff --git a/antarest/study/storage/variantstudy/model/interfaces.py b/antarest/study/storage/variantstudy/model/interfaces.py index 93def93234..31b14fabd7 100644 --- a/antarest/study/storage/variantstudy/model/interfaces.py +++ b/antarest/study/storage/variantstudy/model/interfaces.py @@ -62,7 +62,7 @@ def generate_update_config( raise NotImplementedError() @abstractmethod - def generate_update_rawfile( + def generate_update_raw_file( self, study_tree: FileStudyTree, url: List[str], diff --git a/antarest/study/storage/variantstudy/model/model.py b/antarest/study/storage/variantstudy/model/model.py index cd478742b4..e170bf4383 100644 --- a/antarest/study/storage/variantstudy/model/model.py +++ b/antarest/study/storage/variantstudy/model/model.py @@ -1,10 +1,37 @@ import typing as t +import uuid +import typing_extensions as te from pydantic import BaseModel from antarest.core.model import JSON from antarest.study.model import StudyMetadataDTO +LegacyDetailsDTO = t.Tuple[str, bool, str] +""" +Legacy details DTO: triplet of name, output status and output message. +""" + + +class NewDetailsDTO(te.TypedDict): + """ + New details DTO: dictionary with keys 'id', 'name', 'status' and 'msg'. + + Attributes: + id: command identifier (UUID) if it exists. + name: command name. + status: command status (true or false). + msg: command generation message or error message (if the status is false). + """ + + id: uuid.UUID + name: str + status: bool + msg: str + + +DetailsDTO = t.Union[LegacyDetailsDTO, NewDetailsDTO] + class GenerationResultInfoDTO(BaseModel): """ @@ -12,11 +39,11 @@ class GenerationResultInfoDTO(BaseModel): Attributes: success: A boolean indicating whether the generation process was successful. - details: A list of tuples containing detailed information about the generation process. + details: Objects containing detailed information about the generation process. """ success: bool - details: t.MutableSequence[t.Tuple[str, bool, str]] + details: t.MutableSequence[DetailsDTO] class CommandDTO(BaseModel): diff --git a/antarest/study/storage/variantstudy/repository.py b/antarest/study/storage/variantstudy/repository.py index bf2c979de1..b9f0d88dac 100644 --- a/antarest/study/storage/variantstudy/repository.py +++ b/antarest/study/storage/variantstudy/repository.py @@ -1,6 +1,6 @@ import typing as t -from sqlalchemy.orm import Session, joinedload, subqueryload # type: ignore +from sqlalchemy.orm import Session, joinedload # type: ignore from antarest.core.interfaces.cache import ICache from antarest.core.utils.fastapi_sqlalchemy import db diff --git a/antarest/study/storage/variantstudy/snapshot_generator.py b/antarest/study/storage/variantstudy/snapshot_generator.py index 138089a35e..ee4532349f 100644 --- a/antarest/study/storage/variantstudy/snapshot_generator.py +++ b/antarest/study/storage/variantstudy/snapshot_generator.py @@ -175,8 +175,15 @@ def _apply_commands( if not results.success: message = f"Failed to generate variant study {variant_study.id}" if results.details: - detail: t.Tuple[str, bool, str] = results.details[-1] - message += f": {detail[2]}" + detail = results.details[-1] + if isinstance(detail, (tuple, list)): + # old format: LegacyDetailsDTO + message += f": {detail[2]}" + elif isinstance(detail, dict): + # new format since v2.17: NewDetailsDTO + message += f": {detail['msg']}" + else: # pragma: no cover + raise NotImplementedError(f"Unexpected detail type: {type(detail)}") raise VariantGenerationError(message) return results diff --git a/antarest/study/storage/variantstudy/variant_command_generator.py b/antarest/study/storage/variantstudy/variant_command_generator.py index ebe934ce15..7e56f370ec 100644 --- a/antarest/study/storage/variantstudy/variant_command_generator.py +++ b/antarest/study/storage/variantstudy/variant_command_generator.py @@ -1,5 +1,6 @@ import logging import shutil +import uuid from pathlib import Path from typing import Callable, List, Optional, Tuple, Union, cast @@ -10,13 +11,23 @@ from antarest.study.storage.variantstudy.model.command.common import CommandOutput from antarest.study.storage.variantstudy.model.command.icommand import ICommand from antarest.study.storage.variantstudy.model.dbmodel import VariantStudy -from antarest.study.storage.variantstudy.model.model import GenerationResultInfoDTO +from antarest.study.storage.variantstudy.model.model import GenerationResultInfoDTO, NewDetailsDTO logger = logging.getLogger(__name__) APPLY_CALLBACK = Callable[[ICommand, Union[FileStudyTreeConfig, FileStudy]], CommandOutput] +class CmdNotifier: + def __init__(self, study_id: str, total_count: int) -> None: + self.index = 0 + self.study_id = study_id + self.total_count = total_count + + def __call__(self, x: float) -> None: + logger.info(f"Command {self.index}/{self.total_count} [{self.study_id}] applied in {x}s") + + class VariantCommandGenerator: def __init__(self, study_factory: StudyFactory) -> None: self.study_factory = study_factory @@ -33,53 +44,50 @@ def _generate( # Apply commands results: GenerationResultInfoDTO = GenerationResultInfoDTO(success=True, details=[]) - stopwatch.reset_current() logger.info("Applying commands") - command_index = 0 - total_commands = len(commands) - study_id = metadata.id if metadata is not None else "-" - for command_batch in commands: - command_output_status = True - command_output_message = "" - command_name = command_batch[0].command_name.value if len(command_batch) > 0 else "" + study_id = "-" if metadata is None else metadata.id + + # flatten the list of commands + all_commands = [command for command_batch in commands for command in command_batch] + + # Prepare the stopwatch + cmd_notifier = CmdNotifier(study_id, len(all_commands)) + stopwatch.reset_current() + + # Store all the outputs + for index, cmd in enumerate(all_commands, 1): try: - command_index += 1 - command_output_messages: List[str] = [] - for command in command_batch: - output = applier(command, data) - command_output_messages.append(output.message) - command_output_status = command_output_status and output.status - if not command_output_status: - break - command_output_message = "\n".join(command_output_messages) + output = applier(cmd, data) except Exception as e: - command_output_status = False - command_output_message = f"Error while applying command {command_name}" - logger.error(command_output_message, exc_info=e) - break - finally: - results.details.append( - ( - command_name, - command_output_status, - command_output_message, - ) - ) - results.success = command_output_status - if notifier: - notifier( - command_index - 1, - command_output_status, - command_output_message, - ) - stopwatch.log_elapsed( - lambda x: logger.info( - f"Command {command_index}/{total_commands} [{study_id}] {command.match_signature()} applied in {x}s" - ) + # Unhandled exception + output = CommandOutput( + status=False, + message=f"Error while applying command {cmd.command_name}", ) + logger.error(output.message, exc_info=e) + + # noinspection PyTypeChecker + detail: NewDetailsDTO = { + "id": uuid.UUID(int=0) if cmd.command_id is None else cmd.command_id, + "name": cmd.command_name.value, + "status": output.status, + "msg": output.message, + } + results.details.append(detail) + + if notifier: + notifier(index - 1, output.status, output.message) - if not results.success: + cmd_notifier.index = index + stopwatch.log_elapsed(cmd_notifier) + + # stop variant generation as soon as a command fails + if not output.status: + logger.error(f"Command {cmd.command_name} failed: {output.message}") break + + results.success = all(detail["status"] for detail in results.details) # type: ignore + data_type = isinstance(data, FileStudy) stopwatch.log_elapsed( lambda x: logger.info( diff --git a/antarest/study/storage/variantstudy/variant_study_service.py b/antarest/study/storage/variantstudy/variant_study_service.py index f4b342ad7b..d5288e8994 100644 --- a/antarest/study/storage/variantstudy/variant_study_service.py +++ b/antarest/study/storage/variantstudy/variant_study_service.py @@ -35,11 +35,13 @@ from antarest.core.tasks.service import DEFAULT_AWAIT_MAX_TIMEOUT, ITaskService, TaskUpdateNotifier, noop_notifier from antarest.core.utils.utils import assert_this, suppress_exception from antarest.matrixstore.service import MatrixService +from antarest.study.common.default_values import AreasQueryFile, LinksQueryFile from antarest.study.model import RawStudy, Study, StudyAdditionalData, StudyMetadataDTO, StudySimResultDTO from antarest.study.storage.abstract_storage_service import AbstractStorageService from antarest.study.storage.patch_service import PatchService from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig, FileStudyTreeConfigDTO from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy, StudyFactory +from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency from antarest.study.storage.rawstudy.raw_study_service import RawStudyService from antarest.study.storage.utils import assert_permission, export_study_flat, is_managed, remove_from_cache from antarest.study.storage.variantstudy.business.utils import transform_command_to_dto @@ -492,6 +494,62 @@ def get( use_cache=use_cache, ) + def aggregate_areas_data( + self, + metadata: Study, + output_id: str, + query_file: AreasQueryFile, + frequency: MatrixFrequency, + mc_years: t.Sequence[int], + areas_ids: t.Sequence[str], + columns_names: t.Sequence[str], + ) -> t.Dict[str, t.Any]: + """ + Entry point to fetch data inside study. + Args: + metadata: study + output_id: the simulation ID + query_file: "values", "details", "details-st-storage", "details-res" + frequency: "hourly", "daily", "weekly", "monthly", "annual" + mc_years: list of Monte Carlo years to be selected, if empty, all years are selected + areas_ids: list of areas to be selected, if empty, all areas are selected + columns_names: list of columns to be selected, if empty, all columns are selected + + Returns: the aggregated data for areas in JSON (DataFrame.to_dict(orient='split')) + + """ + self._safe_generation(metadata, timeout=60) + self.repository.refresh(metadata) + return super().aggregate_areas_data( + metadata, output_id, query_file, frequency, mc_years, areas_ids, columns_names + ) + + def aggregate_links_data( + self, + metadata: Study, + output_id: str, + query_file: LinksQueryFile, + frequency: MatrixFrequency, + mc_years: t.Sequence[int], + columns_names: t.Sequence[str], + ) -> t.Dict[str, t.Any]: + """ + Entry point to fetch data inside study. + Args: + metadata: study for which we want to aggregate output links raw data + output_id: the simulation ID + query_file: "values", "details" + frequency: "hourly", "daily", "weekly", "monthly", "annual" + mc_years: list of Monte Carlo years to be selected, if empty, all years are selected + columns_names: list of columns to be selected, if empty, all columns are selected + + Returns: the aggregated data for links in JSON (DataFrame.to_dict(orient='split')) + + """ + self._safe_generation(metadata, timeout=60) + self.repository.refresh(metadata) + return super().aggregate_links_data(metadata, output_id, query_file, frequency, mc_years, columns_names) + def create_variant_study(self, uuid: str, name: str, params: RequestParameters) -> VariantStudy: """ Create a new variant study. diff --git a/antarest/study/web/raw_studies_blueprint.py b/antarest/study/web/raw_studies_blueprint.py index d452a53e9e..2ce44c5d48 100644 --- a/antarest/study/web/raw_studies_blueprint.py +++ b/antarest/study/web/raw_studies_blueprint.py @@ -1,3 +1,4 @@ +import collections import http import io import json @@ -20,10 +21,19 @@ from antarest.core.utils.web import APITag from antarest.login.auth import Auth from antarest.study.business.enum_ignore_case import EnumIgnoreCase +from antarest.study.common.default_values import AreasQueryFile, LinksQueryFile from antarest.study.service import StudyService +from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency + +try: + import tables # type: ignore + import xlsxwriter # type: ignore +except ImportError: + raise ImportError("The 'xlsxwriter' and 'tables' packages are required") from None logger = logging.getLogger(__name__) + # noinspection SpellCheckingInspection CONTENT_TYPES = { @@ -52,11 +62,23 @@ } +def _split_comma_separated_values(value: str, *, default: t.Sequence[str] = ()) -> t.Sequence[str]: + """Split a comma-separated list of values into an ordered set of strings.""" + values = value.split(",") if value else default + # drop whitespace around values + values = [v.strip() for v in values] + # remove duplicates and preserve order (to have a deterministic result for unit tests). + return list(collections.OrderedDict.fromkeys(values)) + + class TableExportFormat(EnumIgnoreCase): """Export format for tables.""" XLSX = "xlsx" + HDF5 = "hdf5" TSV = "tsv" + CSV = "csv" + CSV_SEMICOLON = "csv (semicolon)" def __str__(self) -> str: """Return the format as a string for display.""" @@ -70,6 +92,10 @@ def media_type(self) -> str: return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" elif self == TableExportFormat.TSV: return "text/tab-separated-values" + elif self in (TableExportFormat.CSV, TableExportFormat.CSV_SEMICOLON): + return "text/csv" + elif self == TableExportFormat.HDF5: + return "application/x-hdf5" else: # pragma: no cover raise NotImplementedError(f"Export format '{self}' is not implemented") @@ -80,6 +106,10 @@ def suffix(self) -> str: return ".xlsx" elif self == TableExportFormat.TSV: return ".tsv" + elif self in (TableExportFormat.CSV, TableExportFormat.CSV_SEMICOLON): + return ".csv" + elif self == TableExportFormat.HDF5: + return ".h5" else: # pragma: no cover raise NotImplementedError(f"Export format '{self}' is not implemented") @@ -93,9 +123,45 @@ def export_table( ) -> None: """Export a table to a file in the given format.""" if self == TableExportFormat.XLSX: - return df.to_excel(export_path, index=with_index, header=with_header, engine="openpyxl") + return df.to_excel( + export_path, + index=with_index, + header=with_header, + engine="xlsxwriter", + ) elif self == TableExportFormat.TSV: - return df.to_csv(export_path, sep="\t", index=with_index, header=with_header, float_format="%.6f") + return df.to_csv( + export_path, + sep="\t", + index=with_index, + header=with_header, + float_format="%.6f", + ) + elif self == TableExportFormat.CSV: + return df.to_csv( + export_path, + sep=",", + index=with_index, + header=with_header, + float_format="%.6f", + ) + elif self == TableExportFormat.CSV_SEMICOLON: + return df.to_csv( + export_path, + sep=";", + decimal=",", + index=with_index, + header=with_header, + float_format="%.6f", + ) + elif self == TableExportFormat.HDF5: + return df.to_hdf( + export_path, + key="data", + mode="w", + format="table", + data_columns=True, + ) else: # pragma: no cover raise NotImplementedError(f"Export format '{self}' is not implemented") @@ -203,6 +269,104 @@ def get_study( ).encode("utf-8") return Response(content=json_response, media_type="application/json") + @bp.get( + "/studies/{uuid}/areas/aggregate", + tags=[APITag.study_raw_data], + summary="Retrieve Aggregated Areas Raw Data from Study Output", + ) + def aggregate_areas_raw_data( + uuid: str, + output_id: str, + query_file: AreasQueryFile, + frequency: MatrixFrequency, + mc_years: str = "", + areas_ids: str = "", + columns_names: str = "", + current_user: JWTUser = Depends(auth.get_current_user), + ) -> t.Dict[str, t.Any]: + """ + Create an aggregation of areas raw data + + Args: + uuid: study ID + output_id: the output ID aka the simulation ID + query_file: "values", "details", "details-st-storage", "details-res" + frequency: "hourly", "daily", "weekly", "monthly", "annual" + mc_years: which Monte Carlo years to be selected if empty all are selected (comma separated) + areas_ids: which areas to be selected if empty all are selected (comma separated) + columns_names: which columns to be selected if empty all are selected (comma separated) + current_user: the current user login info + + + Returns: + JSON (DF like matrix) object with the aggregated raw output data for areas + + """ + logger.info( + f"Aggregate areas raw data at {query_file} (output name = {output_id}) from study {uuid}", + extra={"user": current_user.id}, + ) + parameters = RequestParameters(user=current_user) + output = study_service.aggregate_areas_data( + uuid, + output_id=output_id, + query_file=query_file, + frequency=frequency, + mc_years=[int(mc_year) for mc_year in _split_comma_separated_values(mc_years)], + areas_ids=_split_comma_separated_values(areas_ids), + columns_names=_split_comma_separated_values(columns_names), + params=parameters, + ) + + return output + + @bp.get( + "/studies/{uuid}/links/aggregate", + tags=[APITag.study_raw_data], + summary="Retrieve Aggregated Areas Raw Data from Study Output", + ) + def aggregate_links_raw_data( + uuid: str, + output_id: str, + query_file: LinksQueryFile, + frequency: MatrixFrequency, + mc_years: str = "", + columns_names: str = "", + current_user: JWTUser = Depends(auth.get_current_user), + ) -> t.Dict[str, t.Any]: + """ + Create an aggregation of links raw data + + Args: + uuid: study ID + output_id: the output ID aka the simulation ID + query_file: "values", "details" + frequency: "hourly", "daily", "weekly", "monthly", "annual" + mc_years: which Monte Carlo years to be selected if empty all are selected (comma separated) + columns_names: which columns to be selected if empty all are selected (comma separated) + current_user: the current user login info + + Returns: + JSON (DF like matrix) with the aggregated links raw data + + """ + logger.info( + f"Aggregate links raw data at {query_file} (output name = {output_id}) from study {uuid}", + extra={"user": current_user.id}, + ) + parameters = RequestParameters(user=current_user) + output = study_service.aggregate_links_data( + uuid, + output_id=output_id, + query_file=query_file, + frequency=frequency, + mc_years=[int(mc_year) for mc_year in _split_comma_separated_values(mc_years)], + columns_names=_split_comma_separated_values(columns_names), + params=parameters, + ) + + return output + @bp.post( "/studies/{uuid}/raw", status_code=http.HTTPStatus.NO_CONTENT, @@ -353,7 +517,10 @@ def get_matrix( return FileResponse( export_path, - headers={"Content-Disposition": f'attachment; filename="{export_file_download.filename}"'}, + headers={ + "Content-Disposition": f'attachment; filename="{export_file_download.filename}"', + "Content-Type": f"{export_format.media_type}; charset=utf-8", + }, media_type=export_format.media_type, ) diff --git a/antarest/study/web/study_data_blueprint.py b/antarest/study/web/study_data_blueprint.py index 6d7dff831e..467aa49805 100644 --- a/antarest/study/web/study_data_blueprint.py +++ b/antarest/study/web/study_data_blueprint.py @@ -1,8 +1,7 @@ import enum import logging -import warnings +import typing as t from http import HTTPStatus -from typing import Any, Dict, List, Mapping, Optional, Sequence, Union, cast import typing_extensions as te from fastapi import APIRouter, Body, Depends, Query @@ -10,7 +9,7 @@ from antarest.core.config import Config from antarest.core.jwt import JWTUser -from antarest.core.model import StudyPermissionType +from antarest.core.model import JSON, StudyPermissionType from antarest.core.requests import RequestParameters from antarest.core.utils.utils import sanitize_uuid from antarest.core.utils.web import APITag @@ -19,7 +18,7 @@ from antarest.study.business.adequacy_patch_management import AdequacyPatchFormFields from antarest.study.business.advanced_parameters_management import AdvancedParamsFormFields from antarest.study.business.allocation_management import AllocationFormFields, AllocationMatrix -from antarest.study.business.area_management import AreaCreationDTO, AreaInfoDTO, AreaType, AreaUI, LayerInfoDTO +from antarest.study.business.area_management import AreaCreationDTO, AreaInfoDTO, AreaType, LayerInfoDTO, UpdateAreaUi from antarest.study.business.areas.hydro_management import InflowStructure, ManagementOptionsFormFields from antarest.study.business.areas.properties_management import PropertiesFormFields from antarest.study.business.areas.renewable_management import ( @@ -55,16 +54,15 @@ from antarest.study.business.link_management import LinkInfoDTO from antarest.study.business.optimization_management import OptimizationFormFields from antarest.study.business.playlist_management import PlaylistColumns -from antarest.study.business.table_mode_management import ( - BindingConstraintOperator, - ColumnsModelTypes, - TableTemplateType, -) +from antarest.study.business.table_mode_management import TableDataDTO, TableModeType from antarest.study.business.thematic_trimming_field_infos import ThematicTrimmingFormFields from antarest.study.business.timeseries_config_management import TSFormFields from antarest.study.model import PatchArea, PatchCluster from antarest.study.service import StudyService -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( + BindingConstraintFrequency, + BindingConstraintOperator, +) from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id logger = logging.getLogger(__name__) @@ -74,7 +72,7 @@ class BCKeyValueType(te.TypedDict): """Deprecated type for binding constraint key-value pair (used for update)""" key: str - value: Union[str, int, float, bool] + value: t.Union[str, int, float, bool] class ClusterType(str, enum.Enum): @@ -110,14 +108,14 @@ def create_study_data_routes(study_service: StudyService, config: Config) -> API "/studies/{uuid}/areas", tags=[APITag.study_data], summary="Get all areas basic info", - response_model=Union[List[AreaInfoDTO], Dict[str, Any]], # type: ignore + response_model=t.Union[t.List[AreaInfoDTO], t.Dict[str, t.Any]], # type: ignore ) def get_areas( uuid: str, - type: Optional[AreaType] = None, + type: t.Optional[AreaType] = None, ui: bool = False, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Union[List[AreaInfoDTO], Dict[str, Any]]: + ) -> t.Union[t.List[AreaInfoDTO], t.Dict[str, t.Any]]: logger.info( f"Fetching area list (type={type}) for study {uuid}", extra={"user": current_user.id}, @@ -130,13 +128,13 @@ def get_areas( "/studies/{uuid}/links", tags=[APITag.study_data], summary="Get all links", - response_model=List[LinkInfoDTO], + response_model=t.List[LinkInfoDTO], ) def get_links( uuid: str, with_ui: bool = False, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Fetching link list for study {uuid}", extra={"user": current_user.id}, @@ -155,7 +153,7 @@ def create_area( uuid: str, area_creation_info: AreaCreationDTO, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Creating new area for study {uuid}", extra={"user": current_user.id}, @@ -173,7 +171,7 @@ def create_link( uuid: str, link_creation_info: LinkInfoDTO, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Creating new link for study {uuid}", extra={"user": current_user.id}, @@ -190,10 +188,10 @@ def create_link( def update_area_ui( uuid: str, area_id: str, - area_ui: AreaUI, + area_ui: UpdateAreaUi, layer: str = "0", current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Updating area ui {area_id} for study {uuid}", extra={"user": current_user.id}, @@ -210,9 +208,9 @@ def update_area_ui( def update_area_info( uuid: str, area_id: str, - area_patch_dto: Union[PatchArea, Dict[str, PatchCluster]], + area_patch_dto: t.Union[PatchArea, t.Dict[str, PatchCluster]], current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Updating area {area_id} for study {uuid}", extra={"user": current_user.id}, @@ -238,7 +236,7 @@ def delete_area( uuid: str, area_id: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Removing area {area_id} in study {uuid}", extra={"user": current_user.id}, @@ -260,7 +258,7 @@ def delete_link( area_from: str, area_to: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Removing link {area_from}%{area_to} in study {uuid}", extra={"user": current_user.id}, @@ -275,12 +273,12 @@ def delete_link( "/studies/{uuid}/layers", tags=[APITag.study_data], summary="Get all layers info", - response_model=List[LayerInfoDTO], + response_model=t.List[LayerInfoDTO], ) def get_layers( uuid: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> List[LayerInfoDTO]: + ) -> t.List[LayerInfoDTO]: logger.info( f"Fetching layer list for study {uuid}", extra={"user": current_user.id}, @@ -317,7 +315,7 @@ def update_layer( uuid: str, layer_id: str, name: str = "", - areas: Optional[List[str]] = None, + areas: t.Optional[t.List[str]] = None, current_user: JWTUser = Depends(auth.get_current_user), ) -> None: logger.info( @@ -355,12 +353,12 @@ def remove_layer( "/studies/{uuid}/districts", tags=[APITag.study_data], summary="Get the list of districts defined in this study", - response_model=List[DistrictInfoDTO], + response_model=t.List[DistrictInfoDTO], ) def get_districts( uuid: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> List[DistrictInfoDTO]: + ) -> t.List[DistrictInfoDTO]: logger.info( f"Fetching districts list for study {uuid}", extra={"user": current_user.id}, @@ -456,7 +454,7 @@ def set_hydro_form_values( area_id: str, data: ManagementOptionsFormFields, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( msg=f"Updating Hydro management config for area {area_id} of study {uuid}", extra={"user": current_user.id}, @@ -516,9 +514,9 @@ def update_inflow_structure( def edit_matrix( uuid: str, path: str, - matrix_edit_instructions: List[MatrixEditInstruction] = Body(...), + matrix_edit_instructions: t.List[MatrixEditInstruction] = Body(...), current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: # NOTE: This Markdown documentation is reflected in the Swagger API """ Edit a matrix in a study based on the provided edit instructions. @@ -575,13 +573,13 @@ def set_thematic_trimming( path="/studies/{uuid}/config/playlist/form", tags=[APITag.study_data], summary="Get MC Scenario playlist data for table form", - response_model=Dict[int, PlaylistColumns], + response_model=t.Dict[int, PlaylistColumns], response_model_exclude_none=True, ) def get_playlist( uuid: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Dict[int, PlaylistColumns]: + ) -> t.Dict[int, PlaylistColumns]: logger.info( f"Getting MC Scenario playlist data for study {uuid}", extra={"user": current_user.id}, @@ -598,7 +596,7 @@ def get_playlist( ) def set_playlist( uuid: str, - data: Dict[int, PlaylistColumns], + data: t.Dict[int, PlaylistColumns], current_user: JWTUser = Depends(auth.get_current_user), ) -> None: logger.info( @@ -613,12 +611,12 @@ def set_playlist( "/studies/{uuid}/config/playlist", tags=[APITag.study_data], summary="Get playlist config", - response_model=Dict[int, float], + response_model=t.Dict[int, float], ) def get_playlist_config( uuid: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Fetching playlist config for study {uuid}", extra={"user": current_user.id}, @@ -636,10 +634,10 @@ def set_playlist_config( uuid: str, active: bool = True, reverse: bool = False, - playlist: Optional[List[int]] = Body(default=None), - weights: Optional[Dict[int, int]] = Body(default=None), + playlist: t.Optional[t.List[int]] = Body(default=None), + weights: t.Optional[t.Dict[int, int]] = Body(default=None), current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Updating playlist config for study {uuid}", extra={"user": current_user.id}, @@ -652,12 +650,12 @@ def set_playlist_config( path="/studies/{uuid}/config/scenariobuilder", tags=[APITag.study_data], summary="Get MC Scenario builder config", - response_model=Dict[str, Any], + response_model=t.Dict[str, t.Any], ) def get_scenario_builder_config( uuid: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Dict[str, Any]: + ) -> t.Dict[str, t.Any]: logger.info( f"Getting MC Scenario builder config for study {uuid}", extra={"user": current_user.id}, @@ -674,7 +672,7 @@ def get_scenario_builder_config( ) def update_scenario_builder_config( uuid: str, - data: Dict[str, Any], + data: t.Dict[str, t.Any], current_user: JWTUser = Depends(auth.get_current_user), ) -> None: logger.info( @@ -842,47 +840,95 @@ def set_timeseries_form_values( study_service.ts_config_manager.set_field_values(study, field_values) @bp.get( - path="/studies/{uuid}/tablemode", + path="/table-schema/{table_type}", + tags=[APITag.study_data], + summary="Get table schema", + ) + def get_table_schema( + table_type: TableModeType, + current_user: JWTUser = Depends(auth.get_current_user), + ) -> JSON: + """ + Get the properties of the table columns. + + Args: + - `table_type`: The type of table to get the schema for. + """ + logger.info("Getting table schema", extra={"user": current_user.id}) + model_schema = study_service.table_mode_manager.get_table_schema(table_type) + return model_schema + + @bp.get( + path="/studies/{uuid}/table-mode/{table_type}", tags=[APITag.study_data], summary="Get table data for table form", - # `Any` because `Union[AreaColumns, LinkColumns]` not working - response_model=Dict[str, Dict[str, Any]], - response_model_exclude_none=True, ) def get_table_mode( uuid: str, - table_type: TableTemplateType, - columns: str, + table_type: TableModeType, + columns: str = Query("", description="A comma-separated list of columns to include in the table data"), current_user: JWTUser = Depends(auth.get_current_user), - ) -> Dict[str, ColumnsModelTypes]: + ) -> TableDataDTO: + """ + Get the table data for the given study and table type. + + Args: + - uuid: The UUID of the study. + - table_type: The type of table to get the data for. + """ logger.info( - f"Getting template table data for study {uuid}", + f"Getting table data for study {uuid}", extra={"user": current_user.id}, ) params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.READ, params) - - return study_service.table_mode_manager.get_table_data(study, table_type, columns.split(",")) + column_list = columns.split(",") if columns else [] + table_data = study_service.table_mode_manager.get_table_data(study, table_type, column_list) + return table_data @bp.put( - path="/studies/{uuid}/tablemode", + path="/studies/{uuid}/table-mode/{table_type}", tags=[APITag.study_data], - summary="Set table data with values from table form", + summary="Update table data with values from table form", ) - def set_table_mode( + def update_table_mode( uuid: str, - table_type: TableTemplateType, - data: Dict[str, ColumnsModelTypes], + table_type: TableModeType, + data: TableDataDTO = Body( + ..., + example={ + "de / nuclear_cl1": { + "enabled": True, + "group": "Nuclear", + "unitCount": 17, + "nominalCapacity": 123, + }, + "de / gas_cl1": { + "enabled": True, + "group": "Gas", + "unitCount": 15, + "nominalCapacity": 456, + }, + }, + ), current_user: JWTUser = Depends(auth.get_current_user), - ) -> None: + ) -> TableDataDTO: + """ + Update the table data for the given study and table type. + + Args: + - uuid: The UUID of the study. + - table_type: The type of table to update. + - data: The table data to update. + """ logger.info( f"Updating table data for study {uuid}", extra={"user": current_user.id}, ) params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) - - study_service.table_mode_manager.set_table_data(study, table_type, data) + table_data = study_service.table_mode_manager.update_table_data(study, table_type, data) + return table_data @bp.post( "/studies/_update_version", @@ -891,7 +937,7 @@ def set_table_mode( ) def update_version( current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: params = RequestParameters(user=current_user) study_service.check_and_update_all_study_versions_in_database(params) @@ -899,15 +945,15 @@ def update_version( "/studies/{uuid}/bindingconstraints", tags=[APITag.study_data], summary="Get binding constraint list", - response_model=List[ConstraintOutput], + response_model=t.List[ConstraintOutput], ) def get_binding_constraint_list( uuid: str, - enabled: Optional[bool] = Query(None, description="Filter results based on enabled status"), - operator: Optional[BindingConstraintOperator] = Query(None, description="Filter results based on operator"), + enabled: t.Optional[bool] = Query(None, description="Filter results based on enabled status"), + operator: t.Optional[BindingConstraintOperator] = Query(None, description="Filter results based on operator"), comments: str = Query("", description="Filter results based on comments (word match)"), group: str = Query("", description="filter binding constraints based on group name (exact match)"), - time_step: Optional[BindingConstraintFrequency] = Query( + time_step: t.Optional[BindingConstraintFrequency] = Query( None, description="Filter results based on time step", alias="timeStep", @@ -933,7 +979,7 @@ def get_binding_constraint_list( alias="clusterId", ), current_user: JWTUser = Depends(auth.get_current_user), - ) -> Sequence[ConstraintOutput]: + ) -> t.Sequence[ConstraintOutput]: logger.info( f"Fetching binding constraint list for study {uuid}", extra={"user": current_user.id}, @@ -980,7 +1026,7 @@ def get_binding_constraint( def update_binding_constraint( uuid: str, binding_constraint_id: str, - data: Union[BCKeyValueType, ConstraintInput], + data: ConstraintInput, current_user: JWTUser = Depends(auth.get_current_user), ) -> ConstraintOutput: logger.info( @@ -989,18 +1035,6 @@ def update_binding_constraint( ) params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) - - if isinstance(data, dict): - warnings.warn( - "Using key / value format for binding constraint data is deprecated." - " Please use the ConstraintInput format instead.", - DeprecationWarning, - ) - _obj = {data["key"]: data["value"]} - if "filterByYear" in _obj: - _obj["filterYearByYear"] = _obj.pop("filterByYear") - data = ConstraintInput(**_obj) - return study_service.binding_constraint_manager.update_binding_constraint(study, binding_constraint_id, data) @bp.get( @@ -1011,7 +1045,7 @@ def update_binding_constraint( def get_grouped_constraints( uuid: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Mapping[str, Sequence[ConstraintOutput]]: + ) -> t.Mapping[str, t.Sequence[ConstraintOutput]]: """ Get the list of binding constraint groups for the study. @@ -1071,7 +1105,7 @@ def get_constraints_by_group( uuid: str, group: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Sequence[ConstraintOutput]: + ) -> t.Sequence[ConstraintOutput]: """ Get the binding constraint group for the study. @@ -1169,14 +1203,49 @@ def add_constraint_term( binding_constraint_id: str, term: ConstraintTerm, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> None: + """ + Append a new term to a given binding constraint + + Args: + - `uuid`: The UUID of the study. + - `binding_constraint_id`: The binding constraint ID. + - `term`: The term to create. + """ logger.info( f"Add constraint term {term.id} to {binding_constraint_id} for study {uuid}", extra={"user": current_user.id}, ) params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) - return study_service.binding_constraint_manager.create_constraint_term(study, binding_constraint_id, term) + return study_service.binding_constraint_manager.create_constraint_terms(study, binding_constraint_id, [term]) + + @bp.post( + "/studies/{uuid}/bindingconstraints/{binding_constraint_id}/terms", + tags=[APITag.study_data], + summary="Create terms for a given binding constraint", + ) + def add_constraint_terms( + uuid: str, + binding_constraint_id: str, + terms: t.Sequence[ConstraintTerm], + current_user: JWTUser = Depends(auth.get_current_user), + ) -> None: + """ + Append new terms to a given binding constraint + + Args: + - `uuid`: The UUID of the study. + - `binding_constraint_id`: The binding constraint ID. + - `terms`: The list of terms to create. + """ + logger.info( + f"Adding constraint terms to {binding_constraint_id} for study {uuid}", + extra={"user": current_user.id}, + ) + params = RequestParameters(user=current_user) + study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) + return study_service.binding_constraint_manager.create_constraint_terms(study, binding_constraint_id, terms) @bp.put( "/studies/{uuid}/bindingconstraints/{binding_constraint_id}/term", @@ -1188,14 +1257,49 @@ def update_constraint_term( binding_constraint_id: str, term: ConstraintTerm, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> None: + """ + Update a term for a given binding constraint + + Args: + - `uuid`: The UUID of the study. + - `binding_constraint_id`: The binding constraint ID. + - `term`: The term to update. + """ logger.info( f"Update constraint term {term.id} from {binding_constraint_id} for study {uuid}", extra={"user": current_user.id}, ) params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) - return study_service.binding_constraint_manager.update_constraint_term(study, binding_constraint_id, term) + return study_service.binding_constraint_manager.update_constraint_terms(study, binding_constraint_id, [term]) + + @bp.put( + "/studies/{uuid}/bindingconstraints/{binding_constraint_id}/terms", + tags=[APITag.study_data], + summary="Update terms for a given binding constraint", + ) + def update_constraint_terms( + uuid: str, + binding_constraint_id: str, + terms: t.Sequence[ConstraintTerm], + current_user: JWTUser = Depends(auth.get_current_user), + ) -> None: + """ + Update several terms for a given binding constraint + + Args: + - `uuid`: The UUID of the study. + - `binding_constraint_id`: The binding constraint ID. + - `terms`: The list of terms to update. + """ + logger.info( + f"Updating constraint terms from {binding_constraint_id} for study {uuid}", + extra={"user": current_user.id}, + ) + params = RequestParameters(user=current_user) + study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) + return study_service.binding_constraint_manager.update_constraint_terms(study, binding_constraint_id, terms) @bp.delete( "/studies/{uuid}/bindingconstraints/{binding_constraint_id}/term/{term_id}", @@ -1239,8 +1343,8 @@ def get_allocation_matrix( """ params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.READ, params) - all_areas = cast( - List[AreaInfoDTO], # because `ui=False` + all_areas = t.cast( + t.List[AreaInfoDTO], # because `ui=False` study_service.get_all_areas(uuid, area_type=AreaType.AREA, ui=False, params=params), ) return study_service.allocation_manager.get_allocation_matrix(study, all_areas) @@ -1267,8 +1371,8 @@ def get_allocation_form_fields( """ params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.READ, params) - all_areas = cast( - List[AreaInfoDTO], # because `ui=False` + all_areas = t.cast( + t.List[AreaInfoDTO], # because `ui=False` study_service.get_all_areas(uuid, area_type=AreaType.AREA, ui=False, params=params), ) return study_service.allocation_manager.get_allocation_form_fields(all_areas, study, area_id) @@ -1305,8 +1409,8 @@ def set_allocation_form_fields( """ params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) - all_areas = cast( - List[AreaInfoDTO], # because `ui=False` + all_areas = t.cast( + t.List[AreaInfoDTO], # because `ui=False` study_service.get_all_areas(uuid, area_type=AreaType.AREA, ui=False, params=params), ) return study_service.allocation_manager.set_allocation_form_fields(all_areas, study, area_id, data) @@ -1319,7 +1423,7 @@ def set_allocation_form_fields( ) def get_correlation_matrix( uuid: str, - columns: Optional[str] = Query( + columns: t.Optional[str] = Query( None, examples={ "all areas": { @@ -1355,8 +1459,8 @@ def get_correlation_matrix( """ params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.READ, params) - all_areas = cast( - List[AreaInfoDTO], # because `ui=False` + all_areas = t.cast( + t.List[AreaInfoDTO], # because `ui=False` study_service.get_all_areas(uuid, area_type=AreaType.AREA, ui=False, params=params), ) manager = CorrelationManager(study_service.storage_service) @@ -1403,8 +1507,8 @@ def set_correlation_matrix( """ params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) - all_areas = cast( - List[AreaInfoDTO], # because `ui=False` + all_areas = t.cast( + t.List[AreaInfoDTO], # because `ui=False` study_service.get_all_areas(uuid, area_type=AreaType.AREA, ui=False, params=params), ) manager = CorrelationManager(study_service.storage_service) @@ -1432,8 +1536,8 @@ def get_correlation_form_fields( """ params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.READ, params) - all_areas = cast( - List[AreaInfoDTO], # because `ui=False` + all_areas = t.cast( + t.List[AreaInfoDTO], # because `ui=False` study_service.get_all_areas(uuid, area_type=AreaType.AREA, ui=False, params=params), ) manager = CorrelationManager(study_service.storage_service) @@ -1471,8 +1575,8 @@ def set_correlation_form_fields( """ params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) - all_areas = cast( - List[AreaInfoDTO], # because `ui=False` + all_areas = t.cast( + t.List[AreaInfoDTO], # because `ui=False` study_service.get_all_areas(uuid, area_type=AreaType.AREA, ui=False, params=params), ) manager = CorrelationManager(study_service.storage_service) @@ -1526,7 +1630,7 @@ def set_advanced_parameters( def generate_timeseries( uuid: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Any: + ) -> t.Any: logger.info( f"Generating timeseries for study {uuid}", extra={"user": current_user.id}, @@ -1588,13 +1692,13 @@ def set_properties_form_values( path="/studies/{uuid}/areas/{area_id}/clusters/renewable", tags=[APITag.study_data], summary="Get all renewable clusters", - response_model=Sequence[RenewableClusterOutput], + response_model=t.Sequence[RenewableClusterOutput], ) def get_renewable_clusters( uuid: str, area_id: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Sequence[RenewableClusterOutput]: + ) -> t.Sequence[RenewableClusterOutput]: logger.info( "Getting renewable clusters for study %s and area %s", uuid, @@ -1720,7 +1824,7 @@ def redirect_update_renewable_cluster( def delete_renewable_clusters( uuid: str, area_id: str, - cluster_ids: Sequence[str], + cluster_ids: t.Sequence[str], current_user: JWTUser = Depends(auth.get_current_user), ) -> None: """ @@ -1743,13 +1847,13 @@ def delete_renewable_clusters( path="/studies/{uuid}/areas/{area_id}/clusters/thermal", tags=[APITag.study_data], summary="Get thermal clusters for a given area", - response_model=Sequence[ThermalClusterOutput], + response_model=t.Sequence[ThermalClusterOutput], ) def get_thermal_clusters( uuid: str, area_id: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Sequence[ThermalClusterOutput]: + ) -> t.Sequence[ThermalClusterOutput]: """ Retrieve the list of thermal clusters for a specified area. @@ -1894,6 +1998,36 @@ def redirect_update_thermal_cluster( # We cannot perform redirection, because we have a PUT, where a PATCH is required. return update_thermal_cluster(uuid, area_id, cluster_id, cluster_data, current_user=current_user) + @bp.get( + path="/studies/{uuid}/areas/{area_id}/clusters/thermal/{cluster_id}/validate", + tags=[APITag.study_data], + summary="Validates the thermal cluster series", + ) + def validate_cluster_series( + uuid: str, + area_id: str, + cluster_id: str, + current_user: JWTUser = Depends(auth.get_current_user), + ) -> bool: + """ + Validate the consistency of all time series for the given thermal cluster. + + Args: + - `uuid`: The UUID of the study. + - `area_id`: the area ID. + - `cluster_id`: the ID of the thermal cluster. + + Permissions: + - User must have READ permission on the study. + """ + logger.info( + f"Validating thermal series values for study {uuid} and cluster {cluster_id}", + extra={"user": current_user.id}, + ) + params = RequestParameters(user=current_user) + study = study_service.check_study_access(uuid, StudyPermissionType.READ, params) + return study_service.thermal_manager.validate_series(study, area_id, cluster_id) + @bp.delete( path="/studies/{uuid}/areas/{area_id}/clusters/thermal", tags=[APITag.study_data], @@ -1904,7 +2038,7 @@ def redirect_update_thermal_cluster( def delete_thermal_clusters( uuid: str, area_id: str, - cluster_ids: Sequence[str], + cluster_ids: t.Sequence[str], current_user: JWTUser = Depends(auth.get_current_user), ) -> None: """ @@ -1970,13 +2104,13 @@ def get_st_storage( path="/studies/{uuid}/areas/{area_id}/storages", tags=[APITag.study_data], summary="Get the list of short-term storage properties", - response_model=Sequence[STStorageOutput], + response_model=t.Sequence[STStorageOutput], ) def get_st_storages( uuid: str, area_id: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> Sequence[STStorageOutput]: + ) -> t.Sequence[STStorageOutput]: """ Retrieve the short-term storages by given uuid and area ID of a study. @@ -2220,7 +2354,7 @@ def update_st_storage( def delete_st_storages( uuid: str, area_id: str, - storage_ids: Sequence[str], + storage_ids: t.Sequence[str], current_user: JWTUser = Depends(auth.get_current_user), ) -> None: """ @@ -2254,7 +2388,7 @@ def duplicate_cluster( source_cluster_id: str, new_cluster_name: str = Query(..., alias="newName", title="New Cluster Name"), current_user: JWTUser = Depends(auth.get_current_user), - ) -> Union[STStorageOutput, ThermalClusterOutput, RenewableClusterOutput]: + ) -> t.Union[STStorageOutput, ThermalClusterOutput, RenewableClusterOutput]: logger.info( f"Duplicates {cluster_type.value} {source_cluster_id} of {area_id} for study {uuid}", extra={"user": current_user.id}, @@ -2262,7 +2396,7 @@ def duplicate_cluster( params = RequestParameters(user=current_user) study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) - manager: Union[STStorageManager, RenewableManager, ThermalManager] + manager: t.Union[STStorageManager, RenewableManager, ThermalManager] if cluster_type == ClusterType.ST_STORAGES: manager = STStorageManager(study_service.storage_service) elif cluster_type == ClusterType.RENEWABLES: diff --git a/antarest/tools/lib.py b/antarest/tools/lib.py index c3c5db9dff..60e3215f5b 100644 --- a/antarest/tools/lib.py +++ b/antarest/tools/lib.py @@ -94,8 +94,6 @@ def apply_commands( res = self.session.post(self.build_url("/v1/matrix"), json=matrix_data) res.raise_for_status() matrix_id = res.json() - # file_name = matrix_file.with_suffix("").name - # assert matrix_id == file_name, f"{matrix_id} != {file_name}" matrix_dataset.append(matrix_id) # TODO could create a dataset from theses matrices using "variant_" as name @@ -117,10 +115,14 @@ def apply_commands( res.raise_for_status() stopwatch.log_elapsed(lambda x: logger.info(f"Generation done in {x}s")) - task_result = TaskDTO.parse_obj(res.json()) - assert task_result.result is not None + task_result = TaskDTO(**res.json()) - return GenerationResultInfoDTO.parse_raw(task_result.result.return_value or "") + if task_result.result is None or task_result.result.return_value is None: # pragma: no cover + # This should not happen, but if it does, we return a failed result + return GenerationResultInfoDTO(success=False, details=[]) + + info = json.loads(task_result.result.return_value) + return GenerationResultInfoDTO(**info) def build_url(self, url: str) -> str: return url if self.host is None else f"{self.host.strip('/')}/{url.strip('/')}" @@ -164,15 +166,15 @@ def apply_commands(self, commands: List[CommandDTO], matrices_dir: Path) -> Gene ) command_objs: List[List[ICommand]] = [] - logger.info("Parsing command objects") + logger.info("Parsing command objects...") command_objs.extend(command_factory.to_command(command_block) for command_block in commands) stopwatch.log_elapsed(lambda x: logger.info(f"Command objects parsed in {x}s")) result = generator.generate(command_objs, self.output_path, delete_on_failure=False) if result.success: # sourcery skip: extract-method - logger.info("Building new study tree") + logger.info("Building new study tree...") study = study_factory.create_from_fs(self.output_path, study_id="", use_cache=False) - logger.info("Denormalizing study") + logger.info("Denormalize study...") stopwatch.reset_current() study.tree.denormalize() stopwatch.log_elapsed(lambda x: logger.info(f"Denormalized done in {x}s")) @@ -323,7 +325,7 @@ def parse_commands(file: Path) -> List[CommandDTO]: json_commands = json.load(fh) stopwatch.log_elapsed(lambda x: logger.info(f"Script file read in {x}s")) - commands: List[CommandDTO] = [CommandDTO.parse_obj(command) for command in json_commands] + commands: List[CommandDTO] = [CommandDTO(**command) for command in json_commands] stopwatch.log_elapsed(lambda x: logger.info(f"Script commands parsed in {x}s")) return commands diff --git a/antarest/utils.py b/antarest/utils.py index 39ea094168..1f61717ada 100644 --- a/antarest/utils.py +++ b/antarest/utils.py @@ -101,9 +101,7 @@ def init_db_engine( return engine -def create_event_bus( - application: Optional[FastAPI], config: Config -) -> Tuple[IEventBus, Optional[redis.Redis]]: # type: ignore +def create_event_bus(application: Optional[FastAPI], config: Config) -> Tuple[IEventBus, Optional[redis.Redis]]: # type: ignore redis_client = new_redis_instance(config.redis) if config.redis is not None else None return ( build_eventbus(application, config, True, redis_client), diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index fc42446272..8b4933a3eb 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,66 @@ Antares Web Changelog ===================== +v2.17 (2024-05-15) +------------------ + +Support for evolutions relating to studies in versions 8.7: +- Scenarized RHS for binding constraints, +- Thermal cluster new properties (cost generation mode, efficiency, variable OM cost) + +Support for evolutions relating to studies in versions 8.8: +- Short-term storage¶: add `enabled` property +- Experimental "MILP" mode (using launcher options) + +### Features + +* **bc:** add endpoint for multiple terms edition [`#2020`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2020) +* **table-mode:** add missing properties for v8.6 and 8.7 [`#1643`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1643) +* **ui-table-mode:** translate table types in add/edit modal + + +### Bug Fixes + +* **bc:** handle undefined v8.3 fields [`#2026`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2026) +* **table-mode:** hide `adequacy_patch_mode` column from table-mode before v8.3 [`#2022`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2022) +* **ui-common:** allow only import of TSV file in `MatrixInput` [`#2027`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2027) +* **ui-settings:** prevent false duplicates on group form updates [`#1998`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1998) +* **ui-table-mode:** reset 'column' field when 'type' field change in create/update modal +* **ui-table-mode:** unable to edit tables with old types +* **ui-table-mode:** add missing "ST Storage" in Table Mode template [`#2016`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2016) +* **download**: improve performance of Excel file download + + +v2.16.8 (2024-04-19) +-------------------- + +### Features + +* **clusters:** add new endpoint for clusters duplication [`#1972`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1972) +* **clusters (ui):** implement new duplication endpoint and optimistic update [`#1984`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1984) +* **configuration:** turn Thematic Trimming variable names in upper case +* **configuration (ui):** replace underscore with space in Thematic Trimming variable names [`#2010`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2010) +* **ui:** enhance and refactor validation across UI components [`#1956`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1956) + +### Bug Fixes + +* **clusters (ui):** totals are updated after a duplication and a deletion [`#1984`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1984) +* **clusters (ui):** issue with selecting and deleting rows [`#1984`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1984) +* **st-storages (ui):** correction of incorrect wording between "withdrawal" and "injection" [`#1977`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1977) +* **st-storages (ui):** change matrix titles [`#1994`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1994) +* **st-storages:** use command when updating matrices [`#1971`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1971) +* **variants:** avoid recursive error when creating big variant tree [`#1967`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1967) +* **outputs:** build outputs config even when using cache [`#1958`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1958) +* **comments:** use a command to update comments on a variant [`#1959`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1959) +* **outputs (ui):** correct weekly data formatting to support 53-week years [`#1975`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1975) +* **configuration:** add missing variables in Thematic Trimming for studies in version v8.6 or above [`#1992`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1992) +* **configuration:** version availability for "STS Cashflow By Cluster" variable is v8.8 +* **launcher:** upgrade the project dependencies to use Antares-Launcher v1.3.2 + - **ssh:** add retry loop around SSH Exceptions [`#68`](https://github.com/AntaresSimulatorTeam/antares-launcher/pull/68) + - **retriever:** avoid infinite loop when `sbatch` command fails [`#69`](https://github.com/AntaresSimulatorTeam/antares-launcher/pull/69) +* **synthesis:** prevent 500 error during study synthesis parsing [`#2011`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2011) + + v2.16.7 (2024-03-05) -------------------- diff --git a/requirements-test.txt b/requirements-test.txt index 10e44592a1..8e408b2677 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,4 +1,8 @@ -r requirements.txt checksumdir~=1.2.0 pytest~=6.2.5 -pytest-cov~=4.0.0 \ No newline at end of file +pytest-cov~=4.0.0 + +# In this version DataFrame conversion to Excel is done using 'xlsxwriter' library. +# But Excel files reading is done using 'openpyxl' library, during testing only. +openpyxl~=3.1.2 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 3028a004a7..3723ca1313 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,7 +13,6 @@ Jinja2~=3.0.3 jsonref~=0.2 MarkupSafe~=2.0.1 numpy~=1.22.1 -openpyxl~=3.1.2 pandas~=1.4.0 paramiko~=2.12.0 plyer~=2.0.0 @@ -28,5 +27,7 @@ redis~=4.1.2 requests~=2.27.1 SQLAlchemy~=1.4.46 starlette~=0.17.1 +tables typing_extensions~=4.7.1 -uvicorn[standard]~=0.15.0 \ No newline at end of file +uvicorn[standard]~=0.15.0 +xlsxwriter~=3.2.0 diff --git a/resources/empty_study_880.zip b/resources/empty_study_880.zip new file mode 100644 index 0000000000..3667408c59 Binary files /dev/null and b/resources/empty_study_880.zip differ diff --git a/scripts/package_antares_web.sh b/scripts/package_antares_web.sh index 21008c15f8..8b1999cfb9 100755 --- a/scripts/package_antares_web.sh +++ b/scripts/package_antares_web.sh @@ -9,7 +9,7 @@ set -e ANTARES_SOLVER_VERSION="8.8" -ANTARES_SOLVER_FULL_VERSION="8.8.3" +ANTARES_SOLVER_FULL_VERSION="8.8.4" ANTARES_SOLVER_VERSION_INT="880" SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) diff --git a/setup.py b/setup.py index c3ec3c3060..76e6c3becb 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ setup( name="AntaREST", - version="2.16.7", + version="2.17", description="Antares Server", long_description=Path("README.md").read_text(encoding="utf-8"), long_description_content_type="text/markdown", diff --git a/sonar-project.properties b/sonar-project.properties index 972bef9399..56212f62f5 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -6,5 +6,5 @@ sonar.exclusions=antarest/gui.py,antarest/main.py sonar.python.coverage.reportPaths=coverage.xml sonar.python.version=3.8 sonar.javascript.lcov.reportPaths=webapp/coverage/lcov.info -sonar.projectVersion=2.16.7 +sonar.projectVersion=2.17 sonar.coverage.exclusions=antarest/gui.py,antarest/main.py,antarest/singleton_services.py,antarest/worker/archive_worker_service.py,webapp/**/* \ No newline at end of file diff --git a/tests/helpers.py b/tests/helpers.py index a9cfdb9ee8..0736eafd59 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -1,4 +1,5 @@ import time +import uuid from datetime import datetime, timedelta, timezone from functools import wraps from typing import Any, Callable, Dict, List, cast @@ -76,3 +77,26 @@ def auto_retry_assert(predicate: Callable[..., bool], timeout: int = 2, delay: f return time.sleep(delay) raise AssertionError() + + +class AnyUUID: + """Mock object to match any UUID.""" + + def __init__(self, as_string: bool = False): + self.as_string = as_string + + def __eq__(self, other: object) -> bool: + if isinstance(other, AnyUUID): + return True + if isinstance(other, str): + if self.as_string: + try: + uuid.UUID(other) + return True + except ValueError: + return False + return False + return isinstance(other, uuid.UUID) + + def __ne__(self, other: object) -> bool: + return not self.__eq__(other) diff --git a/tests/integration/assets/base_study.zip b/tests/integration/assets/base_study.zip index 8a79496138..3b282beb16 100644 Binary files a/tests/integration/assets/base_study.zip and b/tests/integration/assets/base_study.zip differ diff --git a/tests/integration/assets/variant_study.zip b/tests/integration/assets/variant_study.zip index e19151bb07..4526fc900f 100644 Binary files a/tests/integration/assets/variant_study.zip and b/tests/integration/assets/variant_study.zip differ diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-01.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-01.result.tsv new file mode 100644 index 0000000000..4455dcaf42 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-01.result.tsv @@ -0,0 +1,2689 @@ +area mcYear timeId time OV. COST OP. COST MRG. PRICE CO2 EMIS. BALANCE ROW BAL. PSP MISC. NDG LOAD H. ROR WIND SOLAR NUCLEAR LIGNITE COAL GAS OIL MIX. FUEL MISC. DTG H. STOR H. PUMP H. LEV H. INFL H. OVFL H. VAL H. COST UNSP. ENRG SPIL. ENRG LOLD LOLP AVL DTG DTG MRG MAX MRG NP COST NODU +de 1 1 01/01 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +de 1 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +de 1 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +de 1 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +de 1 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +de 1 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +de 1 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +de 1 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +de 1 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +de 1 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +de 1 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +de 1 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +de 1 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +de 1 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +de 1 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +de 1 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +de 1 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +de 1 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +de 1 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +de 1 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +de 1 21 01/01 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +de 1 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +de 1 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +de 1 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +de 1 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +de 1 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +de 1 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +de 1 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +de 1 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +de 1 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +de 1 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +de 1 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +de 1 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +de 1 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +de 1 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +de 1 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +de 1 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +de 1 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +de 1 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +de 1 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +de 1 41 01/02 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +de 1 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +de 1 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +de 1 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +de 1 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +de 1 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +de 1 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +de 1 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +de 1 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +de 1 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +de 1 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +de 1 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +de 1 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +de 1 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +de 1 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +de 1 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +de 1 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +de 1 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +de 1 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +de 1 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +de 1 61 01/03 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +de 1 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +de 1 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +de 1 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +de 1 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +de 1 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +de 1 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +de 1 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +de 1 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +de 1 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +de 1 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +de 1 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +de 1 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +de 1 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +de 1 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +de 1 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +de 1 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +de 1 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +de 1 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +de 1 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +de 1 81 01/04 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +de 1 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +de 1 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +de 1 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +de 1 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +de 1 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +de 1 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +de 1 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +de 1 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +de 1 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +de 1 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +de 1 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +de 1 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +de 1 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +de 1 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +de 1 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +de 1 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +de 1 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +de 1 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +de 1 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +de 1 101 01/05 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +de 1 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +de 1 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +de 1 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +de 1 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +de 1 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +de 1 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +de 1 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +de 1 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +de 1 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +de 1 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +de 1 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +de 1 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +de 1 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +de 1 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +de 1 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +de 1 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +de 1 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +de 1 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +de 1 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +de 1 121 01/06 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +de 1 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +de 1 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +de 1 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +de 1 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +de 1 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +de 1 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +de 1 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +de 1 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +de 1 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +de 1 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +de 1 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +de 1 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +de 1 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +de 1 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +de 1 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +de 1 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +de 1 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +de 1 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +de 1 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +de 1 141 01/06 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +de 1 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +de 1 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +de 1 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +de 1 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +de 1 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +de 1 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +de 1 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +de 1 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +de 1 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +de 1 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +de 1 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +de 1 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +de 1 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +de 1 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +de 1 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +de 1 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +de 1 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +de 1 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +de 1 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +de 1 161 01/07 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +de 1 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +de 1 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +de 1 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +de 1 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +de 1 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +de 1 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +de 1 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +de 1 169 01/08 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +de 1 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +de 1 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +de 1 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +de 1 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +de 1 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +de 1 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +de 1 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +de 1 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +de 1 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +de 1 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +de 1 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +de 1 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +de 1 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +de 1 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +de 1 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +de 1 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +de 1 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +de 1 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +de 1 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +de 1 189 01/08 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +de 1 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +de 1 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +de 1 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +de 1 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +de 1 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +de 1 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +de 1 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +de 1 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +de 1 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +de 1 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +de 1 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +de 1 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +de 1 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +de 1 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +de 1 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +de 1 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +de 1 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +de 1 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +de 1 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +de 1 209 01/09 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +de 1 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +de 1 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +de 1 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +de 1 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +de 1 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +de 1 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +de 1 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +de 1 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +de 1 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +de 1 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +de 1 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +de 1 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +de 1 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +de 1 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +de 1 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +de 1 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +de 1 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +de 1 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +de 1 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +de 1 229 01/10 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +de 1 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +de 1 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +de 1 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +de 1 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +de 1 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +de 1 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +de 1 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +de 1 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +de 1 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +de 1 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +de 1 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +de 1 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +de 1 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +de 1 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +de 1 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +de 1 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +de 1 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +de 1 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +de 1 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +de 1 249 01/11 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +de 1 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +de 1 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +de 1 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +de 1 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +de 1 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +de 1 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +de 1 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +de 1 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +de 1 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +de 1 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +de 1 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +de 1 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +de 1 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +de 1 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +de 1 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +de 1 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +de 1 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +de 1 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +de 1 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +de 1 269 01/12 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +de 1 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +de 1 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +de 1 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +de 1 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +de 1 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +de 1 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +de 1 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +de 1 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +de 1 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +de 1 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +de 1 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +de 1 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +de 1 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +de 1 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +de 1 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +de 1 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +de 1 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +de 1 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +de 1 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +de 1 289 01/13 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +de 1 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +de 1 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +de 1 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +de 1 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +de 1 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +de 1 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +de 1 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +de 1 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +de 1 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +de 1 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +de 1 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +de 1 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +de 1 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +de 1 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +de 1 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +de 1 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +de 1 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +de 1 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +de 1 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +de 1 309 01/13 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +de 1 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +de 1 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +de 1 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +de 1 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +de 1 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +de 1 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +de 1 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +de 1 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +de 1 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +de 1 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +de 1 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +de 1 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +de 1 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +de 1 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +de 1 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +de 1 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +de 1 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +de 1 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +de 1 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +de 1 329 01/14 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +de 1 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +de 1 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +de 1 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +de 1 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +de 1 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +de 1 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +de 1 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +es 1 1 01/01 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +es 1 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +es 1 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +es 1 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +es 1 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +es 1 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +es 1 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +es 1 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +es 1 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +es 1 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +es 1 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +es 1 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +es 1 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +es 1 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +es 1 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +es 1 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +es 1 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +es 1 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +es 1 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +es 1 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +es 1 21 01/01 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +es 1 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +es 1 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +es 1 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +es 1 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +es 1 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +es 1 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +es 1 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +es 1 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +es 1 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +es 1 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +es 1 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +es 1 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +es 1 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +es 1 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +es 1 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +es 1 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +es 1 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +es 1 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +es 1 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +es 1 41 01/02 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +es 1 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +es 1 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +es 1 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +es 1 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +es 1 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +es 1 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +es 1 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +es 1 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +es 1 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +es 1 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +es 1 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +es 1 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +es 1 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +es 1 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +es 1 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +es 1 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +es 1 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +es 1 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +es 1 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +es 1 61 01/03 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +es 1 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +es 1 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +es 1 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +es 1 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +es 1 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +es 1 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +es 1 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +es 1 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +es 1 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +es 1 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +es 1 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +es 1 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +es 1 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +es 1 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +es 1 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +es 1 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +es 1 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +es 1 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +es 1 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +es 1 81 01/04 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +es 1 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +es 1 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +es 1 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +es 1 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +es 1 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +es 1 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +es 1 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +es 1 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +es 1 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +es 1 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +es 1 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +es 1 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +es 1 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +es 1 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +es 1 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +es 1 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +es 1 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +es 1 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +es 1 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +es 1 101 01/05 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +es 1 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +es 1 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +es 1 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +es 1 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +es 1 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +es 1 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +es 1 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +es 1 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +es 1 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +es 1 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +es 1 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +es 1 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +es 1 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +es 1 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +es 1 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +es 1 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +es 1 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +es 1 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +es 1 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +es 1 121 01/06 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +es 1 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +es 1 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +es 1 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +es 1 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +es 1 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +es 1 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +es 1 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +es 1 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +es 1 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +es 1 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +es 1 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +es 1 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +es 1 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +es 1 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +es 1 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +es 1 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +es 1 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +es 1 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +es 1 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +es 1 141 01/06 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +es 1 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +es 1 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +es 1 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +es 1 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +es 1 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +es 1 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +es 1 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +es 1 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +es 1 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +es 1 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +es 1 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +es 1 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +es 1 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +es 1 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +es 1 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +es 1 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +es 1 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +es 1 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +es 1 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +es 1 161 01/07 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +es 1 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +es 1 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +es 1 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +es 1 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +es 1 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +es 1 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +es 1 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +es 1 169 01/08 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +es 1 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +es 1 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +es 1 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +es 1 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +es 1 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +es 1 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +es 1 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +es 1 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +es 1 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +es 1 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +es 1 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +es 1 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +es 1 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +es 1 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +es 1 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +es 1 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +es 1 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +es 1 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +es 1 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +es 1 189 01/08 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +es 1 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +es 1 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +es 1 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +es 1 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +es 1 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +es 1 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +es 1 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +es 1 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +es 1 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +es 1 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +es 1 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +es 1 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +es 1 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +es 1 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +es 1 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +es 1 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +es 1 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +es 1 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +es 1 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +es 1 209 01/09 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +es 1 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +es 1 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +es 1 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +es 1 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +es 1 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +es 1 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +es 1 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +es 1 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +es 1 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +es 1 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +es 1 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +es 1 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +es 1 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +es 1 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +es 1 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +es 1 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +es 1 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +es 1 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +es 1 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +es 1 229 01/10 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +es 1 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +es 1 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +es 1 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +es 1 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +es 1 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +es 1 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +es 1 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +es 1 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +es 1 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +es 1 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +es 1 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +es 1 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +es 1 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +es 1 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +es 1 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +es 1 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +es 1 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +es 1 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +es 1 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +es 1 249 01/11 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +es 1 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +es 1 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +es 1 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +es 1 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +es 1 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +es 1 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +es 1 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +es 1 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +es 1 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +es 1 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +es 1 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +es 1 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +es 1 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +es 1 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +es 1 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +es 1 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +es 1 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +es 1 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +es 1 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +es 1 269 01/12 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +es 1 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +es 1 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +es 1 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +es 1 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +es 1 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +es 1 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +es 1 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +es 1 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +es 1 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +es 1 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +es 1 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +es 1 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +es 1 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +es 1 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +es 1 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +es 1 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +es 1 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +es 1 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +es 1 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +es 1 289 01/13 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +es 1 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +es 1 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +es 1 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +es 1 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +es 1 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +es 1 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +es 1 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +es 1 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +es 1 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +es 1 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +es 1 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +es 1 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +es 1 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +es 1 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +es 1 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +es 1 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +es 1 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +es 1 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +es 1 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +es 1 309 01/13 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +es 1 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +es 1 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +es 1 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +es 1 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +es 1 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +es 1 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +es 1 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +es 1 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +es 1 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +es 1 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +es 1 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +es 1 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +es 1 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +es 1 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +es 1 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +es 1 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +es 1 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +es 1 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +es 1 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +es 1 329 01/14 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +es 1 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +es 1 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +es 1 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +es 1 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +es 1 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +es 1 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +es 1 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +fr 1 1 01/01 00:00 0.0 0.0 9.99 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +fr 1 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +fr 1 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +fr 1 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +fr 1 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +fr 1 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +fr 1 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +fr 1 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +fr 1 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +fr 1 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +fr 1 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +fr 1 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +fr 1 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +fr 1 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +fr 1 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +fr 1 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +fr 1 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +fr 1 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +fr 1 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +fr 1 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +fr 1 21 01/01 20:00 20000.0 20000.0 19.99 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +fr 1 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +fr 1 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +fr 1 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +fr 1 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +fr 1 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +fr 1 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +fr 1 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +fr 1 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +fr 1 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +fr 1 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +fr 1 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +fr 1 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +fr 1 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +fr 1 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +fr 1 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +fr 1 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +fr 1 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +fr 1 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +fr 1 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +fr 1 41 01/02 16:00 60000.0 60000.0 29.99 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +fr 1 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +fr 1 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +fr 1 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +fr 1 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +fr 1 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +fr 1 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +fr 1 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +fr 1 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +fr 1 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +fr 1 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +fr 1 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +fr 1 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +fr 1 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +fr 1 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +fr 1 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +fr 1 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +fr 1 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +fr 1 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +fr 1 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +fr 1 61 01/03 12:00 120000.0 120000.0 39.99 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +fr 1 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +fr 1 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +fr 1 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +fr 1 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +fr 1 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +fr 1 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +fr 1 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +fr 1 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +fr 1 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +fr 1 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +fr 1 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +fr 1 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +fr 1 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +fr 1 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +fr 1 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +fr 1 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +fr 1 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +fr 1 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +fr 1 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +fr 1 81 01/04 08:00 200000.0 200000.0 49.99 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +fr 1 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +fr 1 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +fr 1 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +fr 1 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +fr 1 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +fr 1 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +fr 1 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +fr 1 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +fr 1 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +fr 1 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +fr 1 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +fr 1 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +fr 1 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +fr 1 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +fr 1 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +fr 1 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +fr 1 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +fr 1 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +fr 1 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +fr 1 101 01/05 04:00 300000.0 300000.0 59.99 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +fr 1 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +fr 1 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +fr 1 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +fr 1 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +fr 1 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +fr 1 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +fr 1 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +fr 1 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +fr 1 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +fr 1 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +fr 1 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +fr 1 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +fr 1 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +fr 1 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +fr 1 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +fr 1 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +fr 1 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +fr 1 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +fr 1 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +fr 1 121 01/06 00:00 420000.0 420000.0 69.99 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +fr 1 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +fr 1 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +fr 1 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +fr 1 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +fr 1 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +fr 1 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +fr 1 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +fr 1 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +fr 1 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +fr 1 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +fr 1 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +fr 1 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +fr 1 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +fr 1 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +fr 1 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +fr 1 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +fr 1 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +fr 1 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +fr 1 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +fr 1 141 01/06 20:00 560000.0 560000.0 79.99 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +fr 1 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +fr 1 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +fr 1 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +fr 1 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +fr 1 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +fr 1 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +fr 1 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +fr 1 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +fr 1 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +fr 1 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +fr 1 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +fr 1 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +fr 1 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +fr 1 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +fr 1 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +fr 1 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +fr 1 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +fr 1 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +fr 1 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +fr 1 161 01/07 16:00 720000.0 720000.0 89.99 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +fr 1 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +fr 1 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +fr 1 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +fr 1 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +fr 1 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +fr 1 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +fr 1 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +fr 1 169 01/08 00:00 0.0 0.0 9.99 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +fr 1 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +fr 1 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +fr 1 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +fr 1 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +fr 1 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +fr 1 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +fr 1 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +fr 1 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +fr 1 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +fr 1 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +fr 1 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +fr 1 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +fr 1 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +fr 1 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +fr 1 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +fr 1 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +fr 1 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +fr 1 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +fr 1 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +fr 1 189 01/08 20:00 20000.0 20000.0 19.99 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +fr 1 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +fr 1 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +fr 1 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +fr 1 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +fr 1 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +fr 1 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +fr 1 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +fr 1 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +fr 1 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +fr 1 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +fr 1 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +fr 1 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +fr 1 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +fr 1 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +fr 1 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +fr 1 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +fr 1 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +fr 1 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +fr 1 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +fr 1 209 01/09 16:00 60000.0 60000.0 29.99 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +fr 1 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +fr 1 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +fr 1 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +fr 1 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +fr 1 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +fr 1 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +fr 1 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +fr 1 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +fr 1 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +fr 1 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +fr 1 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +fr 1 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +fr 1 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +fr 1 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +fr 1 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +fr 1 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +fr 1 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +fr 1 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +fr 1 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +fr 1 229 01/10 12:00 120000.0 120000.0 39.99 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +fr 1 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +fr 1 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +fr 1 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +fr 1 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +fr 1 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +fr 1 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +fr 1 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +fr 1 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +fr 1 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +fr 1 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +fr 1 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +fr 1 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +fr 1 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +fr 1 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +fr 1 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +fr 1 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +fr 1 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +fr 1 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +fr 1 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +fr 1 249 01/11 08:00 200000.0 200000.0 49.99 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +fr 1 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +fr 1 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +fr 1 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +fr 1 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +fr 1 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +fr 1 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +fr 1 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +fr 1 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +fr 1 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +fr 1 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +fr 1 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +fr 1 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +fr 1 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +fr 1 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +fr 1 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +fr 1 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +fr 1 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +fr 1 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +fr 1 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +fr 1 269 01/12 04:00 300000.0 300000.0 59.99 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +fr 1 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +fr 1 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +fr 1 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +fr 1 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +fr 1 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +fr 1 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +fr 1 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +fr 1 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +fr 1 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +fr 1 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +fr 1 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +fr 1 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +fr 1 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +fr 1 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +fr 1 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +fr 1 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +fr 1 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +fr 1 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +fr 1 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +fr 1 289 01/13 00:00 420000.0 420000.0 69.99 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +fr 1 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +fr 1 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +fr 1 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +fr 1 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +fr 1 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +fr 1 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +fr 1 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +fr 1 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +fr 1 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +fr 1 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +fr 1 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +fr 1 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +fr 1 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +fr 1 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +fr 1 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +fr 1 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +fr 1 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +fr 1 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +fr 1 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +fr 1 309 01/13 20:00 560000.0 560000.0 79.99 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +fr 1 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +fr 1 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +fr 1 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +fr 1 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +fr 1 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +fr 1 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +fr 1 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +fr 1 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +fr 1 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +fr 1 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +fr 1 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +fr 1 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +fr 1 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +fr 1 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +fr 1 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +fr 1 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +fr 1 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +fr 1 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +fr 1 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +fr 1 329 01/14 16:00 720000.0 720000.0 89.99 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +fr 1 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +fr 1 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +fr 1 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +fr 1 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +fr 1 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +fr 1 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +fr 1 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +it 1 1 01/01 00:00 0.0 0.0 10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +it 1 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +it 1 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +it 1 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +it 1 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +it 1 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +it 1 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +it 1 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +it 1 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +it 1 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +it 1 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +it 1 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +it 1 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +it 1 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +it 1 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +it 1 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +it 1 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +it 1 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +it 1 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +it 1 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +it 1 21 01/01 20:00 20000.0 20000.0 20.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +it 1 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +it 1 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +it 1 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +it 1 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +it 1 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +it 1 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +it 1 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +it 1 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +it 1 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +it 1 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +it 1 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +it 1 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +it 1 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +it 1 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +it 1 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +it 1 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +it 1 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +it 1 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +it 1 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +it 1 41 01/02 16:00 60000.0 60000.0 30.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +it 1 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +it 1 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +it 1 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +it 1 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +it 1 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +it 1 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +it 1 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +it 1 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +it 1 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +it 1 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +it 1 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +it 1 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +it 1 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +it 1 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +it 1 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +it 1 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +it 1 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +it 1 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +it 1 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +it 1 61 01/03 12:00 120000.0 120000.0 40.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +it 1 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +it 1 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +it 1 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +it 1 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +it 1 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +it 1 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +it 1 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +it 1 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +it 1 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +it 1 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +it 1 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +it 1 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +it 1 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +it 1 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +it 1 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +it 1 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +it 1 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +it 1 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +it 1 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +it 1 81 01/04 08:00 200000.0 200000.0 50.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +it 1 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +it 1 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +it 1 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +it 1 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +it 1 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +it 1 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +it 1 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +it 1 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +it 1 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +it 1 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +it 1 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +it 1 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +it 1 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +it 1 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +it 1 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +it 1 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +it 1 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +it 1 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +it 1 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +it 1 101 01/05 04:00 300000.0 300000.0 60.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +it 1 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +it 1 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +it 1 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +it 1 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +it 1 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +it 1 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +it 1 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +it 1 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +it 1 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +it 1 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +it 1 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +it 1 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +it 1 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +it 1 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +it 1 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +it 1 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +it 1 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +it 1 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +it 1 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +it 1 121 01/06 00:00 420000.0 420000.0 70.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +it 1 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +it 1 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +it 1 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +it 1 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +it 1 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +it 1 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +it 1 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +it 1 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +it 1 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +it 1 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +it 1 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +it 1 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +it 1 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +it 1 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +it 1 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +it 1 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +it 1 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +it 1 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +it 1 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +it 1 141 01/06 20:00 560000.0 560000.0 80.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +it 1 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +it 1 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +it 1 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +it 1 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +it 1 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +it 1 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +it 1 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +it 1 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +it 1 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +it 1 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +it 1 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +it 1 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +it 1 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +it 1 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +it 1 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +it 1 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +it 1 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +it 1 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +it 1 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +it 1 161 01/07 16:00 720000.0 720000.0 90.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +it 1 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +it 1 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +it 1 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +it 1 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +it 1 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +it 1 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +it 1 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +it 1 169 01/08 00:00 0.0 0.0 10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +it 1 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +it 1 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +it 1 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +it 1 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +it 1 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +it 1 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +it 1 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +it 1 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +it 1 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +it 1 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +it 1 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +it 1 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +it 1 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +it 1 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +it 1 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +it 1 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +it 1 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +it 1 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +it 1 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +it 1 189 01/08 20:00 20000.0 20000.0 20.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +it 1 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +it 1 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +it 1 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +it 1 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +it 1 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +it 1 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +it 1 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +it 1 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +it 1 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +it 1 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +it 1 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +it 1 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +it 1 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +it 1 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +it 1 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +it 1 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +it 1 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +it 1 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +it 1 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +it 1 209 01/09 16:00 60000.0 60000.0 30.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +it 1 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +it 1 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +it 1 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +it 1 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +it 1 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +it 1 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +it 1 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +it 1 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +it 1 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +it 1 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +it 1 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +it 1 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +it 1 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +it 1 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +it 1 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +it 1 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +it 1 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +it 1 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +it 1 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +it 1 229 01/10 12:00 120000.0 120000.0 40.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +it 1 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +it 1 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +it 1 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +it 1 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +it 1 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +it 1 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +it 1 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +it 1 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +it 1 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +it 1 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +it 1 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +it 1 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +it 1 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +it 1 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +it 1 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +it 1 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +it 1 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +it 1 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +it 1 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +it 1 249 01/11 08:00 200000.0 200000.0 50.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +it 1 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +it 1 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +it 1 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +it 1 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +it 1 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +it 1 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +it 1 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +it 1 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +it 1 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +it 1 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +it 1 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +it 1 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +it 1 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +it 1 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +it 1 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +it 1 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +it 1 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +it 1 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +it 1 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +it 1 269 01/12 04:00 300000.0 300000.0 60.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +it 1 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +it 1 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +it 1 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +it 1 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +it 1 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +it 1 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +it 1 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +it 1 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +it 1 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +it 1 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +it 1 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +it 1 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +it 1 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +it 1 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +it 1 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +it 1 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +it 1 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +it 1 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +it 1 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +it 1 289 01/13 00:00 420000.0 420000.0 70.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +it 1 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +it 1 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +it 1 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +it 1 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +it 1 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +it 1 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +it 1 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +it 1 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +it 1 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +it 1 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +it 1 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +it 1 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +it 1 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +it 1 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +it 1 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +it 1 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +it 1 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +it 1 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +it 1 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +it 1 309 01/13 20:00 560000.0 560000.0 80.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +it 1 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +it 1 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +it 1 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +it 1 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +it 1 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +it 1 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +it 1 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +it 1 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +it 1 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +it 1 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +it 1 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +it 1 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +it 1 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +it 1 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +it 1 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +it 1 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +it 1 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +it 1 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +it 1 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +it 1 329 01/14 16:00 720000.0 720000.0 90.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +it 1 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +it 1 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +it 1 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +it 1 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +it 1 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +it 1 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +it 1 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +de 2 1 01/01 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +de 2 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +de 2 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +de 2 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +de 2 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +de 2 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +de 2 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +de 2 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +de 2 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +de 2 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +de 2 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +de 2 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +de 2 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +de 2 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +de 2 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +de 2 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +de 2 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +de 2 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +de 2 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +de 2 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +de 2 21 01/01 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +de 2 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +de 2 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +de 2 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +de 2 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +de 2 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +de 2 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +de 2 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +de 2 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +de 2 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +de 2 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +de 2 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +de 2 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +de 2 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +de 2 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +de 2 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +de 2 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +de 2 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +de 2 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +de 2 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +de 2 41 01/02 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +de 2 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +de 2 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +de 2 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +de 2 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +de 2 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +de 2 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +de 2 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +de 2 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +de 2 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +de 2 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +de 2 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +de 2 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +de 2 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +de 2 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +de 2 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +de 2 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +de 2 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +de 2 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +de 2 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +de 2 61 01/03 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +de 2 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +de 2 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +de 2 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +de 2 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +de 2 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +de 2 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +de 2 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +de 2 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +de 2 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +de 2 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +de 2 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +de 2 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +de 2 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +de 2 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +de 2 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +de 2 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +de 2 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +de 2 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +de 2 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +de 2 81 01/04 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +de 2 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +de 2 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +de 2 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +de 2 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +de 2 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +de 2 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +de 2 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +de 2 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +de 2 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +de 2 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +de 2 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +de 2 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +de 2 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +de 2 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +de 2 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +de 2 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +de 2 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +de 2 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +de 2 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +de 2 101 01/05 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +de 2 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +de 2 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +de 2 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +de 2 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +de 2 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +de 2 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +de 2 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +de 2 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +de 2 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +de 2 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +de 2 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +de 2 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +de 2 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +de 2 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +de 2 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +de 2 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +de 2 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +de 2 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +de 2 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +de 2 121 01/06 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +de 2 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +de 2 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +de 2 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +de 2 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +de 2 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +de 2 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +de 2 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +de 2 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +de 2 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +de 2 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +de 2 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +de 2 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +de 2 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +de 2 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +de 2 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +de 2 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +de 2 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +de 2 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +de 2 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +de 2 141 01/06 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +de 2 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +de 2 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +de 2 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +de 2 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +de 2 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +de 2 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +de 2 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +de 2 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +de 2 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +de 2 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +de 2 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +de 2 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +de 2 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +de 2 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +de 2 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +de 2 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +de 2 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +de 2 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +de 2 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +de 2 161 01/07 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +de 2 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +de 2 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +de 2 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +de 2 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +de 2 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +de 2 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +de 2 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +de 2 169 01/08 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +de 2 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +de 2 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +de 2 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +de 2 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +de 2 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +de 2 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +de 2 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +de 2 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +de 2 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +de 2 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +de 2 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +de 2 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +de 2 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +de 2 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +de 2 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +de 2 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +de 2 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +de 2 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +de 2 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +de 2 189 01/08 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +de 2 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +de 2 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +de 2 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +de 2 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +de 2 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +de 2 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +de 2 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +de 2 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +de 2 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +de 2 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +de 2 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +de 2 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +de 2 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +de 2 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +de 2 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +de 2 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +de 2 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +de 2 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +de 2 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +de 2 209 01/09 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +de 2 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +de 2 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +de 2 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +de 2 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +de 2 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +de 2 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +de 2 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +de 2 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +de 2 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +de 2 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +de 2 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +de 2 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +de 2 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +de 2 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +de 2 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +de 2 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +de 2 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +de 2 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +de 2 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +de 2 229 01/10 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +de 2 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +de 2 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +de 2 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +de 2 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +de 2 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +de 2 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +de 2 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +de 2 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +de 2 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +de 2 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +de 2 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +de 2 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +de 2 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +de 2 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +de 2 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +de 2 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +de 2 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +de 2 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +de 2 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +de 2 249 01/11 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +de 2 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +de 2 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +de 2 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +de 2 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +de 2 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +de 2 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +de 2 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +de 2 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +de 2 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +de 2 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +de 2 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +de 2 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +de 2 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +de 2 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +de 2 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +de 2 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +de 2 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +de 2 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +de 2 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +de 2 269 01/12 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +de 2 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +de 2 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +de 2 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +de 2 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +de 2 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +de 2 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +de 2 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +de 2 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +de 2 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +de 2 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +de 2 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +de 2 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +de 2 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +de 2 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +de 2 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +de 2 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +de 2 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +de 2 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +de 2 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +de 2 289 01/13 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +de 2 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +de 2 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +de 2 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +de 2 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +de 2 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +de 2 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +de 2 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +de 2 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +de 2 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +de 2 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +de 2 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +de 2 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +de 2 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +de 2 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +de 2 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +de 2 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +de 2 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +de 2 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +de 2 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +de 2 309 01/13 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +de 2 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +de 2 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +de 2 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +de 2 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +de 2 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +de 2 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +de 2 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +de 2 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +de 2 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +de 2 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +de 2 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +de 2 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +de 2 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +de 2 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +de 2 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +de 2 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +de 2 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +de 2 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +de 2 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +de 2 329 01/14 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +de 2 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +de 2 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +de 2 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +de 2 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +de 2 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +de 2 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +de 2 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +es 2 1 01/01 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +es 2 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +es 2 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +es 2 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +es 2 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +es 2 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +es 2 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +es 2 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +es 2 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +es 2 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +es 2 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +es 2 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +es 2 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +es 2 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +es 2 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +es 2 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +es 2 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +es 2 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +es 2 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +es 2 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +es 2 21 01/01 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +es 2 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +es 2 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +es 2 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +es 2 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +es 2 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +es 2 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +es 2 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +es 2 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +es 2 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +es 2 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +es 2 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +es 2 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +es 2 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +es 2 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +es 2 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +es 2 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +es 2 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +es 2 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +es 2 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +es 2 41 01/02 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +es 2 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +es 2 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +es 2 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +es 2 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +es 2 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +es 2 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +es 2 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +es 2 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +es 2 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +es 2 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +es 2 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +es 2 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +es 2 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +es 2 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +es 2 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +es 2 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +es 2 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +es 2 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +es 2 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +es 2 61 01/03 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +es 2 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +es 2 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +es 2 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +es 2 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +es 2 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +es 2 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +es 2 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +es 2 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +es 2 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +es 2 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +es 2 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +es 2 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +es 2 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +es 2 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +es 2 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +es 2 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +es 2 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +es 2 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +es 2 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +es 2 81 01/04 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +es 2 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +es 2 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +es 2 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +es 2 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +es 2 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +es 2 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +es 2 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +es 2 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +es 2 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +es 2 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +es 2 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +es 2 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +es 2 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +es 2 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +es 2 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +es 2 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +es 2 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +es 2 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +es 2 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +es 2 101 01/05 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +es 2 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +es 2 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +es 2 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +es 2 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +es 2 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +es 2 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +es 2 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +es 2 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +es 2 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +es 2 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +es 2 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +es 2 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +es 2 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +es 2 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +es 2 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +es 2 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +es 2 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +es 2 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +es 2 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +es 2 121 01/06 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +es 2 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +es 2 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +es 2 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +es 2 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +es 2 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +es 2 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +es 2 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +es 2 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +es 2 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +es 2 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +es 2 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +es 2 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +es 2 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +es 2 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +es 2 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +es 2 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +es 2 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +es 2 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +es 2 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +es 2 141 01/06 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +es 2 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +es 2 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +es 2 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +es 2 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +es 2 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +es 2 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +es 2 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +es 2 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +es 2 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +es 2 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +es 2 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +es 2 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +es 2 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +es 2 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +es 2 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +es 2 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +es 2 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +es 2 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +es 2 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +es 2 161 01/07 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +es 2 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +es 2 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +es 2 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +es 2 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +es 2 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +es 2 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +es 2 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +es 2 169 01/08 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +es 2 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +es 2 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +es 2 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +es 2 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +es 2 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +es 2 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +es 2 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +es 2 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +es 2 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +es 2 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +es 2 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +es 2 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +es 2 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +es 2 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +es 2 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +es 2 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +es 2 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +es 2 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +es 2 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +es 2 189 01/08 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +es 2 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +es 2 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +es 2 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +es 2 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +es 2 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +es 2 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +es 2 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +es 2 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +es 2 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +es 2 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +es 2 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +es 2 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +es 2 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +es 2 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +es 2 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +es 2 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +es 2 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +es 2 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +es 2 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +es 2 209 01/09 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +es 2 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +es 2 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +es 2 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +es 2 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +es 2 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +es 2 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +es 2 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +es 2 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +es 2 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +es 2 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +es 2 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +es 2 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +es 2 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +es 2 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +es 2 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +es 2 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +es 2 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +es 2 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +es 2 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +es 2 229 01/10 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +es 2 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +es 2 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +es 2 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +es 2 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +es 2 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +es 2 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +es 2 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +es 2 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +es 2 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +es 2 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +es 2 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +es 2 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +es 2 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +es 2 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +es 2 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +es 2 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +es 2 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +es 2 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +es 2 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +es 2 249 01/11 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +es 2 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +es 2 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +es 2 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +es 2 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +es 2 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +es 2 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +es 2 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +es 2 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +es 2 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +es 2 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +es 2 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +es 2 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +es 2 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +es 2 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +es 2 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +es 2 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +es 2 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +es 2 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +es 2 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +es 2 269 01/12 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +es 2 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +es 2 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +es 2 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +es 2 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +es 2 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +es 2 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +es 2 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +es 2 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +es 2 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +es 2 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +es 2 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +es 2 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +es 2 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +es 2 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +es 2 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +es 2 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +es 2 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +es 2 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +es 2 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +es 2 289 01/13 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +es 2 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +es 2 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +es 2 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +es 2 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +es 2 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +es 2 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +es 2 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +es 2 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +es 2 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +es 2 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +es 2 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +es 2 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +es 2 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +es 2 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +es 2 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +es 2 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +es 2 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +es 2 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +es 2 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +es 2 309 01/13 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +es 2 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +es 2 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +es 2 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +es 2 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +es 2 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +es 2 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +es 2 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +es 2 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +es 2 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +es 2 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +es 2 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +es 2 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +es 2 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +es 2 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +es 2 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +es 2 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +es 2 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +es 2 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +es 2 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +es 2 329 01/14 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +es 2 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +es 2 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +es 2 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +es 2 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +es 2 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +es 2 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +es 2 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +fr 2 1 01/01 00:00 0.0 0.0 9.99 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +fr 2 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +fr 2 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +fr 2 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +fr 2 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +fr 2 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +fr 2 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +fr 2 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +fr 2 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +fr 2 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +fr 2 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +fr 2 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +fr 2 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +fr 2 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +fr 2 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +fr 2 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +fr 2 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +fr 2 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +fr 2 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +fr 2 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +fr 2 21 01/01 20:00 20000.0 20000.0 19.99 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +fr 2 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +fr 2 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +fr 2 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +fr 2 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +fr 2 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +fr 2 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +fr 2 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +fr 2 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +fr 2 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +fr 2 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +fr 2 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +fr 2 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +fr 2 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +fr 2 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +fr 2 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +fr 2 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +fr 2 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +fr 2 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +fr 2 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +fr 2 41 01/02 16:00 60000.0 60000.0 29.99 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +fr 2 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +fr 2 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +fr 2 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +fr 2 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +fr 2 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +fr 2 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +fr 2 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +fr 2 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +fr 2 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +fr 2 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +fr 2 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +fr 2 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +fr 2 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +fr 2 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +fr 2 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +fr 2 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +fr 2 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +fr 2 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +fr 2 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +fr 2 61 01/03 12:00 120000.0 120000.0 39.99 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +fr 2 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +fr 2 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +fr 2 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +fr 2 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +fr 2 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +fr 2 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +fr 2 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +fr 2 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +fr 2 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +fr 2 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +fr 2 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +fr 2 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +fr 2 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +fr 2 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +fr 2 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +fr 2 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +fr 2 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +fr 2 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +fr 2 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +fr 2 81 01/04 08:00 200000.0 200000.0 49.99 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +fr 2 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +fr 2 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +fr 2 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +fr 2 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +fr 2 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +fr 2 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +fr 2 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +fr 2 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +fr 2 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +fr 2 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +fr 2 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +fr 2 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +fr 2 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +fr 2 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +fr 2 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +fr 2 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +fr 2 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +fr 2 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +fr 2 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +fr 2 101 01/05 04:00 300000.0 300000.0 59.99 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +fr 2 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +fr 2 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +fr 2 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +fr 2 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +fr 2 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +fr 2 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +fr 2 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +fr 2 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +fr 2 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +fr 2 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +fr 2 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +fr 2 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +fr 2 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +fr 2 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +fr 2 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +fr 2 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +fr 2 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +fr 2 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +fr 2 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +fr 2 121 01/06 00:00 420000.0 420000.0 69.99 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +fr 2 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +fr 2 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +fr 2 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +fr 2 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +fr 2 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +fr 2 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +fr 2 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +fr 2 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +fr 2 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +fr 2 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +fr 2 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +fr 2 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +fr 2 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +fr 2 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +fr 2 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +fr 2 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +fr 2 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +fr 2 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +fr 2 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +fr 2 141 01/06 20:00 560000.0 560000.0 79.99 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +fr 2 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +fr 2 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +fr 2 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +fr 2 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +fr 2 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +fr 2 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +fr 2 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +fr 2 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +fr 2 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +fr 2 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +fr 2 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +fr 2 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +fr 2 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +fr 2 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +fr 2 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +fr 2 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +fr 2 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +fr 2 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +fr 2 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +fr 2 161 01/07 16:00 720000.0 720000.0 89.99 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +fr 2 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +fr 2 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +fr 2 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +fr 2 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +fr 2 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +fr 2 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +fr 2 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +fr 2 169 01/08 00:00 0.0 0.0 9.99 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +fr 2 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +fr 2 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +fr 2 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +fr 2 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +fr 2 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +fr 2 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +fr 2 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +fr 2 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +fr 2 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +fr 2 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +fr 2 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +fr 2 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +fr 2 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +fr 2 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +fr 2 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +fr 2 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +fr 2 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +fr 2 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +fr 2 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +fr 2 189 01/08 20:00 20000.0 20000.0 19.99 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +fr 2 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +fr 2 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +fr 2 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +fr 2 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +fr 2 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +fr 2 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +fr 2 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +fr 2 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +fr 2 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +fr 2 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +fr 2 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +fr 2 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +fr 2 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +fr 2 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +fr 2 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +fr 2 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +fr 2 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +fr 2 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +fr 2 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +fr 2 209 01/09 16:00 60000.0 60000.0 29.99 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +fr 2 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +fr 2 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +fr 2 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +fr 2 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +fr 2 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +fr 2 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +fr 2 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +fr 2 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +fr 2 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +fr 2 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +fr 2 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +fr 2 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +fr 2 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +fr 2 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +fr 2 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +fr 2 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +fr 2 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +fr 2 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +fr 2 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +fr 2 229 01/10 12:00 120000.0 120000.0 39.99 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +fr 2 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +fr 2 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +fr 2 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +fr 2 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +fr 2 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +fr 2 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +fr 2 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +fr 2 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +fr 2 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +fr 2 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +fr 2 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +fr 2 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +fr 2 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +fr 2 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +fr 2 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +fr 2 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +fr 2 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +fr 2 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +fr 2 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +fr 2 249 01/11 08:00 200000.0 200000.0 49.99 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +fr 2 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +fr 2 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +fr 2 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +fr 2 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +fr 2 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +fr 2 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +fr 2 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +fr 2 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +fr 2 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +fr 2 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +fr 2 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +fr 2 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +fr 2 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +fr 2 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +fr 2 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +fr 2 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +fr 2 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +fr 2 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +fr 2 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +fr 2 269 01/12 04:00 300000.0 300000.0 59.99 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +fr 2 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +fr 2 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +fr 2 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +fr 2 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +fr 2 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +fr 2 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +fr 2 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +fr 2 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +fr 2 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +fr 2 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +fr 2 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +fr 2 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +fr 2 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +fr 2 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +fr 2 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +fr 2 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +fr 2 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +fr 2 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +fr 2 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +fr 2 289 01/13 00:00 420000.0 420000.0 69.99 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +fr 2 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +fr 2 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +fr 2 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +fr 2 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +fr 2 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +fr 2 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +fr 2 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +fr 2 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +fr 2 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +fr 2 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +fr 2 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +fr 2 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +fr 2 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +fr 2 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +fr 2 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +fr 2 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +fr 2 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +fr 2 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +fr 2 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +fr 2 309 01/13 20:00 560000.0 560000.0 79.99 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +fr 2 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +fr 2 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +fr 2 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +fr 2 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +fr 2 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +fr 2 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +fr 2 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +fr 2 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +fr 2 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +fr 2 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +fr 2 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +fr 2 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +fr 2 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +fr 2 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +fr 2 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +fr 2 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +fr 2 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +fr 2 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +fr 2 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +fr 2 329 01/14 16:00 720000.0 720000.0 89.99 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +fr 2 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +fr 2 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +fr 2 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +fr 2 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +fr 2 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +fr 2 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +fr 2 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +it 2 1 01/01 00:00 0.0 0.0 10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +it 2 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +it 2 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +it 2 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +it 2 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +it 2 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +it 2 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +it 2 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +it 2 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +it 2 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +it 2 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +it 2 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +it 2 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +it 2 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +it 2 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +it 2 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +it 2 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +it 2 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +it 2 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +it 2 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +it 2 21 01/01 20:00 20000.0 20000.0 20.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +it 2 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +it 2 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +it 2 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +it 2 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +it 2 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +it 2 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +it 2 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +it 2 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +it 2 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +it 2 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +it 2 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +it 2 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +it 2 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +it 2 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +it 2 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +it 2 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +it 2 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +it 2 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +it 2 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +it 2 41 01/02 16:00 60000.0 60000.0 30.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +it 2 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +it 2 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +it 2 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +it 2 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +it 2 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +it 2 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +it 2 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +it 2 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +it 2 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +it 2 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +it 2 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +it 2 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +it 2 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +it 2 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +it 2 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +it 2 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +it 2 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +it 2 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +it 2 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +it 2 61 01/03 12:00 120000.0 120000.0 40.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +it 2 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +it 2 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +it 2 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +it 2 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +it 2 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +it 2 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +it 2 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +it 2 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +it 2 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +it 2 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +it 2 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +it 2 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +it 2 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +it 2 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +it 2 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +it 2 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +it 2 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +it 2 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +it 2 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +it 2 81 01/04 08:00 200000.0 200000.0 50.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +it 2 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +it 2 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +it 2 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +it 2 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +it 2 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +it 2 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +it 2 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +it 2 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +it 2 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +it 2 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +it 2 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +it 2 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +it 2 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +it 2 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +it 2 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +it 2 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +it 2 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +it 2 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +it 2 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +it 2 101 01/05 04:00 300000.0 300000.0 60.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +it 2 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +it 2 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +it 2 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +it 2 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +it 2 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +it 2 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +it 2 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +it 2 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +it 2 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +it 2 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +it 2 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +it 2 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +it 2 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +it 2 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +it 2 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +it 2 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +it 2 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +it 2 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +it 2 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +it 2 121 01/06 00:00 420000.0 420000.0 70.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +it 2 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +it 2 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +it 2 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +it 2 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +it 2 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +it 2 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +it 2 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +it 2 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +it 2 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +it 2 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +it 2 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +it 2 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +it 2 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +it 2 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +it 2 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +it 2 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +it 2 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +it 2 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +it 2 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +it 2 141 01/06 20:00 560000.0 560000.0 80.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +it 2 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +it 2 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +it 2 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +it 2 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +it 2 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +it 2 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +it 2 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +it 2 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +it 2 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +it 2 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +it 2 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +it 2 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +it 2 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +it 2 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +it 2 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +it 2 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +it 2 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +it 2 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +it 2 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +it 2 161 01/07 16:00 720000.0 720000.0 90.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +it 2 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +it 2 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +it 2 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +it 2 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +it 2 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +it 2 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +it 2 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +it 2 169 01/08 00:00 0.0 0.0 10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +it 2 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +it 2 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +it 2 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +it 2 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +it 2 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +it 2 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +it 2 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +it 2 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +it 2 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +it 2 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +it 2 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +it 2 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +it 2 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +it 2 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +it 2 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +it 2 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +it 2 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +it 2 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +it 2 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +it 2 189 01/08 20:00 20000.0 20000.0 20.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +it 2 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +it 2 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +it 2 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +it 2 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +it 2 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +it 2 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +it 2 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +it 2 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +it 2 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +it 2 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +it 2 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +it 2 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +it 2 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +it 2 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +it 2 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +it 2 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +it 2 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +it 2 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +it 2 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +it 2 209 01/09 16:00 60000.0 60000.0 30.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +it 2 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +it 2 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +it 2 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +it 2 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +it 2 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +it 2 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +it 2 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +it 2 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +it 2 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +it 2 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +it 2 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +it 2 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +it 2 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +it 2 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +it 2 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +it 2 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +it 2 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +it 2 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +it 2 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +it 2 229 01/10 12:00 120000.0 120000.0 40.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +it 2 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +it 2 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +it 2 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +it 2 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +it 2 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +it 2 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +it 2 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +it 2 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +it 2 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +it 2 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +it 2 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +it 2 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +it 2 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +it 2 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +it 2 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +it 2 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +it 2 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +it 2 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +it 2 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +it 2 249 01/11 08:00 200000.0 200000.0 50.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +it 2 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +it 2 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +it 2 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +it 2 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +it 2 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +it 2 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +it 2 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +it 2 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +it 2 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +it 2 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +it 2 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +it 2 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +it 2 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +it 2 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +it 2 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +it 2 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +it 2 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +it 2 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +it 2 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +it 2 269 01/12 04:00 300000.0 300000.0 60.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +it 2 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +it 2 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +it 2 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +it 2 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +it 2 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +it 2 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +it 2 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +it 2 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +it 2 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +it 2 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +it 2 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +it 2 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +it 2 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +it 2 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +it 2 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +it 2 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +it 2 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +it 2 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +it 2 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +it 2 289 01/13 00:00 420000.0 420000.0 70.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +it 2 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +it 2 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +it 2 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +it 2 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +it 2 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +it 2 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +it 2 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +it 2 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +it 2 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +it 2 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +it 2 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +it 2 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +it 2 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +it 2 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +it 2 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +it 2 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +it 2 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +it 2 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +it 2 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +it 2 309 01/13 20:00 560000.0 560000.0 80.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +it 2 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +it 2 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +it 2 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +it 2 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +it 2 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +it 2 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +it 2 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +it 2 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +it 2 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +it 2 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +it 2 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +it 2 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +it 2 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +it 2 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +it 2 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +it 2 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +it 2 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +it 2 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +it 2 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +it 2 329 01/14 16:00 720000.0 720000.0 90.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +it 2 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +it 2 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +it 2 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +it 2 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +it 2 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +it 2 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +it 2 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02.result.tsv new file mode 100644 index 0000000000..6d63782e81 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02.result.tsv @@ -0,0 +1,1009 @@ +area mcYear timeId time 01_SOLAR MWH 02_WIND_ON MWH 03_WIND_OFF MWH 04_RES MWH 05_NUCLEAR MWH 06_COAL MWH 07_GAS MWH 08_NON-RES MWH 09_HYDRO_PUMP MWH 01_SOLAR NP COST - EURO 02_WIND_ON NP COST - EURO 03_WIND_OFF NP COST - EURO 04_RES NP COST - EURO 05_NUCLEAR NP COST - EURO 06_COAL NP COST - EURO 07_GAS NP COST - EURO 08_NON-RES NP COST - EURO 09_HYDRO_PUMP NP COST - EURO 01_SOLAR NODU 02_WIND_ON NODU 03_WIND_OFF NODU 04_RES NODU 05_NUCLEAR NODU 06_COAL NODU 07_GAS NODU 08_NON-RES NODU 09_HYDRO_PUMP NODU +de 1 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 2 01/01 01:00 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 3 01/01 02:00 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 4 01/01 03:00 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 5 01/01 04:00 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 6 01/01 05:00 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 7 01/01 06:00 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 8 01/01 07:00 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 9 01/01 08:00 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 10 01/01 09:00 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 11 01/01 10:00 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 12 01/01 11:00 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 13 01/01 12:00 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 14 01/01 13:00 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 15 01/01 14:00 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 16 01/01 15:00 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 17 01/01 16:00 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 18 01/01 17:00 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 19 01/01 18:00 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 20 01/01 19:00 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 21 01/01 20:00 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 22 01/01 21:00 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 23 01/01 22:00 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 24 01/01 23:00 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 25 01/02 00:00 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 26 01/02 01:00 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 27 01/02 02:00 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 28 01/02 03:00 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 29 01/02 04:00 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 30 01/02 05:00 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 31 01/02 06:00 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 32 01/02 07:00 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 33 01/02 08:00 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 34 01/02 09:00 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 35 01/02 10:00 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 36 01/02 11:00 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 37 01/02 12:00 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 38 01/02 13:00 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 39 01/02 14:00 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 40 01/02 15:00 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 41 01/02 16:00 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 42 01/02 17:00 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 43 01/02 18:00 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 44 01/02 19:00 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 45 01/02 20:00 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 46 01/02 21:00 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 47 01/02 22:00 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 48 01/02 23:00 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 49 01/03 00:00 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 50 01/03 01:00 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 51 01/03 02:00 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 52 01/03 03:00 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 53 01/03 04:00 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 54 01/03 05:00 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 55 01/03 06:00 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 56 01/03 07:00 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 57 01/03 08:00 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 58 01/03 09:00 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 59 01/03 10:00 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 60 01/03 11:00 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 61 01/03 12:00 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 62 01/03 13:00 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 63 01/03 14:00 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 64 01/03 15:00 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 65 01/03 16:00 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 66 01/03 17:00 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 67 01/03 18:00 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 68 01/03 19:00 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 69 01/03 20:00 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 70 01/03 21:00 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 71 01/03 22:00 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 72 01/03 23:00 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 73 01/04 00:00 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 74 01/04 01:00 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 75 01/04 02:00 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 76 01/04 03:00 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 77 01/04 04:00 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 78 01/04 05:00 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 79 01/04 06:00 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 80 01/04 07:00 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 81 01/04 08:00 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 82 01/04 09:00 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 83 01/04 10:00 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 84 01/04 11:00 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 85 01/04 12:00 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 86 01/04 13:00 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 87 01/04 14:00 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 88 01/04 15:00 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 89 01/04 16:00 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 90 01/04 17:00 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 91 01/04 18:00 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 92 01/04 19:00 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 93 01/04 20:00 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 94 01/04 21:00 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 95 01/04 22:00 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 96 01/04 23:00 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 97 01/05 00:00 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 98 01/05 01:00 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 99 01/05 02:00 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 100 01/05 03:00 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 101 01/05 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 102 01/05 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 103 01/05 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 104 01/05 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 105 01/05 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 106 01/05 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 107 01/05 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 108 01/05 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 109 01/05 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 110 01/05 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 111 01/05 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 112 01/05 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 113 01/05 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 114 01/05 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 115 01/05 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 116 01/05 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 117 01/05 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 118 01/05 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 119 01/05 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 120 01/05 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 121 01/06 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 122 01/06 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 123 01/06 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 124 01/06 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 125 01/06 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 126 01/06 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 127 01/06 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 128 01/06 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 129 01/06 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 130 01/06 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 131 01/06 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 132 01/06 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 133 01/06 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 134 01/06 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 135 01/06 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 136 01/06 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 137 01/06 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 138 01/06 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 139 01/06 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 140 01/06 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 141 01/06 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 142 01/06 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 143 01/06 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 144 01/06 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 145 01/07 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 146 01/07 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 147 01/07 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 148 01/07 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 149 01/07 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 150 01/07 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 151 01/07 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 152 01/07 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 153 01/07 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 154 01/07 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 155 01/07 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 156 01/07 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 157 01/07 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 158 01/07 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 159 01/07 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 160 01/07 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 161 01/07 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 162 01/07 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 163 01/07 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 164 01/07 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 165 01/07 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 166 01/07 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 167 01/07 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 168 01/07 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 170 01/08 01:00 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 171 01/08 02:00 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 172 01/08 03:00 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 173 01/08 04:00 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 174 01/08 05:00 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 175 01/08 06:00 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 176 01/08 07:00 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 177 01/08 08:00 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 178 01/08 09:00 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 179 01/08 10:00 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 180 01/08 11:00 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 181 01/08 12:00 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 182 01/08 13:00 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 183 01/08 14:00 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 184 01/08 15:00 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 185 01/08 16:00 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 186 01/08 17:00 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 187 01/08 18:00 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 188 01/08 19:00 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 189 01/08 20:00 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 190 01/08 21:00 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 191 01/08 22:00 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 192 01/08 23:00 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 193 01/09 00:00 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 194 01/09 01:00 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 195 01/09 02:00 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 196 01/09 03:00 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 197 01/09 04:00 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 198 01/09 05:00 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 199 01/09 06:00 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 200 01/09 07:00 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 201 01/09 08:00 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 202 01/09 09:00 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 203 01/09 10:00 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 204 01/09 11:00 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 205 01/09 12:00 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 206 01/09 13:00 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 207 01/09 14:00 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 208 01/09 15:00 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 209 01/09 16:00 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 210 01/09 17:00 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 211 01/09 18:00 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 212 01/09 19:00 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 213 01/09 20:00 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 214 01/09 21:00 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 215 01/09 22:00 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 216 01/09 23:00 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 217 01/10 00:00 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 218 01/10 01:00 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 219 01/10 02:00 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 220 01/10 03:00 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 221 01/10 04:00 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 222 01/10 05:00 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 223 01/10 06:00 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 224 01/10 07:00 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 225 01/10 08:00 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 226 01/10 09:00 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 227 01/10 10:00 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 228 01/10 11:00 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 229 01/10 12:00 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +de 1 230 01/10 13:00 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 231 01/10 14:00 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 232 01/10 15:00 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 233 01/10 16:00 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 234 01/10 17:00 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 235 01/10 18:00 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 236 01/10 19:00 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 237 01/10 20:00 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 238 01/10 21:00 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 239 01/10 22:00 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 240 01/10 23:00 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 241 01/11 00:00 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 242 01/11 01:00 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 243 01/11 02:00 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 244 01/11 03:00 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 245 01/11 04:00 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 246 01/11 05:00 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 247 01/11 06:00 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 248 01/11 07:00 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 249 01/11 08:00 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +de 1 250 01/11 09:00 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 251 01/11 10:00 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 252 01/11 11:00 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 253 01/11 12:00 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 254 01/11 13:00 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 255 01/11 14:00 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 256 01/11 15:00 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 257 01/11 16:00 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 258 01/11 17:00 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 259 01/11 18:00 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 260 01/11 19:00 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 261 01/11 20:00 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 262 01/11 21:00 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 263 01/11 22:00 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 264 01/11 23:00 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 265 01/12 00:00 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 266 01/12 01:00 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 267 01/12 02:00 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 268 01/12 03:00 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 269 01/12 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +de 1 270 01/12 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 271 01/12 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 272 01/12 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 273 01/12 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 274 01/12 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 275 01/12 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 276 01/12 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 277 01/12 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 278 01/12 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 279 01/12 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 280 01/12 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 281 01/12 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 282 01/12 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 283 01/12 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 284 01/12 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 285 01/12 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 286 01/12 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 287 01/12 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 288 01/12 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 289 01/13 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +de 1 290 01/13 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 291 01/13 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 292 01/13 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 293 01/13 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 294 01/13 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 295 01/13 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 296 01/13 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 297 01/13 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 298 01/13 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 299 01/13 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 300 01/13 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 301 01/13 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 302 01/13 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 303 01/13 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 304 01/13 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 305 01/13 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 306 01/13 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 307 01/13 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 308 01/13 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 309 01/13 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +de 1 310 01/13 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 311 01/13 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 312 01/13 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 313 01/14 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 314 01/14 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 315 01/14 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 316 01/14 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 317 01/14 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 318 01/14 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 319 01/14 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 320 01/14 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 321 01/14 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 322 01/14 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 323 01/14 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 324 01/14 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 325 01/14 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 326 01/14 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 327 01/14 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 328 01/14 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 329 01/14 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +de 1 330 01/14 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 331 01/14 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 332 01/14 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 333 01/14 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 334 01/14 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 335 01/14 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +de 1 336 01/14 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 2 01/01 01:00 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 3 01/01 02:00 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 4 01/01 03:00 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 5 01/01 04:00 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 6 01/01 05:00 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 7 01/01 06:00 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 8 01/01 07:00 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 9 01/01 08:00 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 10 01/01 09:00 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 11 01/01 10:00 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 12 01/01 11:00 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 13 01/01 12:00 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 14 01/01 13:00 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 15 01/01 14:00 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 16 01/01 15:00 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 17 01/01 16:00 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 18 01/01 17:00 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 19 01/01 18:00 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 20 01/01 19:00 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 21 01/01 20:00 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 22 01/01 21:00 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 23 01/01 22:00 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 24 01/01 23:00 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 25 01/02 00:00 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 26 01/02 01:00 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 27 01/02 02:00 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 28 01/02 03:00 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 29 01/02 04:00 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 30 01/02 05:00 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 31 01/02 06:00 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 32 01/02 07:00 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 33 01/02 08:00 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 34 01/02 09:00 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 35 01/02 10:00 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 36 01/02 11:00 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 37 01/02 12:00 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 38 01/02 13:00 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 39 01/02 14:00 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 40 01/02 15:00 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 41 01/02 16:00 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 42 01/02 17:00 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 43 01/02 18:00 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 44 01/02 19:00 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 45 01/02 20:00 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 46 01/02 21:00 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 47 01/02 22:00 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 48 01/02 23:00 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 49 01/03 00:00 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 50 01/03 01:00 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 51 01/03 02:00 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 52 01/03 03:00 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 53 01/03 04:00 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 54 01/03 05:00 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 55 01/03 06:00 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 56 01/03 07:00 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 57 01/03 08:00 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 58 01/03 09:00 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 59 01/03 10:00 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 60 01/03 11:00 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 61 01/03 12:00 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 62 01/03 13:00 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 63 01/03 14:00 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 64 01/03 15:00 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 65 01/03 16:00 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 66 01/03 17:00 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 67 01/03 18:00 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 68 01/03 19:00 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 69 01/03 20:00 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 70 01/03 21:00 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 71 01/03 22:00 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 72 01/03 23:00 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 73 01/04 00:00 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 74 01/04 01:00 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 75 01/04 02:00 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 76 01/04 03:00 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 77 01/04 04:00 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 78 01/04 05:00 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 79 01/04 06:00 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 80 01/04 07:00 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 81 01/04 08:00 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 82 01/04 09:00 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 83 01/04 10:00 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 84 01/04 11:00 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 85 01/04 12:00 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 86 01/04 13:00 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 87 01/04 14:00 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 88 01/04 15:00 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 89 01/04 16:00 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 90 01/04 17:00 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 91 01/04 18:00 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 92 01/04 19:00 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 93 01/04 20:00 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 94 01/04 21:00 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 95 01/04 22:00 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 96 01/04 23:00 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 97 01/05 00:00 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 98 01/05 01:00 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 99 01/05 02:00 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 100 01/05 03:00 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 101 01/05 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 102 01/05 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 103 01/05 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 104 01/05 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 105 01/05 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 106 01/05 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 107 01/05 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 108 01/05 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 109 01/05 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 110 01/05 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 111 01/05 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 112 01/05 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 113 01/05 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 114 01/05 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 115 01/05 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 116 01/05 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 117 01/05 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 118 01/05 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 119 01/05 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 120 01/05 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 121 01/06 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 122 01/06 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 123 01/06 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 124 01/06 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 125 01/06 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 126 01/06 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 127 01/06 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 128 01/06 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 129 01/06 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 130 01/06 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 131 01/06 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 132 01/06 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 133 01/06 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 134 01/06 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 135 01/06 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 136 01/06 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 137 01/06 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 138 01/06 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 139 01/06 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 140 01/06 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 141 01/06 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 142 01/06 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 143 01/06 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 144 01/06 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 145 01/07 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 146 01/07 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 147 01/07 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 148 01/07 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 149 01/07 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 150 01/07 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 151 01/07 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 152 01/07 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 153 01/07 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 154 01/07 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 155 01/07 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 156 01/07 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 157 01/07 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 158 01/07 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 159 01/07 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 160 01/07 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 161 01/07 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 162 01/07 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 163 01/07 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 164 01/07 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 165 01/07 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 166 01/07 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 167 01/07 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 168 01/07 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 170 01/08 01:00 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 171 01/08 02:00 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 172 01/08 03:00 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 173 01/08 04:00 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 174 01/08 05:00 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 175 01/08 06:00 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 176 01/08 07:00 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 177 01/08 08:00 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 178 01/08 09:00 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 179 01/08 10:00 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 180 01/08 11:00 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 181 01/08 12:00 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 182 01/08 13:00 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 183 01/08 14:00 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 184 01/08 15:00 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 185 01/08 16:00 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 186 01/08 17:00 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 187 01/08 18:00 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 188 01/08 19:00 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 189 01/08 20:00 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 190 01/08 21:00 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 191 01/08 22:00 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 192 01/08 23:00 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 193 01/09 00:00 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 194 01/09 01:00 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 195 01/09 02:00 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 196 01/09 03:00 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 197 01/09 04:00 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 198 01/09 05:00 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 199 01/09 06:00 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 200 01/09 07:00 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 201 01/09 08:00 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 202 01/09 09:00 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 203 01/09 10:00 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 204 01/09 11:00 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 205 01/09 12:00 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 206 01/09 13:00 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 207 01/09 14:00 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 208 01/09 15:00 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 209 01/09 16:00 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 210 01/09 17:00 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 211 01/09 18:00 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 212 01/09 19:00 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 213 01/09 20:00 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 214 01/09 21:00 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 215 01/09 22:00 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 216 01/09 23:00 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 217 01/10 00:00 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 218 01/10 01:00 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 219 01/10 02:00 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 220 01/10 03:00 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 221 01/10 04:00 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 222 01/10 05:00 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 223 01/10 06:00 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 224 01/10 07:00 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 225 01/10 08:00 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 226 01/10 09:00 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 227 01/10 10:00 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 228 01/10 11:00 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 229 01/10 12:00 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr 1 230 01/10 13:00 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 231 01/10 14:00 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 232 01/10 15:00 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 233 01/10 16:00 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 234 01/10 17:00 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 235 01/10 18:00 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 236 01/10 19:00 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 237 01/10 20:00 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 238 01/10 21:00 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 239 01/10 22:00 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 240 01/10 23:00 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 241 01/11 00:00 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 242 01/11 01:00 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 243 01/11 02:00 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 244 01/11 03:00 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 245 01/11 04:00 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 246 01/11 05:00 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 247 01/11 06:00 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 248 01/11 07:00 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 249 01/11 08:00 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +fr 1 250 01/11 09:00 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 251 01/11 10:00 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 252 01/11 11:00 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 253 01/11 12:00 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 254 01/11 13:00 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 255 01/11 14:00 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 256 01/11 15:00 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 257 01/11 16:00 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 258 01/11 17:00 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 259 01/11 18:00 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 260 01/11 19:00 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 261 01/11 20:00 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 262 01/11 21:00 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 263 01/11 22:00 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 264 01/11 23:00 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 265 01/12 00:00 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 266 01/12 01:00 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 267 01/12 02:00 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 268 01/12 03:00 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 269 01/12 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +fr 1 270 01/12 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 271 01/12 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 272 01/12 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 273 01/12 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 274 01/12 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 275 01/12 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 276 01/12 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 277 01/12 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 278 01/12 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 279 01/12 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 280 01/12 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 281 01/12 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 282 01/12 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 283 01/12 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 284 01/12 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 285 01/12 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 286 01/12 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 287 01/12 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 288 01/12 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 289 01/13 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +fr 1 290 01/13 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 291 01/13 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 292 01/13 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 293 01/13 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 294 01/13 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 295 01/13 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 296 01/13 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 297 01/13 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 298 01/13 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 299 01/13 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 300 01/13 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 301 01/13 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 302 01/13 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 303 01/13 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 304 01/13 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 305 01/13 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 306 01/13 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 307 01/13 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 308 01/13 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 309 01/13 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +fr 1 310 01/13 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 311 01/13 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 312 01/13 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 313 01/14 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 314 01/14 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 315 01/14 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 316 01/14 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 317 01/14 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 318 01/14 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 319 01/14 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 320 01/14 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 321 01/14 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 322 01/14 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 323 01/14 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 324 01/14 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 325 01/14 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 326 01/14 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 327 01/14 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 328 01/14 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 329 01/14 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +fr 1 330 01/14 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 331 01/14 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 332 01/14 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 333 01/14 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 334 01/14 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 335 01/14 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +fr 1 336 01/14 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 2 01/01 01:00 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 3 01/01 02:00 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 4 01/01 03:00 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 5 01/01 04:00 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 6 01/01 05:00 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 7 01/01 06:00 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 8 01/01 07:00 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 9 01/01 08:00 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 10 01/01 09:00 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 11 01/01 10:00 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 12 01/01 11:00 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 13 01/01 12:00 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 14 01/01 13:00 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 15 01/01 14:00 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 16 01/01 15:00 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 17 01/01 16:00 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 18 01/01 17:00 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 19 01/01 18:00 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 20 01/01 19:00 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 21 01/01 20:00 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 22 01/01 21:00 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 23 01/01 22:00 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 24 01/01 23:00 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 25 01/02 00:00 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 26 01/02 01:00 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 27 01/02 02:00 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 28 01/02 03:00 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 29 01/02 04:00 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 30 01/02 05:00 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 31 01/02 06:00 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 32 01/02 07:00 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 33 01/02 08:00 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 34 01/02 09:00 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 35 01/02 10:00 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 36 01/02 11:00 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 37 01/02 12:00 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 38 01/02 13:00 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 39 01/02 14:00 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 40 01/02 15:00 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 41 01/02 16:00 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 42 01/02 17:00 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 43 01/02 18:00 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 44 01/02 19:00 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 45 01/02 20:00 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 46 01/02 21:00 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 47 01/02 22:00 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 48 01/02 23:00 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 49 01/03 00:00 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 50 01/03 01:00 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 51 01/03 02:00 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 52 01/03 03:00 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 53 01/03 04:00 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 54 01/03 05:00 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 55 01/03 06:00 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 56 01/03 07:00 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 57 01/03 08:00 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 58 01/03 09:00 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 59 01/03 10:00 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 60 01/03 11:00 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 61 01/03 12:00 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 62 01/03 13:00 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 63 01/03 14:00 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 64 01/03 15:00 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 65 01/03 16:00 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 66 01/03 17:00 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 67 01/03 18:00 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 68 01/03 19:00 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 69 01/03 20:00 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 70 01/03 21:00 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 71 01/03 22:00 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 72 01/03 23:00 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 73 01/04 00:00 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 74 01/04 01:00 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 75 01/04 02:00 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 76 01/04 03:00 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 77 01/04 04:00 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 78 01/04 05:00 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 79 01/04 06:00 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 80 01/04 07:00 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 81 01/04 08:00 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 82 01/04 09:00 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 83 01/04 10:00 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 84 01/04 11:00 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 85 01/04 12:00 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 86 01/04 13:00 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 87 01/04 14:00 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 88 01/04 15:00 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 89 01/04 16:00 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 90 01/04 17:00 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 91 01/04 18:00 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 92 01/04 19:00 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 93 01/04 20:00 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 94 01/04 21:00 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 95 01/04 22:00 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 96 01/04 23:00 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 97 01/05 00:00 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 98 01/05 01:00 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 99 01/05 02:00 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 100 01/05 03:00 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 101 01/05 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 102 01/05 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 103 01/05 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 104 01/05 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 105 01/05 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 106 01/05 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 107 01/05 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 108 01/05 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 109 01/05 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 110 01/05 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 111 01/05 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 112 01/05 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 113 01/05 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 114 01/05 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 115 01/05 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 116 01/05 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 117 01/05 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 118 01/05 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 119 01/05 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 120 01/05 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 121 01/06 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 122 01/06 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 123 01/06 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 124 01/06 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 125 01/06 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 126 01/06 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 127 01/06 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 128 01/06 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 129 01/06 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 130 01/06 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 131 01/06 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 132 01/06 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 133 01/06 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 134 01/06 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 135 01/06 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 136 01/06 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 137 01/06 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 138 01/06 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 139 01/06 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 140 01/06 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 141 01/06 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 142 01/06 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 143 01/06 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 144 01/06 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 145 01/07 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 146 01/07 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 147 01/07 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 148 01/07 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 149 01/07 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 150 01/07 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 151 01/07 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 152 01/07 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 153 01/07 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 154 01/07 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 155 01/07 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 156 01/07 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 157 01/07 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 158 01/07 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 159 01/07 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 160 01/07 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 161 01/07 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 162 01/07 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 163 01/07 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 164 01/07 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 165 01/07 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 166 01/07 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 167 01/07 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 168 01/07 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 170 01/08 01:00 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 171 01/08 02:00 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 172 01/08 03:00 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 173 01/08 04:00 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 174 01/08 05:00 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 175 01/08 06:00 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 176 01/08 07:00 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 177 01/08 08:00 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 178 01/08 09:00 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 179 01/08 10:00 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 180 01/08 11:00 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 181 01/08 12:00 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 182 01/08 13:00 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 183 01/08 14:00 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 184 01/08 15:00 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 185 01/08 16:00 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 186 01/08 17:00 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 187 01/08 18:00 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 188 01/08 19:00 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 189 01/08 20:00 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 190 01/08 21:00 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 191 01/08 22:00 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 192 01/08 23:00 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 193 01/09 00:00 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 194 01/09 01:00 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 195 01/09 02:00 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 196 01/09 03:00 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 197 01/09 04:00 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 198 01/09 05:00 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 199 01/09 06:00 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 200 01/09 07:00 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 201 01/09 08:00 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 202 01/09 09:00 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 203 01/09 10:00 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 204 01/09 11:00 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 205 01/09 12:00 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 206 01/09 13:00 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 207 01/09 14:00 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 208 01/09 15:00 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 209 01/09 16:00 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 210 01/09 17:00 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 211 01/09 18:00 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 212 01/09 19:00 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 213 01/09 20:00 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 214 01/09 21:00 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 215 01/09 22:00 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 216 01/09 23:00 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 217 01/10 00:00 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 218 01/10 01:00 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 219 01/10 02:00 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 220 01/10 03:00 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 221 01/10 04:00 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 222 01/10 05:00 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 223 01/10 06:00 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 224 01/10 07:00 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 225 01/10 08:00 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 226 01/10 09:00 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 227 01/10 10:00 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 228 01/10 11:00 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 229 01/10 12:00 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 +it 1 230 01/10 13:00 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 231 01/10 14:00 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 232 01/10 15:00 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 233 01/10 16:00 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 234 01/10 17:00 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 235 01/10 18:00 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 236 01/10 19:00 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 237 01/10 20:00 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 238 01/10 21:00 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 239 01/10 22:00 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 240 01/10 23:00 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 241 01/11 00:00 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 242 01/11 01:00 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 243 01/11 02:00 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 244 01/11 03:00 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 245 01/11 04:00 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 246 01/11 05:00 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 247 01/11 06:00 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 248 01/11 07:00 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 249 01/11 08:00 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 +it 1 250 01/11 09:00 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 251 01/11 10:00 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 252 01/11 11:00 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 253 01/11 12:00 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 254 01/11 13:00 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 255 01/11 14:00 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 256 01/11 15:00 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 257 01/11 16:00 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 258 01/11 17:00 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 259 01/11 18:00 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 260 01/11 19:00 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 261 01/11 20:00 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 262 01/11 21:00 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 263 01/11 22:00 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 264 01/11 23:00 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 265 01/12 00:00 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 266 01/12 01:00 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 267 01/12 02:00 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 268 01/12 03:00 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 269 01/12 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 +it 1 270 01/12 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 271 01/12 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 272 01/12 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 273 01/12 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 274 01/12 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 275 01/12 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 276 01/12 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 277 01/12 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 278 01/12 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 279 01/12 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 280 01/12 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 281 01/12 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 282 01/12 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 283 01/12 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 284 01/12 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 285 01/12 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 286 01/12 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 287 01/12 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 288 01/12 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 289 01/13 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 +it 1 290 01/13 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 291 01/13 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 292 01/13 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 293 01/13 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 294 01/13 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 295 01/13 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 296 01/13 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 297 01/13 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 298 01/13 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 299 01/13 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 300 01/13 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 301 01/13 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 302 01/13 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 303 01/13 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 304 01/13 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 305 01/13 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 306 01/13 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 307 01/13 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 308 01/13 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 309 01/13 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 +it 1 310 01/13 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 311 01/13 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 312 01/13 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 313 01/14 00:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 314 01/14 01:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 315 01/14 02:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 316 01/14 03:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 317 01/14 04:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 318 01/14 05:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 319 01/14 06:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 320 01/14 07:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 321 01/14 08:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 322 01/14 09:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 323 01/14 10:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 324 01/14 11:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 325 01/14 12:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 326 01/14 13:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 327 01/14 14:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 328 01/14 15:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 329 01/14 16:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 +it 1 330 01/14 17:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 331 01/14 18:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 332 01/14 19:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 333 01/14 20:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 334 01/14 21:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 335 01/14 22:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +it 1 336 01/14 23:00 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 2000.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-03.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-03.result.tsv new file mode 100644 index 0000000000..70d4e31c84 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-03.result.tsv @@ -0,0 +1,9 @@ +area mcYear timeId time OP. COST MRG. PRICE +de 1 1 1 46452000.0 47.14 +de 1 2 2 46452000.0 47.14 +es 1 1 1 46452000.0 47.14 +es 1 2 2 46452000.0 47.14 +de 2 1 1 46452000.0 47.14 +de 2 2 2 46452000.0 47.14 +es 2 1 1 46452000.0 47.14 +es 2 2 2 46452000.0 47.14 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-04.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-04.result.tsv new file mode 100644 index 0000000000..aef0763263 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-04.result.tsv @@ -0,0 +1,1009 @@ +area mcYear timeId time OV. COST OP. COST MRG. PRICE CO2 EMIS. BALANCE ROW BAL. PSP MISC. NDG LOAD H. ROR WIND SOLAR NUCLEAR LIGNITE COAL GAS OIL MIX. FUEL MISC. DTG H. STOR H. PUMP H. LEV H. INFL H. OVFL H. VAL H. COST UNSP. ENRG SPIL. ENRG LOLD LOLP AVL DTG DTG MRG MAX MRG NP COST NODU +de 2 1 01/01 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +de 2 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +de 2 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +de 2 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +de 2 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +de 2 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +de 2 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +de 2 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +de 2 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +de 2 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +de 2 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +de 2 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +de 2 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +de 2 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +de 2 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +de 2 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +de 2 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +de 2 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +de 2 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +de 2 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +de 2 21 01/01 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +de 2 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +de 2 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +de 2 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +de 2 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +de 2 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +de 2 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +de 2 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +de 2 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +de 2 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +de 2 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +de 2 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +de 2 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +de 2 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +de 2 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +de 2 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +de 2 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +de 2 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +de 2 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +de 2 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +de 2 41 01/02 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +de 2 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +de 2 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +de 2 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +de 2 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +de 2 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +de 2 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +de 2 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +de 2 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +de 2 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +de 2 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +de 2 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +de 2 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +de 2 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +de 2 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +de 2 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +de 2 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +de 2 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +de 2 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +de 2 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +de 2 61 01/03 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +de 2 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +de 2 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +de 2 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +de 2 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +de 2 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +de 2 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +de 2 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +de 2 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +de 2 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +de 2 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +de 2 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +de 2 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +de 2 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +de 2 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +de 2 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +de 2 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +de 2 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +de 2 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +de 2 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +de 2 81 01/04 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +de 2 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +de 2 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +de 2 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +de 2 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +de 2 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +de 2 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +de 2 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +de 2 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +de 2 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +de 2 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +de 2 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +de 2 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +de 2 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +de 2 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +de 2 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +de 2 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +de 2 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +de 2 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +de 2 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +de 2 101 01/05 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +de 2 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +de 2 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +de 2 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +de 2 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +de 2 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +de 2 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +de 2 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +de 2 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +de 2 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +de 2 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +de 2 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +de 2 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +de 2 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +de 2 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +de 2 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +de 2 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +de 2 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +de 2 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +de 2 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +de 2 121 01/06 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +de 2 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +de 2 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +de 2 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +de 2 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +de 2 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +de 2 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +de 2 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +de 2 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +de 2 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +de 2 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +de 2 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +de 2 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +de 2 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +de 2 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +de 2 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +de 2 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +de 2 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +de 2 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +de 2 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +de 2 141 01/06 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +de 2 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +de 2 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +de 2 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +de 2 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +de 2 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +de 2 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +de 2 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +de 2 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +de 2 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +de 2 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +de 2 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +de 2 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +de 2 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +de 2 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +de 2 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +de 2 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +de 2 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +de 2 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +de 2 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +de 2 161 01/07 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +de 2 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +de 2 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +de 2 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +de 2 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +de 2 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +de 2 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +de 2 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +de 2 169 01/08 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +de 2 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +de 2 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +de 2 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +de 2 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +de 2 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +de 2 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +de 2 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +de 2 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +de 2 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +de 2 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +de 2 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +de 2 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +de 2 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +de 2 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +de 2 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +de 2 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +de 2 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +de 2 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +de 2 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +de 2 189 01/08 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +de 2 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +de 2 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +de 2 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +de 2 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +de 2 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +de 2 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +de 2 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +de 2 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +de 2 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +de 2 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +de 2 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +de 2 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +de 2 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +de 2 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +de 2 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +de 2 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +de 2 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +de 2 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +de 2 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +de 2 209 01/09 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +de 2 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +de 2 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +de 2 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +de 2 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +de 2 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +de 2 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +de 2 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +de 2 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +de 2 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +de 2 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +de 2 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +de 2 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +de 2 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +de 2 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +de 2 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +de 2 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +de 2 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +de 2 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +de 2 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +de 2 229 01/10 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +de 2 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +de 2 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +de 2 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +de 2 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +de 2 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +de 2 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +de 2 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +de 2 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +de 2 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +de 2 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +de 2 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +de 2 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +de 2 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +de 2 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +de 2 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +de 2 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +de 2 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +de 2 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +de 2 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +de 2 249 01/11 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +de 2 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +de 2 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +de 2 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +de 2 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +de 2 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +de 2 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +de 2 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +de 2 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +de 2 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +de 2 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +de 2 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +de 2 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +de 2 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +de 2 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +de 2 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +de 2 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +de 2 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +de 2 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +de 2 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +de 2 269 01/12 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +de 2 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +de 2 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +de 2 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +de 2 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +de 2 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +de 2 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +de 2 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +de 2 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +de 2 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +de 2 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +de 2 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +de 2 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +de 2 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +de 2 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +de 2 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +de 2 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +de 2 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +de 2 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +de 2 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +de 2 289 01/13 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +de 2 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +de 2 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +de 2 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +de 2 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +de 2 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +de 2 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +de 2 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +de 2 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +de 2 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +de 2 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +de 2 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +de 2 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +de 2 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +de 2 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +de 2 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +de 2 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +de 2 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +de 2 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +de 2 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +de 2 309 01/13 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +de 2 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +de 2 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +de 2 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +de 2 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +de 2 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +de 2 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +de 2 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +de 2 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +de 2 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +de 2 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +de 2 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +de 2 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +de 2 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +de 2 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +de 2 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +de 2 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +de 2 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +de 2 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +de 2 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +de 2 329 01/14 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +de 2 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +de 2 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +de 2 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +de 2 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +de 2 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +de 2 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +de 2 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +es 2 1 01/01 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +es 2 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +es 2 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +es 2 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +es 2 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +es 2 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +es 2 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +es 2 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +es 2 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +es 2 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +es 2 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +es 2 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +es 2 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +es 2 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +es 2 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +es 2 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +es 2 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +es 2 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +es 2 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +es 2 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +es 2 21 01/01 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +es 2 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +es 2 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +es 2 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +es 2 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +es 2 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +es 2 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +es 2 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +es 2 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +es 2 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +es 2 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +es 2 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +es 2 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +es 2 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +es 2 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +es 2 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +es 2 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +es 2 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +es 2 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +es 2 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +es 2 41 01/02 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +es 2 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +es 2 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +es 2 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +es 2 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +es 2 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +es 2 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +es 2 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +es 2 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +es 2 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +es 2 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +es 2 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +es 2 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +es 2 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +es 2 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +es 2 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +es 2 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +es 2 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +es 2 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +es 2 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +es 2 61 01/03 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +es 2 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +es 2 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +es 2 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +es 2 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +es 2 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +es 2 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +es 2 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +es 2 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +es 2 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +es 2 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +es 2 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +es 2 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +es 2 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +es 2 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +es 2 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +es 2 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +es 2 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +es 2 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +es 2 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +es 2 81 01/04 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +es 2 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +es 2 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +es 2 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +es 2 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +es 2 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +es 2 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +es 2 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +es 2 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +es 2 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +es 2 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +es 2 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +es 2 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +es 2 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +es 2 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +es 2 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +es 2 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +es 2 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +es 2 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +es 2 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +es 2 101 01/05 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +es 2 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +es 2 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +es 2 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +es 2 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +es 2 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +es 2 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +es 2 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +es 2 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +es 2 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +es 2 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +es 2 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +es 2 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +es 2 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +es 2 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +es 2 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +es 2 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +es 2 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +es 2 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +es 2 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +es 2 121 01/06 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +es 2 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +es 2 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +es 2 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +es 2 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +es 2 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +es 2 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +es 2 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +es 2 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +es 2 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +es 2 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +es 2 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +es 2 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +es 2 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +es 2 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +es 2 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +es 2 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +es 2 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +es 2 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +es 2 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +es 2 141 01/06 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +es 2 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +es 2 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +es 2 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +es 2 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +es 2 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +es 2 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +es 2 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +es 2 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +es 2 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +es 2 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +es 2 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +es 2 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +es 2 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +es 2 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +es 2 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +es 2 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +es 2 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +es 2 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +es 2 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +es 2 161 01/07 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +es 2 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +es 2 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +es 2 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +es 2 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +es 2 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +es 2 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +es 2 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +es 2 169 01/08 00:00 0.0 0.0 9.98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +es 2 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +es 2 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +es 2 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +es 2 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +es 2 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +es 2 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +es 2 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +es 2 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +es 2 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +es 2 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +es 2 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +es 2 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +es 2 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +es 2 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +es 2 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +es 2 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +es 2 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +es 2 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +es 2 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +es 2 189 01/08 20:00 20000.0 20000.0 19.98 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +es 2 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +es 2 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +es 2 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +es 2 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +es 2 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +es 2 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +es 2 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +es 2 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +es 2 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +es 2 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +es 2 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +es 2 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +es 2 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +es 2 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +es 2 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +es 2 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +es 2 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +es 2 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +es 2 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +es 2 209 01/09 16:00 60000.0 60000.0 29.98 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +es 2 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +es 2 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +es 2 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +es 2 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +es 2 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +es 2 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +es 2 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +es 2 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +es 2 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +es 2 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +es 2 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +es 2 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +es 2 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +es 2 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +es 2 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +es 2 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +es 2 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +es 2 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +es 2 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +es 2 229 01/10 12:00 120000.0 120000.0 39.98 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +es 2 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +es 2 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +es 2 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +es 2 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +es 2 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +es 2 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +es 2 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +es 2 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +es 2 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +es 2 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +es 2 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +es 2 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +es 2 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +es 2 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +es 2 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +es 2 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +es 2 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +es 2 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +es 2 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +es 2 249 01/11 08:00 200000.0 200000.0 49.98 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +es 2 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +es 2 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +es 2 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +es 2 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +es 2 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +es 2 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +es 2 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +es 2 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +es 2 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +es 2 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +es 2 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +es 2 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +es 2 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +es 2 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +es 2 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +es 2 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +es 2 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +es 2 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +es 2 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +es 2 269 01/12 04:00 300000.0 300000.0 59.98 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +es 2 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +es 2 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +es 2 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +es 2 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +es 2 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +es 2 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +es 2 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +es 2 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +es 2 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +es 2 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +es 2 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +es 2 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +es 2 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +es 2 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +es 2 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +es 2 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +es 2 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +es 2 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +es 2 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +es 2 289 01/13 00:00 420000.0 420000.0 69.98 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +es 2 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +es 2 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +es 2 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +es 2 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +es 2 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +es 2 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +es 2 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +es 2 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +es 2 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +es 2 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +es 2 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +es 2 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +es 2 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +es 2 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +es 2 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +es 2 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +es 2 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +es 2 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +es 2 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +es 2 309 01/13 20:00 560000.0 560000.0 79.98 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +es 2 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +es 2 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +es 2 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +es 2 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +es 2 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +es 2 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +es 2 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +es 2 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +es 2 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +es 2 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +es 2 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +es 2 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +es 2 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +es 2 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +es 2 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +es 2 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +es 2 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +es 2 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +es 2 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +es 2 329 01/14 16:00 720000.0 720000.0 89.98 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +es 2 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +es 2 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +es 2 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +es 2 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +es 2 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +es 2 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +es 2 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +fr 2 1 01/01 00:00 0.0 0.0 9.99 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +fr 2 2 01/01 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +fr 2 3 01/01 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +fr 2 4 01/01 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +fr 2 5 01/01 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +fr 2 6 01/01 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +fr 2 7 01/01 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +fr 2 8 01/01 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +fr 2 9 01/01 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +fr 2 10 01/01 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +fr 2 11 01/01 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +fr 2 12 01/01 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +fr 2 13 01/01 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +fr 2 14 01/01 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +fr 2 15 01/01 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +fr 2 16 01/01 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +fr 2 17 01/01 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +fr 2 18 01/01 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +fr 2 19 01/01 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +fr 2 20 01/01 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +fr 2 21 01/01 20:00 20000.0 20000.0 19.99 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +fr 2 22 01/01 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +fr 2 23 01/01 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +fr 2 24 01/01 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +fr 2 25 01/02 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +fr 2 26 01/02 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +fr 2 27 01/02 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +fr 2 28 01/02 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +fr 2 29 01/02 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +fr 2 30 01/02 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +fr 2 31 01/02 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +fr 2 32 01/02 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +fr 2 33 01/02 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +fr 2 34 01/02 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +fr 2 35 01/02 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +fr 2 36 01/02 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +fr 2 37 01/02 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +fr 2 38 01/02 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +fr 2 39 01/02 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +fr 2 40 01/02 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +fr 2 41 01/02 16:00 60000.0 60000.0 29.99 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +fr 2 42 01/02 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +fr 2 43 01/02 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +fr 2 44 01/02 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +fr 2 45 01/02 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +fr 2 46 01/02 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +fr 2 47 01/02 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +fr 2 48 01/02 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +fr 2 49 01/03 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +fr 2 50 01/03 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +fr 2 51 01/03 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +fr 2 52 01/03 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +fr 2 53 01/03 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +fr 2 54 01/03 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +fr 2 55 01/03 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +fr 2 56 01/03 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +fr 2 57 01/03 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +fr 2 58 01/03 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +fr 2 59 01/03 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +fr 2 60 01/03 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +fr 2 61 01/03 12:00 120000.0 120000.0 39.99 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +fr 2 62 01/03 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +fr 2 63 01/03 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +fr 2 64 01/03 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +fr 2 65 01/03 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +fr 2 66 01/03 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +fr 2 67 01/03 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +fr 2 68 01/03 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +fr 2 69 01/03 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +fr 2 70 01/03 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +fr 2 71 01/03 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +fr 2 72 01/03 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +fr 2 73 01/04 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +fr 2 74 01/04 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +fr 2 75 01/04 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +fr 2 76 01/04 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +fr 2 77 01/04 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +fr 2 78 01/04 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +fr 2 79 01/04 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +fr 2 80 01/04 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +fr 2 81 01/04 08:00 200000.0 200000.0 49.99 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +fr 2 82 01/04 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +fr 2 83 01/04 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +fr 2 84 01/04 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +fr 2 85 01/04 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +fr 2 86 01/04 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +fr 2 87 01/04 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +fr 2 88 01/04 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +fr 2 89 01/04 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +fr 2 90 01/04 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +fr 2 91 01/04 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +fr 2 92 01/04 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +fr 2 93 01/04 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +fr 2 94 01/04 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +fr 2 95 01/04 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +fr 2 96 01/04 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +fr 2 97 01/05 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +fr 2 98 01/05 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +fr 2 99 01/05 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +fr 2 100 01/05 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +fr 2 101 01/05 04:00 300000.0 300000.0 59.99 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +fr 2 102 01/05 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +fr 2 103 01/05 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +fr 2 104 01/05 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +fr 2 105 01/05 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +fr 2 106 01/05 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +fr 2 107 01/05 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +fr 2 108 01/05 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +fr 2 109 01/05 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +fr 2 110 01/05 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +fr 2 111 01/05 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +fr 2 112 01/05 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +fr 2 113 01/05 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +fr 2 114 01/05 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +fr 2 115 01/05 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +fr 2 116 01/05 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +fr 2 117 01/05 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +fr 2 118 01/05 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +fr 2 119 01/05 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +fr 2 120 01/05 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +fr 2 121 01/06 00:00 420000.0 420000.0 69.99 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +fr 2 122 01/06 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +fr 2 123 01/06 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +fr 2 124 01/06 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +fr 2 125 01/06 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +fr 2 126 01/06 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +fr 2 127 01/06 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +fr 2 128 01/06 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +fr 2 129 01/06 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +fr 2 130 01/06 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +fr 2 131 01/06 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +fr 2 132 01/06 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +fr 2 133 01/06 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +fr 2 134 01/06 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +fr 2 135 01/06 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +fr 2 136 01/06 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +fr 2 137 01/06 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +fr 2 138 01/06 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +fr 2 139 01/06 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +fr 2 140 01/06 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +fr 2 141 01/06 20:00 560000.0 560000.0 79.99 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +fr 2 142 01/06 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +fr 2 143 01/06 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +fr 2 144 01/06 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +fr 2 145 01/07 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +fr 2 146 01/07 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +fr 2 147 01/07 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +fr 2 148 01/07 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +fr 2 149 01/07 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +fr 2 150 01/07 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +fr 2 151 01/07 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +fr 2 152 01/07 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +fr 2 153 01/07 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +fr 2 154 01/07 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +fr 2 155 01/07 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +fr 2 156 01/07 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +fr 2 157 01/07 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +fr 2 158 01/07 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +fr 2 159 01/07 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +fr 2 160 01/07 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +fr 2 161 01/07 16:00 720000.0 720000.0 89.99 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +fr 2 162 01/07 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +fr 2 163 01/07 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +fr 2 164 01/07 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +fr 2 165 01/07 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +fr 2 166 01/07 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +fr 2 167 01/07 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +fr 2 168 01/07 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 +fr 2 169 01/08 00:00 0.0 0.0 9.99 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 18000.0 18000.0 0.0 0.0 +fr 2 170 01/08 01:00 1000.0 1000.0 10.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17900.0 17900.0 0.0 1.0 +fr 2 171 01/08 02:00 2000.0 2000.0 10.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17800.0 17800.0 0.0 1.0 +fr 2 172 01/08 03:00 3000.0 3000.0 10.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17700.0 17700.0 0.0 1.0 +fr 2 173 01/08 04:00 4000.0 4000.0 10.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17600.0 17600.0 0.0 1.0 +fr 2 174 01/08 05:00 5000.0 5000.0 10.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17500.0 17500.0 0.0 1.0 +fr 2 175 01/08 06:00 6000.0 6000.0 10.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17400.0 17400.0 0.0 1.0 +fr 2 176 01/08 07:00 7000.0 7000.0 10.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17300.0 17300.0 0.0 1.0 +fr 2 177 01/08 08:00 8000.0 8000.0 10.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17200.0 17200.0 0.0 1.0 +fr 2 178 01/08 09:00 9000.0 9000.0 10.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17100.0 17100.0 0.0 1.0 +fr 2 179 01/08 10:00 10000.0 10000.0 10.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 17000.0 17000.0 0.0 1.0 +fr 2 180 01/08 11:00 11000.0 11000.0 10.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16900.0 16900.0 0.0 1.0 +fr 2 181 01/08 12:00 12000.0 12000.0 10.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16800.0 16800.0 0.0 1.0 +fr 2 182 01/08 13:00 13000.0 13000.0 10.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16700.0 16700.0 0.0 1.0 +fr 2 183 01/08 14:00 14000.0 14000.0 10.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16600.0 16600.0 0.0 1.0 +fr 2 184 01/08 15:00 15000.0 15000.0 10.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16500.0 16500.0 0.0 1.0 +fr 2 185 01/08 16:00 16000.0 16000.0 10.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16400.0 16400.0 0.0 1.0 +fr 2 186 01/08 17:00 17000.0 17000.0 10.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16300.0 16300.0 0.0 1.0 +fr 2 187 01/08 18:00 18000.0 18000.0 10.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16200.0 16200.0 0.0 1.0 +fr 2 188 01/08 19:00 19000.0 19000.0 10.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16100.0 16100.0 0.0 1.0 +fr 2 189 01/08 20:00 20000.0 20000.0 19.99 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 16000.0 16000.0 0.0 1.0 +fr 2 190 01/08 21:00 22000.0 22000.0 20.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15900.0 15900.0 0.0 2.0 +fr 2 191 01/08 22:00 24000.0 24000.0 20.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15800.0 15800.0 0.0 2.0 +fr 2 192 01/08 23:00 26000.0 26000.0 20.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15700.0 15700.0 0.0 2.0 +fr 2 193 01/09 00:00 28000.0 28000.0 20.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15600.0 15600.0 0.0 2.0 +fr 2 194 01/09 01:00 30000.0 30000.0 20.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15500.0 15500.0 0.0 2.0 +fr 2 195 01/09 02:00 32000.0 32000.0 20.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15400.0 15400.0 0.0 2.0 +fr 2 196 01/09 03:00 34000.0 34000.0 20.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15300.0 15300.0 0.0 2.0 +fr 2 197 01/09 04:00 36000.0 36000.0 20.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15200.0 15200.0 0.0 2.0 +fr 2 198 01/09 05:00 38000.0 38000.0 20.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15100.0 15100.0 0.0 2.0 +fr 2 199 01/09 06:00 40000.0 40000.0 20.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 15000.0 15000.0 0.0 2.0 +fr 2 200 01/09 07:00 42000.0 42000.0 20.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14900.0 14900.0 0.0 2.0 +fr 2 201 01/09 08:00 44000.0 44000.0 20.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14800.0 14800.0 0.0 2.0 +fr 2 202 01/09 09:00 46000.0 46000.0 20.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14700.0 14700.0 0.0 2.0 +fr 2 203 01/09 10:00 48000.0 48000.0 20.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14600.0 14600.0 0.0 2.0 +fr 2 204 01/09 11:00 50000.0 50000.0 20.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14500.0 14500.0 0.0 2.0 +fr 2 205 01/09 12:00 52000.0 52000.0 20.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14400.0 14400.0 0.0 2.0 +fr 2 206 01/09 13:00 54000.0 54000.0 20.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14300.0 14300.0 0.0 2.0 +fr 2 207 01/09 14:00 56000.0 56000.0 20.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14200.0 14200.0 0.0 2.0 +fr 2 208 01/09 15:00 58000.0 58000.0 20.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14100.0 14100.0 0.0 2.0 +fr 2 209 01/09 16:00 60000.0 60000.0 29.99 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 14000.0 14000.0 0.0 2.0 +fr 2 210 01/09 17:00 63000.0 63000.0 30.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13900.0 13900.0 0.0 3.0 +fr 2 211 01/09 18:00 66000.0 66000.0 30.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13800.0 13800.0 0.0 3.0 +fr 2 212 01/09 19:00 69000.0 69000.0 30.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13700.0 13700.0 0.0 3.0 +fr 2 213 01/09 20:00 72000.0 72000.0 30.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13600.0 13600.0 0.0 3.0 +fr 2 214 01/09 21:00 75000.0 75000.0 30.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13500.0 13500.0 0.0 3.0 +fr 2 215 01/09 22:00 78000.0 78000.0 30.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13400.0 13400.0 0.0 3.0 +fr 2 216 01/09 23:00 81000.0 81000.0 30.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13300.0 13300.0 0.0 3.0 +fr 2 217 01/10 00:00 84000.0 84000.0 30.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13200.0 13200.0 0.0 3.0 +fr 2 218 01/10 01:00 87000.0 87000.0 30.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13100.0 13100.0 0.0 3.0 +fr 2 219 01/10 02:00 90000.0 90000.0 30.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 13000.0 13000.0 0.0 3.0 +fr 2 220 01/10 03:00 93000.0 93000.0 30.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12900.0 12900.0 0.0 3.0 +fr 2 221 01/10 04:00 96000.0 96000.0 30.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12800.0 12800.0 0.0 3.0 +fr 2 222 01/10 05:00 99000.0 99000.0 30.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12700.0 12700.0 0.0 3.0 +fr 2 223 01/10 06:00 102000.0 102000.0 30.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12600.0 12600.0 0.0 3.0 +fr 2 224 01/10 07:00 105000.0 105000.0 30.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12500.0 12500.0 0.0 3.0 +fr 2 225 01/10 08:00 108000.0 108000.0 30.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12400.0 12400.0 0.0 3.0 +fr 2 226 01/10 09:00 111000.0 111000.0 30.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12300.0 12300.0 0.0 3.0 +fr 2 227 01/10 10:00 114000.0 114000.0 30.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12200.0 12200.0 0.0 3.0 +fr 2 228 01/10 11:00 117000.0 117000.0 30.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12100.0 12100.0 0.0 3.0 +fr 2 229 01/10 12:00 120000.0 120000.0 39.99 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 12000.0 12000.0 0.0 3.0 +fr 2 230 01/10 13:00 124000.0 124000.0 40.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11900.0 11900.0 0.0 4.0 +fr 2 231 01/10 14:00 128000.0 128000.0 40.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11800.0 11800.0 0.0 4.0 +fr 2 232 01/10 15:00 132000.0 132000.0 40.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11700.0 11700.0 0.0 4.0 +fr 2 233 01/10 16:00 136000.0 136000.0 40.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11600.0 11600.0 0.0 4.0 +fr 2 234 01/10 17:00 140000.0 140000.0 40.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11500.0 11500.0 0.0 4.0 +fr 2 235 01/10 18:00 144000.0 144000.0 40.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11400.0 11400.0 0.0 4.0 +fr 2 236 01/10 19:00 148000.0 148000.0 40.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11300.0 11300.0 0.0 4.0 +fr 2 237 01/10 20:00 152000.0 152000.0 40.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11200.0 11200.0 0.0 4.0 +fr 2 238 01/10 21:00 156000.0 156000.0 40.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11100.0 11100.0 0.0 4.0 +fr 2 239 01/10 22:00 160000.0 160000.0 40.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 11000.0 11000.0 0.0 4.0 +fr 2 240 01/10 23:00 164000.0 164000.0 40.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10900.0 10900.0 0.0 4.0 +fr 2 241 01/11 00:00 168000.0 168000.0 40.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10800.0 10800.0 0.0 4.0 +fr 2 242 01/11 01:00 172000.0 172000.0 40.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10700.0 10700.0 0.0 4.0 +fr 2 243 01/11 02:00 176000.0 176000.0 40.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10600.0 10600.0 0.0 4.0 +fr 2 244 01/11 03:00 180000.0 180000.0 40.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10500.0 10500.0 0.0 4.0 +fr 2 245 01/11 04:00 184000.0 184000.0 40.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10400.0 10400.0 0.0 4.0 +fr 2 246 01/11 05:00 188000.0 188000.0 40.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10300.0 10300.0 0.0 4.0 +fr 2 247 01/11 06:00 192000.0 192000.0 40.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10200.0 10200.0 0.0 4.0 +fr 2 248 01/11 07:00 196000.0 196000.0 40.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10100.0 10100.0 0.0 4.0 +fr 2 249 01/11 08:00 200000.0 200000.0 49.99 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 10000.0 10000.0 0.0 4.0 +fr 2 250 01/11 09:00 205000.0 205000.0 50.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9900.0 9900.0 0.0 5.0 +fr 2 251 01/11 10:00 210000.0 210000.0 50.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9800.0 9800.0 0.0 5.0 +fr 2 252 01/11 11:00 215000.0 215000.0 50.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9700.0 9700.0 0.0 5.0 +fr 2 253 01/11 12:00 220000.0 220000.0 50.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9600.0 9600.0 0.0 5.0 +fr 2 254 01/11 13:00 225000.0 225000.0 50.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9500.0 9500.0 0.0 5.0 +fr 2 255 01/11 14:00 230000.0 230000.0 50.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9400.0 9400.0 0.0 5.0 +fr 2 256 01/11 15:00 235000.0 235000.0 50.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9300.0 9300.0 0.0 5.0 +fr 2 257 01/11 16:00 240000.0 240000.0 50.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9200.0 9200.0 0.0 5.0 +fr 2 258 01/11 17:00 245000.0 245000.0 50.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9100.0 9100.0 0.0 5.0 +fr 2 259 01/11 18:00 250000.0 250000.0 50.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 9000.0 9000.0 0.0 5.0 +fr 2 260 01/11 19:00 255000.0 255000.0 50.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8900.0 8900.0 0.0 5.0 +fr 2 261 01/11 20:00 260000.0 260000.0 50.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8800.0 8800.0 0.0 5.0 +fr 2 262 01/11 21:00 265000.0 265000.0 50.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8700.0 8700.0 0.0 5.0 +fr 2 263 01/11 22:00 270000.0 270000.0 50.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8600.0 8600.0 0.0 5.0 +fr 2 264 01/11 23:00 275000.0 275000.0 50.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8500.0 8500.0 0.0 5.0 +fr 2 265 01/12 00:00 280000.0 280000.0 50.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8400.0 8400.0 0.0 5.0 +fr 2 266 01/12 01:00 285000.0 285000.0 50.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8300.0 8300.0 0.0 5.0 +fr 2 267 01/12 02:00 290000.0 290000.0 50.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8200.0 8200.0 0.0 5.0 +fr 2 268 01/12 03:00 295000.0 295000.0 50.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8100.0 8100.0 0.0 5.0 +fr 2 269 01/12 04:00 300000.0 300000.0 59.99 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 8000.0 8000.0 0.0 5.0 +fr 2 270 01/12 05:00 306000.0 306000.0 60.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7900.0 7900.0 0.0 6.0 +fr 2 271 01/12 06:00 312000.0 312000.0 60.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7800.0 7800.0 0.0 6.0 +fr 2 272 01/12 07:00 318000.0 318000.0 60.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7700.0 7700.0 0.0 6.0 +fr 2 273 01/12 08:00 324000.0 324000.0 60.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7600.0 7600.0 0.0 6.0 +fr 2 274 01/12 09:00 330000.0 330000.0 60.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7500.0 7500.0 0.0 6.0 +fr 2 275 01/12 10:00 336000.0 336000.0 60.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7400.0 7400.0 0.0 6.0 +fr 2 276 01/12 11:00 342000.0 342000.0 60.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7300.0 7300.0 0.0 6.0 +fr 2 277 01/12 12:00 348000.0 348000.0 60.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7200.0 7200.0 0.0 6.0 +fr 2 278 01/12 13:00 354000.0 354000.0 60.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7100.0 7100.0 0.0 6.0 +fr 2 279 01/12 14:00 360000.0 360000.0 60.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 7000.0 7000.0 0.0 6.0 +fr 2 280 01/12 15:00 366000.0 366000.0 60.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6900.0 6900.0 0.0 6.0 +fr 2 281 01/12 16:00 372000.0 372000.0 60.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6800.0 6800.0 0.0 6.0 +fr 2 282 01/12 17:00 378000.0 378000.0 60.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6700.0 6700.0 0.0 6.0 +fr 2 283 01/12 18:00 384000.0 384000.0 60.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6600.0 6600.0 0.0 6.0 +fr 2 284 01/12 19:00 390000.0 390000.0 60.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6500.0 6500.0 0.0 6.0 +fr 2 285 01/12 20:00 396000.0 396000.0 60.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6400.0 6400.0 0.0 6.0 +fr 2 286 01/12 21:00 402000.0 402000.0 60.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6300.0 6300.0 0.0 6.0 +fr 2 287 01/12 22:00 408000.0 408000.0 60.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6200.0 6200.0 0.0 6.0 +fr 2 288 01/12 23:00 414000.0 414000.0 60.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 11900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6100.0 6100.0 0.0 6.0 +fr 2 289 01/13 00:00 420000.0 420000.0 69.99 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 6000.0 6000.0 0.0 6.0 +fr 2 290 01/13 01:00 427000.0 427000.0 70.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5900.0 5900.0 0.0 7.0 +fr 2 291 01/13 02:00 434000.0 434000.0 70.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5800.0 5800.0 0.0 7.0 +fr 2 292 01/13 03:00 441000.0 441000.0 70.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5700.0 5700.0 0.0 7.0 +fr 2 293 01/13 04:00 448000.0 448000.0 70.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5600.0 5600.0 0.0 7.0 +fr 2 294 01/13 05:00 455000.0 455000.0 70.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5500.0 5500.0 0.0 7.0 +fr 2 295 01/13 06:00 462000.0 462000.0 70.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5400.0 5400.0 0.0 7.0 +fr 2 296 01/13 07:00 469000.0 469000.0 70.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5300.0 5300.0 0.0 7.0 +fr 2 297 01/13 08:00 476000.0 476000.0 70.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5200.0 5200.0 0.0 7.0 +fr 2 298 01/13 09:00 483000.0 483000.0 70.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5100.0 5100.0 0.0 7.0 +fr 2 299 01/13 10:00 490000.0 490000.0 70.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 5000.0 5000.0 0.0 7.0 +fr 2 300 01/13 11:00 497000.0 497000.0 70.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4900.0 4900.0 0.0 7.0 +fr 2 301 01/13 12:00 504000.0 504000.0 70.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4800.0 4800.0 0.0 7.0 +fr 2 302 01/13 13:00 511000.0 511000.0 70.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4700.0 4700.0 0.0 7.0 +fr 2 303 01/13 14:00 518000.0 518000.0 70.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4600.0 4600.0 0.0 7.0 +fr 2 304 01/13 15:00 525000.0 525000.0 70.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4500.0 4500.0 0.0 7.0 +fr 2 305 01/13 16:00 532000.0 532000.0 70.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4400.0 4400.0 0.0 7.0 +fr 2 306 01/13 17:00 539000.0 539000.0 70.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4300.0 4300.0 0.0 7.0 +fr 2 307 01/13 18:00 546000.0 546000.0 70.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4200.0 4200.0 0.0 7.0 +fr 2 308 01/13 19:00 553000.0 553000.0 70.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 13900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4100.0 4100.0 0.0 7.0 +fr 2 309 01/13 20:00 560000.0 560000.0 79.99 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 4000.0 4000.0 0.0 7.0 +fr 2 310 01/13 21:00 568000.0 568000.0 80.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3900.0 3900.0 0.0 8.0 +fr 2 311 01/13 22:00 576000.0 576000.0 80.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3800.0 3800.0 0.0 8.0 +fr 2 312 01/13 23:00 584000.0 584000.0 80.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3700.0 3700.0 0.0 8.0 +fr 2 313 01/14 00:00 592000.0 592000.0 80.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3600.0 3600.0 0.0 8.0 +fr 2 314 01/14 01:00 600000.0 600000.0 80.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3500.0 3500.0 0.0 8.0 +fr 2 315 01/14 02:00 608000.0 608000.0 80.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3400.0 3400.0 0.0 8.0 +fr 2 316 01/14 03:00 616000.0 616000.0 80.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3300.0 3300.0 0.0 8.0 +fr 2 317 01/14 04:00 624000.0 624000.0 80.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3200.0 3200.0 0.0 8.0 +fr 2 318 01/14 05:00 632000.0 632000.0 80.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 14900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3100.0 3100.0 0.0 8.0 +fr 2 319 01/14 06:00 640000.0 640000.0 80.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 3000.0 3000.0 0.0 8.0 +fr 2 320 01/14 07:00 648000.0 648000.0 80.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2900.0 2900.0 0.0 8.0 +fr 2 321 01/14 08:00 656000.0 656000.0 80.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2800.0 2800.0 0.0 8.0 +fr 2 322 01/14 09:00 664000.0 664000.0 80.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2700.0 2700.0 0.0 8.0 +fr 2 323 01/14 10:00 672000.0 672000.0 80.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2600.0 2600.0 0.0 8.0 +fr 2 324 01/14 11:00 680000.0 680000.0 80.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2500.0 2500.0 0.0 8.0 +fr 2 325 01/14 12:00 688000.0 688000.0 80.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2400.0 2400.0 0.0 8.0 +fr 2 326 01/14 13:00 696000.0 696000.0 80.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2300.0 2300.0 0.0 8.0 +fr 2 327 01/14 14:00 704000.0 704000.0 80.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15800.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2200.0 2200.0 0.0 8.0 +fr 2 328 01/14 15:00 712000.0 712000.0 80.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15900.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2100.0 2100.0 0.0 8.0 +fr 2 329 01/14 16:00 720000.0 720000.0 89.99 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 2000.0 2000.0 0.0 8.0 +fr 2 330 01/14 17:00 729000.0 729000.0 90.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1900.0 1900.0 0.0 9.0 +fr 2 331 01/14 18:00 738000.0 738000.0 90.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16200.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1800.0 1800.0 0.0 9.0 +fr 2 332 01/14 19:00 747000.0 747000.0 90.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16300.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1700.0 1700.0 0.0 9.0 +fr 2 333 01/14 20:00 756000.0 756000.0 90.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16400.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1600.0 1600.0 0.0 9.0 +fr 2 334 01/14 21:00 765000.0 765000.0 90.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16500.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1500.0 1500.0 0.0 9.0 +fr 2 335 01/14 22:00 774000.0 774000.0 90.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1400.0 1400.0 0.0 9.0 +fr 2 336 01/14 23:00 783000.0 783000.0 90.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 16700.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 18000.0 1300.0 1300.0 0.0 9.0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-05.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-05.result.tsv new file mode 100644 index 0000000000..61ff1bf485 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-05.result.tsv @@ -0,0 +1,5 @@ +area mcYear timeId time OV. COST OP. COST MRG. PRICE CO2 EMIS. BALANCE ROW BAL. PSP MISC. NDG LOAD H. ROR WIND SOLAR NUCLEAR LIGNITE COAL GAS OIL MIX. FUEL MISC. DTG H. STOR H. PUMP H. LEV H. INFL H. OVFL H. VAL H. COST UNSP. ENRG SPIL. ENRG LOLD LOLP AVL DTG DTG MRG MAX MRG NP COST NODU +de 1 1 2030 92904000.0 92904000.0 47.14 0.0 0.0 0.0 0.0 0.0 2805600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2805600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6048000.0 3242400.0 3242400.0 0.0 1566.0 +es 1 1 2030 92904000.0 92904000.0 47.14 0.0 0.0 0.0 0.0 0.0 2805600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2805600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6048000.0 3242400.0 3242400.0 0.0 1566.0 +de 2 1 2030 92904000.0 92904000.0 47.14 0.0 0.0 0.0 0.0 0.0 2805600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2805600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6048000.0 3242400.0 3242400.0 0.0 1566.0 +es 2 1 2030 92904000.0 92904000.0 47.14 0.0 0.0 0.0 0.0 0.0 2805600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2805600.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6048000.0 3242400.0 3242400.0 0.0 1566.0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_links_raw_data/test-01.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_links_raw_data/test-01.result.tsv new file mode 100644 index 0000000000..fc82eb62c5 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_links_raw_data/test-01.result.tsv @@ -0,0 +1,2017 @@ +link mcYear timeId time FLOW LIN. UCAP LIN. LOOP FLOW FLOW QUAD. CONG. FEE (ALG.) CONG. FEE (ABS.) MARG. COST CONG. PROB + CONG. PROB - HURDLE COST +de - fr 1 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 2 01/01 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 3 01/01 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 4 01/01 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 5 01/01 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 6 01/01 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 7 01/01 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 8 01/01 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 9 01/01 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 10 01/01 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 11 01/01 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 12 01/01 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 13 01/01 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 14 01/01 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 15 01/01 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 16 01/01 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 17 01/01 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 18 01/01 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 19 01/01 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 20 01/01 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 21 01/01 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 22 01/01 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 23 01/01 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 24 01/01 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 25 01/02 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 26 01/02 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 27 01/02 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 28 01/02 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 29 01/02 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 30 01/02 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 31 01/02 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 32 01/02 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 33 01/02 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 34 01/02 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 35 01/02 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 36 01/02 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 37 01/02 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 38 01/02 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 39 01/02 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 40 01/02 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 41 01/02 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 42 01/02 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 43 01/02 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 44 01/02 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 45 01/02 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 46 01/02 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 47 01/02 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 48 01/02 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 49 01/03 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 50 01/03 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 51 01/03 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 52 01/03 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 53 01/03 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 54 01/03 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 55 01/03 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 56 01/03 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 57 01/03 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 58 01/03 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 59 01/03 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 60 01/03 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 61 01/03 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 62 01/03 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 63 01/03 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 64 01/03 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 65 01/03 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 66 01/03 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 67 01/03 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 68 01/03 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 69 01/03 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 70 01/03 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 71 01/03 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 72 01/03 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 73 01/04 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 74 01/04 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 75 01/04 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 76 01/04 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 77 01/04 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 78 01/04 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 79 01/04 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 80 01/04 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 81 01/04 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 82 01/04 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 83 01/04 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 84 01/04 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 85 01/04 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 86 01/04 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 87 01/04 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 88 01/04 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 89 01/04 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 90 01/04 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 91 01/04 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 92 01/04 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 93 01/04 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 94 01/04 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 95 01/04 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 96 01/04 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 97 01/05 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 98 01/05 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 99 01/05 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 100 01/05 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 101 01/05 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 102 01/05 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 103 01/05 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 104 01/05 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 105 01/05 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 106 01/05 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 107 01/05 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 108 01/05 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 109 01/05 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 110 01/05 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 111 01/05 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 112 01/05 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 113 01/05 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 114 01/05 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 115 01/05 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 116 01/05 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 117 01/05 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 118 01/05 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 119 01/05 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 120 01/05 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 121 01/06 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 122 01/06 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 123 01/06 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 124 01/06 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 125 01/06 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 126 01/06 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 127 01/06 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 128 01/06 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 129 01/06 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 130 01/06 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 131 01/06 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 132 01/06 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 133 01/06 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 134 01/06 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 135 01/06 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 136 01/06 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 137 01/06 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 138 01/06 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 139 01/06 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 140 01/06 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 141 01/06 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 142 01/06 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 143 01/06 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 144 01/06 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 145 01/07 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 146 01/07 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 147 01/07 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 148 01/07 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 149 01/07 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 150 01/07 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 151 01/07 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 152 01/07 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 153 01/07 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 154 01/07 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 155 01/07 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 156 01/07 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 157 01/07 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 158 01/07 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 159 01/07 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 160 01/07 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 161 01/07 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 162 01/07 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 163 01/07 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 164 01/07 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 165 01/07 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 166 01/07 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 167 01/07 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 168 01/07 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 170 01/08 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 171 01/08 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 172 01/08 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 173 01/08 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 174 01/08 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 175 01/08 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 176 01/08 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 177 01/08 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 178 01/08 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 179 01/08 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 180 01/08 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 181 01/08 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 182 01/08 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 183 01/08 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 184 01/08 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 185 01/08 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 186 01/08 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 187 01/08 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 188 01/08 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 189 01/08 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 190 01/08 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 191 01/08 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 192 01/08 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 193 01/09 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 194 01/09 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 195 01/09 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 196 01/09 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 197 01/09 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 198 01/09 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 199 01/09 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 200 01/09 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 201 01/09 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 202 01/09 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 203 01/09 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 204 01/09 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 205 01/09 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 206 01/09 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 207 01/09 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 208 01/09 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 209 01/09 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 210 01/09 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 211 01/09 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 212 01/09 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 213 01/09 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 214 01/09 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 215 01/09 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 216 01/09 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 217 01/10 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 218 01/10 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 219 01/10 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 220 01/10 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 221 01/10 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 222 01/10 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 223 01/10 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 224 01/10 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 225 01/10 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 226 01/10 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 227 01/10 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 228 01/10 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 229 01/10 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 230 01/10 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 231 01/10 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 232 01/10 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 233 01/10 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 234 01/10 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 235 01/10 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 236 01/10 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 237 01/10 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 238 01/10 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 239 01/10 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 240 01/10 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 241 01/11 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 242 01/11 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 243 01/11 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 244 01/11 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 245 01/11 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 246 01/11 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 247 01/11 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 248 01/11 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 249 01/11 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 250 01/11 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 251 01/11 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 252 01/11 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 253 01/11 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 254 01/11 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 255 01/11 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 256 01/11 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 257 01/11 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 258 01/11 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 259 01/11 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 260 01/11 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 261 01/11 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 262 01/11 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 263 01/11 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 264 01/11 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 265 01/12 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 266 01/12 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 267 01/12 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 268 01/12 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 269 01/12 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 270 01/12 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 271 01/12 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 272 01/12 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 273 01/12 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 274 01/12 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 275 01/12 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 276 01/12 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 277 01/12 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 278 01/12 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 279 01/12 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 280 01/12 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 281 01/12 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 282 01/12 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 283 01/12 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 284 01/12 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 285 01/12 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 286 01/12 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 287 01/12 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 288 01/12 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 289 01/13 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 290 01/13 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 291 01/13 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 292 01/13 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 293 01/13 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 294 01/13 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 295 01/13 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 296 01/13 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 297 01/13 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 298 01/13 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 299 01/13 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 300 01/13 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 301 01/13 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 302 01/13 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 303 01/13 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 304 01/13 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 305 01/13 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 306 01/13 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 307 01/13 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 308 01/13 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 309 01/13 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 310 01/13 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 311 01/13 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 312 01/13 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 313 01/14 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 314 01/14 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 315 01/14 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 316 01/14 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 317 01/14 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 318 01/14 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 319 01/14 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 320 01/14 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 321 01/14 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 322 01/14 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 323 01/14 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 324 01/14 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 325 01/14 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 326 01/14 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 327 01/14 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 328 01/14 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 329 01/14 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 330 01/14 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 331 01/14 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 332 01/14 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 333 01/14 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 334 01/14 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 335 01/14 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 336 01/14 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 2 01/01 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 3 01/01 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 4 01/01 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 5 01/01 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 6 01/01 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 7 01/01 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 8 01/01 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 9 01/01 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 10 01/01 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 11 01/01 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 12 01/01 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 13 01/01 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 14 01/01 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 15 01/01 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 16 01/01 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 17 01/01 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 18 01/01 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 19 01/01 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 20 01/01 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 21 01/01 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 22 01/01 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 23 01/01 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 24 01/01 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 25 01/02 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 26 01/02 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 27 01/02 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 28 01/02 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 29 01/02 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 30 01/02 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 31 01/02 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 32 01/02 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 33 01/02 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 34 01/02 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 35 01/02 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 36 01/02 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 37 01/02 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 38 01/02 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 39 01/02 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 40 01/02 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 41 01/02 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 42 01/02 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 43 01/02 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 44 01/02 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 45 01/02 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 46 01/02 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 47 01/02 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 48 01/02 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 49 01/03 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 50 01/03 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 51 01/03 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 52 01/03 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 53 01/03 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 54 01/03 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 55 01/03 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 56 01/03 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 57 01/03 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 58 01/03 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 59 01/03 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 60 01/03 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 61 01/03 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 62 01/03 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 63 01/03 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 64 01/03 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 65 01/03 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 66 01/03 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 67 01/03 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 68 01/03 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 69 01/03 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 70 01/03 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 71 01/03 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 72 01/03 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 73 01/04 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 74 01/04 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 75 01/04 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 76 01/04 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 77 01/04 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 78 01/04 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 79 01/04 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 80 01/04 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 81 01/04 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 82 01/04 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 83 01/04 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 84 01/04 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 85 01/04 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 86 01/04 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 87 01/04 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 88 01/04 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 89 01/04 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 90 01/04 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 91 01/04 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 92 01/04 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 93 01/04 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 94 01/04 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 95 01/04 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 96 01/04 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 97 01/05 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 98 01/05 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 99 01/05 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 100 01/05 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 101 01/05 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 102 01/05 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 103 01/05 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 104 01/05 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 105 01/05 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 106 01/05 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 107 01/05 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 108 01/05 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 109 01/05 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 110 01/05 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 111 01/05 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 112 01/05 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 113 01/05 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 114 01/05 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 115 01/05 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 116 01/05 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 117 01/05 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 118 01/05 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 119 01/05 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 120 01/05 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 121 01/06 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 122 01/06 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 123 01/06 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 124 01/06 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 125 01/06 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 126 01/06 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 127 01/06 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 128 01/06 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 129 01/06 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 130 01/06 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 131 01/06 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 132 01/06 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 133 01/06 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 134 01/06 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 135 01/06 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 136 01/06 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 137 01/06 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 138 01/06 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 139 01/06 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 140 01/06 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 141 01/06 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 142 01/06 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 143 01/06 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 144 01/06 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 145 01/07 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 146 01/07 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 147 01/07 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 148 01/07 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 149 01/07 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 150 01/07 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 151 01/07 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 152 01/07 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 153 01/07 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 154 01/07 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 155 01/07 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 156 01/07 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 157 01/07 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 158 01/07 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 159 01/07 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 160 01/07 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 161 01/07 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 162 01/07 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 163 01/07 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 164 01/07 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 165 01/07 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 166 01/07 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 167 01/07 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 168 01/07 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 170 01/08 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 171 01/08 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 172 01/08 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 173 01/08 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 174 01/08 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 175 01/08 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 176 01/08 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 177 01/08 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 178 01/08 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 179 01/08 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 180 01/08 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 181 01/08 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 182 01/08 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 183 01/08 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 184 01/08 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 185 01/08 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 186 01/08 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 187 01/08 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 188 01/08 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 189 01/08 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 190 01/08 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 191 01/08 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 192 01/08 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 193 01/09 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 194 01/09 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 195 01/09 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 196 01/09 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 197 01/09 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 198 01/09 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 199 01/09 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 200 01/09 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 201 01/09 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 202 01/09 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 203 01/09 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 204 01/09 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 205 01/09 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 206 01/09 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 207 01/09 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 208 01/09 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 209 01/09 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 210 01/09 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 211 01/09 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 212 01/09 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 213 01/09 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 214 01/09 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 215 01/09 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 216 01/09 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 217 01/10 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 218 01/10 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 219 01/10 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 220 01/10 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 221 01/10 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 222 01/10 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 223 01/10 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 224 01/10 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 225 01/10 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 226 01/10 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 227 01/10 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 228 01/10 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 229 01/10 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 230 01/10 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 231 01/10 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 232 01/10 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 233 01/10 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 234 01/10 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 235 01/10 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 236 01/10 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 237 01/10 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 238 01/10 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 239 01/10 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 240 01/10 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 241 01/11 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 242 01/11 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 243 01/11 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 244 01/11 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 245 01/11 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 246 01/11 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 247 01/11 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 248 01/11 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 249 01/11 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 250 01/11 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 251 01/11 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 252 01/11 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 253 01/11 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 254 01/11 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 255 01/11 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 256 01/11 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 257 01/11 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 258 01/11 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 259 01/11 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 260 01/11 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 261 01/11 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 262 01/11 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 263 01/11 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 264 01/11 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 265 01/12 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 266 01/12 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 267 01/12 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 268 01/12 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 269 01/12 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 270 01/12 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 271 01/12 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 272 01/12 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 273 01/12 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 274 01/12 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 275 01/12 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 276 01/12 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 277 01/12 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 278 01/12 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 279 01/12 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 280 01/12 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 281 01/12 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 282 01/12 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 283 01/12 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 284 01/12 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 285 01/12 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 286 01/12 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 287 01/12 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 288 01/12 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 289 01/13 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 290 01/13 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 291 01/13 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 292 01/13 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 293 01/13 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 294 01/13 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 295 01/13 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 296 01/13 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 297 01/13 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 298 01/13 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 299 01/13 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 300 01/13 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 301 01/13 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 302 01/13 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 303 01/13 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 304 01/13 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 305 01/13 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 306 01/13 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 307 01/13 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 308 01/13 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 309 01/13 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 310 01/13 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 311 01/13 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 312 01/13 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 313 01/14 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 314 01/14 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 315 01/14 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 316 01/14 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 317 01/14 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 318 01/14 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 319 01/14 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 320 01/14 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 321 01/14 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 322 01/14 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 323 01/14 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 324 01/14 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 325 01/14 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 326 01/14 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 327 01/14 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 328 01/14 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 329 01/14 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 330 01/14 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 331 01/14 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 332 01/14 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 333 01/14 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 334 01/14 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 335 01/14 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 336 01/14 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 2 01/01 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 3 01/01 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 4 01/01 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 5 01/01 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 6 01/01 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 7 01/01 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 8 01/01 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 9 01/01 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 10 01/01 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 11 01/01 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 12 01/01 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 13 01/01 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 14 01/01 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 15 01/01 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 16 01/01 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 17 01/01 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 18 01/01 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 19 01/01 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 20 01/01 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 21 01/01 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 22 01/01 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 23 01/01 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 24 01/01 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 25 01/02 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 26 01/02 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 27 01/02 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 28 01/02 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 29 01/02 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 30 01/02 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 31 01/02 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 32 01/02 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 33 01/02 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 34 01/02 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 35 01/02 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 36 01/02 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 37 01/02 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 38 01/02 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 39 01/02 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 40 01/02 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 41 01/02 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 42 01/02 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 43 01/02 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 44 01/02 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 45 01/02 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 46 01/02 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 47 01/02 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 48 01/02 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 49 01/03 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 50 01/03 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 51 01/03 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 52 01/03 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 53 01/03 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 54 01/03 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 55 01/03 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 56 01/03 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 57 01/03 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 58 01/03 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 59 01/03 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 60 01/03 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 61 01/03 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 62 01/03 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 63 01/03 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 64 01/03 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 65 01/03 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 66 01/03 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 67 01/03 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 68 01/03 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 69 01/03 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 70 01/03 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 71 01/03 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 72 01/03 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 73 01/04 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 74 01/04 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 75 01/04 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 76 01/04 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 77 01/04 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 78 01/04 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 79 01/04 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 80 01/04 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 81 01/04 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 82 01/04 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 83 01/04 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 84 01/04 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 85 01/04 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 86 01/04 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 87 01/04 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 88 01/04 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 89 01/04 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 90 01/04 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 91 01/04 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 92 01/04 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 93 01/04 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 94 01/04 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 95 01/04 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 96 01/04 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 97 01/05 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 98 01/05 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 99 01/05 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 100 01/05 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 101 01/05 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 102 01/05 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 103 01/05 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 104 01/05 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 105 01/05 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 106 01/05 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 107 01/05 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 108 01/05 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 109 01/05 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 110 01/05 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 111 01/05 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 112 01/05 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 113 01/05 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 114 01/05 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 115 01/05 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 116 01/05 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 117 01/05 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 118 01/05 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 119 01/05 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 120 01/05 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 121 01/06 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 122 01/06 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 123 01/06 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 124 01/06 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 125 01/06 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 126 01/06 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 127 01/06 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 128 01/06 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 129 01/06 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 130 01/06 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 131 01/06 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 132 01/06 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 133 01/06 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 134 01/06 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 135 01/06 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 136 01/06 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 137 01/06 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 138 01/06 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 139 01/06 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 140 01/06 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 141 01/06 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 142 01/06 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 143 01/06 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 144 01/06 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 145 01/07 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 146 01/07 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 147 01/07 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 148 01/07 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 149 01/07 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 150 01/07 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 151 01/07 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 152 01/07 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 153 01/07 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 154 01/07 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 155 01/07 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 156 01/07 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 157 01/07 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 158 01/07 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 159 01/07 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 160 01/07 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 161 01/07 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 162 01/07 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 163 01/07 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 164 01/07 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 165 01/07 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 166 01/07 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 167 01/07 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 168 01/07 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 170 01/08 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 171 01/08 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 172 01/08 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 173 01/08 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 174 01/08 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 175 01/08 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 176 01/08 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 177 01/08 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 178 01/08 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 179 01/08 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 180 01/08 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 181 01/08 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 182 01/08 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 183 01/08 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 184 01/08 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 185 01/08 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 186 01/08 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 187 01/08 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 188 01/08 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 189 01/08 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 190 01/08 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 191 01/08 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 192 01/08 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 193 01/09 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 194 01/09 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 195 01/09 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 196 01/09 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 197 01/09 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 198 01/09 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 199 01/09 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 200 01/09 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 201 01/09 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 202 01/09 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 203 01/09 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 204 01/09 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 205 01/09 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 206 01/09 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 207 01/09 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 208 01/09 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 209 01/09 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 210 01/09 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 211 01/09 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 212 01/09 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 213 01/09 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 214 01/09 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 215 01/09 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 216 01/09 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 217 01/10 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 218 01/10 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 219 01/10 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 220 01/10 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 221 01/10 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 222 01/10 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 223 01/10 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 224 01/10 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 225 01/10 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 226 01/10 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 227 01/10 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 228 01/10 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 229 01/10 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 230 01/10 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 231 01/10 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 232 01/10 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 233 01/10 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 234 01/10 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 235 01/10 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 236 01/10 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 237 01/10 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 238 01/10 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 239 01/10 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 240 01/10 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 241 01/11 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 242 01/11 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 243 01/11 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 244 01/11 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 245 01/11 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 246 01/11 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 247 01/11 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 248 01/11 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 249 01/11 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 250 01/11 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 251 01/11 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 252 01/11 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 253 01/11 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 254 01/11 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 255 01/11 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 256 01/11 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 257 01/11 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 258 01/11 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 259 01/11 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 260 01/11 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 261 01/11 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 262 01/11 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 263 01/11 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 264 01/11 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 265 01/12 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 266 01/12 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 267 01/12 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 268 01/12 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 269 01/12 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 270 01/12 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 271 01/12 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 272 01/12 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 273 01/12 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 274 01/12 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 275 01/12 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 276 01/12 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 277 01/12 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 278 01/12 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 279 01/12 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 280 01/12 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 281 01/12 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 282 01/12 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 283 01/12 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 284 01/12 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 285 01/12 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 286 01/12 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 287 01/12 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 288 01/12 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 289 01/13 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 290 01/13 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 291 01/13 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 292 01/13 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 293 01/13 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 294 01/13 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 295 01/13 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 296 01/13 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 297 01/13 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 298 01/13 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 299 01/13 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 300 01/13 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 301 01/13 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 302 01/13 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 303 01/13 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 304 01/13 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 305 01/13 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 306 01/13 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 307 01/13 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 308 01/13 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 309 01/13 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 310 01/13 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 311 01/13 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 312 01/13 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 313 01/14 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 314 01/14 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 315 01/14 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 316 01/14 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 317 01/14 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 318 01/14 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 319 01/14 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 320 01/14 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 321 01/14 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 322 01/14 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 323 01/14 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 324 01/14 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 325 01/14 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 326 01/14 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 327 01/14 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 328 01/14 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 329 01/14 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 330 01/14 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 331 01/14 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 332 01/14 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 333 01/14 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 334 01/14 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 335 01/14 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 336 01/14 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 2 01/01 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 3 01/01 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 4 01/01 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 5 01/01 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 6 01/01 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 7 01/01 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 8 01/01 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 9 01/01 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 10 01/01 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 11 01/01 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 12 01/01 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 13 01/01 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 14 01/01 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 15 01/01 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 16 01/01 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 17 01/01 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 18 01/01 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 19 01/01 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 20 01/01 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 21 01/01 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 22 01/01 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 23 01/01 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 24 01/01 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 25 01/02 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 26 01/02 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 27 01/02 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 28 01/02 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 29 01/02 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 30 01/02 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 31 01/02 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 32 01/02 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 33 01/02 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 34 01/02 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 35 01/02 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 36 01/02 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 37 01/02 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 38 01/02 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 39 01/02 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 40 01/02 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 41 01/02 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 42 01/02 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 43 01/02 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 44 01/02 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 45 01/02 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 46 01/02 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 47 01/02 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 48 01/02 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 49 01/03 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 50 01/03 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 51 01/03 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 52 01/03 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 53 01/03 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 54 01/03 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 55 01/03 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 56 01/03 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 57 01/03 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 58 01/03 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 59 01/03 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 60 01/03 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 61 01/03 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 62 01/03 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 63 01/03 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 64 01/03 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 65 01/03 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 66 01/03 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 67 01/03 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 68 01/03 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 69 01/03 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 70 01/03 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 71 01/03 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 72 01/03 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 73 01/04 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 74 01/04 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 75 01/04 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 76 01/04 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 77 01/04 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 78 01/04 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 79 01/04 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 80 01/04 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 81 01/04 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 82 01/04 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 83 01/04 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 84 01/04 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 85 01/04 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 86 01/04 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 87 01/04 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 88 01/04 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 89 01/04 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 90 01/04 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 91 01/04 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 92 01/04 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 93 01/04 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 94 01/04 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 95 01/04 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 96 01/04 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 97 01/05 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 98 01/05 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 99 01/05 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 100 01/05 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 101 01/05 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 102 01/05 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 103 01/05 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 104 01/05 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 105 01/05 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 106 01/05 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 107 01/05 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 108 01/05 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 109 01/05 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 110 01/05 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 111 01/05 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 112 01/05 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 113 01/05 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 114 01/05 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 115 01/05 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 116 01/05 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 117 01/05 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 118 01/05 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 119 01/05 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 120 01/05 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 121 01/06 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 122 01/06 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 123 01/06 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 124 01/06 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 125 01/06 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 126 01/06 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 127 01/06 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 128 01/06 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 129 01/06 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 130 01/06 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 131 01/06 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 132 01/06 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 133 01/06 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 134 01/06 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 135 01/06 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 136 01/06 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 137 01/06 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 138 01/06 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 139 01/06 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 140 01/06 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 141 01/06 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 142 01/06 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 143 01/06 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 144 01/06 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 145 01/07 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 146 01/07 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 147 01/07 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 148 01/07 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 149 01/07 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 150 01/07 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 151 01/07 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 152 01/07 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 153 01/07 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 154 01/07 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 155 01/07 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 156 01/07 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 157 01/07 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 158 01/07 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 159 01/07 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 160 01/07 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 161 01/07 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 162 01/07 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 163 01/07 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 164 01/07 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 165 01/07 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 166 01/07 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 167 01/07 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 168 01/07 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 170 01/08 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 171 01/08 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 172 01/08 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 173 01/08 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 174 01/08 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 175 01/08 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 176 01/08 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 177 01/08 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 178 01/08 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 179 01/08 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 180 01/08 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 181 01/08 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 182 01/08 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 183 01/08 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 184 01/08 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 185 01/08 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 186 01/08 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 187 01/08 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 188 01/08 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 189 01/08 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 190 01/08 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 191 01/08 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 192 01/08 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 193 01/09 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 194 01/09 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 195 01/09 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 196 01/09 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 197 01/09 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 198 01/09 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 199 01/09 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 200 01/09 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 201 01/09 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 202 01/09 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 203 01/09 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 204 01/09 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 205 01/09 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 206 01/09 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 207 01/09 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 208 01/09 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 209 01/09 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 210 01/09 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 211 01/09 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 212 01/09 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 213 01/09 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 214 01/09 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 215 01/09 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 216 01/09 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 217 01/10 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 218 01/10 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 219 01/10 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 220 01/10 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 221 01/10 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 222 01/10 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 223 01/10 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 224 01/10 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 225 01/10 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 226 01/10 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 227 01/10 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 228 01/10 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 229 01/10 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 230 01/10 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 231 01/10 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 232 01/10 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 233 01/10 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 234 01/10 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 235 01/10 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 236 01/10 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 237 01/10 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 238 01/10 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 239 01/10 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 240 01/10 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 241 01/11 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 242 01/11 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 243 01/11 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 244 01/11 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 245 01/11 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 246 01/11 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 247 01/11 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 248 01/11 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 249 01/11 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 250 01/11 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 251 01/11 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 252 01/11 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 253 01/11 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 254 01/11 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 255 01/11 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 256 01/11 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 257 01/11 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 258 01/11 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 259 01/11 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 260 01/11 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 261 01/11 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 262 01/11 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 263 01/11 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 264 01/11 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 265 01/12 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 266 01/12 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 267 01/12 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 268 01/12 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 269 01/12 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 270 01/12 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 271 01/12 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 272 01/12 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 273 01/12 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 274 01/12 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 275 01/12 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 276 01/12 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 277 01/12 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 278 01/12 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 279 01/12 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 280 01/12 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 281 01/12 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 282 01/12 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 283 01/12 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 284 01/12 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 285 01/12 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 286 01/12 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 287 01/12 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 288 01/12 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 289 01/13 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 290 01/13 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 291 01/13 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 292 01/13 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 293 01/13 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 294 01/13 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 295 01/13 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 296 01/13 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 297 01/13 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 298 01/13 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 299 01/13 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 300 01/13 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 301 01/13 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 302 01/13 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 303 01/13 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 304 01/13 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 305 01/13 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 306 01/13 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 307 01/13 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 308 01/13 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 309 01/13 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 310 01/13 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 311 01/13 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 312 01/13 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 313 01/14 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 314 01/14 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 315 01/14 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 316 01/14 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 317 01/14 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 318 01/14 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 319 01/14 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 320 01/14 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 321 01/14 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 322 01/14 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 323 01/14 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 324 01/14 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 325 01/14 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 326 01/14 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 327 01/14 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 328 01/14 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 329 01/14 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 330 01/14 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 331 01/14 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 332 01/14 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 333 01/14 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 334 01/14 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 335 01/14 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 2 336 01/14 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 2 01/01 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 3 01/01 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 4 01/01 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 5 01/01 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 6 01/01 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 7 01/01 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 8 01/01 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 9 01/01 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 10 01/01 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 11 01/01 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 12 01/01 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 13 01/01 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 14 01/01 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 15 01/01 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 16 01/01 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 17 01/01 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 18 01/01 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 19 01/01 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 20 01/01 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 21 01/01 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 22 01/01 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 23 01/01 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 24 01/01 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 25 01/02 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 26 01/02 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 27 01/02 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 28 01/02 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 29 01/02 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 30 01/02 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 31 01/02 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 32 01/02 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 33 01/02 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 34 01/02 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 35 01/02 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 36 01/02 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 37 01/02 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 38 01/02 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 39 01/02 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 40 01/02 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 41 01/02 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 42 01/02 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 43 01/02 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 44 01/02 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 45 01/02 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 46 01/02 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 47 01/02 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 48 01/02 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 49 01/03 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 50 01/03 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 51 01/03 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 52 01/03 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 53 01/03 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 54 01/03 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 55 01/03 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 56 01/03 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 57 01/03 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 58 01/03 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 59 01/03 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 60 01/03 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 61 01/03 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 62 01/03 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 63 01/03 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 64 01/03 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 65 01/03 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 66 01/03 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 67 01/03 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 68 01/03 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 69 01/03 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 70 01/03 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 71 01/03 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 72 01/03 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 73 01/04 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 74 01/04 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 75 01/04 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 76 01/04 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 77 01/04 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 78 01/04 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 79 01/04 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 80 01/04 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 81 01/04 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 82 01/04 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 83 01/04 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 84 01/04 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 85 01/04 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 86 01/04 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 87 01/04 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 88 01/04 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 89 01/04 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 90 01/04 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 91 01/04 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 92 01/04 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 93 01/04 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 94 01/04 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 95 01/04 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 96 01/04 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 97 01/05 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 98 01/05 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 99 01/05 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 100 01/05 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 101 01/05 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 102 01/05 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 103 01/05 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 104 01/05 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 105 01/05 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 106 01/05 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 107 01/05 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 108 01/05 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 109 01/05 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 110 01/05 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 111 01/05 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 112 01/05 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 113 01/05 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 114 01/05 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 115 01/05 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 116 01/05 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 117 01/05 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 118 01/05 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 119 01/05 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 120 01/05 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 121 01/06 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 122 01/06 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 123 01/06 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 124 01/06 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 125 01/06 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 126 01/06 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 127 01/06 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 128 01/06 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 129 01/06 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 130 01/06 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 131 01/06 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 132 01/06 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 133 01/06 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 134 01/06 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 135 01/06 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 136 01/06 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 137 01/06 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 138 01/06 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 139 01/06 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 140 01/06 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 141 01/06 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 142 01/06 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 143 01/06 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 144 01/06 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 145 01/07 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 146 01/07 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 147 01/07 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 148 01/07 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 149 01/07 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 150 01/07 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 151 01/07 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 152 01/07 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 153 01/07 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 154 01/07 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 155 01/07 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 156 01/07 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 157 01/07 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 158 01/07 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 159 01/07 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 160 01/07 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 161 01/07 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 162 01/07 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 163 01/07 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 164 01/07 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 165 01/07 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 166 01/07 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 167 01/07 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 168 01/07 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 170 01/08 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 171 01/08 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 172 01/08 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 173 01/08 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 174 01/08 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 175 01/08 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 176 01/08 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 177 01/08 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 178 01/08 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 179 01/08 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 180 01/08 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 181 01/08 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 182 01/08 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 183 01/08 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 184 01/08 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 185 01/08 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 186 01/08 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 187 01/08 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 188 01/08 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 189 01/08 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 190 01/08 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 191 01/08 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 192 01/08 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 193 01/09 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 194 01/09 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 195 01/09 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 196 01/09 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 197 01/09 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 198 01/09 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 199 01/09 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 200 01/09 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 201 01/09 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 202 01/09 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 203 01/09 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 204 01/09 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 205 01/09 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 206 01/09 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 207 01/09 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 208 01/09 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 209 01/09 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 210 01/09 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 211 01/09 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 212 01/09 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 213 01/09 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 214 01/09 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 215 01/09 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 216 01/09 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 217 01/10 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 218 01/10 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 219 01/10 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 220 01/10 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 221 01/10 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 222 01/10 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 223 01/10 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 224 01/10 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 225 01/10 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 226 01/10 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 227 01/10 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 228 01/10 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 229 01/10 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 230 01/10 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 231 01/10 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 232 01/10 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 233 01/10 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 234 01/10 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 235 01/10 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 236 01/10 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 237 01/10 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 238 01/10 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 239 01/10 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 240 01/10 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 241 01/11 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 242 01/11 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 243 01/11 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 244 01/11 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 245 01/11 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 246 01/11 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 247 01/11 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 248 01/11 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 249 01/11 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 250 01/11 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 251 01/11 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 252 01/11 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 253 01/11 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 254 01/11 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 255 01/11 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 256 01/11 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 257 01/11 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 258 01/11 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 259 01/11 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 260 01/11 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 261 01/11 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 262 01/11 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 263 01/11 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 264 01/11 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 265 01/12 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 266 01/12 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 267 01/12 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 268 01/12 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 269 01/12 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 270 01/12 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 271 01/12 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 272 01/12 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 273 01/12 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 274 01/12 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 275 01/12 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 276 01/12 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 277 01/12 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 278 01/12 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 279 01/12 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 280 01/12 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 281 01/12 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 282 01/12 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 283 01/12 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 284 01/12 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 285 01/12 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 286 01/12 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 287 01/12 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 288 01/12 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 289 01/13 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 290 01/13 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 291 01/13 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 292 01/13 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 293 01/13 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 294 01/13 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 295 01/13 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 296 01/13 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 297 01/13 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 298 01/13 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 299 01/13 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 300 01/13 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 301 01/13 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 302 01/13 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 303 01/13 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 304 01/13 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 305 01/13 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 306 01/13 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 307 01/13 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 308 01/13 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 309 01/13 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 310 01/13 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 311 01/13 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 312 01/13 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 313 01/14 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 314 01/14 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 315 01/14 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 316 01/14 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 317 01/14 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 318 01/14 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 319 01/14 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 320 01/14 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 321 01/14 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 322 01/14 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 323 01/14 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 324 01/14 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 325 01/14 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 326 01/14 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 327 01/14 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 328 01/14 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 329 01/14 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 330 01/14 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 331 01/14 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 332 01/14 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 333 01/14 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 334 01/14 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 335 01/14 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 2 336 01/14 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 2 01/01 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 3 01/01 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 4 01/01 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 5 01/01 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 6 01/01 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 7 01/01 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 8 01/01 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 9 01/01 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 10 01/01 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 11 01/01 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 12 01/01 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 13 01/01 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 14 01/01 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 15 01/01 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 16 01/01 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 17 01/01 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 18 01/01 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 19 01/01 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 20 01/01 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 21 01/01 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 22 01/01 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 23 01/01 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 24 01/01 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 25 01/02 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 26 01/02 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 27 01/02 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 28 01/02 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 29 01/02 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 30 01/02 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 31 01/02 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 32 01/02 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 33 01/02 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 34 01/02 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 35 01/02 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 36 01/02 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 37 01/02 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 38 01/02 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 39 01/02 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 40 01/02 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 41 01/02 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 42 01/02 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 43 01/02 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 44 01/02 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 45 01/02 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 46 01/02 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 47 01/02 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 48 01/02 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 49 01/03 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 50 01/03 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 51 01/03 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 52 01/03 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 53 01/03 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 54 01/03 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 55 01/03 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 56 01/03 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 57 01/03 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 58 01/03 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 59 01/03 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 60 01/03 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 61 01/03 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 62 01/03 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 63 01/03 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 64 01/03 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 65 01/03 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 66 01/03 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 67 01/03 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 68 01/03 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 69 01/03 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 70 01/03 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 71 01/03 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 72 01/03 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 73 01/04 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 74 01/04 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 75 01/04 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 76 01/04 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 77 01/04 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 78 01/04 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 79 01/04 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 80 01/04 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 81 01/04 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 82 01/04 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 83 01/04 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 84 01/04 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 85 01/04 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 86 01/04 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 87 01/04 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 88 01/04 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 89 01/04 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 90 01/04 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 91 01/04 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 92 01/04 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 93 01/04 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 94 01/04 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 95 01/04 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 96 01/04 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 97 01/05 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 98 01/05 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 99 01/05 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 100 01/05 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 101 01/05 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 102 01/05 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 103 01/05 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 104 01/05 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 105 01/05 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 106 01/05 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 107 01/05 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 108 01/05 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 109 01/05 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 110 01/05 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 111 01/05 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 112 01/05 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 113 01/05 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 114 01/05 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 115 01/05 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 116 01/05 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 117 01/05 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 118 01/05 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 119 01/05 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 120 01/05 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 121 01/06 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 122 01/06 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 123 01/06 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 124 01/06 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 125 01/06 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 126 01/06 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 127 01/06 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 128 01/06 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 129 01/06 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 130 01/06 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 131 01/06 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 132 01/06 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 133 01/06 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 134 01/06 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 135 01/06 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 136 01/06 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 137 01/06 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 138 01/06 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 139 01/06 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 140 01/06 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 141 01/06 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 142 01/06 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 143 01/06 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 144 01/06 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 145 01/07 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 146 01/07 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 147 01/07 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 148 01/07 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 149 01/07 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 150 01/07 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 151 01/07 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 152 01/07 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 153 01/07 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 154 01/07 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 155 01/07 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 156 01/07 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 157 01/07 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 158 01/07 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 159 01/07 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 160 01/07 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 161 01/07 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 162 01/07 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 163 01/07 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 164 01/07 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 165 01/07 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 166 01/07 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 167 01/07 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 168 01/07 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 170 01/08 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 171 01/08 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 172 01/08 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 173 01/08 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 174 01/08 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 175 01/08 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 176 01/08 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 177 01/08 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 178 01/08 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 179 01/08 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 180 01/08 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 181 01/08 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 182 01/08 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 183 01/08 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 184 01/08 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 185 01/08 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 186 01/08 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 187 01/08 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 188 01/08 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 189 01/08 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 190 01/08 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 191 01/08 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 192 01/08 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 193 01/09 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 194 01/09 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 195 01/09 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 196 01/09 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 197 01/09 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 198 01/09 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 199 01/09 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 200 01/09 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 201 01/09 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 202 01/09 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 203 01/09 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 204 01/09 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 205 01/09 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 206 01/09 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 207 01/09 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 208 01/09 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 209 01/09 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 210 01/09 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 211 01/09 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 212 01/09 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 213 01/09 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 214 01/09 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 215 01/09 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 216 01/09 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 217 01/10 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 218 01/10 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 219 01/10 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 220 01/10 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 221 01/10 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 222 01/10 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 223 01/10 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 224 01/10 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 225 01/10 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 226 01/10 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 227 01/10 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 228 01/10 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 229 01/10 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 230 01/10 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 231 01/10 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 232 01/10 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 233 01/10 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 234 01/10 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 235 01/10 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 236 01/10 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 237 01/10 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 238 01/10 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 239 01/10 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 240 01/10 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 241 01/11 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 242 01/11 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 243 01/11 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 244 01/11 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 245 01/11 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 246 01/11 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 247 01/11 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 248 01/11 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 249 01/11 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 250 01/11 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 251 01/11 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 252 01/11 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 253 01/11 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 254 01/11 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 255 01/11 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 256 01/11 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 257 01/11 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 258 01/11 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 259 01/11 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 260 01/11 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 261 01/11 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 262 01/11 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 263 01/11 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 264 01/11 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 265 01/12 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 266 01/12 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 267 01/12 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 268 01/12 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 269 01/12 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 270 01/12 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 271 01/12 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 272 01/12 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 273 01/12 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 274 01/12 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 275 01/12 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 276 01/12 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 277 01/12 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 278 01/12 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 279 01/12 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 280 01/12 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 281 01/12 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 282 01/12 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 283 01/12 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 284 01/12 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 285 01/12 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 286 01/12 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 287 01/12 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 288 01/12 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 289 01/13 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 290 01/13 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 291 01/13 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 292 01/13 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 293 01/13 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 294 01/13 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 295 01/13 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 296 01/13 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 297 01/13 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 298 01/13 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 299 01/13 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 300 01/13 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 301 01/13 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 302 01/13 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 303 01/13 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 304 01/13 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 305 01/13 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 306 01/13 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 307 01/13 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 308 01/13 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 309 01/13 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 310 01/13 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 311 01/13 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 312 01/13 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 313 01/14 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 314 01/14 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 315 01/14 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 316 01/14 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 317 01/14 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 318 01/14 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 319 01/14 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 320 01/14 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 321 01/14 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 322 01/14 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 323 01/14 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 324 01/14 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 325 01/14 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 326 01/14 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 327 01/14 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 328 01/14 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 329 01/14 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 330 01/14 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 331 01/14 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 332 01/14 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 333 01/14 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 334 01/14 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 335 01/14 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 2 336 01/14 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_links_raw_data/test-02.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_links_raw_data/test-02.result.tsv new file mode 100644 index 0000000000..ff2416e246 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_links_raw_data/test-02.result.tsv @@ -0,0 +1,1009 @@ +link mcYear timeId time FLOW LIN. UCAP LIN. LOOP FLOW FLOW QUAD. CONG. FEE (ALG.) CONG. FEE (ABS.) MARG. COST CONG. PROB + CONG. PROB - HURDLE COST +de - fr 1 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 2 01/01 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 3 01/01 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 4 01/01 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 5 01/01 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 6 01/01 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 7 01/01 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 8 01/01 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 9 01/01 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 10 01/01 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 11 01/01 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 12 01/01 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 13 01/01 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 14 01/01 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 15 01/01 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 16 01/01 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 17 01/01 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 18 01/01 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 19 01/01 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 20 01/01 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 21 01/01 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 22 01/01 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 23 01/01 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 24 01/01 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 25 01/02 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 26 01/02 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 27 01/02 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 28 01/02 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 29 01/02 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 30 01/02 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 31 01/02 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 32 01/02 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 33 01/02 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 34 01/02 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 35 01/02 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 36 01/02 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 37 01/02 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 38 01/02 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 39 01/02 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 40 01/02 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 41 01/02 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 42 01/02 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 43 01/02 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 44 01/02 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 45 01/02 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 46 01/02 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 47 01/02 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 48 01/02 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 49 01/03 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 50 01/03 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 51 01/03 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 52 01/03 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 53 01/03 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 54 01/03 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 55 01/03 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 56 01/03 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 57 01/03 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 58 01/03 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 59 01/03 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 60 01/03 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 61 01/03 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 62 01/03 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 63 01/03 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 64 01/03 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 65 01/03 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 66 01/03 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 67 01/03 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 68 01/03 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 69 01/03 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 70 01/03 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 71 01/03 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 72 01/03 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 73 01/04 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 74 01/04 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 75 01/04 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 76 01/04 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 77 01/04 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 78 01/04 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 79 01/04 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 80 01/04 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 81 01/04 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 82 01/04 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 83 01/04 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 84 01/04 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 85 01/04 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 86 01/04 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 87 01/04 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 88 01/04 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 89 01/04 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 90 01/04 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 91 01/04 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 92 01/04 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 93 01/04 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 94 01/04 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 95 01/04 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 96 01/04 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 97 01/05 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 98 01/05 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 99 01/05 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 100 01/05 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 101 01/05 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 102 01/05 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 103 01/05 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 104 01/05 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 105 01/05 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 106 01/05 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 107 01/05 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 108 01/05 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 109 01/05 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 110 01/05 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 111 01/05 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 112 01/05 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 113 01/05 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 114 01/05 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 115 01/05 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 116 01/05 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 117 01/05 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 118 01/05 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 119 01/05 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 120 01/05 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 121 01/06 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 122 01/06 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 123 01/06 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 124 01/06 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 125 01/06 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 126 01/06 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 127 01/06 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 128 01/06 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 129 01/06 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 130 01/06 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 131 01/06 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 132 01/06 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 133 01/06 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 134 01/06 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 135 01/06 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 136 01/06 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 137 01/06 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 138 01/06 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 139 01/06 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 140 01/06 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 141 01/06 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 142 01/06 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 143 01/06 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 144 01/06 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 145 01/07 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 146 01/07 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 147 01/07 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 148 01/07 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 149 01/07 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 150 01/07 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 151 01/07 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 152 01/07 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 153 01/07 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 154 01/07 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 155 01/07 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 156 01/07 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 157 01/07 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 158 01/07 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 159 01/07 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 160 01/07 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 161 01/07 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 162 01/07 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 163 01/07 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 164 01/07 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 165 01/07 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 166 01/07 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 167 01/07 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 168 01/07 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 170 01/08 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 171 01/08 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 172 01/08 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 173 01/08 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 174 01/08 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 175 01/08 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 176 01/08 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 177 01/08 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 178 01/08 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 179 01/08 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 180 01/08 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 181 01/08 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 182 01/08 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 183 01/08 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 184 01/08 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 185 01/08 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 186 01/08 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 187 01/08 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 188 01/08 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 189 01/08 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 190 01/08 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 191 01/08 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 192 01/08 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 193 01/09 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 194 01/09 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 195 01/09 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 196 01/09 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 197 01/09 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 198 01/09 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 199 01/09 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 200 01/09 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 201 01/09 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 202 01/09 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 203 01/09 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 204 01/09 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 205 01/09 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 206 01/09 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 207 01/09 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 208 01/09 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 209 01/09 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 210 01/09 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 211 01/09 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 212 01/09 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 213 01/09 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 214 01/09 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 215 01/09 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 216 01/09 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 217 01/10 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 218 01/10 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 219 01/10 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 220 01/10 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 221 01/10 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 222 01/10 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 223 01/10 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 224 01/10 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 225 01/10 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 226 01/10 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 227 01/10 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 228 01/10 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 229 01/10 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 230 01/10 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 231 01/10 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 232 01/10 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 233 01/10 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 234 01/10 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 235 01/10 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 236 01/10 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 237 01/10 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 238 01/10 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 239 01/10 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 240 01/10 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 241 01/11 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 242 01/11 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 243 01/11 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 244 01/11 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 245 01/11 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 246 01/11 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 247 01/11 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 248 01/11 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 249 01/11 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 250 01/11 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 251 01/11 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 252 01/11 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 253 01/11 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 254 01/11 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 255 01/11 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 256 01/11 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 257 01/11 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 258 01/11 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 259 01/11 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 260 01/11 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 261 01/11 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 262 01/11 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 263 01/11 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 264 01/11 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 265 01/12 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 266 01/12 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 267 01/12 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 268 01/12 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 269 01/12 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 270 01/12 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 271 01/12 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 272 01/12 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 273 01/12 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 274 01/12 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 275 01/12 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 276 01/12 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 277 01/12 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 278 01/12 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 279 01/12 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 280 01/12 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 281 01/12 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 282 01/12 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 283 01/12 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 284 01/12 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 285 01/12 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 286 01/12 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 287 01/12 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 288 01/12 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 289 01/13 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 290 01/13 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 291 01/13 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 292 01/13 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 293 01/13 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 294 01/13 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 295 01/13 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 296 01/13 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 297 01/13 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 298 01/13 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 299 01/13 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 300 01/13 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 301 01/13 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 302 01/13 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 303 01/13 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 304 01/13 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 305 01/13 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 306 01/13 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 307 01/13 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 308 01/13 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 309 01/13 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 310 01/13 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 311 01/13 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 312 01/13 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 313 01/14 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 314 01/14 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 315 01/14 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 316 01/14 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 317 01/14 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 318 01/14 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 319 01/14 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 320 01/14 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 321 01/14 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 322 01/14 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 323 01/14 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 324 01/14 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 325 01/14 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 326 01/14 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 327 01/14 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 328 01/14 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 329 01/14 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 330 01/14 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 331 01/14 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 332 01/14 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 333 01/14 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 334 01/14 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 335 01/14 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +de - fr 1 336 01/14 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 2 01/01 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 3 01/01 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 4 01/01 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 5 01/01 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 6 01/01 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 7 01/01 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 8 01/01 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 9 01/01 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 10 01/01 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 11 01/01 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 12 01/01 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 13 01/01 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 14 01/01 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 15 01/01 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 16 01/01 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 17 01/01 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 18 01/01 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 19 01/01 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 20 01/01 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 21 01/01 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 22 01/01 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 23 01/01 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 24 01/01 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 25 01/02 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 26 01/02 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 27 01/02 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 28 01/02 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 29 01/02 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 30 01/02 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 31 01/02 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 32 01/02 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 33 01/02 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 34 01/02 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 35 01/02 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 36 01/02 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 37 01/02 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 38 01/02 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 39 01/02 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 40 01/02 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 41 01/02 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 42 01/02 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 43 01/02 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 44 01/02 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 45 01/02 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 46 01/02 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 47 01/02 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 48 01/02 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 49 01/03 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 50 01/03 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 51 01/03 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 52 01/03 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 53 01/03 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 54 01/03 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 55 01/03 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 56 01/03 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 57 01/03 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 58 01/03 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 59 01/03 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 60 01/03 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 61 01/03 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 62 01/03 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 63 01/03 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 64 01/03 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 65 01/03 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 66 01/03 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 67 01/03 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 68 01/03 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 69 01/03 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 70 01/03 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 71 01/03 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 72 01/03 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 73 01/04 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 74 01/04 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 75 01/04 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 76 01/04 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 77 01/04 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 78 01/04 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 79 01/04 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 80 01/04 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 81 01/04 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 82 01/04 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 83 01/04 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 84 01/04 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 85 01/04 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 86 01/04 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 87 01/04 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 88 01/04 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 89 01/04 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 90 01/04 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 91 01/04 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 92 01/04 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 93 01/04 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 94 01/04 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 95 01/04 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 96 01/04 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 97 01/05 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 98 01/05 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 99 01/05 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 100 01/05 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 101 01/05 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 102 01/05 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 103 01/05 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 104 01/05 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 105 01/05 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 106 01/05 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 107 01/05 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 108 01/05 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 109 01/05 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 110 01/05 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 111 01/05 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 112 01/05 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 113 01/05 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 114 01/05 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 115 01/05 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 116 01/05 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 117 01/05 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 118 01/05 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 119 01/05 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 120 01/05 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 121 01/06 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 122 01/06 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 123 01/06 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 124 01/06 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 125 01/06 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 126 01/06 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 127 01/06 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 128 01/06 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 129 01/06 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 130 01/06 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 131 01/06 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 132 01/06 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 133 01/06 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 134 01/06 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 135 01/06 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 136 01/06 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 137 01/06 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 138 01/06 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 139 01/06 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 140 01/06 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 141 01/06 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 142 01/06 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 143 01/06 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 144 01/06 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 145 01/07 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 146 01/07 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 147 01/07 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 148 01/07 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 149 01/07 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 150 01/07 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 151 01/07 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 152 01/07 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 153 01/07 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 154 01/07 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 155 01/07 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 156 01/07 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 157 01/07 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 158 01/07 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 159 01/07 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 160 01/07 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 161 01/07 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 162 01/07 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 163 01/07 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 164 01/07 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 165 01/07 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 166 01/07 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 167 01/07 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 168 01/07 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 170 01/08 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 171 01/08 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 172 01/08 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 173 01/08 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 174 01/08 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 175 01/08 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 176 01/08 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 177 01/08 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 178 01/08 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 179 01/08 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 180 01/08 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 181 01/08 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 182 01/08 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 183 01/08 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 184 01/08 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 185 01/08 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 186 01/08 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 187 01/08 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 188 01/08 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 189 01/08 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 190 01/08 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 191 01/08 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 192 01/08 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 193 01/09 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 194 01/09 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 195 01/09 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 196 01/09 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 197 01/09 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 198 01/09 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 199 01/09 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 200 01/09 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 201 01/09 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 202 01/09 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 203 01/09 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 204 01/09 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 205 01/09 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 206 01/09 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 207 01/09 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 208 01/09 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 209 01/09 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 210 01/09 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 211 01/09 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 212 01/09 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 213 01/09 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 214 01/09 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 215 01/09 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 216 01/09 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 217 01/10 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 218 01/10 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 219 01/10 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 220 01/10 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 221 01/10 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 222 01/10 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 223 01/10 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 224 01/10 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 225 01/10 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 226 01/10 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 227 01/10 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 228 01/10 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 229 01/10 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 230 01/10 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 231 01/10 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 232 01/10 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 233 01/10 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 234 01/10 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 235 01/10 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 236 01/10 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 237 01/10 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 238 01/10 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 239 01/10 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 240 01/10 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 241 01/11 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 242 01/11 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 243 01/11 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 244 01/11 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 245 01/11 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 246 01/11 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 247 01/11 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 248 01/11 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 249 01/11 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 250 01/11 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 251 01/11 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 252 01/11 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 253 01/11 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 254 01/11 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 255 01/11 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 256 01/11 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 257 01/11 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 258 01/11 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 259 01/11 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 260 01/11 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 261 01/11 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 262 01/11 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 263 01/11 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 264 01/11 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 265 01/12 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 266 01/12 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 267 01/12 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 268 01/12 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 269 01/12 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 270 01/12 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 271 01/12 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 272 01/12 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 273 01/12 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 274 01/12 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 275 01/12 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 276 01/12 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 277 01/12 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 278 01/12 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 279 01/12 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 280 01/12 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 281 01/12 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 282 01/12 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 283 01/12 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 284 01/12 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 285 01/12 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 286 01/12 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 287 01/12 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 288 01/12 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 289 01/13 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 290 01/13 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 291 01/13 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 292 01/13 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 293 01/13 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 294 01/13 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 295 01/13 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 296 01/13 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 297 01/13 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 298 01/13 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 299 01/13 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 300 01/13 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 301 01/13 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 302 01/13 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 303 01/13 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 304 01/13 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 305 01/13 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 306 01/13 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 307 01/13 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 308 01/13 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 309 01/13 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 310 01/13 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 311 01/13 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 312 01/13 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 313 01/14 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 314 01/14 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 315 01/14 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 316 01/14 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 317 01/14 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 318 01/14 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 319 01/14 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 320 01/14 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 321 01/14 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 322 01/14 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 323 01/14 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 324 01/14 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 325 01/14 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 326 01/14 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 327 01/14 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 328 01/14 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 329 01/14 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 330 01/14 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 331 01/14 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 332 01/14 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 333 01/14 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 334 01/14 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 335 01/14 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +es - fr 1 336 01/14 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 1 01/01 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 2 01/01 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 3 01/01 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 4 01/01 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 5 01/01 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 6 01/01 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 7 01/01 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 8 01/01 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 9 01/01 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 10 01/01 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 11 01/01 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 12 01/01 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 13 01/01 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 14 01/01 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 15 01/01 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 16 01/01 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 17 01/01 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 18 01/01 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 19 01/01 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 20 01/01 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 21 01/01 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 22 01/01 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 23 01/01 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 24 01/01 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 25 01/02 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 26 01/02 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 27 01/02 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 28 01/02 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 29 01/02 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 30 01/02 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 31 01/02 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 32 01/02 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 33 01/02 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 34 01/02 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 35 01/02 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 36 01/02 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 37 01/02 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 38 01/02 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 39 01/02 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 40 01/02 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 41 01/02 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 42 01/02 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 43 01/02 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 44 01/02 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 45 01/02 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 46 01/02 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 47 01/02 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 48 01/02 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 49 01/03 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 50 01/03 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 51 01/03 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 52 01/03 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 53 01/03 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 54 01/03 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 55 01/03 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 56 01/03 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 57 01/03 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 58 01/03 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 59 01/03 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 60 01/03 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 61 01/03 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 62 01/03 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 63 01/03 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 64 01/03 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 65 01/03 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 66 01/03 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 67 01/03 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 68 01/03 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 69 01/03 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 70 01/03 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 71 01/03 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 72 01/03 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 73 01/04 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 74 01/04 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 75 01/04 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 76 01/04 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 77 01/04 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 78 01/04 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 79 01/04 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 80 01/04 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 81 01/04 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 82 01/04 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 83 01/04 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 84 01/04 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 85 01/04 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 86 01/04 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 87 01/04 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 88 01/04 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 89 01/04 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 90 01/04 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 91 01/04 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 92 01/04 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 93 01/04 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 94 01/04 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 95 01/04 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 96 01/04 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 97 01/05 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 98 01/05 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 99 01/05 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 100 01/05 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 101 01/05 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 102 01/05 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 103 01/05 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 104 01/05 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 105 01/05 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 106 01/05 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 107 01/05 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 108 01/05 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 109 01/05 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 110 01/05 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 111 01/05 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 112 01/05 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 113 01/05 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 114 01/05 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 115 01/05 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 116 01/05 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 117 01/05 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 118 01/05 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 119 01/05 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 120 01/05 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 121 01/06 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 122 01/06 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 123 01/06 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 124 01/06 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 125 01/06 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 126 01/06 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 127 01/06 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 128 01/06 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 129 01/06 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 130 01/06 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 131 01/06 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 132 01/06 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 133 01/06 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 134 01/06 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 135 01/06 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 136 01/06 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 137 01/06 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 138 01/06 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 139 01/06 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 140 01/06 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 141 01/06 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 142 01/06 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 143 01/06 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 144 01/06 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 145 01/07 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 146 01/07 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 147 01/07 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 148 01/07 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 149 01/07 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 150 01/07 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 151 01/07 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 152 01/07 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 153 01/07 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 154 01/07 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 155 01/07 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 156 01/07 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 157 01/07 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 158 01/07 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 159 01/07 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 160 01/07 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 161 01/07 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 162 01/07 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 163 01/07 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 164 01/07 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 165 01/07 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 166 01/07 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 167 01/07 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 168 01/07 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 169 01/08 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 170 01/08 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 171 01/08 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 172 01/08 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 173 01/08 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 174 01/08 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 175 01/08 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 176 01/08 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 177 01/08 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 178 01/08 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 179 01/08 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 180 01/08 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 181 01/08 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 182 01/08 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 183 01/08 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 184 01/08 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 185 01/08 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 186 01/08 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 187 01/08 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 188 01/08 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 189 01/08 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 190 01/08 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 191 01/08 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 192 01/08 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 193 01/09 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 194 01/09 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 195 01/09 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 196 01/09 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 197 01/09 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 198 01/09 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 199 01/09 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 200 01/09 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 201 01/09 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 202 01/09 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 203 01/09 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 204 01/09 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 205 01/09 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 206 01/09 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 207 01/09 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 208 01/09 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 209 01/09 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 210 01/09 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 211 01/09 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 212 01/09 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 213 01/09 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 214 01/09 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 215 01/09 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 216 01/09 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 217 01/10 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 218 01/10 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 219 01/10 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 220 01/10 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 221 01/10 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 222 01/10 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 223 01/10 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 224 01/10 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 225 01/10 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 226 01/10 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 227 01/10 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 228 01/10 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 229 01/10 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 230 01/10 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 231 01/10 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 232 01/10 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 233 01/10 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 234 01/10 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 235 01/10 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 236 01/10 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 237 01/10 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 238 01/10 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 239 01/10 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 240 01/10 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 241 01/11 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 242 01/11 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 243 01/11 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 244 01/11 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 245 01/11 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 246 01/11 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 247 01/11 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 248 01/11 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 249 01/11 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 250 01/11 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 251 01/11 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 252 01/11 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 253 01/11 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 254 01/11 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 255 01/11 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 256 01/11 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 257 01/11 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 258 01/11 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 259 01/11 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 260 01/11 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 261 01/11 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 262 01/11 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 263 01/11 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 264 01/11 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 265 01/12 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 266 01/12 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 267 01/12 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 268 01/12 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 269 01/12 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 270 01/12 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 271 01/12 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 272 01/12 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 273 01/12 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 274 01/12 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 275 01/12 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 276 01/12 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 277 01/12 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 278 01/12 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 279 01/12 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 280 01/12 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 281 01/12 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 282 01/12 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 283 01/12 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 284 01/12 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 285 01/12 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 286 01/12 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 287 01/12 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 288 01/12 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 289 01/13 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 290 01/13 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 291 01/13 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 292 01/13 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 293 01/13 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 294 01/13 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 295 01/13 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 296 01/13 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 297 01/13 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 298 01/13 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 299 01/13 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 300 01/13 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 301 01/13 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 302 01/13 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 303 01/13 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 304 01/13 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 305 01/13 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 306 01/13 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 307 01/13 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 308 01/13 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 309 01/13 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 310 01/13 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 311 01/13 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 312 01/13 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 313 01/14 00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 314 01/14 01:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 315 01/14 02:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 316 01/14 03:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 317 01/14 04:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 318 01/14 05:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 319 01/14 06:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 320 01/14 07:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 321 01/14 08:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 322 01/14 09:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 323 01/14 10:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 324 01/14 11:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 325 01/14 12:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 326 01/14 13:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 327 01/14 14:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 328 01/14 15:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 329 01/14 16:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 330 01/14 17:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 331 01/14 18:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 332 01/14 19:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 333 01/14 20:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 334 01/14 21:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 335 01/14 22:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +fr - it 1 336 01/14 23:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_links_raw_data/test-03.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_links_raw_data/test-03.result.tsv new file mode 100644 index 0000000000..00b95e8ac9 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_links_raw_data/test-03.result.tsv @@ -0,0 +1,2017 @@ +link mcYear timeId time UCAP LIN. FLOW QUAD. +de - fr 1 1 01/01 00:00 0.0 0.0 +de - fr 1 2 01/01 01:00 0.0 0.0 +de - fr 1 3 01/01 02:00 0.0 0.0 +de - fr 1 4 01/01 03:00 0.0 0.0 +de - fr 1 5 01/01 04:00 0.0 0.0 +de - fr 1 6 01/01 05:00 0.0 0.0 +de - fr 1 7 01/01 06:00 0.0 0.0 +de - fr 1 8 01/01 07:00 0.0 0.0 +de - fr 1 9 01/01 08:00 0.0 0.0 +de - fr 1 10 01/01 09:00 0.0 0.0 +de - fr 1 11 01/01 10:00 0.0 0.0 +de - fr 1 12 01/01 11:00 0.0 0.0 +de - fr 1 13 01/01 12:00 0.0 0.0 +de - fr 1 14 01/01 13:00 0.0 0.0 +de - fr 1 15 01/01 14:00 0.0 0.0 +de - fr 1 16 01/01 15:00 0.0 0.0 +de - fr 1 17 01/01 16:00 0.0 0.0 +de - fr 1 18 01/01 17:00 0.0 0.0 +de - fr 1 19 01/01 18:00 0.0 0.0 +de - fr 1 20 01/01 19:00 0.0 0.0 +de - fr 1 21 01/01 20:00 0.0 0.0 +de - fr 1 22 01/01 21:00 0.0 0.0 +de - fr 1 23 01/01 22:00 0.0 0.0 +de - fr 1 24 01/01 23:00 0.0 0.0 +de - fr 1 25 01/02 00:00 0.0 0.0 +de - fr 1 26 01/02 01:00 0.0 0.0 +de - fr 1 27 01/02 02:00 0.0 0.0 +de - fr 1 28 01/02 03:00 0.0 0.0 +de - fr 1 29 01/02 04:00 0.0 0.0 +de - fr 1 30 01/02 05:00 0.0 0.0 +de - fr 1 31 01/02 06:00 0.0 0.0 +de - fr 1 32 01/02 07:00 0.0 0.0 +de - fr 1 33 01/02 08:00 0.0 0.0 +de - fr 1 34 01/02 09:00 0.0 0.0 +de - fr 1 35 01/02 10:00 0.0 0.0 +de - fr 1 36 01/02 11:00 0.0 0.0 +de - fr 1 37 01/02 12:00 0.0 0.0 +de - fr 1 38 01/02 13:00 0.0 0.0 +de - fr 1 39 01/02 14:00 0.0 0.0 +de - fr 1 40 01/02 15:00 0.0 0.0 +de - fr 1 41 01/02 16:00 0.0 0.0 +de - fr 1 42 01/02 17:00 0.0 0.0 +de - fr 1 43 01/02 18:00 0.0 0.0 +de - fr 1 44 01/02 19:00 0.0 0.0 +de - fr 1 45 01/02 20:00 0.0 0.0 +de - fr 1 46 01/02 21:00 0.0 0.0 +de - fr 1 47 01/02 22:00 0.0 0.0 +de - fr 1 48 01/02 23:00 0.0 0.0 +de - fr 1 49 01/03 00:00 0.0 0.0 +de - fr 1 50 01/03 01:00 0.0 0.0 +de - fr 1 51 01/03 02:00 0.0 0.0 +de - fr 1 52 01/03 03:00 0.0 0.0 +de - fr 1 53 01/03 04:00 0.0 0.0 +de - fr 1 54 01/03 05:00 0.0 0.0 +de - fr 1 55 01/03 06:00 0.0 0.0 +de - fr 1 56 01/03 07:00 0.0 0.0 +de - fr 1 57 01/03 08:00 0.0 0.0 +de - fr 1 58 01/03 09:00 0.0 0.0 +de - fr 1 59 01/03 10:00 0.0 0.0 +de - fr 1 60 01/03 11:00 0.0 0.0 +de - fr 1 61 01/03 12:00 0.0 0.0 +de - fr 1 62 01/03 13:00 0.0 0.0 +de - fr 1 63 01/03 14:00 0.0 0.0 +de - fr 1 64 01/03 15:00 0.0 0.0 +de - fr 1 65 01/03 16:00 0.0 0.0 +de - fr 1 66 01/03 17:00 0.0 0.0 +de - fr 1 67 01/03 18:00 0.0 0.0 +de - fr 1 68 01/03 19:00 0.0 0.0 +de - fr 1 69 01/03 20:00 0.0 0.0 +de - fr 1 70 01/03 21:00 0.0 0.0 +de - fr 1 71 01/03 22:00 0.0 0.0 +de - fr 1 72 01/03 23:00 0.0 0.0 +de - fr 1 73 01/04 00:00 0.0 0.0 +de - fr 1 74 01/04 01:00 0.0 0.0 +de - fr 1 75 01/04 02:00 0.0 0.0 +de - fr 1 76 01/04 03:00 0.0 0.0 +de - fr 1 77 01/04 04:00 0.0 0.0 +de - fr 1 78 01/04 05:00 0.0 0.0 +de - fr 1 79 01/04 06:00 0.0 0.0 +de - fr 1 80 01/04 07:00 0.0 0.0 +de - fr 1 81 01/04 08:00 0.0 0.0 +de - fr 1 82 01/04 09:00 0.0 0.0 +de - fr 1 83 01/04 10:00 0.0 0.0 +de - fr 1 84 01/04 11:00 0.0 0.0 +de - fr 1 85 01/04 12:00 0.0 0.0 +de - fr 1 86 01/04 13:00 0.0 0.0 +de - fr 1 87 01/04 14:00 0.0 0.0 +de - fr 1 88 01/04 15:00 0.0 0.0 +de - fr 1 89 01/04 16:00 0.0 0.0 +de - fr 1 90 01/04 17:00 0.0 0.0 +de - fr 1 91 01/04 18:00 0.0 0.0 +de - fr 1 92 01/04 19:00 0.0 0.0 +de - fr 1 93 01/04 20:00 0.0 0.0 +de - fr 1 94 01/04 21:00 0.0 0.0 +de - fr 1 95 01/04 22:00 0.0 0.0 +de - fr 1 96 01/04 23:00 0.0 0.0 +de - fr 1 97 01/05 00:00 0.0 0.0 +de - fr 1 98 01/05 01:00 0.0 0.0 +de - fr 1 99 01/05 02:00 0.0 0.0 +de - fr 1 100 01/05 03:00 0.0 0.0 +de - fr 1 101 01/05 04:00 0.0 0.0 +de - fr 1 102 01/05 05:00 0.0 0.0 +de - fr 1 103 01/05 06:00 0.0 0.0 +de - fr 1 104 01/05 07:00 0.0 0.0 +de - fr 1 105 01/05 08:00 0.0 0.0 +de - fr 1 106 01/05 09:00 0.0 0.0 +de - fr 1 107 01/05 10:00 0.0 0.0 +de - fr 1 108 01/05 11:00 0.0 0.0 +de - fr 1 109 01/05 12:00 0.0 0.0 +de - fr 1 110 01/05 13:00 0.0 0.0 +de - fr 1 111 01/05 14:00 0.0 0.0 +de - fr 1 112 01/05 15:00 0.0 0.0 +de - fr 1 113 01/05 16:00 0.0 0.0 +de - fr 1 114 01/05 17:00 0.0 0.0 +de - fr 1 115 01/05 18:00 0.0 0.0 +de - fr 1 116 01/05 19:00 0.0 0.0 +de - fr 1 117 01/05 20:00 0.0 0.0 +de - fr 1 118 01/05 21:00 0.0 0.0 +de - fr 1 119 01/05 22:00 0.0 0.0 +de - fr 1 120 01/05 23:00 0.0 0.0 +de - fr 1 121 01/06 00:00 0.0 0.0 +de - fr 1 122 01/06 01:00 0.0 0.0 +de - fr 1 123 01/06 02:00 0.0 0.0 +de - fr 1 124 01/06 03:00 0.0 0.0 +de - fr 1 125 01/06 04:00 0.0 0.0 +de - fr 1 126 01/06 05:00 0.0 0.0 +de - fr 1 127 01/06 06:00 0.0 0.0 +de - fr 1 128 01/06 07:00 0.0 0.0 +de - fr 1 129 01/06 08:00 0.0 0.0 +de - fr 1 130 01/06 09:00 0.0 0.0 +de - fr 1 131 01/06 10:00 0.0 0.0 +de - fr 1 132 01/06 11:00 0.0 0.0 +de - fr 1 133 01/06 12:00 0.0 0.0 +de - fr 1 134 01/06 13:00 0.0 0.0 +de - fr 1 135 01/06 14:00 0.0 0.0 +de - fr 1 136 01/06 15:00 0.0 0.0 +de - fr 1 137 01/06 16:00 0.0 0.0 +de - fr 1 138 01/06 17:00 0.0 0.0 +de - fr 1 139 01/06 18:00 0.0 0.0 +de - fr 1 140 01/06 19:00 0.0 0.0 +de - fr 1 141 01/06 20:00 0.0 0.0 +de - fr 1 142 01/06 21:00 0.0 0.0 +de - fr 1 143 01/06 22:00 0.0 0.0 +de - fr 1 144 01/06 23:00 0.0 0.0 +de - fr 1 145 01/07 00:00 0.0 0.0 +de - fr 1 146 01/07 01:00 0.0 0.0 +de - fr 1 147 01/07 02:00 0.0 0.0 +de - fr 1 148 01/07 03:00 0.0 0.0 +de - fr 1 149 01/07 04:00 0.0 0.0 +de - fr 1 150 01/07 05:00 0.0 0.0 +de - fr 1 151 01/07 06:00 0.0 0.0 +de - fr 1 152 01/07 07:00 0.0 0.0 +de - fr 1 153 01/07 08:00 0.0 0.0 +de - fr 1 154 01/07 09:00 0.0 0.0 +de - fr 1 155 01/07 10:00 0.0 0.0 +de - fr 1 156 01/07 11:00 0.0 0.0 +de - fr 1 157 01/07 12:00 0.0 0.0 +de - fr 1 158 01/07 13:00 0.0 0.0 +de - fr 1 159 01/07 14:00 0.0 0.0 +de - fr 1 160 01/07 15:00 0.0 0.0 +de - fr 1 161 01/07 16:00 0.0 0.0 +de - fr 1 162 01/07 17:00 0.0 0.0 +de - fr 1 163 01/07 18:00 0.0 0.0 +de - fr 1 164 01/07 19:00 0.0 0.0 +de - fr 1 165 01/07 20:00 0.0 0.0 +de - fr 1 166 01/07 21:00 0.0 0.0 +de - fr 1 167 01/07 22:00 0.0 0.0 +de - fr 1 168 01/07 23:00 0.0 0.0 +de - fr 1 169 01/08 00:00 0.0 0.0 +de - fr 1 170 01/08 01:00 0.0 0.0 +de - fr 1 171 01/08 02:00 0.0 0.0 +de - fr 1 172 01/08 03:00 0.0 0.0 +de - fr 1 173 01/08 04:00 0.0 0.0 +de - fr 1 174 01/08 05:00 0.0 0.0 +de - fr 1 175 01/08 06:00 0.0 0.0 +de - fr 1 176 01/08 07:00 0.0 0.0 +de - fr 1 177 01/08 08:00 0.0 0.0 +de - fr 1 178 01/08 09:00 0.0 0.0 +de - fr 1 179 01/08 10:00 0.0 0.0 +de - fr 1 180 01/08 11:00 0.0 0.0 +de - fr 1 181 01/08 12:00 0.0 0.0 +de - fr 1 182 01/08 13:00 0.0 0.0 +de - fr 1 183 01/08 14:00 0.0 0.0 +de - fr 1 184 01/08 15:00 0.0 0.0 +de - fr 1 185 01/08 16:00 0.0 0.0 +de - fr 1 186 01/08 17:00 0.0 0.0 +de - fr 1 187 01/08 18:00 0.0 0.0 +de - fr 1 188 01/08 19:00 0.0 0.0 +de - fr 1 189 01/08 20:00 0.0 0.0 +de - fr 1 190 01/08 21:00 0.0 0.0 +de - fr 1 191 01/08 22:00 0.0 0.0 +de - fr 1 192 01/08 23:00 0.0 0.0 +de - fr 1 193 01/09 00:00 0.0 0.0 +de - fr 1 194 01/09 01:00 0.0 0.0 +de - fr 1 195 01/09 02:00 0.0 0.0 +de - fr 1 196 01/09 03:00 0.0 0.0 +de - fr 1 197 01/09 04:00 0.0 0.0 +de - fr 1 198 01/09 05:00 0.0 0.0 +de - fr 1 199 01/09 06:00 0.0 0.0 +de - fr 1 200 01/09 07:00 0.0 0.0 +de - fr 1 201 01/09 08:00 0.0 0.0 +de - fr 1 202 01/09 09:00 0.0 0.0 +de - fr 1 203 01/09 10:00 0.0 0.0 +de - fr 1 204 01/09 11:00 0.0 0.0 +de - fr 1 205 01/09 12:00 0.0 0.0 +de - fr 1 206 01/09 13:00 0.0 0.0 +de - fr 1 207 01/09 14:00 0.0 0.0 +de - fr 1 208 01/09 15:00 0.0 0.0 +de - fr 1 209 01/09 16:00 0.0 0.0 +de - fr 1 210 01/09 17:00 0.0 0.0 +de - fr 1 211 01/09 18:00 0.0 0.0 +de - fr 1 212 01/09 19:00 0.0 0.0 +de - fr 1 213 01/09 20:00 0.0 0.0 +de - fr 1 214 01/09 21:00 0.0 0.0 +de - fr 1 215 01/09 22:00 0.0 0.0 +de - fr 1 216 01/09 23:00 0.0 0.0 +de - fr 1 217 01/10 00:00 0.0 0.0 +de - fr 1 218 01/10 01:00 0.0 0.0 +de - fr 1 219 01/10 02:00 0.0 0.0 +de - fr 1 220 01/10 03:00 0.0 0.0 +de - fr 1 221 01/10 04:00 0.0 0.0 +de - fr 1 222 01/10 05:00 0.0 0.0 +de - fr 1 223 01/10 06:00 0.0 0.0 +de - fr 1 224 01/10 07:00 0.0 0.0 +de - fr 1 225 01/10 08:00 0.0 0.0 +de - fr 1 226 01/10 09:00 0.0 0.0 +de - fr 1 227 01/10 10:00 0.0 0.0 +de - fr 1 228 01/10 11:00 0.0 0.0 +de - fr 1 229 01/10 12:00 0.0 0.0 +de - fr 1 230 01/10 13:00 0.0 0.0 +de - fr 1 231 01/10 14:00 0.0 0.0 +de - fr 1 232 01/10 15:00 0.0 0.0 +de - fr 1 233 01/10 16:00 0.0 0.0 +de - fr 1 234 01/10 17:00 0.0 0.0 +de - fr 1 235 01/10 18:00 0.0 0.0 +de - fr 1 236 01/10 19:00 0.0 0.0 +de - fr 1 237 01/10 20:00 0.0 0.0 +de - fr 1 238 01/10 21:00 0.0 0.0 +de - fr 1 239 01/10 22:00 0.0 0.0 +de - fr 1 240 01/10 23:00 0.0 0.0 +de - fr 1 241 01/11 00:00 0.0 0.0 +de - fr 1 242 01/11 01:00 0.0 0.0 +de - fr 1 243 01/11 02:00 0.0 0.0 +de - fr 1 244 01/11 03:00 0.0 0.0 +de - fr 1 245 01/11 04:00 0.0 0.0 +de - fr 1 246 01/11 05:00 0.0 0.0 +de - fr 1 247 01/11 06:00 0.0 0.0 +de - fr 1 248 01/11 07:00 0.0 0.0 +de - fr 1 249 01/11 08:00 0.0 0.0 +de - fr 1 250 01/11 09:00 0.0 0.0 +de - fr 1 251 01/11 10:00 0.0 0.0 +de - fr 1 252 01/11 11:00 0.0 0.0 +de - fr 1 253 01/11 12:00 0.0 0.0 +de - fr 1 254 01/11 13:00 0.0 0.0 +de - fr 1 255 01/11 14:00 0.0 0.0 +de - fr 1 256 01/11 15:00 0.0 0.0 +de - fr 1 257 01/11 16:00 0.0 0.0 +de - fr 1 258 01/11 17:00 0.0 0.0 +de - fr 1 259 01/11 18:00 0.0 0.0 +de - fr 1 260 01/11 19:00 0.0 0.0 +de - fr 1 261 01/11 20:00 0.0 0.0 +de - fr 1 262 01/11 21:00 0.0 0.0 +de - fr 1 263 01/11 22:00 0.0 0.0 +de - fr 1 264 01/11 23:00 0.0 0.0 +de - fr 1 265 01/12 00:00 0.0 0.0 +de - fr 1 266 01/12 01:00 0.0 0.0 +de - fr 1 267 01/12 02:00 0.0 0.0 +de - fr 1 268 01/12 03:00 0.0 0.0 +de - fr 1 269 01/12 04:00 0.0 0.0 +de - fr 1 270 01/12 05:00 0.0 0.0 +de - fr 1 271 01/12 06:00 0.0 0.0 +de - fr 1 272 01/12 07:00 0.0 0.0 +de - fr 1 273 01/12 08:00 0.0 0.0 +de - fr 1 274 01/12 09:00 0.0 0.0 +de - fr 1 275 01/12 10:00 0.0 0.0 +de - fr 1 276 01/12 11:00 0.0 0.0 +de - fr 1 277 01/12 12:00 0.0 0.0 +de - fr 1 278 01/12 13:00 0.0 0.0 +de - fr 1 279 01/12 14:00 0.0 0.0 +de - fr 1 280 01/12 15:00 0.0 0.0 +de - fr 1 281 01/12 16:00 0.0 0.0 +de - fr 1 282 01/12 17:00 0.0 0.0 +de - fr 1 283 01/12 18:00 0.0 0.0 +de - fr 1 284 01/12 19:00 0.0 0.0 +de - fr 1 285 01/12 20:00 0.0 0.0 +de - fr 1 286 01/12 21:00 0.0 0.0 +de - fr 1 287 01/12 22:00 0.0 0.0 +de - fr 1 288 01/12 23:00 0.0 0.0 +de - fr 1 289 01/13 00:00 0.0 0.0 +de - fr 1 290 01/13 01:00 0.0 0.0 +de - fr 1 291 01/13 02:00 0.0 0.0 +de - fr 1 292 01/13 03:00 0.0 0.0 +de - fr 1 293 01/13 04:00 0.0 0.0 +de - fr 1 294 01/13 05:00 0.0 0.0 +de - fr 1 295 01/13 06:00 0.0 0.0 +de - fr 1 296 01/13 07:00 0.0 0.0 +de - fr 1 297 01/13 08:00 0.0 0.0 +de - fr 1 298 01/13 09:00 0.0 0.0 +de - fr 1 299 01/13 10:00 0.0 0.0 +de - fr 1 300 01/13 11:00 0.0 0.0 +de - fr 1 301 01/13 12:00 0.0 0.0 +de - fr 1 302 01/13 13:00 0.0 0.0 +de - fr 1 303 01/13 14:00 0.0 0.0 +de - fr 1 304 01/13 15:00 0.0 0.0 +de - fr 1 305 01/13 16:00 0.0 0.0 +de - fr 1 306 01/13 17:00 0.0 0.0 +de - fr 1 307 01/13 18:00 0.0 0.0 +de - fr 1 308 01/13 19:00 0.0 0.0 +de - fr 1 309 01/13 20:00 0.0 0.0 +de - fr 1 310 01/13 21:00 0.0 0.0 +de - fr 1 311 01/13 22:00 0.0 0.0 +de - fr 1 312 01/13 23:00 0.0 0.0 +de - fr 1 313 01/14 00:00 0.0 0.0 +de - fr 1 314 01/14 01:00 0.0 0.0 +de - fr 1 315 01/14 02:00 0.0 0.0 +de - fr 1 316 01/14 03:00 0.0 0.0 +de - fr 1 317 01/14 04:00 0.0 0.0 +de - fr 1 318 01/14 05:00 0.0 0.0 +de - fr 1 319 01/14 06:00 0.0 0.0 +de - fr 1 320 01/14 07:00 0.0 0.0 +de - fr 1 321 01/14 08:00 0.0 0.0 +de - fr 1 322 01/14 09:00 0.0 0.0 +de - fr 1 323 01/14 10:00 0.0 0.0 +de - fr 1 324 01/14 11:00 0.0 0.0 +de - fr 1 325 01/14 12:00 0.0 0.0 +de - fr 1 326 01/14 13:00 0.0 0.0 +de - fr 1 327 01/14 14:00 0.0 0.0 +de - fr 1 328 01/14 15:00 0.0 0.0 +de - fr 1 329 01/14 16:00 0.0 0.0 +de - fr 1 330 01/14 17:00 0.0 0.0 +de - fr 1 331 01/14 18:00 0.0 0.0 +de - fr 1 332 01/14 19:00 0.0 0.0 +de - fr 1 333 01/14 20:00 0.0 0.0 +de - fr 1 334 01/14 21:00 0.0 0.0 +de - fr 1 335 01/14 22:00 0.0 0.0 +de - fr 1 336 01/14 23:00 0.0 0.0 +es - fr 1 1 01/01 00:00 0.0 0.0 +es - fr 1 2 01/01 01:00 0.0 0.0 +es - fr 1 3 01/01 02:00 0.0 0.0 +es - fr 1 4 01/01 03:00 0.0 0.0 +es - fr 1 5 01/01 04:00 0.0 0.0 +es - fr 1 6 01/01 05:00 0.0 0.0 +es - fr 1 7 01/01 06:00 0.0 0.0 +es - fr 1 8 01/01 07:00 0.0 0.0 +es - fr 1 9 01/01 08:00 0.0 0.0 +es - fr 1 10 01/01 09:00 0.0 0.0 +es - fr 1 11 01/01 10:00 0.0 0.0 +es - fr 1 12 01/01 11:00 0.0 0.0 +es - fr 1 13 01/01 12:00 0.0 0.0 +es - fr 1 14 01/01 13:00 0.0 0.0 +es - fr 1 15 01/01 14:00 0.0 0.0 +es - fr 1 16 01/01 15:00 0.0 0.0 +es - fr 1 17 01/01 16:00 0.0 0.0 +es - fr 1 18 01/01 17:00 0.0 0.0 +es - fr 1 19 01/01 18:00 0.0 0.0 +es - fr 1 20 01/01 19:00 0.0 0.0 +es - fr 1 21 01/01 20:00 0.0 0.0 +es - fr 1 22 01/01 21:00 0.0 0.0 +es - fr 1 23 01/01 22:00 0.0 0.0 +es - fr 1 24 01/01 23:00 0.0 0.0 +es - fr 1 25 01/02 00:00 0.0 0.0 +es - fr 1 26 01/02 01:00 0.0 0.0 +es - fr 1 27 01/02 02:00 0.0 0.0 +es - fr 1 28 01/02 03:00 0.0 0.0 +es - fr 1 29 01/02 04:00 0.0 0.0 +es - fr 1 30 01/02 05:00 0.0 0.0 +es - fr 1 31 01/02 06:00 0.0 0.0 +es - fr 1 32 01/02 07:00 0.0 0.0 +es - fr 1 33 01/02 08:00 0.0 0.0 +es - fr 1 34 01/02 09:00 0.0 0.0 +es - fr 1 35 01/02 10:00 0.0 0.0 +es - fr 1 36 01/02 11:00 0.0 0.0 +es - fr 1 37 01/02 12:00 0.0 0.0 +es - fr 1 38 01/02 13:00 0.0 0.0 +es - fr 1 39 01/02 14:00 0.0 0.0 +es - fr 1 40 01/02 15:00 0.0 0.0 +es - fr 1 41 01/02 16:00 0.0 0.0 +es - fr 1 42 01/02 17:00 0.0 0.0 +es - fr 1 43 01/02 18:00 0.0 0.0 +es - fr 1 44 01/02 19:00 0.0 0.0 +es - fr 1 45 01/02 20:00 0.0 0.0 +es - fr 1 46 01/02 21:00 0.0 0.0 +es - fr 1 47 01/02 22:00 0.0 0.0 +es - fr 1 48 01/02 23:00 0.0 0.0 +es - fr 1 49 01/03 00:00 0.0 0.0 +es - fr 1 50 01/03 01:00 0.0 0.0 +es - fr 1 51 01/03 02:00 0.0 0.0 +es - fr 1 52 01/03 03:00 0.0 0.0 +es - fr 1 53 01/03 04:00 0.0 0.0 +es - fr 1 54 01/03 05:00 0.0 0.0 +es - fr 1 55 01/03 06:00 0.0 0.0 +es - fr 1 56 01/03 07:00 0.0 0.0 +es - fr 1 57 01/03 08:00 0.0 0.0 +es - fr 1 58 01/03 09:00 0.0 0.0 +es - fr 1 59 01/03 10:00 0.0 0.0 +es - fr 1 60 01/03 11:00 0.0 0.0 +es - fr 1 61 01/03 12:00 0.0 0.0 +es - fr 1 62 01/03 13:00 0.0 0.0 +es - fr 1 63 01/03 14:00 0.0 0.0 +es - fr 1 64 01/03 15:00 0.0 0.0 +es - fr 1 65 01/03 16:00 0.0 0.0 +es - fr 1 66 01/03 17:00 0.0 0.0 +es - fr 1 67 01/03 18:00 0.0 0.0 +es - fr 1 68 01/03 19:00 0.0 0.0 +es - fr 1 69 01/03 20:00 0.0 0.0 +es - fr 1 70 01/03 21:00 0.0 0.0 +es - fr 1 71 01/03 22:00 0.0 0.0 +es - fr 1 72 01/03 23:00 0.0 0.0 +es - fr 1 73 01/04 00:00 0.0 0.0 +es - fr 1 74 01/04 01:00 0.0 0.0 +es - fr 1 75 01/04 02:00 0.0 0.0 +es - fr 1 76 01/04 03:00 0.0 0.0 +es - fr 1 77 01/04 04:00 0.0 0.0 +es - fr 1 78 01/04 05:00 0.0 0.0 +es - fr 1 79 01/04 06:00 0.0 0.0 +es - fr 1 80 01/04 07:00 0.0 0.0 +es - fr 1 81 01/04 08:00 0.0 0.0 +es - fr 1 82 01/04 09:00 0.0 0.0 +es - fr 1 83 01/04 10:00 0.0 0.0 +es - fr 1 84 01/04 11:00 0.0 0.0 +es - fr 1 85 01/04 12:00 0.0 0.0 +es - fr 1 86 01/04 13:00 0.0 0.0 +es - fr 1 87 01/04 14:00 0.0 0.0 +es - fr 1 88 01/04 15:00 0.0 0.0 +es - fr 1 89 01/04 16:00 0.0 0.0 +es - fr 1 90 01/04 17:00 0.0 0.0 +es - fr 1 91 01/04 18:00 0.0 0.0 +es - fr 1 92 01/04 19:00 0.0 0.0 +es - fr 1 93 01/04 20:00 0.0 0.0 +es - fr 1 94 01/04 21:00 0.0 0.0 +es - fr 1 95 01/04 22:00 0.0 0.0 +es - fr 1 96 01/04 23:00 0.0 0.0 +es - fr 1 97 01/05 00:00 0.0 0.0 +es - fr 1 98 01/05 01:00 0.0 0.0 +es - fr 1 99 01/05 02:00 0.0 0.0 +es - fr 1 100 01/05 03:00 0.0 0.0 +es - fr 1 101 01/05 04:00 0.0 0.0 +es - fr 1 102 01/05 05:00 0.0 0.0 +es - fr 1 103 01/05 06:00 0.0 0.0 +es - fr 1 104 01/05 07:00 0.0 0.0 +es - fr 1 105 01/05 08:00 0.0 0.0 +es - fr 1 106 01/05 09:00 0.0 0.0 +es - fr 1 107 01/05 10:00 0.0 0.0 +es - fr 1 108 01/05 11:00 0.0 0.0 +es - fr 1 109 01/05 12:00 0.0 0.0 +es - fr 1 110 01/05 13:00 0.0 0.0 +es - fr 1 111 01/05 14:00 0.0 0.0 +es - fr 1 112 01/05 15:00 0.0 0.0 +es - fr 1 113 01/05 16:00 0.0 0.0 +es - fr 1 114 01/05 17:00 0.0 0.0 +es - fr 1 115 01/05 18:00 0.0 0.0 +es - fr 1 116 01/05 19:00 0.0 0.0 +es - fr 1 117 01/05 20:00 0.0 0.0 +es - fr 1 118 01/05 21:00 0.0 0.0 +es - fr 1 119 01/05 22:00 0.0 0.0 +es - fr 1 120 01/05 23:00 0.0 0.0 +es - fr 1 121 01/06 00:00 0.0 0.0 +es - fr 1 122 01/06 01:00 0.0 0.0 +es - fr 1 123 01/06 02:00 0.0 0.0 +es - fr 1 124 01/06 03:00 0.0 0.0 +es - fr 1 125 01/06 04:00 0.0 0.0 +es - fr 1 126 01/06 05:00 0.0 0.0 +es - fr 1 127 01/06 06:00 0.0 0.0 +es - fr 1 128 01/06 07:00 0.0 0.0 +es - fr 1 129 01/06 08:00 0.0 0.0 +es - fr 1 130 01/06 09:00 0.0 0.0 +es - fr 1 131 01/06 10:00 0.0 0.0 +es - fr 1 132 01/06 11:00 0.0 0.0 +es - fr 1 133 01/06 12:00 0.0 0.0 +es - fr 1 134 01/06 13:00 0.0 0.0 +es - fr 1 135 01/06 14:00 0.0 0.0 +es - fr 1 136 01/06 15:00 0.0 0.0 +es - fr 1 137 01/06 16:00 0.0 0.0 +es - fr 1 138 01/06 17:00 0.0 0.0 +es - fr 1 139 01/06 18:00 0.0 0.0 +es - fr 1 140 01/06 19:00 0.0 0.0 +es - fr 1 141 01/06 20:00 0.0 0.0 +es - fr 1 142 01/06 21:00 0.0 0.0 +es - fr 1 143 01/06 22:00 0.0 0.0 +es - fr 1 144 01/06 23:00 0.0 0.0 +es - fr 1 145 01/07 00:00 0.0 0.0 +es - fr 1 146 01/07 01:00 0.0 0.0 +es - fr 1 147 01/07 02:00 0.0 0.0 +es - fr 1 148 01/07 03:00 0.0 0.0 +es - fr 1 149 01/07 04:00 0.0 0.0 +es - fr 1 150 01/07 05:00 0.0 0.0 +es - fr 1 151 01/07 06:00 0.0 0.0 +es - fr 1 152 01/07 07:00 0.0 0.0 +es - fr 1 153 01/07 08:00 0.0 0.0 +es - fr 1 154 01/07 09:00 0.0 0.0 +es - fr 1 155 01/07 10:00 0.0 0.0 +es - fr 1 156 01/07 11:00 0.0 0.0 +es - fr 1 157 01/07 12:00 0.0 0.0 +es - fr 1 158 01/07 13:00 0.0 0.0 +es - fr 1 159 01/07 14:00 0.0 0.0 +es - fr 1 160 01/07 15:00 0.0 0.0 +es - fr 1 161 01/07 16:00 0.0 0.0 +es - fr 1 162 01/07 17:00 0.0 0.0 +es - fr 1 163 01/07 18:00 0.0 0.0 +es - fr 1 164 01/07 19:00 0.0 0.0 +es - fr 1 165 01/07 20:00 0.0 0.0 +es - fr 1 166 01/07 21:00 0.0 0.0 +es - fr 1 167 01/07 22:00 0.0 0.0 +es - fr 1 168 01/07 23:00 0.0 0.0 +es - fr 1 169 01/08 00:00 0.0 0.0 +es - fr 1 170 01/08 01:00 0.0 0.0 +es - fr 1 171 01/08 02:00 0.0 0.0 +es - fr 1 172 01/08 03:00 0.0 0.0 +es - fr 1 173 01/08 04:00 0.0 0.0 +es - fr 1 174 01/08 05:00 0.0 0.0 +es - fr 1 175 01/08 06:00 0.0 0.0 +es - fr 1 176 01/08 07:00 0.0 0.0 +es - fr 1 177 01/08 08:00 0.0 0.0 +es - fr 1 178 01/08 09:00 0.0 0.0 +es - fr 1 179 01/08 10:00 0.0 0.0 +es - fr 1 180 01/08 11:00 0.0 0.0 +es - fr 1 181 01/08 12:00 0.0 0.0 +es - fr 1 182 01/08 13:00 0.0 0.0 +es - fr 1 183 01/08 14:00 0.0 0.0 +es - fr 1 184 01/08 15:00 0.0 0.0 +es - fr 1 185 01/08 16:00 0.0 0.0 +es - fr 1 186 01/08 17:00 0.0 0.0 +es - fr 1 187 01/08 18:00 0.0 0.0 +es - fr 1 188 01/08 19:00 0.0 0.0 +es - fr 1 189 01/08 20:00 0.0 0.0 +es - fr 1 190 01/08 21:00 0.0 0.0 +es - fr 1 191 01/08 22:00 0.0 0.0 +es - fr 1 192 01/08 23:00 0.0 0.0 +es - fr 1 193 01/09 00:00 0.0 0.0 +es - fr 1 194 01/09 01:00 0.0 0.0 +es - fr 1 195 01/09 02:00 0.0 0.0 +es - fr 1 196 01/09 03:00 0.0 0.0 +es - fr 1 197 01/09 04:00 0.0 0.0 +es - fr 1 198 01/09 05:00 0.0 0.0 +es - fr 1 199 01/09 06:00 0.0 0.0 +es - fr 1 200 01/09 07:00 0.0 0.0 +es - fr 1 201 01/09 08:00 0.0 0.0 +es - fr 1 202 01/09 09:00 0.0 0.0 +es - fr 1 203 01/09 10:00 0.0 0.0 +es - fr 1 204 01/09 11:00 0.0 0.0 +es - fr 1 205 01/09 12:00 0.0 0.0 +es - fr 1 206 01/09 13:00 0.0 0.0 +es - fr 1 207 01/09 14:00 0.0 0.0 +es - fr 1 208 01/09 15:00 0.0 0.0 +es - fr 1 209 01/09 16:00 0.0 0.0 +es - fr 1 210 01/09 17:00 0.0 0.0 +es - fr 1 211 01/09 18:00 0.0 0.0 +es - fr 1 212 01/09 19:00 0.0 0.0 +es - fr 1 213 01/09 20:00 0.0 0.0 +es - fr 1 214 01/09 21:00 0.0 0.0 +es - fr 1 215 01/09 22:00 0.0 0.0 +es - fr 1 216 01/09 23:00 0.0 0.0 +es - fr 1 217 01/10 00:00 0.0 0.0 +es - fr 1 218 01/10 01:00 0.0 0.0 +es - fr 1 219 01/10 02:00 0.0 0.0 +es - fr 1 220 01/10 03:00 0.0 0.0 +es - fr 1 221 01/10 04:00 0.0 0.0 +es - fr 1 222 01/10 05:00 0.0 0.0 +es - fr 1 223 01/10 06:00 0.0 0.0 +es - fr 1 224 01/10 07:00 0.0 0.0 +es - fr 1 225 01/10 08:00 0.0 0.0 +es - fr 1 226 01/10 09:00 0.0 0.0 +es - fr 1 227 01/10 10:00 0.0 0.0 +es - fr 1 228 01/10 11:00 0.0 0.0 +es - fr 1 229 01/10 12:00 0.0 0.0 +es - fr 1 230 01/10 13:00 0.0 0.0 +es - fr 1 231 01/10 14:00 0.0 0.0 +es - fr 1 232 01/10 15:00 0.0 0.0 +es - fr 1 233 01/10 16:00 0.0 0.0 +es - fr 1 234 01/10 17:00 0.0 0.0 +es - fr 1 235 01/10 18:00 0.0 0.0 +es - fr 1 236 01/10 19:00 0.0 0.0 +es - fr 1 237 01/10 20:00 0.0 0.0 +es - fr 1 238 01/10 21:00 0.0 0.0 +es - fr 1 239 01/10 22:00 0.0 0.0 +es - fr 1 240 01/10 23:00 0.0 0.0 +es - fr 1 241 01/11 00:00 0.0 0.0 +es - fr 1 242 01/11 01:00 0.0 0.0 +es - fr 1 243 01/11 02:00 0.0 0.0 +es - fr 1 244 01/11 03:00 0.0 0.0 +es - fr 1 245 01/11 04:00 0.0 0.0 +es - fr 1 246 01/11 05:00 0.0 0.0 +es - fr 1 247 01/11 06:00 0.0 0.0 +es - fr 1 248 01/11 07:00 0.0 0.0 +es - fr 1 249 01/11 08:00 0.0 0.0 +es - fr 1 250 01/11 09:00 0.0 0.0 +es - fr 1 251 01/11 10:00 0.0 0.0 +es - fr 1 252 01/11 11:00 0.0 0.0 +es - fr 1 253 01/11 12:00 0.0 0.0 +es - fr 1 254 01/11 13:00 0.0 0.0 +es - fr 1 255 01/11 14:00 0.0 0.0 +es - fr 1 256 01/11 15:00 0.0 0.0 +es - fr 1 257 01/11 16:00 0.0 0.0 +es - fr 1 258 01/11 17:00 0.0 0.0 +es - fr 1 259 01/11 18:00 0.0 0.0 +es - fr 1 260 01/11 19:00 0.0 0.0 +es - fr 1 261 01/11 20:00 0.0 0.0 +es - fr 1 262 01/11 21:00 0.0 0.0 +es - fr 1 263 01/11 22:00 0.0 0.0 +es - fr 1 264 01/11 23:00 0.0 0.0 +es - fr 1 265 01/12 00:00 0.0 0.0 +es - fr 1 266 01/12 01:00 0.0 0.0 +es - fr 1 267 01/12 02:00 0.0 0.0 +es - fr 1 268 01/12 03:00 0.0 0.0 +es - fr 1 269 01/12 04:00 0.0 0.0 +es - fr 1 270 01/12 05:00 0.0 0.0 +es - fr 1 271 01/12 06:00 0.0 0.0 +es - fr 1 272 01/12 07:00 0.0 0.0 +es - fr 1 273 01/12 08:00 0.0 0.0 +es - fr 1 274 01/12 09:00 0.0 0.0 +es - fr 1 275 01/12 10:00 0.0 0.0 +es - fr 1 276 01/12 11:00 0.0 0.0 +es - fr 1 277 01/12 12:00 0.0 0.0 +es - fr 1 278 01/12 13:00 0.0 0.0 +es - fr 1 279 01/12 14:00 0.0 0.0 +es - fr 1 280 01/12 15:00 0.0 0.0 +es - fr 1 281 01/12 16:00 0.0 0.0 +es - fr 1 282 01/12 17:00 0.0 0.0 +es - fr 1 283 01/12 18:00 0.0 0.0 +es - fr 1 284 01/12 19:00 0.0 0.0 +es - fr 1 285 01/12 20:00 0.0 0.0 +es - fr 1 286 01/12 21:00 0.0 0.0 +es - fr 1 287 01/12 22:00 0.0 0.0 +es - fr 1 288 01/12 23:00 0.0 0.0 +es - fr 1 289 01/13 00:00 0.0 0.0 +es - fr 1 290 01/13 01:00 0.0 0.0 +es - fr 1 291 01/13 02:00 0.0 0.0 +es - fr 1 292 01/13 03:00 0.0 0.0 +es - fr 1 293 01/13 04:00 0.0 0.0 +es - fr 1 294 01/13 05:00 0.0 0.0 +es - fr 1 295 01/13 06:00 0.0 0.0 +es - fr 1 296 01/13 07:00 0.0 0.0 +es - fr 1 297 01/13 08:00 0.0 0.0 +es - fr 1 298 01/13 09:00 0.0 0.0 +es - fr 1 299 01/13 10:00 0.0 0.0 +es - fr 1 300 01/13 11:00 0.0 0.0 +es - fr 1 301 01/13 12:00 0.0 0.0 +es - fr 1 302 01/13 13:00 0.0 0.0 +es - fr 1 303 01/13 14:00 0.0 0.0 +es - fr 1 304 01/13 15:00 0.0 0.0 +es - fr 1 305 01/13 16:00 0.0 0.0 +es - fr 1 306 01/13 17:00 0.0 0.0 +es - fr 1 307 01/13 18:00 0.0 0.0 +es - fr 1 308 01/13 19:00 0.0 0.0 +es - fr 1 309 01/13 20:00 0.0 0.0 +es - fr 1 310 01/13 21:00 0.0 0.0 +es - fr 1 311 01/13 22:00 0.0 0.0 +es - fr 1 312 01/13 23:00 0.0 0.0 +es - fr 1 313 01/14 00:00 0.0 0.0 +es - fr 1 314 01/14 01:00 0.0 0.0 +es - fr 1 315 01/14 02:00 0.0 0.0 +es - fr 1 316 01/14 03:00 0.0 0.0 +es - fr 1 317 01/14 04:00 0.0 0.0 +es - fr 1 318 01/14 05:00 0.0 0.0 +es - fr 1 319 01/14 06:00 0.0 0.0 +es - fr 1 320 01/14 07:00 0.0 0.0 +es - fr 1 321 01/14 08:00 0.0 0.0 +es - fr 1 322 01/14 09:00 0.0 0.0 +es - fr 1 323 01/14 10:00 0.0 0.0 +es - fr 1 324 01/14 11:00 0.0 0.0 +es - fr 1 325 01/14 12:00 0.0 0.0 +es - fr 1 326 01/14 13:00 0.0 0.0 +es - fr 1 327 01/14 14:00 0.0 0.0 +es - fr 1 328 01/14 15:00 0.0 0.0 +es - fr 1 329 01/14 16:00 0.0 0.0 +es - fr 1 330 01/14 17:00 0.0 0.0 +es - fr 1 331 01/14 18:00 0.0 0.0 +es - fr 1 332 01/14 19:00 0.0 0.0 +es - fr 1 333 01/14 20:00 0.0 0.0 +es - fr 1 334 01/14 21:00 0.0 0.0 +es - fr 1 335 01/14 22:00 0.0 0.0 +es - fr 1 336 01/14 23:00 0.0 0.0 +fr - it 1 1 01/01 00:00 0.0 0.0 +fr - it 1 2 01/01 01:00 0.0 0.0 +fr - it 1 3 01/01 02:00 0.0 0.0 +fr - it 1 4 01/01 03:00 0.0 0.0 +fr - it 1 5 01/01 04:00 0.0 0.0 +fr - it 1 6 01/01 05:00 0.0 0.0 +fr - it 1 7 01/01 06:00 0.0 0.0 +fr - it 1 8 01/01 07:00 0.0 0.0 +fr - it 1 9 01/01 08:00 0.0 0.0 +fr - it 1 10 01/01 09:00 0.0 0.0 +fr - it 1 11 01/01 10:00 0.0 0.0 +fr - it 1 12 01/01 11:00 0.0 0.0 +fr - it 1 13 01/01 12:00 0.0 0.0 +fr - it 1 14 01/01 13:00 0.0 0.0 +fr - it 1 15 01/01 14:00 0.0 0.0 +fr - it 1 16 01/01 15:00 0.0 0.0 +fr - it 1 17 01/01 16:00 0.0 0.0 +fr - it 1 18 01/01 17:00 0.0 0.0 +fr - it 1 19 01/01 18:00 0.0 0.0 +fr - it 1 20 01/01 19:00 0.0 0.0 +fr - it 1 21 01/01 20:00 0.0 0.0 +fr - it 1 22 01/01 21:00 0.0 0.0 +fr - it 1 23 01/01 22:00 0.0 0.0 +fr - it 1 24 01/01 23:00 0.0 0.0 +fr - it 1 25 01/02 00:00 0.0 0.0 +fr - it 1 26 01/02 01:00 0.0 0.0 +fr - it 1 27 01/02 02:00 0.0 0.0 +fr - it 1 28 01/02 03:00 0.0 0.0 +fr - it 1 29 01/02 04:00 0.0 0.0 +fr - it 1 30 01/02 05:00 0.0 0.0 +fr - it 1 31 01/02 06:00 0.0 0.0 +fr - it 1 32 01/02 07:00 0.0 0.0 +fr - it 1 33 01/02 08:00 0.0 0.0 +fr - it 1 34 01/02 09:00 0.0 0.0 +fr - it 1 35 01/02 10:00 0.0 0.0 +fr - it 1 36 01/02 11:00 0.0 0.0 +fr - it 1 37 01/02 12:00 0.0 0.0 +fr - it 1 38 01/02 13:00 0.0 0.0 +fr - it 1 39 01/02 14:00 0.0 0.0 +fr - it 1 40 01/02 15:00 0.0 0.0 +fr - it 1 41 01/02 16:00 0.0 0.0 +fr - it 1 42 01/02 17:00 0.0 0.0 +fr - it 1 43 01/02 18:00 0.0 0.0 +fr - it 1 44 01/02 19:00 0.0 0.0 +fr - it 1 45 01/02 20:00 0.0 0.0 +fr - it 1 46 01/02 21:00 0.0 0.0 +fr - it 1 47 01/02 22:00 0.0 0.0 +fr - it 1 48 01/02 23:00 0.0 0.0 +fr - it 1 49 01/03 00:00 0.0 0.0 +fr - it 1 50 01/03 01:00 0.0 0.0 +fr - it 1 51 01/03 02:00 0.0 0.0 +fr - it 1 52 01/03 03:00 0.0 0.0 +fr - it 1 53 01/03 04:00 0.0 0.0 +fr - it 1 54 01/03 05:00 0.0 0.0 +fr - it 1 55 01/03 06:00 0.0 0.0 +fr - it 1 56 01/03 07:00 0.0 0.0 +fr - it 1 57 01/03 08:00 0.0 0.0 +fr - it 1 58 01/03 09:00 0.0 0.0 +fr - it 1 59 01/03 10:00 0.0 0.0 +fr - it 1 60 01/03 11:00 0.0 0.0 +fr - it 1 61 01/03 12:00 0.0 0.0 +fr - it 1 62 01/03 13:00 0.0 0.0 +fr - it 1 63 01/03 14:00 0.0 0.0 +fr - it 1 64 01/03 15:00 0.0 0.0 +fr - it 1 65 01/03 16:00 0.0 0.0 +fr - it 1 66 01/03 17:00 0.0 0.0 +fr - it 1 67 01/03 18:00 0.0 0.0 +fr - it 1 68 01/03 19:00 0.0 0.0 +fr - it 1 69 01/03 20:00 0.0 0.0 +fr - it 1 70 01/03 21:00 0.0 0.0 +fr - it 1 71 01/03 22:00 0.0 0.0 +fr - it 1 72 01/03 23:00 0.0 0.0 +fr - it 1 73 01/04 00:00 0.0 0.0 +fr - it 1 74 01/04 01:00 0.0 0.0 +fr - it 1 75 01/04 02:00 0.0 0.0 +fr - it 1 76 01/04 03:00 0.0 0.0 +fr - it 1 77 01/04 04:00 0.0 0.0 +fr - it 1 78 01/04 05:00 0.0 0.0 +fr - it 1 79 01/04 06:00 0.0 0.0 +fr - it 1 80 01/04 07:00 0.0 0.0 +fr - it 1 81 01/04 08:00 0.0 0.0 +fr - it 1 82 01/04 09:00 0.0 0.0 +fr - it 1 83 01/04 10:00 0.0 0.0 +fr - it 1 84 01/04 11:00 0.0 0.0 +fr - it 1 85 01/04 12:00 0.0 0.0 +fr - it 1 86 01/04 13:00 0.0 0.0 +fr - it 1 87 01/04 14:00 0.0 0.0 +fr - it 1 88 01/04 15:00 0.0 0.0 +fr - it 1 89 01/04 16:00 0.0 0.0 +fr - it 1 90 01/04 17:00 0.0 0.0 +fr - it 1 91 01/04 18:00 0.0 0.0 +fr - it 1 92 01/04 19:00 0.0 0.0 +fr - it 1 93 01/04 20:00 0.0 0.0 +fr - it 1 94 01/04 21:00 0.0 0.0 +fr - it 1 95 01/04 22:00 0.0 0.0 +fr - it 1 96 01/04 23:00 0.0 0.0 +fr - it 1 97 01/05 00:00 0.0 0.0 +fr - it 1 98 01/05 01:00 0.0 0.0 +fr - it 1 99 01/05 02:00 0.0 0.0 +fr - it 1 100 01/05 03:00 0.0 0.0 +fr - it 1 101 01/05 04:00 0.0 0.0 +fr - it 1 102 01/05 05:00 0.0 0.0 +fr - it 1 103 01/05 06:00 0.0 0.0 +fr - it 1 104 01/05 07:00 0.0 0.0 +fr - it 1 105 01/05 08:00 0.0 0.0 +fr - it 1 106 01/05 09:00 0.0 0.0 +fr - it 1 107 01/05 10:00 0.0 0.0 +fr - it 1 108 01/05 11:00 0.0 0.0 +fr - it 1 109 01/05 12:00 0.0 0.0 +fr - it 1 110 01/05 13:00 0.0 0.0 +fr - it 1 111 01/05 14:00 0.0 0.0 +fr - it 1 112 01/05 15:00 0.0 0.0 +fr - it 1 113 01/05 16:00 0.0 0.0 +fr - it 1 114 01/05 17:00 0.0 0.0 +fr - it 1 115 01/05 18:00 0.0 0.0 +fr - it 1 116 01/05 19:00 0.0 0.0 +fr - it 1 117 01/05 20:00 0.0 0.0 +fr - it 1 118 01/05 21:00 0.0 0.0 +fr - it 1 119 01/05 22:00 0.0 0.0 +fr - it 1 120 01/05 23:00 0.0 0.0 +fr - it 1 121 01/06 00:00 0.0 0.0 +fr - it 1 122 01/06 01:00 0.0 0.0 +fr - it 1 123 01/06 02:00 0.0 0.0 +fr - it 1 124 01/06 03:00 0.0 0.0 +fr - it 1 125 01/06 04:00 0.0 0.0 +fr - it 1 126 01/06 05:00 0.0 0.0 +fr - it 1 127 01/06 06:00 0.0 0.0 +fr - it 1 128 01/06 07:00 0.0 0.0 +fr - it 1 129 01/06 08:00 0.0 0.0 +fr - it 1 130 01/06 09:00 0.0 0.0 +fr - it 1 131 01/06 10:00 0.0 0.0 +fr - it 1 132 01/06 11:00 0.0 0.0 +fr - it 1 133 01/06 12:00 0.0 0.0 +fr - it 1 134 01/06 13:00 0.0 0.0 +fr - it 1 135 01/06 14:00 0.0 0.0 +fr - it 1 136 01/06 15:00 0.0 0.0 +fr - it 1 137 01/06 16:00 0.0 0.0 +fr - it 1 138 01/06 17:00 0.0 0.0 +fr - it 1 139 01/06 18:00 0.0 0.0 +fr - it 1 140 01/06 19:00 0.0 0.0 +fr - it 1 141 01/06 20:00 0.0 0.0 +fr - it 1 142 01/06 21:00 0.0 0.0 +fr - it 1 143 01/06 22:00 0.0 0.0 +fr - it 1 144 01/06 23:00 0.0 0.0 +fr - it 1 145 01/07 00:00 0.0 0.0 +fr - it 1 146 01/07 01:00 0.0 0.0 +fr - it 1 147 01/07 02:00 0.0 0.0 +fr - it 1 148 01/07 03:00 0.0 0.0 +fr - it 1 149 01/07 04:00 0.0 0.0 +fr - it 1 150 01/07 05:00 0.0 0.0 +fr - it 1 151 01/07 06:00 0.0 0.0 +fr - it 1 152 01/07 07:00 0.0 0.0 +fr - it 1 153 01/07 08:00 0.0 0.0 +fr - it 1 154 01/07 09:00 0.0 0.0 +fr - it 1 155 01/07 10:00 0.0 0.0 +fr - it 1 156 01/07 11:00 0.0 0.0 +fr - it 1 157 01/07 12:00 0.0 0.0 +fr - it 1 158 01/07 13:00 0.0 0.0 +fr - it 1 159 01/07 14:00 0.0 0.0 +fr - it 1 160 01/07 15:00 0.0 0.0 +fr - it 1 161 01/07 16:00 0.0 0.0 +fr - it 1 162 01/07 17:00 0.0 0.0 +fr - it 1 163 01/07 18:00 0.0 0.0 +fr - it 1 164 01/07 19:00 0.0 0.0 +fr - it 1 165 01/07 20:00 0.0 0.0 +fr - it 1 166 01/07 21:00 0.0 0.0 +fr - it 1 167 01/07 22:00 0.0 0.0 +fr - it 1 168 01/07 23:00 0.0 0.0 +fr - it 1 169 01/08 00:00 0.0 0.0 +fr - it 1 170 01/08 01:00 0.0 0.0 +fr - it 1 171 01/08 02:00 0.0 0.0 +fr - it 1 172 01/08 03:00 0.0 0.0 +fr - it 1 173 01/08 04:00 0.0 0.0 +fr - it 1 174 01/08 05:00 0.0 0.0 +fr - it 1 175 01/08 06:00 0.0 0.0 +fr - it 1 176 01/08 07:00 0.0 0.0 +fr - it 1 177 01/08 08:00 0.0 0.0 +fr - it 1 178 01/08 09:00 0.0 0.0 +fr - it 1 179 01/08 10:00 0.0 0.0 +fr - it 1 180 01/08 11:00 0.0 0.0 +fr - it 1 181 01/08 12:00 0.0 0.0 +fr - it 1 182 01/08 13:00 0.0 0.0 +fr - it 1 183 01/08 14:00 0.0 0.0 +fr - it 1 184 01/08 15:00 0.0 0.0 +fr - it 1 185 01/08 16:00 0.0 0.0 +fr - it 1 186 01/08 17:00 0.0 0.0 +fr - it 1 187 01/08 18:00 0.0 0.0 +fr - it 1 188 01/08 19:00 0.0 0.0 +fr - it 1 189 01/08 20:00 0.0 0.0 +fr - it 1 190 01/08 21:00 0.0 0.0 +fr - it 1 191 01/08 22:00 0.0 0.0 +fr - it 1 192 01/08 23:00 0.0 0.0 +fr - it 1 193 01/09 00:00 0.0 0.0 +fr - it 1 194 01/09 01:00 0.0 0.0 +fr - it 1 195 01/09 02:00 0.0 0.0 +fr - it 1 196 01/09 03:00 0.0 0.0 +fr - it 1 197 01/09 04:00 0.0 0.0 +fr - it 1 198 01/09 05:00 0.0 0.0 +fr - it 1 199 01/09 06:00 0.0 0.0 +fr - it 1 200 01/09 07:00 0.0 0.0 +fr - it 1 201 01/09 08:00 0.0 0.0 +fr - it 1 202 01/09 09:00 0.0 0.0 +fr - it 1 203 01/09 10:00 0.0 0.0 +fr - it 1 204 01/09 11:00 0.0 0.0 +fr - it 1 205 01/09 12:00 0.0 0.0 +fr - it 1 206 01/09 13:00 0.0 0.0 +fr - it 1 207 01/09 14:00 0.0 0.0 +fr - it 1 208 01/09 15:00 0.0 0.0 +fr - it 1 209 01/09 16:00 0.0 0.0 +fr - it 1 210 01/09 17:00 0.0 0.0 +fr - it 1 211 01/09 18:00 0.0 0.0 +fr - it 1 212 01/09 19:00 0.0 0.0 +fr - it 1 213 01/09 20:00 0.0 0.0 +fr - it 1 214 01/09 21:00 0.0 0.0 +fr - it 1 215 01/09 22:00 0.0 0.0 +fr - it 1 216 01/09 23:00 0.0 0.0 +fr - it 1 217 01/10 00:00 0.0 0.0 +fr - it 1 218 01/10 01:00 0.0 0.0 +fr - it 1 219 01/10 02:00 0.0 0.0 +fr - it 1 220 01/10 03:00 0.0 0.0 +fr - it 1 221 01/10 04:00 0.0 0.0 +fr - it 1 222 01/10 05:00 0.0 0.0 +fr - it 1 223 01/10 06:00 0.0 0.0 +fr - it 1 224 01/10 07:00 0.0 0.0 +fr - it 1 225 01/10 08:00 0.0 0.0 +fr - it 1 226 01/10 09:00 0.0 0.0 +fr - it 1 227 01/10 10:00 0.0 0.0 +fr - it 1 228 01/10 11:00 0.0 0.0 +fr - it 1 229 01/10 12:00 0.0 0.0 +fr - it 1 230 01/10 13:00 0.0 0.0 +fr - it 1 231 01/10 14:00 0.0 0.0 +fr - it 1 232 01/10 15:00 0.0 0.0 +fr - it 1 233 01/10 16:00 0.0 0.0 +fr - it 1 234 01/10 17:00 0.0 0.0 +fr - it 1 235 01/10 18:00 0.0 0.0 +fr - it 1 236 01/10 19:00 0.0 0.0 +fr - it 1 237 01/10 20:00 0.0 0.0 +fr - it 1 238 01/10 21:00 0.0 0.0 +fr - it 1 239 01/10 22:00 0.0 0.0 +fr - it 1 240 01/10 23:00 0.0 0.0 +fr - it 1 241 01/11 00:00 0.0 0.0 +fr - it 1 242 01/11 01:00 0.0 0.0 +fr - it 1 243 01/11 02:00 0.0 0.0 +fr - it 1 244 01/11 03:00 0.0 0.0 +fr - it 1 245 01/11 04:00 0.0 0.0 +fr - it 1 246 01/11 05:00 0.0 0.0 +fr - it 1 247 01/11 06:00 0.0 0.0 +fr - it 1 248 01/11 07:00 0.0 0.0 +fr - it 1 249 01/11 08:00 0.0 0.0 +fr - it 1 250 01/11 09:00 0.0 0.0 +fr - it 1 251 01/11 10:00 0.0 0.0 +fr - it 1 252 01/11 11:00 0.0 0.0 +fr - it 1 253 01/11 12:00 0.0 0.0 +fr - it 1 254 01/11 13:00 0.0 0.0 +fr - it 1 255 01/11 14:00 0.0 0.0 +fr - it 1 256 01/11 15:00 0.0 0.0 +fr - it 1 257 01/11 16:00 0.0 0.0 +fr - it 1 258 01/11 17:00 0.0 0.0 +fr - it 1 259 01/11 18:00 0.0 0.0 +fr - it 1 260 01/11 19:00 0.0 0.0 +fr - it 1 261 01/11 20:00 0.0 0.0 +fr - it 1 262 01/11 21:00 0.0 0.0 +fr - it 1 263 01/11 22:00 0.0 0.0 +fr - it 1 264 01/11 23:00 0.0 0.0 +fr - it 1 265 01/12 00:00 0.0 0.0 +fr - it 1 266 01/12 01:00 0.0 0.0 +fr - it 1 267 01/12 02:00 0.0 0.0 +fr - it 1 268 01/12 03:00 0.0 0.0 +fr - it 1 269 01/12 04:00 0.0 0.0 +fr - it 1 270 01/12 05:00 0.0 0.0 +fr - it 1 271 01/12 06:00 0.0 0.0 +fr - it 1 272 01/12 07:00 0.0 0.0 +fr - it 1 273 01/12 08:00 0.0 0.0 +fr - it 1 274 01/12 09:00 0.0 0.0 +fr - it 1 275 01/12 10:00 0.0 0.0 +fr - it 1 276 01/12 11:00 0.0 0.0 +fr - it 1 277 01/12 12:00 0.0 0.0 +fr - it 1 278 01/12 13:00 0.0 0.0 +fr - it 1 279 01/12 14:00 0.0 0.0 +fr - it 1 280 01/12 15:00 0.0 0.0 +fr - it 1 281 01/12 16:00 0.0 0.0 +fr - it 1 282 01/12 17:00 0.0 0.0 +fr - it 1 283 01/12 18:00 0.0 0.0 +fr - it 1 284 01/12 19:00 0.0 0.0 +fr - it 1 285 01/12 20:00 0.0 0.0 +fr - it 1 286 01/12 21:00 0.0 0.0 +fr - it 1 287 01/12 22:00 0.0 0.0 +fr - it 1 288 01/12 23:00 0.0 0.0 +fr - it 1 289 01/13 00:00 0.0 0.0 +fr - it 1 290 01/13 01:00 0.0 0.0 +fr - it 1 291 01/13 02:00 0.0 0.0 +fr - it 1 292 01/13 03:00 0.0 0.0 +fr - it 1 293 01/13 04:00 0.0 0.0 +fr - it 1 294 01/13 05:00 0.0 0.0 +fr - it 1 295 01/13 06:00 0.0 0.0 +fr - it 1 296 01/13 07:00 0.0 0.0 +fr - it 1 297 01/13 08:00 0.0 0.0 +fr - it 1 298 01/13 09:00 0.0 0.0 +fr - it 1 299 01/13 10:00 0.0 0.0 +fr - it 1 300 01/13 11:00 0.0 0.0 +fr - it 1 301 01/13 12:00 0.0 0.0 +fr - it 1 302 01/13 13:00 0.0 0.0 +fr - it 1 303 01/13 14:00 0.0 0.0 +fr - it 1 304 01/13 15:00 0.0 0.0 +fr - it 1 305 01/13 16:00 0.0 0.0 +fr - it 1 306 01/13 17:00 0.0 0.0 +fr - it 1 307 01/13 18:00 0.0 0.0 +fr - it 1 308 01/13 19:00 0.0 0.0 +fr - it 1 309 01/13 20:00 0.0 0.0 +fr - it 1 310 01/13 21:00 0.0 0.0 +fr - it 1 311 01/13 22:00 0.0 0.0 +fr - it 1 312 01/13 23:00 0.0 0.0 +fr - it 1 313 01/14 00:00 0.0 0.0 +fr - it 1 314 01/14 01:00 0.0 0.0 +fr - it 1 315 01/14 02:00 0.0 0.0 +fr - it 1 316 01/14 03:00 0.0 0.0 +fr - it 1 317 01/14 04:00 0.0 0.0 +fr - it 1 318 01/14 05:00 0.0 0.0 +fr - it 1 319 01/14 06:00 0.0 0.0 +fr - it 1 320 01/14 07:00 0.0 0.0 +fr - it 1 321 01/14 08:00 0.0 0.0 +fr - it 1 322 01/14 09:00 0.0 0.0 +fr - it 1 323 01/14 10:00 0.0 0.0 +fr - it 1 324 01/14 11:00 0.0 0.0 +fr - it 1 325 01/14 12:00 0.0 0.0 +fr - it 1 326 01/14 13:00 0.0 0.0 +fr - it 1 327 01/14 14:00 0.0 0.0 +fr - it 1 328 01/14 15:00 0.0 0.0 +fr - it 1 329 01/14 16:00 0.0 0.0 +fr - it 1 330 01/14 17:00 0.0 0.0 +fr - it 1 331 01/14 18:00 0.0 0.0 +fr - it 1 332 01/14 19:00 0.0 0.0 +fr - it 1 333 01/14 20:00 0.0 0.0 +fr - it 1 334 01/14 21:00 0.0 0.0 +fr - it 1 335 01/14 22:00 0.0 0.0 +fr - it 1 336 01/14 23:00 0.0 0.0 +de - fr 2 1 01/01 00:00 0.0 0.0 +de - fr 2 2 01/01 01:00 0.0 0.0 +de - fr 2 3 01/01 02:00 0.0 0.0 +de - fr 2 4 01/01 03:00 0.0 0.0 +de - fr 2 5 01/01 04:00 0.0 0.0 +de - fr 2 6 01/01 05:00 0.0 0.0 +de - fr 2 7 01/01 06:00 0.0 0.0 +de - fr 2 8 01/01 07:00 0.0 0.0 +de - fr 2 9 01/01 08:00 0.0 0.0 +de - fr 2 10 01/01 09:00 0.0 0.0 +de - fr 2 11 01/01 10:00 0.0 0.0 +de - fr 2 12 01/01 11:00 0.0 0.0 +de - fr 2 13 01/01 12:00 0.0 0.0 +de - fr 2 14 01/01 13:00 0.0 0.0 +de - fr 2 15 01/01 14:00 0.0 0.0 +de - fr 2 16 01/01 15:00 0.0 0.0 +de - fr 2 17 01/01 16:00 0.0 0.0 +de - fr 2 18 01/01 17:00 0.0 0.0 +de - fr 2 19 01/01 18:00 0.0 0.0 +de - fr 2 20 01/01 19:00 0.0 0.0 +de - fr 2 21 01/01 20:00 0.0 0.0 +de - fr 2 22 01/01 21:00 0.0 0.0 +de - fr 2 23 01/01 22:00 0.0 0.0 +de - fr 2 24 01/01 23:00 0.0 0.0 +de - fr 2 25 01/02 00:00 0.0 0.0 +de - fr 2 26 01/02 01:00 0.0 0.0 +de - fr 2 27 01/02 02:00 0.0 0.0 +de - fr 2 28 01/02 03:00 0.0 0.0 +de - fr 2 29 01/02 04:00 0.0 0.0 +de - fr 2 30 01/02 05:00 0.0 0.0 +de - fr 2 31 01/02 06:00 0.0 0.0 +de - fr 2 32 01/02 07:00 0.0 0.0 +de - fr 2 33 01/02 08:00 0.0 0.0 +de - fr 2 34 01/02 09:00 0.0 0.0 +de - fr 2 35 01/02 10:00 0.0 0.0 +de - fr 2 36 01/02 11:00 0.0 0.0 +de - fr 2 37 01/02 12:00 0.0 0.0 +de - fr 2 38 01/02 13:00 0.0 0.0 +de - fr 2 39 01/02 14:00 0.0 0.0 +de - fr 2 40 01/02 15:00 0.0 0.0 +de - fr 2 41 01/02 16:00 0.0 0.0 +de - fr 2 42 01/02 17:00 0.0 0.0 +de - fr 2 43 01/02 18:00 0.0 0.0 +de - fr 2 44 01/02 19:00 0.0 0.0 +de - fr 2 45 01/02 20:00 0.0 0.0 +de - fr 2 46 01/02 21:00 0.0 0.0 +de - fr 2 47 01/02 22:00 0.0 0.0 +de - fr 2 48 01/02 23:00 0.0 0.0 +de - fr 2 49 01/03 00:00 0.0 0.0 +de - fr 2 50 01/03 01:00 0.0 0.0 +de - fr 2 51 01/03 02:00 0.0 0.0 +de - fr 2 52 01/03 03:00 0.0 0.0 +de - fr 2 53 01/03 04:00 0.0 0.0 +de - fr 2 54 01/03 05:00 0.0 0.0 +de - fr 2 55 01/03 06:00 0.0 0.0 +de - fr 2 56 01/03 07:00 0.0 0.0 +de - fr 2 57 01/03 08:00 0.0 0.0 +de - fr 2 58 01/03 09:00 0.0 0.0 +de - fr 2 59 01/03 10:00 0.0 0.0 +de - fr 2 60 01/03 11:00 0.0 0.0 +de - fr 2 61 01/03 12:00 0.0 0.0 +de - fr 2 62 01/03 13:00 0.0 0.0 +de - fr 2 63 01/03 14:00 0.0 0.0 +de - fr 2 64 01/03 15:00 0.0 0.0 +de - fr 2 65 01/03 16:00 0.0 0.0 +de - fr 2 66 01/03 17:00 0.0 0.0 +de - fr 2 67 01/03 18:00 0.0 0.0 +de - fr 2 68 01/03 19:00 0.0 0.0 +de - fr 2 69 01/03 20:00 0.0 0.0 +de - fr 2 70 01/03 21:00 0.0 0.0 +de - fr 2 71 01/03 22:00 0.0 0.0 +de - fr 2 72 01/03 23:00 0.0 0.0 +de - fr 2 73 01/04 00:00 0.0 0.0 +de - fr 2 74 01/04 01:00 0.0 0.0 +de - fr 2 75 01/04 02:00 0.0 0.0 +de - fr 2 76 01/04 03:00 0.0 0.0 +de - fr 2 77 01/04 04:00 0.0 0.0 +de - fr 2 78 01/04 05:00 0.0 0.0 +de - fr 2 79 01/04 06:00 0.0 0.0 +de - fr 2 80 01/04 07:00 0.0 0.0 +de - fr 2 81 01/04 08:00 0.0 0.0 +de - fr 2 82 01/04 09:00 0.0 0.0 +de - fr 2 83 01/04 10:00 0.0 0.0 +de - fr 2 84 01/04 11:00 0.0 0.0 +de - fr 2 85 01/04 12:00 0.0 0.0 +de - fr 2 86 01/04 13:00 0.0 0.0 +de - fr 2 87 01/04 14:00 0.0 0.0 +de - fr 2 88 01/04 15:00 0.0 0.0 +de - fr 2 89 01/04 16:00 0.0 0.0 +de - fr 2 90 01/04 17:00 0.0 0.0 +de - fr 2 91 01/04 18:00 0.0 0.0 +de - fr 2 92 01/04 19:00 0.0 0.0 +de - fr 2 93 01/04 20:00 0.0 0.0 +de - fr 2 94 01/04 21:00 0.0 0.0 +de - fr 2 95 01/04 22:00 0.0 0.0 +de - fr 2 96 01/04 23:00 0.0 0.0 +de - fr 2 97 01/05 00:00 0.0 0.0 +de - fr 2 98 01/05 01:00 0.0 0.0 +de - fr 2 99 01/05 02:00 0.0 0.0 +de - fr 2 100 01/05 03:00 0.0 0.0 +de - fr 2 101 01/05 04:00 0.0 0.0 +de - fr 2 102 01/05 05:00 0.0 0.0 +de - fr 2 103 01/05 06:00 0.0 0.0 +de - fr 2 104 01/05 07:00 0.0 0.0 +de - fr 2 105 01/05 08:00 0.0 0.0 +de - fr 2 106 01/05 09:00 0.0 0.0 +de - fr 2 107 01/05 10:00 0.0 0.0 +de - fr 2 108 01/05 11:00 0.0 0.0 +de - fr 2 109 01/05 12:00 0.0 0.0 +de - fr 2 110 01/05 13:00 0.0 0.0 +de - fr 2 111 01/05 14:00 0.0 0.0 +de - fr 2 112 01/05 15:00 0.0 0.0 +de - fr 2 113 01/05 16:00 0.0 0.0 +de - fr 2 114 01/05 17:00 0.0 0.0 +de - fr 2 115 01/05 18:00 0.0 0.0 +de - fr 2 116 01/05 19:00 0.0 0.0 +de - fr 2 117 01/05 20:00 0.0 0.0 +de - fr 2 118 01/05 21:00 0.0 0.0 +de - fr 2 119 01/05 22:00 0.0 0.0 +de - fr 2 120 01/05 23:00 0.0 0.0 +de - fr 2 121 01/06 00:00 0.0 0.0 +de - fr 2 122 01/06 01:00 0.0 0.0 +de - fr 2 123 01/06 02:00 0.0 0.0 +de - fr 2 124 01/06 03:00 0.0 0.0 +de - fr 2 125 01/06 04:00 0.0 0.0 +de - fr 2 126 01/06 05:00 0.0 0.0 +de - fr 2 127 01/06 06:00 0.0 0.0 +de - fr 2 128 01/06 07:00 0.0 0.0 +de - fr 2 129 01/06 08:00 0.0 0.0 +de - fr 2 130 01/06 09:00 0.0 0.0 +de - fr 2 131 01/06 10:00 0.0 0.0 +de - fr 2 132 01/06 11:00 0.0 0.0 +de - fr 2 133 01/06 12:00 0.0 0.0 +de - fr 2 134 01/06 13:00 0.0 0.0 +de - fr 2 135 01/06 14:00 0.0 0.0 +de - fr 2 136 01/06 15:00 0.0 0.0 +de - fr 2 137 01/06 16:00 0.0 0.0 +de - fr 2 138 01/06 17:00 0.0 0.0 +de - fr 2 139 01/06 18:00 0.0 0.0 +de - fr 2 140 01/06 19:00 0.0 0.0 +de - fr 2 141 01/06 20:00 0.0 0.0 +de - fr 2 142 01/06 21:00 0.0 0.0 +de - fr 2 143 01/06 22:00 0.0 0.0 +de - fr 2 144 01/06 23:00 0.0 0.0 +de - fr 2 145 01/07 00:00 0.0 0.0 +de - fr 2 146 01/07 01:00 0.0 0.0 +de - fr 2 147 01/07 02:00 0.0 0.0 +de - fr 2 148 01/07 03:00 0.0 0.0 +de - fr 2 149 01/07 04:00 0.0 0.0 +de - fr 2 150 01/07 05:00 0.0 0.0 +de - fr 2 151 01/07 06:00 0.0 0.0 +de - fr 2 152 01/07 07:00 0.0 0.0 +de - fr 2 153 01/07 08:00 0.0 0.0 +de - fr 2 154 01/07 09:00 0.0 0.0 +de - fr 2 155 01/07 10:00 0.0 0.0 +de - fr 2 156 01/07 11:00 0.0 0.0 +de - fr 2 157 01/07 12:00 0.0 0.0 +de - fr 2 158 01/07 13:00 0.0 0.0 +de - fr 2 159 01/07 14:00 0.0 0.0 +de - fr 2 160 01/07 15:00 0.0 0.0 +de - fr 2 161 01/07 16:00 0.0 0.0 +de - fr 2 162 01/07 17:00 0.0 0.0 +de - fr 2 163 01/07 18:00 0.0 0.0 +de - fr 2 164 01/07 19:00 0.0 0.0 +de - fr 2 165 01/07 20:00 0.0 0.0 +de - fr 2 166 01/07 21:00 0.0 0.0 +de - fr 2 167 01/07 22:00 0.0 0.0 +de - fr 2 168 01/07 23:00 0.0 0.0 +de - fr 2 169 01/08 00:00 0.0 0.0 +de - fr 2 170 01/08 01:00 0.0 0.0 +de - fr 2 171 01/08 02:00 0.0 0.0 +de - fr 2 172 01/08 03:00 0.0 0.0 +de - fr 2 173 01/08 04:00 0.0 0.0 +de - fr 2 174 01/08 05:00 0.0 0.0 +de - fr 2 175 01/08 06:00 0.0 0.0 +de - fr 2 176 01/08 07:00 0.0 0.0 +de - fr 2 177 01/08 08:00 0.0 0.0 +de - fr 2 178 01/08 09:00 0.0 0.0 +de - fr 2 179 01/08 10:00 0.0 0.0 +de - fr 2 180 01/08 11:00 0.0 0.0 +de - fr 2 181 01/08 12:00 0.0 0.0 +de - fr 2 182 01/08 13:00 0.0 0.0 +de - fr 2 183 01/08 14:00 0.0 0.0 +de - fr 2 184 01/08 15:00 0.0 0.0 +de - fr 2 185 01/08 16:00 0.0 0.0 +de - fr 2 186 01/08 17:00 0.0 0.0 +de - fr 2 187 01/08 18:00 0.0 0.0 +de - fr 2 188 01/08 19:00 0.0 0.0 +de - fr 2 189 01/08 20:00 0.0 0.0 +de - fr 2 190 01/08 21:00 0.0 0.0 +de - fr 2 191 01/08 22:00 0.0 0.0 +de - fr 2 192 01/08 23:00 0.0 0.0 +de - fr 2 193 01/09 00:00 0.0 0.0 +de - fr 2 194 01/09 01:00 0.0 0.0 +de - fr 2 195 01/09 02:00 0.0 0.0 +de - fr 2 196 01/09 03:00 0.0 0.0 +de - fr 2 197 01/09 04:00 0.0 0.0 +de - fr 2 198 01/09 05:00 0.0 0.0 +de - fr 2 199 01/09 06:00 0.0 0.0 +de - fr 2 200 01/09 07:00 0.0 0.0 +de - fr 2 201 01/09 08:00 0.0 0.0 +de - fr 2 202 01/09 09:00 0.0 0.0 +de - fr 2 203 01/09 10:00 0.0 0.0 +de - fr 2 204 01/09 11:00 0.0 0.0 +de - fr 2 205 01/09 12:00 0.0 0.0 +de - fr 2 206 01/09 13:00 0.0 0.0 +de - fr 2 207 01/09 14:00 0.0 0.0 +de - fr 2 208 01/09 15:00 0.0 0.0 +de - fr 2 209 01/09 16:00 0.0 0.0 +de - fr 2 210 01/09 17:00 0.0 0.0 +de - fr 2 211 01/09 18:00 0.0 0.0 +de - fr 2 212 01/09 19:00 0.0 0.0 +de - fr 2 213 01/09 20:00 0.0 0.0 +de - fr 2 214 01/09 21:00 0.0 0.0 +de - fr 2 215 01/09 22:00 0.0 0.0 +de - fr 2 216 01/09 23:00 0.0 0.0 +de - fr 2 217 01/10 00:00 0.0 0.0 +de - fr 2 218 01/10 01:00 0.0 0.0 +de - fr 2 219 01/10 02:00 0.0 0.0 +de - fr 2 220 01/10 03:00 0.0 0.0 +de - fr 2 221 01/10 04:00 0.0 0.0 +de - fr 2 222 01/10 05:00 0.0 0.0 +de - fr 2 223 01/10 06:00 0.0 0.0 +de - fr 2 224 01/10 07:00 0.0 0.0 +de - fr 2 225 01/10 08:00 0.0 0.0 +de - fr 2 226 01/10 09:00 0.0 0.0 +de - fr 2 227 01/10 10:00 0.0 0.0 +de - fr 2 228 01/10 11:00 0.0 0.0 +de - fr 2 229 01/10 12:00 0.0 0.0 +de - fr 2 230 01/10 13:00 0.0 0.0 +de - fr 2 231 01/10 14:00 0.0 0.0 +de - fr 2 232 01/10 15:00 0.0 0.0 +de - fr 2 233 01/10 16:00 0.0 0.0 +de - fr 2 234 01/10 17:00 0.0 0.0 +de - fr 2 235 01/10 18:00 0.0 0.0 +de - fr 2 236 01/10 19:00 0.0 0.0 +de - fr 2 237 01/10 20:00 0.0 0.0 +de - fr 2 238 01/10 21:00 0.0 0.0 +de - fr 2 239 01/10 22:00 0.0 0.0 +de - fr 2 240 01/10 23:00 0.0 0.0 +de - fr 2 241 01/11 00:00 0.0 0.0 +de - fr 2 242 01/11 01:00 0.0 0.0 +de - fr 2 243 01/11 02:00 0.0 0.0 +de - fr 2 244 01/11 03:00 0.0 0.0 +de - fr 2 245 01/11 04:00 0.0 0.0 +de - fr 2 246 01/11 05:00 0.0 0.0 +de - fr 2 247 01/11 06:00 0.0 0.0 +de - fr 2 248 01/11 07:00 0.0 0.0 +de - fr 2 249 01/11 08:00 0.0 0.0 +de - fr 2 250 01/11 09:00 0.0 0.0 +de - fr 2 251 01/11 10:00 0.0 0.0 +de - fr 2 252 01/11 11:00 0.0 0.0 +de - fr 2 253 01/11 12:00 0.0 0.0 +de - fr 2 254 01/11 13:00 0.0 0.0 +de - fr 2 255 01/11 14:00 0.0 0.0 +de - fr 2 256 01/11 15:00 0.0 0.0 +de - fr 2 257 01/11 16:00 0.0 0.0 +de - fr 2 258 01/11 17:00 0.0 0.0 +de - fr 2 259 01/11 18:00 0.0 0.0 +de - fr 2 260 01/11 19:00 0.0 0.0 +de - fr 2 261 01/11 20:00 0.0 0.0 +de - fr 2 262 01/11 21:00 0.0 0.0 +de - fr 2 263 01/11 22:00 0.0 0.0 +de - fr 2 264 01/11 23:00 0.0 0.0 +de - fr 2 265 01/12 00:00 0.0 0.0 +de - fr 2 266 01/12 01:00 0.0 0.0 +de - fr 2 267 01/12 02:00 0.0 0.0 +de - fr 2 268 01/12 03:00 0.0 0.0 +de - fr 2 269 01/12 04:00 0.0 0.0 +de - fr 2 270 01/12 05:00 0.0 0.0 +de - fr 2 271 01/12 06:00 0.0 0.0 +de - fr 2 272 01/12 07:00 0.0 0.0 +de - fr 2 273 01/12 08:00 0.0 0.0 +de - fr 2 274 01/12 09:00 0.0 0.0 +de - fr 2 275 01/12 10:00 0.0 0.0 +de - fr 2 276 01/12 11:00 0.0 0.0 +de - fr 2 277 01/12 12:00 0.0 0.0 +de - fr 2 278 01/12 13:00 0.0 0.0 +de - fr 2 279 01/12 14:00 0.0 0.0 +de - fr 2 280 01/12 15:00 0.0 0.0 +de - fr 2 281 01/12 16:00 0.0 0.0 +de - fr 2 282 01/12 17:00 0.0 0.0 +de - fr 2 283 01/12 18:00 0.0 0.0 +de - fr 2 284 01/12 19:00 0.0 0.0 +de - fr 2 285 01/12 20:00 0.0 0.0 +de - fr 2 286 01/12 21:00 0.0 0.0 +de - fr 2 287 01/12 22:00 0.0 0.0 +de - fr 2 288 01/12 23:00 0.0 0.0 +de - fr 2 289 01/13 00:00 0.0 0.0 +de - fr 2 290 01/13 01:00 0.0 0.0 +de - fr 2 291 01/13 02:00 0.0 0.0 +de - fr 2 292 01/13 03:00 0.0 0.0 +de - fr 2 293 01/13 04:00 0.0 0.0 +de - fr 2 294 01/13 05:00 0.0 0.0 +de - fr 2 295 01/13 06:00 0.0 0.0 +de - fr 2 296 01/13 07:00 0.0 0.0 +de - fr 2 297 01/13 08:00 0.0 0.0 +de - fr 2 298 01/13 09:00 0.0 0.0 +de - fr 2 299 01/13 10:00 0.0 0.0 +de - fr 2 300 01/13 11:00 0.0 0.0 +de - fr 2 301 01/13 12:00 0.0 0.0 +de - fr 2 302 01/13 13:00 0.0 0.0 +de - fr 2 303 01/13 14:00 0.0 0.0 +de - fr 2 304 01/13 15:00 0.0 0.0 +de - fr 2 305 01/13 16:00 0.0 0.0 +de - fr 2 306 01/13 17:00 0.0 0.0 +de - fr 2 307 01/13 18:00 0.0 0.0 +de - fr 2 308 01/13 19:00 0.0 0.0 +de - fr 2 309 01/13 20:00 0.0 0.0 +de - fr 2 310 01/13 21:00 0.0 0.0 +de - fr 2 311 01/13 22:00 0.0 0.0 +de - fr 2 312 01/13 23:00 0.0 0.0 +de - fr 2 313 01/14 00:00 0.0 0.0 +de - fr 2 314 01/14 01:00 0.0 0.0 +de - fr 2 315 01/14 02:00 0.0 0.0 +de - fr 2 316 01/14 03:00 0.0 0.0 +de - fr 2 317 01/14 04:00 0.0 0.0 +de - fr 2 318 01/14 05:00 0.0 0.0 +de - fr 2 319 01/14 06:00 0.0 0.0 +de - fr 2 320 01/14 07:00 0.0 0.0 +de - fr 2 321 01/14 08:00 0.0 0.0 +de - fr 2 322 01/14 09:00 0.0 0.0 +de - fr 2 323 01/14 10:00 0.0 0.0 +de - fr 2 324 01/14 11:00 0.0 0.0 +de - fr 2 325 01/14 12:00 0.0 0.0 +de - fr 2 326 01/14 13:00 0.0 0.0 +de - fr 2 327 01/14 14:00 0.0 0.0 +de - fr 2 328 01/14 15:00 0.0 0.0 +de - fr 2 329 01/14 16:00 0.0 0.0 +de - fr 2 330 01/14 17:00 0.0 0.0 +de - fr 2 331 01/14 18:00 0.0 0.0 +de - fr 2 332 01/14 19:00 0.0 0.0 +de - fr 2 333 01/14 20:00 0.0 0.0 +de - fr 2 334 01/14 21:00 0.0 0.0 +de - fr 2 335 01/14 22:00 0.0 0.0 +de - fr 2 336 01/14 23:00 0.0 0.0 +es - fr 2 1 01/01 00:00 0.0 0.0 +es - fr 2 2 01/01 01:00 0.0 0.0 +es - fr 2 3 01/01 02:00 0.0 0.0 +es - fr 2 4 01/01 03:00 0.0 0.0 +es - fr 2 5 01/01 04:00 0.0 0.0 +es - fr 2 6 01/01 05:00 0.0 0.0 +es - fr 2 7 01/01 06:00 0.0 0.0 +es - fr 2 8 01/01 07:00 0.0 0.0 +es - fr 2 9 01/01 08:00 0.0 0.0 +es - fr 2 10 01/01 09:00 0.0 0.0 +es - fr 2 11 01/01 10:00 0.0 0.0 +es - fr 2 12 01/01 11:00 0.0 0.0 +es - fr 2 13 01/01 12:00 0.0 0.0 +es - fr 2 14 01/01 13:00 0.0 0.0 +es - fr 2 15 01/01 14:00 0.0 0.0 +es - fr 2 16 01/01 15:00 0.0 0.0 +es - fr 2 17 01/01 16:00 0.0 0.0 +es - fr 2 18 01/01 17:00 0.0 0.0 +es - fr 2 19 01/01 18:00 0.0 0.0 +es - fr 2 20 01/01 19:00 0.0 0.0 +es - fr 2 21 01/01 20:00 0.0 0.0 +es - fr 2 22 01/01 21:00 0.0 0.0 +es - fr 2 23 01/01 22:00 0.0 0.0 +es - fr 2 24 01/01 23:00 0.0 0.0 +es - fr 2 25 01/02 00:00 0.0 0.0 +es - fr 2 26 01/02 01:00 0.0 0.0 +es - fr 2 27 01/02 02:00 0.0 0.0 +es - fr 2 28 01/02 03:00 0.0 0.0 +es - fr 2 29 01/02 04:00 0.0 0.0 +es - fr 2 30 01/02 05:00 0.0 0.0 +es - fr 2 31 01/02 06:00 0.0 0.0 +es - fr 2 32 01/02 07:00 0.0 0.0 +es - fr 2 33 01/02 08:00 0.0 0.0 +es - fr 2 34 01/02 09:00 0.0 0.0 +es - fr 2 35 01/02 10:00 0.0 0.0 +es - fr 2 36 01/02 11:00 0.0 0.0 +es - fr 2 37 01/02 12:00 0.0 0.0 +es - fr 2 38 01/02 13:00 0.0 0.0 +es - fr 2 39 01/02 14:00 0.0 0.0 +es - fr 2 40 01/02 15:00 0.0 0.0 +es - fr 2 41 01/02 16:00 0.0 0.0 +es - fr 2 42 01/02 17:00 0.0 0.0 +es - fr 2 43 01/02 18:00 0.0 0.0 +es - fr 2 44 01/02 19:00 0.0 0.0 +es - fr 2 45 01/02 20:00 0.0 0.0 +es - fr 2 46 01/02 21:00 0.0 0.0 +es - fr 2 47 01/02 22:00 0.0 0.0 +es - fr 2 48 01/02 23:00 0.0 0.0 +es - fr 2 49 01/03 00:00 0.0 0.0 +es - fr 2 50 01/03 01:00 0.0 0.0 +es - fr 2 51 01/03 02:00 0.0 0.0 +es - fr 2 52 01/03 03:00 0.0 0.0 +es - fr 2 53 01/03 04:00 0.0 0.0 +es - fr 2 54 01/03 05:00 0.0 0.0 +es - fr 2 55 01/03 06:00 0.0 0.0 +es - fr 2 56 01/03 07:00 0.0 0.0 +es - fr 2 57 01/03 08:00 0.0 0.0 +es - fr 2 58 01/03 09:00 0.0 0.0 +es - fr 2 59 01/03 10:00 0.0 0.0 +es - fr 2 60 01/03 11:00 0.0 0.0 +es - fr 2 61 01/03 12:00 0.0 0.0 +es - fr 2 62 01/03 13:00 0.0 0.0 +es - fr 2 63 01/03 14:00 0.0 0.0 +es - fr 2 64 01/03 15:00 0.0 0.0 +es - fr 2 65 01/03 16:00 0.0 0.0 +es - fr 2 66 01/03 17:00 0.0 0.0 +es - fr 2 67 01/03 18:00 0.0 0.0 +es - fr 2 68 01/03 19:00 0.0 0.0 +es - fr 2 69 01/03 20:00 0.0 0.0 +es - fr 2 70 01/03 21:00 0.0 0.0 +es - fr 2 71 01/03 22:00 0.0 0.0 +es - fr 2 72 01/03 23:00 0.0 0.0 +es - fr 2 73 01/04 00:00 0.0 0.0 +es - fr 2 74 01/04 01:00 0.0 0.0 +es - fr 2 75 01/04 02:00 0.0 0.0 +es - fr 2 76 01/04 03:00 0.0 0.0 +es - fr 2 77 01/04 04:00 0.0 0.0 +es - fr 2 78 01/04 05:00 0.0 0.0 +es - fr 2 79 01/04 06:00 0.0 0.0 +es - fr 2 80 01/04 07:00 0.0 0.0 +es - fr 2 81 01/04 08:00 0.0 0.0 +es - fr 2 82 01/04 09:00 0.0 0.0 +es - fr 2 83 01/04 10:00 0.0 0.0 +es - fr 2 84 01/04 11:00 0.0 0.0 +es - fr 2 85 01/04 12:00 0.0 0.0 +es - fr 2 86 01/04 13:00 0.0 0.0 +es - fr 2 87 01/04 14:00 0.0 0.0 +es - fr 2 88 01/04 15:00 0.0 0.0 +es - fr 2 89 01/04 16:00 0.0 0.0 +es - fr 2 90 01/04 17:00 0.0 0.0 +es - fr 2 91 01/04 18:00 0.0 0.0 +es - fr 2 92 01/04 19:00 0.0 0.0 +es - fr 2 93 01/04 20:00 0.0 0.0 +es - fr 2 94 01/04 21:00 0.0 0.0 +es - fr 2 95 01/04 22:00 0.0 0.0 +es - fr 2 96 01/04 23:00 0.0 0.0 +es - fr 2 97 01/05 00:00 0.0 0.0 +es - fr 2 98 01/05 01:00 0.0 0.0 +es - fr 2 99 01/05 02:00 0.0 0.0 +es - fr 2 100 01/05 03:00 0.0 0.0 +es - fr 2 101 01/05 04:00 0.0 0.0 +es - fr 2 102 01/05 05:00 0.0 0.0 +es - fr 2 103 01/05 06:00 0.0 0.0 +es - fr 2 104 01/05 07:00 0.0 0.0 +es - fr 2 105 01/05 08:00 0.0 0.0 +es - fr 2 106 01/05 09:00 0.0 0.0 +es - fr 2 107 01/05 10:00 0.0 0.0 +es - fr 2 108 01/05 11:00 0.0 0.0 +es - fr 2 109 01/05 12:00 0.0 0.0 +es - fr 2 110 01/05 13:00 0.0 0.0 +es - fr 2 111 01/05 14:00 0.0 0.0 +es - fr 2 112 01/05 15:00 0.0 0.0 +es - fr 2 113 01/05 16:00 0.0 0.0 +es - fr 2 114 01/05 17:00 0.0 0.0 +es - fr 2 115 01/05 18:00 0.0 0.0 +es - fr 2 116 01/05 19:00 0.0 0.0 +es - fr 2 117 01/05 20:00 0.0 0.0 +es - fr 2 118 01/05 21:00 0.0 0.0 +es - fr 2 119 01/05 22:00 0.0 0.0 +es - fr 2 120 01/05 23:00 0.0 0.0 +es - fr 2 121 01/06 00:00 0.0 0.0 +es - fr 2 122 01/06 01:00 0.0 0.0 +es - fr 2 123 01/06 02:00 0.0 0.0 +es - fr 2 124 01/06 03:00 0.0 0.0 +es - fr 2 125 01/06 04:00 0.0 0.0 +es - fr 2 126 01/06 05:00 0.0 0.0 +es - fr 2 127 01/06 06:00 0.0 0.0 +es - fr 2 128 01/06 07:00 0.0 0.0 +es - fr 2 129 01/06 08:00 0.0 0.0 +es - fr 2 130 01/06 09:00 0.0 0.0 +es - fr 2 131 01/06 10:00 0.0 0.0 +es - fr 2 132 01/06 11:00 0.0 0.0 +es - fr 2 133 01/06 12:00 0.0 0.0 +es - fr 2 134 01/06 13:00 0.0 0.0 +es - fr 2 135 01/06 14:00 0.0 0.0 +es - fr 2 136 01/06 15:00 0.0 0.0 +es - fr 2 137 01/06 16:00 0.0 0.0 +es - fr 2 138 01/06 17:00 0.0 0.0 +es - fr 2 139 01/06 18:00 0.0 0.0 +es - fr 2 140 01/06 19:00 0.0 0.0 +es - fr 2 141 01/06 20:00 0.0 0.0 +es - fr 2 142 01/06 21:00 0.0 0.0 +es - fr 2 143 01/06 22:00 0.0 0.0 +es - fr 2 144 01/06 23:00 0.0 0.0 +es - fr 2 145 01/07 00:00 0.0 0.0 +es - fr 2 146 01/07 01:00 0.0 0.0 +es - fr 2 147 01/07 02:00 0.0 0.0 +es - fr 2 148 01/07 03:00 0.0 0.0 +es - fr 2 149 01/07 04:00 0.0 0.0 +es - fr 2 150 01/07 05:00 0.0 0.0 +es - fr 2 151 01/07 06:00 0.0 0.0 +es - fr 2 152 01/07 07:00 0.0 0.0 +es - fr 2 153 01/07 08:00 0.0 0.0 +es - fr 2 154 01/07 09:00 0.0 0.0 +es - fr 2 155 01/07 10:00 0.0 0.0 +es - fr 2 156 01/07 11:00 0.0 0.0 +es - fr 2 157 01/07 12:00 0.0 0.0 +es - fr 2 158 01/07 13:00 0.0 0.0 +es - fr 2 159 01/07 14:00 0.0 0.0 +es - fr 2 160 01/07 15:00 0.0 0.0 +es - fr 2 161 01/07 16:00 0.0 0.0 +es - fr 2 162 01/07 17:00 0.0 0.0 +es - fr 2 163 01/07 18:00 0.0 0.0 +es - fr 2 164 01/07 19:00 0.0 0.0 +es - fr 2 165 01/07 20:00 0.0 0.0 +es - fr 2 166 01/07 21:00 0.0 0.0 +es - fr 2 167 01/07 22:00 0.0 0.0 +es - fr 2 168 01/07 23:00 0.0 0.0 +es - fr 2 169 01/08 00:00 0.0 0.0 +es - fr 2 170 01/08 01:00 0.0 0.0 +es - fr 2 171 01/08 02:00 0.0 0.0 +es - fr 2 172 01/08 03:00 0.0 0.0 +es - fr 2 173 01/08 04:00 0.0 0.0 +es - fr 2 174 01/08 05:00 0.0 0.0 +es - fr 2 175 01/08 06:00 0.0 0.0 +es - fr 2 176 01/08 07:00 0.0 0.0 +es - fr 2 177 01/08 08:00 0.0 0.0 +es - fr 2 178 01/08 09:00 0.0 0.0 +es - fr 2 179 01/08 10:00 0.0 0.0 +es - fr 2 180 01/08 11:00 0.0 0.0 +es - fr 2 181 01/08 12:00 0.0 0.0 +es - fr 2 182 01/08 13:00 0.0 0.0 +es - fr 2 183 01/08 14:00 0.0 0.0 +es - fr 2 184 01/08 15:00 0.0 0.0 +es - fr 2 185 01/08 16:00 0.0 0.0 +es - fr 2 186 01/08 17:00 0.0 0.0 +es - fr 2 187 01/08 18:00 0.0 0.0 +es - fr 2 188 01/08 19:00 0.0 0.0 +es - fr 2 189 01/08 20:00 0.0 0.0 +es - fr 2 190 01/08 21:00 0.0 0.0 +es - fr 2 191 01/08 22:00 0.0 0.0 +es - fr 2 192 01/08 23:00 0.0 0.0 +es - fr 2 193 01/09 00:00 0.0 0.0 +es - fr 2 194 01/09 01:00 0.0 0.0 +es - fr 2 195 01/09 02:00 0.0 0.0 +es - fr 2 196 01/09 03:00 0.0 0.0 +es - fr 2 197 01/09 04:00 0.0 0.0 +es - fr 2 198 01/09 05:00 0.0 0.0 +es - fr 2 199 01/09 06:00 0.0 0.0 +es - fr 2 200 01/09 07:00 0.0 0.0 +es - fr 2 201 01/09 08:00 0.0 0.0 +es - fr 2 202 01/09 09:00 0.0 0.0 +es - fr 2 203 01/09 10:00 0.0 0.0 +es - fr 2 204 01/09 11:00 0.0 0.0 +es - fr 2 205 01/09 12:00 0.0 0.0 +es - fr 2 206 01/09 13:00 0.0 0.0 +es - fr 2 207 01/09 14:00 0.0 0.0 +es - fr 2 208 01/09 15:00 0.0 0.0 +es - fr 2 209 01/09 16:00 0.0 0.0 +es - fr 2 210 01/09 17:00 0.0 0.0 +es - fr 2 211 01/09 18:00 0.0 0.0 +es - fr 2 212 01/09 19:00 0.0 0.0 +es - fr 2 213 01/09 20:00 0.0 0.0 +es - fr 2 214 01/09 21:00 0.0 0.0 +es - fr 2 215 01/09 22:00 0.0 0.0 +es - fr 2 216 01/09 23:00 0.0 0.0 +es - fr 2 217 01/10 00:00 0.0 0.0 +es - fr 2 218 01/10 01:00 0.0 0.0 +es - fr 2 219 01/10 02:00 0.0 0.0 +es - fr 2 220 01/10 03:00 0.0 0.0 +es - fr 2 221 01/10 04:00 0.0 0.0 +es - fr 2 222 01/10 05:00 0.0 0.0 +es - fr 2 223 01/10 06:00 0.0 0.0 +es - fr 2 224 01/10 07:00 0.0 0.0 +es - fr 2 225 01/10 08:00 0.0 0.0 +es - fr 2 226 01/10 09:00 0.0 0.0 +es - fr 2 227 01/10 10:00 0.0 0.0 +es - fr 2 228 01/10 11:00 0.0 0.0 +es - fr 2 229 01/10 12:00 0.0 0.0 +es - fr 2 230 01/10 13:00 0.0 0.0 +es - fr 2 231 01/10 14:00 0.0 0.0 +es - fr 2 232 01/10 15:00 0.0 0.0 +es - fr 2 233 01/10 16:00 0.0 0.0 +es - fr 2 234 01/10 17:00 0.0 0.0 +es - fr 2 235 01/10 18:00 0.0 0.0 +es - fr 2 236 01/10 19:00 0.0 0.0 +es - fr 2 237 01/10 20:00 0.0 0.0 +es - fr 2 238 01/10 21:00 0.0 0.0 +es - fr 2 239 01/10 22:00 0.0 0.0 +es - fr 2 240 01/10 23:00 0.0 0.0 +es - fr 2 241 01/11 00:00 0.0 0.0 +es - fr 2 242 01/11 01:00 0.0 0.0 +es - fr 2 243 01/11 02:00 0.0 0.0 +es - fr 2 244 01/11 03:00 0.0 0.0 +es - fr 2 245 01/11 04:00 0.0 0.0 +es - fr 2 246 01/11 05:00 0.0 0.0 +es - fr 2 247 01/11 06:00 0.0 0.0 +es - fr 2 248 01/11 07:00 0.0 0.0 +es - fr 2 249 01/11 08:00 0.0 0.0 +es - fr 2 250 01/11 09:00 0.0 0.0 +es - fr 2 251 01/11 10:00 0.0 0.0 +es - fr 2 252 01/11 11:00 0.0 0.0 +es - fr 2 253 01/11 12:00 0.0 0.0 +es - fr 2 254 01/11 13:00 0.0 0.0 +es - fr 2 255 01/11 14:00 0.0 0.0 +es - fr 2 256 01/11 15:00 0.0 0.0 +es - fr 2 257 01/11 16:00 0.0 0.0 +es - fr 2 258 01/11 17:00 0.0 0.0 +es - fr 2 259 01/11 18:00 0.0 0.0 +es - fr 2 260 01/11 19:00 0.0 0.0 +es - fr 2 261 01/11 20:00 0.0 0.0 +es - fr 2 262 01/11 21:00 0.0 0.0 +es - fr 2 263 01/11 22:00 0.0 0.0 +es - fr 2 264 01/11 23:00 0.0 0.0 +es - fr 2 265 01/12 00:00 0.0 0.0 +es - fr 2 266 01/12 01:00 0.0 0.0 +es - fr 2 267 01/12 02:00 0.0 0.0 +es - fr 2 268 01/12 03:00 0.0 0.0 +es - fr 2 269 01/12 04:00 0.0 0.0 +es - fr 2 270 01/12 05:00 0.0 0.0 +es - fr 2 271 01/12 06:00 0.0 0.0 +es - fr 2 272 01/12 07:00 0.0 0.0 +es - fr 2 273 01/12 08:00 0.0 0.0 +es - fr 2 274 01/12 09:00 0.0 0.0 +es - fr 2 275 01/12 10:00 0.0 0.0 +es - fr 2 276 01/12 11:00 0.0 0.0 +es - fr 2 277 01/12 12:00 0.0 0.0 +es - fr 2 278 01/12 13:00 0.0 0.0 +es - fr 2 279 01/12 14:00 0.0 0.0 +es - fr 2 280 01/12 15:00 0.0 0.0 +es - fr 2 281 01/12 16:00 0.0 0.0 +es - fr 2 282 01/12 17:00 0.0 0.0 +es - fr 2 283 01/12 18:00 0.0 0.0 +es - fr 2 284 01/12 19:00 0.0 0.0 +es - fr 2 285 01/12 20:00 0.0 0.0 +es - fr 2 286 01/12 21:00 0.0 0.0 +es - fr 2 287 01/12 22:00 0.0 0.0 +es - fr 2 288 01/12 23:00 0.0 0.0 +es - fr 2 289 01/13 00:00 0.0 0.0 +es - fr 2 290 01/13 01:00 0.0 0.0 +es - fr 2 291 01/13 02:00 0.0 0.0 +es - fr 2 292 01/13 03:00 0.0 0.0 +es - fr 2 293 01/13 04:00 0.0 0.0 +es - fr 2 294 01/13 05:00 0.0 0.0 +es - fr 2 295 01/13 06:00 0.0 0.0 +es - fr 2 296 01/13 07:00 0.0 0.0 +es - fr 2 297 01/13 08:00 0.0 0.0 +es - fr 2 298 01/13 09:00 0.0 0.0 +es - fr 2 299 01/13 10:00 0.0 0.0 +es - fr 2 300 01/13 11:00 0.0 0.0 +es - fr 2 301 01/13 12:00 0.0 0.0 +es - fr 2 302 01/13 13:00 0.0 0.0 +es - fr 2 303 01/13 14:00 0.0 0.0 +es - fr 2 304 01/13 15:00 0.0 0.0 +es - fr 2 305 01/13 16:00 0.0 0.0 +es - fr 2 306 01/13 17:00 0.0 0.0 +es - fr 2 307 01/13 18:00 0.0 0.0 +es - fr 2 308 01/13 19:00 0.0 0.0 +es - fr 2 309 01/13 20:00 0.0 0.0 +es - fr 2 310 01/13 21:00 0.0 0.0 +es - fr 2 311 01/13 22:00 0.0 0.0 +es - fr 2 312 01/13 23:00 0.0 0.0 +es - fr 2 313 01/14 00:00 0.0 0.0 +es - fr 2 314 01/14 01:00 0.0 0.0 +es - fr 2 315 01/14 02:00 0.0 0.0 +es - fr 2 316 01/14 03:00 0.0 0.0 +es - fr 2 317 01/14 04:00 0.0 0.0 +es - fr 2 318 01/14 05:00 0.0 0.0 +es - fr 2 319 01/14 06:00 0.0 0.0 +es - fr 2 320 01/14 07:00 0.0 0.0 +es - fr 2 321 01/14 08:00 0.0 0.0 +es - fr 2 322 01/14 09:00 0.0 0.0 +es - fr 2 323 01/14 10:00 0.0 0.0 +es - fr 2 324 01/14 11:00 0.0 0.0 +es - fr 2 325 01/14 12:00 0.0 0.0 +es - fr 2 326 01/14 13:00 0.0 0.0 +es - fr 2 327 01/14 14:00 0.0 0.0 +es - fr 2 328 01/14 15:00 0.0 0.0 +es - fr 2 329 01/14 16:00 0.0 0.0 +es - fr 2 330 01/14 17:00 0.0 0.0 +es - fr 2 331 01/14 18:00 0.0 0.0 +es - fr 2 332 01/14 19:00 0.0 0.0 +es - fr 2 333 01/14 20:00 0.0 0.0 +es - fr 2 334 01/14 21:00 0.0 0.0 +es - fr 2 335 01/14 22:00 0.0 0.0 +es - fr 2 336 01/14 23:00 0.0 0.0 +fr - it 2 1 01/01 00:00 0.0 0.0 +fr - it 2 2 01/01 01:00 0.0 0.0 +fr - it 2 3 01/01 02:00 0.0 0.0 +fr - it 2 4 01/01 03:00 0.0 0.0 +fr - it 2 5 01/01 04:00 0.0 0.0 +fr - it 2 6 01/01 05:00 0.0 0.0 +fr - it 2 7 01/01 06:00 0.0 0.0 +fr - it 2 8 01/01 07:00 0.0 0.0 +fr - it 2 9 01/01 08:00 0.0 0.0 +fr - it 2 10 01/01 09:00 0.0 0.0 +fr - it 2 11 01/01 10:00 0.0 0.0 +fr - it 2 12 01/01 11:00 0.0 0.0 +fr - it 2 13 01/01 12:00 0.0 0.0 +fr - it 2 14 01/01 13:00 0.0 0.0 +fr - it 2 15 01/01 14:00 0.0 0.0 +fr - it 2 16 01/01 15:00 0.0 0.0 +fr - it 2 17 01/01 16:00 0.0 0.0 +fr - it 2 18 01/01 17:00 0.0 0.0 +fr - it 2 19 01/01 18:00 0.0 0.0 +fr - it 2 20 01/01 19:00 0.0 0.0 +fr - it 2 21 01/01 20:00 0.0 0.0 +fr - it 2 22 01/01 21:00 0.0 0.0 +fr - it 2 23 01/01 22:00 0.0 0.0 +fr - it 2 24 01/01 23:00 0.0 0.0 +fr - it 2 25 01/02 00:00 0.0 0.0 +fr - it 2 26 01/02 01:00 0.0 0.0 +fr - it 2 27 01/02 02:00 0.0 0.0 +fr - it 2 28 01/02 03:00 0.0 0.0 +fr - it 2 29 01/02 04:00 0.0 0.0 +fr - it 2 30 01/02 05:00 0.0 0.0 +fr - it 2 31 01/02 06:00 0.0 0.0 +fr - it 2 32 01/02 07:00 0.0 0.0 +fr - it 2 33 01/02 08:00 0.0 0.0 +fr - it 2 34 01/02 09:00 0.0 0.0 +fr - it 2 35 01/02 10:00 0.0 0.0 +fr - it 2 36 01/02 11:00 0.0 0.0 +fr - it 2 37 01/02 12:00 0.0 0.0 +fr - it 2 38 01/02 13:00 0.0 0.0 +fr - it 2 39 01/02 14:00 0.0 0.0 +fr - it 2 40 01/02 15:00 0.0 0.0 +fr - it 2 41 01/02 16:00 0.0 0.0 +fr - it 2 42 01/02 17:00 0.0 0.0 +fr - it 2 43 01/02 18:00 0.0 0.0 +fr - it 2 44 01/02 19:00 0.0 0.0 +fr - it 2 45 01/02 20:00 0.0 0.0 +fr - it 2 46 01/02 21:00 0.0 0.0 +fr - it 2 47 01/02 22:00 0.0 0.0 +fr - it 2 48 01/02 23:00 0.0 0.0 +fr - it 2 49 01/03 00:00 0.0 0.0 +fr - it 2 50 01/03 01:00 0.0 0.0 +fr - it 2 51 01/03 02:00 0.0 0.0 +fr - it 2 52 01/03 03:00 0.0 0.0 +fr - it 2 53 01/03 04:00 0.0 0.0 +fr - it 2 54 01/03 05:00 0.0 0.0 +fr - it 2 55 01/03 06:00 0.0 0.0 +fr - it 2 56 01/03 07:00 0.0 0.0 +fr - it 2 57 01/03 08:00 0.0 0.0 +fr - it 2 58 01/03 09:00 0.0 0.0 +fr - it 2 59 01/03 10:00 0.0 0.0 +fr - it 2 60 01/03 11:00 0.0 0.0 +fr - it 2 61 01/03 12:00 0.0 0.0 +fr - it 2 62 01/03 13:00 0.0 0.0 +fr - it 2 63 01/03 14:00 0.0 0.0 +fr - it 2 64 01/03 15:00 0.0 0.0 +fr - it 2 65 01/03 16:00 0.0 0.0 +fr - it 2 66 01/03 17:00 0.0 0.0 +fr - it 2 67 01/03 18:00 0.0 0.0 +fr - it 2 68 01/03 19:00 0.0 0.0 +fr - it 2 69 01/03 20:00 0.0 0.0 +fr - it 2 70 01/03 21:00 0.0 0.0 +fr - it 2 71 01/03 22:00 0.0 0.0 +fr - it 2 72 01/03 23:00 0.0 0.0 +fr - it 2 73 01/04 00:00 0.0 0.0 +fr - it 2 74 01/04 01:00 0.0 0.0 +fr - it 2 75 01/04 02:00 0.0 0.0 +fr - it 2 76 01/04 03:00 0.0 0.0 +fr - it 2 77 01/04 04:00 0.0 0.0 +fr - it 2 78 01/04 05:00 0.0 0.0 +fr - it 2 79 01/04 06:00 0.0 0.0 +fr - it 2 80 01/04 07:00 0.0 0.0 +fr - it 2 81 01/04 08:00 0.0 0.0 +fr - it 2 82 01/04 09:00 0.0 0.0 +fr - it 2 83 01/04 10:00 0.0 0.0 +fr - it 2 84 01/04 11:00 0.0 0.0 +fr - it 2 85 01/04 12:00 0.0 0.0 +fr - it 2 86 01/04 13:00 0.0 0.0 +fr - it 2 87 01/04 14:00 0.0 0.0 +fr - it 2 88 01/04 15:00 0.0 0.0 +fr - it 2 89 01/04 16:00 0.0 0.0 +fr - it 2 90 01/04 17:00 0.0 0.0 +fr - it 2 91 01/04 18:00 0.0 0.0 +fr - it 2 92 01/04 19:00 0.0 0.0 +fr - it 2 93 01/04 20:00 0.0 0.0 +fr - it 2 94 01/04 21:00 0.0 0.0 +fr - it 2 95 01/04 22:00 0.0 0.0 +fr - it 2 96 01/04 23:00 0.0 0.0 +fr - it 2 97 01/05 00:00 0.0 0.0 +fr - it 2 98 01/05 01:00 0.0 0.0 +fr - it 2 99 01/05 02:00 0.0 0.0 +fr - it 2 100 01/05 03:00 0.0 0.0 +fr - it 2 101 01/05 04:00 0.0 0.0 +fr - it 2 102 01/05 05:00 0.0 0.0 +fr - it 2 103 01/05 06:00 0.0 0.0 +fr - it 2 104 01/05 07:00 0.0 0.0 +fr - it 2 105 01/05 08:00 0.0 0.0 +fr - it 2 106 01/05 09:00 0.0 0.0 +fr - it 2 107 01/05 10:00 0.0 0.0 +fr - it 2 108 01/05 11:00 0.0 0.0 +fr - it 2 109 01/05 12:00 0.0 0.0 +fr - it 2 110 01/05 13:00 0.0 0.0 +fr - it 2 111 01/05 14:00 0.0 0.0 +fr - it 2 112 01/05 15:00 0.0 0.0 +fr - it 2 113 01/05 16:00 0.0 0.0 +fr - it 2 114 01/05 17:00 0.0 0.0 +fr - it 2 115 01/05 18:00 0.0 0.0 +fr - it 2 116 01/05 19:00 0.0 0.0 +fr - it 2 117 01/05 20:00 0.0 0.0 +fr - it 2 118 01/05 21:00 0.0 0.0 +fr - it 2 119 01/05 22:00 0.0 0.0 +fr - it 2 120 01/05 23:00 0.0 0.0 +fr - it 2 121 01/06 00:00 0.0 0.0 +fr - it 2 122 01/06 01:00 0.0 0.0 +fr - it 2 123 01/06 02:00 0.0 0.0 +fr - it 2 124 01/06 03:00 0.0 0.0 +fr - it 2 125 01/06 04:00 0.0 0.0 +fr - it 2 126 01/06 05:00 0.0 0.0 +fr - it 2 127 01/06 06:00 0.0 0.0 +fr - it 2 128 01/06 07:00 0.0 0.0 +fr - it 2 129 01/06 08:00 0.0 0.0 +fr - it 2 130 01/06 09:00 0.0 0.0 +fr - it 2 131 01/06 10:00 0.0 0.0 +fr - it 2 132 01/06 11:00 0.0 0.0 +fr - it 2 133 01/06 12:00 0.0 0.0 +fr - it 2 134 01/06 13:00 0.0 0.0 +fr - it 2 135 01/06 14:00 0.0 0.0 +fr - it 2 136 01/06 15:00 0.0 0.0 +fr - it 2 137 01/06 16:00 0.0 0.0 +fr - it 2 138 01/06 17:00 0.0 0.0 +fr - it 2 139 01/06 18:00 0.0 0.0 +fr - it 2 140 01/06 19:00 0.0 0.0 +fr - it 2 141 01/06 20:00 0.0 0.0 +fr - it 2 142 01/06 21:00 0.0 0.0 +fr - it 2 143 01/06 22:00 0.0 0.0 +fr - it 2 144 01/06 23:00 0.0 0.0 +fr - it 2 145 01/07 00:00 0.0 0.0 +fr - it 2 146 01/07 01:00 0.0 0.0 +fr - it 2 147 01/07 02:00 0.0 0.0 +fr - it 2 148 01/07 03:00 0.0 0.0 +fr - it 2 149 01/07 04:00 0.0 0.0 +fr - it 2 150 01/07 05:00 0.0 0.0 +fr - it 2 151 01/07 06:00 0.0 0.0 +fr - it 2 152 01/07 07:00 0.0 0.0 +fr - it 2 153 01/07 08:00 0.0 0.0 +fr - it 2 154 01/07 09:00 0.0 0.0 +fr - it 2 155 01/07 10:00 0.0 0.0 +fr - it 2 156 01/07 11:00 0.0 0.0 +fr - it 2 157 01/07 12:00 0.0 0.0 +fr - it 2 158 01/07 13:00 0.0 0.0 +fr - it 2 159 01/07 14:00 0.0 0.0 +fr - it 2 160 01/07 15:00 0.0 0.0 +fr - it 2 161 01/07 16:00 0.0 0.0 +fr - it 2 162 01/07 17:00 0.0 0.0 +fr - it 2 163 01/07 18:00 0.0 0.0 +fr - it 2 164 01/07 19:00 0.0 0.0 +fr - it 2 165 01/07 20:00 0.0 0.0 +fr - it 2 166 01/07 21:00 0.0 0.0 +fr - it 2 167 01/07 22:00 0.0 0.0 +fr - it 2 168 01/07 23:00 0.0 0.0 +fr - it 2 169 01/08 00:00 0.0 0.0 +fr - it 2 170 01/08 01:00 0.0 0.0 +fr - it 2 171 01/08 02:00 0.0 0.0 +fr - it 2 172 01/08 03:00 0.0 0.0 +fr - it 2 173 01/08 04:00 0.0 0.0 +fr - it 2 174 01/08 05:00 0.0 0.0 +fr - it 2 175 01/08 06:00 0.0 0.0 +fr - it 2 176 01/08 07:00 0.0 0.0 +fr - it 2 177 01/08 08:00 0.0 0.0 +fr - it 2 178 01/08 09:00 0.0 0.0 +fr - it 2 179 01/08 10:00 0.0 0.0 +fr - it 2 180 01/08 11:00 0.0 0.0 +fr - it 2 181 01/08 12:00 0.0 0.0 +fr - it 2 182 01/08 13:00 0.0 0.0 +fr - it 2 183 01/08 14:00 0.0 0.0 +fr - it 2 184 01/08 15:00 0.0 0.0 +fr - it 2 185 01/08 16:00 0.0 0.0 +fr - it 2 186 01/08 17:00 0.0 0.0 +fr - it 2 187 01/08 18:00 0.0 0.0 +fr - it 2 188 01/08 19:00 0.0 0.0 +fr - it 2 189 01/08 20:00 0.0 0.0 +fr - it 2 190 01/08 21:00 0.0 0.0 +fr - it 2 191 01/08 22:00 0.0 0.0 +fr - it 2 192 01/08 23:00 0.0 0.0 +fr - it 2 193 01/09 00:00 0.0 0.0 +fr - it 2 194 01/09 01:00 0.0 0.0 +fr - it 2 195 01/09 02:00 0.0 0.0 +fr - it 2 196 01/09 03:00 0.0 0.0 +fr - it 2 197 01/09 04:00 0.0 0.0 +fr - it 2 198 01/09 05:00 0.0 0.0 +fr - it 2 199 01/09 06:00 0.0 0.0 +fr - it 2 200 01/09 07:00 0.0 0.0 +fr - it 2 201 01/09 08:00 0.0 0.0 +fr - it 2 202 01/09 09:00 0.0 0.0 +fr - it 2 203 01/09 10:00 0.0 0.0 +fr - it 2 204 01/09 11:00 0.0 0.0 +fr - it 2 205 01/09 12:00 0.0 0.0 +fr - it 2 206 01/09 13:00 0.0 0.0 +fr - it 2 207 01/09 14:00 0.0 0.0 +fr - it 2 208 01/09 15:00 0.0 0.0 +fr - it 2 209 01/09 16:00 0.0 0.0 +fr - it 2 210 01/09 17:00 0.0 0.0 +fr - it 2 211 01/09 18:00 0.0 0.0 +fr - it 2 212 01/09 19:00 0.0 0.0 +fr - it 2 213 01/09 20:00 0.0 0.0 +fr - it 2 214 01/09 21:00 0.0 0.0 +fr - it 2 215 01/09 22:00 0.0 0.0 +fr - it 2 216 01/09 23:00 0.0 0.0 +fr - it 2 217 01/10 00:00 0.0 0.0 +fr - it 2 218 01/10 01:00 0.0 0.0 +fr - it 2 219 01/10 02:00 0.0 0.0 +fr - it 2 220 01/10 03:00 0.0 0.0 +fr - it 2 221 01/10 04:00 0.0 0.0 +fr - it 2 222 01/10 05:00 0.0 0.0 +fr - it 2 223 01/10 06:00 0.0 0.0 +fr - it 2 224 01/10 07:00 0.0 0.0 +fr - it 2 225 01/10 08:00 0.0 0.0 +fr - it 2 226 01/10 09:00 0.0 0.0 +fr - it 2 227 01/10 10:00 0.0 0.0 +fr - it 2 228 01/10 11:00 0.0 0.0 +fr - it 2 229 01/10 12:00 0.0 0.0 +fr - it 2 230 01/10 13:00 0.0 0.0 +fr - it 2 231 01/10 14:00 0.0 0.0 +fr - it 2 232 01/10 15:00 0.0 0.0 +fr - it 2 233 01/10 16:00 0.0 0.0 +fr - it 2 234 01/10 17:00 0.0 0.0 +fr - it 2 235 01/10 18:00 0.0 0.0 +fr - it 2 236 01/10 19:00 0.0 0.0 +fr - it 2 237 01/10 20:00 0.0 0.0 +fr - it 2 238 01/10 21:00 0.0 0.0 +fr - it 2 239 01/10 22:00 0.0 0.0 +fr - it 2 240 01/10 23:00 0.0 0.0 +fr - it 2 241 01/11 00:00 0.0 0.0 +fr - it 2 242 01/11 01:00 0.0 0.0 +fr - it 2 243 01/11 02:00 0.0 0.0 +fr - it 2 244 01/11 03:00 0.0 0.0 +fr - it 2 245 01/11 04:00 0.0 0.0 +fr - it 2 246 01/11 05:00 0.0 0.0 +fr - it 2 247 01/11 06:00 0.0 0.0 +fr - it 2 248 01/11 07:00 0.0 0.0 +fr - it 2 249 01/11 08:00 0.0 0.0 +fr - it 2 250 01/11 09:00 0.0 0.0 +fr - it 2 251 01/11 10:00 0.0 0.0 +fr - it 2 252 01/11 11:00 0.0 0.0 +fr - it 2 253 01/11 12:00 0.0 0.0 +fr - it 2 254 01/11 13:00 0.0 0.0 +fr - it 2 255 01/11 14:00 0.0 0.0 +fr - it 2 256 01/11 15:00 0.0 0.0 +fr - it 2 257 01/11 16:00 0.0 0.0 +fr - it 2 258 01/11 17:00 0.0 0.0 +fr - it 2 259 01/11 18:00 0.0 0.0 +fr - it 2 260 01/11 19:00 0.0 0.0 +fr - it 2 261 01/11 20:00 0.0 0.0 +fr - it 2 262 01/11 21:00 0.0 0.0 +fr - it 2 263 01/11 22:00 0.0 0.0 +fr - it 2 264 01/11 23:00 0.0 0.0 +fr - it 2 265 01/12 00:00 0.0 0.0 +fr - it 2 266 01/12 01:00 0.0 0.0 +fr - it 2 267 01/12 02:00 0.0 0.0 +fr - it 2 268 01/12 03:00 0.0 0.0 +fr - it 2 269 01/12 04:00 0.0 0.0 +fr - it 2 270 01/12 05:00 0.0 0.0 +fr - it 2 271 01/12 06:00 0.0 0.0 +fr - it 2 272 01/12 07:00 0.0 0.0 +fr - it 2 273 01/12 08:00 0.0 0.0 +fr - it 2 274 01/12 09:00 0.0 0.0 +fr - it 2 275 01/12 10:00 0.0 0.0 +fr - it 2 276 01/12 11:00 0.0 0.0 +fr - it 2 277 01/12 12:00 0.0 0.0 +fr - it 2 278 01/12 13:00 0.0 0.0 +fr - it 2 279 01/12 14:00 0.0 0.0 +fr - it 2 280 01/12 15:00 0.0 0.0 +fr - it 2 281 01/12 16:00 0.0 0.0 +fr - it 2 282 01/12 17:00 0.0 0.0 +fr - it 2 283 01/12 18:00 0.0 0.0 +fr - it 2 284 01/12 19:00 0.0 0.0 +fr - it 2 285 01/12 20:00 0.0 0.0 +fr - it 2 286 01/12 21:00 0.0 0.0 +fr - it 2 287 01/12 22:00 0.0 0.0 +fr - it 2 288 01/12 23:00 0.0 0.0 +fr - it 2 289 01/13 00:00 0.0 0.0 +fr - it 2 290 01/13 01:00 0.0 0.0 +fr - it 2 291 01/13 02:00 0.0 0.0 +fr - it 2 292 01/13 03:00 0.0 0.0 +fr - it 2 293 01/13 04:00 0.0 0.0 +fr - it 2 294 01/13 05:00 0.0 0.0 +fr - it 2 295 01/13 06:00 0.0 0.0 +fr - it 2 296 01/13 07:00 0.0 0.0 +fr - it 2 297 01/13 08:00 0.0 0.0 +fr - it 2 298 01/13 09:00 0.0 0.0 +fr - it 2 299 01/13 10:00 0.0 0.0 +fr - it 2 300 01/13 11:00 0.0 0.0 +fr - it 2 301 01/13 12:00 0.0 0.0 +fr - it 2 302 01/13 13:00 0.0 0.0 +fr - it 2 303 01/13 14:00 0.0 0.0 +fr - it 2 304 01/13 15:00 0.0 0.0 +fr - it 2 305 01/13 16:00 0.0 0.0 +fr - it 2 306 01/13 17:00 0.0 0.0 +fr - it 2 307 01/13 18:00 0.0 0.0 +fr - it 2 308 01/13 19:00 0.0 0.0 +fr - it 2 309 01/13 20:00 0.0 0.0 +fr - it 2 310 01/13 21:00 0.0 0.0 +fr - it 2 311 01/13 22:00 0.0 0.0 +fr - it 2 312 01/13 23:00 0.0 0.0 +fr - it 2 313 01/14 00:00 0.0 0.0 +fr - it 2 314 01/14 01:00 0.0 0.0 +fr - it 2 315 01/14 02:00 0.0 0.0 +fr - it 2 316 01/14 03:00 0.0 0.0 +fr - it 2 317 01/14 04:00 0.0 0.0 +fr - it 2 318 01/14 05:00 0.0 0.0 +fr - it 2 319 01/14 06:00 0.0 0.0 +fr - it 2 320 01/14 07:00 0.0 0.0 +fr - it 2 321 01/14 08:00 0.0 0.0 +fr - it 2 322 01/14 09:00 0.0 0.0 +fr - it 2 323 01/14 10:00 0.0 0.0 +fr - it 2 324 01/14 11:00 0.0 0.0 +fr - it 2 325 01/14 12:00 0.0 0.0 +fr - it 2 326 01/14 13:00 0.0 0.0 +fr - it 2 327 01/14 14:00 0.0 0.0 +fr - it 2 328 01/14 15:00 0.0 0.0 +fr - it 2 329 01/14 16:00 0.0 0.0 +fr - it 2 330 01/14 17:00 0.0 0.0 +fr - it 2 331 01/14 18:00 0.0 0.0 +fr - it 2 332 01/14 19:00 0.0 0.0 +fr - it 2 333 01/14 20:00 0.0 0.0 +fr - it 2 334 01/14 21:00 0.0 0.0 +fr - it 2 335 01/14 22:00 0.0 0.0 +fr - it 2 336 01/14 23:00 0.0 0.0 diff --git a/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py b/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py new file mode 100644 index 0000000000..4f449d8fc2 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py @@ -0,0 +1,196 @@ +import typing as t + +import numpy as np +import pandas as pd +import pytest +from starlette.testclient import TestClient + +from antarest.study.common.default_values import AreasQueryFile, LinksQueryFile +from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency +from tests.integration.raw_studies_blueprint.assets import ASSETS_DIR + + +@pytest.mark.integration_test +class TestRawDataAggregation: + """ + Check the aggregation of Raw Data from studies outputs + """ + + @pytest.mark.parametrize( + "params, expected_result_filename", + [ + ( + { + "output_id": "20201014-1425eco-goodbye", + "query_file": AreasQueryFile.VALUES, + "frequency": MatrixFrequency.HOURLY, + "mc_years": "", + "areas_ids": "", + "columns_names": "", + }, + "test-01.result.tsv", + ), + ( + { + "output_id": "20201014-1425eco-goodbye", + "query_file": AreasQueryFile.DETAILS, + "frequency": MatrixFrequency.HOURLY, + "mc_years": "1", + "areas_ids": "de,fr,it", + "columns_names": "", + }, + "test-02.result.tsv", + ), + ( + { + "output_id": "20201014-1425eco-goodbye", + "query_file": AreasQueryFile.VALUES, + "frequency": MatrixFrequency.WEEKLY, + "mc_years": "1,2", + "areas_ids": "", + "columns_names": "OP. COST,MRG. PRICE", + }, + "test-03.result.tsv", + ), + ( + { + "output_id": "20201014-1425eco-goodbye", + "query_file": AreasQueryFile.VALUES, + "frequency": MatrixFrequency.HOURLY, + "mc_years": "2", + "areas_ids": "es,fr,de", + "columns_names": "", + }, + "test-04.result.tsv", + ), + ( + { + "output_id": "20201014-1425eco-goodbye", + "query_file": AreasQueryFile.VALUES, + "frequency": MatrixFrequency.ANNUAL, + "mc_years": "", + "areas_ids": "", + "columns_names": "", + }, + "test-05.result.tsv", + ), + ], + ) + def test_area_aggregation( + self, + client: TestClient, + user_access_token: str, + study_id: str, + params: t.Dict[str, t.Any], + expected_result_filename: str, + ): + """ + Test the aggregation of areas data + """ + headers = {"Authorization": f"Bearer {user_access_token}"} + + res = client.get( + f"/v1/studies/{study_id}/areas/aggregate", + params=params, + headers=headers, + ) + assert res.status_code == 200 + matrix = res.json() + df = pd.DataFrame(**matrix) + resource_file = ASSETS_DIR.joinpath(f"aggregate_areas_raw_data/{expected_result_filename}") + resource_file.parent.mkdir(exist_ok=True, parents=True) + if resource_file.exists(): + # compare with previous result (non-regression test) + expected_df = pd.read_csv(resource_file, sep="\t", header=0) + expected_df = expected_df.replace({np.nan: None}) + # cast types of expected_df to match df + for col in expected_df.columns: + expected_df[col] = expected_df[col].astype(df[col].dtype) + pd.testing.assert_frame_equal(df, expected_df) + else: + # create the resource + df.to_csv(resource_file, sep="\t", index=False) + if params["areas_ids"] and matrix["columns"]: + assert not (set(df["area"].values) - set(params["areas_ids"].split(","))) + if params["mc_years"] and matrix["columns"]: + assert not (set(df["mcYear"].values) - set(int(i) for i in params["mc_years"].split(","))) + if params["columns_names"] and matrix["columns"]: + assert not ( + set(df.columns.values) - {"area", "mcYear", "timeId", "time"} - set(params["columns_names"].split(",")) + ) + + @pytest.mark.parametrize( + "params, expected_result_filename", + [ + ( + { + "output_id": "20201014-1425eco-goodbye", + "query_file": LinksQueryFile.VALUES, + "frequency": MatrixFrequency.HOURLY, + "mc_years": "", + "columns_names": "", + }, + "test-01.result.tsv", + ), + ( + { + "output_id": "20201014-1425eco-goodbye", + "query_file": LinksQueryFile.VALUES, + "frequency": MatrixFrequency.HOURLY, + "mc_years": "1", + "columns_names": "", + }, + "test-02.result.tsv", + ), + ( + { + "output_id": "20201014-1425eco-goodbye", + "query_file": LinksQueryFile.VALUES, + "frequency": MatrixFrequency.HOURLY, + "mc_years": "1,2", + "columns_names": "UCAP LIN.,FLOW QUAD.", + }, + "test-03.result.tsv", + ), + ], + ) + def test_links_aggregation( + self, + client: TestClient, + user_access_token: str, + study_id: str, + params: t.Dict[str, t.Any], + expected_result_filename: str, + ): + """ + Test the aggregation of links data + """ + headers = {"Authorization": f"Bearer {user_access_token}"} + + res = client.get( + f"/v1/studies/{study_id}/links/aggregate", + params=params, + headers=headers, + ) + assert res.status_code == 200 + matrix = res.json() + df = pd.DataFrame(**matrix) + resource_file = ASSETS_DIR.joinpath(f"aggregate_links_raw_data/{expected_result_filename}") + resource_file.parent.mkdir(exist_ok=True, parents=True) + if resource_file.exists(): + # compare with previous result (non-regression test) + expected_df = pd.read_csv(resource_file, sep="\t", header=0) + expected_df = expected_df.replace({np.nan: None}) + # cast types of expected_df to match df + for col in expected_df.columns: + expected_df[col] = expected_df[col].astype(df[col].dtype) + pd.testing.assert_frame_equal(df, expected_df) + else: + # create the resource + df.to_csv(resource_file, sep="\t", index=False) + if params["mc_years"] and matrix["columns"]: + assert not (set(df["mcYear"].values) - set(int(i) for i in params["mc_years"].split(","))) + if params["columns_names"] and matrix["columns"]: + assert not ( + set(df.columns.values) - {"link", "mcYear", "timeId", "time"} - set(params["columns_names"].split(",")) + ) diff --git a/tests/integration/raw_studies_blueprint/test_download_matrices.py b/tests/integration/raw_studies_blueprint/test_download_matrices.py index ca2c501374..0fcf2683c5 100644 --- a/tests/integration/raw_studies_blueprint/test_download_matrices.py +++ b/tests/integration/raw_studies_blueprint/test_download_matrices.py @@ -160,7 +160,9 @@ def test_download_matrices(self, client: TestClient, user_access_token: str, stu ) assert res.status_code == 200 # noinspection SpellCheckingInspection - assert res.headers["content-type"] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + assert res.headers["content-type"] == ( + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8" + ) # load into dataframe # noinspection PyTypeChecker diff --git a/tests/integration/studies_blueprint/test_get_studies.py b/tests/integration/studies_blueprint/test_get_studies.py index 2cff53f047..af8f790f20 100644 --- a/tests/integration/studies_blueprint/test_get_studies.py +++ b/tests/integration/studies_blueprint/test_get_studies.py @@ -926,7 +926,7 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ res = client.post( STUDIES_URL, headers={"Authorization": f"Bearer {admin_access_token}"}, - params={"name": f"dummy_{study}"}, + params={"name": f"dummy_{study[6:]}"}, ) assert res.status_code in CREATE_STATUS_CODES, res.json() study_id = res.json() @@ -953,13 +953,13 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ assert res.status_code == 200, res.json() # studies that have owner but no groups for study, study_info in { - "study_10": {"owner": "user_1"}, - "study_11": {"owner": "user_2"}, + "study_X10": {"owner": "user_1"}, + "study_X11": {"owner": "user_2"}, }.items(): res = client.post( STUDIES_URL, headers={"Authorization": f"Bearer {admin_access_token}"}, - params={"name": f"dummy_{study}"}, + params={"name": f"dummy_{study[6:]}"}, ) assert res.status_code in CREATE_STATUS_CODES, res.json() study_id = res.json() @@ -986,7 +986,7 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ res = client.post( STUDIES_URL, headers={"Authorization": f"Bearer {admin_access_token}"}, - params={"name": f"dummy_{study}"}, + params={"name": f"dummy_{study[6:]}"}, ) assert res.status_code in CREATE_STATUS_CODES, res.json() study_id = res.json() @@ -1008,16 +1008,16 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ # create variant studies with neither owner nor groups for study, study_info in { - "study_12": {"public_mode": None}, - "study_13": {"public_mode": PublicMode.READ.value}, - "study_14": {"public_mode": PublicMode.EDIT.value}, - "study_15": {"public_mode": PublicMode.EXECUTE.value}, - "study_16": {"public_mode": PublicMode.FULL.value}, + "study_X12": {"public_mode": None}, + "study_X13": {"public_mode": PublicMode.READ.value}, + "study_X14": {"public_mode": PublicMode.EDIT.value}, + "study_X15": {"public_mode": PublicMode.EXECUTE.value}, + "study_X16": {"public_mode": PublicMode.FULL.value}, }.items(): res = client.post( STUDIES_URL, headers={"Authorization": f"Bearer {admin_access_token}"}, - params={"name": f"dummy_{study}"}, + params={"name": f"dummy_{study[6:]}"}, ) assert res.status_code in CREATE_STATUS_CODES, res.json() study_id = res.json() @@ -1040,12 +1040,12 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ # create raw studies for user_1 and user_2 that are part of some groups # studies that have owner and groups for study, study_info in { - "study_17": {"owner": "user_1", "groups": ["group_1"]}, - "study_18": {"owner": "user_1", "groups": ["group_2"]}, - "study_20": {"owner": "user_2", "groups": ["group_1"]}, - "study_21": {"owner": "user_2", "groups": ["group_2"]}, - "study_23": {"owner": "user_1", "groups": ["group_1", "group_2"]}, - "study_24": {"owner": "user_2", "groups": ["group_1", "group_2"]}, + "study_X17": {"owner": "user_1", "groups": ["group_1"]}, + "study_X18": {"owner": "user_1", "groups": ["group_2"]}, + "study_X20": {"owner": "user_2", "groups": ["group_1"]}, + "study_X21": {"owner": "user_2", "groups": ["group_2"]}, + "study_X23": {"owner": "user_1", "groups": ["group_1", "group_2"]}, + "study_X24": {"owner": "user_2", "groups": ["group_1", "group_2"]}, }.items(): res = client.post( STUDIES_URL, @@ -1070,8 +1070,8 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ assert res.status_code == 200, res.json() # studies that have owner but no groups for study, study_info in { - "study_26": {"owner": "user_1"}, - "study_27": {"owner": "user_2"}, + "study_X26": {"owner": "user_1"}, + "study_X27": {"owner": "user_2"}, }.items(): res = client.post( STUDIES_URL, @@ -1089,9 +1089,9 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ assert res.status_code == 200, res.json() # studies that have groups but no owner for study, study_info in { - "study_19": {"groups": ["group_1"]}, - "study_22": {"groups": ["group_2"]}, - "study_25": {"groups": ["group_1", "group_2"]}, + "study_X19": {"groups": ["group_1"]}, + "study_X22": {"groups": ["group_2"]}, + "study_X25": {"groups": ["group_1", "group_2"]}, }.items(): res = client.post( STUDIES_URL, @@ -1111,11 +1111,11 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ # create raw studies with neither owner nor groups for study, study_info in { - "study_28": {"public_mode": None}, - "study_29": {"public_mode": PublicMode.READ.value}, - "study_30": {"public_mode": PublicMode.EDIT.value}, - "study_31": {"public_mode": PublicMode.EXECUTE.value}, - "study_32": {"public_mode": PublicMode.FULL.value}, + "study_X28": {"public_mode": None}, + "study_X29": {"public_mode": PublicMode.READ.value}, + "study_X30": {"public_mode": PublicMode.EDIT.value}, + "study_X31": {"public_mode": PublicMode.EXECUTE.value}, + "study_X32": {"public_mode": PublicMode.FULL.value}, }.items(): res = client.post( STUDIES_URL, @@ -1136,13 +1136,13 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ # create studies for user_3 that is not part of any group # variant studies for study, study_info in { - "study_33": {"groups": ["group_1"]}, - "study_35": {"groups": []}, + "study_X33": {"groups": ["group_1"]}, + "study_X35": {"groups": []}, }.items(): res = client.post( STUDIES_URL, headers={"Authorization": f"Bearer {admin_access_token}"}, - params={"name": f"dummy_{study}"}, + params={"name": f"dummy_{study[6:]}"}, ) assert res.status_code in CREATE_STATUS_CODES, res.json() study_id = res.json() @@ -1169,8 +1169,8 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ assert res.status_code == 200, res.json() # raw studies for study, study_info in { - "study_34": {"groups": ["group_2"]}, - "study_36": {"groups": []}, + "study_X34": {"groups": ["group_2"]}, + "study_X36": {"groups": []}, }.items(): res = client.post( STUDIES_URL, @@ -1198,14 +1198,14 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ res = client.post( STUDIES_URL, headers={"Authorization": f"Bearer {admin_access_token}"}, - params={"name": "dummy_study_37"}, + params={"name": "dummy_37"}, ) assert res.status_code in CREATE_STATUS_CODES, res.json() study_id = res.json() res = client.post( f"{STUDIES_URL}/{study_id}/variants", headers={"Authorization": f"Bearer {admin_access_token}"}, - params={"name": "study_37"}, + params={"name": "study_X37"}, ) assert res.status_code in CREATE_STATUS_CODES, res.json() study_id = res.json() @@ -1215,11 +1215,11 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ headers={"Authorization": f"Bearer {admin_access_token}"}, ) assert res.status_code == 200, res.json() - studies_ids_mapping["study_37"] = study_id + studies_ids_mapping["study_X37"] = study_id res = client.post( STUDIES_URL, headers={"Authorization": f"Bearer {admin_access_token}"}, - params={"name": "study_38"}, + params={"name": "study_X38"}, ) assert res.status_code in CREATE_STATUS_CODES, res.json() study_id = res.json() @@ -1228,7 +1228,7 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ headers={"Authorization": f"Bearer {admin_access_token}"}, ) assert res.status_code == 200, res.json() - studies_ids_mapping["study_38"] = study_id + studies_ids_mapping["study_X38"] = study_id # verify the studies creation was done correctly and that admin has access to all studies all_studies = set(studies_ids_mapping.values()) @@ -1277,55 +1277,55 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ "groups": ["group_1", "group_2"], "public_mode": PublicMode.NONE, }, - "study_10": {"type": "variantstudy", "owner": "user_1", "groups": None, "public_mode": PublicMode.NONE}, - "study_11": {"type": "variantstudy", "owner": "user_2", "groups": None, "public_mode": PublicMode.NONE}, - "study_12": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.NONE}, - "study_13": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.READ}, - "study_14": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.EDIT}, - "study_15": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.EXECUTE}, - "study_16": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.FULL}, - "study_17": {"type": "rawstudy", "owner": "user_1", "groups": ["group_1"], "public_mode": PublicMode.NONE}, - "study_18": {"type": "rawstudy", "owner": "user_1", "groups": ["group_2"], "public_mode": PublicMode.NONE}, - "study_19": {"type": "rawstudy", "owner": None, "groups": ["group_1"], "public_mode": PublicMode.NONE}, - "study_20": {"type": "rawstudy", "owner": "user_2", "groups": ["group_1"], "public_mode": PublicMode.NONE}, - "study_21": {"type": "rawstudy", "owner": "user_2", "groups": ["group_2"], "public_mode": PublicMode.NONE}, - "study_22": {"type": "rawstudy", "owner": None, "groups": ["group_2"], "public_mode": PublicMode.NONE}, - "study_23": { + "study_X10": {"type": "variantstudy", "owner": "user_1", "groups": None, "public_mode": PublicMode.NONE}, + "study_X11": {"type": "variantstudy", "owner": "user_2", "groups": None, "public_mode": PublicMode.NONE}, + "study_X12": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.NONE}, + "study_X13": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.READ}, + "study_X14": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.EDIT}, + "study_X15": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.EXECUTE}, + "study_X16": {"type": "variantstudy", "owner": None, "groups": None, "public_mode": PublicMode.FULL}, + "study_X17": {"type": "rawstudy", "owner": "user_1", "groups": ["group_1"], "public_mode": PublicMode.NONE}, + "study_X18": {"type": "rawstudy", "owner": "user_1", "groups": ["group_2"], "public_mode": PublicMode.NONE}, + "study_X19": {"type": "rawstudy", "owner": None, "groups": ["group_1"], "public_mode": PublicMode.NONE}, + "study_X20": {"type": "rawstudy", "owner": "user_2", "groups": ["group_1"], "public_mode": PublicMode.NONE}, + "study_X21": {"type": "rawstudy", "owner": "user_2", "groups": ["group_2"], "public_mode": PublicMode.NONE}, + "study_X22": {"type": "rawstudy", "owner": None, "groups": ["group_2"], "public_mode": PublicMode.NONE}, + "study_X23": { "type": "rawstudy", "owner": "user_1", "groups": ["group_1", "group_2"], "public_mode": PublicMode.NONE, }, - "study_24": { + "study_X24": { "type": "rawstudy", "owner": "user_2", "groups": ["group_1", "group_2"], "public_mode": PublicMode.NONE, }, - "study_25": { + "study_X25": { "type": "rawstudy", "owner": None, "groups": ["group_1", "group_2"], "public_mode": PublicMode.NONE, }, - "study_26": {"type": "rawstudy", "owner": "user_1", "groups": None, "public_mode": PublicMode.NONE}, - "study_27": {"type": "rawstudy", "owner": "user_2", "groups": None, "public_mode": PublicMode.NONE}, - "study_28": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.NONE}, - "study_29": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.READ}, - "study_30": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.EDIT}, - "study_31": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.EXECUTE}, - "study_32": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.FULL}, - "study_33": { + "study_X26": {"type": "rawstudy", "owner": "user_1", "groups": None, "public_mode": PublicMode.NONE}, + "study_X27": {"type": "rawstudy", "owner": "user_2", "groups": None, "public_mode": PublicMode.NONE}, + "study_X28": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.NONE}, + "study_X29": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.READ}, + "study_X30": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.EDIT}, + "study_X31": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.EXECUTE}, + "study_X32": {"type": "rawstudy", "owner": None, "groups": None, "public_mode": PublicMode.FULL}, + "study_X33": { "type": "variantstudy", "owner": "user_3", "groups": ["group_1"], "public_mode": PublicMode.NONE, }, - "study_34": {"type": "rawstudy", "owner": "user_3", "groups": ["group_2"], "public_mode": PublicMode.NONE}, - "study_35": {"type": "variantstudy", "owner": "user_3", "groups": None, "public_mode": PublicMode.NONE}, - "study_36": {"type": "rawstudy", "owner": "user_3", "groups": None, "public_mode": PublicMode.NONE}, - "study_37": {"type": "variantstudy", "owner": None, "groups": ["group_3"], "public_mode": PublicMode.NONE}, - "study_38": {"type": "rawstudy", "owner": None, "groups": ["group_3"], "public_mode": PublicMode.NONE}, + "study_X34": {"type": "rawstudy", "owner": "user_3", "groups": ["group_2"], "public_mode": PublicMode.NONE}, + "study_X35": {"type": "variantstudy", "owner": "user_3", "groups": None, "public_mode": PublicMode.NONE}, + "study_X36": {"type": "rawstudy", "owner": "user_3", "groups": None, "public_mode": PublicMode.NONE}, + "study_X37": {"type": "variantstudy", "owner": None, "groups": ["group_3"], "public_mode": PublicMode.NONE}, + "study_X38": {"type": "rawstudy", "owner": None, "groups": ["group_3"], "public_mode": PublicMode.NONE}, } res = client.get(STUDIES_URL, headers={"Authorization": f"Bearer {admin_access_token}"}) assert res.status_code == LIST_STATUS_CODE, res.json() @@ -1375,9 +1375,10 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ ] for request_groups_numbers, expected_studies_numbers in requests_params_expected_studies: request_groups_ids = [groups_ids[f"group_{group_number}"] for group_number in request_groups_numbers] - expected_studies = { - studies_ids_mapping[f"study_{study_number}"] for study_number in expected_studies_numbers - } + expected_studies = [ + studies_ids_mapping[f"study_{(study_number if int(study_number) <= 9 else 'X'+study_number)}"] + for study_number in expected_studies_numbers + ] res = client.get( STUDIES_URL, headers={"Authorization": f"Bearer {users_tokens['user_1']}"}, @@ -1385,7 +1386,7 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ ) assert res.status_code == LIST_STATUS_CODE, res.json() study_map = res.json() - assert not expected_studies.difference(set(study_map)) + assert not set(expected_studies).difference(set(study_map)) assert not all_studies.difference(expected_studies).intersection(set(study_map)) # test pagination res = client.get( @@ -1397,6 +1398,7 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ ) assert res.status_code == LIST_STATUS_CODE, res.json() assert len(res.json()) == max(0, min(2, len(expected_studies) - 2)) + # assert list(res.json()) == expected_studies[2:4] # user_2 access requests_params_expected_studies = [ @@ -1418,7 +1420,8 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ for request_groups_numbers, expected_studies_numbers in requests_params_expected_studies: request_groups_ids = [groups_ids[f"group_{group_number}"] for group_number in request_groups_numbers] expected_studies = { - studies_ids_mapping[f"study_{study_number}"] for study_number in expected_studies_numbers + studies_ids_mapping[f"study_{(study_number if int(study_number) <= 9 else 'X'+study_number)}"] + for study_number in expected_studies_numbers } res = client.get( STUDIES_URL, @@ -1444,7 +1447,8 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ for request_groups_numbers, expected_studies_numbers in requests_params_expected_studies: request_groups_ids = [groups_ids[f"group_{group_number}"] for group_number in request_groups_numbers] expected_studies = { - studies_ids_mapping[f"study_{study_number}"] for study_number in expected_studies_numbers + studies_ids_mapping[f"study_{(study_number if int(study_number) <= 9 else 'X'+study_number)}"] + for study_number in expected_studies_numbers } res = client.get( STUDIES_URL, diff --git a/tests/integration/study_data_blueprint/test_binding_constraints.py b/tests/integration/study_data_blueprint/test_binding_constraints.py index 8f6fa015e4..fff973ae20 100644 --- a/tests/integration/study_data_blueprint/test_binding_constraints.py +++ b/tests/integration/study_data_blueprint/test_binding_constraints.py @@ -1,4 +1,8 @@ +import io +import re + import numpy as np +import pandas as pd import pytest from starlette.testclient import TestClient @@ -62,6 +66,21 @@ def test_constraint_id__other(self) -> None: assert term.generate_id() == "foo" +def _upload_matrix( + client: TestClient, user_access_token: str, study_id: str, matrix_path: str, df: pd.DataFrame +) -> None: + tsv = io.BytesIO() + df.to_csv(tsv, sep="\t", index=False, header=False) + tsv.seek(0) + res = client.put( + f"/v1/studies/{study_id}/raw", + params={"path": matrix_path}, + headers={"Authorization": f"Bearer {user_access_token}"}, + files={"file": tsv}, + ) + res.raise_for_status() + + @pytest.mark.unit_test class TestBindingConstraints: """ @@ -356,17 +375,15 @@ def test_lifecycle__nominal(self, client: TestClient, user_access_token: str, st # Update constraint cluster term with invalid id res = client.put( f"/v1/studies/{study_id}/bindingconstraints/{bc_id}/term", - json={ - "id": f"{area1_id}.!!Invalid#cluster%%", - "weight": 4, - }, + json={"id": f"{area1_id}.!!invalid#cluster%%", "weight": 4}, headers=user_headers, ) assert res.status_code == 404, res.json() - assert res.json() == { - "description": f"{study_id}", - "exception": "ConstraintIdNotFoundError", - } + exception = res.json()["exception"] + description = res.json()["description"] + assert exception == "ConstraintTermNotFound" + assert bc_id in description + assert f"{area1_id}.!!invalid#cluster%%" in description # Update constraint cluster term with empty data res = client.put( @@ -391,6 +408,24 @@ def test_lifecycle__nominal(self, client: TestClient, user_access_token: str, st ) assert res.status_code == 200, res.json() + # Check updated terms, the deleted term should no longer exist. + res = client.get( + f"/v1/studies/{study_id}/bindingconstraints/{bc_id}", + headers=user_headers, + ) + assert res.status_code == 200, res.json() + binding_constraint = res.json() + constraint_terms = binding_constraint["terms"] + expected = [ + { + "data": {"area": area1_id, "cluster": cluster_id.lower()}, + "id": f"{area1_id}.{cluster_id.lower()}", + "offset": None, + "weight": 3.0, + }, + ] + assert constraint_terms == expected + # ============================= # GENERAL EDITION # ============================= @@ -506,7 +541,7 @@ def test_lifecycle__nominal(self, client: TestClient, user_access_token: str, st }, headers=user_headers, ) - assert res.status_code == 422 + assert res.status_code == 422, res.json() description = res.json()["description"] assert "cannot fill 'values'" in description assert "'less_term_matrix'" in description @@ -523,11 +558,11 @@ def test_lifecycle__nominal(self, client: TestClient, user_access_token: str, st "operator": "less", "terms": [], "comments": "Incoherent matrix with version", - "less_term_matrix": [[]], + "lessTermMatrix": [[]], }, headers=user_headers, ) - assert res.status_code == 422 + assert res.status_code == 422, res.json() description = res.json()["description"] assert description == "You cannot fill a 'matrix_term' as these values refer to v8.7+ studies" @@ -557,7 +592,7 @@ def test_lifecycle__nominal(self, client: TestClient, user_access_token: str, st # Delete a fake binding constraint res = client.delete(f"/v1/studies/{study_id}/bindingconstraints/fake_bc", headers=user_headers) assert res.status_code == 404, res.json() - assert res.json()["exception"] == "BindingConstraintNotFoundError" + assert res.json()["exception"] == "BindingConstraintNotFound" assert res.json()["description"] == "Binding constraint 'fake_bc' not found" # Add a group before v8.7 @@ -610,6 +645,55 @@ def test_for_version_870(self, client: TestClient, admin_access_token: str, stud assert res.status_code in {200, 201} study_id = res.json() + # Create Areas + res = client.post( + f"/v1/studies/{study_id}/areas", + headers=admin_headers, + json={ + "name": "Area 1", + "type": "AREA", + }, + ) + assert res.status_code == 200, res.json() + area1_id = res.json()["id"] + assert area1_id == "area 1" + + res = client.post( + f"/v1/studies/{study_id}/areas", + headers=admin_headers, + json={ + "name": "Area 2", + "type": "AREA", + }, + ) + assert res.status_code == 200, res.json() + area2_id = res.json()["id"] + assert area2_id == "area 2" + + # Create a link between the two areas + res = client.post( + f"/v1/studies/{study_id}/links", + headers=admin_headers, + json={ + "area1": area1_id, + "area2": area2_id, + }, + ) + assert res.status_code == 200, res.json() + + # Create a cluster in area1 + res = client.post( + f"/v1/studies/{study_id}/areas/{area1_id}/clusters/thermal", + headers=admin_headers, + json={ + "name": "Cluster 1", + "group": "Nuclear", + }, + ) + assert res.status_code == 200, res.json() + cluster_id = res.json()["id"] + assert cluster_id == "Cluster 1" + # ============================= # CREATION # ============================= @@ -667,6 +751,110 @@ def test_for_version_870(self, client: TestClient, admin_access_token: str, stud else: assert data == np.zeros((matrix_lt3.shape[0], 1)).tolist() + # ============================= + # CONSTRAINT TERM MANAGEMENT + # ============================= + + # Add binding constraint terms + res = client.post( + f"/v1/studies/{study_id}/bindingconstraints/{bc_id_w_group}/terms", + json=[ + {"weight": 1, "offset": 2, "data": {"area1": area1_id, "area2": area2_id}}, + {"weight": 1, "offset": 2, "data": {"area": area1_id, "cluster": cluster_id}}, + ], + headers=admin_headers, + ) + assert res.status_code == 200, res.json() + + # Attempt to add a term with missing data + res = client.post( + f"/v1/studies/{study_id}/bindingconstraints/{bc_id_w_group}/terms", + json=[{"weight": 1, "offset": 2}], + headers=admin_headers, + ) + assert res.status_code == 422, res.json() + exception = res.json()["exception"] + description = res.json()["description"] + assert exception == "InvalidConstraintTerm" + assert bc_id_w_group in description, "Error message should contain the binding constraint ID" + assert "term 'data' is missing" in description, "Error message should indicate the missing field" + + # Attempt to add a duplicate term + res = client.post( + f"/v1/studies/{study_id}/bindingconstraints/{bc_id_w_group}/terms", + json=[{"weight": 99, "offset": 0, "data": {"area1": area1_id, "area2": area2_id}}], + headers=admin_headers, + ) + assert res.status_code == 409, res.json() + exception = res.json()["exception"] + description = res.json()["description"] + assert exception == "DuplicateConstraintTerm" + assert bc_id_w_group in description, "Error message should contain the binding constraint ID" + assert f"{area1_id}%{area2_id}" in description, "Error message should contain the duplicate term ID" + + # Get binding constraints list to check added terms + res = client.get( + f"/v1/studies/{study_id}/bindingconstraints/{bc_id_w_group}", + headers=admin_headers, + ) + assert res.status_code == 200, res.json() + binding_constraint = res.json() + constraint_terms = binding_constraint["terms"] + expected = [ + { + "data": {"area1": area1_id, "area2": area2_id}, + "id": f"{area1_id}%{area2_id}", + "offset": 2, + "weight": 1.0, + }, + { + "data": {"area": area1_id, "cluster": cluster_id.lower()}, + "id": f"{area1_id}.{cluster_id.lower()}", + "offset": 2, + "weight": 1.0, + }, + ] + assert constraint_terms == expected + + # Update binding constraint terms + res = client.put( + f"/v1/studies/{study_id}/bindingconstraints/{bc_id_w_group}/terms", + json=[ + {"id": f"{area1_id}%{area2_id}", "weight": 4.4, "offset": 1}, + { + "id": f"{area1_id}.{cluster_id}", + "weight": 5.1, + "data": {"area": area1_id, "cluster": cluster_id}, + }, + ], + headers=admin_headers, + ) + assert res.status_code == 200, res.json() + + # Asserts terms were updated + res = client.get( + f"/v1/studies/{study_id}/bindingconstraints/{bc_id_w_group}", + headers=admin_headers, + ) + assert res.status_code == 200, res.json() + binding_constraint = res.json() + constraint_terms = binding_constraint["terms"] + expected = [ + { + "data": {"area1": area1_id, "area2": area2_id}, + "id": f"{area1_id}%{area2_id}", + "offset": 1, + "weight": 4.4, + }, + { + "data": {"area": area1_id, "cluster": cluster_id.lower()}, + "id": f"{area1_id}.{cluster_id.lower()}", + "offset": None, + "weight": 5.1, + }, + ] + assert constraint_terms == expected + # ============================= # UPDATE # ============================= @@ -802,9 +990,8 @@ def test_for_version_870(self, client: TestClient, admin_access_token: str, stud assert "(8784, 2)" in description # - # Creation of 2 BC inside the same group with different columns size - # "First BC": 3 cols, "Group 1" -> OK - # "Second BC": 4 cols, "Group 1" -> OK, but should fail in group validation + # Creation of 1 BC + # Update raw with wrong columns size -> OK but validation should fail # matrix_lt3 = np.ones((8784, 3)) @@ -819,6 +1006,47 @@ def test_for_version_870(self, client: TestClient, admin_access_token: str, stud headers=admin_headers, ) assert res.status_code in {200, 201}, res.json() + first_bc_id = res.json()["id"] + + generator = np.random.default_rng(11) + random_matrix = pd.DataFrame(generator.integers(0, 10, size=(4, 1))) + _upload_matrix( + client, + admin_access_token, + study_id, + f"input/bindingconstraints/{first_bc_id}_gt", + random_matrix, + ) + + # Validation should fail + res = client.get( + f"/v1/studies/{study_id}/constraint-groups/Group 1/validate", + headers=admin_headers, + ) + assert res.status_code == 422 + obj = res.json() + assert obj["exception"] == "WrongMatrixHeightError" + assert obj["description"] == "The binding constraint 'First BC' should have 8784 rows, currently: 4" + + # So, we correct the shape of the matrix + res = client.put( + f"/v1/studies/{study_id}/bindingconstraints/{first_bc_id}", + json={"greater_term_matrix": matrix_lt3.tolist()}, + headers=admin_headers, + ) + assert res.status_code in {200, 201}, res.json() + + # + # Creation of another BC inside the same group with different columns size + # "Second BC": 4 cols, "Group 1" -> OK, but should fail in group validation + # + + # Asserts everything is ok. + res = client.get( + f"/v1/studies/{study_id}/constraint-groups/Group 1/validate", + headers=admin_headers, + ) + assert res.status_code == 200, res.json() matrix_gt4 = np.ones((8784, 4)) # Wrong number of columns res = client.post( @@ -837,12 +1065,10 @@ def test_for_version_870(self, client: TestClient, admin_access_token: str, stud # validate the BC group "Group 1" res = client.get(f"/v1/studies/{study_id}/constraint-groups/Group 1/validate", headers=admin_headers) assert res.status_code == 422, res.json() - assert res.json()["exception"] == "IncoherenceBetweenMatricesLength" + assert res.json()["exception"] == "MatrixWidthMismatchError" description = res.json()["description"] - assert description == { - "invalid_constraints": {"second bc": ["'second bc_gt' (8784, 4)"]}, - "msg": "Matrix shapes mismatch in binding constraints group. Expected shape: (8784, 3)", - } + assert re.search(r"the most common width in the group is 3", description, flags=re.IGNORECASE) + assert re.search(r"'second bc_gt' has 4 columns", description, flags=re.IGNORECASE) # So, we correct the shape of the matrix of the Second BC res = client.put( @@ -884,12 +1110,10 @@ def test_for_version_870(self, client: TestClient, admin_access_token: str, stud # validate the BC group "Group 1" res = client.get(f"/v1/studies/{study_id}/constraint-groups/Group 1/validate", headers=admin_headers) assert res.status_code == 422, res.json() - assert res.json()["exception"] == "IncoherenceBetweenMatricesLength" + assert res.json()["exception"] == "MatrixWidthMismatchError" description = res.json()["description"] - assert description == { - "invalid_constraints": {"third bc": ["'third bc_lt' (8784, 4)"]}, - "msg": "Matrix shapes mismatch in binding constraints group. Expected shape: (8784, 3)", - } + assert re.search(r"the most common width in the group is 3", description, flags=re.IGNORECASE) + assert re.search(r"'third bc_lt' has 4 columns", description, flags=re.IGNORECASE) # So, we correct the shape of the matrix of the Second BC res = client.put( @@ -949,10 +1173,7 @@ def test_for_version_870(self, client: TestClient, admin_access_token: str, stud assert res.status_code == 422, res.json() exception = res.json()["exception"] description = res.json()["description"] - assert exception == "IncoherenceBetweenMatricesLength" - assert description == { - "Group 1": { - "msg": "Matrix shapes mismatch in binding constraints group. Expected shape: (8784, 3)", - "invalid_constraints": {"third bc": ["'third bc_lt' (8784, 4)"]}, - } - } + assert exception == "MatrixWidthMismatchError" + assert re.search(r"'Group 1':", description, flags=re.IGNORECASE) + assert re.search(r"the most common width in the group is 3", description, flags=re.IGNORECASE) + assert re.search(r"'third bc_lt' has 4 columns", description, flags=re.IGNORECASE) diff --git a/tests/integration/study_data_blueprint/test_renewable.py b/tests/integration/study_data_blueprint/test_renewable.py index 0e57e1464b..8a9d575d97 100644 --- a/tests/integration/study_data_blueprint/test_renewable.py +++ b/tests/integration/study_data_blueprint/test_renewable.py @@ -23,6 +23,7 @@ * delete a cluster (or several clusters) * validate the consistency of the matrices (and properties) """ + import json import re import typing as t diff --git a/tests/integration/study_data_blueprint/test_st_storage.py b/tests/integration/study_data_blueprint/test_st_storage.py index 9566c4ba71..b8aa0de878 100644 --- a/tests/integration/study_data_blueprint/test_st_storage.py +++ b/tests/integration/study_data_blueprint/test_st_storage.py @@ -8,14 +8,22 @@ from starlette.testclient import TestClient from antarest.core.tasks.model import TaskStatus -from antarest.study.business.areas.st_storage_management import STStorageOutput +from antarest.study.business.areas.st_storage_management import create_storage_output from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id -from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import STStorageConfig +from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import create_st_storage_config from tests.integration.utils import wait_task_completion -DEFAULT_CONFIG = json.loads(STStorageConfig(id="dummy", name="dummy").json(by_alias=True, exclude={"id", "name"})) +_ST_STORAGE_860_CONFIG = create_st_storage_config(860, name="dummy") +_ST_STORAGE_880_CONFIG = create_st_storage_config(880, name="dummy") -DEFAULT_PROPERTIES = json.loads(STStorageOutput(name="dummy").json(by_alias=True, exclude={"id", "name"})) +_ST_STORAGE_OUTPUT_860 = create_storage_output(860, cluster_id="dummy", config={"name": "dummy"}) +_ST_STORAGE_OUTPUT_880 = create_storage_output(880, cluster_id="dummy", config={"name": "dummy"}) + +DEFAULT_CONFIG_860 = json.loads(_ST_STORAGE_860_CONFIG.json(by_alias=True, exclude={"id", "name"})) +DEFAULT_CONFIG_880 = json.loads(_ST_STORAGE_880_CONFIG.json(by_alias=True, exclude={"id", "name"})) + +DEFAULT_OUTPUT_860 = json.loads(_ST_STORAGE_OUTPUT_860.json(by_alias=True, exclude={"id", "name"})) +DEFAULT_OUTPUT_880 = json.loads(_ST_STORAGE_OUTPUT_880.json(by_alias=True, exclude={"id", "name"})) # noinspection SpellCheckingInspection @@ -30,8 +38,21 @@ class TestSTStorage: """ @pytest.mark.parametrize("study_type", ["raw", "variant"]) + @pytest.mark.parametrize( + "study_version, default_output", + [ + pytest.param(860, DEFAULT_OUTPUT_860, id="860"), + pytest.param(880, DEFAULT_OUTPUT_880, id="880"), + ], + ) def test_lifecycle__nominal( - self, client: TestClient, user_access_token: str, study_id: str, study_type: str + self, + client: TestClient, + user_access_token: str, + study_id: str, + study_type: str, + study_version: int, + default_output: t.Dict[str, t.Any], ) -> None: """ The purpose of this integration test is to test the endpoints @@ -62,11 +83,11 @@ def test_lifecycle__nominal( # ============================= user_headers = {"Authorization": f"Bearer {user_access_token}"} - # Upgrade study to version 860 + # Upgrade study to version 860 or above res = client.put( f"/v1/studies/{study_id}/upgrade", headers=user_headers, - params={"target_version": 860}, + params={"target_version": study_version}, ) res.raise_for_status() task_id = res.json() @@ -99,10 +120,9 @@ def test_lifecycle__nominal( area_id = transform_name_to_id("FR") siemens_battery = "Siemens Battery" - # Un attempt to create a short-term storage without name + # An attempt to create a short-term storage without name # should raise a validation error (other properties are optional). - # Un attempt to create a short-term storage with an empty name - # or an invalid name should also raise a validation error. + # The same goes for empty or invalid names attempts = [{}, {"name": ""}, {"name": "!??"}] for attempt in attempts: res = client.post( @@ -113,9 +133,9 @@ def test_lifecycle__nominal( assert res.status_code == 422, res.json() assert res.json()["exception"] in {"ValidationError", "RequestValidationError"}, res.json() - # We can create a short-term storage with the following properties: + # We can create a short-term storage with the following properties. + # Unfilled properties will be set to their default values. siemens_properties = { - **DEFAULT_PROPERTIES, "name": siemens_battery, "group": "Battery", "injectionNominalCapacity": 1450, @@ -130,8 +150,8 @@ def test_lifecycle__nominal( assert res.status_code == 200, res.json() siemens_battery_id = res.json()["id"] assert siemens_battery_id == transform_name_to_id(siemens_battery) - siemens_config = {**siemens_properties, "id": siemens_battery_id} - assert res.json() == siemens_config + siemens_output = {**default_output, **siemens_properties, "id": siemens_battery_id} + assert res.json() == siemens_output # reading the properties of a short-term storage res = client.get( @@ -139,7 +159,7 @@ def test_lifecycle__nominal( headers=user_headers, ) assert res.status_code == 200, res.json() - assert res.json() == siemens_config + assert res.json() == siemens_output # ============================= # SHORT-TERM STORAGE MATRICES @@ -188,7 +208,7 @@ def test_lifecycle__nominal( headers=user_headers, ) assert res.status_code == 200, res.json() - assert res.json() == [siemens_config] + assert res.json() == [siemens_output] # updating properties res = client.patch( @@ -200,19 +220,19 @@ def test_lifecycle__nominal( }, ) assert res.status_code == 200, res.json() - siemens_config = { - **siemens_config, + siemens_output = { + **siemens_output, "name": "New Siemens Battery", "reservoirCapacity": 2500, } - assert res.json() == siemens_config + assert res.json() == siemens_output res = client.get( f"/v1/studies/{study_id}/areas/{area_id}/storages/{siemens_battery_id}", headers=user_headers, ) assert res.status_code == 200, res.json() - assert res.json() == siemens_config + assert res.json() == siemens_output # =========================== # SHORT-TERM STORAGE UPDATE @@ -227,13 +247,13 @@ def test_lifecycle__nominal( "reservoirCapacity": 0, }, ) - siemens_config = { - **siemens_config, + siemens_output = { + **siemens_output, "initialLevel": 0.59, "reservoirCapacity": 0, } assert res.status_code == 200, res.json() - assert res.json() == siemens_config + assert res.json() == siemens_output # An attempt to update the `efficiency` property with an invalid value # should raise a validation error. @@ -253,7 +273,7 @@ def test_lifecycle__nominal( headers=user_headers, ) assert res.status_code == 200, res.json() - assert res.json() == siemens_config + assert res.json() == siemens_output # ============================= # SHORT-TERM STORAGE DUPLICATION @@ -267,11 +287,11 @@ def test_lifecycle__nominal( ) assert res.status_code in {200, 201}, res.json() # asserts the config is the same - duplicated_config = dict(siemens_config) - duplicated_config["name"] = new_name # type: ignore + duplicated_output = dict(siemens_output) + duplicated_output["name"] = new_name duplicated_id = transform_name_to_id(new_name) - duplicated_config["id"] = duplicated_id # type: ignore - assert res.json() == duplicated_config + duplicated_output["id"] = duplicated_id + assert res.json() == duplicated_output # asserts the matrix has also been duplicated res = client.get( @@ -351,16 +371,16 @@ def test_lifecycle__nominal( headers=user_headers, ) assert res.status_code == 200, res.json() - siemens_config = {**DEFAULT_PROPERTIES, **siemens_properties, "id": siemens_battery_id} - grand_maison_config = {**DEFAULT_PROPERTIES, **grand_maison_properties, "id": grand_maison_id} - assert res.json() == [duplicated_config, siemens_config, grand_maison_config] + siemens_output = {**default_output, **siemens_properties, "id": siemens_battery_id} + grand_maison_output = {**default_output, **grand_maison_properties, "id": grand_maison_id} + assert res.json() == [duplicated_output, siemens_output, grand_maison_output] # We can delete the three short-term storages at once. res = client.request( "DELETE", f"/v1/studies/{study_id}/areas/{area_id}/storages", headers=user_headers, - json=[grand_maison_id, duplicated_config["id"]], + json=[grand_maison_id, duplicated_output["id"]], ) assert res.status_code == 204, res.json() assert res.text in {"", "null"} # Old FastAPI versions return 'null'. @@ -517,8 +537,37 @@ def test_lifecycle__nominal( assert siemens_battery.lower() in description assert obj["exception"] == "DuplicateSTStorage" + # Cannot specify the field 'enabled' before v8.8 + properties = {"enabled": False, "name": "fake_name", "group": "Battery"} + res = client.post( + f"/v1/studies/{study_id}/areas/{area_id}/storages", + headers=user_headers, + json=properties, + ) + if study_version < 880: + assert res.status_code == 422 + assert res.json()["exception"] == "ValidationError" + else: + assert res.status_code == 200 + assert res.json()["enabled"] is False + @pytest.mark.parametrize("study_type", ["raw", "variant"]) - def test__default_values(self, client: TestClient, user_access_token: str, study_type: str) -> None: + @pytest.mark.parametrize( + "study_version, default_config, default_output", + [ + pytest.param(860, DEFAULT_CONFIG_860, DEFAULT_OUTPUT_860, id="860"), + pytest.param(880, DEFAULT_CONFIG_880, DEFAULT_OUTPUT_880, id="880"), + ], + ) + def test__default_values( + self, + client: TestClient, + user_access_token: str, + study_type: str, + study_version: int, + default_config: t.Dict[str, t.Any], + default_output: t.Dict[str, t.Any], + ) -> None: """ The purpose of this integration test is to test the default values of the properties of a short-term storage. @@ -532,7 +581,7 @@ def test__default_values(self, client: TestClient, user_access_token: str, study res = client.post( "/v1/studies", headers=user_headers, - params={"name": "MyStudy", "version": 860}, + params={"name": "MyStudy", "version": study_version}, ) assert res.status_code in {200, 201}, res.json() study_id = res.json() @@ -565,8 +614,8 @@ def test__default_values(self, client: TestClient, user_access_token: str, study ) assert res.status_code == 200, res.json() tesla_battery_id = res.json()["id"] - tesla_config = {**DEFAULT_PROPERTIES, "id": tesla_battery_id, "name": tesla_battery, "group": "Battery"} - assert res.json() == tesla_config + tesla_output = {**default_output, "id": tesla_battery_id, "name": tesla_battery, "group": "Battery"} + assert res.json() == tesla_output # Use the Debug mode to make sure that the initialLevel and initialLevelOptim properties # are properly set in the configuration file. @@ -577,7 +626,7 @@ def test__default_values(self, client: TestClient, user_access_token: str, study ) assert res.status_code == 200, res.json() actual = res.json() - expected = {**DEFAULT_CONFIG, "name": tesla_battery, "group": "Battery"} + expected = {**default_config, "name": tesla_battery, "group": "Battery"} assert actual == expected # We want to make sure that the default properties are applied to a study variant. @@ -616,7 +665,7 @@ def test__default_values(self, client: TestClient, user_access_token: str, study "action": "create_st_storage", "args": { "area_id": "fr", - "parameters": {**DEFAULT_CONFIG, "name": siemens_battery, "group": "Battery"}, + "parameters": {**default_config, "name": siemens_battery, "group": "Battery"}, "pmax_injection": ANY, "pmax_withdrawal": ANY, "lower_rule_curve": ANY, @@ -700,7 +749,7 @@ def test__default_values(self, client: TestClient, user_access_token: str, study assert res.status_code == 200, res.json() actual = res.json() expected = { - **DEFAULT_CONFIG, + **default_config, "name": siemens_battery, "group": "Battery", "injectionnominalcapacity": 1600, diff --git a/tests/integration/study_data_blueprint/test_table_mode.py b/tests/integration/study_data_blueprint/test_table_mode.py new file mode 100644 index 0000000000..45ca2cc961 --- /dev/null +++ b/tests/integration/study_data_blueprint/test_table_mode.py @@ -0,0 +1,917 @@ +import typing as t + +import pytest +from starlette.testclient import TestClient + +from antarest.core.tasks.model import TaskStatus +from tests.integration.utils import wait_task_completion + +# noinspection SpellCheckingInspection +POLLUTANTS_860 = ("nh3", "nmvoc", "nox", "op1", "op2", "op3", "op4", "op5", "pm10", "pm25", "pm5", "so2") + + +# noinspection SpellCheckingInspection +@pytest.mark.unit_test +class TestTableMode: + """ + Test the end points related to the table mode. + + Those tests use the "examples/studies/STA-mini.zip" Study, + which contains the following areas: ["de", "es", "fr", "it"]. + """ + + @pytest.mark.parametrize("study_version", [0, 810, 830, 860, 870, 880]) + def test_lifecycle__nominal( + self, client: TestClient, user_access_token: str, study_id: str, study_version: int + ) -> None: + user_headers = {"Authorization": f"Bearer {user_access_token}"} + + # In order to test the table mode for renewable clusters and short-term storage, + # it is required that the study is either in version 8.1 for renewable energies + # or in version 8.6 for short-term storage and that the renewable clusters are enabled + # in the study configuration. + + # Upgrade the study to the desired version + if study_version: + res = client.put( + f"/v1/studies/{study_id}/upgrade", + headers={"Authorization": f"Bearer {user_access_token}"}, + params={"target_version": study_version}, + ) + assert res.status_code == 200, res.json() + + task_id = res.json() + task = wait_task_completion(client, user_access_token, task_id) + assert task.status == TaskStatus.COMPLETED, task + + # Table Mode - Area + # ================= + + # Get the schema of the areas table + res = client.get( + "/v1/table-schema/areas", + headers=user_headers, + ) + assert res.status_code == 200, res.json() + actual = res.json() + assert set(actual["properties"]) == { + # Optimization - Nodal optimization + "nonDispatchablePower", + "dispatchableHydroPower", + "otherDispatchablePower", + "averageUnsuppliedEnergyCost", + "spreadUnsuppliedEnergyCost", + "averageSpilledEnergyCost", + "spreadSpilledEnergyCost", + # Optimization - Filtering + "filterSynthesis", + "filterYearByYear", + # Adequacy patch + "adequacyPatchMode", + } + + _de_values = { + "averageUnsuppliedEnergyCost": 3456, + "dispatchableHydroPower": False, + "filterSynthesis": "daily, monthly", # not changed + "filterYearByYear": "annual, weekly", + } + _es_values = {"spreadSpilledEnergyCost": None} # not changed + + if study_version >= 830: + _es_values["adequacyPatchMode"] = "inside" + + res = client.put( + f"/v1/studies/{study_id}/table-mode/areas", + headers=user_headers, + json={ + "de": _de_values, + "es": _es_values, + }, + ) + assert res.status_code == 200, res.json() + expected_areas: t.Dict[str, t.Dict[str, t.Any]] + expected_areas = { + "de": { + "averageSpilledEnergyCost": 0, + "averageUnsuppliedEnergyCost": 3456, + "dispatchableHydroPower": False, + "filterSynthesis": "daily, monthly", + "filterYearByYear": "weekly, annual", + "nonDispatchablePower": True, + "otherDispatchablePower": True, + "spreadSpilledEnergyCost": 0, + "spreadUnsuppliedEnergyCost": 0, + }, + "es": { + "averageSpilledEnergyCost": 0, + "averageUnsuppliedEnergyCost": 3000, + "dispatchableHydroPower": True, + "filterSynthesis": "daily, monthly", + "filterYearByYear": "hourly, weekly, annual", + "nonDispatchablePower": True, + "otherDispatchablePower": True, + "spreadSpilledEnergyCost": 0, + "spreadUnsuppliedEnergyCost": 0, + }, + "fr": { + "averageSpilledEnergyCost": 0, + "averageUnsuppliedEnergyCost": 3000, + "dispatchableHydroPower": True, + "filterSynthesis": "", + "filterYearByYear": "hourly", + "nonDispatchablePower": True, + "otherDispatchablePower": True, + "spreadSpilledEnergyCost": 0, + "spreadUnsuppliedEnergyCost": 0, + }, + "it": { + "averageSpilledEnergyCost": 0, + "averageUnsuppliedEnergyCost": 3000, + "dispatchableHydroPower": True, + "filterSynthesis": "", + "filterYearByYear": "hourly", + "nonDispatchablePower": True, + "otherDispatchablePower": True, + "spreadSpilledEnergyCost": 0, + "spreadUnsuppliedEnergyCost": 0, + }, + } + + if study_version >= 830: + expected_areas["de"]["adequacyPatchMode"] = "outside" + expected_areas["es"]["adequacyPatchMode"] = "inside" + expected_areas["fr"]["adequacyPatchMode"] = "outside" + expected_areas["it"]["adequacyPatchMode"] = "outside" + + actual = res.json() + assert actual == expected_areas + + res = client.get(f"/v1/studies/{study_id}/table-mode/areas", headers=user_headers) + assert res.status_code == 200, res.json() + actual = res.json() + assert actual == expected_areas + + # Table Mode - Links + # ================== + + # Get the schema of the links table + res = client.get( + "/v1/table-schema/links", + headers=user_headers, + ) + assert res.status_code == 200, res.json() + actual = res.json() + assert set(actual["properties"]) == { + "colorRgb", + "comments", + "hurdlesCost", + "loopFlow", + "usePhaseShifter", + "transmissionCapacities", + "assetType", + "linkStyle", + "linkWidth", + "displayComments", + "filterSynthesis", + "filterYearByYear", + } + + res = client.put( + f"/v1/studies/{study_id}/table-mode/links", + headers=user_headers, + json={ + "de / fr": { + "colorRgb": "#FFA500", + "displayComments": False, + "filterSynthesis": "hourly, daily, weekly, annual", + "filterYearByYear": "hourly, daily, monthly, annual", + "hurdlesCost": True, + "linkStyle": "plain", + "linkWidth": 2, + "loopFlow": False, + "transmissionCapacities": "ignore", + }, + "es / fr": { + "colorRgb": "#FF6347", + "displayComments": True, + "filterSynthesis": "hourly, daily, weekly, monthly, annual, annual", # duplicate is ignored + "filterYearByYear": "hourly, daily, weekly, annual", + "hurdlesCost": True, + "linkStyle": "plain", + "linkWidth": 1, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": True, + }, + "fr / it": { + "comments": "Link from France to Italie", + "assetType": "DC", # case-insensitive + }, + }, + ) + assert res.status_code == 200, res.json() + expected_links = { + "de / fr": { + "assetType": "ac", + "colorRgb": "#FFA500", + "comments": "", + "displayComments": False, + "filterSynthesis": "hourly, daily, weekly, annual", + "filterYearByYear": "hourly, daily, monthly, annual", + "hurdlesCost": True, + "linkStyle": "plain", + "linkWidth": 2, + "loopFlow": False, + "transmissionCapacities": "ignore", + "usePhaseShifter": False, + }, + "es / fr": { + "assetType": "ac", + "colorRgb": "#FF6347", + "comments": "", + "displayComments": True, + "filterSynthesis": "hourly, daily, weekly, monthly, annual", + "filterYearByYear": "hourly, daily, weekly, annual", + "hurdlesCost": True, + "linkStyle": "plain", + "linkWidth": 1, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": True, + }, + "fr / it": { + "assetType": "dc", + "colorRgb": "#707070", + "comments": "Link from France to Italie", + "displayComments": True, + "filterSynthesis": "", + "filterYearByYear": "hourly", + "hurdlesCost": True, + "linkStyle": "plain", + "linkWidth": 1, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": False, + }, + } + actual = res.json() + assert actual == expected_links + + res = client.get(f"/v1/studies/{study_id}/table-mode/links", headers=user_headers) + assert res.status_code == 200, res.json() + actual = res.json() + assert actual == expected_links + + # Table Mode - Thermal Clusters + # ============================= + + # Get the schema of the thermals table + res = client.get( + "/v1/table-schema/thermals", + headers=user_headers, + ) + assert res.status_code == 200, res.json() + actual = res.json() + assert set(actual["properties"]) == { + # read-only fields + "id", + "name", + # Thermals fields + "group", + "enabled", + "unitCount", + "nominalCapacity", + "genTs", + "minStablePower", + "minUpTime", + "minDownTime", + "mustRun", + "spinning", + "volatilityForced", + "volatilityPlanned", + "lawForced", + "lawPlanned", + "marginalCost", + "spreadCost", + "fixedCost", + "startupCost", + "marketBidCost", + # pollutants - since v8.6 (except for "co2") + "co2", + "nh3", + "so2", + "nox", + "pm25", + "pm5", + "pm10", + "nmvoc", + "op1", + "op2", + "op3", + "op4", + "op5", + # since v8.7 + "costGeneration", + "efficiency", + "variableOMCost", + } + + _solar_values = {"group": "Other 2", "nominalCapacity": 500000, "unitCount": 17} + _wind_on_values = {"group": "Nuclear", "nominalCapacity": 314159, "unitCount": 15, "co2": 123} + if study_version >= 860: + _solar_values["so2"] = 8.25 + if study_version >= 870: + _solar_values.update({"costGeneration": "useCostTimeseries", "efficiency": 87, "variableOMCost": -12.5}) + + res = client.put( + f"/v1/studies/{study_id}/table-mode/thermals", + headers=user_headers, + json={ + "de / 01_solar": _solar_values, + "de / 02_wind_on": _wind_on_values, + }, + ) + assert res.status_code == 200, res.json() + expected_thermals = { + "de / 01_solar": { + # "id": "01_solar", + # "name": "01_solar", + "co2": 0, + "costGeneration": None, + "efficiency": None, + "enabled": True, + "fixedCost": 0, + "genTs": "use global", + "group": "Other 2", + "lawForced": "uniform", + "lawPlanned": "uniform", + "marginalCost": 10, + "marketBidCost": 10, + "minDownTime": 1, + "minStablePower": 0, + "minUpTime": 1, + "mustRun": False, + "nominalCapacity": 500000, + "spinning": 0, + "spreadCost": 0, + "startupCost": 0, + "unitCount": 17, + "variableOMCost": None, + "volatilityForced": 0, + "volatilityPlanned": 0, + }, + "de / 02_wind_on": { + # "id": "02_wind_on", + # "name": "02_wind_on", + "co2": 123, + "costGeneration": None, + "efficiency": None, + "enabled": True, + "fixedCost": 0, + "genTs": "use global", + "group": "Nuclear", + "lawForced": "uniform", + "lawPlanned": "uniform", + "marginalCost": 20, + "marketBidCost": 20, + "minDownTime": 1, + "minStablePower": 0, + "minUpTime": 1, + "mustRun": False, + "nominalCapacity": 314159, + "spinning": 0, + "spreadCost": 0, + "startupCost": 0, + "unitCount": 15, + "variableOMCost": None, + "volatilityForced": 0, + "volatilityPlanned": 0, + }, + } + + if study_version >= 860: + _values = dict.fromkeys(POLLUTANTS_860, 0) + expected_thermals["de / 02_wind_on"].update(_values) + expected_thermals["de / 01_solar"].update(_values, **{"so2": 8.25}) + else: + _values = dict.fromkeys(POLLUTANTS_860) + expected_thermals["de / 02_wind_on"].update(_values) + expected_thermals["de / 01_solar"].update(_values) + + if study_version >= 870: + _values = {"costGeneration": "SetManually", "efficiency": 100, "variableOMCost": 0} + expected_thermals["de / 02_wind_on"].update(_values) + _values = {"costGeneration": "useCostTimeseries", "efficiency": 87, "variableOMCost": -12.5} + expected_thermals["de / 01_solar"].update(_values) + + assert res.json()["de / 01_solar"] == expected_thermals["de / 01_solar"] + assert res.json()["de / 02_wind_on"] == expected_thermals["de / 02_wind_on"] + + res = client.get( + f"/v1/studies/{study_id}/table-mode/thermals", + headers=user_headers, + params={"columns": ",".join(["group", "unitCount", "nominalCapacity", "so2"])}, + ) + assert res.status_code == 200, res.json() + expected: t.Dict[str, t.Dict[str, t.Any]] + expected = { + "de / 01_solar": {"group": "Other 2", "nominalCapacity": 500000, "unitCount": 17}, + "de / 02_wind_on": {"group": "Nuclear", "nominalCapacity": 314159, "unitCount": 15}, + "de / 03_wind_off": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "de / 04_res": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "de / 05_nuclear": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "de / 06_coal": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "de / 07_gas": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "de / 08_non-res": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "de / 09_hydro_pump": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "es / 01_solar": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "es / 02_wind_on": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "es / 03_wind_off": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "es / 04_res": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "es / 05_nuclear": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "es / 06_coal": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "es / 07_gas": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "es / 08_non-res": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "es / 09_hydro_pump": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "fr / 01_solar": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "fr / 02_wind_on": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "fr / 03_wind_off": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "fr / 04_res": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "fr / 05_nuclear": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "fr / 06_coal": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "fr / 07_gas": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "fr / 08_non-res": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "fr / 09_hydro_pump": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "it / 01_solar": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "it / 02_wind_on": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "it / 03_wind_off": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "it / 04_res": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "it / 05_nuclear": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "it / 06_coal": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "it / 07_gas": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "it / 08_non-res": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + "it / 09_hydro_pump": {"group": "Other 1", "nominalCapacity": 1000000, "unitCount": 1}, + } + if study_version >= 860: + for key in expected: + expected[key]["so2"] = 0 + expected["de / 01_solar"]["so2"] = 8.25 + + actual = res.json() + assert actual == expected + + # Table Mode - Renewable Clusters + # =============================== + + # only concerns studies after v8.1 + if study_version >= 810: + # Parameter 'renewable-generation-modelling' must be set to 'clusters' instead of 'aggregated'. + # The `enr_modelling` value must be set to "clusters" instead of "aggregated" + args = { + "target": "settings/generaldata/other preferences", + "data": {"renewable-generation-modelling": "clusters"}, + } + res = client.post( + f"/v1/studies/{study_id}/commands", + headers={"Authorization": f"Bearer {user_access_token}"}, + json=[{"action": "update_config", "args": args}], + ) + assert res.status_code == 200, res.json() + + # Prepare data for renewable clusters tests + generators_by_country = { + "fr": { + "La Rochelle": { + "name": "La Rochelle", + "group": "solar pv", + "nominalCapacity": 2.1, + "unitCount": 1, + "tsInterpretation": "production-factor", + }, + "Oleron": { + "name": "Oleron", + "group": "wind offshore", + "nominalCapacity": 15, + "unitCount": 70, + "tsInterpretation": "production-factor", + }, + "Dieppe": { + "name": "Dieppe", + "group": "wind offshore", + "nominalCapacity": 8, + "unitCount": 62, + "tsInterpretation": "power-generation", + }, + }, + "it": { + "Sicile": { + "name": "Sicile", + "group": "solar pv", + "nominalCapacity": 1.8, + "unitCount": 1, + "tsInterpretation": "production-factor", + }, + "Sardaigne": { + "name": "Sardaigne", + "group": "wind offshore", + "nominalCapacity": 12, + "unitCount": 86, + "tsInterpretation": "power-generation", + }, + "Pouilles": { + "name": "Pouilles", + "enabled": False, + "group": "wind offshore", + "nominalCapacity": 11, + "unitCount": 40, + "tsInterpretation": "power-generation", + }, + }, + } + + for area_id, generators in generators_by_country.items(): + for generator_id, generator in generators.items(): + res = client.post( + f"/v1/studies/{study_id}/areas/{area_id}/clusters/renewable", + headers=user_headers, + json=generator, + ) + res.raise_for_status() + + # Get the schema of the renewables table + res = client.get( + "/v1/table-schema/renewables", + headers=user_headers, + ) + assert res.status_code == 200, res.json() + actual = res.json() + assert set(actual["properties"]) == { + # read-only fields + "id", + "name", + # Renewables fields + "group", + "tsInterpretation", + "enabled", + "unitCount", + "nominalCapacity", + } + + # Update some generators using the table mode + res = client.put( + f"/v1/studies/{study_id}/table-mode/renewables", + headers=user_headers, + json={ + "fr / Dieppe": {"enabled": False}, + "fr / La Rochelle": {"enabled": True, "nominalCapacity": 3.1, "unitCount": 2}, + "it / Pouilles": {"group": "Wind Onshore"}, + }, + ) + assert res.status_code == 200, res.json() + + res = client.get( + f"/v1/studies/{study_id}/table-mode/renewables", + headers=user_headers, + params={"columns": ",".join(["group", "enabled", "unitCount", "nominalCapacity"])}, + ) + assert res.status_code == 200, res.json() + expected = { + "fr / Dieppe": {"enabled": False, "group": "Wind Offshore", "nominalCapacity": 8, "unitCount": 62}, + "fr / La Rochelle": {"enabled": True, "group": "Solar PV", "nominalCapacity": 3.1, "unitCount": 2}, + "fr / Oleron": {"enabled": True, "group": "Wind Offshore", "nominalCapacity": 15, "unitCount": 70}, + "it / Pouilles": {"enabled": False, "group": "Wind Onshore", "nominalCapacity": 11, "unitCount": 40}, + "it / Sardaigne": {"enabled": True, "group": "Wind Offshore", "nominalCapacity": 12, "unitCount": 86}, + "it / Sicile": {"enabled": True, "group": "Solar PV", "nominalCapacity": 1.8, "unitCount": 1}, + } + actual = res.json() + assert actual == expected + + # Table Mode - Short Term Storage + # =============================== + + # only concerns studies after v8.6 + if study_version >= 860: + # Get the schema of the short-term storages table + res = client.get( + "/v1/table-schema/st-storages", + headers=user_headers, + ) + assert res.status_code == 200, res.json() + actual = res.json() + assert set(actual["properties"]) == { + # read-only fields + "id", + "name", + # Short-term storage fields + "enabled", # since v8.8 + "group", + "injectionNominalCapacity", + "withdrawalNominalCapacity", + "reservoirCapacity", + "efficiency", + "initialLevel", + "initialLevelOptim", + } + + # Prepare data for short-term storage tests + storage_by_country = { + "fr": { + "siemens": { + "name": "Siemens", + "group": "battery", + "injectionNominalCapacity": 1500, + "withdrawalNominalCapacity": 1500, + "reservoirCapacity": 1500, + "initialLevel": 0.5, + "initialLevelOptim": False, + }, + "tesla": { + "name": "Tesla", + "group": "battery", + "injectionNominalCapacity": 1200, + "withdrawalNominalCapacity": 1200, + "reservoirCapacity": 1200, + "initialLevelOptim": True, + }, + }, + "it": { + "storage3": { + "name": "storage3", + "group": "psp_open", + "injectionNominalCapacity": 1234, + "withdrawalNominalCapacity": 1020, + "reservoirCapacity": 1357, + "initialLevel": 1, + "initialLevelOptim": False, + }, + "storage4": { + "name": "storage4", + "group": "psp_open", + "injectionNominalCapacity": 567, + "withdrawalNominalCapacity": 456, + "reservoirCapacity": 500, + "initialLevelOptim": True, + }, + }, + } + for area_id, storages in storage_by_country.items(): + for storage_id, storage in storages.items(): + res = client.post( + f"/v1/studies/{study_id}/areas/{area_id}/storages", + headers=user_headers, + json=storage, + ) + res.raise_for_status() + + # Update some generators using the table mode + _fr_siemes_values = {"injectionNominalCapacity": 1550, "withdrawalNominalCapacity": 1550} + _fr_tesla_values = {"efficiency": 0.75, "initialLevel": 0.89, "initialLevelOptim": False} + _it_storage3_values = {"group": "Pondage"} + if study_version >= 880: + _it_storage3_values["enabled"] = False + + res = client.put( + f"/v1/studies/{study_id}/table-mode/st-storages", + headers=user_headers, + json={ + "fr / siemens": _fr_siemes_values, + "fr / tesla": _fr_tesla_values, + "it / storage3": _it_storage3_values, + }, + ) + assert res.status_code == 200, res.json() + actual = res.json() + expected = { + "fr / siemens": { + # "id": "siemens", + # "name": "Siemens", + "efficiency": 1, + "enabled": None, + "group": "Battery", + "initialLevel": 0.5, + "initialLevelOptim": False, + "injectionNominalCapacity": 1550, + "reservoirCapacity": 1500, + "withdrawalNominalCapacity": 1550, + }, + "fr / tesla": { + # "id": "tesla", + # "name": "Tesla", + "efficiency": 0.75, + "enabled": None, + "group": "Battery", + "initialLevel": 0.89, + "initialLevelOptim": False, + "injectionNominalCapacity": 1200, + "reservoirCapacity": 1200, + "withdrawalNominalCapacity": 1200, + }, + "it / storage3": { + # "id": "storage3", + # "name": "storage3", + "efficiency": 1, + "enabled": None, + "group": "Pondage", + "initialLevel": 1, + "initialLevelOptim": False, + "injectionNominalCapacity": 1234, + "reservoirCapacity": 1357, + "withdrawalNominalCapacity": 1020, + }, + "it / storage4": { + # "id": "storage4", + # "name": "storage4", + "efficiency": 1, + "enabled": None, + "group": "PSP_open", + "initialLevel": 0.5, + "initialLevelOptim": True, + "injectionNominalCapacity": 567, + "reservoirCapacity": 500, + "withdrawalNominalCapacity": 456, + }, + } + + if study_version >= 880: + for key in expected: + expected[key]["enabled"] = True + expected["it / storage3"]["enabled"] = False + + assert actual == expected + + res = client.get( + f"/v1/studies/{study_id}/table-mode/st-storages", + headers=user_headers, + params={ + "columns": ",".join( + [ + "group", + "injectionNominalCapacity", + "withdrawalNominalCapacity", + "reservoirCapacity", + "unknowColumn", # should be ignored + ] + ), + }, + ) + assert res.status_code == 200, res.json() + expected = { + "fr / siemens": { + "group": "Battery", + "injectionNominalCapacity": 1550, + "reservoirCapacity": 1500, + "withdrawalNominalCapacity": 1550, + }, + "fr / tesla": { + "group": "Battery", + "injectionNominalCapacity": 1200, + "reservoirCapacity": 1200, + "withdrawalNominalCapacity": 1200, + }, + "it / storage3": { + "group": "Pondage", + "injectionNominalCapacity": 1234, + "reservoirCapacity": 1357, + "withdrawalNominalCapacity": 1020, + }, + "it / storage4": { + "group": "PSP_open", + "injectionNominalCapacity": 567, + "reservoirCapacity": 500, + "withdrawalNominalCapacity": 456, + }, + } + actual = res.json() + assert actual == expected + + # Table Mode - Binding Constraints + # ================================ + + # Prepare data for binding constraints tests + # Create a cluster in fr + fr_id = "fr" + res = client.post( + f"/v1/studies/{study_id}/areas/{fr_id}/clusters/thermal", + headers=user_headers, + json={ + "name": "Cluster 1", + "group": "Nuclear", + }, + ) + assert res.status_code == 200, res.json() + cluster_id = res.json()["id"] + assert cluster_id == "Cluster 1" + + # Create Binding Constraints + res = client.post( + f"/v1/studies/{study_id}/bindingconstraints", + json={ + "name": "Binding Constraint 1", + "enabled": True, + "time_step": "hourly", + "operator": "less", + }, + headers=user_headers, + ) + assert res.status_code == 200, res.json() + + res = client.post( + f"/v1/studies/{study_id}/bindingconstraints", + json={ + "name": "Binding Constraint 2", + "enabled": False, + "time_step": "daily", + "operator": "greater", + "comments": "This is a binding constraint", + "filter_synthesis": "hourly, daily, weekly", + }, + headers=user_headers, + ) + assert res.status_code == 200, res.json() + + # Get the schema of the binding constraints table + res = client.get( + "/v1/table-schema/binding-constraints", + headers=user_headers, + ) + assert res.status_code == 200, res.json() + actual = res.json() + assert set(actual["properties"]) == { + # read-only fields + "id", + "name", + # Binding Constraints fields + "group", # since v8.7 + "enabled", + "timeStep", + "operator", + "comments", + "filterSynthesis", + "filterYearByYear", + # Binding Constraints - Terms + "terms", + } + + # Update some binding constraints using the table mode + _bc1_values = {"comments": "Hello World!", "enabled": True} + _bc2_values = {"filterSynthesis": "hourly", "filterYearByYear": "hourly", "operator": "both"} + if study_version >= 870: + _bc2_values["group"] = "My BC Group" + + res = client.put( + f"/v1/studies/{study_id}/table-mode/binding-constraints", + headers=user_headers, + json={ + "binding constraint 1": _bc1_values, + "binding constraint 2": _bc2_values, + }, + ) + assert res.status_code == 200, res.json() + actual = res.json() + expected_binding = { + "binding constraint 1": { + "comments": "Hello World!", + "enabled": True, + "operator": "less", + "timeStep": "hourly", + }, + "binding constraint 2": { + "comments": "This is a binding constraint", + "enabled": False, + "operator": "both", + "timeStep": "daily", + }, + } + if study_version >= 830: + expected_binding["binding constraint 1"]["filterSynthesis"] = "" + expected_binding["binding constraint 1"]["filterYearByYear"] = "" + expected_binding["binding constraint 2"]["filterSynthesis"] = "hourly" + expected_binding["binding constraint 2"]["filterYearByYear"] = "hourly" + + if study_version >= 870: + expected_binding["binding constraint 1"]["group"] = "default" + expected_binding["binding constraint 2"]["group"] = "My BC Group" + + assert actual == expected_binding + + res = client.get( + f"/v1/studies/{study_id}/table-mode/binding-constraints", + headers=user_headers, + params={"columns": ""}, + ) + assert res.status_code == 200, res.json() + expected = expected_binding + actual = res.json() + assert actual == expected + + +def test_table_type_aliases(client: TestClient, user_access_token: str) -> None: + """ + Ensure that we can use the old table type aliases to get the schema of the tables. + """ + user_headers = {"Authorization": f"Bearer {user_access_token}"} + # do not use `pytest.mark.parametrize`, because it is too slow + for table_type in ["area", "link", "cluster", "renewable", "binding constraint"]: + res = client.get(f"/v1/table-schema/{table_type}", headers=user_headers) + assert res.status_code == 200, f"Failed to get schema for {table_type}: {res.json()}" diff --git a/tests/integration/study_data_blueprint/test_thermal.py b/tests/integration/study_data_blueprint/test_thermal.py index 3297a1fba8..e3f62eca1e 100644 --- a/tests/integration/study_data_blueprint/test_thermal.py +++ b/tests/integration/study_data_blueprint/test_thermal.py @@ -27,12 +27,13 @@ * delete a cluster (or several clusters) * validate the consistency of the matrices (and properties) """ - +import io import json import re import typing as t import numpy as np +import pandas as pd import pytest from starlette.testclient import TestClient @@ -265,6 +266,21 @@ ] +def _upload_matrix( + client: TestClient, user_access_token: str, study_id: str, matrix_path: str, df: pd.DataFrame +) -> None: + tsv = io.BytesIO() + df.to_csv(tsv, sep="\t", index=False, header=False) + tsv.seek(0) + res = client.put( + f"/v1/studies/{study_id}/raw", + params={"path": matrix_path}, + headers={"Authorization": f"Bearer {user_access_token}"}, + files={"file": tsv}, + ) + res.raise_for_status() + + @pytest.mark.unit_test class TestThermal: @pytest.mark.parametrize( @@ -527,6 +543,75 @@ def test_lifecycle( assert res.status_code == 200 assert res.json()["data"] == matrix + # ============================= + # THERMAL CLUSTER VALIDATION + # ============================= + + # Everything is fine at the beginning + res = client.get( + f"/v1/studies/{study_id}/areas/{area_id}/clusters/thermal/{fr_gas_conventional_id}/validate", + headers={"Authorization": f"Bearer {user_access_token}"}, + ) + assert res.status_code == 200 + assert res.json() is True + + # Modifies series matrix with wrong length (!= 8760) + _upload_matrix( + client, + user_access_token, + study_id, + f"input/thermal/series/{area_id}/{fr_gas_conventional_id.lower()}/series", + pd.DataFrame(np.random.randint(0, 10, size=(4, 1))), + ) + + # Validation should fail + res = client.get( + f"/v1/studies/{study_id}/areas/{area_id}/clusters/thermal/{fr_gas_conventional_id}/validate", + headers={"Authorization": f"Bearer {user_access_token}"}, + ) + assert res.status_code == 422 + obj = res.json() + assert obj["exception"] == "WrongMatrixHeightError" + assert obj["description"] == "The matrix series should have 8760 rows, currently: 4" + + # Update with the right length + _upload_matrix( + client, + user_access_token, + study_id, + f"input/thermal/series/{area_id}/{fr_gas_conventional_id.lower()}/series", + pd.DataFrame(np.random.randint(0, 10, size=(8760, 4))), + ) + + # Validation should succeed again + res = client.get( + f"/v1/studies/{study_id}/areas/{area_id}/clusters/thermal/{fr_gas_conventional_id}/validate", + headers={"Authorization": f"Bearer {user_access_token}"}, + ) + assert res.status_code == 200 + assert res.json() is True + + if version >= 870: + # Adds a CO2Cost matrix with different columns size + _upload_matrix( + client, + user_access_token, + study_id, + f"input/thermal/series/{area_id}/{fr_gas_conventional_id.lower()}/CO2Cost", + pd.DataFrame(np.random.randint(0, 10, size=(8760, 3))), + ) + + # Validation should fail + res = client.get( + f"/v1/studies/{study_id}/areas/{area_id}/clusters/thermal/{fr_gas_conventional_id}/validate", + headers={"Authorization": f"Bearer {user_access_token}"}, + ) + assert res.status_code == 422 + obj = res.json() + assert obj["exception"] == "MatrixWidthMismatchError" + pattern = r".*'series'.*4.*'CO2Cost'.*3" + assert re.match(pattern, obj["description"]) + # ============================= # THERMAL CLUSTER DELETION # ============================= diff --git a/tests/integration/test_integration.py b/tests/integration/test_integration.py index 619c0de92b..a5f889afe6 100644 --- a/tests/integration/test_integration.py +++ b/tests/integration/test_integration.py @@ -6,60 +6,42 @@ from starlette.testclient import TestClient -from antarest.core.model import PublicMode from antarest.launcher.model import LauncherLoadDTO -from antarest.study.business.adequacy_patch_management import PriceTakingOrder from antarest.study.business.area_management import LayerInfoDTO -from antarest.study.business.areas.properties_management import AdequacyPatchMode -from antarest.study.business.areas.renewable_management import TimeSeriesInterpretation from antarest.study.business.general_management import Mode from antarest.study.business.optimization_management import ( SimplexOptimizationRange, TransmissionCapacities, UnfeasibleProblemBehavior, ) -from antarest.study.business.table_mode_management import ( - FIELDS_INFO_BY_TYPE, - AssetType, - BindingConstraintOperator, - TableTemplateType, - TransmissionCapacity, -) -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency -from antarest.study.storage.rawstudy.model.filesystem.config.renewable import RenewableClusterGroup -from antarest.study.storage.rawstudy.model.filesystem.config.thermal import LawOption, LocalTSGenerationBehavior from antarest.study.storage.variantstudy.model.command.common import CommandName from tests.integration.assets import ASSETS_DIR from tests.integration.utils import wait_for -def test_main(client: TestClient, admin_access_token: str, study_id: str) -> None: - admin_headers = {"Authorization": f"Bearer {admin_access_token}"} +def test_main(client: TestClient, admin_access_token: str) -> None: + client.headers = {"Authorization": f"Bearer {admin_access_token}"} # create some new users # TODO check for bad username or empty password client.post( "/v1/users", - headers=admin_headers, json={"name": "George", "password": "mypass"}, ) client.post( "/v1/users", - headers=admin_headers, json={"name": "Fred", "password": "mypass"}, ) client.post( "/v1/users", - headers=admin_headers, json={"name": "Harry", "password": "mypass"}, ) - res = client.get("/v1/users", headers=admin_headers) + res = client.get("/v1/users") assert len(res.json()) == 4 # reject user with existing name creation res = client.post( "/v1/users", - headers=admin_headers, json={"name": "George", "password": "mypass"}, ) assert res.status_code == 400 @@ -245,19 +227,16 @@ def test_main(client: TestClient, admin_access_token: str, study_id: str) -> Non # play with groups client.post( "/v1/groups", - headers=admin_headers, json={"name": "Weasley"}, ) - res = client.get("/v1/groups", headers=admin_headers) + res = client.get("/v1/groups") group_id = res.json()[1]["id"] client.post( "/v1/roles", - headers=admin_headers, json={"type": 40, "group_id": group_id, "identity_id": 3}, ) client.post( "/v1/roles", - headers=admin_headers, json={"type": 30, "group_id": group_id, "identity_id": 2}, ) # reset login to update credentials @@ -296,9 +275,9 @@ def test_main(client: TestClient, admin_access_token: str, study_id: str) -> Non ) job_id = res.json()["job_id"] - res = client.get("/v1/launcher/load", headers=admin_headers) + res = client.get("/v1/launcher/load") assert res.status_code == 200, res.json() - launcher_load = LauncherLoadDTO.parse_obj(res.json()) + launcher_load = LauncherLoadDTO(**res.json()) assert launcher_load.allocated_cpu_rate == 100 / (os.cpu_count() or 1) assert launcher_load.cluster_load_rate == 100 / (os.cpu_count() or 1) assert launcher_load.nb_queued_jobs == 0 @@ -345,20 +324,19 @@ def test_main(client: TestClient, admin_access_token: str, study_id: str) -> Non assert new_meta.json()["horizon"] == "2035" -def test_matrix(client: TestClient, admin_access_token: str, study_id: str) -> None: - admin_headers = {"Authorization": f"Bearer {admin_access_token}"} +def test_matrix(client: TestClient, admin_access_token: str) -> None: + client.headers = {"Authorization": f"Bearer {admin_access_token}"} matrix = [[1, 2], [3, 4]] res = client.post( "/v1/matrix", - headers=admin_headers, json=matrix, ) assert res.status_code == 200 - res = client.get(f"/v1/matrix/{res.json()}", headers=admin_headers) + res = client.get(f"/v1/matrix/{res.json()}") assert res.status_code == 200 stored = res.json() @@ -367,7 +345,7 @@ def test_matrix(client: TestClient, admin_access_token: str, study_id: str) -> N matrix_id = stored["id"] - res = client.get(f"/v1/matrix/{matrix_id}/download", headers=admin_headers) + res = client.get(f"/v1/matrix/{matrix_id}/download") assert res.status_code == 200 res = client.post( @@ -380,30 +358,29 @@ def test_matrix(client: TestClient, admin_access_token: str, study_id: str) -> N }, "matrices": [{"id": matrix_id, "name": "mymatrix"}], }, - headers=admin_headers, ) assert res.status_code == 200 - res = client.get("/v1/matrixdataset/_search?name=myda", headers=admin_headers) + res = client.get("/v1/matrixdataset/_search?name=myda") results = res.json() assert len(results) == 1 assert len(results[0]["matrices"]) == 1 assert results[0]["matrices"][0]["id"] == matrix_id dataset_id = results[0]["id"] - res = client.get(f"/v1/matrixdataset/{dataset_id}/download", headers=admin_headers) + res = client.get(f"/v1/matrixdataset/{dataset_id}/download") assert res.status_code == 200 - res = client.delete(f"/v1/matrixdataset/{dataset_id}", headers=admin_headers) + res = client.delete(f"/v1/matrixdataset/{dataset_id}") assert res.status_code == 200 -def test_area_management(client: TestClient, admin_access_token: str, study_id: str) -> None: - admin_headers = {"Authorization": f"Bearer {admin_access_token}"} +def test_area_management(client: TestClient, admin_access_token: str) -> None: + client.headers = {"Authorization": f"Bearer {admin_access_token}"} - created = client.post("/v1/studies?name=foo", headers=admin_headers) + created = client.post("/v1/studies", params={"name": "foo", "version": 870}) study_id = created.json() - res_areas = client.get(f"/v1/studies/{study_id}/areas", headers=admin_headers) + res_areas = client.get(f"/v1/studies/{study_id}/areas") assert res_areas.json() == [ { "id": "all areas", @@ -417,7 +394,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: res = client.post( f"/v1/studies/{study_id}/areas", - headers=admin_headers, json={ "name": "area 1", "type": "AREA", @@ -429,7 +405,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: # Test area creation with duplicate name res = client.post( f"/v1/studies/{study_id}/areas", - headers=admin_headers, json={ "name": "Area 1", # Same name but with different case "type": "AREA", @@ -444,7 +419,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.post( f"/v1/studies/{study_id}/areas", - headers=admin_headers, json={ "name": "area 2", "type": "AREA", @@ -454,7 +428,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.post( f"/v1/studies/{study_id}/commands", - headers=admin_headers, json=[ { "action": CommandName.CREATE_THERMAL_CLUSTER.value, @@ -469,7 +442,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.post( f"/v1/studies/{study_id}/commands", - headers=admin_headers, json=[ { "action": CommandName.CREATE_THERMAL_CLUSTER.value, @@ -484,7 +456,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.post( f"/v1/studies/{study_id}/commands", - headers=admin_headers, json=[ { "action": CommandName.CREATE_RENEWABLES_CLUSTER.value, @@ -499,7 +470,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.post( f"/v1/studies/{study_id}/commands", - headers=admin_headers, json=[ { "action": CommandName.CREATE_RENEWABLES_CLUSTER.value, @@ -514,15 +484,14 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: res = client.post( f"/v1/studies/{study_id}/commands", - headers=admin_headers, json=[ { "action": CommandName.CREATE_BINDING_CONSTRAINT.value, "args": { "name": "binding constraint 1", "enabled": True, - "time_step": BindingConstraintFrequency.HOURLY.value, - "operator": BindingConstraintOperator.LESS.value, + "time_step": "hourly", + "operator": "less", "coeffs": {"area 1.cluster 1": [2.0, 4]}, }, } @@ -532,15 +501,14 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: res = client.post( f"/v1/studies/{study_id}/commands", - headers=admin_headers, json=[ { "action": CommandName.CREATE_BINDING_CONSTRAINT.value, "args": { "name": "binding constraint 2", "enabled": True, - "time_step": BindingConstraintFrequency.HOURLY.value, - "operator": BindingConstraintOperator.LESS.value, + "time_step": "hourly", + "operator": "less", "coeffs": {}, }, } @@ -548,7 +516,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: ) res.raise_for_status() - res_areas = client.get(f"/v1/studies/{study_id}/areas", headers=admin_headers) + res_areas = client.get(f"/v1/studies/{study_id}/areas") assert res_areas.json() == [ { "id": "area 1", @@ -614,13 +582,12 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.post( f"/v1/studies/{study_id}/links", - headers=admin_headers, json={ "area1": "area 1", "area2": "area 2", }, ) - res_links = client.get(f"/v1/studies/{study_id}/links?with_ui=true", headers=admin_headers) + res_links = client.get(f"/v1/studies/{study_id}/links?with_ui=true") assert res_links.json() == [ { "area1": "area 1", @@ -631,64 +598,63 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: # -- `layers` integration tests - res = client.get(f"/v1/studies/{study_id}/layers", headers=admin_headers) + res = client.get(f"/v1/studies/{study_id}/layers") assert res.json() == [LayerInfoDTO(id="0", name="All", areas=["area 1", "area 2"]).dict()] - res = client.post(f"/v1/studies/{study_id}/layers?name=test", headers=admin_headers) + res = client.post(f"/v1/studies/{study_id}/layers?name=test") assert res.json() == "1" - res = client.get(f"/v1/studies/{study_id}/layers", headers=admin_headers) + res = client.get(f"/v1/studies/{study_id}/layers") assert res.json() == [ LayerInfoDTO(id="0", name="All", areas=["area 1", "area 2"]).dict(), LayerInfoDTO(id="1", name="test", areas=[]).dict(), ] - res = client.put(f"/v1/studies/{study_id}/layers/1?name=test2", headers=admin_headers) - res = client.put(f"/v1/studies/{study_id}/layers/1", json=["area 1"], headers=admin_headers) - res = client.put(f"/v1/studies/{study_id}/layers/1", json=["area 2"], headers=admin_headers) - res = client.get(f"/v1/studies/{study_id}/layers", headers=admin_headers) + res = client.put(f"/v1/studies/{study_id}/layers/1?name=test2") + res = client.put(f"/v1/studies/{study_id}/layers/1", json=["area 1"]) + res = client.put(f"/v1/studies/{study_id}/layers/1", json=["area 2"]) + res = client.get(f"/v1/studies/{study_id}/layers") assert res.json() == [ LayerInfoDTO(id="0", name="All", areas=["area 1", "area 2"]).dict(), LayerInfoDTO(id="1", name="test2", areas=["area 2"]).dict(), ] # Delete the layer '1' that has 1 area - res = client.delete(f"/v1/studies/{study_id}/layers/1", headers=admin_headers) + res = client.delete(f"/v1/studies/{study_id}/layers/1") assert res.status_code == HTTPStatus.NO_CONTENT # Ensure the layer is deleted - res = client.get(f"/v1/studies/{study_id}/layers", headers=admin_headers) + res = client.get(f"/v1/studies/{study_id}/layers") assert res.json() == [ LayerInfoDTO(id="0", name="All", areas=["area 1", "area 2"]).dict(), ] # Create the layer again without areas - res = client.post(f"/v1/studies/{study_id}/layers?name=test2", headers=admin_headers) + res = client.post(f"/v1/studies/{study_id}/layers?name=test2") assert res.json() == "1" # Delete the layer with no areas - res = client.delete(f"/v1/studies/{study_id}/layers/1", headers=admin_headers) + res = client.delete(f"/v1/studies/{study_id}/layers/1") assert res.status_code == HTTPStatus.NO_CONTENT # Ensure the layer is deleted - res = client.get(f"/v1/studies/{study_id}/layers", headers=admin_headers) + res = client.get(f"/v1/studies/{study_id}/layers") assert res.json() == [ LayerInfoDTO(id="0", name="All", areas=["area 1", "area 2"]).dict(), ] # Try to delete a non-existing layer - res = client.delete(f"/v1/studies/{study_id}/layers/1", headers=admin_headers) + res = client.delete(f"/v1/studies/{study_id}/layers/1") assert res.status_code == HTTPStatus.NOT_FOUND # Try to delete the layer 'All' - res = client.delete(f"/v1/studies/{study_id}/layers/0", headers=admin_headers) + res = client.delete(f"/v1/studies/{study_id}/layers/0") assert res.status_code == HTTPStatus.BAD_REQUEST # -- `district` integration tests res = client.post( f"/v1/studies/{study_id}/districts", - headers=admin_headers, json={ "name": "District 1", "output": True, @@ -707,7 +673,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: res = client.put( f"/v1/studies/{study_id}/districts/district%201", - headers=admin_headers, json={ "name": "District 1", "output": True, @@ -717,7 +682,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: ) assert res.status_code == 200 - res = client.get(f"/v1/studies/{study_id}/districts", headers=admin_headers) + res = client.get(f"/v1/studies/{study_id}/districts") assert res.status_code == 200 actual = res.json() actual[0]["areas"].sort() @@ -739,12 +704,12 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: }, ] - res = client.delete(f"/v1/studies/{study_id}/districts/district%201", headers=admin_headers) + res = client.delete(f"/v1/studies/{study_id}/districts/district%201") assert res.status_code == 200 # Optimization form - res_optimization_config = client.get(f"/v1/studies/{study_id}/config/optimization/form", headers=admin_headers) + res_optimization_config = client.get(f"/v1/studies/{study_id}/config/optimization/form") res_optimization_config_json = res_optimization_config.json() assert res_optimization_config_json == { "bindingConstraints": True, @@ -763,14 +728,13 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.put( f"/v1/studies/{study_id}/config/optimization/form", - headers=admin_headers, json={ "strategicReserve": False, "unfeasibleProblemBehavior": UnfeasibleProblemBehavior.WARNING_VERBOSE.value, "simplexOptimizationRange": SimplexOptimizationRange.DAY.value, }, ) - res_optimization_config = client.get(f"/v1/studies/{study_id}/config/optimization/form", headers=admin_headers) + res_optimization_config = client.get(f"/v1/studies/{study_id}/config/optimization/form") res_optimization_config_json = res_optimization_config.json() assert res_optimization_config_json == { "bindingConstraints": True, @@ -789,7 +753,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: # Adequacy patch form - res_adequacy_patch_config = client.get(f"/v1/studies/{study_id}/config/adequacypatch/form", headers=admin_headers) + res_adequacy_patch_config = client.get(f"/v1/studies/{study_id}/config/adequacypatch/form") res_adequacy_patch_config_json = res_adequacy_patch_config.json() assert res_adequacy_patch_config_json == { "enableAdequacyPatch": False, @@ -797,7 +761,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "ntcBetweenPhysicalAreasOutAdequacyPatch": True, "checkCsrCostFunction": False, "includeHurdleCostCsr": False, - "priceTakingOrder": PriceTakingOrder.DENS.value, + "priceTakingOrder": "DENS", "thresholdInitiateCurtailmentSharingRule": 0.0, "thresholdDisplayLocalMatchingRuleViolations": 0.0, "thresholdCsrVariableBoundsRelaxation": 3, @@ -805,14 +769,13 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.put( f"/v1/studies/{study_id}/config/adequacypatch/form", - headers=admin_headers, json={ "ntcBetweenPhysicalAreasOutAdequacyPatch": False, - "priceTakingOrder": PriceTakingOrder.LOAD.value, + "priceTakingOrder": "Load", "thresholdDisplayLocalMatchingRuleViolations": 1.1, }, ) - res_adequacy_patch_config = client.get(f"/v1/studies/{study_id}/config/adequacypatch/form", headers=admin_headers) + res_adequacy_patch_config = client.get(f"/v1/studies/{study_id}/config/adequacypatch/form") res_adequacy_patch_config_json = res_adequacy_patch_config.json() assert res_adequacy_patch_config_json == { "enableAdequacyPatch": False, @@ -820,7 +783,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "ntcBetweenPhysicalAreasOutAdequacyPatch": False, "checkCsrCostFunction": False, "includeHurdleCostCsr": False, - "priceTakingOrder": PriceTakingOrder.LOAD.value, + "priceTakingOrder": "Load", "thresholdInitiateCurtailmentSharingRule": 0.0, "thresholdDisplayLocalMatchingRuleViolations": 1.1, "thresholdCsrVariableBoundsRelaxation": 3, @@ -828,7 +791,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: # General form - res_general_config = client.get(f"/v1/studies/{study_id}/config/general/form", headers=admin_headers) + res_general_config = client.get(f"/v1/studies/{study_id}/config/general/form") res_general_config_json = res_general_config.json() assert res_general_config_json == { "mode": "Economy", @@ -851,7 +814,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.put( f"/v1/studies/{study_id}/config/general/form", - headers=admin_headers, json={ "mode": Mode.ADEQUACY.value, "firstDay": 2, @@ -859,7 +821,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "leapYear": True, }, ) - res_general_config = client.get(f"/v1/studies/{study_id}/config/general/form", headers=admin_headers) + res_general_config = client.get(f"/v1/studies/{study_id}/config/general/form") res_general_config_json = res_general_config.json() assert res_general_config_json == { "mode": Mode.ADEQUACY.value, @@ -882,7 +844,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: # Thematic trimming form - res = client.get(f"/v1/studies/{study_id}/config/thematictrimming/form", headers=admin_headers) + res = client.get(f"/v1/studies/{study_id}/config/thematictrimming/form") obj = res.json() assert obj == { "avlDtg": True, @@ -970,7 +932,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "solarPv": True, "solarRooft": True, "spilEnrg": True, - "stsCashflowByCluster": True, "stsInjByPlant": True, "stsLvlByPlant": True, "stsWithdrawalByPlant": True, @@ -983,7 +944,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: client.put( f"/v1/studies/{study_id}/config/thematictrimming/form", - headers=admin_headers, json={ "ovCost": False, "opCost": True, @@ -1050,7 +1010,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "profitByPlant": True, }, ) - res = client.get(f"/v1/studies/{study_id}/config/thematictrimming/form", headers=admin_headers) + res = client.get(f"/v1/studies/{study_id}/config/thematictrimming/form") obj = res.json() assert obj == { "avlDtg": True, @@ -1138,7 +1098,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "solarPv": True, "solarRooft": True, "spilEnrg": True, - "stsCashflowByCluster": True, "stsInjByPlant": True, "stsLvlByPlant": True, "stsWithdrawalByPlant": True, @@ -1151,7 +1110,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: # Properties form - res_properties_config = client.get(f"/v1/studies/{study_id}/areas/area 1/properties/form", headers=admin_headers) + res_properties_config = client.get(f"/v1/studies/{study_id}/areas/area 1/properties/form") res_properties_config_json = res_properties_config.json() res_properties_config_json["filterSynthesis"] = set(res_properties_config_json["filterSynthesis"]) res_properties_config_json["filterByYear"] = set(res_properties_config_json["filterByYear"]) @@ -1163,12 +1122,11 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "otherDispatchPower": True, "filterSynthesis": {"hourly", "daily", "weekly", "monthly", "annual"}, "filterByYear": {"hourly", "daily", "weekly", "monthly", "annual"}, - "adequacyPatchMode": AdequacyPatchMode.OUTSIDE.value, + "adequacyPatchMode": "outside", } client.put( f"/v1/studies/{study_id}/areas/area 1/properties/form", - headers=admin_headers, json={ "energyCostUnsupplied": 2.0, "energyCostSpilled": 4.0, @@ -1177,10 +1135,10 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "otherDispatchPower": False, "filterSynthesis": ["monthly", "annual"], "filterByYear": ["hourly", "daily", "annual"], - "adequacyPatchMode": AdequacyPatchMode.INSIDE.value, + "adequacyPatchMode": "inside", }, ) - res_properties_config = client.get(f"/v1/studies/{study_id}/areas/area 1/properties/form", headers=admin_headers) + res_properties_config = client.get(f"/v1/studies/{study_id}/areas/area 1/properties/form") res_properties_config_json = res_properties_config.json() res_properties_config_json["filterSynthesis"] = set(res_properties_config_json["filterSynthesis"]) res_properties_config_json["filterByYear"] = set(res_properties_config_json["filterByYear"]) @@ -1192,14 +1150,13 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "otherDispatchPower": False, "filterSynthesis": {"monthly", "annual"}, "filterByYear": {"hourly", "daily", "annual"}, - "adequacyPatchMode": AdequacyPatchMode.INSIDE.value, + "adequacyPatchMode": "inside", } # Hydro form res_hydro_config = client.put( f"/v1/studies/{study_id}/areas/area 1/hydro/form", - headers=admin_headers, json={ "interDailyBreakdown": 8, "intraDailyModulation": 7, @@ -1209,7 +1166,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: ) assert res_hydro_config.status_code == 200 - res_hydro_config = client.get(f"/v1/studies/{study_id}/areas/area 1/hydro/form", headers=admin_headers) + res_hydro_config = client.get(f"/v1/studies/{study_id}/areas/area 1/hydro/form") res_hydro_config_json = res_hydro_config.json() assert res_hydro_config_json == { @@ -1232,7 +1189,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: # Time-series form - res_ts_config = client.get(f"/v1/studies/{study_id}/config/timeseries/form", headers=admin_headers) + res_ts_config = client.get(f"/v1/studies/{study_id}/config/timeseries/form") res_ts_config_json = res_ts_config.json() assert res_ts_config_json == { "load": { @@ -1276,7 +1233,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: } res_ts_config = client.put( f"/v1/studies/{study_id}/config/timeseries/form", - headers=admin_headers, json={ "thermal": {"stochasticTsStatus": True}, "load": { @@ -1286,7 +1242,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: }, }, ) - res_ts_config = client.get(f"/v1/studies/{study_id}/config/timeseries/form", headers=admin_headers) + res_ts_config = client.get(f"/v1/studies/{study_id}/config/timeseries/form") res_ts_config_json = res_ts_config.json() assert res_ts_config_json == { "load": { @@ -1329,456 +1285,13 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "ntc": {"stochasticTsStatus": False, "intraModal": False}, } - # --- TableMode START --- - - table_mode_url = f"/v1/studies/{study_id}/tablemode" - - # Table Mode - Area - - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.AREA.value, - "columns": ",".join(FIELDS_INFO_BY_TYPE[TableTemplateType.AREA]), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "area 1": { - "nonDispatchablePower": False, - "dispatchableHydroPower": False, - "otherDispatchablePower": False, - "averageUnsuppliedEnergyCost": 2.0, - "spreadUnsuppliedEnergyCost": 0.0, - "averageSpilledEnergyCost": 4.0, - "spreadSpilledEnergyCost": 0.0, - "filterSynthesis": "monthly, annual", - "filterYearByYear": "hourly, daily, annual", - "adequacyPatchMode": AdequacyPatchMode.INSIDE.value, - }, - "area 2": { - "nonDispatchablePower": True, - "dispatchableHydroPower": True, - "otherDispatchablePower": True, - "averageUnsuppliedEnergyCost": 0.0, - "spreadUnsuppliedEnergyCost": 0.0, - "averageSpilledEnergyCost": 0.0, - "spreadSpilledEnergyCost": 0.0, - "filterSynthesis": "hourly, daily, weekly, monthly, annual", - "filterYearByYear": "hourly, daily, weekly, monthly, annual", - "adequacyPatchMode": AdequacyPatchMode.OUTSIDE.value, - }, - } - - client.put( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.AREA.value, - }, - json={ - "area 1": { - "nonDispatchablePower": True, - "spreadSpilledEnergyCost": 1.1, - "filterYearByYear": "monthly, annual", - "adequacyPatchMode": AdequacyPatchMode.OUTSIDE.value, - }, - "area 2": { - "nonDispatchablePower": False, - "spreadSpilledEnergyCost": 3.0, - "filterSynthesis": "hourly", - "adequacyPatchMode": AdequacyPatchMode.INSIDE.value, - }, - }, - ) - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.AREA.value, - "columns": ",".join(list(FIELDS_INFO_BY_TYPE[TableTemplateType.AREA])), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "area 1": { - "nonDispatchablePower": True, - "dispatchableHydroPower": False, - "otherDispatchablePower": False, - "averageUnsuppliedEnergyCost": 2.0, - "spreadUnsuppliedEnergyCost": 0.0, - "averageSpilledEnergyCost": 4.0, - "spreadSpilledEnergyCost": 1.1, - "filterSynthesis": "monthly, annual", - "filterYearByYear": "monthly, annual", - "adequacyPatchMode": AdequacyPatchMode.OUTSIDE.value, - }, - "area 2": { - "nonDispatchablePower": False, - "dispatchableHydroPower": True, - "otherDispatchablePower": True, - "averageUnsuppliedEnergyCost": 0.0, - "spreadUnsuppliedEnergyCost": 0.0, - "averageSpilledEnergyCost": 0.0, - "spreadSpilledEnergyCost": 3.0, - "filterSynthesis": "hourly", - "filterYearByYear": "hourly, daily, weekly, monthly, annual", - "adequacyPatchMode": AdequacyPatchMode.INSIDE.value, - }, - } - - # Table Mode - Link - - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.LINK.value, - "columns": ",".join(FIELDS_INFO_BY_TYPE[TableTemplateType.LINK]), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "area 1 / area 2": { - "hurdlesCost": False, - "loopFlow": False, - "usePhaseShifter": False, - "transmissionCapacities": "enabled", - "assetType": "ac", - "linkStyle": "plain", - "linkWidth": True, - "displayComments": True, - "filterSynthesis": "hourly, daily, weekly, monthly, annual", - "filterYearByYear": "hourly, daily, weekly, monthly, annual", - } - } - - client.put( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.LINK.value, - }, - json={ - "area 1 / area 2": { - "hurdlesCost": True, - "transmissionCapacities": TransmissionCapacity.IGNORE.value, - "assetType": AssetType.GAZ.value, - "filterSynthesis": "daily,annual", - } - }, - ) - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.LINK.value, - "columns": ",".join(FIELDS_INFO_BY_TYPE[TableTemplateType.LINK]), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "area 1 / area 2": { - "hurdlesCost": True, - "loopFlow": False, - "usePhaseShifter": False, - "transmissionCapacities": "ignore", - "assetType": "gaz", - "linkStyle": "plain", - "linkWidth": True, - "displayComments": True, - "filterSynthesis": "daily,annual", - "filterYearByYear": "hourly, daily, weekly, monthly, annual", - } - } - - # Table Mode - Cluster - - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.CLUSTER.value, - "columns": ",".join(FIELDS_INFO_BY_TYPE[TableTemplateType.CLUSTER]), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "area 1 / cluster 1": { - "group": "", - "enabled": True, - "mustRun": False, - "unitCount": 0, - "nominalCapacity": 0, - "minStablePower": 0, - "spinning": 0, - "minUpTime": 1, - "minDownTime": 1, - "co2": 0, - "marginalCost": 0, - "fixedCost": 0, - "startupCost": 0, - "marketBidCost": 0, - "spreadCost": 0, - "tsGen": "use global", - "volatilityForced": 0, - "volatilityPlanned": 0, - "lawForced": "uniform", - "lawPlanned": "uniform", - }, - "area 2 / cluster 2": { - "group": "", - "enabled": True, - "mustRun": False, - "unitCount": 0, - "nominalCapacity": 0, - "minStablePower": 0, - "spinning": 0, - "minUpTime": 1, - "minDownTime": 1, - "co2": 0, - "marginalCost": 0, - "fixedCost": 0, - "startupCost": 0, - "marketBidCost": 0, - "spreadCost": 0, - "tsGen": "use global", - "volatilityForced": 0, - "volatilityPlanned": 0, - "lawForced": "uniform", - "lawPlanned": "uniform", - }, - } - - client.put( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.CLUSTER.value, - }, - json={ - "area 1 / cluster 1": { - "enabled": False, - "unitCount": 3, - "spinning": 8, - "tsGen": LocalTSGenerationBehavior.FORCE_GENERATION.value, - "lawPlanned": LawOption.GEOMETRIC.value, - }, - "area 2 / cluster 2": { - "nominalCapacity": 2, - }, - }, - ) - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.CLUSTER.value, - "columns": ",".join(FIELDS_INFO_BY_TYPE[TableTemplateType.CLUSTER]), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "area 1 / cluster 1": { - "group": "", - "enabled": False, - "mustRun": False, - "unitCount": 3, - "nominalCapacity": 0, - "minStablePower": 0, - "spinning": 8, - "minUpTime": 1, - "minDownTime": 1, - "co2": 0, - "marginalCost": 0, - "fixedCost": 0, - "startupCost": 0, - "marketBidCost": 0, - "spreadCost": 0, - "tsGen": "force generation", - "volatilityForced": 0, - "volatilityPlanned": 0, - "lawForced": "uniform", - "lawPlanned": "geometric", - }, - "area 2 / cluster 2": { - "group": "", - "enabled": True, - "mustRun": False, - "unitCount": 0, - "nominalCapacity": 2, - "minStablePower": 0, - "spinning": 0, - "minUpTime": 1, - "minDownTime": 1, - "co2": 0, - "marginalCost": 0, - "fixedCost": 0, - "startupCost": 0, - "marketBidCost": 0, - "spreadCost": 0, - "tsGen": "use global", - "volatilityForced": 0, - "volatilityPlanned": 0, - "lawForced": "uniform", - "lawPlanned": "uniform", - }, - } - - # Table Mode - Renewable - - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.RENEWABLE.value, - "columns": ",".join(FIELDS_INFO_BY_TYPE[TableTemplateType.RENEWABLE]), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "area 1 / cluster renewable 1": { - "group": "", - "tsInterpretation": TimeSeriesInterpretation.POWER_GENERATION.value, - "enabled": True, - "unitCount": 0, - "nominalCapacity": 0, - }, - "area 2 / cluster renewable 2": { - "group": "", - "tsInterpretation": TimeSeriesInterpretation.POWER_GENERATION.value, - "enabled": True, - "unitCount": 0, - "nominalCapacity": 0, - }, - } - - client.put( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.RENEWABLE.value, - }, - json={ - "area 1 / cluster renewable 1": { - "tsInterpretation": TimeSeriesInterpretation.PRODUCTION_FACTOR.value, - "enabled": False, - }, - "area 2 / cluster renewable 2": { - "unitCount": 2, - "nominalCapacity": 13, - }, - }, - ) - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.RENEWABLE.value, - "columns": ",".join(FIELDS_INFO_BY_TYPE[TableTemplateType.RENEWABLE]), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "area 1 / cluster renewable 1": { - "group": "", - "tsInterpretation": TimeSeriesInterpretation.PRODUCTION_FACTOR.value, - "enabled": False, - "unitCount": 0, - "nominalCapacity": 0, - }, - "area 2 / cluster renewable 2": { - "group": "", - "tsInterpretation": TimeSeriesInterpretation.POWER_GENERATION.value, - "enabled": True, - "unitCount": 2, - "nominalCapacity": 13, - }, - } - - # Table Mode - Binding Constraint - - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.BINDING_CONSTRAINT.value, - "columns": ",".join(FIELDS_INFO_BY_TYPE[TableTemplateType.BINDING_CONSTRAINT]), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "binding constraint 1": { - "enabled": True, - "type": BindingConstraintFrequency.HOURLY.value, - "operator": BindingConstraintOperator.LESS.value, - }, - "binding constraint 2": { - "enabled": True, - "type": BindingConstraintFrequency.HOURLY.value, - "operator": BindingConstraintOperator.LESS.value, - }, - } - - client.put( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.BINDING_CONSTRAINT.value, - }, - json={ - "binding constraint 1": { - "enabled": False, - "operator": BindingConstraintOperator.BOTH.value, - }, - "binding constraint 2": { - "type": BindingConstraintFrequency.WEEKLY.value, - "operator": BindingConstraintOperator.EQUAL.value, - }, - }, - ) - res_table_data = client.get( - table_mode_url, - headers=admin_headers, - params={ - "table_type": TableTemplateType.BINDING_CONSTRAINT.value, - "columns": ",".join(FIELDS_INFO_BY_TYPE[TableTemplateType.BINDING_CONSTRAINT]), - }, - ) - res_table_data_json = res_table_data.json() - assert res_table_data_json == { - "binding constraint 1": { - "enabled": False, - "type": BindingConstraintFrequency.HOURLY.value, - "operator": BindingConstraintOperator.BOTH.value, - }, - "binding constraint 2": { - "enabled": True, - "type": BindingConstraintFrequency.WEEKLY.value, - "operator": BindingConstraintOperator.EQUAL.value, - }, - } - - res = client.get(f"/v1/studies/{study_id}/bindingconstraints/binding constraint 1", headers=admin_headers) - binding_constraint_1 = res.json() - assert res.status_code == 200, res.json() - - term = binding_constraint_1["terms"][0] - assert term["id"] == "area 1.cluster 1" - assert term["weight"] == 2.0 - assert term["offset"] == 4 - - # --- TableMode END --- - # Renewable form res = client.put( f"/v1/studies/{study_id}/areas/area 1/clusters/renewable/cluster renewable 1/form", - headers=admin_headers, json={ "name": "cluster renewable 1 renamed", - "tsInterpretation": TimeSeriesInterpretation.PRODUCTION_FACTOR, + "tsInterpretation": "production-factor", "unitCount": 9, "enabled": False, "nominalCapacity": 3, @@ -1788,15 +1301,14 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: res = client.get( f"/v1/studies/{study_id}/areas/area 1/clusters/renewable/cluster renewable 1/form", - headers=admin_headers, ) expected = { "enabled": False, - "group": RenewableClusterGroup.OTHER1, # Default group used when not specified. + "group": "Other RES 1", # Default group used when not specified. "id": "cluster renewable 1", "name": "cluster renewable 1 renamed", "nominalCapacity": 3.0, - "tsInterpretation": TimeSeriesInterpretation.PRODUCTION_FACTOR, + "tsInterpretation": "production-factor", "unitCount": 9, } assert res.status_code == 200, res.json() @@ -1845,7 +1357,6 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: res = client.put( # This URL is deprecated, but we must check it for backward compatibility. f"/v1/studies/{study_id}/areas/area 1/clusters/thermal/cluster 1/form", - headers=admin_headers, json=obj, ) assert res.status_code == 200, res.json() @@ -1853,29 +1364,26 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: res = client.get( # This URL is deprecated, but we must check it for backward compatibility. f"/v1/studies/{study_id}/areas/area 1/clusters/thermal/cluster 1/form", - headers=admin_headers, ) assert res.status_code == 200, res.json() assert res.json() == {"id": "cluster 1", **obj} # Links - client.delete(f"/v1/studies/{study_id}/links/area%201/area%202", headers=admin_headers) - res_links = client.get(f"/v1/studies/{study_id}/links", headers=admin_headers) + client.delete(f"/v1/studies/{study_id}/links/area%201/area%202") + res_links = client.get(f"/v1/studies/{study_id}/links") assert res_links.json() == [] res = client.put( f"/v1/studies/{study_id}/areas/area%201/ui", - headers=admin_headers, json={"x": 100, "y": 100, "color_rgb": [255, 0, 100]}, ) res = client.put( f"/v1/studies/{study_id}/areas/area%202/ui?layer=1", - headers=admin_headers, json={"x": 105, "y": 105, "color_rgb": [255, 10, 100]}, ) assert res.status_code == 200 - res_ui = client.get(f"/v1/studies/{study_id}/areas?ui=true", headers=admin_headers) + res_ui = client.get(f"/v1/studies/{study_id}/areas?ui=true") assert res_ui.json() == { "area 1": { "ui": { @@ -1884,11 +1392,11 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "color_r": 255, "color_g": 0, "color_b": 100, - "layers": 0, + "layers": "0", }, "layerX": {"0": 100}, "layerY": {"0": 100}, - "layerColor": {"0": "255 , 0 , 100"}, + "layerColor": {"0": "255, 0, 100"}, }, "area 2": { "ui": { @@ -1901,13 +1409,13 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: }, "layerX": {"0": 0, "1": 105}, "layerY": {"0": 0, "1": 105}, - "layerColor": {"0": "230 , 108 , 44", "1": "255 , 10 , 100"}, + "layerColor": {"0": "230, 108, 44", "1": "255, 10, 100"}, }, } - result = client.delete(f"/v1/studies/{study_id}/areas/area%201", headers=admin_headers) + result = client.delete(f"/v1/studies/{study_id}/areas/area%201") assert result.status_code == 200 - res_areas = client.get(f"/v1/studies/{study_id}/areas", headers=admin_headers) + res_areas = client.get(f"/v1/studies/{study_id}/areas") assert res_areas.json() == [ { "id": "area 2", @@ -1926,7 +1434,7 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: "min-stable-power": None, "min-up-time": None, "name": "cluster 2", - "nominalcapacity": 2, + "nominalcapacity": 0, "spinning": None, "spread-cost": None, "type": None, @@ -1946,50 +1454,47 @@ def test_area_management(client: TestClient, admin_access_token: str, study_id: ] -def test_archive(client: TestClient, admin_access_token: str, study_id: str, tmp_path: Path) -> None: - admin_headers = {"Authorization": f"Bearer {admin_access_token}"} +def test_archive(client: TestClient, admin_access_token: str, tmp_path: Path) -> None: + client.headers = {"Authorization": f"Bearer {admin_access_token}"} - study_res = client.post("/v1/studies?name=foo", headers=admin_headers) + study_res = client.post("/v1/studies?name=foo") study_id = study_res.json() - res = client.put(f"/v1/studies/{study_id}/archive", headers=admin_headers) + res = client.put(f"/v1/studies/{study_id}/archive") assert res.status_code == 200 task_id = res.json() wait_for( lambda: client.get( f"/v1/tasks/{task_id}", - headers=admin_headers, ).json()["status"] == 3 ) - res = client.get(f"/v1/studies/{study_id}", headers=admin_headers) + res = client.get(f"/v1/studies/{study_id}") assert res.json()["archived"] assert (tmp_path / "archive_dir" / f"{study_id}.zip").exists() - res = client.put(f"/v1/studies/{study_id}/unarchive", headers=admin_headers) + res = client.put(f"/v1/studies/{study_id}/unarchive") task_id = res.json() wait_for( lambda: client.get( f"/v1/tasks/{task_id}", - headers=admin_headers, ).json()["status"] == 3 ) - res = client.get(f"/v1/studies/{study_id}", headers=admin_headers) + res = client.get(f"/v1/studies/{study_id}") assert not res.json()["archived"] assert not (tmp_path / "archive_dir" / f"{study_id}.zip").exists() -def test_maintenance(client: TestClient, admin_access_token: str, study_id: str) -> None: - admin_headers = {"Authorization": f"Bearer {admin_access_token}"} +def test_maintenance(client: TestClient, admin_access_token: str) -> None: + client.headers = {"Authorization": f"Bearer {admin_access_token}"} # Create non admin user res = client.post( "/v1/users", - headers=admin_headers, json={"name": "user", "password": "user"}, ) assert res.status_code == 200 @@ -2002,13 +1507,11 @@ def set_maintenance(value: bool) -> None: # Set maintenance mode result = client.post( f"/v1/core/maintenance?maintenance={'true' if value else 'false'}", - headers=admin_headers, ) assert result.status_code == 200 result = client.get( "/v1/core/maintenance", - headers=admin_headers, ) assert result.status_code == 200 assert result.json() == value @@ -2027,19 +1530,18 @@ def set_maintenance(value: bool) -> None: message = "Hey" res = client.post( "/v1/core/maintenance/message", - headers=admin_headers, json=message, ) assert res.status_code == 200 # Set message info when not admin - res = client.get("/v1/core/maintenance/message", headers=admin_headers) + res = client.get("/v1/core/maintenance/message") assert res.status_code == 200 assert res.json() == message def test_import(client: TestClient, admin_access_token: str, study_id: str) -> None: - admin_headers = {"Authorization": f"Bearer {admin_access_token}"} + client.headers = {"Authorization": f"Bearer {admin_access_token}"} zip_path = ASSETS_DIR / "STA-mini.zip" seven_zip_path = ASSETS_DIR / "STA-mini.7z" @@ -2048,16 +1550,14 @@ def test_import(client: TestClient, admin_access_token: str, study_id: str) -> N uuid = client.post( "/v1/studies/_import", files={"study": io.BytesIO(zip_path.read_bytes())}, - headers=admin_headers, ).json() - res = client.get(f"v1/studies/{uuid}", headers=admin_headers).json() + res = client.get(f"v1/studies/{uuid}").json() assert res["groups"] == [{"id": "admin", "name": "admin"}] - assert res["public_mode"] == PublicMode.NONE + assert res["public_mode"] == "NONE" # Create user George who belongs to no group client.post( "/v1/users", - headers=admin_headers, json={"name": "George", "password": "mypass"}, ) res = client.post("/v1/login", json={"username": "George", "password": "mypass"}) @@ -2072,13 +1572,44 @@ def test_import(client: TestClient, admin_access_token: str, study_id: str) -> N ).json() res = client.get(f"v1/studies/{uuid}", headers=georges_headers).json() assert res["groups"] == [] - assert res["public_mode"] == PublicMode.READ + assert res["public_mode"] == "READ" + + # create George group + george_group = "george_group" + res = client.post( + "/v1/groups", + json={"id": george_group, "name": george_group}, + ) + assert res.status_code in {200, 201} + # add George to the group as a reader + client.post( + "/v1/roles", + json={"type": 10, "group_id": george_group, "identity_id": 2}, + ) + # reset login to update credentials + res = client.post( + "/v1/refresh", + headers={"Authorization": f'Bearer {george_credentials["refresh_token"]}'}, + ) + george_credentials = res.json() + + # George imports a study, and it should succeed even if he has only "READER" access in the group + georges_headers = {"Authorization": f'Bearer {george_credentials["access_token"]}'} + res = client.post( + "/v1/studies/_import", + files={"study": io.BytesIO(zip_path.read_bytes())}, + headers=georges_headers, + ) + assert res.status_code in {200, 201} + uuid = res.json() + res = client.get(f"v1/studies/{uuid}", headers=georges_headers).json() + assert res["groups"] == [{"id": george_group, "name": george_group}] + assert res["public_mode"] == "NONE" # Study importer works for 7z files res = client.post( "/v1/studies/_import", files={"study": io.BytesIO(seven_zip_path.read_bytes())}, - headers=admin_headers, ) assert res.status_code == 201 @@ -2132,15 +1663,15 @@ def test_import(client: TestClient, admin_access_token: str, study_id: str) -> N def test_copy(client: TestClient, admin_access_token: str, study_id: str) -> None: - admin_headers = {"Authorization": f"Bearer {admin_access_token}"} + client.headers = {"Authorization": f"Bearer {admin_access_token}"} # Copy a study with admin user who belongs to a group - copied = client.post(f"/v1/studies/{study_id}/copy?dest=copied&use_task=false", headers=admin_headers) + copied = client.post(f"/v1/studies/{study_id}/copy?dest=copied&use_task=false") assert copied.status_code == 201 # asserts that it has admin groups and PublicMode to NONE - res = client.get(f"/v1/studies/{copied.json()}", headers=admin_headers).json() + res = client.get(f"/v1/studies/{copied.json()}").json() assert res["groups"] == [{"id": "admin", "name": "admin"}] - assert res["public_mode"] == PublicMode.NONE + assert res["public_mode"] == "NONE" # Connect with user George who belongs to no group res = client.post("/v1/login", json={"username": "George", "password": "mypass"}) @@ -2153,6 +1684,6 @@ def test_copy(client: TestClient, admin_access_token: str, study_id: str) -> Non ) assert copied.status_code == 201 # asserts that it has no groups and PublicMode to READ - res = client.get(f"/v1/studies/{copied.json()}", headers=admin_headers).json() + res = client.get(f"/v1/studies/{copied.json()}").json() assert res["groups"] == [] - assert res["public_mode"] == PublicMode.READ + assert res["public_mode"] == "READ" diff --git a/tests/integration/test_integration_variantmanager_tool.py b/tests/integration/test_integration_variantmanager_tool.py index f381cab3c9..4b27c84848 100644 --- a/tests/integration/test_integration_variantmanager_tool.py +++ b/tests/integration/test_integration_variantmanager_tool.py @@ -21,8 +21,7 @@ generate_study, parse_commands, ) - -test_dir: Path = Path(__file__).parent +from tests.integration.assets import ASSETS_DIR def generate_csv_string(array: npt.NDArray[np.float64]) -> str: @@ -49,27 +48,26 @@ def generate_study_with_server( f"/v1/studies/{base_study_id}/variants?name={urllib.parse.quote_plus(name)}", headers={"Authorization": f'Bearer {admin_credentials["access_token"]}'}, ) + assert res.status_code == 200, res.json() variant_id = res.json() - assert res.status_code == 200 generator = RemoteVariantGenerator(variant_id, session=client, token=admin_credentials["access_token"]) return generator.apply_commands(commands, matrices_dir), variant_id def test_variant_manager(app: FastAPI, tmp_path: str) -> None: client = TestClient(app, raise_server_exceptions=False) - commands = parse_commands(test_dir / "assets" / "commands1.json") - matrix_dir = Path(tmp_path) / "empty_matrix_store" + commands = parse_commands(ASSETS_DIR / "commands1.json") + matrix_dir = tmp_path / "empty_matrix_store" matrix_dir.mkdir(parents=True, exist_ok=True) res, study_id = generate_study_with_server(client, "test", "720", commands, matrix_dir) assert res is not None and res.success def test_parse_commands(tmp_path: str, app: FastAPI) -> None: - base_dir = test_dir / "assets" - export_path = Path(tmp_path) / "commands" + export_path = tmp_path / "commands" study = "base_study" - study_path = Path(tmp_path) / study - with ZipFile(base_dir / "base_study.zip") as zip_output: + study_path = tmp_path / study + with ZipFile(ASSETS_DIR / "base_study.zip") as zip_output: zip_output.extractall(path=tmp_path) output_dir = Path(export_path) / study study_info = IniReader().read(study_path / "study.antares") @@ -83,7 +81,7 @@ def test_parse_commands(tmp_path: str, app: FastAPI) -> None: ) res, study_id = generate_study_with_server(client, name, version, commands, output_dir / MATRIX_STORE_DIR) assert res is not None and res.success - generated_study_path = Path(tmp_path) / "internal_workspace" / study_id / "snapshot" + generated_study_path = tmp_path / "internal_workspace" / study_id / "snapshot" assert generated_study_path.exists() and generated_study_path.is_dir() single_column_empty_items = [ @@ -188,20 +186,19 @@ def test_parse_commands(tmp_path: str, app: FastAPI) -> None: def test_diff_local(tmp_path: Path) -> None: - base_dir = test_dir / "assets" - export_path = Path(tmp_path) / "generation_result" + export_path = tmp_path / "generation_result" base_study = "base_study" variant_study = "variant_study" output_study_commands = export_path / "output_study_commands" - output_study_path = Path(tmp_path) / base_study + output_study_path = tmp_path / base_study base_study_commands = export_path / base_study variant_study_commands = export_path / variant_study - variant_study_path = Path(tmp_path) / variant_study + variant_study_path = tmp_path / variant_study for study in [base_study, variant_study]: - with ZipFile(base_dir / f"{study}.zip") as zip_output: + with ZipFile(ASSETS_DIR / f"{study}.zip") as zip_output: zip_output.extractall(path=tmp_path) - extract_commands(Path(tmp_path) / study, export_path / study) + extract_commands(tmp_path / study, export_path / study) generate_study(base_study_commands, None, str(export_path / "base_generated")) generate_study( diff --git a/tests/storage/business/test_arealink_manager.py b/tests/storage/business/test_arealink_manager.py index 4caee7b7bd..a8beff5fc0 100644 --- a/tests/storage/business/test_arealink_manager.py +++ b/tests/storage/business/test_arealink_manager.py @@ -11,7 +11,7 @@ from antarest.core.utils.fastapi_sqlalchemy import db from antarest.matrixstore.repository import MatrixContentRepository from antarest.matrixstore.service import SimpleMatrixService -from antarest.study.business.area_management import AreaCreationDTO, AreaManager, AreaType, AreaUI +from antarest.study.business.area_management import AreaCreationDTO, AreaManager, AreaType, UpdateAreaUi from antarest.study.business.link_management import LinkInfoDTO, LinkManager from antarest.study.model import Patch, PatchArea, PatchCluster, RawStudy, StudyAdditionalData from antarest.study.repository import StudyMetadataRepository @@ -111,7 +111,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): assert len(empty_study.config.areas.keys()) == 1 assert json.loads((empty_study.config.study_path / "patch.json").read_text())["areas"]["test"]["country"] is None - area_manager.update_area_ui(study, "test", AreaUI(x=100, y=200, color_rgb=(255, 0, 100))) + area_manager.update_area_ui(study, "test", UpdateAreaUi(x=100, y=200, color_rgb=(255, 0, 100))) assert empty_study.tree.get(["input", "areas", "test", "ui", "ui"]) == { "x": 100, "y": 200, @@ -157,7 +157,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): assert (empty_study.config.study_path / "patch.json").exists() assert json.loads((empty_study.config.study_path / "patch.json").read_text())["areas"]["test"]["country"] == "FR" - area_manager.update_area_ui(study, "test", AreaUI(x=100, y=200, color_rgb=(255, 0, 100))) + area_manager.update_area_ui(study, "test", UpdateAreaUi(x=100, y=200, color_rgb=(255, 0, 100))) variant_study_service.append_commands.assert_called_with( variant_id, [ @@ -194,7 +194,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): }, { "target": "input/areas/test/ui/layerColor/0", - "data": "255 , 0 , 100", + "data": "255,0,100", }, ], ), diff --git a/tests/storage/business/test_study_version_upgrader.py b/tests/storage/business/test_study_version_upgrader.py index ef3ddf97c4..efe1e75315 100644 --- a/tests/storage/business/test_study_version_upgrader.py +++ b/tests/storage/business/test_study_version_upgrader.py @@ -1,5 +1,6 @@ import filecmp import glob +import os import re import shutil import zipfile @@ -30,7 +31,7 @@ def test_end_to_end_upgrades(tmp_path: Path): old_areas_values = get_old_area_values(study_dir) old_binding_constraint_values = get_old_binding_constraint_values(study_dir) # Only checks if the study_upgrader can go from the first supported version to the last one - target_version = "870" + target_version = "880" upgrade_study(study_dir, target_version) assert_study_antares_file_is_updated(study_dir, target_version) assert_settings_are_updated(study_dir, old_values) @@ -163,7 +164,7 @@ def assert_inputs_are_updated(tmp_path: Path, old_area_values: dict, old_binding path_txt = Path(txt) old_txt = str(Path(path_txt.parent.name).joinpath(path_txt.stem)).replace("_parameters", "") df = pandas.read_csv(txt, sep="\t", header=None) - assert df.values.all() == old_area_values[old_txt].iloc[:, 2:8].values.all() + assert df.to_numpy().all() == old_area_values[old_txt].iloc[:, 2:8].values.all() capacities = glob.glob(str(folder_path / "capacities" / "*")) for direction_txt in capacities: df_capacities = pandas.read_csv(direction_txt, sep="\t", header=None) @@ -206,13 +207,19 @@ def assert_inputs_are_updated(tmp_path: Path, old_area_values: dict, old_binding for k, term in enumerate(["lt", "gt", "eq"]): term_path = input_path / "bindingconstraints" / f"{bd_id}_{term}.txt" df = pandas.read_csv(term_path, sep="\t", header=None) - assert df.values.all() == old_binding_constraint_values[bd_id].iloc[:, k].values.all() + assert df.to_numpy().all() == old_binding_constraint_values[bd_id].iloc[:, k].values.all() # thermal cluster part for area in list_areas: reader = IniReader(DUPLICATE_KEYS) + thermal_series_path = tmp_path / "input" / "thermal" / "series" / area thermal_cluster_list = reader.read(tmp_path / "input" / "thermal" / "clusters" / area / "list.ini") for cluster in thermal_cluster_list: + fuel_cost_path = thermal_series_path / cluster.lower() / "fuelCost.txt" + co2_cost_path = thermal_series_path / cluster.lower() / "CO2Cost.txt" + for path in [fuel_cost_path, co2_cost_path]: + assert path.exists() + assert os.path.getsize(path) == 0 assert thermal_cluster_list[cluster]["costgeneration"] == "SetManually" assert thermal_cluster_list[cluster]["efficiency"] == 100 assert thermal_cluster_list[cluster]["variableomcost"] == 0 @@ -228,9 +235,23 @@ def are_same_dir(dir1, dir2) -> bool: dirs_cmp = filecmp.dircmp(dir1, dir2) if len(dirs_cmp.left_only) > 0 or len(dirs_cmp.right_only) > 0 or len(dirs_cmp.funny_files) > 0: return False + path_dir1 = Path(dir1) + path_dir2 = Path(dir2) + # check files content ignoring newline character (to avoid crashing on Windows) + for common_file in dirs_cmp.common_files: + file_1 = path_dir1 / common_file + file_2 = path_dir2 / common_file + # ignore study.ico + if common_file == "study.ico": + continue + with open(file_1, "r", encoding="utf-8") as f1: + with open(file_2, "r", encoding="utf-8") as f2: + content_1 = f1.read().splitlines(keepends=False) + content_2 = f2.read().splitlines(keepends=False) + if content_1 != content_2: + return False + # iter through common dirs recursively for common_dir in dirs_cmp.common_dirs: - path_dir1 = Path(dir1) - path_dir2 = Path(dir2) path_common_dir = Path(common_dir) new_dir1 = path_dir1 / path_common_dir new_dir2 = path_dir2 / path_common_dir diff --git a/tests/storage/repository/filesystem/config/test_config_files.py b/tests/storage/repository/filesystem/config/test_config_files.py index d8d157f01f..f07ac8f3db 100644 --- a/tests/storage/repository/filesystem/config/test_config_files.py +++ b/tests/storage/repository/filesystem/config/test_config_files.py @@ -1,16 +1,14 @@ import logging +import textwrap +import typing as t from pathlib import Path -from typing import Any, Dict from zipfile import ZipFile import pytest -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( - BindingConstraintDTO, - BindingConstraintFrequency, -) +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency from antarest.study.storage.rawstudy.model.filesystem.config.files import ( - _parse_links, + _parse_links_filtering, _parse_renewables, _parse_sets, _parse_st_storage, @@ -20,6 +18,7 @@ ) from antarest.study.storage.rawstudy.model.filesystem.config.model import ( Area, + BindingConstraintDTO, DistrictSet, FileStudyTreeConfig, Link, @@ -36,8 +35,12 @@ from tests.storage.business.assets import ASSETS_DIR -def build_empty_files(tmp: Path) -> Path: - study_path = tmp / "my-study" +@pytest.fixture(name="study_path") +def study_path_fixture(tmp_path: Path) -> Path: + """ + Create a study directory with the minimal structure required to build the configuration. + """ + study_path = tmp_path / "my-study" (study_path / "input/bindingconstraints/").mkdir(parents=True) (study_path / "input/bindingconstraints/bindingconstraints.ini").touch() @@ -54,31 +57,29 @@ def build_empty_files(tmp: Path) -> Path: return study_path -def test_parse_output_parameters(tmp_path: Path) -> None: - study = build_empty_files(tmp_path) +def test_parse_output_parameters(study_path: Path) -> None: content = """ [output] synthesis = true storenewset = true archives = """ - (study / "settings/generaldata.ini").write_text(content) + (study_path / "settings/generaldata.ini").write_text(content) config = FileStudyTreeConfig( - study_path=study, - path=study, + study_path=study_path, + path=study_path, version=-1, store_new_set=True, study_id="id", - output_path=study / "output", + output_path=study_path / "output", ) - assert build(study, "id") == config + assert build(study_path, "id") == config -def test_parse_bindings(tmp_path: Path) -> None: +def test_parse_bindings(study_path: Path) -> None: # Setup files - study_path = build_empty_files(tmp_path) - content = """ + content = """\ [bindA] id = bindA @@ -86,7 +87,7 @@ def test_parse_bindings(tmp_path: Path) -> None: id = bindB type = weekly """ - (study_path / "input/bindingconstraints/bindingconstraints.ini").write_text(content) + (study_path / "input/bindingconstraints/bindingconstraints.ini").write_text(textwrap.dedent(content)) config = FileStudyTreeConfig( study_path=study_path, @@ -113,14 +114,13 @@ def test_parse_bindings(tmp_path: Path) -> None: assert build(study_path, "id") == config -def test_parse_outputs(tmp_path: Path) -> None: - study_path = build_empty_files(tmp_path) +def test_parse_outputs(study_path: Path) -> None: output_path = study_path / "output/20201220-1456eco-hello/" output_path.mkdir(parents=True) (output_path / "about-the-study").mkdir() file = output_path / "about-the-study/parameters.ini" - content = """ + content = """\ [general] nbyears = 1 year-by-year = true @@ -132,7 +132,7 @@ def test_parse_outputs(tmp_path: Path) -> None: [playlist] playlist_year + = 0 """ - file.write_text(content) + file.write_text(textwrap.dedent(content)) (output_path / "checkIntegrity.txt").touch() @@ -217,7 +217,7 @@ def test_parse_outputs(tmp_path: Path) -> None: ), ], ) -def test_parse_outputs__nominal(tmp_path: Path, assets_name: str, expected: Dict[str, Any]) -> None: +def test_parse_outputs__nominal(tmp_path: Path, assets_name: str, expected: t.Dict[str, t.Any]) -> None: """ This test decompresses a zipped study (stored in the `assets` directory) into a temporary directory and executes the parsing of the outputs. @@ -231,21 +231,19 @@ def test_parse_outputs__nominal(tmp_path: Path, assets_name: str, expected: Dict assert actual == expected -def test_parse_sets(tmp_path: Path) -> None: - study_path = build_empty_files(tmp_path) - content = """ -[hello] -output = true -+ = a -+ = b -""" - (study_path / "input/areas/sets.ini").write_text(content) +def test_parse_sets(study_path: Path) -> None: + content = """\ + [hello] + output = true + + = a + + = b + """ + (study_path / "input/areas/sets.ini").write_text(textwrap.dedent(content)) assert _parse_sets(study_path) == {"hello": DistrictSet(areas=["a", "b"], output=True, inverted_set=False)} -def test_parse_area(tmp_path: Path) -> None: - study_path = build_empty_files(tmp_path) +def test_parse_area(study_path: Path) -> None: (study_path / "input/areas/list.txt").write_text("FR\n") (study_path / "input/areas/fr").mkdir(parents=True) content = """ @@ -275,6 +273,51 @@ def test_parse_area(tmp_path: Path) -> None: assert build(study_path, "id") == config +def test_parse_area__extra_area(study_path: Path) -> None: + """ + Test the case where an extra area is present in the `list.txt` file. + + The extra area should be taken into account with default values to avoid any parsing error. + """ + + (study_path / "input/areas/list.txt").write_text("FR\nDE\n") + (study_path / "input/areas/fr").mkdir(parents=True) + content = """ + [filtering] + filter-synthesis = daily, monthly + filter-year-by-year = hourly, weekly, annual + """ + (study_path / "input/areas/fr/optimization.ini").write_text(content) + + config = FileStudyTreeConfig( + study_path=study_path, + path=study_path, + study_id="id", + version=-1, + output_path=study_path / "output", + areas={ + "fr": Area( + name="FR", + thermals=[], + renewables=[], + links={}, + filters_year=["hourly", "weekly", "annual"], + filters_synthesis=["daily", "monthly"], + ), + "de": Area( + name="DE", + links={}, + thermals=[], + renewables=[], + filters_synthesis=[], + filters_year=[], + st_storages=[], + ), + }, + ) + assert build(study_path, "id") == config + + # noinspection SpellCheckingInspection THERMAL_LIST_INI = """\ [t1] @@ -291,8 +334,7 @@ def test_parse_area(tmp_path: Path) -> None: """ -def test_parse_thermal(tmp_path: Path) -> None: - study_path = build_empty_files(tmp_path) +def test_parse_thermal(study_path: Path) -> None: study_path.joinpath("study.antares").write_text("[antares] \n version = 700") ini_path = study_path.joinpath("input/thermal/clusters/fr/list.ini") @@ -330,8 +372,7 @@ def test_parse_thermal(tmp_path: Path) -> None: @pytest.mark.parametrize("version", [850, 860, 870]) -def test_parse_thermal_860(tmp_path: Path, version, caplog) -> None: - study_path = build_empty_files(tmp_path) +def test_parse_thermal_860(study_path: Path, version, caplog) -> None: study_path.joinpath("study.antares").write_text(f"[antares] \n version = {version}") ini_path = study_path.joinpath("input/thermal/clusters/fr/list.ini") ini_path.parent.mkdir(parents=True) @@ -380,8 +421,7 @@ def test_parse_thermal_860(tmp_path: Path, version, caplog) -> None: """ -def test_parse_renewables(tmp_path: Path) -> None: - study_path = build_empty_files(tmp_path) +def test_parse_renewables(study_path: Path) -> None: study_path.joinpath("study.antares").write_text("[antares] \n version = 810") ini_path = study_path.joinpath("input/renewables/clusters/fr/list.ini") @@ -430,8 +470,7 @@ def test_parse_renewables(tmp_path: Path) -> None: """ -def test_parse_st_storage(tmp_path: Path) -> None: - study_path = build_empty_files(tmp_path) +def test_parse_st_storage(study_path: Path) -> None: study_path.joinpath("study.antares").write_text("[antares] \n version = 860") config_dir = study_path.joinpath("input", "st-storage", "clusters", "fr") config_dir.mkdir(parents=True) @@ -471,8 +510,7 @@ def test_parse_st_storage_with_no_file(tmp_path: Path) -> None: assert _parse_st_storage(tmp_path, "") == [] -def test_parse_links(tmp_path: Path) -> None: - study_path = build_empty_files(tmp_path) +def test_parse_links(study_path: Path) -> None: (study_path / "input/links/fr").mkdir(parents=True) content = """ [l1] @@ -482,4 +520,4 @@ def test_parse_links(tmp_path: Path) -> None: (study_path / "input/links/fr/properties.ini").write_text(content) link = Link(filters_synthesis=["annual"], filters_year=["hourly"]) - assert _parse_links(study_path, "fr") == {"l1": link} + assert _parse_links_filtering(study_path, "fr") == {"l1": link} diff --git a/tests/storage/repository/filesystem/test_folder_node.py b/tests/storage/repository/filesystem/test_folder_node.py index d08360e223..7927927d7e 100644 --- a/tests/storage/repository/filesystem/test_folder_node.py +++ b/tests/storage/repository/filesystem/test_folder_node.py @@ -13,7 +13,7 @@ from antarest.study.storage.rawstudy.model.filesystem.inode import INode from antarest.study.storage.rawstudy.model.filesystem.raw_file_node import RawFileNode from antarest.study.storage.rawstudy.model.filesystem.root.input.areas.list import InputAreasList -from tests.storage.repository.filesystem.utils import TestMiddleNode, TestSubNode +from tests.storage.repository.filesystem.utils import CheckSubNode, TestMiddleNode def build_tree() -> INode[t.Any, t.Any, t.Any]: @@ -24,8 +24,8 @@ def build_tree() -> INode[t.Any, t.Any, t.Any]: context=Mock(), config=config, children={ - "input": TestSubNode(value=100), - "output": TestSubNode(value=200), + "input": CheckSubNode(config, value=100), + "output": CheckSubNode(config, value=200), }, ) diff --git a/tests/storage/repository/filesystem/utils.py b/tests/storage/repository/filesystem/utils.py index 82e0107082..abef9e26e5 100644 --- a/tests/storage/repository/filesystem/utils.py +++ b/tests/storage/repository/filesystem/utils.py @@ -8,7 +8,7 @@ from antarest.study.storage.rawstudy.model.filesystem.inode import TREE, INode -class TestSubNode(INode[int, int, int]): +class CheckSubNode(INode[int, int, int]): def normalize(self) -> None: pass @@ -18,7 +18,8 @@ def denormalize(self) -> None: def build(self, config: FileStudyTreeConfig) -> "TREE": pass - def __init__(self, value: int): + def __init__(self, config: FileStudyTreeConfig, value: int): + super().__init__(config) self.value = value def get_node( diff --git a/tests/storage/study_upgrader/test_upgrade_880.py b/tests/storage/study_upgrader/test_upgrade_880.py new file mode 100644 index 0000000000..36dfa7dcc6 --- /dev/null +++ b/tests/storage/study_upgrader/test_upgrade_880.py @@ -0,0 +1,17 @@ +from antarest.study.storage.study_upgrader import upgrade_880 +from tests.storage.business.test_study_version_upgrader import are_same_dir +from tests.storage.study_upgrader.conftest import StudyAssets + + +def test_nominal_case(study_assets: StudyAssets): + """ + Check that short term storages are correctly modified + """ + + # upgrade the study + upgrade_880(study_assets.study_dir) + + # compare st-storage folders (st-storage) + actual_input_path = study_assets.study_dir / "input" / "st-storage" + expected_input_path = study_assets.expected_dir / "input" / "st-storage" + assert are_same_dir(actual_input_path, expected_input_path) diff --git a/tests/storage/study_upgrader/upgrade_870/empty_binding_constraints/little_study_860.expected.zip b/tests/storage/study_upgrader/upgrade_870/empty_binding_constraints/little_study_860.expected.zip index 508430ffc5..f78b95bcfe 100644 Binary files a/tests/storage/study_upgrader/upgrade_870/empty_binding_constraints/little_study_860.expected.zip and b/tests/storage/study_upgrader/upgrade_870/empty_binding_constraints/little_study_860.expected.zip differ diff --git a/tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.expected.zip b/tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.expected.zip index e8e657ae98..bb83d77745 100644 Binary files a/tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.expected.zip and b/tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.expected.zip differ diff --git a/tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.expected.zip b/tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.expected.zip new file mode 100644 index 0000000000..ddeb10ad18 Binary files /dev/null and b/tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.expected.zip differ diff --git a/tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.zip b/tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.zip new file mode 100644 index 0000000000..88aa7533c3 Binary files /dev/null and b/tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.zip differ diff --git a/tests/study/business/areas/test_st_storage_management.py b/tests/study/business/areas/test_st_storage_management.py index ee9a79287e..74089bc7cd 100644 --- a/tests/study/business/areas/test_st_storage_management.py +++ b/tests/study/business/areas/test_st_storage_management.py @@ -1,8 +1,8 @@ import datetime import io import re +import typing as t import uuid -from typing import Any, MutableMapping, Sequence, cast from unittest.mock import Mock import numpy as np @@ -59,6 +59,11 @@ LIST_CFG = IniReader().read(io.StringIO(LIST_INI)) +ALL_STORAGES = { + "west": {"list": LIST_CFG}, + "east": {"list": {}}, +} + class TestSTStorageManager: @pytest.fixture(name="study_storage_service") @@ -97,7 +102,114 @@ def study_uuid_fixture(self, db_session: Session) -> str: ) db_session.add(raw_study) db_session.commit() - return cast(str, raw_study.id) + return t.cast(str, raw_study.id) + + def test_get_all_storages__nominal_case( + self, + db_session: Session, + study_storage_service: StudyStorageService, + study_uuid: str, + ) -> None: + """ + This unit test is to verify the behavior of the `get_all_storages` + method in the `STStorageManager` class under nominal conditions. + It checks whether the method returns the expected storage lists + for each area, based on a specific configuration. + """ + # The study must be fetched from the database + study: RawStudy = db_session.query(Study).get(study_uuid) + + # Prepare the mocks + storage = study_storage_service.get_storage(study) + file_study = storage.get_raw(study) + file_study.tree = Mock( + spec=FileStudyTree, + get=Mock(return_value=ALL_STORAGES), + ) + + # Given the following arguments + manager = STStorageManager(study_storage_service) + + # run + all_storages = manager.get_all_storages_props(study) + + # Check + actual = { + area_id: [form.dict(by_alias=True) for form in clusters_by_ids.values()] + for area_id, clusters_by_ids in all_storages.items() + } + expected = { + "west": [ + { + "id": "storage1", + "enabled": None, + "group": STStorageGroup.BATTERY, + "name": "Storage1", + "injectionNominalCapacity": 1500.0, + "withdrawalNominalCapacity": 1500.0, + "reservoirCapacity": 20000.0, + "efficiency": 0.94, + "initialLevel": 0.5, + "initialLevelOptim": True, + }, + { + "id": "storage2", + "enabled": None, + "group": STStorageGroup.PSP_CLOSED, + "name": "Storage2", + "injectionNominalCapacity": 2000.0, + "withdrawalNominalCapacity": 1500.0, + "reservoirCapacity": 20000.0, + "efficiency": 0.78, + "initialLevel": 0.5, + "initialLevelOptim": False, + }, + { + "id": "storage3", + "enabled": None, + "group": STStorageGroup.PSP_CLOSED, + "name": "Storage3", + "injectionNominalCapacity": 1500.0, + "withdrawalNominalCapacity": 1500.0, + "reservoirCapacity": 21000.0, + "efficiency": 0.72, + "initialLevel": 1.0, + "initialLevelOptim": False, + }, + ], + } + assert actual == expected + + def test_get_all_storages__config_not_found( + self, + db_session: Session, + study_storage_service: StudyStorageService, + study_uuid: str, + ) -> None: + """ + This test verifies that when the `get_all_storages` method is called + with a study and the corresponding configuration is not found + (indicated by the `KeyError` raised by the mock), it correctly + raises the `STStorageConfigNotFound` exception with the expected error + message containing the study ID. + """ + # The study must be fetched from the database + study: RawStudy = db_session.query(Study).get(study_uuid) + + # Prepare the mocks + storage = study_storage_service.get_storage(study) + file_study = storage.get_raw(study) + file_study.tree = Mock( + spec=FileStudyTree, + get=Mock(side_effect=KeyError("Oops!")), + ) + + # Given the following arguments + manager = STStorageManager(study_storage_service) + + # run + with pytest.raises(STStorageConfigNotFound, match="not found"): + manager.get_all_storages_props(study) def test_get_st_storages__nominal_case( self, @@ -141,6 +253,7 @@ def test_get_st_storages__nominal_case( "name": "Storage1", "reservoirCapacity": 20000.0, "withdrawalNominalCapacity": 1500.0, + "enabled": None, }, { "efficiency": 0.78, @@ -152,6 +265,7 @@ def test_get_st_storages__nominal_case( "name": "Storage2", "reservoirCapacity": 20000.0, "withdrawalNominalCapacity": 1500.0, + "enabled": None, }, { "efficiency": 0.72, @@ -163,6 +277,7 @@ def test_get_st_storages__nominal_case( "name": "Storage3", "reservoirCapacity": 21000.0, "withdrawalNominalCapacity": 1500.0, + "enabled": None, }, ] assert actual == expected @@ -249,6 +364,7 @@ def test_get_st_storage__nominal_case( "name": "Storage1", "reservoirCapacity": 20000.0, "withdrawalNominalCapacity": 1500.0, + "enabled": None, } assert actual == expected @@ -529,7 +645,7 @@ def test_validate_matrices__nominal( } # Prepare the mocks - def tree_get(url: Sequence[str], **_: Any) -> MutableMapping[str, Any]: + def tree_get(url: t.Sequence[str], **_: t.Any) -> t.MutableMapping[str, t.Any]: name = url[-1] array = matrices[name] return { @@ -566,7 +682,7 @@ def test_validate_matrices__out_of_bound( } # Prepare the mocks - def tree_get(url: Sequence[str], **_: Any) -> MutableMapping[str, Any]: + def tree_get(url: t.Sequence[str], **_: t.Any) -> t.MutableMapping[str, t.Any]: name = url[-1] array = matrices[name] return { @@ -632,7 +748,7 @@ def test_validate_matrices__rule_curve( } # Prepare the mocks - def tree_get(url: Sequence[str], **_: Any) -> MutableMapping[str, Any]: + def tree_get(url: t.Sequence[str], **_: t.Any) -> t.MutableMapping[str, t.Any]: name = url[-1] array = matrices[name] return { diff --git a/tests/study/business/test_all_optional_metaclass.py b/tests/study/business/test_all_optional_metaclass.py index 2e83a4e433..1c379f6460 100644 --- a/tests/study/business/test_all_optional_metaclass.py +++ b/tests/study/business/test_all_optional_metaclass.py @@ -3,7 +3,7 @@ import pytest from pydantic import BaseModel, Field, ValidationError -from antarest.study.business.utils import AllOptionalMetaclass +from antarest.study.business.all_optional_meta import AllOptionalMetaclass # ============================================== # Classic way to use default and optional values diff --git a/tests/study/storage/variantstudy/test_snapshot_generator.py b/tests/study/storage/variantstudy/test_snapshot_generator.py index 2365049432..e9de3da131 100644 --- a/tests/study/storage/variantstudy/test_snapshot_generator.py +++ b/tests/study/storage/variantstudy/test_snapshot_generator.py @@ -21,11 +21,11 @@ from antarest.study.model import RawStudy, Study, StudyAdditionalData from antarest.study.storage.rawstudy.raw_study_service import RawStudyService from antarest.study.storage.variantstudy.model.dbmodel import CommandBlock, VariantStudy, VariantStudySnapshot -from antarest.study.storage.variantstudy.model.model import CommandDTO, GenerationResultInfoDTO +from antarest.study.storage.variantstudy.model.model import CommandDTO from antarest.study.storage.variantstudy.snapshot_generator import SnapshotGenerator, search_ref_study from antarest.study.storage.variantstudy.variant_study_service import VariantStudyService from tests.db_statement_recorder import DBStatementRecorder -from tests.helpers import with_db_context +from tests.helpers import AnyUUID, with_db_context def _create_variant( @@ -851,15 +851,35 @@ def test_generate__nominal_case( assert len(db_recorder.sql_statements) == 5, str(db_recorder) # Check: the variant generation must succeed. - assert results == GenerationResultInfoDTO( - success=True, - details=[ - ("create_area", True, "Area 'North' created"), - ("create_area", True, "Area 'South' created"), - ("create_link", True, "Link between 'north' and 'south' created"), - ("create_cluster", True, "Thermal cluster 'gas_cluster' added to area 'south'."), + assert results.dict() == { + "success": True, + "details": [ + { + "id": AnyUUID(), + "name": "create_area", + "status": True, + "msg": "Area 'North' created", + }, + { + "id": AnyUUID(), + "name": "create_area", + "status": True, + "msg": "Area 'South' created", + }, + { + "id": AnyUUID(), + "name": "create_link", + "status": True, + "msg": "Link between 'north' and 'south' created", + }, + { + "id": AnyUUID(), + "name": "create_cluster", + "status": True, + "msg": "Thermal cluster 'gas_cluster' added to area 'south'.", + }, ], - ) + } # Check: the variant is correctly generated and all commands are applied. snapshot_dir = variant_study.snapshot_dir @@ -907,13 +927,33 @@ def test_generate__nominal_case( assert list(snapshot_dir.parent.iterdir()) == [snapshot_dir] # Check: the notifications are correctly registered. - assert notifier.notifications == [ # type: ignore + assert notifier.notifications == [ { "details": [ - ["create_area", True, "Area 'North' created"], - ["create_area", True, "Area 'South' created"], - ["create_link", True, "Link between 'north' and 'south' created"], - ["create_cluster", True, "Thermal cluster 'gas_cluster' added to area 'south'."], + { + "id": AnyUUID(as_string=True), + "msg": "Area 'North' created", + "name": "create_area", + "status": True, + }, + { + "id": AnyUUID(as_string=True), + "msg": "Area 'South' created", + "name": "create_area", + "status": True, + }, + { + "id": AnyUUID(as_string=True), + "msg": "Link between 'north' and 'south' created", + "name": "create_link", + "status": True, + }, + { + "id": AnyUUID(as_string=True), + "msg": "Thermal cluster 'gas_cluster' added to area 'south'.", + "name": "create_cluster", + "status": True, + }, ], "success": True, } @@ -996,15 +1036,35 @@ def test_generate__with_denormalize_true( ) # Check the results - assert results == GenerationResultInfoDTO( - success=True, - details=[ - ("create_area", True, "Area 'North' created"), - ("create_area", True, "Area 'South' created"), - ("create_link", True, "Link between 'north' and 'south' created"), - ("create_cluster", True, "Thermal cluster 'gas_cluster' added to area 'south'."), + assert results.dict() == { + "success": True, + "details": [ + { + "id": AnyUUID(), + "name": "create_area", + "status": True, + "msg": "Area 'North' created", + }, + { + "id": AnyUUID(), + "name": "create_area", + "status": True, + "msg": "Area 'South' created", + }, + { + "id": AnyUUID(), + "name": "create_link", + "status": True, + "msg": "Link between 'north' and 'south' created", + }, + { + "id": AnyUUID(), + "name": "create_cluster", + "status": True, + "msg": "Thermal cluster 'gas_cluster' added to area 'south'.", + }, ], - ) + } # Check: the matrices are denormalized (we should have TSV files). snapshot_dir = variant_study.snapshot_dir @@ -1099,15 +1159,35 @@ def test_generate__notification_failure( ) # Check the results - assert results == GenerationResultInfoDTO( - success=True, - details=[ - ("create_area", True, "Area 'North' created"), - ("create_area", True, "Area 'South' created"), - ("create_link", True, "Link between 'north' and 'south' created"), - ("create_cluster", True, "Thermal cluster 'gas_cluster' added to area 'south'."), + assert results.dict() == { + "success": True, + "details": [ + { + "id": AnyUUID(), + "name": "create_area", + "status": True, + "msg": "Area 'North' created", + }, + { + "id": AnyUUID(), + "name": "create_area", + "status": True, + "msg": "Area 'South' created", + }, + { + "id": AnyUUID(), + "name": "create_link", + "status": True, + "msg": "Link between 'north' and 'south' created", + }, + { + "id": AnyUUID(), + "name": "create_cluster", + "status": True, + "msg": "Thermal cluster 'gas_cluster' added to area 'south'.", + }, ], - ) + } # Check th logs assert "Something went wrong" in caplog.text @@ -1161,4 +1241,14 @@ def test_generate__variant_of_variant( ) # Check the results - assert results == GenerationResultInfoDTO(success=True, details=[("create_area", True, "Area 'East' created")]) + assert results.dict() == { + "success": True, + "details": [ + { + "id": AnyUUID(), + "name": "create_area", + "status": True, + "msg": "Area 'East' created", + }, + ], + } diff --git a/tests/study/test_repository.py b/tests/study/test_repository.py index e6becac349..f7314cdaaa 100644 --- a/tests/study/test_repository.py +++ b/tests/study/test_repository.py @@ -128,14 +128,14 @@ def test_get_all__incompatible_case( icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1) - study_2 = VariantStudy(id=2) - study_3 = VariantStudy(id=3) - study_4 = VariantStudy(id=4) - study_5 = RawStudy(id=5, missing=datetime.datetime.now(), workspace=DEFAULT_WORKSPACE_NAME) - study_6 = RawStudy(id=6, missing=datetime.datetime.now(), workspace=test_workspace) - study_7 = RawStudy(id=7, missing=None, workspace=test_workspace) - study_8 = RawStudy(id=8, missing=None, workspace=DEFAULT_WORKSPACE_NAME) + study_1 = VariantStudy(id=1, name="study-1") + study_2 = VariantStudy(id=2, name="study-2") + study_3 = VariantStudy(id=3, name="study-3") + study_4 = VariantStudy(id=4, name="study-4") + study_5 = RawStudy(id=5, name="study-5", missing=datetime.datetime.now(), workspace=DEFAULT_WORKSPACE_NAME) + study_6 = RawStudy(id=6, name="study-6", missing=datetime.datetime.now(), workspace=test_workspace) + study_7 = RawStudy(id=7, name="study-7", missing=None, workspace=test_workspace) + study_8 = RawStudy(id=8, name="study-8", missing=None, workspace=DEFAULT_WORKSPACE_NAME) db_session.add_all([study_1, study_2, study_3, study_4, study_5, study_6, study_7, study_8]) db_session.commit() @@ -179,21 +179,21 @@ def test_get_all__incompatible_case( @pytest.mark.parametrize( "name, expected_ids", [ - ("", {"1", "2", "3", "4", "5", "6", "7", "8"}), - ("specie", {"1", "2", "3", "4", "5", "6", "7", "8"}), - ("prefix-specie", {"2", "3", "6", "7"}), - ("variant", {"1", "2", "3", "4"}), - ("variant-suffix", {"3", "4"}), - ("raw", {"5", "6", "7", "8"}), - ("raw-suffix", {"7", "8"}), - ("prefix-variant", set()), - ("specie-suffix", set()), + ("", ["1", "2", "3", "4", "5", "6", "7", "8"]), + ("specie", ["1", "2", "3", "4", "5", "6", "7", "8"]), + ("prefix-specie", ["2", "3", "6", "7"]), + ("variant", ["1", "2", "3", "4"]), + ("variant-suffix", ["3", "4"]), + ("raw", ["5", "6", "7", "8"]), + ("raw-suffix", ["7", "8"]), + ("prefix-variant", []), + ("specie-suffix", []), ], ) def test_get_all__study_name_filter( db_session: Session, name: str, - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) @@ -207,6 +207,10 @@ def test_get_all__study_name_filter( study_7 = RawStudy(id=7, name="prefix-specie-raw-suffix") study_8 = RawStudy(id=8, name="specie-raw-suffix") + mapping_ids_names = { + str(s.id): s.name for s in [study_1, study_2, study_3, study_4, study_5, study_6, study_7, study_8] + } + db_session.add_all([study_1, study_2, study_3, study_4, study_5, study_6, study_7, study_8]) db_session.commit() @@ -225,7 +229,7 @@ def test_get_all__study_name_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -234,34 +238,36 @@ def test_get_all__study_name_filter( pagination=StudyPagination(page_nb=1, page_size=2), ) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + name_sorted_expected_studies = sorted(expected_ids, key=lambda s_id: mapping_ids_names[s_id]) + assert sorted(s.id for s in all_studies) == name_sorted_expected_studies[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @pytest.mark.parametrize( "managed, expected_ids", [ - (None, {"1", "2", "3", "4", "5", "6", "7", "8"}), - (True, {"1", "2", "3", "4", "5", "8"}), - (False, {"6", "7"}), + (None, ["1", "2", "3", "4", "5", "6", "7", "8"]), + (True, ["1", "2", "3", "4", "5", "8"]), + (False, ["6", "7"]), ], ) def test_get_all__managed_study_filter( db_session: Session, managed: t.Optional[bool], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: test_workspace = "test-workspace" icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1) - study_2 = VariantStudy(id=2) - study_3 = VariantStudy(id=3) - study_4 = VariantStudy(id=4) - study_5 = RawStudy(id=5, workspace=DEFAULT_WORKSPACE_NAME) - study_6 = RawStudy(id=6, workspace=test_workspace) - study_7 = RawStudy(id=7, workspace=test_workspace) - study_8 = RawStudy(id=8, workspace=DEFAULT_WORKSPACE_NAME) + study_1 = VariantStudy(id=1, name="study-1") + study_2 = VariantStudy(id=2, name="study-2") + study_3 = VariantStudy(id=3, name="study-3") + study_4 = VariantStudy(id=4, name="study-4") + study_5 = RawStudy(id=5, name="study-5", workspace=DEFAULT_WORKSPACE_NAME) + study_6 = RawStudy(id=6, name="study-6", workspace=test_workspace) + study_7 = RawStudy(id=7, name="study-7", workspace=test_workspace) + study_8 = RawStudy(id=8, name="study-8", workspace=DEFAULT_WORKSPACE_NAME) db_session.add_all([study_1, study_2, study_3, study_4, study_5, study_6, study_7, study_8]) db_session.commit() @@ -281,7 +287,7 @@ def test_get_all__managed_study_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -290,29 +296,30 @@ def test_get_all__managed_study_filter( pagination=StudyPagination(page_nb=1, page_size=2), ) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + assert sorted(s.id for s in all_studies) == expected_ids[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @pytest.mark.parametrize( "archived, expected_ids", [ - (None, {"1", "2", "3", "4"}), - (True, {"1", "3"}), - (False, {"2", "4"}), + (None, ["1", "2", "3", "4"]), + (True, ["1", "3"]), + (False, ["2", "4"]), ], ) def test_get_all__archived_study_filter( db_session: Session, archived: t.Optional[bool], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1, archived=True) - study_2 = VariantStudy(id=2, archived=False) - study_3 = RawStudy(id=3, archived=True) - study_4 = RawStudy(id=4, archived=False) + study_1 = VariantStudy(id=1, name="study-1", archived=True) + study_2 = VariantStudy(id=2, name="study-2", archived=False) + study_3 = RawStudy(id=3, name="study-3", archived=True) + study_4 = RawStudy(id=4, name="study-4", archived=False) db_session.add_all([study_1, study_2, study_3, study_4]) db_session.commit() @@ -331,7 +338,7 @@ def test_get_all__archived_study_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -346,23 +353,23 @@ def test_get_all__archived_study_filter( @pytest.mark.parametrize( "variant, expected_ids", [ - (None, {"1", "2", "3", "4"}), - (True, {"1", "2"}), - (False, {"3", "4"}), + (None, ["1", "2", "3", "4"]), + (True, ["1", "2"]), + (False, ["3", "4"]), ], ) def test_get_all__variant_study_filter( db_session: Session, variant: t.Optional[bool], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1) - study_2 = VariantStudy(id=2) - study_3 = RawStudy(id=3) - study_4 = RawStudy(id=4) + study_1 = VariantStudy(id=1, name="study-1") + study_2 = VariantStudy(id=2, name="study-2") + study_3 = RawStudy(id=3, name="study-3") + study_4 = RawStudy(id=4, name="study-4") db_session.add_all([study_1, study_2, study_3, study_4]) db_session.commit() @@ -381,7 +388,7 @@ def test_get_all__variant_study_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -396,25 +403,25 @@ def test_get_all__variant_study_filter( @pytest.mark.parametrize( "versions, expected_ids", [ - ([], {"1", "2", "3", "4"}), - (["1", "2"], {"1", "2", "3", "4"}), - (["1"], {"1", "3"}), - (["2"], {"2", "4"}), - (["3"], set()), + ([], ["1", "2", "3", "4"]), + (["1", "2"], ["1", "2", "3", "4"]), + (["1"], ["1", "3"]), + (["2"], ["2", "4"]), + (["3"], []), ], ) def test_get_all__study_version_filter( db_session: Session, versions: t.Sequence[str], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1, version="1") - study_2 = VariantStudy(id=2, version="2") - study_3 = RawStudy(id=3, version="1") - study_4 = RawStudy(id=4, version="2") + study_1 = VariantStudy(id=1, name="study-1", version="1") + study_2 = VariantStudy(id=2, name="study-2", version="2") + study_3 = RawStudy(id=3, name="study-3", version="1") + study_4 = RawStudy(id=4, name="study-4", version="2") db_session.add_all([study_1, study_2, study_3, study_4]) db_session.commit() @@ -433,7 +440,7 @@ def test_get_all__study_version_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -448,17 +455,17 @@ def test_get_all__study_version_filter( @pytest.mark.parametrize( "users, expected_ids", [ - ([], {"1", "2", "3", "4"}), - (["1000", "2000"], {"1", "2", "3", "4"}), - (["1000"], {"1", "3"}), - (["2000"], {"2", "4"}), - (["3000"], set()), + ([], ["1", "2", "3", "4"]), + (["1000", "2000"], ["1", "2", "3", "4"]), + (["1000"], ["1", "3"]), + (["2000"], ["2", "4"]), + (["3000"], []), ], ) def test_get_all__study_users_filter( db_session: Session, users: t.Sequence["int"], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) @@ -466,10 +473,10 @@ def test_get_all__study_users_filter( test_user_1 = User(id=1000) test_user_2 = User(id=2000) - study_1 = VariantStudy(id=1, owner=test_user_1) - study_2 = VariantStudy(id=2, owner=test_user_2) - study_3 = RawStudy(id=3, owner=test_user_1) - study_4 = RawStudy(id=4, owner=test_user_2) + study_1 = VariantStudy(id=1, name="study-1", owner=test_user_1) + study_2 = VariantStudy(id=2, name="study-2", owner=test_user_2) + study_3 = RawStudy(id=3, name="study-3", owner=test_user_1) + study_4 = RawStudy(id=4, name="study-4", owner=test_user_2) db_session.add_all([test_user_1, test_user_2]) db_session.commit() @@ -492,7 +499,7 @@ def test_get_all__study_users_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -501,23 +508,24 @@ def test_get_all__study_users_filter( pagination=StudyPagination(page_nb=1, page_size=2), ) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + assert sorted(s.id for s in all_studies) == expected_ids[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @pytest.mark.parametrize( "groups, expected_ids", [ - ([], {"1", "2", "3", "4"}), - (["1000", "2000"], {"1", "2", "3", "4"}), - (["1000"], {"1", "2", "4"}), - (["2000"], {"2", "3"}), - (["3000"], set()), + ([], ["1", "2", "3", "4"]), + (["1000", "2000"], ["1", "2", "3", "4"]), + (["1000"], ["1", "2", "4"]), + (["2000"], ["2", "3"]), + (["3000"], []), ], ) def test_get_all__study_groups_filter( db_session: Session, groups: t.Sequence[str], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) @@ -525,10 +533,10 @@ def test_get_all__study_groups_filter( test_group_1 = Group(id=1000) test_group_2 = Group(id=2000) - study_1 = VariantStudy(id=1, groups=[test_group_1]) - study_2 = VariantStudy(id=2, groups=[test_group_1, test_group_2]) - study_3 = RawStudy(id=3, groups=[test_group_2]) - study_4 = RawStudy(id=4, groups=[test_group_1]) + study_1 = VariantStudy(id=1, name="study-1", groups=[test_group_1]) + study_2 = VariantStudy(id=2, name="study-2", groups=[test_group_1, test_group_2]) + study_3 = RawStudy(id=3, name="study-3", groups=[test_group_2]) + study_4 = RawStudy(id=4, name="study-4", groups=[test_group_1]) db_session.add_all([test_group_1, test_group_2]) db_session.commit() @@ -551,7 +559,7 @@ def test_get_all__study_groups_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -560,32 +568,33 @@ def test_get_all__study_groups_filter( pagination=StudyPagination(page_nb=1, page_size=2), ) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + assert sorted(s.id for s in all_studies) == expected_ids[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @pytest.mark.parametrize( "study_ids, expected_ids", [ - ([], {"1", "2", "3", "4"}), - (["1", "2", "3", "4"], {"1", "2", "3", "4"}), - (["1", "2", "4"], {"1", "2", "4"}), - (["2", "3"], {"2", "3"}), - (["2"], {"2"}), - (["3000"], set()), + ([], ["1", "2", "3", "4"]), + (["1", "2", "3", "4"], ["1", "2", "3", "4"]), + (["1", "2", "4"], ["1", "2", "4"]), + (["2", "3"], ["2", "3"]), + (["2"], ["2"]), + (["3000"], []), ], ) def test_get_all__study_ids_filter( db_session: Session, study_ids: t.Sequence[str], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1) - study_2 = VariantStudy(id=2) - study_3 = RawStudy(id=3) - study_4 = RawStudy(id=4) + study_1 = VariantStudy(id=1, name="study-1") + study_2 = VariantStudy(id=2, name="study-2") + study_3 = RawStudy(id=3, name="study-3") + study_4 = RawStudy(id=4, name="study-4") db_session.add_all([study_1, study_2, study_3, study_4]) db_session.commit() @@ -605,7 +614,7 @@ def test_get_all__study_ids_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -614,29 +623,30 @@ def test_get_all__study_ids_filter( pagination=StudyPagination(page_nb=1, page_size=2), ) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + assert sorted(s.id for s in all_studies) == expected_ids[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @pytest.mark.parametrize( "exists, expected_ids", [ - (None, {"1", "2", "3", "4"}), - (True, {"1", "2", "4"}), - (False, {"3"}), + (None, ["1", "2", "3", "4"]), + (True, ["1", "2", "4"]), + (False, ["3"]), ], ) def test_get_all__study_existence_filter( db_session: Session, exists: t.Optional[bool], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1) - study_2 = VariantStudy(id=2) - study_3 = RawStudy(id=3, missing=datetime.datetime.now()) - study_4 = RawStudy(id=4) + study_1 = VariantStudy(id=1, name="study-1") + study_2 = VariantStudy(id=2, name="study-2") + study_3 = RawStudy(id=3, name="study-3", missing=datetime.datetime.now()) + study_4 = RawStudy(id=4, name="study-4") db_session.add_all([study_1, study_2, study_3, study_4]) db_session.commit() @@ -656,7 +666,7 @@ def test_get_all__study_existence_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -665,30 +675,31 @@ def test_get_all__study_existence_filter( pagination=StudyPagination(page_nb=1, page_size=2), ) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + assert sorted(s.id for s in all_studies) == expected_ids[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @pytest.mark.parametrize( "workspace, expected_ids", [ - ("", {"1", "2", "3", "4"}), - ("workspace-1", {"3"}), - ("workspace-2", {"4"}), - ("workspace-3", set()), + ("", ["1", "2", "3", "4"]), + ("workspace-1", ["3"]), + ("workspace-2", ["4"]), + ("workspace-3", []), ], ) def test_get_all__study_workspace_filter( db_session: Session, workspace: str, - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1) - study_2 = VariantStudy(id=2) - study_3 = RawStudy(id=3, workspace="workspace-1") - study_4 = RawStudy(id=4, workspace="workspace-2") + study_1 = VariantStudy(id=1, name="study-1") + study_2 = VariantStudy(id=2, name="study-2") + study_3 = RawStudy(id=3, name="study-3", workspace="workspace-1") + study_4 = RawStudy(id=4, name="study-4", workspace="workspace-2") db_session.add_all([study_1, study_2, study_3, study_4]) db_session.commit() @@ -708,7 +719,7 @@ def test_get_all__study_workspace_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -717,32 +728,33 @@ def test_get_all__study_workspace_filter( pagination=StudyPagination(page_nb=1, page_size=2), ) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + assert sorted(s.id for s in all_studies) == expected_ids[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @pytest.mark.parametrize( "folder, expected_ids", [ - ("", {"1", "2", "3", "4"}), - ("/home/folder-", {"1", "2", "3", "4"}), - ("/home/folder-1", {"1", "3"}), - ("/home/folder-2", {"2", "4"}), - ("/home/folder-3", set()), - ("folder-1", set()), + ("", ["1", "2", "3", "4"]), + ("/home/folder-", ["1", "2", "3", "4"]), + ("/home/folder-1", ["1", "3"]), + ("/home/folder-2", ["2", "4"]), + ("/home/folder-3", []), + ("folder-1", []), ], ) def test_get_all__study_folder_filter( db_session: Session, folder: str, - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1, folder="/home/folder-1") - study_2 = VariantStudy(id=2, folder="/home/folder-2") - study_3 = RawStudy(id=3, folder="/home/folder-1") - study_4 = RawStudy(id=4, folder="/home/folder-2") + study_1 = VariantStudy(id=1, name="study-1", folder="/home/folder-1") + study_2 = VariantStudy(id=2, name="study-2", folder="/home/folder-2") + study_3 = RawStudy(id=3, name="study-3", folder="/home/folder-1") + study_4 = RawStudy(id=4, name="study-4", folder="/home/folder-2") db_session.add_all([study_1, study_2, study_3, study_4]) db_session.commit() @@ -762,7 +774,7 @@ def test_get_all__study_folder_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -774,22 +786,20 @@ def test_get_all__study_folder_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) -# TODO fix this test and all the others -@pytest.mark.skip(reason="This bug is to be fixed asap, the sql query is not working as expected") @pytest.mark.parametrize( "tags, expected_ids", [ - ([], {"1", "2", "3", "4", "5", "6", "7", "8"}), - (["decennial"], {"2", "4", "6", "8"}), - (["winter_transition"], {"3", "4", "7", "8"}), - (["decennial", "winter_transition"], {"2", "3", "4", "6", "7", "8"}), - (["no-study-tag"], set()), + ([], ["1", "2", "3", "4", "5", "6", "7", "8"]), + (["decennial"], ["2", "4", "6", "8"]), + (["winter_transition"], ["3", "4", "7", "8"]), + (["decennial", "winter_transition"], ["2", "3", "4", "6", "7", "8"]), + (["no-study-tag"], []), ], ) def test_get_all__study_tags_filter( db_session: Session, tags: t.Sequence[str], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) @@ -798,14 +808,14 @@ def test_get_all__study_tags_filter( test_tag_2 = Tag(label="decennial") test_tag_3 = Tag(label="Winter_Transition") # note the different case - study_1 = VariantStudy(id=1, tags=[test_tag_1]) - study_2 = VariantStudy(id=2, tags=[test_tag_2]) - study_3 = VariantStudy(id=3, tags=[test_tag_3]) - study_4 = VariantStudy(id=4, tags=[test_tag_2, test_tag_3]) - study_5 = RawStudy(id=5, tags=[test_tag_1]) - study_6 = RawStudy(id=6, tags=[test_tag_2]) - study_7 = RawStudy(id=7, tags=[test_tag_3]) - study_8 = RawStudy(id=8, tags=[test_tag_2, test_tag_3]) + study_1 = VariantStudy(id=1, name="study-1", tags=[test_tag_1]) + study_2 = VariantStudy(id=2, name="study-2", tags=[test_tag_2]) + study_3 = VariantStudy(id=3, name="study-3", tags=[test_tag_3]) + study_4 = VariantStudy(id=4, name="study-4", tags=[test_tag_2, test_tag_3]) + study_5 = RawStudy(id=5, name="study-5", tags=[test_tag_1]) + study_6 = RawStudy(id=6, name="study-6", tags=[test_tag_2]) + study_7 = RawStudy(id=7, name="study-7", tags=[test_tag_3]) + study_8 = RawStudy(id=8, name="study-8", tags=[test_tag_2, test_tag_3]) db_session.add_all([study_1, study_2, study_3, study_4, study_5, study_6, study_7, study_8]) db_session.commit() @@ -826,7 +836,7 @@ def test_get_all__study_tags_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted(s.id for s in all_studies) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: @@ -835,6 +845,7 @@ def test_get_all__study_tags_filter( pagination=StudyPagination(page_nb=1, page_size=2), ) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + assert sorted(s.id for s in all_studies) == expected_ids[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @@ -842,42 +853,42 @@ def test_get_all__study_tags_filter( "user_id, study_groups, expected_ids", [ # fmt: off - (101, [], {"1", "2", "5", "6", "7", "8", "9", "10", "13", "14", "15", "16", "17", "18", - "21", "22", "23", "24", "25", "26", "29", "30", "31", "32", "34"}), - (101, ["101"], {"1", "7", "8", "9", "17", "23", "24", "25"}), - (101, ["102"], {"2", "5", "6", "7", "8", "9", "18", "21", "22", "23", "24", "25", "34"}), - (101, ["103"], set()), - (101, ["101", "102"], {"1", "2", "5", "6", "7", "8", "9", "17", "18", "21", "22", "23", "24", "25", "34"}), - (101, ["101", "103"], {"1", "7", "8", "9", "17", "23", "24", "25"}), - (101, ["102", "103"], {"2", "5", "6", "7", "8", "9", "18", "21", "22", "23", "24", "25", "34"}), - (101, ["101", "102", "103"], {"1", "2", "5", "6", "7", "8", "9", "17", "18", "21", "22", - "23", "24", "25", "34"}), - (102, [], {"1", "3", "4", "5", "7", "8", "9", "11", "13", "14", "15", "16", "17", "19", - "20", "21", "23", "24", "25", "27", "29", "30", "31", "32", "33"}), - (102, ["101"], {"1", "3", "4", "7", "8", "9", "17", "19", "20", "23", "24", "25", "33"}), - (102, ["102"], {"5", "7", "8", "9", "21", "23", "24", "25"}), - (102, ["103"], set()), - (102, ["101", "102"], {"1", "3", "4", "5", "7", "8", "9", "17", "19", "20", "21", "23", "24", "25", "33"}), - (102, ["101", "103"], {"1", "3", "4", "7", "8", "9", "17", "19", "20", "23", "24", "25", "33"}), - (102, ["102", "103"], {"5", "7", "8", "9", "21", "23", "24", "25"}), - (102, ["101", "102", "103"], {"1", "3", "4", "5", "7", "8", "9", "17", "19", "20", "21", - "23", "24", "25", "33"}), - (103, [], {"13", "14", "15", "16", "29", "30", "31", "32", "33", "34", "35", "36"}), - (103, ["101"], {"33"}), - (103, ["102"], {"34"}), - (103, ["103"], set()), - (103, ["101", "102"], {"33", "34"}), - (103, ["101", "103"], {"33"}), - (103, ["102", "103"], {"34"}), - (103, ["101", "102", "103"], {"33", "34"}), - (None, [], set()), - (None, ["101"], set()), - (None, ["102"], set()), - (None, ["103"], set()), - (None, ["101", "102"], set()), - (None, ["101", "103"], set()), - (None, ["102", "103"], set()), - (None, ["101", "102", "103"], set()), + (101, [], ["1", "2", "5", "6", "7", "8", "9", "10", "13", "14", "15", "16", "17", "18", + "21", "22", "23", "24", "25", "26", "29", "30", "31", "32", "34"]), + (101, ["101"], ["1", "7", "8", "9", "17", "23", "24", "25"]), + (101, ["102"], ["2", "5", "6", "7", "8", "9", "18", "21", "22", "23", "24", "25", "34"]), + (101, ["103"], []), + (101, ["101", "102"], ["1", "2", "5", "6", "7", "8", "9", "17", "18", "21", "22", "23", "24", "25", "34"]), + (101, ["101", "103"], ["1", "7", "8", "9", "17", "23", "24", "25"]), + (101, ["102", "103"], ["2", "5", "6", "7", "8", "9", "18", "21", "22", "23", "24", "25", "34"]), + (101, ["101", "102", "103"], ["1", "2", "5", "6", "7", "8", "9", "17", "18", "21", "22", + "23", "24", "25", "34"]), + (102, [], ["1", "3", "4", "5", "7", "8", "9", "11", "13", "14", "15", "16", "17", "19", + "20", "21", "23", "24", "25", "27", "29", "30", "31", "32", "33"]), + (102, ["101"], ["1", "3", "4", "7", "8", "9", "17", "19", "20", "23", "24", "25", "33"]), + (102, ["102"], ["5", "7", "8", "9", "21", "23", "24", "25"]), + (102, ["103"], []), + (102, ["101", "102"], ["1", "3", "4", "5", "7", "8", "9", "17", "19", "20", "21", "23", "24", "25", "33"]), + (102, ["101", "103"], ["1", "3", "4", "7", "8", "9", "17", "19", "20", "23", "24", "25", "33"]), + (102, ["102", "103"], ["5", "7", "8", "9", "21", "23", "24", "25"]), + (102, ["101", "102", "103"], ["1", "3", "4", "5", "7", "8", "9", "17", "19", "20", "21", + "23", "24", "25", "33"]), + (103, [], ["13", "14", "15", "16", "29", "30", "31", "32", "33", "34", "35", "36"]), + (103, ["101"], ["33"]), + (103, ["102"], ["34"]), + (103, ["103"], []), + (103, ["101", "102"], ["33", "34"]), + (103, ["101", "103"], ["33"]), + (103, ["102", "103"], ["34"]), + (103, ["101", "102", "103"], ["33", "34"]), + (None, [], []), + (None, ["101"], []), + (None, ["102"], []), + (None, ["103"], []), + (None, ["101", "102"], []), + (None, ["101", "103"], []), + (None, ["102", "103"], []), + (None, ["101", "102", "103"], []), # fmt: on ], ) @@ -885,7 +896,7 @@ def test_get_all__non_admin_permissions_filter( db_session: Session, user_id: t.Optional[int], study_groups: t.Sequence[str], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) @@ -901,54 +912,54 @@ def test_get_all__non_admin_permissions_filter( user_groups_mapping = {101: [group_2.id], 102: [group_1.id], 103: []} # create variant studies for user_1 and user_2 that are part of some groups - study_1 = VariantStudy(id=1, owner=user_1, groups=[group_1]) - study_2 = VariantStudy(id=2, owner=user_1, groups=[group_2]) - study_3 = VariantStudy(id=3, groups=[group_1]) - study_4 = VariantStudy(id=4, owner=user_2, groups=[group_1]) - study_5 = VariantStudy(id=5, owner=user_2, groups=[group_2]) - study_6 = VariantStudy(id=6, groups=[group_2]) - study_7 = VariantStudy(id=7, owner=user_1, groups=[group_1, group_2]) - study_8 = VariantStudy(id=8, owner=user_2, groups=[group_1, group_2]) - study_9 = VariantStudy(id=9, groups=[group_1, group_2]) - study_10 = VariantStudy(id=10, owner=user_1) - study_11 = VariantStudy(id=11, owner=user_2) + study_1 = VariantStudy(id=1, name="study-1", owner=user_1, groups=[group_1]) + study_2 = VariantStudy(id=2, name="study-2", owner=user_1, groups=[group_2]) + study_3 = VariantStudy(id=3, name="study-3", groups=[group_1]) + study_4 = VariantStudy(id=4, name="study-4", owner=user_2, groups=[group_1]) + study_5 = VariantStudy(id=5, name="study-5", owner=user_2, groups=[group_2]) + study_6 = VariantStudy(id=6, name="study-6", groups=[group_2]) + study_7 = VariantStudy(id=7, name="study-7", owner=user_1, groups=[group_1, group_2]) + study_8 = VariantStudy(id=8, name="study-8", owner=user_2, groups=[group_1, group_2]) + study_9 = VariantStudy(id=9, name="study-9", groups=[group_1, group_2]) + study_10 = VariantStudy(id=10, name="study-X10", owner=user_1) + study_11 = VariantStudy(id=11, name="study-X11", owner=user_2) # create variant studies with neither owner nor groups - study_12 = VariantStudy(id=12) - study_13 = VariantStudy(id=13, public_mode=PublicMode.READ) - study_14 = VariantStudy(id=14, public_mode=PublicMode.EDIT) - study_15 = VariantStudy(id=15, public_mode=PublicMode.EXECUTE) - study_16 = VariantStudy(id=16, public_mode=PublicMode.FULL) + study_12 = VariantStudy(id=12, name="study-X12") + study_13 = VariantStudy(id=13, name="study-X13", public_mode=PublicMode.READ) + study_14 = VariantStudy(id=14, name="study-X14", public_mode=PublicMode.EDIT) + study_15 = VariantStudy(id=15, name="study-X15", public_mode=PublicMode.EXECUTE) + study_16 = VariantStudy(id=16, name="study-X16", public_mode=PublicMode.FULL) # create raw studies for user_1 and user_2 that are part of some groups - study_17 = RawStudy(id=17, owner=user_1, groups=[group_1]) - study_18 = RawStudy(id=18, owner=user_1, groups=[group_2]) - study_19 = RawStudy(id=19, groups=[group_1]) - study_20 = RawStudy(id=20, owner=user_2, groups=[group_1]) - study_21 = RawStudy(id=21, owner=user_2, groups=[group_2]) - study_22 = RawStudy(id=22, groups=[group_2]) - study_23 = RawStudy(id=23, owner=user_1, groups=[group_1, group_2]) - study_24 = RawStudy(id=24, owner=user_2, groups=[group_1, group_2]) - study_25 = RawStudy(id=25, groups=[group_1, group_2]) - study_26 = RawStudy(id=26, owner=user_1) - study_27 = RawStudy(id=27, owner=user_2) + study_17 = RawStudy(id=17, name="study-X17", owner=user_1, groups=[group_1]) + study_18 = RawStudy(id=18, name="study-X18", owner=user_1, groups=[group_2]) + study_19 = RawStudy(id=19, name="study-X19", groups=[group_1]) + study_20 = RawStudy(id=20, name="study-X20", owner=user_2, groups=[group_1]) + study_21 = RawStudy(id=21, name="study-X21", owner=user_2, groups=[group_2]) + study_22 = RawStudy(id=22, name="study-X22", groups=[group_2]) + study_23 = RawStudy(id=23, name="study-X23", owner=user_1, groups=[group_1, group_2]) + study_24 = RawStudy(id=24, name="study-X24", owner=user_2, groups=[group_1, group_2]) + study_25 = RawStudy(id=25, name="study-X25", groups=[group_1, group_2]) + study_26 = RawStudy(id=26, name="study-X26", owner=user_1) + study_27 = RawStudy(id=27, name="study-X27", owner=user_2) # create raw studies with neither owner nor groups - study_28 = RawStudy(id=28) - study_29 = RawStudy(id=29, public_mode=PublicMode.READ) - study_30 = RawStudy(id=30, public_mode=PublicMode.EDIT) - study_31 = RawStudy(id=31, public_mode=PublicMode.EXECUTE) - study_32 = RawStudy(id=32, public_mode=PublicMode.FULL) + study_28 = RawStudy(id=28, name="study-X28") + study_29 = RawStudy(id=29, name="study-X29", public_mode=PublicMode.READ) + study_30 = RawStudy(id=30, name="study-X30", public_mode=PublicMode.EDIT) + study_31 = RawStudy(id=31, name="study-X31", public_mode=PublicMode.EXECUTE) + study_32 = RawStudy(id=32, name="study-X32", public_mode=PublicMode.FULL) # create studies for user_3 that is not part of any group - study_33 = VariantStudy(id=33, owner=user_3, groups=[group_1]) - study_34 = RawStudy(id=34, owner=user_3, groups=[group_2]) - study_35 = VariantStudy(id=35, owner=user_3) - study_36 = RawStudy(id=36, owner=user_3) + study_33 = VariantStudy(id=33, name="study-X33", owner=user_3, groups=[group_1]) + study_34 = RawStudy(id=34, name="study-X34", owner=user_3, groups=[group_2]) + study_35 = VariantStudy(id=35, name="study-X35", owner=user_3) + study_36 = RawStudy(id=36, name="study-X36", owner=user_3) # create studies for group_3 that has no user - study_37 = VariantStudy(id=37, groups=[group_3]) - study_38 = RawStudy(id=38, groups=[group_3]) + study_37 = VariantStudy(id=37, name="study-X37", groups=[group_3]) + study_38 = RawStudy(id=38, name="study-X38", groups=[group_3]) db_session.add_all([user_1, user_2, user_3, group_1, group_2, group_3]) db_session.add_all( @@ -987,12 +998,13 @@ def test_get_all__non_admin_permissions_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted((s.id for s in all_studies), key=int) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: all_studies = repository.get_all(study_filter=study_filter, pagination=StudyPagination(page_nb=1, page_size=2)) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + assert sorted((s.id for s in all_studies), key=int) == expected_ids[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @@ -1000,22 +1012,22 @@ def test_get_all__non_admin_permissions_filter( "is_admin, study_groups, expected_ids", [ # fmt: off - (True, [], {str(e) for e in range(1, 39)}), - (True, ["101"], {"1", "3", "4", "7", "8", "9", "17", "19", "20", "23", "24", "25", "33"}), - (True, ["102"], {"2", "5", "6", "7", "8", "9", "18", "21", "22", "23", "24", "25", "34"}), - (True, ["103"], {"37", "38"}), - (True, ["101", "102"], {"1", "2", "3", "4", "5", "6", "7", "8", "9", "17", "18", "19", - "20", "21", "22", "23", "24", "25", "33", "34"}), - (True, ["101", "103"], {"1", "3", "4", "7", "8", "9", "17", "19", "20", "23", "24", "25", "33", "37", "38"}), - (True, ["101", "102", "103"], {"1", "2", "3", "4", "5", "6", "7", "8", "9", "17", "18", - "19", "20", "21", "22", "23", "24", "25", "33", "34", "37", "38"}), - (False, [], set()), - (False, ["101"], set()), - (False, ["102"], set()), - (False, ["103"], set()), - (False, ["101", "102"], set()), - (False, ["101", "103"], set()), - (False, ["101", "102", "103"], set()), + (True, [], [str(e) for e in range(1, 39)]), + (True, ["101"], ["1", "3", "4", "7", "8", "9", "17", "19", "20", "23", "24", "25", "33"]), + (True, ["102"], ["2", "5", "6", "7", "8", "9", "18", "21", "22", "23", "24", "25", "34"]), + (True, ["103"], ["37", "38"]), + (True, ["101", "102"], ["1", "2", "3", "4", "5", "6", "7", "8", "9", "17", "18", "19", + "20", "21", "22", "23", "24", "25", "33", "34"]), + (True, ["101", "103"], ["1", "3", "4", "7", "8", "9", "17", "19", "20", "23", "24", "25", "33", "37", "38"]), + (True, ["101", "102", "103"], ["1", "2", "3", "4", "5", "6", "7", "8", "9", "17", "18", + "19", "20", "21", "22", "23", "24", "25", "33", "34", "37", "38"]), + (False, [], []), + (False, ["101"], []), + (False, ["102"], []), + (False, ["103"], []), + (False, ["101", "102"], []), + (False, ["101", "103"], []), + (False, ["101", "102", "103"], []), # fmt: on ], ) @@ -1023,7 +1035,7 @@ def test_get_all__admin_permissions_filter( db_session: Session, is_admin: bool, study_groups: t.Sequence[str], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) @@ -1036,54 +1048,54 @@ def test_get_all__admin_permissions_filter( group_3 = Group(id=103, name="group3") # create variant studies for user_1 and user_2 that are part of some groups - study_1 = VariantStudy(id=1, owner=user_1, groups=[group_1]) - study_2 = VariantStudy(id=2, owner=user_1, groups=[group_2]) - study_3 = VariantStudy(id=3, groups=[group_1]) - study_4 = VariantStudy(id=4, owner=user_2, groups=[group_1]) - study_5 = VariantStudy(id=5, owner=user_2, groups=[group_2]) - study_6 = VariantStudy(id=6, groups=[group_2]) - study_7 = VariantStudy(id=7, owner=user_1, groups=[group_1, group_2]) - study_8 = VariantStudy(id=8, owner=user_2, groups=[group_1, group_2]) - study_9 = VariantStudy(id=9, groups=[group_1, group_2]) - study_10 = VariantStudy(id=10, owner=user_1) - study_11 = VariantStudy(id=11, owner=user_2) + study_1 = VariantStudy(id=1, name="study-1", owner=user_1, groups=[group_1]) + study_2 = VariantStudy(id=2, name="study-2", owner=user_1, groups=[group_2]) + study_3 = VariantStudy(id=3, name="study-3", groups=[group_1]) + study_4 = VariantStudy(id=4, name="study-4", owner=user_2, groups=[group_1]) + study_5 = VariantStudy(id=5, name="study-5", owner=user_2, groups=[group_2]) + study_6 = VariantStudy(id=6, name="study-6", groups=[group_2]) + study_7 = VariantStudy(id=7, name="study-7", owner=user_1, groups=[group_1, group_2]) + study_8 = VariantStudy(id=8, name="study-8", owner=user_2, groups=[group_1, group_2]) + study_9 = VariantStudy(id=9, name="study-9", groups=[group_1, group_2]) + study_10 = VariantStudy(id=10, name="study-X10", owner=user_1) + study_11 = VariantStudy(id=11, name="study-X11", owner=user_2) # create variant studies with neither owner nor groups - study_12 = VariantStudy(id=12) - study_13 = VariantStudy(id=13, public_mode=PublicMode.READ) - study_14 = VariantStudy(id=14, public_mode=PublicMode.EDIT) - study_15 = VariantStudy(id=15, public_mode=PublicMode.EXECUTE) - study_16 = VariantStudy(id=16, public_mode=PublicMode.FULL) + study_12 = VariantStudy(id=12, name="study-X12") + study_13 = VariantStudy(id=13, name="study-X13", public_mode=PublicMode.READ) + study_14 = VariantStudy(id=14, name="study-X14", public_mode=PublicMode.EDIT) + study_15 = VariantStudy(id=15, name="study-X15", public_mode=PublicMode.EXECUTE) + study_16 = VariantStudy(id=16, name="study-X16", public_mode=PublicMode.FULL) # create raw studies for user_1 and user_2 that are part of some groups - study_17 = RawStudy(id=17, owner=user_1, groups=[group_1]) - study_18 = RawStudy(id=18, owner=user_1, groups=[group_2]) - study_19 = RawStudy(id=19, groups=[group_1]) - study_20 = RawStudy(id=20, owner=user_2, groups=[group_1]) - study_21 = RawStudy(id=21, owner=user_2, groups=[group_2]) - study_22 = RawStudy(id=22, groups=[group_2]) - study_23 = RawStudy(id=23, owner=user_1, groups=[group_1, group_2]) - study_24 = RawStudy(id=24, owner=user_2, groups=[group_1, group_2]) - study_25 = RawStudy(id=25, groups=[group_1, group_2]) - study_26 = RawStudy(id=26, owner=user_1) - study_27 = RawStudy(id=27, owner=user_2) + study_17 = RawStudy(id=17, name="study-X17", owner=user_1, groups=[group_1]) + study_18 = RawStudy(id=18, name="study-X18", owner=user_1, groups=[group_2]) + study_19 = RawStudy(id=19, name="study-X19", groups=[group_1]) + study_20 = RawStudy(id=20, name="study-X20", owner=user_2, groups=[group_1]) + study_21 = RawStudy(id=21, name="study-X21", owner=user_2, groups=[group_2]) + study_22 = RawStudy(id=22, name="study-X22", groups=[group_2]) + study_23 = RawStudy(id=23, name="study-X23", owner=user_1, groups=[group_1, group_2]) + study_24 = RawStudy(id=24, name="study-X24", owner=user_2, groups=[group_1, group_2]) + study_25 = RawStudy(id=25, name="study-X25", groups=[group_1, group_2]) + study_26 = RawStudy(id=26, name="study-X26", owner=user_1) + study_27 = RawStudy(id=27, name="study-X27", owner=user_2) # create raw studies with neither owner nor groups - study_28 = RawStudy(id=28) - study_29 = RawStudy(id=29, public_mode=PublicMode.READ) - study_30 = RawStudy(id=30, public_mode=PublicMode.EDIT) - study_31 = RawStudy(id=31, public_mode=PublicMode.EXECUTE) - study_32 = RawStudy(id=32, public_mode=PublicMode.FULL) + study_28 = RawStudy(id=28, name="study-X28") + study_29 = RawStudy(id=29, name="study-X29", public_mode=PublicMode.READ) + study_30 = RawStudy(id=30, name="study-X30", public_mode=PublicMode.EDIT) + study_31 = RawStudy(id=31, name="study-X31", public_mode=PublicMode.EXECUTE) + study_32 = RawStudy(id=32, name="study-X32", public_mode=PublicMode.FULL) # create studies for user_3 that is not part of any group - study_33 = VariantStudy(id=33, owner=user_3, groups=[group_1]) - study_34 = RawStudy(id=34, owner=user_3, groups=[group_2]) - study_35 = VariantStudy(id=35, owner=user_3) - study_36 = RawStudy(id=36, owner=user_3) + study_33 = VariantStudy(id=33, name="study-X33", owner=user_3, groups=[group_1]) + study_34 = RawStudy(id=34, name="study-X34", owner=user_3, groups=[group_2]) + study_35 = VariantStudy(id=35, name="study-X35", owner=user_3) + study_36 = RawStudy(id=36, name="study-X36", owner=user_3) # create studies for group_3 that has no user - study_37 = VariantStudy(id=37, groups=[group_3]) - study_38 = RawStudy(id=38, groups=[group_3]) + study_37 = VariantStudy(id=37, name="study-X37", groups=[group_3]) + study_38 = RawStudy(id=38, name="study-X38", groups=[group_3]) db_session.add_all([user_1, user_2, user_3, group_1, group_2, group_3]) db_session.add_all( @@ -1118,12 +1130,13 @@ def test_get_all__admin_permissions_filter( assert len(db_recorder.sql_statements) == 1, str(db_recorder) if expected_ids is not None: - assert {s.id for s in all_studies} == expected_ids + assert sorted((s.id for s in all_studies), key=int) == expected_ids # test pagination with DBStatementRecorder(db_session.bind) as db_recorder: all_studies = repository.get_all(study_filter=study_filter, pagination=StudyPagination(page_nb=1, page_size=2)) assert len(all_studies) == max(0, min(len(expected_ids) - 2, 2)) + assert sorted((s.id for s in all_studies), key=int) == expected_ids[2:4] assert len(db_recorder.sql_statements) == 1, str(db_recorder) @@ -1134,7 +1147,7 @@ def test_update_tags( repository = StudyMetadataRepository(cache_service=icache, session=db_session) study_id = 1 - study = RawStudy(id=study_id, tags=[]) + study = RawStudy(id=study_id, name=f"study-{study_id}", tags=[]) db_session.add(study) db_session.commit() @@ -1163,26 +1176,26 @@ def test_update_tags( @pytest.mark.parametrize( "managed, study_ids, exists, expected_ids", [ - (None, [], False, {"5", "6"}), - (None, [], True, {"1", "2", "3", "4", "7", "8"}), - (None, [], None, {"1", "2", "3", "4", "5", "6", "7", "8"}), - (None, [1, 3, 5, 7], False, {"5"}), - (None, [1, 3, 5, 7], True, {"1", "3", "7"}), - (None, [1, 3, 5, 7], None, {"1", "3", "5", "7"}), - (True, [], False, {"5"}), - (True, [], True, {"1", "2", "3", "4", "8"}), - (True, [], None, {"1", "2", "3", "4", "5", "8"}), - (True, [1, 3, 5, 7], False, {"5"}), - (True, [1, 3, 5, 7], True, {"1", "3"}), - (True, [1, 3, 5, 7], None, {"1", "3", "5"}), - (True, [2, 4, 6, 8], True, {"2", "4", "8"}), - (True, [2, 4, 6, 8], None, {"2", "4", "8"}), - (False, [], False, {"6"}), - (False, [], True, {"7"}), - (False, [], None, {"6", "7"}), - (False, [1, 3, 5, 7], False, set()), - (False, [1, 3, 5, 7], True, {"7"}), - (False, [1, 3, 5, 7], None, {"7"}), + (None, [], False, ["5", "6"]), + (None, [], True, ["1", "2", "3", "4", "7", "8"]), + (None, [], None, ["1", "2", "3", "4", "5", "6", "7", "8"]), + (None, [1, 3, 5, 7], False, ["5"]), + (None, [1, 3, 5, 7], True, ["1", "3", "7"]), + (None, [1, 3, 5, 7], None, ["1", "3", "5", "7"]), + (True, [], False, ["5"]), + (True, [], True, ["1", "2", "3", "4", "8"]), + (True, [], None, ["1", "2", "3", "4", "5", "8"]), + (True, [1, 3, 5, 7], False, ["5"]), + (True, [1, 3, 5, 7], True, ["1", "3"]), + (True, [1, 3, 5, 7], None, ["1", "3", "5"]), + (True, [2, 4, 6, 8], True, ["2", "4", "8"]), + (True, [2, 4, 6, 8], None, ["2", "4", "8"]), + (False, [], False, ["6"]), + (False, [], True, ["7"]), + (False, [], None, ["6", "7"]), + (False, [1, 3, 5, 7], False, []), + (False, [1, 3, 5, 7], True, ["7"]), + (False, [1, 3, 5, 7], None, ["7"]), ], ) def test_count_studies__general_case( @@ -1190,20 +1203,20 @@ def test_count_studies__general_case( managed: t.Union[bool, None], study_ids: t.Sequence[str], exists: t.Union[bool, None], - expected_ids: t.Set[str], + expected_ids: t.List[str], ) -> None: test_workspace = "test-repository" icache: Mock = Mock(spec=ICache) repository = StudyMetadataRepository(cache_service=icache, session=db_session) - study_1 = VariantStudy(id=1) - study_2 = VariantStudy(id=2) - study_3 = VariantStudy(id=3) - study_4 = VariantStudy(id=4) - study_5 = RawStudy(id=5, missing=datetime.datetime.now(), workspace=DEFAULT_WORKSPACE_NAME) - study_6 = RawStudy(id=6, missing=datetime.datetime.now(), workspace=test_workspace) - study_7 = RawStudy(id=7, missing=None, workspace=test_workspace) - study_8 = RawStudy(id=8, missing=None, workspace=DEFAULT_WORKSPACE_NAME) + study_1 = VariantStudy(id=1, name="study-1") + study_2 = VariantStudy(id=2, name="study-2") + study_3 = VariantStudy(id=3, name="study-3") + study_4 = VariantStudy(id=4, name="study-4") + study_5 = RawStudy(id=5, name="study-5", missing=datetime.datetime.now(), workspace=DEFAULT_WORKSPACE_NAME) + study_6 = RawStudy(id=6, name="study-6", missing=datetime.datetime.now(), workspace=test_workspace) + study_7 = RawStudy(id=7, name="study-7", missing=None, workspace=test_workspace) + study_8 = RawStudy(id=8, name="study-8", missing=None, workspace=DEFAULT_WORKSPACE_NAME) db_session.add_all([study_1, study_2, study_3, study_4, study_5, study_6, study_7, study_8]) db_session.commit() diff --git a/tests/variantstudy/model/command/test_create_area.py b/tests/variantstudy/model/command/test_create_area.py index 62e01aeba4..330067db56 100644 --- a/tests/variantstudy/model/command/test_create_area.py +++ b/tests/variantstudy/model/command/test_create_area.py @@ -3,7 +3,7 @@ import pytest -from antarest.study.storage.rawstudy.model.filesystem.config.model import ENR_MODELLING, transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea @@ -14,7 +14,7 @@ class TestCreateArea: @pytest.mark.parametrize("version", [600, 650, 810, 830, 860]) - @pytest.mark.parametrize("enr_modelling", list(ENR_MODELLING)) + @pytest.mark.parametrize("enr_modelling", list(EnrModelling)) def test_apply( self, empty_study: FileStudy, @@ -132,7 +132,7 @@ def test_apply( assert (study_path / "input" / "thermal" / "clusters" / area_id / "list.ini").exists() # Renewable Clusters - if version >= 810 and empty_study.config.enr_modelling == ENR_MODELLING.CLUSTERS.value: + if version >= 810 and empty_study.config.enr_modelling == EnrModelling.CLUSTERS.value: assert (study_path / "input" / "renewables" / "clusters" / area_id).is_dir() assert (study_path / "input" / "renewables" / "clusters" / area_id / "list.ini").exists() diff --git a/tests/variantstudy/model/command/test_create_renewables_cluster.py b/tests/variantstudy/model/command/test_create_renewables_cluster.py index ecec2fd882..51e553bcb8 100644 --- a/tests/variantstudy/model/command/test_create_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_create_renewables_cluster.py @@ -1,10 +1,11 @@ import configparser import re +from unittest import mock import pytest from pydantic import ValidationError -from antarest.study.storage.rawstudy.model.filesystem.config.model import ENR_MODELLING, transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.common import CommandName @@ -16,7 +17,8 @@ class TestCreateRenewablesCluster: - def test_init(self, command_context: CommandContext): + # noinspection SpellCheckingInspection + def test_init(self, command_context: CommandContext) -> None: cl = CreateRenewablesCluster( area_id="foo", cluster_name="Cluster1", @@ -34,12 +36,13 @@ def test_init(self, command_context: CommandContext): assert cl.cluster_name == "Cluster1" assert cl.parameters == {"group": "Solar Thermal", "nominalcapacity": "2400", "unitcount": "2"} - def test_validate_cluster_name(self, command_context: CommandContext): + def test_validate_cluster_name(self, command_context: CommandContext) -> None: with pytest.raises(ValidationError, match="cluster_name"): CreateRenewablesCluster(area_id="fr", cluster_name="%", command_context=command_context, parameters={}) - def test_apply(self, empty_study: FileStudy, command_context: CommandContext): - empty_study.config.enr_modelling = ENR_MODELLING.CLUSTERS.value + def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> None: + empty_study.config.enr_modelling = EnrModelling.CLUSTERS.value + empty_study.config.version = 810 study_path = empty_study.config.study_path area_name = "DE" area_id = transform_name_to_id(area_name, lower=True) @@ -107,7 +110,8 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): flags=re.IGNORECASE, ) - def test_to_dto(self, command_context: CommandContext): + # noinspection SpellCheckingInspection + def test_to_dto(self, command_context: CommandContext) -> None: command = CreateRenewablesCluster( area_id="foo", cluster_name="Cluster1", @@ -127,7 +131,7 @@ def test_to_dto(self, command_context: CommandContext): } -def test_match(command_context: CommandContext): +def test_match(command_context: CommandContext) -> None: base = CreateRenewablesCluster( area_id="foo", cluster_name="foo", @@ -159,23 +163,25 @@ def test_match(command_context: CommandContext): assert base.get_inner_matrices() == [] -def test_revert(command_context: CommandContext): +def test_revert(command_context: CommandContext) -> None: base = CreateRenewablesCluster( - area_id="foo", - cluster_name="foo", + area_id="area_foo", + cluster_name="cl1", parameters={}, command_context=command_context, ) - assert CommandReverter().revert(base, [], None) == [ + file_study = mock.MagicMock(spec=FileStudy) + revert_cmd = CommandReverter().revert(base, [], file_study) + assert revert_cmd == [ RemoveRenewablesCluster( - area_id="foo", - cluster_id="foo", + area_id="area_foo", + cluster_id="cl1", command_context=command_context, ) ] -def test_create_diff(command_context: CommandContext): +def test_create_diff(command_context: CommandContext) -> None: base = CreateRenewablesCluster( area_id="foo", cluster_name="foo", diff --git a/tests/variantstudy/model/command/test_manage_binding_constraints.py b/tests/variantstudy/model/command/test_manage_binding_constraints.py index aab13307b1..d79f744960 100644 --- a/tests/variantstudy/model/command/test_manage_binding_constraints.py +++ b/tests/variantstudy/model/command/test_manage_binding_constraints.py @@ -4,7 +4,10 @@ import pytest from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( + BindingConstraintFrequency, + BindingConstraintOperator, +) from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_extractor import CommandExtractor from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter @@ -15,7 +18,6 @@ default_bc_hourly, default_bc_weekly_daily, ) -from antarest.study.storage.variantstudy.model.command.common import BindingConstraintOperator from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster @@ -79,7 +81,8 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm cfg_path = study_path / "input/bindingconstraints/bindingconstraints.ini" bd_config = IniReader().read(cfg_path) - assert bd_config.get("0") == { + + expected_bd_1 = { "name": "BD 1", "id": "bd 1", "enabled": True, @@ -88,14 +91,26 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm "operator": "less", "type": "hourly", } - assert bd_config.get("1") == { + expected_bd_2 = { "name": "BD 2", "id": "bd 2", "enabled": False, + "comments": "", "area1.cluster": 50.0, "operator": "both", "type": "daily", } + if empty_study.config.version >= 830: + expected_bd_1["filter-year-by-year"] = "" + expected_bd_1["filter-synthesis"] = "" + expected_bd_2["filter-year-by-year"] = "" + expected_bd_2["filter-synthesis"] = "" + if empty_study.config.version >= 870: + expected_bd_1["group"] = "default" + expected_bd_2["group"] = "default" + + assert bd_config.get("0") == expected_bd_1 + assert bd_config.get("1") == expected_bd_2 if empty_study.config.version < 870: weekly_values = default_bc_weekly_daily.tolist() @@ -122,14 +137,21 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm res = bind_update.apply(empty_study) assert res.status bd_config = IniReader().read(cfg_path) - assert bd_config.get("0") == { + expected_bd_1 = { "name": "BD 1", "id": "bd 1", "enabled": False, + "comments": "Hello", # comments are not updated "area1%area2": "800.0%30", "operator": "both", "type": "weekly", } + if empty_study.config.version >= 830: + expected_bd_1["filter-year-by-year"] = "" + expected_bd_1["filter-synthesis"] = "" + if empty_study.config.version >= 870: + expected_bd_1["group"] = "default" + assert bd_config.get("0") == expected_bd_1 remove_bind = RemoveBindingConstraint(id="bd 1", command_context=command_context) res3 = remove_bind.apply(empty_study) @@ -146,14 +168,21 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm bd_config = IniReader().read(cfg_path) assert len(bd_config) == 1 - assert bd_config.get("0") == { + expected_bd_2 = { "name": "BD 2", "id": "bd 2", "enabled": False, "area1.cluster": 50.0, + "comments": "", "operator": "both", "type": "daily", } + if empty_study.config.version >= 830: + expected_bd_2["filter-year-by-year"] = "" + expected_bd_2["filter-synthesis"] = "" + if empty_study.config.version >= 870: + expected_bd_2["group"] = "default" + assert bd_config.get("0") == expected_bd_2 def test_match(command_context: CommandContext): @@ -336,9 +365,10 @@ def test_revert(command_context: CommandContext): enabled=True, time_step=BindingConstraintFrequency.HOURLY, operator=BindingConstraintOperator.EQUAL, + filter_year_by_year="", + filter_synthesis="", coeffs={"a": [0.3]}, values=hourly_matrix_id, - comments=None, command_context=command_context, ) ] diff --git a/tests/variantstudy/model/command/test_remove_area.py b/tests/variantstudy/model/command/test_remove_area.py index 118d45e0d8..90c19d34b9 100644 --- a/tests/variantstudy/model/command/test_remove_area.py +++ b/tests/variantstudy/model/command/test_remove_area.py @@ -1,9 +1,11 @@ import pytest -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( + BindingConstraintFrequency, + BindingConstraintOperator, +) from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.model.command.common import BindingConstraintOperator from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster diff --git a/tests/variantstudy/model/command/test_remove_cluster.py b/tests/variantstudy/model/command/test_remove_cluster.py index faae51f5c7..f0dd04f2b1 100644 --- a/tests/variantstudy/model/command/test_remove_cluster.py +++ b/tests/variantstudy/model/command/test_remove_cluster.py @@ -2,10 +2,12 @@ import pytest from checksumdir import dirhash -from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import BindingConstraintFrequency +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( + BindingConstraintFrequency, + BindingConstraintOperator, +) from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.model.command.common import BindingConstraintOperator from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster diff --git a/tests/variantstudy/model/command/test_remove_renewables_cluster.py b/tests/variantstudy/model/command/test_remove_renewables_cluster.py index 26eaa52837..42573e8b74 100644 --- a/tests/variantstudy/model/command/test_remove_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_remove_renewables_cluster.py @@ -1,6 +1,6 @@ from checksumdir import dirhash -from antarest.study.storage.rawstudy.model.filesystem.config.model import ENR_MODELLING, transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_renewables_cluster import CreateRenewablesCluster @@ -11,7 +11,7 @@ class TestRemoveRenewablesCluster: def test_apply(self, empty_study: FileStudy, command_context: CommandContext): - empty_study.config.enr_modelling = ENR_MODELLING.CLUSTERS.value + empty_study.config.enr_modelling = EnrModelling.CLUSTERS.value empty_study.config.version = 810 area_name = "Area_name" area_id = transform_name_to_id(area_name) diff --git a/tests/variantstudy/model/test_variant_model.py b/tests/variantstudy/model/test_variant_model.py index 63ac7293b8..98c73b949f 100644 --- a/tests/variantstudy/model/test_variant_model.py +++ b/tests/variantstudy/model/test_variant_model.py @@ -12,10 +12,10 @@ from antarest.study.model import RawStudy, StudyAdditionalData from antarest.study.storage.rawstudy.raw_study_service import RawStudyService from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants -from antarest.study.storage.variantstudy.model.model import CommandDTO, GenerationResultInfoDTO +from antarest.study.storage.variantstudy.model.model import CommandDTO from antarest.study.storage.variantstudy.snapshot_generator import SnapshotGenerator from antarest.study.storage.variantstudy.variant_study_service import VariantStudyService -from tests.helpers import with_db_context +from tests.helpers import AnyUUID, with_db_context class TestVariantStudyService: @@ -141,13 +141,33 @@ def test_commands_service( repository=variant_study_service.repository, ) results = generator.generate_snapshot(saved_id, jwt_user, denormalize=False) - assert results == GenerationResultInfoDTO( - success=True, - details=[ - ("create_area", True, "Area 'Yes' created"), - ("create_area", True, "Area 'No' created"), - ("create_link", True, "Link between 'no' and 'yes' created"), - ("create_cluster", True, "Thermal cluster 'cl1' added to area 'yes'."), + assert results.dict() == { + "success": True, + "details": [ + { + "id": AnyUUID(), + "name": "create_area", + "status": True, + "msg": "Area 'Yes' created", + }, + { + "id": AnyUUID(), + "name": "create_area", + "status": True, + "msg": "Area 'No' created", + }, + { + "id": AnyUUID(), + "name": "create_link", + "status": True, + "msg": "Link between 'no' and 'yes' created", + }, + { + "id": AnyUUID(), + "name": "create_cluster", + "status": True, + "msg": "Thermal cluster 'cl1' added to area 'yes'.", + }, ], - ) + } assert study.snapshot.id == study.id diff --git a/tests/variantstudy/test_command_factory.py b/tests/variantstudy/test_command_factory.py index 09f45d30f3..5f9af93ee2 100644 --- a/tests/variantstudy/test_command_factory.py +++ b/tests/variantstudy/test_command_factory.py @@ -125,17 +125,7 @@ def setup_class(self): ), CommandDTO( action=CommandName.CREATE_BINDING_CONSTRAINT.value, - args={ - "name": "name", - "enabled": True, - "time_step": "hourly", - "operator": "equal", - "coeffs": {}, - "values": "values", - "comments": "", - "filter_synthesis": "", - "filter_year_by_year": "", - }, + args={"name": "name"}, ), CommandDTO( action=CommandName.CREATE_BINDING_CONSTRAINT.value, @@ -145,11 +135,8 @@ def setup_class(self): "enabled": True, "time_step": "hourly", "operator": "equal", - "coeffs": {}, "values": "values", - "comments": "", - "filter_synthesis": "", - "filter_year_by_year": "", + "group": "group_1", }, ], ), @@ -160,11 +147,7 @@ def setup_class(self): "enabled": True, "time_step": "hourly", "operator": "equal", - "coeffs": {}, "values": "values", - "comments": "", - "filter_synthesis": "", - "filter_year_by_year": "", }, ), CommandDTO( @@ -175,10 +158,6 @@ def setup_class(self): "enabled": True, "time_step": "hourly", "operator": "equal", - "coeffs": {}, - "comments": "", - "filter_synthesis": "", - "filter_year_by_year": "", } ], ), diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 3baefa00f7..10711529c7 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -1,12 +1,12 @@ { "name": "antares-web", - "version": "2.16.7", + "version": "2.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "antares-web", - "version": "2.16.7", + "version": "2.17", "dependencies": { "@emotion/react": "11.11.1", "@emotion/styled": "11.11.0", diff --git a/webapp/package.json b/webapp/package.json index 4a4c3e5645..106345bf84 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -1,6 +1,6 @@ { "name": "antares-web", - "version": "2.16.7", + "version": "2.17", "private": true, "type": "module", "scripts": { diff --git a/webapp/public/locales/en/main.json b/webapp/public/locales/en/main.json index 4ce793b79d..ccfac647f2 100644 --- a/webapp/public/locales/en/main.json +++ b/webapp/public/locales/en/main.json @@ -32,6 +32,8 @@ "global.open": "Open", "global.name": "Name", "global.import": "Import", + "global.import.fromFile": "From a file", + "global.import.fromDatabase": "From database", "global.importHint": "Click or drag and drop here", "global.launch": "Launch", "global.jobs": "Jobs", @@ -48,6 +50,7 @@ "global.emptyString": "Empty string", "global.edit": "Edit", "global.download": "Download", + "global.download.error": "Download failed", "global.generate": "Generate", "global.user": "User", "global.users": "Users", @@ -67,6 +70,8 @@ "global.assign": "Assign", "global.undo": "Undo", "global.redo": "Redo", + "global.total": "Total", + "global.enabled": "Enabled", "global.time.hourly": "Hourly", "global.time.daily": "Daily", "global.time.weekly": "Weekly", @@ -78,6 +83,8 @@ "global.error.failedtoretrievejobs": "Failed to retrieve job information", "global.error.failedtoretrievelogs": "Failed to retrieve job logs", "global.error.failedtoretrievedownloads": "Failed to retrieve downloads list", + "global.error.create": "Creation failed", + "global.error.delete": "Deletion failed", "global.area.add": "Add an area", "login.error": "Failed to authenticate", "tasks.title": "Tasks", @@ -91,6 +98,7 @@ "data.title": "Data", "dialog.title.confirmation": "Confirmation", "dialog.message.logout": "Are you sure you want to logout?", + "dialog.message.confirmDelete": "Do you confirm the deletion?", "button.collapse": "Collapse", "button.expand": "Expand", "button.yes": "Yes", @@ -114,10 +122,12 @@ "form.submit.inProgress": "The form is being submitted. Are you sure you want to leave the page?", "form.asyncDefaultValues.error": "Failed to get values", "form.field.required": "Field required", - "form.field.duplicate": "Value already exists: {{0}}", - "form.field.minLength": "{{0}} character(s) minimum", + "form.field.duplicate": "Value already exists", + "form.field.minLength": "{{length}} character(s) minimum", + "form.field.maxLength": "{{length}} character(s) maximum", "form.field.minValue": "The minimum value is {{0}}", "form.field.maxValue": "The maximum value is {{0}}", + "form.field.invalidNumber": "Invalid number", "form.field.notAllowedValue": "Not allowed value", "form.field.specialChars": "Special characters allowed: {{0}}", "form.field.specialCharsNotAllowed": "Special characters are not allowed", @@ -194,7 +204,7 @@ "settings.error.groupRolesSave": "Role(s) for group '{{0}}' not saved", "settings.error.tokenSave": "'{{0}}' token not saved", "settings.error.updateMaintenance": "Maintenance mode not updated", - "settings.user.form.confirmPassword":"Confirm password", + "settings.user.form.confirmPassword": "Confirm password", "settings.user.form.error.passwordMismatch": "Passwords do not match", "launcher.additionalModes": "Additional modes", "launcher.autoUnzip": "Automatically unzip", @@ -326,6 +336,16 @@ "study.configuration.general.mcScenarioPlaylist.weight": "Weight", "study.configuration.general.geographicTrimming": "Geographic trimming", "study.configuration.general.thematicTrimming": "Thematic trimming", + "study.configuration.general.thematicTrimming.action.enableAll": "Enable all", + "study.configuration.general.thematicTrimming.action.disableAll": "Disable all", + "study.configuration.general.thematicTrimming.action.reverse": "Reverse", + "study.configuration.general.thematicTrimming.action.collapseAll": "Collapse all", + "study.configuration.general.thematicTrimming.group.general": "General", + "study.configuration.general.thematicTrimming.group.generationHydro": "Generation / Hydro", + "study.configuration.general.thematicTrimming.group.generationRenewables": "Generation / Renewables", + "study.configuration.general.thematicTrimming.group.generationStStorages": "Generation / Short-Term Storages", + "study.configuration.general.thematicTrimming.group.generationThermals": "Generation / Thermals", + "study.configuration.general.thematicTrimming.group.links": "Links", "study.configuration.general.filtering": "Filtering", "study.configuration.optimization.legend.general": "General", "study.configuration.optimization.legend.links": "Links", @@ -382,8 +402,9 @@ "study.configuration.advancedParameters.simulationCores": "Simulation cores", "study.configuration.advancedParameters.renewableGenerationModeling": "Renewable generation modeling", "study.configuration.economicOpt": "Economic Opt.", - "study.configuration.geographicTrimmingAreas": "Geographic Trimming (areas)", - "study.configuration.geographicTrimmingLinks": "Geographic Trimming (links)", + "study.configuration.geographicTrimmingAreas": "Geographic Trimming (Areas)", + "study.configuration.geographicTrimmingLinks": "Geographic Trimming (Links)", + "study.configuration.geographicTrimmingBindingConstraints": "Geographic Trimming (Binding Constraints)", "study.modelization.properties": "Properties", "study.modelization.properties.energyCost": "Energy cost (€/Wh)", "study.modelization.properties.unsupplied": "Unsupplied", @@ -468,10 +489,13 @@ "study.modelization.clusters.thermal.op5": "Other pollutant 5 (t/MWh)", "study.modelization.clusters.operatingCosts": "Operating costs", "study.modelization.clusters.marginalCost": "Marginal cost (€/MWh)", - "study.modelization.clusters.fixedCost": "Fixed costs (€/h)", + "study.modelization.clusters.fixedCost": "Fixed O&M costs (€/h)", "study.modelization.clusters.startupCost": "Startup cost (€)", "study.modelization.clusters.marketBidCost": "Market bid cost (€/MWh)", - "study.modelization.clusters.spreadCost": "Spread cost (€/MWh)", + "study.modelization.clusters.spreadCost": "Random spread (€/MWh)", + "study.modelization.clusters.variableOMCost": "Variable O&M cost (€/MWh)", + "study.modelization.clusters.costGeneration": "TS Cost", + "study.modelization.clusters.efficiency": "Efficiency (%)", "study.modelization.clusters.timeSeriesGen": "Time-Series generation", "study.modelization.clusters.genTs": "Generate Time-Series", "study.modelization.clusters.volatilityForced": "Volatility forced", @@ -481,10 +505,12 @@ "study.modelization.clusters.matrix.common": "Common", "study.modelization.clusters.matrix.tsGen": "TS generator", "study.modelization.clusters.matrix.timeSeries": "Time-Series", + "study.modelization.clusters.matrix.fuelCost": "Fuel Cost", + "study.modelization.clusters.matrix.co2Cost": "CO2 Cost", "study.modelization.clusters.backClusterList": "Back to cluster list", "study.modelization.clusters.tsInterpretation": "TS interpretation", - "study.modelization.clusters.group": "Group", - "studies.modelization.clusters.question.delete": "Are you sure you want to delete this cluster?", + "studies.modelization.clusters.question.delete_one": "Are you sure you want to delete this cluster?", + "studies.modelization.clusters.question.delete_other": "Are you sure you want to delete these {{count}} clusters?", "study.modelization.bindingConst.comments": "Comments", "study.modelization.bindingConst.type": "Type", "study.modelization.bindingConst.constraints": "Constraints", @@ -723,5 +749,11 @@ "results.error.jobs": "Failed to retrieve study launch jobs", "results.error.outputs": "Failed to retrieve study output list", "results.noOutputs": "No outputs", - "results.question.deleteOutput": "Are you sure you want to delete the output {{outputname}}?" + "results.question.deleteOutput": "Are you sure you want to delete the output {{outputname}}?", + "tableMode.type.areas": "Areas", + "tableMode.type.links": "Links", + "tableMode.type.thermals": "Thermals", + "tableMode.type.renewables": "Renewables", + "tableMode.type.st-storages": "Short-Term Storages", + "tableMode.type.binding-constraints": "Binding Constraints" } diff --git a/webapp/public/locales/fr/main.json b/webapp/public/locales/fr/main.json index 89afd931dc..ef12be54ec 100644 --- a/webapp/public/locales/fr/main.json +++ b/webapp/public/locales/fr/main.json @@ -32,6 +32,8 @@ "global.open": "Ouvrir", "global.name": "Nom", "global.import": "Importer", + "global.import.fromFile": "Depuis un fichier", + "global.import.fromDatabase": "Depuis la base de donnée", "global.importHint": "Cliquer ou glisser ici", "global.launch": "Lancer", "global.jobs": "Tâches", @@ -48,6 +50,7 @@ "global.emptyString": "Chaine de caractères vide", "global.edit": "Editer", "global.download": "Télécharger", + "global.download.error": "Le téléchargement a échoué", "global.generate": "Générer", "global.user": "Utilisateur", "global.users": "Utilisateurs", @@ -67,6 +70,8 @@ "global.assign": "Assigner", "global.undo": "Annuler", "global.redo": "Rétablir", + "global.total": "Total", + "global.enabled": "Activé", "global.time.hourly": "Horaire", "global.time.daily": "Journalier", "global.time.weekly": "Hebdomadaire", @@ -78,6 +83,8 @@ "global.error.failedtoretrievejobs": "Échec de la récupération des tâches", "global.error.failedtoretrievelogs": "Échec de la récupération des logs", "global.error.failedtoretrievedownloads": "Échec de la récupération des exports", + "global.error.create": "La création a échoué", + "global.error.delete": "La suppression a échoué", "global.area.add": "Ajouter une zone", "login.error": "Échec de l'authentification", "tasks.title": "Tâches", @@ -91,6 +98,7 @@ "data.title": "Données", "dialog.title.confirmation": "Confirmation", "dialog.message.logout": "Êtes vous sûr de vouloir vous déconnecter ?", + "dialog.message.confirmDelete": "Confirmez-vous la suppression ?", "button.collapse": "Réduire", "button.expand": "Étendre", "button.yes": "Oui", @@ -114,10 +122,12 @@ "form.submit.inProgress": "Le formulaire est en cours de soumission. Etes-vous sûr de vouloir quitter la page ?", "form.asyncDefaultValues.error": "Impossible d'obtenir les valeurs", "form.field.required": "Champ requis", - "form.field.duplicate": "Cette valeur existe déjà: {{0}}", - "form.field.minLength": "{{0}} caractère(s) minimum", + "form.field.duplicate": "Cette valeur existe déjà", + "form.field.minLength": "{{length}} caractère(s) minimum", + "form.field.maxLength": "{{length}} caractère(s) maximum", "form.field.minValue": "La valeur minimum est {{0}}", "form.field.maxValue": "La valeur maximum est {{0}}", + "form.field.invalidNumber": "Nombre invalide", "form.field.notAllowedValue": "Valeur non autorisée", "form.field.specialChars": "Caractères spéciaux autorisés: {{0}}", "form.field.specialCharsNotAllowed": "Les caractères spéciaux ne sont pas autorisés", @@ -326,6 +336,16 @@ "study.configuration.general.mcScenarioPlaylist.weight": "Weight", "study.configuration.general.geographicTrimming": "Geographic trimming", "study.configuration.general.thematicTrimming": "Thematic trimming", + "study.configuration.general.thematicTrimming.action.enableAll": "Activer tout", + "study.configuration.general.thematicTrimming.action.disableAll": "Désactiver tout", + "study.configuration.general.thematicTrimming.action.reverse": "Inverser", + "study.configuration.general.thematicTrimming.action.collapseAll": "Réduire tout", + "study.configuration.general.thematicTrimming.group.general": "Général", + "study.configuration.general.thematicTrimming.group.generationHydro": "Génération / Hydro", + "study.configuration.general.thematicTrimming.group.generationRenewables": "Génération / Renouvelables", + "study.configuration.general.thematicTrimming.group.generationStStorages": "Génération / Stockages court terme", + "study.configuration.general.thematicTrimming.group.generationThermals": "Génération / Thermiques", + "study.configuration.general.thematicTrimming.group.links": "Liens", "study.configuration.general.filtering": "Filtering", "study.configuration.optimization.legend.general": "Générale", "study.configuration.optimization.legend.links": "Liens", @@ -384,6 +404,7 @@ "study.configuration.economicOpt": "Options économiques", "study.configuration.geographicTrimmingAreas": "Filtre géographique (zones)", "study.configuration.geographicTrimmingLinks": "Filtre géographique (liens)", + "study.configuration.geographicTrimmingBindingConstraints": "Filtre géographique (contraintes couplantes)", "study.modelization.properties": "Propriétés", "study.modelization.properties.energyCost": "Coût de l'énergie", "study.modelization.properties.unsupplied": "Non distribuée", @@ -467,11 +488,14 @@ "study.modelization.clusters.thermal.op4": "Autre polluant 4 (t/MWh)", "study.modelization.clusters.thermal.op5": "Autre polluant 5 (t/MWh)", "study.modelization.clusters.operatingCosts": "Coûts d'exploitation", - "study.modelization.clusters.marginalCost": "Coûts marginaux (€/MWh)", - "study.modelization.clusters.fixedCost": "Coûts fixes (€/h)", + "study.modelization.clusters.marginalCost": "Coût marginal (€/MWh)", + "study.modelization.clusters.fixedCost": "Coûts fixes O&M (€/h)", "study.modelization.clusters.startupCost": "Coûts de démarrage (€)", "study.modelization.clusters.marketBidCost": "Offre de marché (€/MWh)", - "study.modelization.clusters.spreadCost": "Spread (€/MWh)", + "study.modelization.clusters.spreadCost": "Random Spread (€/MWh)", + "study.modelization.clusters.variableOMCost": "Coût variable O&M (€/MWh)", + "study.modelization.clusters.costGeneration": "TS Cost", + "study.modelization.clusters.efficiency": "Rendement (%)", "study.modelization.clusters.timeSeriesGen": "Génération des Séries temporelles", "study.modelization.clusters.genTs": "Générer des Séries temporelles", "study.modelization.clusters.volatilityForced": "Volatilité forcée", @@ -481,10 +505,12 @@ "study.modelization.clusters.matrix.common": "Common", "study.modelization.clusters.matrix.tsGen": "TS generator", "study.modelization.clusters.matrix.timeSeries": "Séries temporelles", + "study.modelization.clusters.matrix.fuelCost": "Fuel Cost", + "study.modelization.clusters.matrix.co2Cost": "CO2 Cost", "study.modelization.clusters.backClusterList": "Retour à la liste des clusters", "study.modelization.clusters.tsInterpretation": "TS interpretation", - "study.modelization.clusters.group": "Groupes", - "studies.modelization.clusters.question.delete": "Êtes-vous sûr de vouloir supprimer ce cluster ?", + "studies.modelization.clusters.question.delete_one": "Êtes-vous sûr de vouloir supprimer ce cluster ?", + "studies.modelization.clusters.question.delete_other": "Êtes-vous sûr de vouloir supprimer ces {{count}} clusters ?", "study.modelization.bindingConst.comments": "Commentaires", "study.modelization.bindingConst.type": "Type", "study.modelization.bindingConst.constraints": "Contraintes", @@ -723,5 +749,11 @@ "results.error.jobs": "Erreur lors de la récupération des tâches de lancement", "results.error.outputs": "Erreur lors de la récupération des sorties de l'étude", "results.noOutputs": "Aucune sorties", - "results.question.deleteOutput": "Êtes-vous sûr de vouloir supprimer le résultat de simulation {{outputname}} ?" + "results.question.deleteOutput": "Êtes-vous sûr de vouloir supprimer le résultat de simulation {{outputname}} ?", + "tableMode.type.areas": "Zones", + "tableMode.type.links": "Liens", + "tableMode.type.thermals": "Thermiques", + "tableMode.type.renewables": "Renouvelables", + "tableMode.type.st-storages": "Stockages court terme", + "tableMode.type.binding-constraints": "Contraintes couplantes" } diff --git a/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/GroupForm.tsx b/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/GroupForm.tsx index e17dee147b..39e8e26ca4 100644 --- a/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/GroupForm.tsx +++ b/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/GroupForm.tsx @@ -115,6 +115,7 @@ function GroupForm(props: UseFormReturnPlus) { validateString(v, { existingValues: existingGroups, excludedValues: RESERVED_GROUP_NAMES, + editedValue: defaultValues?.name, // prevent false duplicates on update form }), })} /> diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/AdequacyPatch/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/AdequacyPatch/index.tsx index 9e301154bd..9793e24395 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/AdequacyPatch/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/AdequacyPatch/index.tsx @@ -53,7 +53,7 @@ function AdequacyPatch() { content: ( ), diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/index.tsx index 01a64cfc79..182aad6bcc 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/index.tsx @@ -1,4 +1,12 @@ -import { Box, Button, Divider, Unstable_Grid2 as Grid } from "@mui/material"; +import { + Accordion, + AccordionDetails, + AccordionSummary, + Button, + Divider, + Unstable_Grid2 as Grid, +} from "@mui/material"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import * as R from "ramda"; import * as RA from "ramda-adjunct"; import { useState } from "react"; @@ -12,11 +20,17 @@ import SearchFE from "../../../../../../../common/fieldEditors/SearchFE"; import { isSearchMatching } from "../../../../../../../../utils/stringUtils"; import FormDialog from "../../../../../../../common/dialogs/FormDialog"; import { - getFieldNames, - getThematicTrimmingFormFields, - setThematicTrimmingConfig, - ThematicTrimmingFormFields, + THEMATIC_TRIMMING_GROUPS, + getFieldLabelsForGroup, + type ThematicTrimmingGroup, } from "./utils"; +import type { ThematicTrimmingConfig } from "../../../../../../../../services/api/studies/config/thematicTrimming/types"; +import { + getThematicTrimmingConfig, + setThematicTrimmingConfig, +} from "../../../../../../../../services/api/studies/config/thematicTrimming"; +import { useTranslation } from "react-i18next"; +import Stack from "@mui/material/Stack"; interface Props { study: StudyMetadata; @@ -26,27 +40,41 @@ interface Props { function ThematicTrimmingDialog(props: Props) { const { study, open, onClose } = props; + const { t } = useTranslation(); const [search, setSearch] = useState(""); + const [expanded, setExpanded] = useState(() => + THEMATIC_TRIMMING_GROUPS.reduce( + (acc, group) => ({ ...acc, [group]: true }), + {} as Partial>, + ), + ); + + const commonBtnProps = { + color: "secondary", + // Disable all buttons when search is active to remove confusion + // about which fields are being affected by the action (search or all) + disabled: !!search, + } as const; + //////////////////////////////////////////////////////////////// // Event Handlers //////////////////////////////////////////////////////////////// const handleUpdateConfig = - (api: UseFormReturnPlus, fn: RA.Pred) => () => { - setSearch(""); - - const valuesArr = R.toPairs(api.getValues()).filter(Boolean); - - valuesArr.forEach(([key, val]) => { - api.setValue(key, fn(val)); - }); + (api: UseFormReturnPlus, fn: RA.Pred) => () => { + R.toPairs(api.getValues()) + .filter(Boolean) + .forEach(([key, val]) => { + api.setValue(key, fn(val)); + }); }; - const handleSubmit = ( - data: SubmitHandlerPlus, - ) => { - return setThematicTrimmingConfig(study.id, data.values); + const handleSubmit = (data: SubmitHandlerPlus) => { + return setThematicTrimmingConfig({ + studyId: study.id, + config: data.values, + }); }; //////////////////////////////////////////////////////////////// @@ -59,7 +87,7 @@ function ThematicTrimmingDialog(props: Props) { open={open} title="Thematic Trimming" config={{ - defaultValues: () => getThematicTrimmingFormFields(study.id), + defaultValues: () => getThematicTrimmingConfig({ studyId: study.id }), }} onSubmit={handleSubmit} onCancel={onClose} @@ -79,49 +107,83 @@ function ThematicTrimmingDialog(props: Props) { > {(api) => ( <> - + setSearch("")} size="small" /> - - - - - - - - {getFieldNames(api.getValues()) + + + + + {THEMATIC_TRIMMING_GROUPS.map((group) => { + const fields = getFieldLabelsForGroup(api.getValues(), group) .filter(([, label]) => isSearchMatching(search, label)) .map(([name, label]) => ( - ))} - + )); + + return fields.length > 0 ? ( + { + setExpanded((prev) => ({ ...prev, [group]: isExpanded })); + }} + disableGutters + > + }> + {t( + `study.configuration.general.thematicTrimming.group.${group}`, + )} + + + + {fields} + + + + ) : null; + })} )} diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/utils.ts b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/utils.ts index 89569ba05c..61b29afa09 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/utils.ts @@ -1,228 +1,146 @@ import * as R from "ramda"; -import { StudyMetadata } from "../../../../../../../../common/types"; -import client from "../../../../../../../../services/api/client"; +import { ThematicTrimmingConfig } from "../../../../../../../../services/api/studies/config/thematicTrimming/types"; +import { O } from "ts-toolbelt"; -export interface ThematicTrimmingFormFields { - ovCost: boolean; - opCost: boolean; - mrgPrice: boolean; - co2Emis: boolean; - dtgByPlant: boolean; - balance: boolean; - rowBal: boolean; - psp: boolean; - miscNdg: boolean; - load: boolean; - hRor: boolean; - wind: boolean; - solar: boolean; - nuclear: boolean; - lignite: boolean; - coal: boolean; - gas: boolean; - oil: boolean; - mixFuel: boolean; - miscDtg: boolean; - hStor: boolean; - hPump: boolean; - hLev: boolean; - hInfl: boolean; - hOvfl: boolean; - hVal: boolean; - hCost: boolean; - unspEnrg: boolean; - spilEnrg: boolean; - lold: boolean; - lolp: boolean; - avlDtg: boolean; - dtgMrg: boolean; - maxMrg: boolean; - npCost: boolean; - npCostByPlant: boolean; - nodu: boolean; - noduByPlant: boolean; - flowLin: boolean; - ucapLin: boolean; - loopFlow: boolean; - flowQuad: boolean; - congFeeAlg: boolean; - congFeeAbs: boolean; - margCost: boolean; - congProbPlus: boolean; - congProbMinus: boolean; - hurdleCost: boolean; - // Study version >= 810 - resGenerationByPlant?: boolean; - miscDtg2?: boolean; - miscDtg3?: boolean; - miscDtg4?: boolean; - windOffshore?: boolean; - windOnshore?: boolean; - solarConcrt?: boolean; - solarPv?: boolean; - solarRooft?: boolean; - renw1?: boolean; - renw2?: boolean; - renw3?: boolean; - renw4?: boolean; - // Study version >= 830 - dens?: boolean; - profitByPlant?: boolean; - // Study version >= 860 - stsInjByPlant?: boolean; - stsWithdrawalByPlant?: boolean; - stsLvlByPlant?: boolean; - stsCashflowByCluster?: boolean; - pspOpenInjection?: boolean; - pspOpenWithdrawal?: boolean; - pspOpenLevel?: boolean; - pspClosedInjection?: boolean; - pspClosedWithdrawal?: boolean; - pspClosedLevel?: boolean; - pondageInjection?: boolean; - pondageWithdrawal?: boolean; - pondageLevel?: boolean; - batteryInjection?: boolean; - batteryWithdrawal?: boolean; - batteryLevel?: boolean; - other1Injection?: boolean; - other1Withdrawal?: boolean; - other1Level?: boolean; - other2Injection?: boolean; - other2Withdrawal?: boolean; - other2Level?: boolean; - other3Injection?: boolean; - other3Withdrawal?: boolean; - other3Level?: boolean; - other4Injection?: boolean; - other4Withdrawal?: boolean; - other4Level?: boolean; - other5Injection?: boolean; - other5Withdrawal?: boolean; - other5Level?: boolean; -} +export const THEMATIC_TRIMMING_GROUPS = [ + "general", + "generationHydro", + "generationRenewables", + "generationStStorages", + "generationThermals", + "links", +] as const; + +export type ThematicTrimmingGroup = (typeof THEMATIC_TRIMMING_GROUPS)[number]; -const keysMap: Record = { - ovCost: "OV. COST", - opCost: "OP. COST", - mrgPrice: "MRG. PRICE", - co2Emis: "CO2 EMIS.", - dtgByPlant: "DTG by plant", - balance: "BALANCE", - rowBal: "ROW BAL.", - psp: "PSP", - miscNdg: "MISC. NDG", - load: "LOAD", - hRor: "H. ROR", - wind: "WIND", - solar: "SOLAR", - nuclear: "NUCLEAR", - lignite: "LIGNITE", - coal: "COAL", - gas: "GAS", - oil: "OIL", - mixFuel: "MIX. FUEL", - miscDtg: "MISC. DTG", - hStor: "H. STOR", - hPump: "H. PUMP", - hLev: "H. LEV", - hInfl: "H. INFL", - hOvfl: "H. OVFL", - hVal: "H. VAL", - hCost: "H. COST", - unspEnrg: "UNSP. ENRG", - spilEnrg: "SPIL. ENRG", - lold: "LOLD", - lolp: "LOLP", - avlDtg: "AVL DTG", - dtgMrg: "DTG MRG", - maxMrg: "MAX MRG", - npCost: "NP COST", - npCostByPlant: "NP Cost by plant", - nodu: "NODU", - noduByPlant: "NODU by plant", - flowLin: "FLOW LIN.", - ucapLin: "UCAP LIN.", - loopFlow: "LOOP FLOW", - flowQuad: "FLOW QUAD.", - congFeeAlg: "CONG. FEE (ALG.)", - congFeeAbs: "CONG. FEE (ABS.)", - margCost: "MARG. COST", - congProbPlus: "CONG. PROB +", - congProbMinus: "CONG. PROB -", - hurdleCost: "HURDLE COST", - // Study version >= 810 - resGenerationByPlant: "RES generation by plant", - miscDtg2: "MISC. DTG 2", - miscDtg3: "MISC. DTG 3", - miscDtg4: "MISC. DTG 4", - windOffshore: "WIND OFFSHORE", - windOnshore: "WIND ONSHORE", - solarConcrt: "SOLAR CONCRT.", - solarPv: "SOLAR PV", - solarRooft: "SOLAR ROOFT", - renw1: "RENW. 1", - renw2: "RENW. 2", - renw3: "RENW. 3", - renw4: "RENW. 4", - // Study version >= 830 - dens: "DENS", - profitByPlant: "Profit by plant", - // Study version >= 860 - stsInjByPlant: "STS inj by plant", - stsWithdrawalByPlant: "STS withdrawal by plant", - stsLvlByPlant: "STS lvl by plant", - stsCashflowByCluster: "STS Cashflow By Cluster", - pspOpenInjection: "PSP_open_injection", - pspOpenWithdrawal: "PSP_open_withdrawal", - pspOpenLevel: "PSP_open_level", - pspClosedInjection: "PSP_closed_injection", - pspClosedWithdrawal: "PSP_closed_withdrawal", - pspClosedLevel: "PSP_closed_level", - pondageInjection: "Pondage_injection", - pondageWithdrawal: "Pondage_withdrawal", - pondageLevel: "Pondage_level", - batteryInjection: "Battery_injection", - batteryWithdrawal: "Battery_withdrawal", - batteryLevel: "Battery_level", - other1Injection: "Other1_injection", - other1Withdrawal: "Other1_withdrawal", - other1Level: "Other1_level", - other2Injection: "Other2_injection", - other2Withdrawal: "Other2_withdrawal", - other2Level: "Other2_level", - other3Injection: "Other3_injection", - other3Withdrawal: "Other3_withdrawal", - other3Level: "Other3_level", - other4Injection: "Other4_injection", - other4Withdrawal: "Other4_withdrawal", - other4Level: "Other4_level", - other5Injection: "Other5_injection", - other5Withdrawal: "Other5_withdrawal", - other5Level: "Other5_level", +const fieldLabelsByGroup: Record< + ThematicTrimmingGroup, + Partial> +> = { + general: { + balance: "BALANCE", + dens: "DENS", + load: "LOAD", + lold: "LOLD", + lolp: "LOLP", + miscNdg: "MISC. NDG", + mrgPrice: "MRG. PRICE", + opCost: "OP. COST", + ovCost: "OV. COST", + rowBal: "ROW BAL.", + spilEnrg: "SPIL. ENRG", + unspEnrg: "UNSP. ENRG", + }, + generationHydro: { + hCost: "H. COST", + hInfl: "H. INFL", + hLev: "H. LEV", + hOvfl: "H. OVFL", + hPump: "H. PUMP", + hRor: "H. ROR", + hStor: "H. STOR", + hVal: "H. VAL", + psp: "PSP", + }, + generationRenewables: { + renw1: "RENW. 1", + renw2: "RENW. 2", + renw3: "RENW. 3", + renw4: "RENW. 4", + resGenerationByPlant: "RES GENERATION BY PLANT", + solar: "SOLAR", + solarConcrt: "SOLAR CONCRT.", + solarPv: "SOLAR PV", + solarRooft: "SOLAR ROOFT", + wind: "WIND", + windOffshore: "WIND OFFSHORE", + windOnshore: "WIND ONSHORE", + }, + generationStStorages: { + batteryInjection: "BATTERY INJECTION", + batteryLevel: "BATTERY LEVEL", + batteryWithdrawal: "BATTERY WITHDRAWAL", + other1Injection: "OTHER1 INJECTION", + other1Level: "OTHER1 LEVEL", + other1Withdrawal: "OTHER1 WITHDRAWAL", + other2Injection: "OTHER2 INJECTION", + other2Level: "OTHER2 LEVEL", + other2Withdrawal: "OTHER2 WITHDRAWAL", + other3Injection: "OTHER3 INJECTION", + other3Level: "OTHER3 LEVEL", + other3Withdrawal: "OTHER3 WITHDRAWAL", + other4Injection: "OTHER4 INJECTION", + other4Level: "OTHER4 LEVEL", + other4Withdrawal: "OTHER4 WITHDRAWAL", + other5Injection: "OTHER5 INJECTION", + other5Level: "OTHER5 LEVEL", + other5Withdrawal: "OTHER5 WITHDRAWAL", + pondageInjection: "PONDAGE INJECTION", + pondageLevel: "PONDAGE LEVEL", + pondageWithdrawal: "PONDAGE WITHDRAWAL", + pspClosedInjection: "PSP CLOSED INJECTION", + pspClosedLevel: "PSP CLOSED LEVEL", + pspClosedWithdrawal: "PSP CLOSED WITHDRAWAL", + pspOpenInjection: "PSP OPEN INJECTION", + pspOpenLevel: "PSP OPEN LEVEL", + pspOpenWithdrawal: "PSP OPEN WITHDRAWAL", + stsCashflowByCluster: "STS CASHFLOW BY CLUSTER", + stsInjByPlant: "STS INJ BY PLANT", + stsLvlByPlant: "STS LVL BY PLANT", + stsWithdrawalByPlant: "STS WITHDRAWAL BY PLANT", + }, + generationThermals: { + avlDtg: "AVL DTG", + co2Emis: "CO2 EMIS.", + coal: "COAL", + dtgByPlant: "DTG BY PLANT", + dtgMrg: "DTG MRG", + gas: "GAS", + lignite: "LIGNITE", + maxMrg: "MAX MRG", + miscDtg: "MISC. DTG", + miscDtg2: "MISC. DTG 2", + miscDtg3: "MISC. DTG 3", + miscDtg4: "MISC. DTG 4", + mixFuel: "MIX. FUEL", + nodu: "NODU", + noduByPlant: "NODU BY PLANT", + npCost: "NP COST", + npCostByPlant: "NP COST BY PLANT", + nuclear: "NUCLEAR", + oil: "OIL", + profitByPlant: "PROFIT BY PLANT", + }, + links: { + congFeeAbs: "CONG. FEE (ABS.)", + congFeeAlg: "CONG. FEE (ALG.)", + congProbMinus: "CONG. PROB -", + congProbPlus: "CONG. PROB +", + flowLin: "FLOW LIN.", + flowQuad: "FLOW QUAD.", + hurdleCost: "HURDLE COST", + loopFlow: "LOOP FLOW", + margCost: "MARG. COST", + ucapLin: "UCAP LIN.", + }, }; -// Allow to support all study versions by using directly the server config -export function getFieldNames( - fields: ThematicTrimmingFormFields, -): Array<[keyof ThematicTrimmingFormFields, string]> { - return R.toPairs(R.pick(R.keys(fields), keysMap)); -} +/** + * Get thematic trimming field names and labels from specified config and group. + * + * Allows to support all study versions by only returning the fields that are present + * in the server response. + * + * @param config - Thematic trimming config. + * @param group - Thematic trimming form group. + * @returns Field names and labels in tuple format. + */ +export function getFieldLabelsForGroup( + config: ThematicTrimmingConfig, + group: ThematicTrimmingGroup, +) { + const labelsByName = R.pick(R.keys(config), fieldLabelsByGroup[group]); + const pairs = R.toPairs(labelsByName).filter(Boolean); -function makeRequestURL(studyId: StudyMetadata["id"]): string { - return `/v1/studies/${studyId}/config/thematictrimming/form`; + return R.sortBy(R.propOr("", "1"), pairs); } - -export const getThematicTrimmingFormFields = async ( - studyId: StudyMetadata["id"], -): Promise => { - const res = await client.get(makeRequestURL(studyId)); - return res.data; -}; - -export const setThematicTrimmingConfig = async ( - studyId: StudyMetadata["id"], - config: ThematicTrimmingFormFields, -): Promise => { - await client.put(makeRequestURL(studyId), config); -}; diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/index.tsx index eb9550e2bb..fd649e9e7d 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/index.tsx @@ -31,6 +31,10 @@ function Configuration() { { id: 5, name: t("study.configuration.economicOpt") }, { id: 6, name: t("study.configuration.geographicTrimmingAreas") }, { id: 7, name: t("study.configuration.geographicTrimmingLinks") }, + { + id: 8, + name: t("study.configuration.geographicTrimmingBindingConstraints"), + }, ].filter(Boolean), [study.version, t], ); @@ -63,7 +67,7 @@ function Configuration() { () => ( ( ), @@ -91,7 +95,17 @@ function Configuration() { () => ( + ), + ], + [ + R.equals(8), + () => ( + ), diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Fields.tsx index 16e45f7c53..7b7ea9774c 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Fields.tsx @@ -29,7 +29,7 @@ function Fields() { disabled /> (); function Renewables() { const { study } = useOutletContext<{ study: StudyMetadata }>(); - const [t] = useTranslation(); - const areaId = useAppSelector(getCurrentAreaId); + const { t } = useTranslation(); const navigate = useNavigate(); const location = useLocation(); + const areaId = useAppSelector(getCurrentAreaId); - const { - clusters, - clustersWithCapacity, - totalUnitCount, - totalInstalledCapacity, - totalEnabledCapacity, - } = useClusterDataWithCapacity( - () => getRenewableClusters(study.id, areaId), - t("studies.error.retrieveData"), - [study.id, areaId], - ); - - const columns = useMemo>>( - () => [ - { - accessorKey: "name", - header: "Name", - muiTableHeadCellProps: { - align: "left", - }, - muiTableBodyCellProps: { - align: "left", - }, - size: 100, - Cell: ({ renderedCellValue, row }) => { - const clusterId = row.original.id; - return ( - navigate(`${location.pathname}/${clusterId}`)} - > - {renderedCellValue} - - ); - }, + const { data: clustersWithCapacity = [], isLoading } = + usePromiseWithSnackbarError( + async () => { + const clusters = await getRenewableClusters(study.id, areaId); + return clusters?.map(addClusterCapacity); }, { - accessorKey: "group", - header: "Group", - size: 50, - filterVariant: "select", - filterSelectOptions: [...RENEWABLE_GROUPS], - muiTableHeadCellProps: { - align: "left", - }, - muiTableBodyCellProps: { - align: "left", - }, - Footer: () => ( - Total: - ), + resetDataOnReload: true, + errorMessage: t("studies.error.retrieveData"), + deps: [study.id, areaId], }, - { - accessorKey: "enabled", + ); + + const [totals, setTotals] = useState( + getClustersWithCapacityTotals(clustersWithCapacity), + ); + + const columns = useMemo(() => { + const { totalUnitCount, totalEnabledCapacity, totalInstalledCapacity } = + totals; + + return [ + columnHelper.accessor("enabled", { header: "Enabled", size: 50, filterVariant: "checkbox", - Cell: ({ cell }) => ( - () ? t("button.yes") : t("button.no")} - color={cell.getValue() ? "success" : "error"} - size="small" - sx={{ minWidth: 40 }} - /> - ), - }, - { - accessorKey: "tsInterpretation", + Cell: BooleanCell, + }), + columnHelper.accessor("tsInterpretation", { header: "TS Interpretation", size: 50, - }, - { - accessorKey: "unitCount", + }), + columnHelper.accessor("unitCount", { header: "Unit Count", size: 50, aggregationFn: "sum", AggregatedCell: ({ cell }) => ( - {cell.getValue()} + {cell.getValue()} ), Footer: () => {totalUnitCount}, - }, - { - accessorKey: "nominalCapacity", + }), + columnHelper.accessor("nominalCapacity", { header: "Nominal Capacity (MW)", - size: 200, - Cell: ({ cell }) => Math.floor(cell.getValue()), - }, - { - accessorKey: "installedCapacity", + size: 220, + Cell: ({ cell }) => Math.floor(cell.getValue()), + }), + columnHelper.accessor("installedCapacity", { header: "Enabled / Installed (MW)", - size: 200, + size: 220, aggregationFn: capacityAggregationFn(), AggregatedCell: ({ cell }) => ( - {cell.getValue() ?? ""} + {cell.getValue() ?? ""} ), Cell: ({ row }) => ( <> - {Math.floor(row.original.enabledCapacity ?? 0)} /{" "} - {Math.floor(row.original.installedCapacity ?? 0)} + {Math.floor(row.original.enabledCapacity)} /{" "} + {Math.floor(row.original.installedCapacity)} ), Footer: () => ( @@ -146,53 +102,68 @@ function Renewables() { {totalEnabledCapacity} / {totalInstalledCapacity} ), - }, - ], - [ - location.pathname, - navigate, - t, - totalEnabledCapacity, - totalInstalledCapacity, - totalUnitCount, - ], - ); + }), + ]; + }, [totals]); //////////////////////////////////////////////////////////////// // Event handlers //////////////////////////////////////////////////////////////// - const handleCreateRow = ({ - id, - installedCapacity, - enabledCapacity, - ...cluster - }: RenewableClusterWithCapacity) => { - return createRenewableCluster(study.id, areaId, cluster); + const handleCreate = async (values: TRow) => { + const cluster = await createRenewableCluster(study.id, areaId, values); + return addClusterCapacity(cluster); }; - const handleDeleteSelection = (ids: string[]) => { + const handleDuplicate = async ( + row: RenewableClusterWithCapacity, + newName: string, + ) => { + const cluster = await duplicateRenewableCluster( + study.id, + areaId, + row.id, + newName, + ); + + return { ...row, ...cluster }; + }; + + const handleDelete = (rows: RenewableClusterWithCapacity[]) => { + const ids = rows.map((row) => row.id); return deleteRenewableClusters(study.id, areaId, ids); }; + const handleNameClick = (row: RenewableClusterWithCapacity) => { + navigate(`${location.pathname}/${row.id}`); + }; + //////////////////////////////////////////////////////////////// // JSX //////////////////////////////////////////////////////////////// return ( - } - ifResolved={() => ( - - )} - ifRejected={(error) => } + + t("studies.modelization.clusters.question.delete", { count }) + } + fillPendingRow={(row) => ({ + unitCount: 0, + enabledCapacity: 0, + installedCapacity: 0, + ...row, + })} + onDataChange={(data) => { + setTotals(getClustersWithCapacityTotals(data)); + }} /> ); } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/utils.ts index 074a19c84f..0c0418d8d3 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/utils.ts @@ -4,6 +4,8 @@ import { StudyMetadata, } from "../../../../../../../common/types"; import client from "../../../../../../../services/api/client"; +import type { PartialExceptFor } from "../../../../../../../utils/tsUtils"; +import type { ClusterWithCapacity } from "../common/clustersUtils"; //////////////////////////////////////////////////////////////// // Constants @@ -30,8 +32,9 @@ export const TS_INTERPRETATION_OPTIONS = [ // Types //////////////////////////////////////////////////////////////// +export type RenewableGroup = (typeof RENEWABLE_GROUPS)[number]; + type TimeSeriesInterpretation = (typeof TS_INTERPRETATION_OPTIONS)[number]; -type RenewableGroup = (typeof RENEWABLE_GROUPS)[number]; export interface RenewableFormFields { name: string; @@ -52,10 +55,8 @@ export interface RenewableCluster { nominalCapacity: number; } -export interface RenewableClusterWithCapacity extends RenewableCluster { - installedCapacity: number; - enabledCapacity: number; -} +export type RenewableClusterWithCapacity = + ClusterWithCapacity; //////////////////////////////////////////////////////////////// // Functions @@ -72,34 +73,29 @@ const getClusterUrl = ( clusterId: Cluster["id"], ): string => `${getClustersUrl(studyId, areaId)}/${clusterId}`; -async function makeRequest( - method: "get" | "post" | "patch" | "delete", - url: string, - data?: Partial | { data: Array }, -): Promise { - const res = await client[method](url, data); - return res.data; -} +//////////////////////////////////////////////////////////////// +// API +//////////////////////////////////////////////////////////////// export async function getRenewableClusters( studyId: StudyMetadata["id"], areaId: Area["name"], -): Promise { - return makeRequest( - "get", +) { + const res = await client.get( getClustersUrl(studyId, areaId), ); + return res.data; } export async function getRenewableCluster( studyId: StudyMetadata["id"], areaId: Area["name"], clusterId: Cluster["id"], -): Promise { - return makeRequest( - "get", +) { + const res = await client.get( getClusterUrl(studyId, areaId, clusterId), ); + return res.data; } export async function updateRenewableCluster( @@ -107,32 +103,44 @@ export async function updateRenewableCluster( areaId: Area["name"], clusterId: Cluster["id"], data: Partial, -): Promise { - return makeRequest( - "patch", +) { + const res = await client.patch( getClusterUrl(studyId, areaId, clusterId), data, ); + return res.data; } export async function createRenewableCluster( studyId: StudyMetadata["id"], areaId: Area["name"], - data: Partial, -): Promise { - return makeRequest( - "post", + data: PartialExceptFor, +) { + const res = await client.post( getClustersUrl(studyId, areaId), data, ); + return res.data; +} + +export async function duplicateRenewableCluster( + studyId: StudyMetadata["id"], + areaId: Area["name"], + sourceClusterId: RenewableCluster["id"], + newName: RenewableCluster["name"], +) { + const res = await client.post( + `/v1/studies/${studyId}/areas/${areaId}/renewables/${sourceClusterId}`, + null, + { params: { newName } }, + ); + return res.data; } -export function deleteRenewableClusters( +export async function deleteRenewableClusters( studyId: StudyMetadata["id"], areaId: Area["name"], clusterIds: Array, -): Promise { - return makeRequest("delete", getClustersUrl(studyId, areaId), { - data: clusterIds, - }); +) { + await client.delete(getClustersUrl(studyId, areaId), { data: clusterIds }); } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Fields.tsx index 8485fd29e6..b692466713 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Fields.tsx @@ -7,10 +7,14 @@ import SwitchFE from "../../../../../../common/fieldEditors/SwitchFE"; import Fieldset from "../../../../../../common/Fieldset"; import { useFormContextPlus } from "../../../../../../common/Form"; import { STORAGE_GROUPS, Storage } from "./utils"; +import { useOutletContext } from "react-router"; +import { StudyMetadata } from "../../../../../../../common/types"; function Fields() { const [t] = useTranslation(); + const { study } = useOutletContext<{ study: StudyMetadata }>(); const { control } = useFormContextPlus(); + const studyVersion = parseInt(study.version, 10); //////////////////////////////////////////////////////////////// // JSX @@ -25,7 +29,7 @@ function Fields() { disabled /> + {studyVersion >= 880 && ( + + )} (); function Storages() { const { study } = useOutletContext<{ study: StudyMetadata }>(); - const [t] = useTranslation(); + const { t } = useTranslation(); const navigate = useNavigate(); const location = useLocation(); const areaId = useAppSelector(getCurrentAreaId); + const studyVersion = parseInt(study.version, 10); - const storages = usePromiseWithSnackbarError( + const { data: storages = [], isLoading } = usePromiseWithSnackbarError( () => getStorages(study.id, areaId), { + resetDataOnReload: true, errorMessage: t("studies.error.retrieveData"), deps: [study.id, areaId], }, ); - const { totalWithdrawalNominalCapacity, totalInjectionNominalCapacity } = - useMemo(() => { - if (!storages.data) { - return { - totalWithdrawalNominalCapacity: 0, - totalInjectionNominalCapacity: 0, - }; - } + const [totals, setTotals] = useState(getStoragesTotals(storages)); - return storages.data.reduce( - (acc, { withdrawalNominalCapacity, injectionNominalCapacity }) => { - acc.totalWithdrawalNominalCapacity += withdrawalNominalCapacity; - acc.totalInjectionNominalCapacity += injectionNominalCapacity; - return acc; - }, - { - totalWithdrawalNominalCapacity: 0, - totalInjectionNominalCapacity: 0, - }, - ); - }, [storages]); + const columns = useMemo(() => { + const { totalInjectionNominalCapacity, totalWithdrawalNominalCapacity } = + totals; - const columns = useMemo>>( - () => [ - { - accessorKey: "name", - header: t("global.name"), - muiTableHeadCellProps: { - align: "left", - }, - muiTableBodyCellProps: { - align: "left", - }, - size: 100, - Cell: ({ renderedCellValue, row }) => { - const storageId = row.original.id; - return ( - navigate(`${location.pathname}/${storageId}`)} - > - {renderedCellValue} - - ); - }, - }, - { - accessorKey: "group", - header: t("global.group"), - size: 50, - filterVariant: "select", - filterSelectOptions: [...STORAGE_GROUPS], - muiTableHeadCellProps: { - align: "left", - }, - muiTableBodyCellProps: { - align: "left", - }, - Footer: () => ( - Total: - ), - }, - { - accessorKey: "injectionNominalCapacity", + return [ + studyVersion >= 880 && + columnHelper.accessor("enabled", { + header: t("global.enabled"), + Cell: BooleanCell, + }), + columnHelper.accessor("injectionNominalCapacity", { header: t("study.modelization.storages.injectionNominalCapacity"), Header: ({ column }) => ( ), size: 100, - Cell: ({ cell }) => Math.floor(cell.getValue()), + aggregationFn: "sum", AggregatedCell: ({ cell }) => ( - {Math.floor(cell.getValue())} + {Math.floor(cell.getValue())} ), + Cell: ({ cell }) => Math.floor(cell.getValue()), Footer: () => ( {Math.floor(totalInjectionNominalCapacity)} ), - }, - { - accessorKey: "withdrawalNominalCapacity", + }), + columnHelper.accessor("withdrawalNominalCapacity", { header: t("study.modelization.storages.withdrawalNominalCapacity"), Header: ({ column }) => ( ( - {Math.floor(cell.getValue())} + {Math.floor(cell.getValue())} ), - Cell: ({ cell }) => Math.floor(cell.getValue()), + Cell: ({ cell }) => Math.floor(cell.getValue()), Footer: () => ( {Math.floor(totalWithdrawalNominalCapacity)} ), - }, - { - accessorKey: "reservoirCapacity", + }), + columnHelper.accessor("reservoirCapacity", { header: t("study.modelization.storages.reservoirCapacity"), Header: ({ column }) => ( ), size: 100, - Cell: ({ cell }) => `${cell.getValue()}`, - }, - { - accessorKey: "efficiency", + Cell: ({ cell }) => `${cell.getValue()}`, + }), + columnHelper.accessor("efficiency", { header: t("study.modelization.storages.efficiency"), size: 50, - Cell: ({ cell }) => `${Math.floor(cell.getValue() * 100)}`, - }, - { - accessorKey: "initialLevel", + Cell: ({ cell }) => `${Math.floor(cell.getValue() * 100)}`, + }), + columnHelper.accessor("initialLevel", { header: t("study.modelization.storages.initialLevel"), size: 50, - Cell: ({ cell }) => `${Math.floor(cell.getValue() * 100)}`, - }, - { - accessorKey: "initialLevelOptim", + Cell: ({ cell }) => `${Math.floor(cell.getValue() * 100)}`, + }), + columnHelper.accessor("initialLevelOptim", { header: t("study.modelization.storages.initialLevelOptim"), - size: 180, + size: 200, filterVariant: "checkbox", - Cell: ({ cell }) => ( - () ? t("button.yes") : t("button.no")} - color={cell.getValue() ? "success" : "error"} - size="small" - sx={{ minWidth: 40 }} - /> - ), - }, - ], - [ - location.pathname, - navigate, - t, - totalInjectionNominalCapacity, - totalWithdrawalNominalCapacity, - ], - ); + Cell: BooleanCell, + }), + ].filter(Boolean); + }, [studyVersion, t, totals]); //////////////////////////////////////////////////////////////// // Event handlers //////////////////////////////////////////////////////////////// - const handleCreateRow = ({ id, ...storage }: Storage) => { - return createStorage(study.id, areaId, storage); + const handleCreate = (values: TRow) => { + return createStorage(study.id, areaId, values); + }; + + const handleDuplicate = (row: Storage, newName: string) => { + return duplicateStorage(study.id, areaId, row.id, newName); }; - const handleDeleteSelection = (ids: string[]) => { + const handleDelete = (rows: Storage[]) => { + const ids = rows.map((row) => row.id); return deleteStorages(study.id, areaId, ids); }; + const handleNameClick = (row: Storage) => { + navigate(`${location.pathname}/${row.id}`); + }; + //////////////////////////////////////////////////////////////// // JSX //////////////////////////////////////////////////////////////// return ( - } - ifResolved={(data) => ( - - )} - ifRejected={(error) => } + + t("studies.modelization.clusters.question.delete", { count }) + } + fillPendingRow={(row) => ({ + withdrawalNominalCapacity: 0, + injectionNominalCapacity: 0, + ...row, + })} + onDataChange={(data) => { + setTotals(getStoragesTotals(data)); + }} /> ); } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/utils.ts index 1226bcac66..04864fdc97 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/utils.ts @@ -1,5 +1,6 @@ import { StudyMetadata, Area } from "../../../../../../../common/types"; import client from "../../../../../../../services/api/client"; +import type { PartialExceptFor } from "../../../../../../../utils/tsUtils"; //////////////////////////////////////////////////////////////// // Constants @@ -33,12 +34,28 @@ export interface Storage { efficiency: number; initialLevel: number; initialLevelOptim: boolean; + // Since v8.8 + enabled: boolean; } //////////////////////////////////////////////////////////////// // Functions //////////////////////////////////////////////////////////////// +export function getStoragesTotals(storages: Storage[]) { + return storages.reduce( + (acc, { withdrawalNominalCapacity, injectionNominalCapacity }) => { + acc.totalWithdrawalNominalCapacity += withdrawalNominalCapacity; + acc.totalInjectionNominalCapacity += injectionNominalCapacity; + return acc; + }, + { + totalWithdrawalNominalCapacity: 0, + totalInjectionNominalCapacity: 0, + }, + ); +} + const getStoragesUrl = ( studyId: StudyMetadata["id"], areaId: Area["name"], @@ -50,28 +67,27 @@ const getStorageUrl = ( storageId: Storage["id"], ): string => `${getStoragesUrl(studyId, areaId)}/${storageId}`; -async function makeRequest( - method: "get" | "post" | "patch" | "delete", - url: string, - data?: Partial | { data: Array }, -): Promise { - const res = await client[method](url, data); - return res.data; -} +//////////////////////////////////////////////////////////////// +// API +//////////////////////////////////////////////////////////////// export async function getStorages( studyId: StudyMetadata["id"], areaId: Area["name"], -): Promise { - return makeRequest("get", getStoragesUrl(studyId, areaId)); +) { + const res = await client.get(getStoragesUrl(studyId, areaId)); + return res.data; } export async function getStorage( studyId: StudyMetadata["id"], areaId: Area["name"], storageId: Storage["id"], -): Promise { - return makeRequest("get", getStorageUrl(studyId, areaId, storageId)); +) { + const res = await client.get( + getStorageUrl(studyId, areaId, storageId), + ); + return res.data; } export async function updateStorage( @@ -79,28 +95,41 @@ export async function updateStorage( areaId: Area["name"], storageId: Storage["id"], data: Partial, -): Promise { - return makeRequest( - "patch", +) { + const res = await client.patch( getStorageUrl(studyId, areaId, storageId), data, ); + return res.data; } export async function createStorage( studyId: StudyMetadata["id"], areaId: Area["name"], - data: Partial, -): Promise { - return makeRequest("post", getStoragesUrl(studyId, areaId), data); + data: PartialExceptFor, +) { + const res = await client.post(getStoragesUrl(studyId, areaId), data); + return res.data; +} + +export async function duplicateStorage( + studyId: StudyMetadata["id"], + areaId: Area["name"], + sourceClusterId: Storage["id"], + newName: Storage["name"], +) { + const res = await client.post( + `/v1/studies/${studyId}/areas/${areaId}/storages/${sourceClusterId}`, + null, + { params: { newName } }, + ); + return res.data; } -export function deleteStorages( +export async function deleteStorages( studyId: StudyMetadata["id"], areaId: Area["name"], storageIds: Array, -): Promise { - return makeRequest("delete", getStoragesUrl(studyId, areaId), { - data: storageIds, - }); +) { + await client.delete(getStoragesUrl(studyId, areaId), { data: storageIds }); } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Fields.tsx index cf5cb2fc66..b553152ab8 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Fields.tsx @@ -1,6 +1,7 @@ import { useTranslation } from "react-i18next"; import { useOutletContext } from "react-router"; import { StudyMetadata } from "../../../../../../../common/types"; +import Box from "@mui/material/Box"; import NumberFE from "../../../../../../common/fieldEditors/NumberFE"; import SelectFE from "../../../../../../common/fieldEditors/SelectFE"; import StringFE from "../../../../../../common/fieldEditors/StringFE"; @@ -8,25 +9,29 @@ import SwitchFE from "../../../../../../common/fieldEditors/SwitchFE"; import Fieldset from "../../../../../../common/Fieldset"; import { useFormContextPlus } from "../../../../../../common/Form"; import { + COST_GENERATION_OPTIONS, THERMAL_GROUPS, THERMAL_POLLUTANTS, ThermalCluster, TS_GENERATION_OPTIONS, TS_LAW_OPTIONS, } from "./utils"; +import { validateNumber } from "../../../../../../../utils/validationUtils"; function Fields() { const [t] = useTranslation(); - const { control } = useFormContextPlus(); + const { control, watch } = useFormContextPlus(); const { study } = useOutletContext<{ study: StudyMetadata }>(); const studyVersion = Number(study.version); + const isTSCost = watch("costGeneration") === "useCostTimeseries"; //////////////////////////////////////////////////////////////// // JSX //////////////////////////////////////////////////////////////// return ( - <> + // TODO: remove the margin reset after updating MUI Theme. +
@@ -80,10 +83,7 @@ function Fields() { name="nominalCapacity" control={control} rules={{ - min: { - value: 0, - message: t("form.field.minValue", { 0: 0 }), - }, + validate: validateNumber({ min: 0 }), }} /> @@ -127,50 +113,46 @@ function Fields() { name="minDownTime" control={control} rules={{ - min: { - value: 1, - message: t("form.field.minValue", { 0: 1 }), - }, - max: { - value: 168, - message: t("form.field.maxValue", { 0: 168 }), - }, + validate: validateNumber({ min: 1, max: 168 }), setValueAs: Math.floor, }} />
+ + + + ), @@ -211,6 +204,7 @@ function Fields() {
@@ -240,18 +227,12 @@ function Fields() { name="volatilityPlanned" control={control} rules={{ - min: { - value: 0, - message: t("form.field.minValue", { 0: 0 }), - }, - max: { - value: 1, - message: t("form.field.maxValue", { 0: 1 }), - }, + validate: validateNumber({ min: 0, max: 1 }), }} inputProps={{ step: 0.1 }} />
- +
); } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Matrix.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Matrix.tsx index 10801c59a4..4e4652f8a4 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Matrix.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Matrix.tsx @@ -1,5 +1,4 @@ -import * as React from "react"; -import * as R from "ramda"; +import { useState } from "react"; import Tabs from "@mui/material/Tabs"; import Tab from "@mui/material/Tab"; import Box from "@mui/material/Box"; @@ -10,6 +9,7 @@ import { StudyMetadata, } from "../../../../../../../common/types"; import MatrixInput from "../../../../../../common/MatrixInput"; +import { COMMON_MATRIX_COLS, TS_GEN_MATRIX_COLS } from "./utils"; interface Props { study: StudyMetadata; @@ -19,91 +19,87 @@ interface Props { function Matrix({ study, areaId, clusterId }: Props) { const [t] = useTranslation(); - const [value, setValue] = React.useState(0); + const [value, setValue] = useState(0); - const commonNames = [ - "Marginal cost modulation", - "Market bid modulation", - "Capacity modulation", - "Min gen modulation", - ]; - - const tsGenNames = [ - "FO Duration", - "PO Duration", - "FO Rate", - "PO Rate", - "NPO Min", - "NPO Max", - ]; + //////////////////////////////////////////////////////////////// + // Event Handlers + //////////////////////////////////////////////////////////////// const handleChange = (event: React.SyntheticEvent, newValue: number) => { setValue(newValue); }; + //////////////////////////////////////////////////////////////// + // JSX + //////////////////////////////////////////////////////////////// + return ( - + + + - {R.cond([ - [ - () => value === 0, - () => ( - - ), - ], - [ - () => value === 1, - () => ( - - ), - ], - [ - R.T, - () => ( - - ), - ], - ])()} + {value === 0 && ( + + )} + {value === 1 && ( + + )} + {value === 2 && ( + + )} + {value === 3 && ( + + )} + {value === 4 && ( + + )} ); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/index.tsx index e403b52e5f..0b36a6903a 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/index.tsx @@ -1,6 +1,6 @@ -import { useMemo } from "react"; -import { MRT_ColumnDef } from "material-react-table"; -import { Box, Chip } from "@mui/material"; +import { useMemo, useState } from "react"; +import { createMRTColumnHelper } from "material-react-table"; +import { Box } from "@mui/material"; import { useLocation, useNavigate, useOutletContext } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { StudyMetadata } from "../../../../../../../common/types"; @@ -8,146 +8,95 @@ import { getThermalClusters, createThermalCluster, deleteThermalClusters, - ThermalClusterWithCapacity, THERMAL_GROUPS, - ThermalCluster, + ThermalGroup, + duplicateThermalCluster, + type ThermalClusterWithCapacity, } from "./utils"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../redux/selectors"; import GroupedDataTable from "../../../../../../common/GroupedDataTable"; -import SimpleLoader from "../../../../../../common/loaders/SimpleLoader"; -import SimpleContent from "../../../../../../common/page/SimpleContent"; import { + addClusterCapacity, capacityAggregationFn, - useClusterDataWithCapacity, -} from "../common/utils"; -import UsePromiseCond from "../../../../../../common/utils/UsePromiseCond"; + getClustersWithCapacityTotals, +} from "../common/clustersUtils"; +import { TRow } from "../../../../../../common/GroupedDataTable/types"; +import BooleanCell from "../../../../../../common/GroupedDataTable/cellRenderers/BooleanCell"; +import usePromiseWithSnackbarError from "../../../../../../../hooks/usePromiseWithSnackbarError"; + +const columnHelper = createMRTColumnHelper(); function Thermal() { const { study } = useOutletContext<{ study: StudyMetadata }>(); - const [t] = useTranslation(); + const { t } = useTranslation(); const navigate = useNavigate(); const location = useLocation(); const areaId = useAppSelector(getCurrentAreaId); - const { - clusters, - clustersWithCapacity, - totalUnitCount, - totalInstalledCapacity, - totalEnabledCapacity, - } = useClusterDataWithCapacity( - () => getThermalClusters(study.id, areaId), - t("studies.error.retrieveData"), - [study.id, areaId], - ); - - const columns = useMemo>>( - () => [ - { - accessorKey: "name", - header: "Name", - size: 100, - muiTableHeadCellProps: { - align: "left", - }, - muiTableBodyCellProps: { - align: "left", - }, - Cell: ({ renderedCellValue, row }) => { - const clusterId = row.original.id; - return ( - navigate(`${location.pathname}/${clusterId}`)} - > - {renderedCellValue} - - ); - }, + const { data: clustersWithCapacity = [], isLoading } = + usePromiseWithSnackbarError( + async () => { + const clusters = await getThermalClusters(study.id, areaId); + return clusters?.map(addClusterCapacity); }, { - accessorKey: "group", - header: "Group", - size: 50, - filterVariant: "select", - filterSelectOptions: [...THERMAL_GROUPS], - muiTableHeadCellProps: { - align: "left", - }, - muiTableBodyCellProps: { - align: "left", - }, - Footer: () => ( - Total: - ), + resetDataOnReload: true, + errorMessage: t("studies.error.retrieveData"), + deps: [study.id, areaId], }, - { - accessorKey: "enabled", + ); + + const [totals, setTotals] = useState( + getClustersWithCapacityTotals(clustersWithCapacity), + ); + + const columns = useMemo(() => { + const { totalUnitCount, totalEnabledCapacity, totalInstalledCapacity } = + totals; + + return [ + columnHelper.accessor("enabled", { header: "Enabled", size: 50, filterVariant: "checkbox", - Cell: ({ cell }) => ( - () ? t("button.yes") : t("button.no")} - color={cell.getValue() ? "success" : "error"} - size="small" - sx={{ minWidth: 40 }} - /> - ), - }, - { - accessorKey: "mustRun", + Cell: BooleanCell, + }), + columnHelper.accessor("mustRun", { header: "Must Run", size: 50, filterVariant: "checkbox", - Cell: ({ cell }) => ( - () ? t("button.yes") : t("button.no")} - color={cell.getValue() ? "success" : "error"} - size="small" - sx={{ minWidth: 40 }} - /> - ), - }, - { - accessorKey: "unitCount", + Cell: BooleanCell, + }), + columnHelper.accessor("unitCount", { header: "Unit Count", size: 50, aggregationFn: "sum", AggregatedCell: ({ cell }) => ( - {cell.getValue()} + {cell.getValue()} ), Footer: () => {totalUnitCount}, - }, - { - accessorKey: "nominalCapacity", + }), + columnHelper.accessor("nominalCapacity", { header: "Nominal Capacity (MW)", - size: 200, - Cell: ({ cell }) => cell.getValue().toFixed(1), - }, - { - accessorKey: "installedCapacity", + size: 220, + Cell: ({ cell }) => cell.getValue().toFixed(1), + }), + columnHelper.accessor("installedCapacity", { header: "Enabled / Installed (MW)", - size: 200, + size: 220, aggregationFn: capacityAggregationFn(), AggregatedCell: ({ cell }) => ( - {cell.getValue() ?? ""} + {cell.getValue() ?? ""} ), Cell: ({ row }) => ( <> - {Math.floor(row.original.enabledCapacity ?? 0)} /{" "} - {Math.floor(row.original.installedCapacity ?? 0)} + {Math.floor(row.original.enabledCapacity)} /{" "} + {Math.floor(row.original.installedCapacity)} ), Footer: () => ( @@ -155,59 +104,73 @@ function Thermal() { {totalEnabledCapacity} / {totalInstalledCapacity} ), - }, - { - accessorKey: "marketBidCost", + }), + columnHelper.accessor("marketBidCost", { header: "Market Bid (€/MWh)", size: 50, - Cell: ({ cell }) => <>{cell.getValue().toFixed(2)}, - }, - ], - [ - location.pathname, - navigate, - t, - totalEnabledCapacity, - totalInstalledCapacity, - totalUnitCount, - ], - ); + Cell: ({ cell }) => <>{cell.getValue().toFixed(2)}, + }), + ]; + }, [totals]); //////////////////////////////////////////////////////////////// // Event handlers //////////////////////////////////////////////////////////////// - const handleCreateRow = ({ - id, - installedCapacity, - enabledCapacity, - ...cluster - }: ThermalClusterWithCapacity) => { - return createThermalCluster(study.id, areaId, cluster); + const handleCreate = async (values: TRow) => { + const cluster = await createThermalCluster(study.id, areaId, values); + return addClusterCapacity(cluster); }; - const handleDeleteSelection = (ids: string[]) => { + const handleDuplicate = async ( + row: ThermalClusterWithCapacity, + newName: string, + ) => { + const cluster = await duplicateThermalCluster( + study.id, + areaId, + row.id, + newName, + ); + + return { ...row, ...cluster }; + }; + + const handleDelete = (rows: ThermalClusterWithCapacity[]) => { + const ids = rows.map((row) => row.id); return deleteThermalClusters(study.id, areaId, ids); }; + const handleNameClick = (row: ThermalClusterWithCapacity) => { + navigate(`${location.pathname}/${row.id}`); + }; + //////////////////////////////////////////////////////////////// // JSX //////////////////////////////////////////////////////////////// return ( - } - ifResolved={() => ( - - )} - ifRejected={(error) => } + + t("studies.modelization.clusters.question.delete", { count }) + } + fillPendingRow={(row) => ({ + unitCount: 0, + enabledCapacity: 0, + installedCapacity: 0, + ...row, + })} + onDataChange={(data) => { + setTotals(getClustersWithCapacityTotals(data)); + }} /> ); } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/utils.ts index d113e06c4f..b5b0526ded 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/utils.ts @@ -4,11 +4,29 @@ import { StudyMetadata, } from "../../../../../../../common/types"; import client from "../../../../../../../services/api/client"; +import type { PartialExceptFor } from "../../../../../../../utils/tsUtils"; +import type { ClusterWithCapacity } from "../common/clustersUtils"; //////////////////////////////////////////////////////////////// // Constants //////////////////////////////////////////////////////////////// +export const COMMON_MATRIX_COLS = [ + "Marginal cost modulation", + "Market bid modulation", + "Capacity modulation", + "Min gen modulation", +] as const; + +export const TS_GEN_MATRIX_COLS = [ + "FO Duration", + "PO Duration", + "FO Rate", + "PO Rate", + "NPO Min", + "NPO Max", +] as const; + export const THERMAL_GROUPS = [ "Gas", "Hard Coal", @@ -23,8 +41,8 @@ export const THERMAL_GROUPS = [ ] as const; export const THERMAL_POLLUTANTS = [ - // For study versions >= 860 "co2", + // Since v8.6 "so2", "nh3", "nox", @@ -47,14 +65,20 @@ export const TS_GENERATION_OPTIONS = [ export const TS_LAW_OPTIONS = ["geometric", "uniform"] as const; +export const COST_GENERATION_OPTIONS = [ + "SetManually", + "useCostTimeseries", +] as const; + //////////////////////////////////////////////////////////////// // Types //////////////////////////////////////////////////////////////// -type ThermalGroup = (typeof THERMAL_GROUPS)[number]; +export type ThermalGroup = (typeof THERMAL_GROUPS)[number]; + type LocalTSGenerationBehavior = (typeof TS_GENERATION_OPTIONS)[number]; type TimeSeriesLawOption = (typeof TS_LAW_OPTIONS)[number]; - +type CostGeneration = (typeof COST_GENERATION_OPTIONS)[number]; type ThermalPollutants = { [K in (typeof THERMAL_POLLUTANTS)[number]]: number; }; @@ -81,12 +105,13 @@ export interface ThermalCluster extends ThermalPollutants { volatilityPlanned: number; lawForced: TimeSeriesLawOption; lawPlanned: TimeSeriesLawOption; + // Since v8.7 + costGeneration: CostGeneration; + efficiency: number; + variableOMCost: number; } -export interface ThermalClusterWithCapacity extends ThermalCluster { - enabledCapacity: number; - installedCapacity: number; -} +export type ThermalClusterWithCapacity = ClusterWithCapacity; //////////////////////////////////////////////////////////////// // Functions @@ -103,31 +128,29 @@ const getClusterUrl = ( clusterId: Cluster["id"], ): string => `${getClustersUrl(studyId, areaId)}/${clusterId}`; -async function makeRequest( - method: "get" | "post" | "patch" | "delete", - url: string, - data?: Partial | { data: Array }, -): Promise { - const res = await client[method](url, data); - return res.data; -} +//////////////////////////////////////////////////////////////// +// API +//////////////////////////////////////////////////////////////// export async function getThermalClusters( studyId: StudyMetadata["id"], areaId: Area["name"], -): Promise { - return makeRequest("get", getClustersUrl(studyId, areaId)); +) { + const res = await client.get( + getClustersUrl(studyId, areaId), + ); + return res.data; } export async function getThermalCluster( studyId: StudyMetadata["id"], areaId: Area["name"], clusterId: Cluster["id"], -): Promise { - return makeRequest( - "get", +) { + const res = await client.get( getClusterUrl(studyId, areaId, clusterId), ); + return res.data; } export async function updateThermalCluster( @@ -135,32 +158,44 @@ export async function updateThermalCluster( areaId: Area["name"], clusterId: Cluster["id"], data: Partial, -): Promise { - return makeRequest( - "patch", +) { + const res = await client.patch( getClusterUrl(studyId, areaId, clusterId), data, ); + return res.data; } export async function createThermalCluster( studyId: StudyMetadata["id"], areaId: Area["name"], - data: Partial, -): Promise { - return makeRequest( - "post", + data: PartialExceptFor, +) { + const res = await client.post( getClustersUrl(studyId, areaId), data, ); + return res.data; +} + +export async function duplicateThermalCluster( + studyId: StudyMetadata["id"], + areaId: Area["name"], + sourceClusterId: ThermalCluster["id"], + newName: ThermalCluster["name"], +) { + const res = await client.post( + `/v1/studies/${studyId}/areas/${areaId}/thermals/${sourceClusterId}`, + null, + { params: { newName } }, + ); + return res.data; } -export function deleteThermalClusters( +export async function deleteThermalClusters( studyId: StudyMetadata["id"], areaId: Area["name"], clusterIds: Array, -): Promise { - return makeRequest("delete", getClustersUrl(studyId, areaId), { - data: clusterIds, - }); +) { + await client.delete(getClustersUrl(studyId, areaId), { data: clusterIds }); } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/clustersUtils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/clustersUtils.ts new file mode 100644 index 0000000000..a035dfa07f --- /dev/null +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/clustersUtils.ts @@ -0,0 +1,87 @@ +import { MRT_AggregationFn } from "material-react-table"; +import { ThermalClusterWithCapacity } from "../Thermal/utils"; +import { RenewableClusterWithCapacity } from "../Renewables/utils"; + +/** + * Custom aggregation function summing the values of each row, + * to display enabled and installed capacity in the same cell. This function is + * designed for use with Material React Table's custom aggregation feature, allowing + * the combination of enabled and installed capacities into a single cell. + * + * @returns A string representing the sum of enabled and installed capacity in the format "enabled/installed". + * @example + * Assuming an aggregation of rows where enabled capacities sum to 100 and installed capacities sum to 200 + * "100/200" + * + * @see https://www.material-react-table.com/docs/guides/aggregation-and-grouping#custom-aggregation-functions for more information on custom aggregation functions in Material React Table. + */ +export const capacityAggregationFn = < + T extends ThermalClusterWithCapacity | RenewableClusterWithCapacity, +>(): MRT_AggregationFn => { + return (columnId, leafRows) => { + const { enabledCapacitySum, installedCapacitySum } = leafRows.reduce( + (acc, row) => { + acc.enabledCapacitySum += row.original.enabledCapacity; + acc.installedCapacitySum += row.original.installedCapacity; + + return acc; + }, + { enabledCapacitySum: 0, installedCapacitySum: 0 }, + ); + + return `${Math.floor(enabledCapacitySum)} / ${Math.floor( + installedCapacitySum, + )}`; + }; +}; + +interface BaseCluster { + name: string; + group: string; + unitCount: number; + nominalCapacity: number; + enabled: boolean; +} + +export type ClusterWithCapacity = T & { + installedCapacity: number; + enabledCapacity: number; +}; + +/** + * Adds the installed and enabled capacity fields to a cluster. + * + * @param cluster - The cluster to add the capacity fields to. + * @returns The cluster with the installed and enabled capacity fields added. + */ +export function addClusterCapacity(cluster: T) { + const { unitCount, nominalCapacity, enabled } = cluster; + const installedCapacity = unitCount * nominalCapacity; + const enabledCapacity = enabled ? installedCapacity : 0; + return { ...cluster, installedCapacity, enabledCapacity }; +} + +/** + * Gets the totals for unit count, installed capacity, and enabled capacity + * for the specified clusters. + * + * @param clusters - The clusters to get the totals for. + * @returns An object containing the totals. + */ +export function getClustersWithCapacityTotals( + clusters: Array>, +) { + return clusters.reduce( + (acc, { unitCount, installedCapacity, enabledCapacity }) => { + acc.totalUnitCount += unitCount; + acc.totalInstalledCapacity += installedCapacity; + acc.totalEnabledCapacity += enabledCapacity; + return acc; + }, + { + totalUnitCount: 0, + totalInstalledCapacity: 0, + totalEnabledCapacity: 0, + }, + ); +} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/utils.ts deleted file mode 100644 index 9231804f53..0000000000 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/utils.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { DependencyList, useMemo } from "react"; -import * as R from "ramda"; -import { MRT_AggregationFn } from "material-react-table"; -import { StudyMetadata } from "../../../../../../../common/types"; -import { editStudy } from "../../../../../../../services/api/study"; -import { ThermalClusterWithCapacity } from "../Thermal/utils"; -import { RenewableClusterWithCapacity } from "../Renewables/utils"; -import usePromiseWithSnackbarError from "../../../../../../../hooks/usePromiseWithSnackbarError"; -import { UsePromiseResponse } from "../../../../../../../hooks/usePromise"; - -export const saveField = R.curry( - ( - studyId: StudyMetadata["id"], - path: string, - data: Record, - ): Promise => { - return editStudy(data, studyId, path); - }, -); - -/** - * Custom aggregation function summing the values of each row, - * to display enabled and installed capacity in the same cell. This function is - * designed for use with Material React Table's custom aggregation feature, allowing - * the combination of enabled and installed capacities into a single cell. - * - * @returns A string representing the sum of enabled and installed capacity in the format "enabled/installed". - * @example - * Assuming an aggregation of rows where enabled capacities sum to 100 and installed capacities sum to 200 - * "100/200" - * - * @see https://www.material-react-table.com/docs/guides/aggregation-and-grouping#custom-aggregation-functions for more information on custom aggregation functions in Material React Table. - */ -export const capacityAggregationFn = < - T extends ThermalClusterWithCapacity | RenewableClusterWithCapacity, ->(): MRT_AggregationFn => { - return (_colHeader, rows) => { - const { enabledCapacitySum, installedCapacitySum } = rows.reduce( - (acc, row) => { - acc.enabledCapacitySum += row.original.enabledCapacity ?? 0; - acc.installedCapacitySum += row.original.installedCapacity ?? 0; - return acc; - }, - { enabledCapacitySum: 0, installedCapacitySum: 0 }, - ); - - return `${Math.floor(enabledCapacitySum)} / ${Math.floor( - installedCapacitySum, - )}`; - }; -}; - -interface BaseCluster { - name: string; - group: string; - unitCount: number; - nominalCapacity: number; - enabled: boolean; -} - -type ClusterWithCapacity = T & { - installedCapacity: number; - enabledCapacity: number; -}; - -interface UseClusterDataWithCapacityReturn { - clusters: UsePromiseResponse; - clustersWithCapacity: Array>; - totalUnitCount: number; - totalInstalledCapacity: number; - totalEnabledCapacity: number; -} - -export const useClusterDataWithCapacity = ( - fetchFn: () => Promise, - errorMessage: string, - deps: DependencyList, -): UseClusterDataWithCapacityReturn => { - const clusters: UsePromiseResponse = usePromiseWithSnackbarError( - fetchFn, - { - errorMessage, - deps, - }, - ); - - const clustersWithCapacity: Array> = useMemo( - () => - clusters.data?.map((cluster) => { - const { unitCount, nominalCapacity, enabled } = cluster; - const installedCapacity = unitCount * nominalCapacity; - const enabledCapacity = enabled ? installedCapacity : 0; - return { ...cluster, installedCapacity, enabledCapacity }; - }) || [], - [clusters.data], - ); - - const { totalUnitCount, totalInstalledCapacity, totalEnabledCapacity } = - useMemo(() => { - return clustersWithCapacity.reduce( - (acc, { unitCount, nominalCapacity, enabled }) => { - acc.totalUnitCount += unitCount; - acc.totalInstalledCapacity += unitCount * nominalCapacity; - acc.totalEnabledCapacity += enabled ? unitCount * nominalCapacity : 0; - return acc; - }, - { - totalUnitCount: 0, - totalInstalledCapacity: 0, - totalEnabledCapacity: 0, - }, - ); - }, [clustersWithCapacity]); - - return { - clusters, - clustersWithCapacity, - totalUnitCount: Math.floor(totalUnitCount), - totalInstalledCapacity: Math.floor(totalInstalledCapacity), - totalEnabledCapacity: Math.floor(totalEnabledCapacity), - }; -}; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/AddDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/AddDialog.tsx index 35fcb9c90e..6891123b8c 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/AddDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/AddDialog.tsx @@ -30,15 +30,6 @@ interface Props { reloadConstraintsList: VoidFunction; } -const defaultValues = { - name: "", - group: "default", - enabled: true, - timeStep: TimeStep.HOURLY, - operator: BindingConstraintOperator.LESS, - comments: "", -}; - // TODO rename AddConstraintDialog function AddDialog({ open, @@ -50,6 +41,16 @@ function AddDialog({ const { enqueueSnackbar } = useSnackbar(); const dispatch = useAppDispatch(); const [t] = useTranslation(); + const studyVersion = Number(study.version); + + const defaultValues = { + name: "", + group: studyVersion >= 870 ? "default" : "", + enabled: true, + timeStep: TimeStep.HOURLY, + operator: BindingConstraintOperator.LESS, + comments: "", + }; const operatorOptions = useMemo( () => @@ -142,10 +143,13 @@ function AddDialog({ control={control} rules={{ validate: (v) => - validateString(v, { existingValues: existingConstraints }), + validateString(v, { + existingValues: existingConstraints, + specialChars: "@&_-()", + }), }} /> - {Number(study.version) >= 870 && ( + {studyVersion >= 870 && ( validateString(v, { - max: 20, + maxLength: 20, specialChars: "-", }), }} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintFields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintFields.tsx index 88fe3f2acc..7677a78c4f 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintFields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintFields.tsx @@ -90,7 +90,7 @@ function Fields({ study, constraintId }: Props) { rules={{ validate: (v) => validateString(v, { - max: 20, + maxLength: 20, specialChars: "-", }), }} @@ -115,7 +115,7 @@ function Fields({ study, constraintId }: Props) { control={control} sx={{ maxWidth: 150 }} /> - {Number(study.version) >= 840 && ( + {Number(study.version) >= 830 && ( { - if (constraints.data && !currentConstraintId) { - const firstConstraintId = constraints.data[0].id; - dispatch(setCurrentBindingConst(firstConstraintId)); + const { data } = constraints; + + if (!data || data.length === 0 || currentConstraintId) { + return; } + + const firstConstraintId = data[0].id; + dispatch(setCurrentBindingConst(firstConstraintId)); }, [constraints, currentConstraintId, dispatch]); //////////////////////////////////////////////////////////////// diff --git a/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx b/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx index 2675d7d424..8f4d0ce2f6 100644 --- a/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx @@ -1,6 +1,5 @@ import { Box, - Button, Paper, Skeleton, ToggleButton, @@ -12,7 +11,6 @@ import { useTranslation } from "react-i18next"; import { useNavigate, useOutletContext, useParams } from "react-router"; import axios from "axios"; import GridOffIcon from "@mui/icons-material/GridOff"; -import DownloadOutlinedIcon from "@mui/icons-material/DownloadOutlined"; import { Area, LinkElement, @@ -44,12 +42,12 @@ import UsePromiseCond, { mergeResponses, } from "../../../../../common/utils/UsePromiseCond"; import useStudySynthesis from "../../../../../../redux/hooks/useStudySynthesis"; -import { downloadMatrix } from "../../../../../../utils/matrixUtils"; import ButtonBack from "../../../../../common/ButtonBack"; import BooleanFE from "../../../../../common/fieldEditors/BooleanFE"; import SelectFE from "../../../../../common/fieldEditors/SelectFE"; import NumberFE from "../../../../../common/fieldEditors/NumberFE"; import moment from "moment"; +import DownloadMatrixButton from "../../../../../common/DownloadMatrixButton.tsx"; function ResultDetails() { const { study } = useOutletContext<{ study: StudyMetadata }>(); @@ -105,17 +103,22 @@ function ResultDetails() { [filteredItems], ); + const path = useMemo(() => { + if (output && selectedItem && !isSynthesis) { + return createPath({ + output, + item: selectedItem, + dataType, + timestep, + year, + }); + } + return ""; + }, [output, selectedItem, isSynthesis, dataType, timestep, year]); + const matrixRes = usePromise( async () => { - if (output && selectedItem && !isSynthesis) { - const path = createPath({ - output, - item: selectedItem, - dataType, - timestep, - year, - }); - + if (path) { const res = await getStudyData(study.id, path); if (typeof res === "string") { const fixed = res @@ -131,18 +134,17 @@ function ResultDetails() { { resetDataOnReload: true, resetErrorOnReload: true, - deps: [study.id, output, selectedItem, dataType, timestep, year], + deps: [study.id, path], }, ); - const { data: synthesis } = usePromise( - async () => { + const { data: synthesis } = usePromise( + () => { if (outputId && selectedItem && isSynthesis) { const path = `output/${outputId}/economy/mc-all/grid/${selectedItem.id}`; - const res = await getStudyData(study.id, path); - return res; + return getStudyData(study.id, path); } - return null; + return Promise.resolve(null); }, { deps: [study.id, outputId, selectedItem], @@ -203,10 +205,6 @@ function ResultDetails() { } }; - const handleDownload = (matrixData: MatrixType, fileName: string): void => { - downloadMatrix(matrixData, fileName); - }; - //////////////////////////////////////////////////////////////// // JSX //////////////////////////////////////////////////////////////// @@ -385,19 +383,7 @@ function ResultDetails() { ))} - + + TABLE_MODE_TYPES.map((type) => ({ + value: type, + label: t(`tableMode.type.${type}`), + })), + [t], + ); + //////////////////////////////////////////////////////////////// // JSX //////////////////////////////////////////////////////////////// @@ -43,7 +52,7 @@ function TableTemplateFormDialog(props: TableTemplateFormDialogProps) { onSubmit={onSubmit} onCancel={onCancel} > - {({ control, resetField, getValues }) => ( + {({ control, setValue, getValues }) => ( resetField("columns")} + onChange={() => setValue("columns", [])} name="type" control={control} /> { + if (!path) { + return; + } + + setIsDownloading(true); + + const isExcel = format === "xlsx"; + + try { + const res = await downloadMatrix({ + studyId, + path, + format, + header: isExcel, + index: isExcel, + }); + + downloadFile( + res, + `matrix_${studyId}_${path.replace("/", "_")}.${format}`, + ); + } catch (err) { + enqueueErrorSnackbar(t("global.download.error"), String(err)); + } + + setIsDownloading(false); + }; + + //////////////////////////////////////////////////////////////// + // JSX + //////////////////////////////////////////////////////////////// + + return ( + , + loadingPosition: "start", + loading: isDownloading, + }} + > + {label} + + ); +} + +export default DownloadMatrixButton; diff --git a/webapp/src/components/common/EditableMatrix/index.tsx b/webapp/src/components/common/EditableMatrix/index.tsx index 3e17ed5aaa..7916fa2a1f 100644 --- a/webapp/src/components/common/EditableMatrix/index.tsx +++ b/webapp/src/components/common/EditableMatrix/index.tsx @@ -24,7 +24,7 @@ interface PropTypes { matrixTime: boolean; readOnly: boolean; onUpdate?: (change: MatrixEditDTO[], source: string) => void; - columnsNames?: string[]; + columnsNames?: string[] | readonly string[]; rowNames?: string[]; computStats?: MatrixStats; isPercentDisplayEnabled?: boolean; diff --git a/webapp/src/components/common/GroupedDataTable/CreateDialog.tsx b/webapp/src/components/common/GroupedDataTable/CreateDialog.tsx index 5c8313a352..9df4f4e2c5 100644 --- a/webapp/src/components/common/GroupedDataTable/CreateDialog.tsx +++ b/webapp/src/components/common/GroupedDataTable/CreateDialog.tsx @@ -1,48 +1,38 @@ -import { t } from "i18next"; import AddCircleIcon from "@mui/icons-material/AddCircle"; import FormDialog from "../dialogs/FormDialog"; import StringFE from "../fieldEditors/StringFE"; import Fieldset from "../Fieldset"; import { SubmitHandlerPlus } from "../Form/types"; import SelectFE from "../fieldEditors/SelectFE"; -import { nameToId } from "../../../services/utils"; -import { TRow } from "./utils"; import { validateString } from "../../../utils/validationUtils"; +import type { TRow } from "./types"; +import { useTranslation } from "react-i18next"; -interface Props { +interface Props { open: boolean; onClose: VoidFunction; - onSubmit: (values: TData) => Promise; - groups: string[] | readonly string[]; - existingNames: Array; + onSubmit: (values: TRow) => Promise; + groups: string[]; + existingNames: Array; } -const defaultValues = { - name: "", - group: "", -}; - -function CreateDialog({ +function CreateDialog({ open, onClose, onSubmit, groups, existingNames, -}: Props) { +}: Props) { + const { t } = useTranslation(); + //////////////////////////////////////////////////////////////// // Event Handlers //////////////////////////////////////////////////////////////// - const handleSubmit = async ({ - values, - }: SubmitHandlerPlus) => { - await onSubmit({ - ...values, - id: nameToId(values.name), - name: values.name.trim(), - } as TData); - - onClose(); + const handleSubmit = ({ + values: { name, group }, + }: SubmitHandlerPlus) => { + return onSubmit({ name: name.trim(), group }); }; //////////////////////////////////////////////////////////////// @@ -56,7 +46,6 @@ function CreateDialog({ open={open} onCancel={onClose} onSubmit={handleSubmit} - config={{ defaultValues }} > {({ control }) => (
@@ -72,14 +61,11 @@ function CreateDialog({ sx={{ m: 0 }} />
)} diff --git a/webapp/src/components/common/GroupedDataTable/DuplicateDialog.tsx b/webapp/src/components/common/GroupedDataTable/DuplicateDialog.tsx index 34664b8f3a..099748ef9a 100644 --- a/webapp/src/components/common/GroupedDataTable/DuplicateDialog.tsx +++ b/webapp/src/components/common/GroupedDataTable/DuplicateDialog.tsx @@ -1,5 +1,5 @@ import { useTranslation } from "react-i18next"; -import ControlPointDuplicateIcon from "@mui/icons-material/ControlPointDuplicate"; +import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import Fieldset from "../Fieldset"; import FormDialog from "../dialogs/FormDialog"; import { SubmitHandlerPlus } from "../Form/types"; @@ -38,7 +38,7 @@ function DuplicateDialog(props: Props) { { + cell: MRT_Cell; +} + +function BooleanCell({ cell }: Props) { + const { t } = useTranslation(); + + return ( + + ); +} + +export default BooleanCell; diff --git a/webapp/src/components/common/GroupedDataTable/index.tsx b/webapp/src/components/common/GroupedDataTable/index.tsx index 5bc91534f9..6aed12cc32 100644 --- a/webapp/src/components/common/GroupedDataTable/index.tsx +++ b/webapp/src/components/common/GroupedDataTable/index.tsx @@ -1,69 +1,303 @@ import Box from "@mui/material/Box"; import AddCircleOutlineIcon from "@mui/icons-material/AddCircleOutline"; -import ControlPointDuplicateIcon from "@mui/icons-material/ControlPointDuplicate"; +import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import DeleteIcon from "@mui/icons-material/Delete"; -import { Button } from "@mui/material"; +import { Button, Skeleton } from "@mui/material"; import { MaterialReactTable, MRT_ToggleFiltersButton, MRT_ToggleGlobalFilterButton, + useMaterialReactTable, type MRT_RowSelectionState, type MRT_ColumnDef, } from "material-react-table"; import { useTranslation } from "react-i18next"; -import { useMemo, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import CreateDialog from "./CreateDialog"; import ConfirmationDialog from "../dialogs/ConfirmationDialog"; -import { TRow, generateUniqueValue } from "./utils"; +import { generateUniqueValue, getTableOptionsForAlign } from "./utils"; import DuplicateDialog from "./DuplicateDialog"; +import { translateWithColon } from "../../../utils/i18nUtils"; +import useAutoUpdateRef from "../../../hooks/useAutoUpdateRef"; +import * as R from "ramda"; +import * as RA from "ramda-adjunct"; +import { PromiseAny } from "../../../utils/tsUtils"; +import useEnqueueErrorSnackbar from "../../../hooks/useEnqueueErrorSnackbar"; +import { toError } from "../../../utils/fnUtils"; +import useOperationInProgressCount from "../../../hooks/useOperationInProgressCount"; +import type { TRow } from "./types"; -export interface GroupedDataTableProps { +export interface GroupedDataTableProps< + TGroups extends string[], + TData extends TRow, +> { data: TData[]; - columns: Array>; - groups: string[] | readonly string[]; - onCreate?: (values: TData) => Promise; - onDelete?: (ids: string[]) => void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + columns: Array>; + groups: TGroups; + onCreate?: (values: TRow) => Promise; + onDuplicate?: (row: TData, newName: string) => Promise; + onDelete?: (rows: TData[]) => PromiseAny | void; + onNameClick?: (row: TData) => void; + onDataChange?: (data: TData[]) => void; + isLoading?: boolean; + deleteConfirmationMessage?: string | ((count: number) => string); + fillPendingRow?: ( + pendingRow: TRow, + ) => TRow & Partial; } -function GroupedDataTable({ +// Use ids to identify default columns (instead of `accessorKey`), +// to have a unique identifier. It is more likely to have a duplicate +// `accessorKey` with `columns` prop. +const GROUP_COLUMN_ID = "_group"; +const NAME_COLUMN_ID = "_name"; + +function GroupedDataTable< + TGroups extends string[], + TData extends TRow, +>({ data, columns, groups, onCreate, + onDuplicate, onDelete, -}: GroupedDataTableProps) { + onNameClick, + onDataChange, + isLoading, + deleteConfirmationMessage, + fillPendingRow, +}: GroupedDataTableProps) { const { t } = useTranslation(); const [openDialog, setOpenDialog] = useState< "add" | "duplicate" | "delete" | "" >(""); const [tableData, setTableData] = useState(data); const [rowSelection, setRowSelection] = useState({}); + const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); + // Allow to use the last version of `onNameClick` in `tableColumns` + const callbacksRef = useAutoUpdateRef({ onNameClick }); + const pendingRows = useRef>>([]); + const { createOps, deleteOps, totalOps } = useOperationInProgressCount(); - const isAnyRowSelected = useMemo( - () => Object.values(rowSelection).some((value) => value), - [rowSelection], - ); + useEffect(() => setTableData(data), [data]); - const isOneRowSelected = useMemo( - () => Object.values(rowSelection).filter((value) => value).length === 1, - [rowSelection], - ); - - const selectedRow = useMemo(() => { - if (isOneRowSelected) { - const selectedIndex = Object.keys(rowSelection).find( - (key) => rowSelection[key], - ); - return selectedIndex && tableData[+selectedIndex]; - } - }, [isOneRowSelected, rowSelection, tableData]); + // eslint-disable-next-line react-hooks/exhaustive-deps + useEffect(() => onDataChange?.(tableData), [tableData]); const existingNames = useMemo( () => tableData.map((row) => row.name.toLowerCase()), [tableData], ); + const tableColumns = useMemo>>( + () => [ + { + accessorKey: "group", + header: t("global.group"), + id: GROUP_COLUMN_ID, + size: 50, + filterVariant: "autocomplete", + filterSelectOptions: groups, + footer: translateWithColon("global.total"), + ...getTableOptionsForAlign("left"), + }, + { + accessorKey: "name", + header: t("global.name"), + id: NAME_COLUMN_ID, + size: 100, + filterVariant: "autocomplete", + filterSelectOptions: existingNames, + Cell: + callbacksRef.current.onNameClick && + (({ renderedCellValue, row }) => { + if (isPendingRow(row.original)) { + return renderedCellValue; + } + + return ( + callbacksRef.current.onNameClick?.(row.original)} + > + {renderedCellValue} + + ); + }), + ...getTableOptionsForAlign("left"), + }, + ...columns.map( + (column) => + ({ + ...column, + Cell: (props) => { + const { row, renderedCellValue } = props; + // Use JSX instead of call it directly to remove React warning: + // 'Warning: Internal React error: Expected static flag was missing.' + const CellComp = column.Cell; + + if (isPendingRow(row.original)) { + return ( + + ); + } + + return CellComp ? : renderedCellValue; + }, + }) as MRT_ColumnDef, + ), + ], + // eslint-disable-next-line react-hooks/exhaustive-deps + [columns, t, ...groups], + ); + + const table = useMaterialReactTable({ + data: tableData, + columns: tableColumns, + initialState: { + grouping: [GROUP_COLUMN_ID], + density: "compact", + expanded: true, + columnPinning: { left: [GROUP_COLUMN_ID] }, + }, + state: { isLoading, isSaving: totalOps > 0, rowSelection }, + enableGrouping: true, + enableStickyFooter: true, + enableStickyHeader: true, + enableColumnDragging: false, + enableColumnActions: false, + enableBottomToolbar: false, + enablePagination: false, + positionToolbarAlertBanner: "none", + // Rows + muiTableBodyRowProps: ({ row }) => { + const isPending = isPendingRow(row.original); + + return { + onClick: () => { + if (isPending) { + return; + } + + const isGrouped = row.getIsGrouped(); + const rowIds = isGrouped + ? row.getLeafRows().map((r) => r.id) + : [row.id]; + + setRowSelection((prev) => { + const newValue = isGrouped + ? !rowIds.some((id) => prev[id]) // Select/Deselect all + : !prev[row.id]; + + return { + ...prev, + ...rowIds.reduce((acc, id) => ({ ...acc, [id]: newValue }), {}), + }; + }); + }, + selected: rowSelection[row.id], + sx: { cursor: isPending ? "wait" : "pointer" }, + }; + }, + // Toolbars + renderTopToolbarCustomActions: ({ table }) => ( + + {onCreate && ( + + )} + {onDuplicate && ( + + )} + {onDelete && ( + + )} + + ), + renderToolbarInternalActions: ({ table }) => ( + <> + + + + ), + onRowSelectionChange: setRowSelection, + // Styles + muiTablePaperProps: { sx: { display: "flex", flexDirection: "column" } }, // Allow to have scroll + ...R.mergeDeepRight(getTableOptionsForAlign("right"), { + muiTableBodyCellProps: { + sx: { borderBottom: "1px solid rgba(224, 224, 224, 0.3)" }, + }, + }), + }); + + const selectedRows = table + .getSelectedRowModel() + .rows.map((row) => row.original); + const selectedRow = selectedRows.length === 1 ? selectedRows[0] : null; + + //////////////////////////////////////////////////////////////// + // Optimistic + //////////////////////////////////////////////////////////////// + + const addPendingRow = (row: TRow) => { + const pendingRow = fillPendingRow?.(row) || row; + + pendingRows.current.push(pendingRow); + + // Type can be asserted as `TData` because the row will be checked in cell renders + // and `fillPendingRow` allows to add needed data + setTableData((prev) => [...prev, pendingRow as TData]); + + return pendingRow; + }; + + const removePendingRow = (row: TRow) => { + if (isPendingRow(row)) { + pendingRows.current = pendingRows.current.filter((r) => r !== row); + setTableData((prev) => prev.filter((r) => r !== row)); + } + }; + + function isPendingRow(row: TRow) { + return pendingRows.current.includes(row); + } + //////////////////////////////////////////////////////////////// // Utils //////////////////////////////////////////////////////////////// @@ -74,51 +308,80 @@ function GroupedDataTable({ // Event Handlers //////////////////////////////////////////////////////////////// - const handleCreate = async (values: TData) => { - if (onCreate) { - const newRow = await onCreate(values); - setTableData((prevTableData) => [...prevTableData, newRow]); - } - }; + const handleCreate = async (values: TRow) => { + closeDialog(); - const handleDelete = () => { - if (!onDelete) { + if (!onCreate) { return; } - const rowIndexes = Object.keys(rowSelection) - .map(Number) - // ignore groups names - .filter(Number.isInteger); + createOps.increment(); + const pendingRow = addPendingRow(values); - const rowIdsToDelete = rowIndexes.map((index) => tableData[index].id); + try { + const newRow = await onCreate(values); + setTableData((prev) => [...prev, newRow]); + } catch (error) { + enqueueErrorSnackbar(t("global.error.create"), toError(error)); + } - onDelete(rowIdsToDelete); - setTableData((prevTableData) => - prevTableData.filter((row) => !rowIdsToDelete.includes(row.id)), - ); - setRowSelection({}); - closeDialog(); + removePendingRow(pendingRow); + createOps.decrement(); }; - const handleDuplicate = async (name: string) => { - if (!selectedRow) { + const handleDuplicate = async (newName: string) => { + closeDialog(); + + if (!onDuplicate || !selectedRow) { return; } - const id = generateUniqueValue("id", name, tableData); + setRowSelection({}); const duplicatedRow = { ...selectedRow, - id, - name, + name: newName, }; - if (onCreate) { - const newRow = await onCreate(duplicatedRow); - setTableData((prevTableData) => [...prevTableData, newRow]); - setRowSelection({}); + createOps.increment(); + const pendingRow = addPendingRow(duplicatedRow); + + try { + const newRow = await onDuplicate(selectedRow, newName); + setTableData((prev) => [...prev, newRow]); + } catch (error) { + enqueueErrorSnackbar(t("global.error.create"), toError(error)); } + + removePendingRow(pendingRow); + createOps.decrement(); + }; + + const handleDelete = async () => { + closeDialog(); + + if (!onDelete) { + return; + } + + setRowSelection({}); + + const rowsToDelete = selectedRows; + + setTableData((prevTableData) => + prevTableData.filter((row) => !rowsToDelete.includes(row)), + ); + + deleteOps.increment(); + + try { + await onDelete(rowsToDelete); + } catch (error) { + enqueueErrorSnackbar(t("global.error.delete"), toError(error)); + setTableData((prevTableData) => [...prevTableData, ...rowsToDelete]); + } + + deleteOps.decrement(); }; //////////////////////////////////////////////////////////////// @@ -127,106 +390,7 @@ function GroupedDataTable({ return ( <> - { - const handleRowClick = () => { - // prevent group rows to be selected - if (groupingColumnId === undefined) { - setRowSelection((prev) => ({ - ...prev, - [id]: !prev[id], - })); - } - }; - - return { - onClick: handleRowClick, - selected: rowSelection[id], - sx: { - cursor: "pointer", - }, - }; - }} - state={{ rowSelection }} - enableColumnDragging={false} - enableColumnActions={false} - positionToolbarAlertBanner="none" - enableBottomToolbar={false} - enableStickyFooter - enableStickyHeader - enablePagination={false} - renderTopToolbarCustomActions={() => ( - - {onCreate && ( - - )} - - {onDelete && ( - - )} - - )} - renderToolbarInternalActions={({ table }) => ( - <> - - - - )} - muiTableHeadCellProps={{ - align: "right", - }} - muiTableBodyCellProps={{ - align: "right", - sx: { - borderBottom: "1px solid rgba(224, 224, 224, 0.3)", - }, - }} - muiTableFooterCellProps={{ - align: "right", - }} - muiTablePaperProps={{ - sx: { - width: 1, - display: "flex", - flexDirection: "column", - overflow: "auto", - }, - }} - /> + {openDialog === "add" && ( ({ onClose={closeDialog} onSubmit={handleDuplicate} existingNames={existingNames} - defaultName={generateUniqueValue("name", selectedRow.name, tableData)} + defaultName={generateUniqueValue(selectedRow.name, tableData)} /> )} {openDialog === "delete" && ( @@ -254,7 +418,9 @@ function GroupedDataTable({ onConfirm={handleDelete} alert="warning" > - {t("studies.modelization.clusters.question.delete")} + {RA.isFunction(deleteConfirmationMessage) + ? deleteConfirmationMessage(selectedRows.length) + : deleteConfirmationMessage ?? t("dialog.message.confirmDelete")} )} diff --git a/webapp/src/components/common/GroupedDataTable/types.ts b/webapp/src/components/common/GroupedDataTable/types.ts new file mode 100644 index 0000000000..6f91852cb4 --- /dev/null +++ b/webapp/src/components/common/GroupedDataTable/types.ts @@ -0,0 +1,4 @@ +export interface TRow { + name: string; + group: T; +} diff --git a/webapp/src/components/common/GroupedDataTable/utils.ts b/webapp/src/components/common/GroupedDataTable/utils.ts index df119f0fa8..f209d83bae 100644 --- a/webapp/src/components/common/GroupedDataTable/utils.ts +++ b/webapp/src/components/common/GroupedDataTable/utils.ts @@ -1,15 +1,6 @@ import * as R from "ramda"; -import { nameToId } from "../../../services/utils"; - -//////////////////////////////////////////////////////////////// -// Types -//////////////////////////////////////////////////////////////// - -export interface TRow { - id: string; - name: string; - group: string; -} +import { TableCellProps } from "@mui/material"; +import type { TRow } from "./types"; //////////////////////////////////////////////////////////////// // Functions @@ -58,24 +49,22 @@ export const generateNextValue = ( * * This function leverages `generateNextValue` to ensure the uniqueness of the value. * - * @param property - The property for which the unique value is generated, either "name" or "id". * @param originalValue - The original value of the specified property. * @param tableData - The existing table data to check against for ensuring uniqueness. * @returns A unique value for the specified property. */ export const generateUniqueValue = ( - property: "name" | "id", originalValue: string, tableData: TRow[], ): string => { - let baseValue: string; - - if (property === "name") { - baseValue = `${originalValue} - copy`; - } else { - baseValue = nameToId(originalValue); - } - - const existingValues = tableData.map((row) => row[property]); - return generateNextValue(baseValue, existingValues); + const existingValues = tableData.map((row) => row.name); + return generateNextValue(`${originalValue} - copy`, existingValues); }; + +export function getTableOptionsForAlign(align: TableCellProps["align"]) { + return { + muiTableHeadCellProps: { align }, + muiTableBodyCellProps: { align }, + muiTableFooterCellProps: { align }, + }; +} diff --git a/webapp/src/components/common/MatrixInput/index.tsx b/webapp/src/components/common/MatrixInput/index.tsx index 1bc3d00f33..7d1c081557 100644 --- a/webapp/src/components/common/MatrixInput/index.tsx +++ b/webapp/src/components/common/MatrixInput/index.tsx @@ -3,14 +3,11 @@ import { useSnackbar } from "notistack"; import { useState } from "react"; import { AxiosError } from "axios"; import debug from "debug"; -import { Typography, Box, Button, Divider, Tooltip } from "@mui/material"; -import UploadOutlinedIcon from "@mui/icons-material/UploadOutlined"; -import DownloadOutlinedIcon from "@mui/icons-material/DownloadOutlined"; -import InventoryIcon from "@mui/icons-material/Inventory"; +import { Typography, Box, Divider } from "@mui/material"; +import FileDownloadIcon from "@mui/icons-material/FileDownload"; import { MatrixEditDTO, MatrixStats, - MatrixType, StudyMetadata, } from "../../../common/types"; import useEnqueueErrorSnackbar from "../../../hooks/useEnqueueErrorSnackbar"; @@ -23,16 +20,16 @@ import SimpleContent from "../page/SimpleContent"; import EditableMatrix from "../EditableMatrix"; import ImportDialog from "../dialogs/ImportDialog"; import MatrixAssignDialog from "./MatrixAssignDialog"; -import { downloadMatrix } from "../../../utils/matrixUtils"; import { fetchMatrixFn } from "../../App/Singlestudy/explore/Modelization/Areas/Hydro/utils"; -import { LoadingButton } from "@mui/lab"; +import SplitButton from "../buttons/SplitButton"; +import DownloadMatrixButton from "../DownloadMatrixButton.tsx"; const logErr = debug("antares:createimportform:error"); interface Props { study: StudyMetadata; url: string; - columnsNames?: string[]; + columnsNames?: string[] | readonly string[]; rowNames?: string[]; title?: string; computStats: MatrixStats; @@ -57,7 +54,6 @@ function MatrixInput({ const [t] = useTranslation(); const [openImportDialog, setOpenImportDialog] = useState(false); const [openMatrixAsignDialog, setOpenMatrixAsignDialog] = useState(false); - const [isDownloading, setIsDownloading] = useState(false); const { data: matrixData, @@ -86,6 +82,7 @@ function MatrixInput({ * Otherwise, default row numbers and timestamps are displayed using initialRowNames. */ const rowNames = fetchFn ? matrixIndex : initialRowNames; + const columnsLength = matrixData?.columns?.length ?? 0; //////////////////////////////////////////////////////////////// // Utils @@ -138,16 +135,6 @@ function MatrixInput({ } }; - const handleDownload = async (matrixData: MatrixType, fileName: string) => { - setIsDownloading(true); - - // Re-fetch to get latest data - const data = await fetchMatrixData(); - downloadMatrix(data, fileName); - - setIsDownloading(false); - }; - //////////////////////////////////////////////////////////////// // JSX //////////////////////////////////////////////////////////////// @@ -166,54 +153,36 @@ function MatrixInput({ > {title || t("xpansion.timeSeries")} - - - - - - {matrixData?.columns?.length >= 1 && ( - } - onClick={() => - handleDownload( - matrixData, - `matrix_${study.id}_${url.replace("/", "_")}`, - ) - } - > - {t("global.download")} - - )} + + {isLoading && } - {!isLoading && matrixData?.columns?.length >= 1 && matrixIndex ? ( + {!isLoading && columnsLength >= 1 && matrixIndex ? ( ) : ( - !isLoading && ( - } - onClick={() => setOpenImportDialog(true)} - > - {t("global.import")} - - } - /> - ) + !isLoading && )} {openImportDialog && ( @@ -250,6 +205,9 @@ function MatrixInput({ dropzoneText={t("matrix.message.importHint")} onClose={() => setOpenImportDialog(false)} onImport={handleImport} + accept={{ + "text/tsv": [".tsv"], + }} /> )} {openMatrixAsignDialog && ( diff --git a/webapp/src/components/common/MatrixInput/style.ts b/webapp/src/components/common/MatrixInput/style.ts index 6fd49fd167..72b77419cb 100644 --- a/webapp/src/components/common/MatrixInput/style.ts +++ b/webapp/src/components/common/MatrixInput/style.ts @@ -13,7 +13,8 @@ export const Root = styled(Box)(({ theme }) => ({ export const Header = styled(Box)(({ theme }) => ({ width: "100%", display: "flex", - flexFlow: "row nowrap", + flexFlow: "row wrap", + gap: theme.spacing(1), justifyContent: "space-between", alignItems: "flex-end", })); diff --git a/webapp/src/components/common/TableMode.tsx b/webapp/src/components/common/TableMode.tsx index a96780f43d..e5770d79d2 100644 --- a/webapp/src/components/common/TableMode.tsx +++ b/webapp/src/components/common/TableMode.tsx @@ -1,3 +1,4 @@ +import { useEffect, useState } from "react"; import { StudyMetadata } from "../../common/types"; import usePromise from "../../hooks/usePromise"; import { @@ -8,10 +9,12 @@ import { TableData, TableModeColumnsForType, TableModeType, -} from "../../services/api/studies/tableMode/type"; +} from "../../services/api/studies/tableMode/types"; import { SubmitHandlerPlus } from "./Form/types"; import TableForm from "./TableForm"; import UsePromiseCond from "./utils/UsePromiseCond"; +import GridOffIcon from "@mui/icons-material/GridOff"; +import SimpleContent from "./page/SimpleContent"; export interface TableModeProps { studyId: StudyMetadata["id"]; @@ -21,17 +24,39 @@ export interface TableModeProps { function TableMode(props: TableModeProps) { const { studyId, type, columns } = props; + const [filteredColumns, setFilteredColumns] = useState(columns); - const res = usePromise(async () => { - return getTableMode(studyId, type, columns); - }, [studyId, type, JSON.stringify(columns)]); + const res = usePromise( + () => getTableMode({ studyId, tableType: type, columns }), + [studyId, type, columns.join(",")], + ); + + // Filter columns based on the data received, because the API may return + // fewer columns than requested depending on the study version + useEffect( + () => { + const dataKeys = Object.keys(res.data || {}); + + if (dataKeys.length === 0) { + setFilteredColumns([]); + return; + } + + const data = res.data!; + const dataRowKeys = Object.keys(data[dataKeys[0]]); + + setFilteredColumns(columns.filter((col) => dataRowKeys.includes(col))); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [res.data, columns.join(",")], + ); //////////////////////////////////////////////////////////////// // Event Handlers //////////////////////////////////////////////////////////////// const handleSubmit = (data: SubmitHandlerPlus) => { - return setTableMode(studyId, type, data.dirtyValues); + return setTableMode({ studyId, tableType: type, data: data.dirtyValues }); }; //////////////////////////////////////////////////////////////// @@ -41,14 +66,18 @@ function TableMode(props: TableModeProps) { return ( ( - - )} + ifResolved={(data) => + filteredColumns.length > 0 ? ( + + ) : ( + } title="study.results.noData" /> + ) + } /> ); } diff --git a/webapp/src/components/common/buttons/SplitButton.tsx b/webapp/src/components/common/buttons/SplitButton.tsx new file mode 100644 index 0000000000..684e74f212 --- /dev/null +++ b/webapp/src/components/common/buttons/SplitButton.tsx @@ -0,0 +1,144 @@ +import Button from "@mui/material/Button"; +import ButtonGroup, { ButtonGroupProps } from "@mui/material/ButtonGroup"; +import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; +import ClickAwayListener from "@mui/material/ClickAwayListener"; +import Grow from "@mui/material/Grow"; +import Paper from "@mui/material/Paper"; +import Popper from "@mui/material/Popper"; +import MenuItem from "@mui/material/MenuItem"; +import MenuList from "@mui/material/MenuList"; +import { useRef, useState } from "react"; +import LoadingButton, { type LoadingButtonProps } from "@mui/lab/LoadingButton"; + +interface OptionObj { + value: Value; + label?: string; + disabled?: boolean; +} + +export interface SplitButtonProps + extends Omit { + options: Array>; + dropdownActionMode?: "change" | "trigger"; + onClick?: (optionValue: OptionValue, optionIndex: number) => void; + ButtonProps?: Omit; +} + +export default function SplitButton( + props: SplitButtonProps, +) { + const { + options, + dropdownActionMode = "trigger", + onClick, + children, + ButtonProps: loadingButtonProps, + ...buttonGroupProps + } = props; + const [open, setOpen] = useState(false); + const [selectedIndex, setSelectedIndex] = useState(0); + const anchorRef = useRef(null); + const isChangeMode = dropdownActionMode === "change"; + const isTriggerMode = dropdownActionMode === "trigger"; + const formattedOptions = options.map((option) => + typeof option === "string" ? { value: option } : option, + ); + + //////////////////////////////////////////////////////////////// + // Event Handlers + //////////////////////////////////////////////////////////////// + + const handleButtonClick = () => { + if (onClick && formattedOptions.length > 0) { + const index = isChangeMode ? selectedIndex : 0; + onClick(formattedOptions[index].value, index); + } + }; + + const handleMenuItemClick = (index: number) => { + setSelectedIndex(index); + setOpen(false); + + if (isTriggerMode) { + onClick?.(formattedOptions[index].value, index); + } + }; + + const handleToggle = () => { + setOpen((prevOpen) => !prevOpen); + }; + + const handleClose = (event: Event) => { + if (anchorRef.current?.contains(event.target as HTMLElement)) { + return; + } + + setOpen(false); + }; + + //////////////////////////////////////////////////////////////// + // Utils + //////////////////////////////////////////////////////////////// + + const getDropdownLabel = (index: number) => { + const { value, label } = formattedOptions[index] || {}; + return label ?? value; + }; + + const getButtonLabel = (index: number) => { + return isChangeMode ? getDropdownLabel(index) : children; + }; + + //////////////////////////////////////////////////////////////// + // JSX + //////////////////////////////////////////////////////////////// + + return ( + <> + + + {getButtonLabel(selectedIndex)} + + + + + {({ TransitionProps }) => ( + + + + + {formattedOptions.map((option, index) => ( + handleMenuItemClick(index)} + > + {getDropdownLabel(index)} + + ))} + + + + + )} + + + ); +} diff --git a/webapp/src/components/common/dialogs/FormDialog.tsx b/webapp/src/components/common/dialogs/FormDialog.tsx index 8f0ab7673f..96ea4ac12f 100644 --- a/webapp/src/components/common/dialogs/FormDialog.tsx +++ b/webapp/src/components/common/dialogs/FormDialog.tsx @@ -83,8 +83,10 @@ function FormDialog< //////////////////////////////////////////////////////////////// const handleClose: FormDialogProps["onClose"] = (...args) => { - onCancel(); - onClose?.(...args); + if (!isSubmitting) { + onCancel(); + onClose?.(...args); + } }; //////////////////////////////////////////////////////////////// diff --git a/webapp/src/components/common/dialogs/ImportDialog.tsx b/webapp/src/components/common/dialogs/ImportDialog.tsx index a5e0402edd..e4aec2498f 100644 --- a/webapp/src/components/common/dialogs/ImportDialog.tsx +++ b/webapp/src/components/common/dialogs/ImportDialog.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from "react"; import * as R from "ramda"; import { Box, LinearProgress, Paper, Typography } from "@mui/material"; -import Dropzone from "react-dropzone"; +import Dropzone, { type Accept } from "react-dropzone"; import { useMountedState } from "react-use"; import { useTranslation } from "react-i18next"; import BasicDialog, { BasicDialogProps } from "./BasicDialog"; @@ -10,6 +10,7 @@ interface Props { open: BasicDialogProps["open"]; title?: string; dropzoneText?: string; + accept?: Accept; onClose: VoidFunction; onImport: ( file: File, @@ -18,7 +19,7 @@ interface Props { } function ImportDialog(props: Props) { - const { open, title, dropzoneText, onClose, onImport } = props; + const { open, title, dropzoneText, accept, onClose, onImport } = props; const [t] = useTranslation(); const [isUploading, setIsUploading] = useState(false); const [uploadProgress, setUploadProgress] = useState(-1); @@ -92,7 +93,12 @@ function ImportDialog(props: Props) { value={uploadProgress} /> ) : ( - + {({ getRootProps, getInputProps }) => (
diff --git a/webapp/src/components/common/fieldEditors/ListFE/index.tsx b/webapp/src/components/common/fieldEditors/ListFE/index.tsx index d72fa71c81..29f3518e26 100644 --- a/webapp/src/components/common/fieldEditors/ListFE/index.tsx +++ b/webapp/src/components/common/fieldEditors/ListFE/index.tsx @@ -42,9 +42,9 @@ import { import { makeLabel, makeListItems } from "./utils"; interface ListFEProps { - defaultValue?: readonly TItem[]; - value?: readonly TItem[]; - options: readonly TOption[]; + defaultValue?: TItem[]; + value?: TItem[]; + options?: TOption[]; label?: string; getOptionLabel?: (option: TOption) => string; getValueLabel?: (value: TItem) => string; @@ -64,7 +64,7 @@ function ListFE(props: ListFEProps) { value, defaultValue, label, - options, + options = [], getOptionLabel = makeLabel, getValueLabel = makeLabel, optionToItem = (option: TOption) => option as unknown as TItem, diff --git a/webapp/src/hooks/useOperationInProgressCount.ts b/webapp/src/hooks/useOperationInProgressCount.ts new file mode 100644 index 0000000000..bc71fb677a --- /dev/null +++ b/webapp/src/hooks/useOperationInProgressCount.ts @@ -0,0 +1,51 @@ +import { useMemo, useState } from "react"; +import * as R from "ramda"; + +/** + * Hook to tracks the number of CRUD operations in progress. + * + * @returns An object containing methods to increment, decrement, + * and retrieve the count of each operation type. + */ +function useOperationInProgressCount() { + const [opsInProgressCount, setOpsInProgressCount] = useState({ + create: 0, + read: 0, + update: 0, + delete: 0, + }); + + const makeOperationMethods = ( + operation: keyof typeof opsInProgressCount, + ) => ({ + increment: (number = 1) => { + setOpsInProgressCount((prev) => ({ + ...prev, + [operation]: prev[operation] + number, + })); + }, + decrement: (number = 1) => { + setOpsInProgressCount((prev) => ({ + ...prev, + [operation]: Math.max(prev[operation] - number, 0), + })); + }, + total: opsInProgressCount[operation], + }); + + const methods = useMemo( + () => ({ + createOps: makeOperationMethods("create"), + readOps: makeOperationMethods("read"), + updateOps: makeOperationMethods("update"), + deleteOps: makeOperationMethods("delete"), + totalOps: Object.values(opsInProgressCount).reduce(R.add, 0), + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [opsInProgressCount], + ); + + return methods; +} + +export default useOperationInProgressCount; diff --git a/webapp/src/hooks/useUpdateEffectOnce.ts b/webapp/src/hooks/useUpdateEffectOnce.ts new file mode 100644 index 0000000000..61fedd115e --- /dev/null +++ b/webapp/src/hooks/useUpdateEffectOnce.ts @@ -0,0 +1,23 @@ +import { useEffect, useRef } from "react"; +import { useUpdateEffect } from "react-use"; + +/** + * Hook that runs the effect only at the first dependencies update. + * It behaves like the `useEffect` hook, but it skips the initial run, + * and the runs following the first update. + * + * @param effect - The effect function to run. + * @param deps - An array of dependencies to watch for changes. + */ +const useUpdateEffectOnce: typeof useEffect = (effect, deps) => { + const hasUpdated = useRef(false); + + useUpdateEffect(() => { + if (!hasUpdated.current) { + hasUpdated.current = true; + return effect(); + } + }, deps); +}; + +export default useUpdateEffectOnce; diff --git a/webapp/src/i18n.ts b/webapp/src/i18n.ts index d1d95a0574..980cffbf89 100644 --- a/webapp/src/i18n.ts +++ b/webapp/src/i18n.ts @@ -2,34 +2,35 @@ import i18n from "i18next"; import Backend from "i18next-http-backend"; import LanguageDetector from "i18next-browser-languagedetector"; import { initReactI18next } from "react-i18next"; +import { version } from "../package.json"; -export default function i18nInit(version = "unknown") { - i18n - // load translation using xhr -> see /public/locales - // learn more: https://github.com/i18next/i18next-xhr-backend - .use(Backend) - // detect user language - // learn more: https://github.com/i18next/i18next-browser-languageDetector - .use(LanguageDetector) - // pass the i18n instance to react-i18next. - .use(initReactI18next) - // init i18next - // for all options read: https://www.i18next.com/overview/configuration-options - .init({ - fallbackLng: "en", - backend: { - loadPath: `${ - import.meta.env.BASE_URL - }locales/{{lng}}/{{ns}}.json?v=${version}`, - }, - react: { - useSuspense: false, - }, - interpolation: { - escapeValue: false, // not needed for react as it escapes by default - }, - ns: ["main"], - defaultNS: "main", - returnNull: false, - }); -} +i18n + // load translation using xhr -> see /public/locales + // learn more: https://github.com/i18next/i18next-xhr-backend + .use(Backend) + // detect user language + // learn more: https://github.com/i18next/i18next-browser-languageDetector + .use(LanguageDetector) + // pass the i18n instance to react-i18next. + .use(initReactI18next) + // init i18next + // for all options read: https://www.i18next.com/overview/configuration-options + .init({ + fallbackLng: "en", + backend: { + loadPath: `${ + import.meta.env.BASE_URL + }locales/{{lng}}/{{ns}}.json?v=${version}`, + }, + react: { + useSuspense: false, + }, + interpolation: { + escapeValue: false, // not needed for react as it escapes by default + }, + ns: ["main"], + defaultNS: "main", + returnNull: false, + }); + +export default i18n; diff --git a/webapp/src/index.tsx b/webapp/src/index.tsx index 80dec85813..2c6792f7a8 100644 --- a/webapp/src/index.tsx +++ b/webapp/src/index.tsx @@ -1,7 +1,6 @@ import { createRoot } from "react-dom/client"; import { Provider } from "react-redux"; import { StyledEngineProvider } from "@mui/material"; -import i18nInit from "./i18n"; import "./index.css"; import App from "./components/App"; import { Config, initConfig } from "./services/config"; @@ -15,8 +14,6 @@ initConfig((config: Config) => { window.location.reload(); } - i18nInit(config.version.gitcommit); - const container = document.getElementById("root") as HTMLElement; const root = createRoot(container); diff --git a/webapp/src/services/api/constants.ts b/webapp/src/services/api/constants.ts deleted file mode 100644 index 421ab814ed..0000000000 --- a/webapp/src/services/api/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -const API_URL_BASE = "v1"; -const STUDIES_API_URL = `${API_URL_BASE}/studies/{studyId}`; - -export const TABLE_MODE_API_URL = `${STUDIES_API_URL}/tablemode`; diff --git a/webapp/src/services/api/studies/config/thematicTrimming/index.ts b/webapp/src/services/api/studies/config/thematicTrimming/index.ts new file mode 100644 index 0000000000..0228eb98fc --- /dev/null +++ b/webapp/src/services/api/studies/config/thematicTrimming/index.ts @@ -0,0 +1,25 @@ +import type { + GetThematicTrimmingConfigParams, + SetThematicTrimmingConfigParams, + ThematicTrimmingConfig, +} from "./types"; +import client from "../../../client"; +import { format } from "../../../../../utils/stringUtils"; + +const URL = "/v1/studies/{studyId}/config/thematictrimming/form"; + +export async function getThematicTrimmingConfig({ + studyId, +}: GetThematicTrimmingConfigParams) { + const url = format(URL, { studyId }); + const res = await client.get(url); + return res.data; +} + +export async function setThematicTrimmingConfig({ + studyId, + config, +}: SetThematicTrimmingConfigParams) { + const url = format(URL, { studyId }); + await client.put(url, config); +} diff --git a/webapp/src/services/api/studies/config/thematicTrimming/types.ts b/webapp/src/services/api/studies/config/thematicTrimming/types.ts new file mode 100644 index 0000000000..1137a9536f --- /dev/null +++ b/webapp/src/services/api/studies/config/thematicTrimming/types.ts @@ -0,0 +1,111 @@ +import { StudyMetadata } from "../../../../../common/types"; + +export interface ThematicTrimmingConfig { + ovCost: boolean; + opCost: boolean; + mrgPrice: boolean; + co2Emis: boolean; + dtgByPlant: boolean; + balance: boolean; + rowBal: boolean; + psp: boolean; + miscNdg: boolean; + load: boolean; + hRor: boolean; + wind: boolean; + solar: boolean; + nuclear: boolean; + lignite: boolean; + coal: boolean; + gas: boolean; + oil: boolean; + mixFuel: boolean; + miscDtg: boolean; + hStor: boolean; + hPump: boolean; + hLev: boolean; + hInfl: boolean; + hOvfl: boolean; + hVal: boolean; + hCost: boolean; + unspEnrg: boolean; + spilEnrg: boolean; + lold: boolean; + lolp: boolean; + avlDtg: boolean; + dtgMrg: boolean; + maxMrg: boolean; + npCost: boolean; + npCostByPlant: boolean; + nodu: boolean; + noduByPlant: boolean; + flowLin: boolean; + ucapLin: boolean; + loopFlow: boolean; + flowQuad: boolean; + congFeeAlg: boolean; + congFeeAbs: boolean; + margCost: boolean; + congProbPlus: boolean; + congProbMinus: boolean; + hurdleCost: boolean; + // Since v8.1 + resGenerationByPlant?: boolean; + miscDtg2?: boolean; + miscDtg3?: boolean; + miscDtg4?: boolean; + windOffshore?: boolean; + windOnshore?: boolean; + solarConcrt?: boolean; + solarPv?: boolean; + solarRooft?: boolean; + renw1?: boolean; + renw2?: boolean; + renw3?: boolean; + renw4?: boolean; + // Since v8.3 + dens?: boolean; + profitByPlant?: boolean; + // Since v8.6 + stsInjByPlant?: boolean; + stsWithdrawalByPlant?: boolean; + stsLvlByPlant?: boolean; + pspOpenInjection?: boolean; + pspOpenWithdrawal?: boolean; + pspOpenLevel?: boolean; + pspClosedInjection?: boolean; + pspClosedWithdrawal?: boolean; + pspClosedLevel?: boolean; + pondageInjection?: boolean; + pondageWithdrawal?: boolean; + pondageLevel?: boolean; + batteryInjection?: boolean; + batteryWithdrawal?: boolean; + batteryLevel?: boolean; + other1Injection?: boolean; + other1Withdrawal?: boolean; + other1Level?: boolean; + other2Injection?: boolean; + other2Withdrawal?: boolean; + other2Level?: boolean; + other3Injection?: boolean; + other3Withdrawal?: boolean; + other3Level?: boolean; + other4Injection?: boolean; + other4Withdrawal?: boolean; + other4Level?: boolean; + other5Injection?: boolean; + other5Withdrawal?: boolean; + other5Level?: boolean; + // Since v8.8 + stsCashflowByCluster?: boolean; +} + +export interface GetThematicTrimmingConfigParams { + studyId: StudyMetadata["id"]; +} + +export interface SetThematicTrimmingConfigParams { + studyId: StudyMetadata["id"]; + config: ThematicTrimmingConfig; +} diff --git a/webapp/src/services/api/studies/raw/index.ts b/webapp/src/services/api/studies/raw/index.ts new file mode 100644 index 0000000000..63e46dc31a --- /dev/null +++ b/webapp/src/services/api/studies/raw/index.ts @@ -0,0 +1,13 @@ +import client from "../../client"; +import type { DownloadMatrixParams } from "./types"; + +export async function downloadMatrix(params: DownloadMatrixParams) { + const { studyId, ...rest } = params; + const url = `v1/studies/${studyId}/raw/download`; + const res = await client.get(url, { + params: rest, + responseType: "blob", + }); + + return res.data; +} diff --git a/webapp/src/services/api/studies/raw/types.ts b/webapp/src/services/api/studies/raw/types.ts new file mode 100644 index 0000000000..e524fbdc72 --- /dev/null +++ b/webapp/src/services/api/studies/raw/types.ts @@ -0,0 +1,9 @@ +import type { StudyMetadata } from "../../../../common/types"; + +export interface DownloadMatrixParams { + studyId: StudyMetadata["id"]; + path: string; + format?: "tsv" | "xlsx"; + header?: boolean; + index?: boolean; +} diff --git a/webapp/src/services/api/studies/tableMode/constants.ts b/webapp/src/services/api/studies/tableMode/constants.ts index 70526c7484..acef3d51f6 100644 --- a/webapp/src/services/api/studies/tableMode/constants.ts +++ b/webapp/src/services/api/studies/tableMode/constants.ts @@ -1,20 +1,30 @@ -const AREA = "area"; -const LINK = "link"; -const CLUSTER = "cluster"; -const RENEWABLE = "renewable"; -const BINDING_CONSTRAINT = "binding constraint"; +const AREA = "areas"; +const LINK = "links"; +const THERMAL = "thermals"; +const RENEWABLE = "renewables"; +const ST_STORAGE = "st-storages"; +const BINDING_CONSTRAINT = "binding-constraints"; export const TABLE_MODE_TYPES = [ AREA, LINK, - CLUSTER, + THERMAL, RENEWABLE, + ST_STORAGE, BINDING_CONSTRAINT, ] as const; +// Deprecated types (breaking change from v2.16.8) +export const TABLE_MODE_TYPES_ALIASES = { + area: AREA, + link: LINK, + cluster: THERMAL, + renewable: RENEWABLE, + "binding constraint": BINDING_CONSTRAINT, +}; + export const TABLE_MODE_COLUMNS_BY_TYPE = { [AREA]: [ - // Optimization - Nodal optimization "nonDispatchablePower", "dispatchableHydroPower", "otherDispatchablePower", @@ -22,10 +32,9 @@ export const TABLE_MODE_COLUMNS_BY_TYPE = { "spreadUnsuppliedEnergyCost", "averageSpilledEnergyCost", "spreadSpilledEnergyCost", - // Optimization - Filtering "filterSynthesis", "filterYearByYear", - // Adequacy patch + // Since v8.3 "adequacyPatchMode", ], [LINK]: [ @@ -36,38 +45,79 @@ export const TABLE_MODE_COLUMNS_BY_TYPE = { "assetType", "linkStyle", "linkWidth", + "comments", "displayComments", "filterSynthesis", "filterYearByYear", ], - [CLUSTER]: [ + [THERMAL]: [ "group", "enabled", - "mustRun", "unitCount", "nominalCapacity", + "genTs", "minStablePower", - "spinning", "minUpTime", "minDownTime", - "co2", - "marginalCost", - "fixedCost", - "startupCost", - "marketBidCost", - "spreadCost", - "tsGen", + "mustRun", + "spinning", "volatilityForced", "volatilityPlanned", "lawForced", "lawPlanned", + "marginalCost", + "spreadCost", + "fixedCost", + "startupCost", + "marketBidCost", + "co2", + // Since v8.6 + "nh3", + "so2", + "nox", + "pm25", + "pm5", + "pm10", + "nmvoc", + "op1", + "op2", + "op3", + "op4", + "op5", + // Since v8.7 + "costGeneration", + "efficiency", + "variableOMCost", ], [RENEWABLE]: [ + // Since v8.1 "group", - "tsInterpretation", "enabled", + "tsInterpretation", "unitCount", "nominalCapacity", ], - [BINDING_CONSTRAINT]: ["type", "operator", "enabled"], + [ST_STORAGE]: [ + // Since v8.6 + "group", + "injectionNominalCapacity", + "withdrawalNominalCapacity", + "reservoirCapacity", + "efficiency", + "initialLevel", + "initialLevelOptim", + // Since v8.8 + "enabled", + ], + [BINDING_CONSTRAINT]: [ + "enabled", + "timeStep", + "operator", + "comments", + // Since v8.3 + "filterSynthesis", + "filterYearByYear", + // Since v8.7 + "group", + ], } as const; diff --git a/webapp/src/services/api/studies/tableMode/index.ts b/webapp/src/services/api/studies/tableMode/index.ts index c6c4db5b80..03915b259e 100644 --- a/webapp/src/services/api/studies/tableMode/index.ts +++ b/webapp/src/services/api/studies/tableMode/index.ts @@ -1,35 +1,29 @@ -import { DeepPartial } from "react-hook-form"; -import { StudyMetadata } from "../../../../common/types"; import client from "../../client"; import { format } from "../../../../utils/stringUtils"; -import { TABLE_MODE_API_URL } from "../../constants"; -import type { TableData, TableModeColumnsForType, TableModeType } from "./type"; -import { toColumnApiName } from "./utils"; +import type { + GetTableModeParams, + SetTableModeParams, + TableData, + TableModeType, +} from "./types"; + +const TABLE_MODE_API_URL = `v1/studies/{studyId}/table-mode/{tableType}`; export async function getTableMode( - studyId: StudyMetadata["id"], - type: T, - columns: TableModeColumnsForType, -): Promise { - const url = format(TABLE_MODE_API_URL, { studyId }); - const res = await client.get(url, { - params: { - table_type: type, - columns: columns.map(toColumnApiName).join(","), - }, + params: GetTableModeParams, +) { + const { studyId, tableType, columns } = params; + const url = format(TABLE_MODE_API_URL, { studyId, tableType }); + + const res = await client.get(url, { + params: columns.length > 0 ? { columns: columns.join(",") } : {}, }); + return res.data; } -export function setTableMode( - studyId: StudyMetadata["id"], - type: TableModeType, - data: DeepPartial, -): Promise { - const url = format(TABLE_MODE_API_URL, { studyId }); - return client.put(url, data, { - params: { - table_type: type, - }, - }); +export async function setTableMode(params: SetTableModeParams) { + const { studyId, tableType, data } = params; + const url = format(TABLE_MODE_API_URL, { studyId, tableType }); + await client.put(url, data); } diff --git a/webapp/src/services/api/studies/tableMode/type.ts b/webapp/src/services/api/studies/tableMode/type.ts deleted file mode 100644 index 71b751d875..0000000000 --- a/webapp/src/services/api/studies/tableMode/type.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TABLE_MODE_COLUMNS_BY_TYPE, TABLE_MODE_TYPES } from "./constants"; - -export type TableModeType = (typeof TABLE_MODE_TYPES)[number]; - -export type TableModeColumnsForType = Array< - (typeof TABLE_MODE_COLUMNS_BY_TYPE)[T][number] ->; - -export type TableData = Record< - string, - Record ->; diff --git a/webapp/src/services/api/studies/tableMode/types.ts b/webapp/src/services/api/studies/tableMode/types.ts new file mode 100644 index 0000000000..e20a167e27 --- /dev/null +++ b/webapp/src/services/api/studies/tableMode/types.ts @@ -0,0 +1,26 @@ +import { DeepPartial } from "react-hook-form"; +import type { StudyMetadata } from "../../../../common/types"; +import { TABLE_MODE_COLUMNS_BY_TYPE, TABLE_MODE_TYPES } from "./constants"; + +export type TableModeType = (typeof TABLE_MODE_TYPES)[number]; + +export type TableModeColumnsForType = Array< + (typeof TABLE_MODE_COLUMNS_BY_TYPE)[T][number] +>; + +export type TableData = Record< + string, + Record +>; + +export interface GetTableModeParams { + studyId: StudyMetadata["id"]; + tableType: T; + columns: TableModeColumnsForType; +} + +export interface SetTableModeParams { + studyId: StudyMetadata["id"]; + tableType: TableModeType; + data: DeepPartial; +} diff --git a/webapp/src/services/api/studies/tableMode/utils.ts b/webapp/src/services/api/studies/tableMode/utils.ts deleted file mode 100644 index e856785502..0000000000 --- a/webapp/src/services/api/studies/tableMode/utils.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { snakeCase } from "lodash"; -import { TableModeColumnsForType, TableModeType } from "./type"; - -export function toColumnApiName( - column: TableModeColumnsForType[number], -) { - if (column === "co2") { - return "co2"; - } - return snakeCase(column); -} diff --git a/webapp/src/services/api/studydata.ts b/webapp/src/services/api/studydata.ts index 6558a3d15f..a39b55f20b 100644 --- a/webapp/src/services/api/studydata.ts +++ b/webapp/src/services/api/studydata.ts @@ -1,5 +1,4 @@ import { - AllClustersAndLinks, LinkCreationInfoDTO, LinkInfoWithUI, UpdateAreaUi, @@ -16,7 +15,7 @@ export const createArea = async ( uuid: string, name: string, ): Promise => { - const res = await client.post(`/v1/studies/${uuid}/areas?uuid=${uuid}`, { + const res = await client.post(`/v1/studies/${uuid}/areas`, { name, type: "AREA", }); @@ -27,10 +26,7 @@ export const createLink = async ( uuid: string, linkCreationInfo: LinkCreationInfoDTO, ): Promise => { - const res = await client.post( - `/v1/studies/${uuid}/links?uuid=${uuid}`, - linkCreationInfo, - ); + const res = await client.post(`/v1/studies/${uuid}/links`, linkCreationInfo); return res.data; }; @@ -41,7 +37,7 @@ export const updateAreaUI = async ( areaUi: UpdateAreaUi, ): Promise => { const res = await client.put( - `/v1/studies/${uuid}/areas/${areaId}/ui?uuid=${uuid}&area_id=${areaId}&layer=${layerId}`, + `/v1/studies/${uuid}/areas/${areaId}/ui?layer=${layerId}`, areaUi, ); return res.data; @@ -51,9 +47,7 @@ export const deleteArea = async ( uuid: string, areaId: string, ): Promise => { - const res = await client.delete( - `/v1/studies/${uuid}/areas/${areaId}?uuid=${uuid}&area_id=${areaId}`, - ); + const res = await client.delete(`/v1/studies/${uuid}/areas/${areaId}`); return res.data; }; @@ -63,7 +57,7 @@ export const deleteLink = async ( areaIdTo: string, ): Promise => { const res = await client.delete( - `/v1/studies/${uuid}/links/${areaIdFrom}/${areaIdTo}?uuid=${uuid}&area_from=${areaIdFrom}&area_to=${areaIdTo}`, + `/v1/studies/${uuid}/links/${areaIdFrom}/${areaIdTo}`, ); return res.data; }; @@ -156,13 +150,6 @@ export const createBindingConstraint = async ( return res.data; }; -export const getClustersAndLinks = async ( - uuid: string, -): Promise => { - const res = await client.get(`/v1/studies/${uuid}/linksandclusters`); - return res.data; -}; - interface GetAllLinksParams { uuid: string; withUi?: boolean; @@ -176,10 +163,7 @@ export const getAllLinks = async ( params: T, ): Promise>> => { const { uuid, withUi } = params; - const res = await client.get( - `/v1/studies/${uuid}/links${withUi ? `?with_ui=${withUi}` : ""}`, - ); + const withUiStr = withUi ? "with_ui=true" : ""; + const res = await client.get(`/v1/studies/${uuid}/links?${withUiStr}`); return res.data; }; - -export default {}; diff --git a/webapp/src/services/utils/localStorage.ts b/webapp/src/services/utils/localStorage.ts index fa5c084c56..faa230e17a 100644 --- a/webapp/src/services/utils/localStorage.ts +++ b/webapp/src/services/utils/localStorage.ts @@ -4,6 +4,7 @@ import { UserInfo } from "../../common/types"; import { TableTemplate } from "../../components/App/Singlestudy/explore/TableModeList/utils"; import { StudiesSortConf, StudiesState } from "../../redux/ducks/studies"; import { UIState } from "../../redux/ducks/ui"; +import { TABLE_MODE_TYPES_ALIASES } from "../api/studies/tableMode/constants"; export enum StorageKey { Version = "version", @@ -46,7 +47,18 @@ function getItem(key: T): TypeFromKey[T] | null { if (serializedState === null) { return null; } - return JSON.parse(serializedState); + const res = JSON.parse(serializedState); + + // Convert deprecated types to new ones (breaking change from v2.16.8) + if (key === StorageKey.StudiesModelTableModeTemplates) { + return res.map((template: Record) => ({ + ...template, + // @ts-expect-error To ignore error TS2551 + type: TABLE_MODE_TYPES_ALIASES[template.type] ?? template.type, + })); + } + + return res; } catch (err) { return null; } diff --git a/webapp/src/utils/fileUtils.ts b/webapp/src/utils/fileUtils.ts new file mode 100644 index 0000000000..0233d6f984 --- /dev/null +++ b/webapp/src/utils/fileUtils.ts @@ -0,0 +1,13 @@ +/** + * Triggers the download of a file with the given data and name. + * + * @param fileData - The data of the file to be downloaded. + * @param fileName - The name of the file to be downloaded. + */ +export function downloadFile(fileData: BlobPart, fileName: string) { + const link = document.createElement("a"); + link.href = URL.createObjectURL(new Blob([fileData])); + link.download = fileName; + link.click(); + URL.revokeObjectURL(link.href); +} diff --git a/webapp/src/utils/fnUtils.ts b/webapp/src/utils/fnUtils.ts index 226e58c836..dd32ac4c97 100644 --- a/webapp/src/utils/fnUtils.ts +++ b/webapp/src/utils/fnUtils.ts @@ -11,3 +11,22 @@ export function voidFn(...args: TArgs) { // Intentionally empty, as its purpose is to do nothing. } + +/** + * A utility function that converts an unknown value to an Error object. + * If the value is already an Error object, it is returned as is. + * If the value is a string, it is used as the message for the new Error object. + * If the value is anything else, a new Error object with a generic message is created. + * + * @param error - The value to convert to an Error object. + * @returns An Error object. + */ +export function toError(error: unknown) { + if (error instanceof Error) { + return error; + } + if (typeof error === "string") { + return new Error(error); + } + return new Error("An unknown error occurred"); +} diff --git a/webapp/src/utils/i18nUtils.ts b/webapp/src/utils/i18nUtils.ts new file mode 100644 index 0000000000..c613deab68 --- /dev/null +++ b/webapp/src/utils/i18nUtils.ts @@ -0,0 +1,22 @@ +import i18n from "../i18n"; + +/** + * Gets the current language used in the application. + * + * @returns The current language. + */ +export function getCurrentLanguage() { + return i18n.language; +} + +/** + * Translates the given key and appends a colon (:) at the end + * with the appropriate spacing for the current language. + * + * @param key - The translation key. + * @returns The translated string with a colon (:) appended. + */ +export function translateWithColon(key: string): string { + const lang = i18n.language; + return `${i18n.t(key)}${lang.startsWith("fr") ? " " : ""}:`; +} diff --git a/webapp/src/utils/matrixUtils.ts b/webapp/src/utils/matrixUtils.ts deleted file mode 100644 index c4380f8bcb..0000000000 --- a/webapp/src/utils/matrixUtils.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { MatrixType } from "../common/types"; - -export function downloadMatrix(matrixData: MatrixType, fileName: string): void { - const fileData = matrixData.data.map((row) => row.join("\t")).join("\n"); - const blob = new Blob([fileData], { type: "text/plain" }); - const a = document.createElement("a"); - a.download = fileName; - a.href = URL.createObjectURL(blob); - a.click(); - URL.revokeObjectURL(a.href); -} diff --git a/webapp/src/utils/tsUtils.ts b/webapp/src/utils/tsUtils.ts index eb60713aa8..7acf6465a2 100644 --- a/webapp/src/utils/tsUtils.ts +++ b/webapp/src/utils/tsUtils.ts @@ -1,3 +1,16 @@ +import { O } from "ts-toolbelt"; + +/** + * Allow to use `any` with `Promise` type without disabling ESLint rule. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type PromiseAny = Promise; + +/** + * Make all properties in T optional, except for those specified by K. + */ +export type PartialExceptFor = O.Required, K>; + export function tuple(...items: T): T { return items; } diff --git a/webapp/src/utils/validationUtils.ts b/webapp/src/utils/validationUtils.ts index 94f1f95c30..86fb294d8b 100644 --- a/webapp/src/utils/validationUtils.ts +++ b/webapp/src/utils/validationUtils.ts @@ -4,7 +4,12 @@ import { t } from "i18next"; // Types //////////////////////////////////////////////////////////////// -interface ValidationOptions { +interface NumberValidationOptions { + min?: number; + max?: number; +} + +interface StringValidationOptions { existingValues?: string[]; excludedValues?: string[]; isCaseSensitive?: boolean; @@ -12,8 +17,8 @@ interface ValidationOptions { specialChars?: string; allowSpaces?: boolean; editedValue?: string; - min?: number; - max?: number; + minLength?: number; + maxLength?: number; } //////////////////////////////////////////////////////////////// @@ -35,13 +40,13 @@ interface ValidationOptions { * @param [options.specialChars="&()_-"] - A string representing additional allowed characters outside the typical alphanumeric scope. * @param [options.allowSpaces=true] - Flags if spaces are allowed in the value. * @param [options.editedValue=""] - The current value being edited, to exclude it from duplicate checks. - * @param [options.min=0] - Minimum length required for the string. Defaults to 0. - * @param [options.max=255] - Maximum allowed length for the string. Defaults to 255. + * @param [options.minLength=0] - Minimum length required for the string. Defaults to 0. + * @param [options.maxLength=255] - Maximum allowed length for the string. Defaults to 255. * @returns True if validation is successful, or a localized error message if it fails. */ export function validateString( value: string, - options?: ValidationOptions, + options?: StringValidationOptions, ): string | true { const { existingValues = [], @@ -51,8 +56,8 @@ export function validateString( allowSpaces = true, specialChars = "&()_-", editedValue = "", - min = 0, - max = 255, + minLength = 0, + maxLength = 255, } = options || {}; const trimmedValue = value.trim(); @@ -65,12 +70,12 @@ export function validateString( return t("form.field.spacesNotAllowed"); } - if (trimmedValue.length < min) { - return t("form.field.minValue", { 0: min }); + if (trimmedValue.length < minLength) { + return t("form.field.minLength", { length: minLength }); } - if (trimmedValue.length > max) { - return t("form.field.maxValue", { 0: max }); + if (trimmedValue.length > maxLength) { + return t("form.field.maxLength", { length: maxLength }); } // Compiles a regex pattern based on allowed characters and flags. @@ -99,7 +104,7 @@ export function validateString( // Check for duplication against existing values. if (existingValues.map(normalize).includes(comparisonValue)) { - return t("form.field.duplicate", { 0: value }); + return t("form.field.duplicate"); } // Check for inclusion in the list of excluded values. @@ -124,11 +129,11 @@ export function validatePassword(password: string): string | true { } if (trimmedPassword.length < 8) { - return t("form.field.minValue", { 0: 8 }); + return t("form.field.minLength", { length: 8 }); } if (trimmedPassword.length > 50) { - return t("form.field.maxValue", { 0: 50 }); + return t("form.field.maxLength", { length: 50 }); } if (!/[a-z]/.test(trimmedPassword)) { @@ -150,6 +155,62 @@ export function validatePassword(password: string): string | true { return true; } +/** + * Validates a number against specified numerical limits. + * + * @example + * validateNumber(5, { min: 0, max: 10 }); // true + * validateNumber(9, { min: 10, max: 20 }); // Error message + * + * + * @example With currying. + * const fn = validateNumber({ min: 0, max: 10 }); + * fn(5); // true + * fn(11); // Error message + * + * @param value - The number to validate. + * @param [options] - Configuration options for validation. + * @param [options.min=Number.MIN_SAFE_INTEGER] - Minimum allowed value. + * @param [options.max=Number.MAX_SAFE_INTEGER] - Maximum allowed value. + * @returns True if validation is successful, or a localized error message if it fails. + */ +export function validateNumber( + value: number, + options?: NumberValidationOptions, +): string | true; + +export function validateNumber( + options?: NumberValidationOptions, +): (value: number) => string | true; + +export function validateNumber( + valueOrOpts?: number | NumberValidationOptions, + options: NumberValidationOptions = {}, +): (string | true) | ((value: number) => string | true) { + if (typeof valueOrOpts !== "number") { + return (v: number) => validateNumber(v, valueOrOpts); + } + + const value = valueOrOpts; + + if (!isFinite(value)) { + return t("form.field.invalidNumber", { value }); + } + + const { min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER } = + options; + + if (value < min) { + return t("form.field.minValue", { 0: min }); + } + + if (value > max) { + return t("form.field.maxValue", { 0: max }); + } + + return true; +} + //////////////////////////////////////////////////////////////// // Utils ////////////////////////////////////////////////////////////////