From ae03f17293d403040c632cc0bb1bc63d2fbba3ba Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 10 Jun 2025 15:57:11 +0200 Subject: [PATCH 01/73] bidi draft --- .../control/algorithm/additional_current.py | 1 - packages/control/algorithm/bidi.py | 63 +++++++ packages/control/algorithm/chargemodes.py | 15 +- .../control/algorithm/surplus_controlled.py | 63 +++---- .../algorithm/surplus_controlled_test.py | 5 +- packages/control/bat_all.py | 1 + packages/control/chargemode.py | 1 + packages/control/chargepoint/chargepoint.py | 38 +++-- .../control/chargepoint/chargepoint_data.py | 2 + packages/control/ev/charge_template.py | 161 ++++++++++++++++-- packages/control/ev/charge_template_test.py | 2 +- packages/control/ev/ev.py | 36 +++- packages/control/ev/ev_template.py | 1 + packages/control/text.py | 8 + packages/helpermodules/setdata.py | 3 +- packages/helpermodules/update_config.py | 12 +- .../openwb_pro/chargepoint_module.py | 9 +- .../modules/chargepoints/openwb_pro/config.py | 4 +- packages/modules/common/component_state.py | 2 + packages/modules/common/store/_chargepoint.py | 1 + 20 files changed, 354 insertions(+), 74 deletions(-) create mode 100644 packages/control/algorithm/bidi.py create mode 100644 packages/control/text.py diff --git a/packages/control/algorithm/additional_current.py b/packages/control/algorithm/additional_current.py index 1cc76de58e..a6b10186ea 100644 --- a/packages/control/algorithm/additional_current.py +++ b/packages/control/algorithm/additional_current.py @@ -12,7 +12,6 @@ class AdditionalCurrent: - def __init__(self) -> None: pass diff --git a/packages/control/algorithm/bidi.py b/packages/control/algorithm/bidi.py new file mode 100644 index 0000000000..e4f8da8a2f --- /dev/null +++ b/packages/control/algorithm/bidi.py @@ -0,0 +1,63 @@ +import logging +from control import data +from control.algorithm import common +from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_BIDI +from control.algorithm.filter_chargepoints import (get_chargepoints_by_mode_and_counter, + get_preferenced_chargepoint_charging) +from control.algorithm.surplus_controlled import limit_adjust_current +from control.chargepoint.chargepoint import Chargepoint +from control.counter import Counter +from control.limiting_value import LimitingValue +from control.loadmanagement import Loadmanagement +from modules.common.utils.component_parser import get_component_name_by_id + +log = logging.getLogger(__name__) + + +class Bidi: + def __init__(self): + pass + + def set_bidi(self): + grid_counter = data.data.counter_all_data.get_evu_counter() + for mode_tuple, counter in common.mode_and_counter_generator(CONSIDERED_CHARGE_MODES_BIDI): + preferenced_cps_without_set_current = get_preferenced_chargepoint_charging( + get_chargepoints_by_mode_and_counter(mode_tuple, f"counter{counter.num}"))[1] + if preferenced_cps_without_set_current: + log.info(f"Mode-Tuple {mode_tuple[0]} - {mode_tuple[1]} - {mode_tuple[2]}, Zähler {counter.num}") + common.update_raw_data(preferenced_cps_without_set_current, surplus=True) + while len(preferenced_cps_without_set_current): + cp = preferenced_cps_without_set_current[0] + missing_currents = [(grid_counter.data.config.max_total_power - + grid_counter.data.set.raw_power_left) / + cp.data.get.phases_in_use for i in range(0, cp.data.get.phases_in_use)] + available_currents, limit = Loadmanagement().get_available_currents_surplus(missing_currents, + counter) + cp.data.control_parameter.limit = limit + available_for_cp = common.available_current_for_cp( + cp, cp.data.get.phases_in_use, available_currents, missing_currents) + + current = common.get_current_to_set( + cp.data.set.current, available_for_cp, cp.data.set.target_current) + self._set_loadmangement_message(current, limit, cp, counter) + limited_current = limit_adjust_current(cp, current) + common.set_current_counterdiff( + cp.data.control_parameter.min_current, + limited_current, + cp, + surplus=True) + preferenced_cps_without_set_current.pop(0) + + def _set_loadmangement_message(self, + current: float, + limit: LimitingValue, + chargepoint: Chargepoint, + counter: Counter) -> None: + # Strom muss an diesem Zähler geändert werden + if (current != chargepoint.data.set.current and + # Strom erreicht nicht die vorgegebene Stromstärke + current != max(chargepoint.data.control_parameter.required_currents) and + # im PV-Laden wird der Strom immer durch die Leistung begrenzt + limit != LimitingValue.POWER): + chargepoint.set_state_and_log(f"Es kann nicht mit der vorgegebenen Stromstärke geladen werden" + f"{limit.value.format(get_component_name_by_id(counter.num))}") diff --git a/packages/control/algorithm/chargemodes.py b/packages/control/algorithm/chargemodes.py index 76bc9906a6..6dd04036da 100644 --- a/packages/control/algorithm/chargemodes.py +++ b/packages/control/algorithm/chargemodes.py @@ -4,6 +4,8 @@ # Tupel-Inhalt:(eingestellter Modus, tatsächlich genutzter Modus, Priorität) CHARGEMODES = ((Chargemode.SCHEDULED_CHARGING, Chargemode.INSTANT_CHARGING, True), (Chargemode.SCHEDULED_CHARGING, Chargemode.INSTANT_CHARGING, False), + (Chargemode.BIDI_CHARGING, Chargemode.INSTANT_CHARGING, True), + (Chargemode.BIDI_CHARGING, Chargemode.INSTANT_CHARGING, False), (None, Chargemode.TIME_CHARGING, True), (None, Chargemode.TIME_CHARGING, False), (Chargemode.INSTANT_CHARGING, Chargemode.INSTANT_CHARGING, True), @@ -18,11 +20,16 @@ (Chargemode.ECO_CHARGING, Chargemode.PV_CHARGING, False), (Chargemode.PV_CHARGING, Chargemode.PV_CHARGING, True), (Chargemode.PV_CHARGING, Chargemode.PV_CHARGING, False), + (Chargemode.BIDI_CHARGING, Chargemode.PV_CHARGING, True), + (Chargemode.BIDI_CHARGING, Chargemode.PV_CHARGING, False), + (Chargemode.BIDI_CHARGING, Chargemode.BIDI_CHARGING, True), + (Chargemode.BIDI_CHARGING, Chargemode.BIDI_CHARGING, False), (None, Chargemode.STOP, True), (None, Chargemode.STOP, False)) -CONSIDERED_CHARGE_MODES_SURPLUS = CHARGEMODES[0:2] + CHARGEMODES[6:16] -CONSIDERED_CHARGE_MODES_PV_ONLY = CHARGEMODES[10:16] -CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:10] +CONSIDERED_CHARGE_MODES_SURPLUS = CHARGEMODES[0:4] + CHARGEMODES[8:20] +CONSIDERED_CHARGE_MODES_PV_ONLY = CHARGEMODES[12:20] +CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:12] CONSIDERED_CHARGE_MODES_MIN_CURRENT = CHARGEMODES[0:-1] -CONSIDERED_CHARGE_MODES_NO_CURRENT = CHARGEMODES[16:18] +CONSIDERED_CHARGE_MODES_NO_CURRENT = CHARGEMODES[22:24] +CONSIDERED_CHARGE_MODES_BIDI = CHARGEMODES[20:22] diff --git a/packages/control/algorithm/surplus_controlled.py b/packages/control/algorithm/surplus_controlled.py index ef95e8cf52..f7588d5fcb 100644 --- a/packages/control/algorithm/surplus_controlled.py +++ b/packages/control/algorithm/surplus_controlled.py @@ -75,8 +75,8 @@ def _set(self, current = available_for_cp current = common.get_current_to_set(cp.data.set.current, current, cp.data.set.target_current) - self._set_loadmangement_message(current, limit, cp) - limited_current = self._limit_adjust_current(cp, current) + self._set_loadmangement_message(current, limit, cp, counter) + limited_current = limit_adjust_current(cp, current) common.set_current_counterdiff( cp.data.control_parameter.min_current, limited_current, @@ -105,35 +105,6 @@ def filter_by_feed_in_limit(self, chargepoints: List[Chargepoint]) -> Tuple[List pv_charging.feed_in_limit is False, chargepoints)) return cp_with_feed_in, cp_without_feed_in - # tested - def _limit_adjust_current(self, chargepoint: Chargepoint, new_current: float) -> float: - if chargepoint.template.data.charging_type == ChargingType.AC.value: - MAX_CURRENT = 5 - else: - MAX_CURRENT = 30 - msg = None - nominal_difference = chargepoint.data.set.charging_ev_data.ev_template.data.nominal_difference - if chargepoint.chargemode_changed or chargepoint.data.get.charge_state is False: - return new_current - else: - # Um max. +/- 5A pro Zyklus regeln - if (-MAX_CURRENT-nominal_difference - < new_current - get_medium_charging_current(chargepoint.data.get.currents) - < MAX_CURRENT+nominal_difference): - current = new_current - else: - if new_current < get_medium_charging_current(chargepoint.data.get.currents): - current = get_medium_charging_current(chargepoint.data.get.currents) - MAX_CURRENT - msg = f"Es darf um max {MAX_CURRENT}A unter den aktuell genutzten Strom geregelt werden." - - else: - current = get_medium_charging_current(chargepoint.data.get.currents) + MAX_CURRENT - msg = f"Es darf um max {MAX_CURRENT}A über den aktuell genutzten Strom geregelt werden." - chargepoint.set_state_and_log(msg) - return max(current, - chargepoint.data.control_parameter.min_current, - chargepoint.data.set.target_current) - def _fix_deviating_evse_current(self, chargepoint: Chargepoint) -> float: """Wenn Autos nicht die volle Ladeleistung nutzen, wird unnötig eingespeist. Dann kann um den noch nicht genutzten Soll-Strom hochgeregelt werden. Wenn Fahrzeuge entgegen der Norm mehr Ladeleistung beziehen, als @@ -215,3 +186,33 @@ def set_required_current_to_max(self) -> None: control_parameter.required_current = max_current except Exception: log.exception(f"Fehler in der PV-gesteuerten Ladung bei {cp.num}") + + +# tested +def limit_adjust_current(self, chargepoint: Chargepoint, new_current: float) -> float: + if chargepoint.template.data.charging_type == ChargingType.AC.value: + MAX_CURRENT = 5 + else: + MAX_CURRENT = 30 + msg = None + nominal_difference = chargepoint.data.set.charging_ev_data.ev_template.data.nominal_difference + if chargepoint.chargemode_changed or chargepoint.data.get.charge_state is False: + return new_current + else: + # Um max. +/- 5A pro Zyklus regeln + if (-MAX_CURRENT-nominal_difference + < new_current - get_medium_charging_current(chargepoint.data.get.currents) + < MAX_CURRENT+nominal_difference): + current = new_current + else: + if new_current < get_medium_charging_current(chargepoint.data.get.currents): + current = get_medium_charging_current(chargepoint.data.get.currents) - MAX_CURRENT + msg = f"Es darf um max {MAX_CURRENT}A unter den aktuell genutzten Strom geregelt werden." + + else: + current = get_medium_charging_current(chargepoint.data.get.currents) + MAX_CURRENT + msg = f"Es darf um max {MAX_CURRENT}A über den aktuell genutzten Strom geregelt werden." + chargepoint.set_state_and_log(msg) + return max(current, + chargepoint.data.control_parameter.min_current, + chargepoint.data.set.target_current) diff --git a/packages/control/algorithm/surplus_controlled_test.py b/packages/control/algorithm/surplus_controlled_test.py index d9eb6411f2..5963e6d491 100644 --- a/packages/control/algorithm/surplus_controlled_test.py +++ b/packages/control/algorithm/surplus_controlled_test.py @@ -5,7 +5,8 @@ from control import data from control.algorithm import surplus_controlled from control.algorithm.filter_chargepoints import get_chargepoints_by_chargemodes -from control.algorithm.surplus_controlled import CONSIDERED_CHARGE_MODES_PV_ONLY, SurplusControlled +from control.algorithm.surplus_controlled import (CONSIDERED_CHARGE_MODES_PV_ONLY, SurplusControlled, + limit_adjust_current) from control.chargemode import Chargemode from control.chargepoint.chargepoint import Chargepoint, ChargepointData from control.chargepoint.chargepoint_data import Get, Set @@ -66,7 +67,7 @@ def test_limit_adjust_current(new_current: float, expected_current: float, monke monkeypatch.setattr(Chargepoint, "set_state_and_log", Mock()) # execution - current = SurplusControlled()._limit_adjust_current(cp, new_current) + current = limit_adjust_current(cp, new_current) # evaluation assert current == expected_current diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 81fa90fea0..9278685e2a 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -206,6 +206,7 @@ def _get_charging_power_left(self): else: charging_power_left = 0 self.data.set.regulate_up = True if self.data.get.soc < 100 else False + # ev wird nach Speicher geladen elif config.bat_mode == BatConsiderationMode.EV_MODE.value: # Speicher sollte weder ge- noch entladen werden. charging_power_left = self.data.get.power diff --git a/packages/control/chargemode.py b/packages/control/chargemode.py index c9a7e41e88..4ff3dfea22 100644 --- a/packages/control/chargemode.py +++ b/packages/control/chargemode.py @@ -7,4 +7,5 @@ class Chargemode(Enum): INSTANT_CHARGING = "instant_charging" PV_CHARGING = "pv_charging" ECO_CHARGING = "eco_charging" + BIDI_CHARGING = "bidi_charging" STOP = "stop" diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index ec7cd20f92..78a97bbb4f 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -14,6 +14,16 @@ Tag-Liste: Tags, mit denen der Ladepunkt freigeschaltet werden kann. Ist diese leer, kann mit jedem Tag der Ladepunkt freigeschaltet werden. """ +from helpermodules.timecheck import check_timestamp, create_timestamp +from modules.common.abstract_chargepoint import AbstractChargepoint +from helpermodules.utils import thread_handler +from helpermodules import timecheck +from helpermodules.pub import Pub +from helpermodules.phase_mapping import convert_single_evu_phase_to_cp_phase +from helpermodules.broker import InternalBrokerClient +from control.text import BidiState +from helpermodules.broker import BrokerClient +from helpermodules.abstract_plans import ScheduledChargingPlan, TimeChargingPlan import copy from dataclasses import asdict import dataclasses @@ -35,14 +45,9 @@ from control.ev.ev import Ev from control import phase_switch from control.chargepoint.chargepoint_state import CHARGING_STATES, ChargepointState -from helpermodules.abstract_plans import ScheduledChargingPlan, TimeChargingPlan -from helpermodules.broker import BrokerClient -from helpermodules.phase_mapping import convert_single_evu_phase_to_cp_phase -from helpermodules.pub import Pub -from helpermodules import timecheck -from helpermodules.utils import thread_handler -from modules.common.abstract_chargepoint import AbstractChargepoint -from helpermodules.timecheck import check_timestamp, create_timestamp +<< << << < HEAD +== == == = +>>>>>> > a75be5132(bidi draft) def get_chargepoint_config_default() -> dict: @@ -539,6 +544,16 @@ def get_max_phase_hw(self) -> int: log.debug(f"Anzahl angeschlossener Phasen beschränkt die nutzbaren Phasen auf {phases}") return phases + def hw_bidi_capable(self) -> BidiState: + if self.data.get.evse_signaling is None: + return BidiState.CP_NOT_BIDI_CAPABLE + elif self.data.get.evse_signaling != "bidi": + return BidiState.CP_WRONG_PROTOCOL + elif self.data.set.charging_ev_data.ev_template.data.bidi is False: + return BidiState.EV_NOT_BIDI_CAPABLE + else: + return BidiState.BIDI_CAPABLE + def set_phases(self, phases: int) -> int: charging_ev = self.data.set.charging_ev_data @@ -648,15 +663,16 @@ def update(self, ev_list: Dict[str, Ev]) -> None: if charging_possible: try: charging_ev = self._get_charging_ev(vehicle, ev_list) - max_phase_hw = self.get_max_phase_hw() state, message_ev, submode, required_current, phases = charging_ev.get_required_current( self.data.set.charge_template, self.data.control_parameter, - max_phase_hw, + self.get_max_phase_hw(), self.cp_ev_support_phase_switch(), self.template.data.charging_type, self.data.control_parameter.timestamp_chargemode_changed, - self.data.set.log.imported_since_plugged) + self.data.set.log.imported_since_plugged, + self.hw_bidi_capable(), + self.data.get.phases_in_use) phases = self.get_phases_by_selected_chargemode(phases) phases = self.set_phases(phases) self._pub_connected_vehicle(charging_ev) diff --git a/packages/control/chargepoint/chargepoint_data.py b/packages/control/chargepoint/chargepoint_data.py index fda7661c88..3b2b504001 100644 --- a/packages/control/chargepoint/chargepoint_data.py +++ b/packages/control/chargepoint/chargepoint_data.py @@ -102,6 +102,8 @@ class Get: daily_exported: float = 0 error_timestamp: int = 0 evse_current: Optional[float] = None + # kann auch zur Laufzeit geändert werden + evse_signaling: Optional[str] = None exported: float = 0 fault_str: str = NO_ERROR fault_state: int = 0 diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index 7a6b0f85a4..14596fd538 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -1,14 +1,16 @@ +import copy from dataclasses import asdict, dataclass, field import datetime import logging import traceback -from typing import Optional, Tuple +from typing import List, Optional, Tuple from control import data from control.chargepoint.chargepoint_state import CHARGING_STATES from control.chargepoint.charging_type import ChargingType from control.chargepoint.control_parameter import ControlParameter from control.ev.ev_template import EvTemplate +from control.text import BidiState from dataclass_utils.factories import empty_dict_factory from helpermodules.abstract_plans import Limit, limit_factory, ScheduledChargingPlan from helpermodules import timecheck @@ -42,6 +44,16 @@ class TimeCharging: "topic": ""}) # Dict[int, TimeChargingPlan] wird bei der dict to dataclass Konvertierung nicht unterstützt +def scheduled_charging_plan_factory() -> ScheduledChargingPlan: + return ScheduledChargingPlan() + + +@dataclass +class BidiCharging: + plan: ScheduledChargingPlan = field(default_factory=scheduled_charging_plan_factory) + power: int = 9000 + + @dataclass class EcoCharging: current: int = 6 @@ -88,9 +100,14 @@ def instant_charging_factory() -> InstantCharging: return InstantCharging() +def bidi_charging_factory() -> BidiCharging: + return BidiCharging() + + @dataclass class Chargemode: selected: str = "instant_charging" + bidi_charging: BidiCharging = field(default_factory=bidi_charging_factory) eco_charging: EcoCharging = field(default_factory=eco_charging_factory) pv_charging: PvCharging = field(default_factory=pv_charging_factory) scheduled_charging: ScheduledCharging = field(default_factory=scheduled_charging_factory) @@ -306,18 +323,100 @@ def eco_charging(self, log.exception("Fehler im ev-Modul "+str(self.data.id)) return 0, "stop", "Keine Ladung, da ein interner Fehler aufgetreten ist: "+traceback.format_exc(), 0 - def scheduled_charging_recent_plan(self, - soc: float, - ev_template: EvTemplate, - phases: int, - used_amount: float, - max_hw_phases: int, - phase_switch_supported: bool, - charging_type: str, - chargemode_switch_timestamp: float, - control_parameter: ControlParameter) -> Optional[SelectedPlan]: + def bidi_charging(self, + soc: float, + ev_template: EvTemplate, + phases: int, + used_amount: float, + max_hw_phases: int, + phase_switch_supported: bool, + charging_type: str, + chargemode_switch_timestamp: float, + control_parameter: ControlParameter, + imported_since_plugged: float, + soc_request_interval_offset: float, + bidi: BidiState, + phases_in_use: int) -> Tuple[float, str, str, int]: + if soc > self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: + return 0, "bidi_charging", None, phases_in_use + else: + if bidi != BidiState.BIDI_CAPABLE: + # normales Zielladen, da Hardware kein bidirektionales Laden unterstützt + plan_data = self._find_recent_plan([self.data.chargemode.bidi_charging.plan], + soc, + ev_template, + phases, + used_amount, + max_hw_phases, + phase_switch_supported, + charging_type, + chargemode_switch_timestamp, + control_parameter) + if plan_data: + control_parameter.current_plan = plan_data.plan.id + else: + control_parameter.current_plan = None + required_current, submode, message, phases = self.scheduled_charging_calc_current( + plan_data, + soc, + imported_since_plugged, + control_parameter.phases, + control_parameter.min_current, + soc_request_interval_offset, + charging_type, + ev_template) + if bidi != BidiState.BIDI_CAPABLE: + # Hinweis an Zielladen-Message anhängen, dass Bidi nicht möglich ist + message = bidi.value + message + return required_current, submode, message, phases + + elif soc < self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: + # kein bidirektionales Laden, da SoC noch nicht erreicht + missing_amount = ((self.data.chargemode.bidi_charging.plan.limit.soc_scheduled - + soc) / 100) * ev_template.data.battery_capacity + duration = missing_amount/self.data.chargemode.bidi_charging.power * 3600 + + # es muss ein Plan übergeben werden, damit die Soll-Ströme ausgerechnet werden können + bidi_power_plan = copy.deepcopy(self.data.chargemode.bidi_charging.plan) + bidi_power_plan.current = self.data.chargemode.bidi_charging.power / phases_in_use / 230 + bidi_power_plan.phases_to_use = phases_in_use + bidi_power_plan.phases_to_use_pv = phases_in_use + plan_end_time = timecheck.check_end_time(bidi_power_plan, chargemode_switch_timestamp) + if plan_end_time is None: + plan_data = None + else: + plan_data = SelectedPlan(remaining_time=plan_end_time - duration, + duration=duration, + missing_amount=missing_amount, + phases=phases, + plan=bidi_power_plan) + if plan_data: + control_parameter.current_plan = plan_data.plan.id + else: + control_parameter.current_plan = None + return self.scheduled_charging_calc_current( + plan_data, + soc, + imported_since_plugged, + control_parameter.phases, + control_parameter.min_current, + data.data.general_data.data.control_interval, + charging_type, + ev_template) + + def _find_recent_plan(self, + plans: List[ScheduledChargingPlan], + soc: float, + ev_template: EvTemplate, + phases: int, + used_amount: float, + max_hw_phases: int, + phase_switch_supported: bool, + charging_type: str, + chargemode_switch_timestamp: float, + control_parameter: ControlParameter): plans_diff_end_date = [] - for p in self.data.chargemode.scheduled_charging.plans.values(): + for p in plans.values(): if p.active: if p.limit.selected == "soc" and soc is None: raise ValueError("Um Zielladen mit SoC-Ziel nutzen zu können, bitte ein SoC-Modul konfigurieren " @@ -351,6 +450,42 @@ def scheduled_charging_recent_plan(self, else: return None + def scheduled_charging(self, + soc: float, + ev_template: EvTemplate, + phases: int, + used_amount: float, + max_hw_phases: int, + phase_switch_supported: bool, + charging_type: str, + chargemode_switch_timestamp: float, + control_parameter: ControlParameter, + imported_since_plugged: float, + soc_request_interval_offset: int) -> Optional[SelectedPlan]: + plan_data = self._find_recent_plan(self.data.chargemode.scheduled_charging.plans, + soc, + ev_template, + phases, + used_amount, + max_hw_phases, + phase_switch_supported, + charging_type, + chargemode_switch_timestamp, + control_parameter) + if plan_data: + control_parameter.current_plan = plan_data.plan.id + else: + control_parameter.current_plan = None + return self.scheduled_charging_calc_current( + plan_data, + soc, + imported_since_plugged, + control_parameter.phases, + control_parameter.min_current, + soc_request_interval_offset, + charging_type, + ev_template) + def _calc_remaining_time(self, plan: ScheduledChargingPlan, plan_end_time: float, @@ -481,6 +616,8 @@ def scheduled_charging_calc_current(self, elif limit.selected == "amount" and used_amount >= limit.amount: message = self.SCHEDULED_CHARGING_REACHED_AMOUNT elif 0 - soc_request_interval_offset < selected_plan.remaining_time < 300 + soc_request_interval_offset: + # Wenn der SoC ein paar Minuten alt ist, kann der Termin trotzdem gehalten werden. + # Zielladen kann nicht genauer arbeiten, als das Abfrageintervall vom SoC. # 5 Min vor spätestem Ladestart if limit.selected == "soc": limit_string = self.SCHEDULED_CHARGING_LIMITED_BY_SOC.format(limit.soc_scheduled) diff --git a/packages/control/ev/charge_template_test.py b/packages/control/ev/charge_template_test.py index 08f88c8fc9..cc76a954e9 100644 --- a/packages/control/ev/charge_template_test.py +++ b/packages/control/ev/charge_template_test.py @@ -202,7 +202,7 @@ def test_scheduled_charging_recent_plan(end_time_mock, ct.data.chargemode.scheduled_charging.plans = {"0": plan_mock_0, "1": plan_mock_1, "2": plan_mock_2} # execution - selected_plan = ct.scheduled_charging_recent_plan( + selected_plan = ct.scheduled_charging( 60, EvTemplate(), 3, 200, 3, True, ChargingType.AC.value, 1652688000, Mock(spec=ControlParameter)) # evaluation diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index ffa147d524..0d6569a776 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -6,6 +6,14 @@ stärke wird auch geprüft, ob sich an diesen Parametern etwas geändert hat. Falls ja, muss das EV in der Regelung neu priorisiert werden und eine neue Zuteilung des Stroms erhalten. """ +from modules.common.configurable_vehicle import ConfigurableVehicle +from modules.common.abstract_vehicle import VehicleUpdateData +from helpermodules.constants import NO_ERROR +from helpermodules import timecheck +from dataclass_utils.factories import empty_list_factory +from control.text import BidiState +from control.limiting_value import LimitingValue +from control.limiting_value import LimitingValue, LoadmanagementLimit from dataclasses import dataclass, field import logging from typing import List, Optional, Tuple @@ -17,12 +25,9 @@ from control.chargepoint.charging_type import ChargingType from control.chargepoint.control_parameter import ControlParameter from control.ev.ev_template import EvTemplate -from control.limiting_value import LimitingValue, LoadmanagementLimit -from dataclass_utils.factories import empty_list_factory -from helpermodules import timecheck -from helpermodules.constants import NO_ERROR -from modules.common.abstract_vehicle import VehicleUpdateData -from modules.common.configurable_vehicle import ConfigurableVehicle +<< << << < HEAD +== == == = +>>>>>> > a75be5132(bidi draft) log = logging.getLogger(__name__) @@ -119,7 +124,9 @@ def get_required_current(self, phase_switch_supported: bool, charging_type: str, chargemode_switch_timestamp: float, - imported_since_plugged: float) -> Tuple[bool, Optional[str], str, float, int]: + imported_since_plugged: float, + bidi: BidiState, + phases_in_use: int) -> Tuple[bool, Optional[str], str, float, int]: """ ermittelt, ob und mit welchem Strom das EV geladen werden soll (unabhängig vom Lastmanagement) Parameter @@ -207,6 +214,21 @@ def get_required_current(self, elif charge_template.data.chargemode.selected == "eco_charging": required_current, submode, tmp_message, phases = charge_template.eco_charging( self.data.get.soc, control_parameter, charging_type, imported_since_plugged) + elif charge_template.data.chargemode.selected == "bidi_charging": + required_current, submode, tmp_message, phases = charge_template.bidi_charging( + self.data.get.soc, + self.ev_template, + control_parameter.phases, + imported_since_plugged, + max_phases_hw, + phase_switch_supported, + charging_type, + chargemode_switch_timestamp, + control_parameter, + imported_since_plugged, + self.soc_module.general_config.request_interval_charging, + bidi, + phases_in_use) else: tmp_message = None message = f"{message or ''} {tmp_message or ''}".strip() diff --git a/packages/control/ev/ev_template.py b/packages/control/ev/ev_template.py index a8e8fbe02d..ca663cbbd3 100644 --- a/packages/control/ev/ev_template.py +++ b/packages/control/ev/ev_template.py @@ -21,6 +21,7 @@ class EvTemplateData: efficiency: float = 90 nominal_difference: float = 1 keep_charge_active_duration: int = 40 + bidi: bool = False def ev_template_data_factory() -> EvTemplateData: diff --git a/packages/control/text.py b/packages/control/text.py new file mode 100644 index 0000000000..e60d4786b4 --- /dev/null +++ b/packages/control/text.py @@ -0,0 +1,8 @@ +from enum import Enum + + +class BidiState(Enum): + BIDI_CAPABLE = "" + CP_NOT_BIDI_CAPABLE = "Bidirektionales Lade ist nur mit einer openWB Pro oder Pro+ möglich." + CP_WRONG_PROTOCOL = "Bitte in den Einstellungen der openWB Pro/Pro+ die Charging Version auf 'Bidi' stellen." + EV_NOT_BIDI_CAPABLE = "Das Fahrzeug unterstützt kein bidirektionales Laden." diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 35c616eb1a..2ae3107ec5 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -558,7 +558,8 @@ def process_chargepoint_get_topics(self, msg): "/get/heartbeat" in msg.topic or "/get/rfid" in msg.topic or "/get/vehicle_id" in msg.topic or - "/get/serial_number" in msg.topic): + "/get/serial_number" in msg.topic or + "/get/evse_signaling" in msg.topic): self._validate_value(msg, str) elif ("/get/soc" in msg.topic): self._validate_value(msg, float, [(0, 100)]) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index f0e14681dc..514d40c41c 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -56,7 +56,7 @@ class UpdateConfig: - DATASTORE_VERSION = 83 + DATASTORE_VERSION = 85 valid_topic = [ "^openWB/bat/config/configured$", @@ -2246,3 +2246,13 @@ def upgrade(topic: str, payload) -> None: }) self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 84) + + def upgrade_datastore_84(self) -> None: + def upgrade(topic: str, payload) -> Optional[dict]: + if re.search("openWB/vehicle/template/ev_template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + if "bidi" not in payload: + payload.update({"bidi": False}) + return {topic: payload} + self._loop_all_received_topics(upgrade) + self.__update_topic("openWB/system/datastore_version", 85) diff --git a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py index d4c79c0007..92bd6cb0f8 100644 --- a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py +++ b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py @@ -52,7 +52,11 @@ def set_current(self, current: float) -> None: with SingleComponentUpdateContext(self.fault_state, update_always=False): with self.client_error_context: ip_address = self.config.configuration.ip_address - self.__session.post('http://'+ip_address+'/connect.php', data={'ampere': current}) + if self.old_chargepoint_state.evse_signaling == "bidi": + watt = current*230*self.old_chargepoint_state.phases_in_use + self.__session.post('http://'+ip_address+'/connect.php', data={'watt': watt}) + else: + self.__session.post('http://'+ip_address+'/connect.php', data={'ampere': current}) def get_values(self) -> None: with SingleComponentUpdateContext(self.fault_state): @@ -77,7 +81,8 @@ def request_values(self) -> ChargepointState: phases_in_use=json_rsp["phases_in_use"], vehicle_id=json_rsp["vehicle_id"], evse_current=json_rsp["offered_current"], - serial_number=json_rsp["serial"] + serial_number=json_rsp["serial"], + evse_signaling=json_rsp["evse_signaling"], ) if json_rsp.get("voltages"): diff --git a/packages/modules/chargepoints/openwb_pro/config.py b/packages/modules/chargepoints/openwb_pro/config.py index cab0724e61..e534ee193e 100644 --- a/packages/modules/chargepoints/openwb_pro/config.py +++ b/packages/modules/chargepoints/openwb_pro/config.py @@ -4,7 +4,9 @@ class OpenWBProConfiguration: - def __init__(self, ip_address: Optional[str] = None, duo_num: int = 0): + def __init__(self, + ip_address: Optional[str] = None, + duo_num: int = 0) -> None: self.ip_address = ip_address self.duo_num = duo_num diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index 437c02a68a..22e6898199 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -168,6 +168,7 @@ def __init__(self, charging_current: Optional[float] = 0, charging_voltage: Optional[float] = 0, charging_power: Optional[float] = 0, + evse_signaling: Optional[str] = None, powers: Optional[List[Optional[float]]] = None, voltages: Optional[List[Optional[float]]] = None, currents: Optional[List[Optional[float]]] = None, @@ -213,6 +214,7 @@ def __init__(self, self.current_branch = current_branch self.current_commit = current_commit self.version = version + self.evse_signaling = evse_signaling @auto_str diff --git a/packages/modules/common/store/_chargepoint.py b/packages/modules/common/store/_chargepoint.py index d630eb7b92..160dbcda63 100644 --- a/packages/modules/common/store/_chargepoint.py +++ b/packages/modules/common/store/_chargepoint.py @@ -58,6 +58,7 @@ def update(self): pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/version", self.state.version) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_branch", self.state.current_branch) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_commit", self.state.current_commit) + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/evse_signaling", self.state.evse_signaling) def get_chargepoint_value_store(id: int) -> ValueStore[ChargepointState]: From 8acd7d9b327db1507f55a4095a08400fc788ae0d Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 10 Jun 2025 16:13:34 +0200 Subject: [PATCH 02/73] typos --- packages/control/algorithm/additional_current.py | 1 + packages/control/chargepoint/chargepoint.py | 3 --- packages/control/ev/charge_template.py | 5 ++--- packages/control/ev/ev.py | 3 --- 4 files changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/control/algorithm/additional_current.py b/packages/control/algorithm/additional_current.py index a6b10186ea..1cc76de58e 100644 --- a/packages/control/algorithm/additional_current.py +++ b/packages/control/algorithm/additional_current.py @@ -12,6 +12,7 @@ class AdditionalCurrent: + def __init__(self) -> None: pass diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 78a97bbb4f..18c5bd1409 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -45,9 +45,6 @@ from control.ev.ev import Ev from control import phase_switch from control.chargepoint.chargepoint_state import CHARGING_STATES, ChargepointState -<< << << < HEAD -== == == = ->>>>>> > a75be5132(bidi draft) def get_chargepoint_config_default() -> dict: diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index 14596fd538..bfee7c9990 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -365,9 +365,8 @@ def bidi_charging(self, soc_request_interval_offset, charging_type, ev_template) - if bidi != BidiState.BIDI_CAPABLE: - # Hinweis an Zielladen-Message anhängen, dass Bidi nicht möglich ist - message = bidi.value + message + # Hinweis an Zielladen-Message anhängen, dass Bidi nicht möglich ist + message = bidi.value + message return required_current, submode, message, phases elif soc < self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index 0d6569a776..5c834d9f46 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -25,9 +25,6 @@ from control.chargepoint.charging_type import ChargingType from control.chargepoint.control_parameter import ControlParameter from control.ev.ev_template import EvTemplate -<< << << < HEAD -== == == = ->>>>>> > a75be5132(bidi draft) log = logging.getLogger(__name__) From 4be87a707d2ab030247ca9d69b71f729d0c7aa5a Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Wed, 11 Jun 2025 13:54:04 +0200 Subject: [PATCH 03/73] fixes --- packages/control/chargepoint/chargepoint.py | 3 +-- packages/control/ev/charge_template.py | 8 ++++---- packages/control/text.py | 2 +- packages/modules/chargepoints/mqtt/chargepoint_module.py | 3 ++- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 18c5bd1409..dc90204c06 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -20,9 +20,8 @@ from helpermodules import timecheck from helpermodules.pub import Pub from helpermodules.phase_mapping import convert_single_evu_phase_to_cp_phase -from helpermodules.broker import InternalBrokerClient -from control.text import BidiState from helpermodules.broker import BrokerClient +from control.text import BidiState from helpermodules.abstract_plans import ScheduledChargingPlan, TimeChargingPlan import copy from dataclasses import asdict diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index bfee7c9990..c9ec08274d 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -3,7 +3,7 @@ import datetime import logging import traceback -from typing import List, Optional, Tuple +from typing import Dict, Optional, Tuple from control import data from control.chargepoint.chargepoint_state import CHARGING_STATES @@ -342,7 +342,7 @@ def bidi_charging(self, else: if bidi != BidiState.BIDI_CAPABLE: # normales Zielladen, da Hardware kein bidirektionales Laden unterstützt - plan_data = self._find_recent_plan([self.data.chargemode.bidi_charging.plan], + plan_data = self._find_recent_plan({self.data.chargemode.bidi_charging.plan.id: self.data.chargemode.bidi_charging.plan}, soc, ev_template, phases, @@ -404,7 +404,7 @@ def bidi_charging(self, ev_template) def _find_recent_plan(self, - plans: List[ScheduledChargingPlan], + plans: Dict[str, ScheduledChargingPlan], soc: float, ev_template: EvTemplate, phases: int, @@ -435,7 +435,7 @@ def _find_recent_plan(self, plan_id = list(plan_dict.keys())[0] plan_end_time = list(plan_dict.values())[0] - plan = self.data.chargemode.scheduled_charging.plans[str(plan_id)] + plan = plans[plan_id] remaining_time, missing_amount, phases, duration = self._calc_remaining_time( plan, plan_end_time, soc, ev_template, used_amount, max_hw_phases, phase_switch_supported, diff --git a/packages/control/text.py b/packages/control/text.py index e60d4786b4..b91d5d9ea6 100644 --- a/packages/control/text.py +++ b/packages/control/text.py @@ -3,6 +3,6 @@ class BidiState(Enum): BIDI_CAPABLE = "" - CP_NOT_BIDI_CAPABLE = "Bidirektionales Lade ist nur mit einer openWB Pro oder Pro+ möglich." + CP_NOT_BIDI_CAPABLE = "Bidirektionales Laden ist nur mit einer openWB Pro oder Pro+ möglich." CP_WRONG_PROTOCOL = "Bitte in den Einstellungen der openWB Pro/Pro+ die Charging Version auf 'Bidi' stellen." EV_NOT_BIDI_CAPABLE = "Das Fahrzeug unterstützt kein bidirektionales Laden." diff --git a/packages/modules/chargepoints/mqtt/chargepoint_module.py b/packages/modules/chargepoints/mqtt/chargepoint_module.py index ec3cee60aa..3ece2b12c3 100644 --- a/packages/modules/chargepoints/mqtt/chargepoint_module.py +++ b/packages/modules/chargepoints/mqtt/chargepoint_module.py @@ -78,7 +78,8 @@ def on_message(client, userdata, message): soc_timestamp=received_topics.get(f"{topic_prefix}soc_timestamp"), vehicle_id=received_topics.get(f"{topic_prefix}vehicle_id"), evse_current=received_topics.get(f"{topic_prefix}evse_current"), - max_evse_current=received_topics.get(f"{topic_prefix}max_evse_current") + max_evse_current=received_topics.get(f"{topic_prefix}max_evse_current"), + evse_signaling=received_topics.get(f"{topic_prefix}evse_signaling"), ) self.store.set(chargepoint_state) else: From f38324e349b5f971e8caf225b9edd879e588e1a5 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 12 Jun 2025 14:10:51 +0200 Subject: [PATCH 04/73] fixes --- packages/control/algorithm/algorithm.py | 9 +- packages/control/algorithm/bidi.py | 71 +++------- packages/control/algorithm/chargemodes.py | 9 +- .../control/algorithm/surplus_controlled.py | 2 +- packages/control/chargepoint/chargepoint.py | 3 + packages/control/counter.py | 10 ++ packages/control/ev/charge_template.py | 127 +++++++++--------- packages/helpermodules/setdata.py | 11 +- 8 files changed, 115 insertions(+), 127 deletions(-) diff --git a/packages/control/algorithm/algorithm.py b/packages/control/algorithm/algorithm.py index 63192124eb..aa541e5abe 100644 --- a/packages/control/algorithm/algorithm.py +++ b/packages/control/algorithm/algorithm.py @@ -4,6 +4,7 @@ from control import data from control.algorithm import common from control.algorithm.additional_current import AdditionalCurrent +from control.algorithm.bidi import Bidi from control.algorithm.min_current import MinCurrent from control.algorithm.no_current import NoCurrent from control.algorithm.surplus_controlled import SurplusControlled @@ -14,6 +15,7 @@ class Algorithm: def __init__(self): self.additional_current = AdditionalCurrent() + self.bidi = Bidi() self.min_current = MinCurrent() self.no_current = NoCurrent() self.surplus_controlled = SurplusControlled() @@ -32,15 +34,18 @@ def calc_current(self) -> None: log.info("**Soll-Strom setzen**") common.reset_current_to_target_current() self.additional_current.set_additional_current() + log.info("**PV-geführten Strom setzen**") counter.limit_raw_power_left_to_surplus(self.evu_counter.calc_raw_surplus()) self.surplus_controlled.check_switch_on() if self.evu_counter.data.set.surplus_power_left > 0: - log.info("**PV-geführten Strom setzen**") common.reset_current_to_target_current() self.surplus_controlled.set_required_current_to_max() self.surplus_controlled.set_surplus_current() else: - log.info("**Keine Leistung für PV-geführtes Laden übrig.**") + log.info("Keine Leistung für PV-geführtes Laden übrig.") + log.info("**Bidi-Entlade-Strom setzen**") + counter.set_raw_surplus_power_left() + self.bidi.set_bidi() self.no_current.set_no_current() self.no_current.set_none_current() except Exception: diff --git a/packages/control/algorithm/bidi.py b/packages/control/algorithm/bidi.py index e4f8da8a2f..e5f7c2d7e5 100644 --- a/packages/control/algorithm/bidi.py +++ b/packages/control/algorithm/bidi.py @@ -1,15 +1,7 @@ import logging from control import data -from control.algorithm import common -from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_BIDI -from control.algorithm.filter_chargepoints import (get_chargepoints_by_mode_and_counter, - get_preferenced_chargepoint_charging) -from control.algorithm.surplus_controlled import limit_adjust_current -from control.chargepoint.chargepoint import Chargepoint -from control.counter import Counter -from control.limiting_value import LimitingValue -from control.loadmanagement import Loadmanagement -from modules.common.utils.component_parser import get_component_name_by_id +from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE +from control.algorithm.filter_chargepoints import get_chargepoints_by_mode log = logging.getLogger(__name__) @@ -20,44 +12,21 @@ def __init__(self): def set_bidi(self): grid_counter = data.data.counter_all_data.get_evu_counter() - for mode_tuple, counter in common.mode_and_counter_generator(CONSIDERED_CHARGE_MODES_BIDI): - preferenced_cps_without_set_current = get_preferenced_chargepoint_charging( - get_chargepoints_by_mode_and_counter(mode_tuple, f"counter{counter.num}"))[1] - if preferenced_cps_without_set_current: - log.info(f"Mode-Tuple {mode_tuple[0]} - {mode_tuple[1]} - {mode_tuple[2]}, Zähler {counter.num}") - common.update_raw_data(preferenced_cps_without_set_current, surplus=True) - while len(preferenced_cps_without_set_current): - cp = preferenced_cps_without_set_current[0] - missing_currents = [(grid_counter.data.config.max_total_power - - grid_counter.data.set.raw_power_left) / - cp.data.get.phases_in_use for i in range(0, cp.data.get.phases_in_use)] - available_currents, limit = Loadmanagement().get_available_currents_surplus(missing_currents, - counter) - cp.data.control_parameter.limit = limit - available_for_cp = common.available_current_for_cp( - cp, cp.data.get.phases_in_use, available_currents, missing_currents) - - current = common.get_current_to_set( - cp.data.set.current, available_for_cp, cp.data.set.target_current) - self._set_loadmangement_message(current, limit, cp, counter) - limited_current = limit_adjust_current(cp, current) - common.set_current_counterdiff( - cp.data.control_parameter.min_current, - limited_current, - cp, - surplus=True) - preferenced_cps_without_set_current.pop(0) - - def _set_loadmangement_message(self, - current: float, - limit: LimitingValue, - chargepoint: Chargepoint, - counter: Counter) -> None: - # Strom muss an diesem Zähler geändert werden - if (current != chargepoint.data.set.current and - # Strom erreicht nicht die vorgegebene Stromstärke - current != max(chargepoint.data.control_parameter.required_currents) and - # im PV-Laden wird der Strom immer durch die Leistung begrenzt - limit != LimitingValue.POWER): - chargepoint.set_state_and_log(f"Es kann nicht mit der vorgegebenen Stromstärke geladen werden" - f"{limit.value.format(get_component_name_by_id(counter.num))}") + zero_point_adjustment = grid_counter + if grid_counter.data.set.surplus_power_left < 0: + for mode_tuple in CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE: + preferenced_cps = get_chargepoints_by_mode(mode_tuple) + if preferenced_cps: + log.info( + f"Mode-Tuple {mode_tuple[0]} - {mode_tuple[1]} - {mode_tuple[2]}, Zähler {grid_counter.num}") + while len(preferenced_cps): + cp = preferenced_cps[0] + zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) + log.debug(f"Nullpunktanpassung für LP{cp.num}: {zero_point_adjustment}W") + missing_currents = [0]*3 + missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / + 230 for i in range(0, cp.data.get.phases_in_use)] + grid_counter.update_surplus_values_left(missing_currents, cp.data.get.voltages) + cp.data.set.current = missing_currents[0] + log.info(f"LP{cp.num}: Stromstärke {missing_currents}A") + preferenced_cps.pop(0) diff --git a/packages/control/algorithm/chargemodes.py b/packages/control/algorithm/chargemodes.py index 6dd04036da..b9dcf32b6e 100644 --- a/packages/control/algorithm/chargemodes.py +++ b/packages/control/algorithm/chargemodes.py @@ -16,14 +16,15 @@ (Chargemode.PV_CHARGING, Chargemode.INSTANT_CHARGING, False), (Chargemode.SCHEDULED_CHARGING, Chargemode.PV_CHARGING, True), (Chargemode.SCHEDULED_CHARGING, Chargemode.PV_CHARGING, False), + (Chargemode.BIDI_CHARGING, Chargemode.PV_CHARGING, True), + (Chargemode.BIDI_CHARGING, Chargemode.PV_CHARGING, False), (Chargemode.ECO_CHARGING, Chargemode.PV_CHARGING, True), (Chargemode.ECO_CHARGING, Chargemode.PV_CHARGING, False), (Chargemode.PV_CHARGING, Chargemode.PV_CHARGING, True), (Chargemode.PV_CHARGING, Chargemode.PV_CHARGING, False), - (Chargemode.BIDI_CHARGING, Chargemode.PV_CHARGING, True), - (Chargemode.BIDI_CHARGING, Chargemode.PV_CHARGING, False), - (Chargemode.BIDI_CHARGING, Chargemode.BIDI_CHARGING, True), + # niedrigere Priorität soll nachrangig geladen, aber zuerst entladen werden (Chargemode.BIDI_CHARGING, Chargemode.BIDI_CHARGING, False), + (Chargemode.BIDI_CHARGING, Chargemode.BIDI_CHARGING, True), (None, Chargemode.STOP, True), (None, Chargemode.STOP, False)) @@ -32,4 +33,4 @@ CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:12] CONSIDERED_CHARGE_MODES_MIN_CURRENT = CHARGEMODES[0:-1] CONSIDERED_CHARGE_MODES_NO_CURRENT = CHARGEMODES[22:24] -CONSIDERED_CHARGE_MODES_BIDI = CHARGEMODES[20:22] +CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE = CHARGEMODES[20:22] diff --git a/packages/control/algorithm/surplus_controlled.py b/packages/control/algorithm/surplus_controlled.py index f7588d5fcb..bc1c5208b3 100644 --- a/packages/control/algorithm/surplus_controlled.py +++ b/packages/control/algorithm/surplus_controlled.py @@ -189,7 +189,7 @@ def set_required_current_to_max(self) -> None: # tested -def limit_adjust_current(self, chargepoint: Chargepoint, new_current: float) -> float: +def limit_adjust_current(chargepoint: Chargepoint, new_current: float) -> float: if chargepoint.template.data.charging_type == ChargingType.AC.value: MAX_CURRENT = 5 else: diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index dc90204c06..9ab7cec05b 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -573,6 +573,9 @@ def set_phases(self, phases: int) -> int: return phases def check_min_max_current(self, required_current: float, phases: int, pv: bool = False) -> float: + if (self.data.control_parameter.chargemode == Chargemode.BIDI_CHARGING and + self.data.control_parameter.submode == Chargemode.BIDI_CHARGING): + return required_current required_current_prev = required_current required_current, msg = self.data.set.charging_ev_data.check_min_max_current( self.data.control_parameter, diff --git a/packages/control/counter.py b/packages/control/counter.py index 400f166ab8..998f2be633 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -515,3 +515,13 @@ def limit_raw_power_left_to_surplus(surplus) -> None: counter.data.set.surplus_power_left = surplus log.debug(f'Zähler {counter.num}: Begrenzung der verbleibenden Leistung auf ' f'{counter.data.set.surplus_power_left}W') + + +def set_raw_surplus_power_left() -> None: + """ bei der Überschuss-Verteilung wird der Überschuss immer mit dem Regelbereich betrachtet, + beim Bidi-Laden wird der reine (negative) Überschuss betrachtet. + """ + grid_counter = data.data.counter_all_data.get_evu_counter() + grid_counter.data.set.surplus_power_left -= grid_counter._control_range_offset() + grid_counter.data.set.surplus_power_left = min(grid_counter.data.set.surplus_power_left, 0) + log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index c9ec08274d..ecf04cd255 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -337,71 +337,70 @@ def bidi_charging(self, soc_request_interval_offset: float, bidi: BidiState, phases_in_use: int) -> Tuple[float, str, str, int]: - if soc > self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: + if bidi != BidiState.BIDI_CAPABLE: + # normales Zielladen, da Hardware kein bidirektionales Laden unterstützt + plan_data = self._find_recent_plan( + {self.data.chargemode.bidi_charging.plan.id: self.data.chargemode.bidi_charging.plan}, + soc, + ev_template, + phases, + used_amount, + max_hw_phases, + phase_switch_supported, + charging_type, + chargemode_switch_timestamp, + control_parameter) + if plan_data: + control_parameter.current_plan = plan_data.plan.id + else: + control_parameter.current_plan = None + required_current, submode, message, phases = self.scheduled_charging_calc_current( + plan_data, + soc, + imported_since_plugged, + control_parameter.phases, + control_parameter.min_current, + soc_request_interval_offset, + charging_type, + ev_template) + # Hinweis an Zielladen-Message anhängen, dass Bidi nicht möglich ist + message = bidi.value + message + return required_current, submode, message, phases + elif soc > self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: return 0, "bidi_charging", None, phases_in_use - else: - if bidi != BidiState.BIDI_CAPABLE: - # normales Zielladen, da Hardware kein bidirektionales Laden unterstützt - plan_data = self._find_recent_plan({self.data.chargemode.bidi_charging.plan.id: self.data.chargemode.bidi_charging.plan}, - soc, - ev_template, - phases, - used_amount, - max_hw_phases, - phase_switch_supported, - charging_type, - chargemode_switch_timestamp, - control_parameter) - if plan_data: - control_parameter.current_plan = plan_data.plan.id - else: - control_parameter.current_plan = None - required_current, submode, message, phases = self.scheduled_charging_calc_current( - plan_data, - soc, - imported_since_plugged, - control_parameter.phases, - control_parameter.min_current, - soc_request_interval_offset, - charging_type, - ev_template) - # Hinweis an Zielladen-Message anhängen, dass Bidi nicht möglich ist - message = bidi.value + message - return required_current, submode, message, phases - - elif soc < self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: - # kein bidirektionales Laden, da SoC noch nicht erreicht - missing_amount = ((self.data.chargemode.bidi_charging.plan.limit.soc_scheduled - - soc) / 100) * ev_template.data.battery_capacity - duration = missing_amount/self.data.chargemode.bidi_charging.power * 3600 - - # es muss ein Plan übergeben werden, damit die Soll-Ströme ausgerechnet werden können - bidi_power_plan = copy.deepcopy(self.data.chargemode.bidi_charging.plan) - bidi_power_plan.current = self.data.chargemode.bidi_charging.power / phases_in_use / 230 - bidi_power_plan.phases_to_use = phases_in_use - bidi_power_plan.phases_to_use_pv = phases_in_use - plan_end_time = timecheck.check_end_time(bidi_power_plan, chargemode_switch_timestamp) - if plan_end_time is None: - plan_data = None - else: - plan_data = SelectedPlan(remaining_time=plan_end_time - duration, - duration=duration, - missing_amount=missing_amount, - phases=phases, - plan=bidi_power_plan) - if plan_data: - control_parameter.current_plan = plan_data.plan.id - else: - control_parameter.current_plan = None - return self.scheduled_charging_calc_current( - plan_data, - soc, - imported_since_plugged, - control_parameter.phases, - control_parameter.min_current, - data.data.general_data.data.control_interval, - charging_type, - ev_template) + elif soc < self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: + # kein bidirektionales Laden, da SoC noch nicht erreicht + missing_amount = ((self.data.chargemode.bidi_charging.plan.limit.soc_scheduled - + soc) / 100) * ev_template.data.battery_capacity + duration = missing_amount/self.data.chargemode.bidi_charging.power * 3600 + + # es muss ein Plan übergeben werden, damit die Soll-Ströme ausgerechnet werden können + bidi_power_plan = copy.deepcopy(self.data.chargemode.bidi_charging.plan) + bidi_power_plan.current = self.data.chargemode.bidi_charging.power / phases_in_use / 230 + bidi_power_plan.phases_to_use = phases_in_use + bidi_power_plan.phases_to_use_pv = phases_in_use + plan_end_time = timecheck.check_end_time(bidi_power_plan, chargemode_switch_timestamp) + if plan_end_time is None: + plan_data = None + else: + plan_data = SelectedPlan(remaining_time=plan_end_time - duration, + duration=duration, + missing_amount=missing_amount, + phases=phases, + plan=bidi_power_plan) + if plan_data: + control_parameter.current_plan = plan_data.plan.id + else: + control_parameter.current_plan = None + return self.scheduled_charging_calc_current( + plan_data, + soc, + imported_since_plugged, + control_parameter.phases, + control_parameter.min_current, + data.data.general_data.data.control_interval, + charging_type, + ev_template) def _find_recent_plan(self, plans: Dict[str, ScheduledChargingPlan], diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 2ae3107ec5..26ce2cd6b6 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -436,7 +436,7 @@ def process_chargepoint_topic(self, msg: mqtt.MQTTMessage): "openWB/set/chargepoint/get/power" in msg.topic or "openWB/set/chargepoint/get/daily_imported" in msg.topic or "openWB/set/chargepoint/get/daily_exported" in msg.topic): - self._validate_value(msg, float, [(0, float("inf"))]) + self._validate_value(msg, float) elif re.search("chargepoint/[0-9]+/config/template$", msg.topic) is not None: self._validate_value(msg, int, pub_json=True) elif "template" in msg.topic: @@ -451,9 +451,9 @@ def process_chargepoint_topic(self, msg: mqtt.MQTTMessage): elif ("/set/current" in msg.topic or "/set/current_prev" in msg.topic): if hardware_configuration.get_hardware_configuration_setting("dc_charging"): - self._validate_value(msg, float, [(0, 0), (6, 32), (0, 450)]) + self._validate_value(msg, float, [(float("-inf"), 0), (0, 0), (6, 32), (0, 450)]) else: - self._validate_value(msg, float, [(6, 32), (0, 0)]) + self._validate_value(msg, float, [(float("-inf"), 0), (6, 32), (0, 0)]) elif ("/set/energy_to_charge" in msg.topic or "/set/required_power" in msg.topic): self._validate_value(msg, float, [(0, float("inf"))]) @@ -528,7 +528,6 @@ def process_chargepoint_get_topics(self, msg): self._validate_value(msg, float, [(40, 60)]) elif ("/get/daily_imported" in msg.topic or "/get/daily_exported" in msg.topic or - "/get/power" in msg.topic or "/get/charging_current" in msg.topic or "/get/charging_power" in msg.topic or "/get/charging_voltage" in msg.topic or @@ -536,6 +535,8 @@ def process_chargepoint_get_topics(self, msg): "/get/exported" in msg.topic or "/get/soc_timestamp" in msg.topic): self._validate_value(msg, float, [(0, float("inf"))]) + elif "/get/power" in msg.topic: + self._validate_value(msg, float) elif "/get/phases_in_use" in msg.topic: self._validate_value(msg, int, [(0, 3)]) elif ("/get/charge_state" in msg.topic or @@ -545,7 +546,7 @@ def process_chargepoint_get_topics(self, msg): self._validate_value(msg, int, [(0, 2)]) elif ("/get/evse_current" in msg.topic or "/get/max_evse_current" in msg.topic): - self._validate_value(msg, float, [(0, 0), (6, 32), (600, 3200)]) + self._validate_value(msg, float, [(float("-inf"), 0), (0, 0), (6, 32), (600, 3200)]) elif ("/get/version" in msg.topic or "/get/current_branch" in msg.topic or "/get/current_commit" in msg.topic): From fac8f7b902be7391ee9770e1f95470a4d18943a5 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 27 Jun 2025 12:30:24 +0200 Subject: [PATCH 05/73] fixes --- packages/control/algorithm/bidi.py | 33 +++++++++---------- .../control/algorithm/surplus_controlled.py | 2 +- packages/control/counter.py | 4 +-- packages/control/ev/charge_template.py | 12 ++++--- packages/control/text.py | 6 ++-- .../web_themes/standard_legacy/web/index.html | 3 ++ 6 files changed, 32 insertions(+), 28 deletions(-) diff --git a/packages/control/algorithm/bidi.py b/packages/control/algorithm/bidi.py index e5f7c2d7e5..6ab960db5f 100644 --- a/packages/control/algorithm/bidi.py +++ b/packages/control/algorithm/bidi.py @@ -13,20 +13,19 @@ def __init__(self): def set_bidi(self): grid_counter = data.data.counter_all_data.get_evu_counter() zero_point_adjustment = grid_counter - if grid_counter.data.set.surplus_power_left < 0: - for mode_tuple in CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE: - preferenced_cps = get_chargepoints_by_mode(mode_tuple) - if preferenced_cps: - log.info( - f"Mode-Tuple {mode_tuple[0]} - {mode_tuple[1]} - {mode_tuple[2]}, Zähler {grid_counter.num}") - while len(preferenced_cps): - cp = preferenced_cps[0] - zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) - log.debug(f"Nullpunktanpassung für LP{cp.num}: {zero_point_adjustment}W") - missing_currents = [0]*3 - missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / - 230 for i in range(0, cp.data.get.phases_in_use)] - grid_counter.update_surplus_values_left(missing_currents, cp.data.get.voltages) - cp.data.set.current = missing_currents[0] - log.info(f"LP{cp.num}: Stromstärke {missing_currents}A") - preferenced_cps.pop(0) + for mode_tuple in CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE: + preferenced_cps = get_chargepoints_by_mode(mode_tuple) + if preferenced_cps: + log.info( + f"Mode-Tuple {mode_tuple[0]} - {mode_tuple[1]} - {mode_tuple[2]}, Zähler {grid_counter.num}") + while len(preferenced_cps): + cp = preferenced_cps[0] + zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) + log.debug(f"Nullpunktanpassung für LP{cp.num}: verbleibende Leistung {zero_point_adjustment}W") + missing_currents = [0]*3 + missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / + 230 for i in range(0, cp.data.get.phases_in_use)] + grid_counter.update_surplus_values_left(missing_currents, cp.data.get.voltages) + cp.data.set.current = missing_currents[0] + log.info(f"LP{cp.num}: Stromstärke {missing_currents}A") + preferenced_cps.pop(0) diff --git a/packages/control/algorithm/surplus_controlled.py b/packages/control/algorithm/surplus_controlled.py index 5c0b63f5ab..ff6a264e8e 100644 --- a/packages/control/algorithm/surplus_controlled.py +++ b/packages/control/algorithm/surplus_controlled.py @@ -75,7 +75,7 @@ def _set(self, current = available_for_cp current = common.get_current_to_set(cp.data.set.current, current, cp.data.set.target_current) - self._set_loadmangement_message(current, limit, cp, counter) + self._set_loadmangement_message(current, limit, cp) limited_current = limit_adjust_current(cp, current) common.set_current_counterdiff( cp.data.control_parameter.min_current, diff --git a/packages/control/counter.py b/packages/control/counter.py index f469c9e74e..1705e66bcb 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -518,10 +518,8 @@ def limit_raw_power_left_to_surplus(surplus) -> None: def set_raw_surplus_power_left() -> None: - """ bei der Überschuss-Verteilung wird der Überschuss immer mit dem Regelbereich betrachtet, - beim Bidi-Laden wird der reine (negative) Überschuss betrachtet. + """ bei der Überschuss-Verteilung wird der Überschuss immer mit dem Regelbereich betrachtet """ grid_counter = data.data.counter_all_data.get_evu_counter() grid_counter.data.set.surplus_power_left -= grid_counter._control_range_offset() - grid_counter.data.set.surplus_power_left = min(grid_counter.data.set.surplus_power_left, 0) log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index 5e55eddd50..4f28eafa5f 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -12,7 +12,7 @@ from control.ev.ev_template import EvTemplate from control.text import BidiState from dataclass_utils.factories import empty_dict_factory -from helpermodules.abstract_plans import Limit, limit_factory, ScheduledChargingPlan +from helpermodules.abstract_plans import Limit, ScheduledLimit, limit_factory, ScheduledChargingPlan from helpermodules import timecheck log = logging.getLogger(__name__) @@ -48,9 +48,13 @@ def scheduled_charging_plan_factory() -> ScheduledChargingPlan: return ScheduledChargingPlan() +def bidi_charging_plan_factory() -> ScheduledChargingPlan: + return ScheduledChargingPlan(name="Bidi-Plan", limit=ScheduledLimit(selected="soc")) + + @dataclass class BidiCharging: - plan: ScheduledChargingPlan = field(default_factory=scheduled_charging_plan_factory) + plan: ScheduledChargingPlan = field(default_factory=bidi_charging_plan_factory) power: int = 9000 @@ -369,7 +373,7 @@ def bidi_charging(self, message = bidi.value + message return required_current, submode, message, phases elif soc > self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: - return 0, "bidi_charging", None, phases_in_use + return control_parameter.min_current, "bidi_charging", None, phases_in_use elif soc < self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: # kein bidirektionales Laden, da SoC noch nicht erreicht missing_amount = ((self.data.chargemode.bidi_charging.plan.limit.soc_scheduled - @@ -381,7 +385,7 @@ def bidi_charging(self, bidi_power_plan.current = self.data.chargemode.bidi_charging.power / phases_in_use / 230 bidi_power_plan.phases_to_use = phases_in_use bidi_power_plan.phases_to_use_pv = phases_in_use - plan_end_time = timecheck.check_end_time(bidi_power_plan, chargemode_switch_timestamp) + plan_end_time = timecheck.check_end_time(bidi_power_plan, chargemode_switch_timestamp, False) if plan_end_time is None: plan_data = None else: diff --git a/packages/control/text.py b/packages/control/text.py index b91d5d9ea6..a83341a1c4 100644 --- a/packages/control/text.py +++ b/packages/control/text.py @@ -3,6 +3,6 @@ class BidiState(Enum): BIDI_CAPABLE = "" - CP_NOT_BIDI_CAPABLE = "Bidirektionales Laden ist nur mit einer openWB Pro oder Pro+ möglich." - CP_WRONG_PROTOCOL = "Bitte in den Einstellungen der openWB Pro/Pro+ die Charging Version auf 'Bidi' stellen." - EV_NOT_BIDI_CAPABLE = "Das Fahrzeug unterstützt kein bidirektionales Laden." + CP_NOT_BIDI_CAPABLE = "Bidirektionales Laden ist nur mit einer openWB Pro oder Pro+ möglich. " + CP_WRONG_PROTOCOL = "Bitte in den Einstellungen der openWB Pro/Pro+ die Charging Version auf 'Bidi' stellen. " + EV_NOT_BIDI_CAPABLE = "Das Fahrzeug unterstützt kein bidirektionales Laden. " diff --git a/packages/modules/web_themes/standard_legacy/web/index.html b/packages/modules/web_themes/standard_legacy/web/index.html index 685657de90..48b30d0821 100644 --- a/packages/modules/web_themes/standard_legacy/web/index.html +++ b/packages/modules/web_themes/standard_legacy/web/index.html @@ -522,6 +522,9 @@ + From aee396f9261c80ed9ea93172d8f3439b1e2035c1 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 27 Jun 2025 12:32:45 +0200 Subject: [PATCH 06/73] flake8 --- packages/control/ev/ev.py | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index e225472bee..fc2c0ac7d1 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -12,7 +12,6 @@ from helpermodules import timecheck from dataclass_utils.factories import empty_list_factory from control.text import BidiState -from control.limiting_value import LimitingValue from control.limiting_value import LimitingValue, LoadmanagementLimit from dataclasses import dataclass, field import logging From ae126fc33e33264bc90659c251c502c87741ea18 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 27 Jun 2025 14:34:31 +0200 Subject: [PATCH 07/73] pytest --- packages/control/ev/charge_template.py | 2 +- packages/control/ev/charge_template_test.py | 13 +++++++------ .../openwb_pro/chargepoint_module_test.py | 2 ++ .../update_values_test.py | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index 4f28eafa5f..bb65c00b56 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -447,7 +447,7 @@ def _find_recent_plan(self, plan_id = list(plan_dict.keys())[0] plan_end_time = list(plan_dict.values())[0] - plan = plans[plan_id] + plan = plans[str(plan_id)] remaining_time, missing_amount, phases, duration = self._calc_remaining_time( plan, plan_end_time, soc, ev_template, used_amount, max_hw_phases, phase_switch_supported, diff --git a/packages/control/ev/charge_template_test.py b/packages/control/ev/charge_template_test.py index a20f9e696e..7a35b1eea6 100644 --- a/packages/control/ev/charge_template_test.py +++ b/packages/control/ev/charge_template_test.py @@ -195,6 +195,7 @@ def test_scheduled_charging_recent_plan(end_time_mock, monkeypatch.setattr(ChargeTemplate, "_calc_remaining_time", calculate_duration_mock) check_end_time_mock = Mock(side_effect=end_time_mock) monkeypatch.setattr(timecheck, "check_end_time", check_end_time_mock) + control_parameter = ControlParameter() ct = ChargeTemplate() plan_mock_0 = Mock(spec=ScheduledChargingPlan, active=True, current=14, id=0, limit=Limit(selected="amount")) plan_mock_1 = Mock(spec=ScheduledChargingPlan, active=True, current=14, id=1, limit=Limit(selected="amount")) @@ -203,11 +204,11 @@ def test_scheduled_charging_recent_plan(end_time_mock, # execution selected_plan = ct.scheduled_charging( - 60, EvTemplate(), 3, 200, 3, True, ChargingType.AC.value, 1652688000, Mock(spec=ControlParameter)) + 60, EvTemplate(), 3, 200, 3, True, ChargingType.AC.value, 1652688000, control_parameter, 0, 120) # evaluation if selected_plan: - assert selected_plan.plan.id == expected_plan_num + assert control_parameter.current_plan == expected_plan_num else: assert selected_plan is None @@ -219,7 +220,7 @@ def test_scheduled_charging_recent_plan(end_time_mock, pytest.param([None, -50, -100], 2, id="1st plan fulfilled, 3rd plan"), pytest.param([None]*3, None, id="no plan"), ]) -def test_scheduled_charging_recent_plan_fulfilled(end_time_mock, expected_plan_num, monkeypatch): +def test_find_recent_plan_fulfilled(end_time_mock, expected_plan_num, monkeypatch): # setup # der erste PLan ist erfüllt, der zweite wird ausgewählt calculate_duration_mock = Mock(return_value=(100, 3000, 3, 500)) @@ -230,11 +231,11 @@ def test_scheduled_charging_recent_plan_fulfilled(end_time_mock, expected_plan_n plan_mock_0 = Mock(spec=ScheduledChargingPlan, active=True, current=14, id=0, limit=Limit(selected="amount")) plan_mock_1 = Mock(spec=ScheduledChargingPlan, active=True, current=14, id=1, limit=Limit(selected="amount")) plan_mock_2 = Mock(spec=ScheduledChargingPlan, active=True, current=14, id=2, limit=Limit(selected="amount")) - ct.data.chargemode.scheduled_charging.plans = {"0": plan_mock_0, "1": plan_mock_1, "2": plan_mock_2} + plans = {"0": plan_mock_0, "1": plan_mock_1, "2": plan_mock_2} # execution - selected_plan = ct.scheduled_charging_recent_plan( - 60, EvTemplate(), 3, 1200, 3, True, ChargingType.AC.value, 1652688000, Mock(spec=ControlParameter)) + selected_plan = ct._find_recent_plan( + plans, 60, EvTemplate(), 3, 1200, 3, True, ChargingType.AC.value, 1652688000, Mock(spec=ControlParameter)) # evaluation if selected_plan: diff --git a/packages/modules/chargepoints/openwb_pro/chargepoint_module_test.py b/packages/modules/chargepoints/openwb_pro/chargepoint_module_test.py index 81a2e43b63..ca4ab2980c 100644 --- a/packages/modules/chargepoints/openwb_pro/chargepoint_module_test.py +++ b/packages/modules/chargepoints/openwb_pro/chargepoint_module_test.py @@ -25,6 +25,7 @@ def sample_chargepoint_state(): rfid_timestamp=1700839714, vehicle_id="98:ED:5C:B4:EE:8D", evse_current=6, + evse_signaling="fake highlevel + basic iec61851", serial_number="823950" ) @@ -65,6 +66,7 @@ def sample_chargepoint_extended(): rfid=None, frequency=50.2, evse_current=6, + evse_signaling="unclear\n", serial_number="493826" ) diff --git a/packages/modules/internal_chargepoint_handler/update_values_test.py b/packages/modules/internal_chargepoint_handler/update_values_test.py index 44e5317532..d4c937dee5 100644 --- a/packages/modules/internal_chargepoint_handler/update_values_test.py +++ b/packages/modules/internal_chargepoint_handler/update_values_test.py @@ -24,7 +24,7 @@ @pytest.mark.parametrize( "old_chargepoint_state, published_topics", - [(None, 50), + [(None, 52), (OLD_CHARGEPOINT_STATE, 2)] ) From 7e0c17fff30ef5f8f573d1da441ab97273773194 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Mon, 30 Jun 2025 15:47:30 +0200 Subject: [PATCH 08/73] fix pytest --- packages/control/algorithm/algorithm.py | 5 ++-- packages/control/algorithm/bidi.py | 31 --------------------- packages/control/counter.py | 8 ------ packages/control/ev/charge_template_test.py | 2 +- 4 files changed, 3 insertions(+), 43 deletions(-) delete mode 100644 packages/control/algorithm/bidi.py diff --git a/packages/control/algorithm/algorithm.py b/packages/control/algorithm/algorithm.py index 199b6dc046..404eae40a2 100644 --- a/packages/control/algorithm/algorithm.py +++ b/packages/control/algorithm/algorithm.py @@ -4,7 +4,7 @@ from control import data from control.algorithm import common from control.algorithm.additional_current import AdditionalCurrent -from control.algorithm.bidi import Bidi +from control.algorithm.bidi_charging import Bidi from control.algorithm.min_current import MinCurrent from control.algorithm.no_current import NoCurrent from control.algorithm.surplus_controlled import SurplusControlled @@ -42,8 +42,7 @@ def calc_current(self) -> None: self.surplus_controlled.set_surplus_current() else: log.info("Keine Leistung für PV-geführtes Laden übrig.") - log.info("**Bidi-Entlade-Strom setzen**") - counter.set_raw_surplus_power_left() + log.info("**Bidi-(Ent-)Lade-Strom setzen**") self.bidi.set_bidi() self.no_current.set_no_current() self.no_current.set_none_current() diff --git a/packages/control/algorithm/bidi.py b/packages/control/algorithm/bidi.py deleted file mode 100644 index 6ab960db5f..0000000000 --- a/packages/control/algorithm/bidi.py +++ /dev/null @@ -1,31 +0,0 @@ -import logging -from control import data -from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE -from control.algorithm.filter_chargepoints import get_chargepoints_by_mode - -log = logging.getLogger(__name__) - - -class Bidi: - def __init__(self): - pass - - def set_bidi(self): - grid_counter = data.data.counter_all_data.get_evu_counter() - zero_point_adjustment = grid_counter - for mode_tuple in CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE: - preferenced_cps = get_chargepoints_by_mode(mode_tuple) - if preferenced_cps: - log.info( - f"Mode-Tuple {mode_tuple[0]} - {mode_tuple[1]} - {mode_tuple[2]}, Zähler {grid_counter.num}") - while len(preferenced_cps): - cp = preferenced_cps[0] - zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) - log.debug(f"Nullpunktanpassung für LP{cp.num}: verbleibende Leistung {zero_point_adjustment}W") - missing_currents = [0]*3 - missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / - 230 for i in range(0, cp.data.get.phases_in_use)] - grid_counter.update_surplus_values_left(missing_currents, cp.data.get.voltages) - cp.data.set.current = missing_currents[0] - log.info(f"LP{cp.num}: Stromstärke {missing_currents}A") - preferenced_cps.pop(0) diff --git a/packages/control/counter.py b/packages/control/counter.py index 1705e66bcb..32af37e5c4 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -515,11 +515,3 @@ def limit_raw_power_left_to_surplus(surplus) -> None: counter.data.set.surplus_power_left = surplus log.debug(f'Zähler {counter.num}: Begrenzung der verbleibenden Leistung auf ' f'{counter.data.set.surplus_power_left}W') - - -def set_raw_surplus_power_left() -> None: - """ bei der Überschuss-Verteilung wird der Überschuss immer mit dem Regelbereich betrachtet - """ - grid_counter = data.data.counter_all_data.get_evu_counter() - grid_counter.data.set.surplus_power_left -= grid_counter._control_range_offset() - log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") diff --git a/packages/control/ev/charge_template_test.py b/packages/control/ev/charge_template_test.py index 7a35b1eea6..d74b1e1051 100644 --- a/packages/control/ev/charge_template_test.py +++ b/packages/control/ev/charge_template_test.py @@ -185,7 +185,7 @@ def test_calculate_duration(selected: str, phases: int, expected_duration: float pytest.param([1000, 1500, 2000], 0, id="1st plan"), pytest.param([1500, 1000, 2000], 1, id="2nd plan"), pytest.param([1500, 2000, 1000], 2, id="3rd plan"), - pytest.param([None]*3, 0, id="no plan"), + pytest.param([None]*3, None, id="no plan"), ]) def test_scheduled_charging_recent_plan(end_time_mock, expected_plan_num: Optional[int], From e857a519f2efc4981ad65ea75328c222aa6db341 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Mon, 30 Jun 2025 15:47:45 +0200 Subject: [PATCH 09/73] rename --- packages/control/algorithm/bidi_charging.py | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 packages/control/algorithm/bidi_charging.py diff --git a/packages/control/algorithm/bidi_charging.py b/packages/control/algorithm/bidi_charging.py new file mode 100644 index 0000000000..a060dfec51 --- /dev/null +++ b/packages/control/algorithm/bidi_charging.py @@ -0,0 +1,32 @@ +import logging +from control import data +from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE +from control.algorithm.filter_chargepoints import get_chargepoints_by_mode + +log = logging.getLogger(__name__) + + +class Bidi: + def __init__(self): + pass + + def set_bidi(self): + grid_counter = data.data.counter_all_data.get_evu_counter() + log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") + zero_point_adjustment = grid_counter + for mode_tuple in CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE: + preferenced_cps = get_chargepoints_by_mode(mode_tuple) + if preferenced_cps: + log.info( + f"Mode-Tuple {mode_tuple[0]} - {mode_tuple[1]} - {mode_tuple[2]}, Zähler {grid_counter.num}") + while len(preferenced_cps): + cp = preferenced_cps[0] + zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) + log.debug(f"Nullpunktanpassung für LP{cp.num}: verbleibende Leistung {zero_point_adjustment}W") + missing_currents = [0]*3 + missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / + 230 for i in range(0, cp.data.get.phases_in_use)] + grid_counter.update_surplus_values_left(missing_currents, cp.data.get.voltages) + cp.data.set.current = missing_currents[0] + log.info(f"LP{cp.num}: Stromstärke {missing_currents}A") + preferenced_cps.pop(0) From b69b9c8ca00542f3485321d008f0981a45ad4152 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 1 Jul 2025 15:25:29 +0200 Subject: [PATCH 10/73] rename pro mode --- packages/control/chargepoint/chargepoint.py | 2 +- .../modules/chargepoints/openwb_pro/chargepoint_module.py | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 5f9546b996..19df82ed17 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -543,7 +543,7 @@ def get_max_phase_hw(self) -> int: def hw_bidi_capable(self) -> BidiState: if self.data.get.evse_signaling is None: return BidiState.CP_NOT_BIDI_CAPABLE - elif self.data.get.evse_signaling != "bidi": + elif self.data.get.evse_signaling != "HLC": return BidiState.CP_WRONG_PROTOCOL elif self.data.set.charging_ev_data.ev_template.data.bidi is False: return BidiState.EV_NOT_BIDI_CAPABLE diff --git a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py index 6bb5cf370b..1a6cb449df 100644 --- a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py +++ b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py @@ -54,11 +54,7 @@ def set_current(self, current: float) -> None: with SingleComponentUpdateContext(self.fault_state, update_always=False): with self.client_error_context: ip_address = self.config.configuration.ip_address - if self.old_chargepoint_state.evse_signaling == "bidi": - watt = current*230*self.old_chargepoint_state.phases_in_use - self.__session.post('http://'+ip_address+'/connect.php', data={'watt': watt}) - else: - self.__session.post('http://'+ip_address+'/connect.php', data={'ampere': current}) + self.__session.post('http://'+ip_address+'/connect.php', data={'ampere': current}) def get_values(self) -> None: with SingleComponentUpdateContext(self.fault_state): From 8a7aed8d66dff63537d7f91148f10ee0529e6250 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 1 Jul 2025 16:09:28 +0200 Subject: [PATCH 11/73] fixes --- packages/control/ev/charge_template.py | 6 +++--- packages/control/ev/ev.py | 15 +-------------- packages/helpermodules/update_config.py | 10 ++++++++-- 3 files changed, 12 insertions(+), 19 deletions(-) diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index f38fb1df12..f8914a0f13 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -470,7 +470,6 @@ def scheduled_charging(self, charging_type: str, chargemode_switch_timestamp: float, control_parameter: ControlParameter, - imported_since_plugged: float, soc_request_interval_offset: int) -> Optional[SelectedPlan]: plan_data = self._find_recent_plan(self.data.chargemode.scheduled_charging.plans, soc, @@ -481,7 +480,8 @@ def scheduled_charging(self, phase_switch_supported, charging_type, chargemode_switch_timestamp, - control_parameter) + control_parameter, + soc_request_interval_offset) if plan_data: control_parameter.current_plan = plan_data.plan.id else: @@ -489,7 +489,7 @@ def scheduled_charging(self, return self.scheduled_charging_calc_current( plan_data, soc, - imported_since_plugged, + used_amount, control_parameter.phases, control_parameter.min_current, soc_request_interval_offset, diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index 1a34ca51e1..1f63bd56d6 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -158,7 +158,7 @@ def get_required_current(self, else: soc_request_interval_offset = 0 if charge_template.data.chargemode.selected == "scheduled_charging": - plan_data = charge_template.scheduled_charging_recent_plan( + required_current, submode, tmp_message, phases = charge_template.scheduled_charging( self.data.get.soc, self.ev_template, control_parameter.phases, @@ -169,19 +169,6 @@ def get_required_current(self, chargemode_switch_timestamp, control_parameter, soc_request_interval_offset) - if plan_data: - control_parameter.current_plan = plan_data.plan.id - else: - control_parameter.current_plan = None - required_current, submode, tmp_message, phases = charge_template.scheduled_charging_calc_current( - plan_data, - self.data.get.soc, - imported_since_plugged, - control_parameter.phases, - control_parameter.min_current, - soc_request_interval_offset, - charging_type, - self.ev_template) message = f"{tmp_message or ''}".strip() # Wenn Zielladen auf Überschuss wartet, prüfen, ob Zeitladen aktiv ist. diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 130348ae1e..9a3cd76278 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -36,7 +36,7 @@ from control.bat_all import BatConsiderationMode from control.chargepoint.charging_type import ChargingType from control.counter import get_counter_default_config -from control.ev.charge_template import EcoCharging, get_charge_template_default +from control.ev.charge_template import EcoCharging, get_charge_template_default, BidiCharging from control.ev import ev from control.ev.ev_template import EvTemplateData from control.general import ChargemodeConfig, Prices @@ -2315,5 +2315,11 @@ def upgrade(topic: str, payload) -> Optional[dict]: if "bidi" not in payload: payload.update({"bidi": False}) return {topic: payload} + elif re.search("openWB/vehicle/template/charge_template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + if "bidi_charging" not in payload["chargemode"]: + payload.pop("bidi_charging") + payload["chargemode"].update({"bidi_charging": asdict(BidiCharging())}) + return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 86) + self.__update_topic("openWB/system/datastore_version", 86) \ No newline at end of file From 8c1368ab08b6b22ba3b13e505825c79f47ca74db Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 1 Jul 2025 16:38:52 +0200 Subject: [PATCH 12/73] workaround max current --- packages/control/algorithm/bidi_charging.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/control/algorithm/bidi_charging.py b/packages/control/algorithm/bidi_charging.py index a060dfec51..d54db1e93c 100644 --- a/packages/control/algorithm/bidi_charging.py +++ b/packages/control/algorithm/bidi_charging.py @@ -23,9 +23,14 @@ def set_bidi(self): cp = preferenced_cps[0] zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) log.debug(f"Nullpunktanpassung für LP{cp.num}: verbleibende Leistung {zero_point_adjustment}W") - missing_currents = [0]*3 missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / 230 for i in range(0, cp.data.get.phases_in_use)] + missing_currents += [0] * (3 - len(missing_currents)) + for index in range(0,3): + if missing_currents[index] < 0: + missing_currents[index] = max(-32, missing_currents[index]) + else: + missing_currents[index] = min(32, missing_currents[index]) grid_counter.update_surplus_values_left(missing_currents, cp.data.get.voltages) cp.data.set.current = missing_currents[0] log.info(f"LP{cp.num}: Stromstärke {missing_currents}A") From d2cdb365e3a2ac8ab014b9871d5cc5c04a18d9b4 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 3 Jul 2025 07:44:16 +0200 Subject: [PATCH 13/73] fix zero point control mode --- packages/control/algorithm/algorithm.py | 1 + .../algorithm/integration_test/pv_charging_test.py | 14 +++++++------- packages/control/counter.py | 8 ++++++++ packages/helpermodules/update_config.py | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/control/algorithm/algorithm.py b/packages/control/algorithm/algorithm.py index 404eae40a2..319f14cb71 100644 --- a/packages/control/algorithm/algorithm.py +++ b/packages/control/algorithm/algorithm.py @@ -43,6 +43,7 @@ def calc_current(self) -> None: else: log.info("Keine Leistung für PV-geführtes Laden übrig.") log.info("**Bidi-(Ent-)Lade-Strom setzen**") + counter.set_raw_surplus_power_left() self.bidi.set_bidi() self.no_current.set_no_current() self.no_current.set_none_current() diff --git a/packages/control/algorithm/integration_test/pv_charging_test.py b/packages/control/algorithm/integration_test/pv_charging_test.py index 2147814339..2015a2d85f 100644 --- a/packages/control/algorithm/integration_test/pv_charging_test.py +++ b/packages/control/algorithm/integration_test/pv_charging_test.py @@ -133,7 +133,7 @@ def test_start_pv_delay(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatch) assert data.data.cp_data[ "cp5"].data.control_parameter.timestamp_switch_on_off == 1652683252.0 assert data.data.counter_data["counter0"].data.set.raw_power_left == 31975 - assert data.data.counter_data["counter0"].data.set.surplus_power_left == 10090.0 + assert data.data.counter_data["counter0"].data.set.surplus_power_left == 9975.0 assert data.data.counter_data["counter0"].data.set.reserved_surplus == 9000 @@ -170,7 +170,7 @@ def test_pv_delay_expired(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatc assert data.data.cp_data[ "cp5"].data.control_parameter.timestamp_switch_on_off is None assert data.data.counter_data["counter0"].data.set.raw_power_left == 24300 - assert data.data.counter_data["counter0"].data.set.surplus_power_left == 2415 + assert data.data.counter_data["counter0"].data.set.surplus_power_left == 2300.0 assert data.data.counter_data["counter0"].data.set.reserved_surplus == 0 @@ -184,7 +184,7 @@ def test_pv_delay_expired(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatc expected_current_cp4=8, expected_current_cp5=8, expected_raw_power_left=34820, - expected_surplus_power_left=6035.0, + expected_surplus_power_left=5920.0, expected_reserved_surplus=0, expected_released_surplus=0), ParamsSurplus(name="reduce current", @@ -196,7 +196,7 @@ def test_pv_delay_expired(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatc expected_current_cp4=7.8731884057971016, expected_current_cp5=7.8731884057971016, expected_raw_power_left=24470, - expected_surplus_power_left=0, + expected_surplus_power_left=-115.0, expected_reserved_surplus=0, expected_released_surplus=0), ParamsSurplus(name="switch off delay for two of three charging", @@ -208,7 +208,7 @@ def test_pv_delay_expired(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatc expected_current_cp4=6, expected_current_cp5=6, expected_raw_power_left=5635, - expected_surplus_power_left=-16250.0, + expected_surplus_power_left=-16365.0, expected_reserved_surplus=0, expected_released_surplus=11040), ] @@ -247,7 +247,7 @@ def test_surplus(params: ParamsSurplus, all_cp_pv_charging_3p, all_cp_charging_3 expected_current_cp4=6, expected_current_cp5=6, expected_raw_power_left=17400, - expected_surplus_power_left=-4485, + expected_surplus_power_left=-4600, expected_reserved_surplus=0, expected_released_surplus=0), ParamsPhaseSwitch(name="phase switch 1p->3p", @@ -261,7 +261,7 @@ def test_surplus(params: ParamsSurplus, all_cp_pv_charging_3p, all_cp_charging_3 expected_current_cp4=6, expected_current_cp5=6, expected_raw_power_left=37520.0, - expected_surplus_power_left=10575.0, + expected_surplus_power_left=10460.0, expected_reserved_surplus=0, expected_released_surplus=0) ] diff --git a/packages/control/counter.py b/packages/control/counter.py index 32af37e5c4..5c2ec622c5 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -515,3 +515,11 @@ def limit_raw_power_left_to_surplus(surplus) -> None: counter.data.set.surplus_power_left = surplus log.debug(f'Zähler {counter.num}: Begrenzung der verbleibenden Leistung auf ' f'{counter.data.set.surplus_power_left}W') + + +def set_raw_surplus_power_left() -> None: + """ beim Bidi-Laden den Regelmodus rausrechnen, da sonst zum Regelmodus und nicht zum Nullpunkt geregelt wird. + """ + grid_counter = data.data.counter_all_data.get_evu_counter() + grid_counter.data.set.surplus_power_left -= grid_counter._control_range_offset() + log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 9a3cd76278..1b858ce76f 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2322,4 +2322,4 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload["chargemode"].update({"bidi_charging": asdict(BidiCharging())}) return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 86) \ No newline at end of file + self.__update_topic("openWB/system/datastore_version", 86) From 76bf7a0d0318d9081e62e4696605700db59c67dd Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 3 Jul 2025 12:24:17 +0200 Subject: [PATCH 14/73] max_discharge_power --- .../modules/chargepoints/openwb_pro/chargepoint_module.py | 5 +++++ packages/modules/common/component_state.py | 2 ++ 2 files changed, 7 insertions(+) diff --git a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py index 1a6cb449df..881b654656 100644 --- a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py +++ b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py @@ -98,6 +98,11 @@ def request_values(self) -> ChargepointState: chargepoint_state.rfid = json_rsp["rfid_tag"] if json_rsp.get("rfid_timestamp"): chargepoint_state.rfid_timestamp = json_rsp["rfid_timestamp"] + if json_rsp.get("max_discharge_power"): + chargepoint_state.max_discharge_power = json_rsp["max_discharge_power"] + else: + # TODO REMOVE + chargepoint_state.max_discharge_power = 4000 self.validate_values(chargepoint_state) self.client_error_context.reset_error_counter() diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index 22e6898199..18c7d35ff7 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -169,6 +169,7 @@ def __init__(self, charging_voltage: Optional[float] = 0, charging_power: Optional[float] = 0, evse_signaling: Optional[str] = None, + max_discharge_power: Optional[float] = None, powers: Optional[List[Optional[float]]] = None, voltages: Optional[List[Optional[float]]] = None, currents: Optional[List[Optional[float]]] = None, @@ -215,6 +216,7 @@ def __init__(self, self.current_commit = current_commit self.version = version self.evse_signaling = evse_signaling + self.max_discharge_power = max_discharge_power @auto_str From aed48b48ae7f2e403832900b3cdafb4c4875d28c Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 3 Jul 2025 15:57:15 +0200 Subject: [PATCH 15/73] calc max discharge power --- packages/control/algorithm/bidi_charging.py | 11 +++---- packages/control/chargepoint/chargepoint.py | 29 ++++++++++++------- .../control/chargepoint/chargepoint_data.py | 1 + packages/helpermodules/setdata.py | 1 + 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/packages/control/algorithm/bidi_charging.py b/packages/control/algorithm/bidi_charging.py index d54db1e93c..2a6c81cb0f 100644 --- a/packages/control/algorithm/bidi_charging.py +++ b/packages/control/algorithm/bidi_charging.py @@ -26,11 +26,12 @@ def set_bidi(self): missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / 230 for i in range(0, cp.data.get.phases_in_use)] missing_currents += [0] * (3 - len(missing_currents)) - for index in range(0,3): - if missing_currents[index] < 0: - missing_currents[index] = max(-32, missing_currents[index]) - else: - missing_currents[index] = min(32, missing_currents[index]) + if zero_point_adjustment > 0: + for index in range(0,3): + missing_currents[index] = min(cp.data.control_parameter.required_current, missing_currents[index]) + else: + for index in range(0,3): + missing_currents[index] = cp.check_min_max_current(missing_currents[index], cp.data.get.phases_in_use) grid_counter.update_surplus_values_left(missing_currents, cp.data.get.voltages) cp.data.set.current = missing_currents[0] log.info(f"LP{cp.num}: Stromstärke {missing_currents}A") diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 19df82ed17..25ef61d6ab 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -572,17 +572,7 @@ def set_phases(self, phases: int) -> int: self.data.control_parameter.phases = phases return phases - def check_min_max_current(self, required_current: float, phases: int, pv: bool = False) -> float: - if (self.data.control_parameter.chargemode == Chargemode.BIDI_CHARGING and - self.data.control_parameter.submode == Chargemode.BIDI_CHARGING): - return required_current - required_current_prev = required_current - required_current, msg = self.data.set.charging_ev_data.check_min_max_current( - self.data.control_parameter, - required_current, - phases, - self.template.data.charging_type, - pv) + def check_cp_min_max_current(self, required_current: float, phases: int) -> float: if self.template.data.charging_type == ChargingType.AC.value: if phases == 1: required_current = min(required_current, self.template.data.max_current_single_phase) @@ -590,6 +580,23 @@ def check_min_max_current(self, required_current: float, phases: int, pv: bool = required_current = min(required_current, self.template.data.max_current_multi_phases) else: required_current = min(required_current, self.template.data.dc_max_current) + return required_current + + def check_min_max_current(self, required_current: float, phases: int, pv: bool = False) -> float: + required_current_prev = required_current + if (self.data.control_parameter.chargemode == Chargemode.BIDI_CHARGING and + self.data.control_parameter.submode == Chargemode.BIDI_CHARGING and required_current < 0): + required_current = max(self.data.get.max_discharge_power / phases / 230, required_current) + # CDP prüft für Ladeströme, aber Entladeströme dürfen auch nicht höher sein. + required_current = self.check_cp_min_max_current(abs(required_current), phases) * -1 + else: + required_current, msg = self.data.set.charging_ev_data.check_min_max_current( + self.data.control_parameter, + required_current, + phases, + self.template.data.charging_type, + pv) + required_current = self.check_cp_min_max_current(required_current, phases) if required_current != required_current_prev and msg is None: msg = ("Die Einstellungen in dem Ladepunkt-Profil beschränken den Strom auf " f"maximal {required_current} A.") diff --git a/packages/control/chargepoint/chargepoint_data.py b/packages/control/chargepoint/chargepoint_data.py index 3b2b504001..167abe1977 100644 --- a/packages/control/chargepoint/chargepoint_data.py +++ b/packages/control/chargepoint/chargepoint_data.py @@ -108,6 +108,7 @@ class Get: fault_str: str = NO_ERROR fault_state: int = 0 imported: float = 0 + max_discharge_power: Optional[float] = None max_evse_current: Optional[int] = None phases_in_use: int = 0 plug_state: bool = False diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 3fbca3b633..baa22e2d29 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -531,6 +531,7 @@ def process_chargepoint_get_topics(self, msg): "/get/charging_current" in msg.topic or "/get/charging_power" in msg.topic or "/get/charging_voltage" in msg.topic or + "/get/max_discharge_power" in msg.topic or "/get/imported" in msg.topic or "/get/exported" in msg.topic or "/get/soc_timestamp" in msg.topic): From d5472e0fe8c6c7d3566c7784aedb736e174beb87 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 4 Jul 2025 14:44:59 +0200 Subject: [PATCH 16/73] Exception --- packages/control/ev/ev.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index 1f63bd56d6..48108a52b1 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -198,6 +198,8 @@ def get_required_current(self, required_current, submode, tmp_message, phases = charge_template.eco_charging( self.data.get.soc, control_parameter, charging_type, imported_since_plugged, max_phases_hw) elif charge_template.data.chargemode.selected == "bidi_charging": + if self.soc_module is None: + raise Exception("Für den Lademodis Bidi ist zwingend ein SoC-Modul erforderlich. Soll der SoC ausschließlich aus dem Fahrzeug ausgelesen werden, bitte auf manuellen SoC mit Auslesung aus dem Fahrzeug umstellen.") required_current, submode, tmp_message, phases = charge_template.bidi_charging( self.data.get.soc, self.ev_template, From 2349f59155786704d401e31efa6dedf477c8d5ef Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Mon, 7 Jul 2025 12:36:16 +0200 Subject: [PATCH 17/73] fix extend meter check (#2518) --- packages/modules/devices/openwb/openwb_flex/bat.py | 2 ++ packages/modules/devices/openwb/openwb_flex/counter.py | 2 ++ packages/modules/devices/openwb/openwb_flex/inverter.py | 2 ++ 3 files changed, 6 insertions(+) diff --git a/packages/modules/devices/openwb/openwb_flex/bat.py b/packages/modules/devices/openwb/openwb_flex/bat.py index b8a873ebc0..06d927ca35 100644 --- a/packages/modules/devices/openwb/openwb_flex/bat.py +++ b/packages/modules/devices/openwb/openwb_flex/bat.py @@ -5,6 +5,7 @@ from modules.common.abstract_device import AbstractBat from modules.common.component_state import BatState from modules.common.component_type import ComponentDescriptor +from modules.common.fault_state import ComponentInfo, FaultState from modules.common.lovato import Lovato from modules.common.mpm3pm import Mpm3pm from modules.common.sdm import Sdm120 @@ -29,6 +30,7 @@ def initialize(self) -> None: self.__device_id: int = self.kwargs['device_id'] self.__tcp_client: modbus.ModbusTcpClient_ = self.kwargs['client'] factory = kit_bat_version_factory(self.component_config.configuration.version) + self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) self.__client = factory(self.component_config.configuration.id, self.__tcp_client, self.fault_state) self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="speicher") self.store = get_bat_value_store(self.component_config.id) diff --git a/packages/modules/devices/openwb/openwb_flex/counter.py b/packages/modules/devices/openwb/openwb_flex/counter.py index 172012a13c..bfc25ed810 100644 --- a/packages/modules/devices/openwb/openwb_flex/counter.py +++ b/packages/modules/devices/openwb/openwb_flex/counter.py @@ -4,6 +4,7 @@ from modules.common import modbus from modules.common.abstract_device import AbstractCounter from modules.common.component_type import ComponentDescriptor +from modules.common.fault_state import ComponentInfo, FaultState from modules.common.mpm3pm import Mpm3pm from modules.common.b23 import B23 from modules.common.simcount import SimCounter @@ -26,6 +27,7 @@ def initialize(self) -> None: self.__device_id: int = self.kwargs['device_id'] self.__tcp_client: modbus.ModbusTcpClient_ = self.kwargs['client'] factory = kit_counter_version_factory(self.component_config.configuration.version) + self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) self.__client = factory(self.component_config.configuration.id, self.__tcp_client, self.fault_state) self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="bezug") self.store = get_counter_value_store(self.component_config.id) diff --git a/packages/modules/devices/openwb/openwb_flex/inverter.py b/packages/modules/devices/openwb/openwb_flex/inverter.py index 7d79eee8c7..1761cc01e6 100644 --- a/packages/modules/devices/openwb/openwb_flex/inverter.py +++ b/packages/modules/devices/openwb/openwb_flex/inverter.py @@ -5,6 +5,7 @@ from modules.common.abstract_device import AbstractInverter from modules.common.component_state import InverterState from modules.common.component_type import ComponentDescriptor +from modules.common.fault_state import ComponentInfo, FaultState from modules.common.lovato import Lovato from modules.common.sdm import Sdm120 from modules.common.simcount import SimCounter @@ -27,6 +28,7 @@ def initialize(self) -> None: self.__device_id: int = self.kwargs['device_id'] self.__tcp_client: modbus.ModbusTcpClient_ = self.kwargs['client'] factory = kit_inverter_version_factory(self.component_config.configuration.version) + self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) self.__client = factory(self.component_config.configuration.id, self.__tcp_client, self.fault_state) self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="pv") self.simulation = {} From ddd00a51398d356702ced6b26ee7cf19aef82de1 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Mon, 7 Jul 2025 14:57:56 +0200 Subject: [PATCH 18/73] fix phases scheduled charging combined with time charging (#2521) --- packages/control/ev/ev.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index 48108a52b1..db5707c844 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -174,7 +174,7 @@ def get_required_current(self, # Wenn Zielladen auf Überschuss wartet, prüfen, ob Zeitladen aktiv ist. if (submode != "instant_charging" and charge_template.data.time_charging.active): - tmp_current, tmp_submode, tmp_message, plan_id, phases = charge_template.time_charging( + tmp_current, tmp_submode, tmp_message, plan_id, tmp_phases = charge_template.time_charging( self.data.get.soc, imported_since_plugged, charging_type @@ -185,6 +185,7 @@ def get_required_current(self, control_parameter.current_plan = plan_id required_current = tmp_current submode = tmp_submode + phases = tmp_phases if (required_current == 0) or (required_current is None): if charge_template.data.chargemode.selected == "instant_charging": required_current, submode, tmp_message, phases = charge_template.instant_charging( From ccb8731c9956440ffa1be8bf55294503baa5fa7c Mon Sep 17 00:00:00 2001 From: ndrsnhs <156670705+ndrsnhs@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:26:28 +0200 Subject: [PATCH 19/73] add path (#2520) --- packages/tools/modbus_finder.py | 9 +++++++-- packages/tools/modbus_tester.py | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/tools/modbus_finder.py b/packages/tools/modbus_finder.py index 2b575a8b3a..a2de5e2016 100644 --- a/packages/tools/modbus_finder.py +++ b/packages/tools/modbus_finder.py @@ -1,12 +1,17 @@ #!/usr/bin/env python3 -import sys import time from typing import Callable import pymodbus from pymodbus.constants import Endian -from modules.common import modbus +import sys +sys.path.append("/var/www/html/openWB/packages") + +try: + from modules.common import modbus +except Exception as e: + print(e) def try_read(function: Callable, **kwargs) -> str: diff --git a/packages/tools/modbus_tester.py b/packages/tools/modbus_tester.py index 0cb832bc1b..f32a993cc2 100644 --- a/packages/tools/modbus_tester.py +++ b/packages/tools/modbus_tester.py @@ -1,7 +1,12 @@ #!/usr/bin/env python3 -import sys import time -from modules.common import modbus +import sys +sys.path.append("/var/www/html/openWB/packages") +try: + from modules.common import modbus +except Exception as e: + print(e) + host = sys.argv[1] port = int(sys.argv[2]) From 8bd52bf78eb60898350b695fdc9ce074210b9eed Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Tue, 8 Jul 2025 11:13:09 +0200 Subject: [PATCH 20/73] create empty thread errors log (#2524) --- packages/helpermodules/logger.py | 4 ++++ packages/main.py | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/helpermodules/logger.py b/packages/helpermodules/logger.py index e164861394..dff683a355 100644 --- a/packages/helpermodules/logger.py +++ b/packages/helpermodules/logger.py @@ -177,6 +177,10 @@ def mb_to_bytes(megabytes: int) -> int: logging.getLogger("uModbus").setLevel(logging.WARNING) logging.getLogger("websockets").setLevel(logging.WARNING) + thread_errors_path = Path(Path(__file__).resolve().parents[2]/"ramdisk"/"thread_errors.log") + with thread_errors_path.open("w") as f: + f.write("") + def threading_excepthook(args): with open(RAMDISK_PATH+"thread_errors.log", "a") as f: f.write("Uncaught exception in thread:\n") diff --git a/packages/main.py b/packages/main.py index c399298b65..59090a0413 100755 --- a/packages/main.py +++ b/packages/main.py @@ -146,7 +146,9 @@ def handler5Min(self): def handler_midnight(self): try: save_log(LogType.MONTHLY) - Path(Path(__file__).resolve().parents[1]/"ramdisk"/"thread_errors.log").unlink(missing_ok=True) + thread_errors_path = Path(Path(__file__).resolve().parents[1]/"ramdisk"/"thread_errors.log") + with thread_errors_path.open("w") as f: + f.write("") except KeyboardInterrupt: log.critical("Ausführung durch exit_after gestoppt: "+traceback.format_exc()) except Exception: From 090b10813381b8b5977e98951055863da0a360d5 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Tue, 8 Jul 2025 11:23:49 +0200 Subject: [PATCH 21/73] loose limits for hardware check (#2525) * loose limits for hardware check * fix --- packages/modules/common/hardware_check.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/common/hardware_check.py b/packages/modules/common/hardware_check.py index 5515f41547..d8faf3a60e 100644 --- a/packages/modules/common/hardware_check.py +++ b/packages/modules/common/hardware_check.py @@ -43,7 +43,7 @@ def valid_voltage(voltage) -> bool: (valid_voltage(voltages[0]) and valid_voltage(voltages[1]) and valid_voltage((voltages[2])))): return METER_BROKEN_VOLTAGES.format(voltages) interdependent_values = [sum(counter_state.currents), counter_state.power] - if not (all(v == 0 for v in interdependent_values) or all(v != 0 for v in interdependent_values)): + if not (all(abs(v) < 0.5 for v in interdependent_values) or all(abs(v) > 0.5 for v in interdependent_values)): return METER_IMPLAUSIBLE_VALUE.format(counter_state.powers, counter_state.currents, counter_state.voltages) return None From 46c8200cf9c30214b98663ab5946c660772d3394 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 8 Jul 2025 12:48:39 +0200 Subject: [PATCH 22/73] fixes --- packages/control/chargepoint/chargepoint.py | 13 +++++++++++-- packages/control/chargepoint/chargepoint_data.py | 3 ++- packages/control/ev/charge_template.py | 6 +++--- .../modules/chargepoints/mqtt/chargepoint_module.py | 1 + .../chargepoints/openwb_pro/chargepoint_module.py | 5 +++++ packages/modules/common/store/_chargepoint.py | 1 + 6 files changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 25ef61d6ab..6044bee589 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -40,6 +40,7 @@ from helpermodules.pub import Pub from helpermodules import timecheck from helpermodules.utils import thread_handler +from modules.chargepoints.openwb_pro.chargepoint_module import EvseSignaling from modules.common.abstract_chargepoint import AbstractChargepoint from helpermodules.timecheck import check_timestamp, create_timestamp @@ -338,6 +339,8 @@ def check_deviating_contactor_states(self, phase_a: int, phase_b: int) -> bool: def _is_phase_switch_required(self) -> bool: phase_switch_required = False + if self.data.get.evse_signaling == EvseSignaling.HLC: + return False # Manche EVs brauchen nach der Umschaltung mehrere Zyklen, bis sie mit den drei Phasen laden. Dann darf # nicht zwischendurch eine neue Umschaltung getriggert werden. if ((((self.data.control_parameter.state == ChargepointState.PHASE_SWITCH_AWAITED or @@ -439,6 +442,8 @@ def initiate_phase_switch(self): """prüft, ob eine Phasenumschaltung erforderlich ist und führt diese durch. """ try: + if self.data.get.evse_signaling == EvseSignaling.HLC: + return evu_counter = data.data.counter_all_data.get_evu_counter() charging_ev = self.data.set.charging_ev_data # Wenn noch kein Eintrag im Protokoll erstellt wurde, wurde noch nicht geladen und die Phase kann noch @@ -496,7 +501,9 @@ def initiate_phase_switch(self): def get_phases_by_selected_chargemode(self, phases_chargemode: int) -> int: charging_ev = self.data.set.charging_ev_data - if ((self.data.config.auto_phase_switch_hw is False and self.data.get.charge_state) or + if self.data.get.evse_signaling == EvseSignaling.HLC: + phases = self.data.get.phases_in_use + elif ((self.data.config.auto_phase_switch_hw is False and self.data.get.charge_state) or self.data.control_parameter.failed_phase_switches > self.MAX_FAILED_PHASE_SWITCHES): # Wenn keine Umschaltung verbaut ist, die Phasenzahl nehmen, mit der geladen wird. Damit werden zB auch # einphasige EV an dreiphasigen openWBs korrekt berücksichtigt. @@ -584,6 +591,7 @@ def check_cp_min_max_current(self, required_current: float, phases: int) -> floa def check_min_max_current(self, required_current: float, phases: int, pv: bool = False) -> float: required_current_prev = required_current + msg = None if (self.data.control_parameter.chargemode == Chargemode.BIDI_CHARGING and self.data.control_parameter.submode == Chargemode.BIDI_CHARGING and required_current < 0): required_current = max(self.data.get.max_discharge_power / phases / 230, required_current) @@ -599,7 +607,7 @@ def check_min_max_current(self, required_current: float, phases: int, pv: bool = required_current = self.check_cp_min_max_current(required_current, phases) if required_current != required_current_prev and msg is None: msg = ("Die Einstellungen in dem Ladepunkt-Profil beschränken den Strom auf " - f"maximal {required_current} A.") + f"maximal {round(required_current, 2)} A.") self.set_state_and_log(msg) return required_current @@ -882,6 +890,7 @@ def cp_ev_chargemode_support_phase_switch(self) -> bool: def cp_ev_support_phase_switch(self) -> bool: return (self.data.config.auto_phase_switch_hw and + self.data.get.evse_signaling != EvseSignaling.HLC and self.data.set.charging_ev_data.ev_template.data.prevent_phase_switch is False) def chargemode_support_phase_switch(self) -> bool: diff --git a/packages/control/chargepoint/chargepoint_data.py b/packages/control/chargepoint/chargepoint_data.py index 167abe1977..3950f8658b 100644 --- a/packages/control/chargepoint/chargepoint_data.py +++ b/packages/control/chargepoint/chargepoint_data.py @@ -8,6 +8,7 @@ from control.ev.ev import Ev from dataclass_utils.factories import currents_list_factory, empty_dict_factory, voltages_list_factory from helpermodules.constants import NO_ERROR +from modules.chargepoints.openwb_pro.chargepoint_module import EvseSignaling from modules.common.abstract_chargepoint import AbstractChargepoint @@ -103,7 +104,7 @@ class Get: error_timestamp: int = 0 evse_current: Optional[float] = None # kann auch zur Laufzeit geändert werden - evse_signaling: Optional[str] = None + evse_signaling: Optional[EvseSignaling] = None exported: float = 0 fault_str: str = NO_ERROR fault_state: int = 0 diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index f8914a0f13..c24fb30ef8 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -341,8 +341,7 @@ def bidi_charging(self, phases_in_use: int) -> Tuple[float, str, str, int]: if bidi != BidiState.BIDI_CAPABLE: # normales Zielladen, da Hardware kein bidirektionales Laden unterstützt - plan_data = self._find_recent_plan( - {self.data.chargemode.bidi_charging.plan.id: self.data.chargemode.bidi_charging.plan}, + plan_data = self._find_recent_plan([self.data.chargemode.bidi_charging.plan], soc, ev_template, phases, @@ -351,7 +350,8 @@ def bidi_charging(self, phase_switch_supported, charging_type, chargemode_switch_timestamp, - control_parameter) + control_parameter, + soc_request_interval_offset) if plan_data: control_parameter.current_plan = plan_data.plan.id else: diff --git a/packages/modules/chargepoints/mqtt/chargepoint_module.py b/packages/modules/chargepoints/mqtt/chargepoint_module.py index 3ece2b12c3..05bcf2dff5 100644 --- a/packages/modules/chargepoints/mqtt/chargepoint_module.py +++ b/packages/modules/chargepoints/mqtt/chargepoint_module.py @@ -79,6 +79,7 @@ def on_message(client, userdata, message): vehicle_id=received_topics.get(f"{topic_prefix}vehicle_id"), evse_current=received_topics.get(f"{topic_prefix}evse_current"), max_evse_current=received_topics.get(f"{topic_prefix}max_evse_current"), + max_discharge_power=received_topics.get(f"{topic_prefix}max_discharge_power"), evse_signaling=received_topics.get(f"{topic_prefix}evse_signaling"), ) self.store.set(chargepoint_state) diff --git a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py index 863cdd47e8..3f12958a20 100644 --- a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py +++ b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py @@ -16,6 +16,11 @@ log = logging.getLogger(__name__) +class EvseSignaling: + HLC = "HLC" + ISO15118 = "ISO15118" + FAKE_HIGHLEVEL = "fake_highlevel" + PWM = "PWM" class ChargepointModule(AbstractChargepoint): WRONG_CHARGE_STATE = "Lade-Status ist nicht aktiv, aber Strom fließt." diff --git a/packages/modules/common/store/_chargepoint.py b/packages/modules/common/store/_chargepoint.py index 160dbcda63..df4020d29a 100644 --- a/packages/modules/common/store/_chargepoint.py +++ b/packages/modules/common/store/_chargepoint.py @@ -55,6 +55,7 @@ def update(self): pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/evse_current", self.state.evse_current) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/vehicle_id", self.state.vehicle_id) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current) + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_discharge_power", self.state.max_discharge_power) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/version", self.state.version) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_branch", self.state.current_branch) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_commit", self.state.current_commit) From d5cd2f024e91e041a17727697d9928915c970eaa Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 8 Jul 2025 14:00:51 +0200 Subject: [PATCH 23/73] set zeor point to evu counter --- packages/control/algorithm/bidi_charging.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/control/algorithm/bidi_charging.py b/packages/control/algorithm/bidi_charging.py index 2a6c81cb0f..9cc6f62afb 100644 --- a/packages/control/algorithm/bidi_charging.py +++ b/packages/control/algorithm/bidi_charging.py @@ -12,7 +12,7 @@ def __init__(self): def set_bidi(self): grid_counter = data.data.counter_all_data.get_evu_counter() - log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") + log.debug(f"Nullpunktanpassung {grid_counter.data.get.power}W") zero_point_adjustment = grid_counter for mode_tuple in CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE: preferenced_cps = get_chargepoints_by_mode(mode_tuple) @@ -21,7 +21,7 @@ def set_bidi(self): f"Mode-Tuple {mode_tuple[0]} - {mode_tuple[1]} - {mode_tuple[2]}, Zähler {grid_counter.num}") while len(preferenced_cps): cp = preferenced_cps[0] - zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) + zero_point_adjustment = grid_counter.data.get.power / len(preferenced_cps) log.debug(f"Nullpunktanpassung für LP{cp.num}: verbleibende Leistung {zero_point_adjustment}W") missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / 230 for i in range(0, cp.data.get.phases_in_use)] From d621de7e8d8138389f4ea63c8fd0bccb5056b246 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 8 Jul 2025 14:14:20 +0200 Subject: [PATCH 24/73] fix --- packages/control/algorithm/bidi_charging.py | 4 ++-- packages/control/counter.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/control/algorithm/bidi_charging.py b/packages/control/algorithm/bidi_charging.py index 9cc6f62afb..2a6c81cb0f 100644 --- a/packages/control/algorithm/bidi_charging.py +++ b/packages/control/algorithm/bidi_charging.py @@ -12,7 +12,7 @@ def __init__(self): def set_bidi(self): grid_counter = data.data.counter_all_data.get_evu_counter() - log.debug(f"Nullpunktanpassung {grid_counter.data.get.power}W") + log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") zero_point_adjustment = grid_counter for mode_tuple in CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE: preferenced_cps = get_chargepoints_by_mode(mode_tuple) @@ -21,7 +21,7 @@ def set_bidi(self): f"Mode-Tuple {mode_tuple[0]} - {mode_tuple[1]} - {mode_tuple[2]}, Zähler {grid_counter.num}") while len(preferenced_cps): cp = preferenced_cps[0] - zero_point_adjustment = grid_counter.data.get.power / len(preferenced_cps) + zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) log.debug(f"Nullpunktanpassung für LP{cp.num}: verbleibende Leistung {zero_point_adjustment}W") missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / 230 for i in range(0, cp.data.get.phases_in_use)] diff --git a/packages/control/counter.py b/packages/control/counter.py index 5c2ec622c5..3199ca18ac 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -518,8 +518,9 @@ def limit_raw_power_left_to_surplus(surplus) -> None: def set_raw_surplus_power_left() -> None: - """ beim Bidi-Laden den Regelmodus rausrechnen, da sonst zum Regelmodus und nicht zum Nullpunkt geregelt wird. + """ Bei surplus power left ist auch Leistung drin, die Autos zugeteilt bekommen, aber nicht ziehen und dann wird ins Netz eingespeist. + beim Bidi-Laden den Regelmodus rausrechnen, da sonst zum Regelmodus und nicht zum Nullpunkt geregelt wird. """ grid_counter = data.data.counter_all_data.get_evu_counter() - grid_counter.data.set.surplus_power_left -= grid_counter._control_range_offset() + grid_counter.data.set.surplus_power_left = grid_counter.data.get.power * -1 log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") From ea46e9e961cba60fc2a3d28a18d15be81500b7cb Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 8 Jul 2025 14:39:41 +0200 Subject: [PATCH 25/73] fix max bidi current --- packages/control/algorithm/algorithm.py | 2 +- packages/control/algorithm/surplus_controlled.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/control/algorithm/algorithm.py b/packages/control/algorithm/algorithm.py index 319f14cb71..4c4ed46aa5 100644 --- a/packages/control/algorithm/algorithm.py +++ b/packages/control/algorithm/algorithm.py @@ -34,11 +34,11 @@ def calc_current(self) -> None: log.info("**Soll-Strom setzen**") common.reset_current_to_target_current() self.additional_current.set_additional_current() + self.surplus_controlled.set_required_current_to_max() log.info("**PV-geführten Strom setzen**") counter.limit_raw_power_left_to_surplus(self.evu_counter.calc_raw_surplus()) if self.evu_counter.data.set.surplus_power_left > 0: common.reset_current_to_target_current() - self.surplus_controlled.set_required_current_to_max() self.surplus_controlled.set_surplus_current() else: log.info("Keine Leistung für PV-geführtes Laden übrig.") diff --git a/packages/control/algorithm/surplus_controlled.py b/packages/control/algorithm/surplus_controlled.py index ff6a264e8e..d4ceadca27 100644 --- a/packages/control/algorithm/surplus_controlled.py +++ b/packages/control/algorithm/surplus_controlled.py @@ -3,7 +3,8 @@ from control import data from control.algorithm import common -from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_PV_ONLY, CONSIDERED_CHARGE_MODES_SURPLUS +from control.algorithm.chargemodes import (CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE, CONSIDERED_CHARGE_MODES_PV_ONLY, + CONSIDERED_CHARGE_MODES_SURPLUS) from control.algorithm.filter_chargepoints import (get_chargepoints_by_chargemodes, get_chargepoints_by_mode_and_counter, get_preferenced_chargepoint_charging) @@ -153,7 +154,8 @@ def phase_switch_necessary() -> bool: log.exception(f"Fehler in der PV-gesteuerten Ladung bei {cp.num}") def set_required_current_to_max(self) -> None: - for cp in get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_SURPLUS): + for cp in get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_SURPLUS + + CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE): try: charging_ev_data = cp.data.set.charging_ev_data required_currents = cp.data.control_parameter.required_currents From 5c67319d49a020d726456a1aba315749a3ceb7ba Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 8 Jul 2025 14:47:33 +0200 Subject: [PATCH 26/73] flake8 --- packages/control/algorithm/bidi_charging.py | 10 ++++++---- packages/control/chargepoint/chargepoint.py | 4 ++-- packages/control/counter.py | 3 ++- packages/control/ev/charge_template.py | 20 +++++++++---------- packages/control/ev/ev.py | 4 +++- .../openwb_pro/chargepoint_module.py | 2 ++ packages/modules/common/store/_chargepoint.py | 3 ++- .../update_values_test.py | 2 +- 8 files changed, 28 insertions(+), 20 deletions(-) diff --git a/packages/control/algorithm/bidi_charging.py b/packages/control/algorithm/bidi_charging.py index 2a6c81cb0f..17ee211c34 100644 --- a/packages/control/algorithm/bidi_charging.py +++ b/packages/control/algorithm/bidi_charging.py @@ -27,11 +27,13 @@ def set_bidi(self): 230 for i in range(0, cp.data.get.phases_in_use)] missing_currents += [0] * (3 - len(missing_currents)) if zero_point_adjustment > 0: - for index in range(0,3): - missing_currents[index] = min(cp.data.control_parameter.required_current, missing_currents[index]) + for index in range(0, 3): + missing_currents[index] = min(cp.data.control_parameter.required_current, + missing_currents[index]) else: - for index in range(0,3): - missing_currents[index] = cp.check_min_max_current(missing_currents[index], cp.data.get.phases_in_use) + for index in range(0, 3): + missing_currents[index] = cp.check_min_max_current(missing_currents[index], + cp.data.get.phases_in_use) grid_counter.update_surplus_values_left(missing_currents, cp.data.get.voltages) cp.data.set.current = missing_currents[0] log.info(f"LP{cp.num}: Stromstärke {missing_currents}A") diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 6044bee589..1cb2e93017 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -443,7 +443,7 @@ def initiate_phase_switch(self): """ try: if self.data.get.evse_signaling == EvseSignaling.HLC: - return + return evu_counter = data.data.counter_all_data.get_evu_counter() charging_ev = self.data.set.charging_ev_data # Wenn noch kein Eintrag im Protokoll erstellt wurde, wurde noch nicht geladen und die Phase kann noch @@ -502,7 +502,7 @@ def initiate_phase_switch(self): def get_phases_by_selected_chargemode(self, phases_chargemode: int) -> int: charging_ev = self.data.set.charging_ev_data if self.data.get.evse_signaling == EvseSignaling.HLC: - phases = self.data.get.phases_in_use + phases = self.data.get.phases_in_use elif ((self.data.config.auto_phase_switch_hw is False and self.data.get.charge_state) or self.data.control_parameter.failed_phase_switches > self.MAX_FAILED_PHASE_SWITCHES): # Wenn keine Umschaltung verbaut ist, die Phasenzahl nehmen, mit der geladen wird. Damit werden zB auch diff --git a/packages/control/counter.py b/packages/control/counter.py index 3199ca18ac..7348d572ce 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -518,7 +518,8 @@ def limit_raw_power_left_to_surplus(surplus) -> None: def set_raw_surplus_power_left() -> None: - """ Bei surplus power left ist auch Leistung drin, die Autos zugeteilt bekommen, aber nicht ziehen und dann wird ins Netz eingespeist. + """ Bei surplus power left ist auch Leistung drin, die Autos zugeteilt bekommen, aber nicht ziehen und dann wird + ins Netz eingespeist. beim Bidi-Laden den Regelmodus rausrechnen, da sonst zum Regelmodus und nicht zum Nullpunkt geregelt wird. """ grid_counter = data.data.counter_all_data.get_evu_counter() diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index c24fb30ef8..be97e969d9 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -342,16 +342,16 @@ def bidi_charging(self, if bidi != BidiState.BIDI_CAPABLE: # normales Zielladen, da Hardware kein bidirektionales Laden unterstützt plan_data = self._find_recent_plan([self.data.chargemode.bidi_charging.plan], - soc, - ev_template, - phases, - used_amount, - max_hw_phases, - phase_switch_supported, - charging_type, - chargemode_switch_timestamp, - control_parameter, - soc_request_interval_offset) + soc, + ev_template, + phases, + used_amount, + max_hw_phases, + phase_switch_supported, + charging_type, + chargemode_switch_timestamp, + control_parameter, + soc_request_interval_offset) if plan_data: control_parameter.current_plan = plan_data.plan.id else: diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index db5707c844..aee1808620 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -200,7 +200,9 @@ def get_required_current(self, self.data.get.soc, control_parameter, charging_type, imported_since_plugged, max_phases_hw) elif charge_template.data.chargemode.selected == "bidi_charging": if self.soc_module is None: - raise Exception("Für den Lademodis Bidi ist zwingend ein SoC-Modul erforderlich. Soll der SoC ausschließlich aus dem Fahrzeug ausgelesen werden, bitte auf manuellen SoC mit Auslesung aus dem Fahrzeug umstellen.") + raise Exception("Für den Lademodis Bidi ist zwingend ein SoC-Modul erforderlich. Soll der " + "SoC ausschließlich aus dem Fahrzeug ausgelesen werden, bitte auf " + "manuellen SoC mit Auslesung aus dem Fahrzeug umstellen.") required_current, submode, tmp_message, phases = charge_template.bidi_charging( self.data.get.soc, self.ev_template, diff --git a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py index 3f12958a20..72a9cb7418 100644 --- a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py +++ b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py @@ -16,12 +16,14 @@ log = logging.getLogger(__name__) + class EvseSignaling: HLC = "HLC" ISO15118 = "ISO15118" FAKE_HIGHLEVEL = "fake_highlevel" PWM = "PWM" + class ChargepointModule(AbstractChargepoint): WRONG_CHARGE_STATE = "Lade-Status ist nicht aktiv, aber Strom fließt." WRONG_PLUG_STATE = "Ladepunkt ist nicht angesteckt, aber es wird geladen." diff --git a/packages/modules/common/store/_chargepoint.py b/packages/modules/common/store/_chargepoint.py index df4020d29a..6d9b8c77b0 100644 --- a/packages/modules/common/store/_chargepoint.py +++ b/packages/modules/common/store/_chargepoint.py @@ -55,7 +55,8 @@ def update(self): pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/evse_current", self.state.evse_current) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/vehicle_id", self.state.vehicle_id) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current) - pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_discharge_power", self.state.max_discharge_power) + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_discharge_power", + self.state.max_discharge_power) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/version", self.state.version) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_branch", self.state.current_branch) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_commit", self.state.current_commit) diff --git a/packages/modules/internal_chargepoint_handler/update_values_test.py b/packages/modules/internal_chargepoint_handler/update_values_test.py index d4c937dee5..5b9fd6075a 100644 --- a/packages/modules/internal_chargepoint_handler/update_values_test.py +++ b/packages/modules/internal_chargepoint_handler/update_values_test.py @@ -24,7 +24,7 @@ @pytest.mark.parametrize( "old_chargepoint_state, published_topics", - [(None, 52), + [(None, 54), (OLD_CHARGEPOINT_STATE, 2)] ) From 7081e51c01d769358b65c1159b17df5122b9f7d9 Mon Sep 17 00:00:00 2001 From: BrettS <168732306+Brett-S-OWB@users.noreply.github.com> Date: Tue, 8 Jul 2025 17:15:47 +0200 Subject: [PATCH 27/73] Only display time charging plans if time charging is activated (#2523) --- .../src/components/ChargePointTimeChargingPlans.vue | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/modules/web_themes/koala/source/src/components/ChargePointTimeChargingPlans.vue b/packages/modules/web_themes/koala/source/src/components/ChargePointTimeChargingPlans.vue index 055d058e6b..e16aa4c47b 100644 --- a/packages/modules/web_themes/koala/source/src/components/ChargePointTimeChargingPlans.vue +++ b/packages/modules/web_themes/koala/source/src/components/ChargePointTimeChargingPlans.vue @@ -7,11 +7,11 @@ -
+
Termine Zeitladen:
Keine Zeitpläne vorhanden.
-
+
mqttStore.vehicleTimeChargingPlans(props.chargePointId), ); + +const timeChargingEnabled = mqttStore.chargePointConnectedVehicleTimeCharging( + props.chargePointId, +); From 5e766b5af7a5a98dd8f193e36d4d7a428ed10429 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Mon, 14 Jul 2025 14:46:31 +0200 Subject: [PATCH 49/73] pytest --- .../algorithm/integration_test/pv_charging_test.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/control/algorithm/integration_test/pv_charging_test.py b/packages/control/algorithm/integration_test/pv_charging_test.py index 2015a2d85f..c21eae69dc 100644 --- a/packages/control/algorithm/integration_test/pv_charging_test.py +++ b/packages/control/algorithm/integration_test/pv_charging_test.py @@ -133,7 +133,7 @@ def test_start_pv_delay(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatch) assert data.data.cp_data[ "cp5"].data.control_parameter.timestamp_switch_on_off == 1652683252.0 assert data.data.counter_data["counter0"].data.set.raw_power_left == 31975 - assert data.data.counter_data["counter0"].data.set.surplus_power_left == 9975.0 + assert data.data.counter_data["counter0"].data.set.surplus_power_left == -690 assert data.data.counter_data["counter0"].data.set.reserved_surplus == 9000 @@ -170,7 +170,7 @@ def test_pv_delay_expired(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatc assert data.data.cp_data[ "cp5"].data.control_parameter.timestamp_switch_on_off is None assert data.data.counter_data["counter0"].data.set.raw_power_left == 24300 - assert data.data.counter_data["counter0"].data.set.surplus_power_left == 2300.0 + assert data.data.counter_data["counter0"].data.set.surplus_power_left == -690 assert data.data.counter_data["counter0"].data.set.reserved_surplus == 0 @@ -184,7 +184,7 @@ def test_pv_delay_expired(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatc expected_current_cp4=8, expected_current_cp5=8, expected_raw_power_left=34820, - expected_surplus_power_left=5920.0, + expected_surplus_power_left=1090, expected_reserved_surplus=0, expected_released_surplus=0), ParamsSurplus(name="reduce current", @@ -196,7 +196,7 @@ def test_pv_delay_expired(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatc expected_current_cp4=7.8731884057971016, expected_current_cp5=7.8731884057971016, expected_raw_power_left=24470, - expected_surplus_power_left=-115.0, + expected_surplus_power_left=1090, expected_reserved_surplus=0, expected_released_surplus=0), ParamsSurplus(name="switch off delay for two of three charging", @@ -208,7 +208,7 @@ def test_pv_delay_expired(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatc expected_current_cp4=6, expected_current_cp5=6, expected_raw_power_left=5635, - expected_surplus_power_left=-16365.0, + expected_surplus_power_left=-8200, expected_reserved_surplus=0, expected_released_surplus=11040), ] @@ -247,7 +247,7 @@ def test_surplus(params: ParamsSurplus, all_cp_pv_charging_3p, all_cp_charging_3 expected_current_cp4=6, expected_current_cp5=6, expected_raw_power_left=17400, - expected_surplus_power_left=-4600, + expected_surplus_power_left=-690, expected_reserved_surplus=0, expected_released_surplus=0), ParamsPhaseSwitch(name="phase switch 1p->3p", @@ -261,7 +261,7 @@ def test_surplus(params: ParamsSurplus, all_cp_pv_charging_3p, all_cp_charging_3 expected_current_cp4=6, expected_current_cp5=6, expected_raw_power_left=37520.0, - expected_surplus_power_left=10460.0, + expected_surplus_power_left=3000, expected_reserved_surplus=0, expected_released_surplus=0) ] From dce631e98edd4a4e66814797edf97a05009102cb Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 11 Jul 2025 12:54:11 +0000 Subject: [PATCH 50/73] Build Web Theme: Koala --- .../{ErrorNotFound-Ci81UTWi.js => ErrorNotFound-CzRyWO0R.js} | 2 +- .../assets/{IndexPage-BgPLllLV.css => IndexPage-CZ8EYgcH.css} | 2 +- .../assets/{IndexPage-BNtuL5nB.js => IndexPage-Dx0R7lfD.js} | 4 ++-- .../web_themes/koala/web/assets/MainLayout-Cg53HLWo.css | 1 + .../web_themes/koala/web/assets/MainLayout-DDxw-kff.js | 1 + .../web_themes/koala/web/assets/MainLayout-D_XoEdvD.js | 1 - .../web_themes/koala/web/assets/MainLayout-g_PPAXMc.css | 1 - .../koala/web/assets/{index-CMMTdT_8.js => index-EKspHiQe.js} | 4 ++-- .../assets/{mqtt-store-BO4qCeJ5.js => mqtt-store-DD98gHuI.js} | 2 +- .../web_themes/koala/web/assets/store-init-DR3g0YQB.js | 1 - .../web_themes/koala/web/assets/store-init-DphRCu_b.js | 1 + .../web_themes/koala/web/assets/use-quasar-CokCDZeI.js | 1 - .../web_themes/koala/web/assets/use-quasar-uR0IoSjA.js | 1 + packages/modules/web_themes/koala/web/index.html | 2 +- 14 files changed, 12 insertions(+), 12 deletions(-) rename packages/modules/web_themes/koala/web/assets/{ErrorNotFound-Ci81UTWi.js => ErrorNotFound-CzRyWO0R.js} (82%) rename packages/modules/web_themes/koala/web/assets/{IndexPage-BgPLllLV.css => IndexPage-CZ8EYgcH.css} (99%) rename packages/modules/web_themes/koala/web/assets/{IndexPage-BNtuL5nB.js => IndexPage-Dx0R7lfD.js} (74%) create mode 100644 packages/modules/web_themes/koala/web/assets/MainLayout-Cg53HLWo.css create mode 100644 packages/modules/web_themes/koala/web/assets/MainLayout-DDxw-kff.js delete mode 100644 packages/modules/web_themes/koala/web/assets/MainLayout-D_XoEdvD.js delete mode 100644 packages/modules/web_themes/koala/web/assets/MainLayout-g_PPAXMc.css rename packages/modules/web_themes/koala/web/assets/{index-CMMTdT_8.js => index-EKspHiQe.js} (99%) rename packages/modules/web_themes/koala/web/assets/{mqtt-store-BO4qCeJ5.js => mqtt-store-DD98gHuI.js} (99%) delete mode 100644 packages/modules/web_themes/koala/web/assets/store-init-DR3g0YQB.js create mode 100644 packages/modules/web_themes/koala/web/assets/store-init-DphRCu_b.js delete mode 100644 packages/modules/web_themes/koala/web/assets/use-quasar-CokCDZeI.js create mode 100644 packages/modules/web_themes/koala/web/assets/use-quasar-uR0IoSjA.js diff --git a/packages/modules/web_themes/koala/web/assets/ErrorNotFound-Ci81UTWi.js b/packages/modules/web_themes/koala/web/assets/ErrorNotFound-CzRyWO0R.js similarity index 82% rename from packages/modules/web_themes/koala/web/assets/ErrorNotFound-Ci81UTWi.js rename to packages/modules/web_themes/koala/web/assets/ErrorNotFound-CzRyWO0R.js index 8e663aec89..bd70259893 100644 --- a/packages/modules/web_themes/koala/web/assets/ErrorNotFound-Ci81UTWi.js +++ b/packages/modules/web_themes/koala/web/assets/ErrorNotFound-CzRyWO0R.js @@ -1 +1 @@ -import{x as s,_ as n,z as a,a2 as l,a3 as o,C as u,Q as c}from"./index-CMMTdT_8.js";const d=s({name:"ErrorNotFound",__name:"ErrorNotFound",setup(r,{expose:e}){e();const t={};return Object.defineProperty(t,"__isScriptSetup",{enumerable:!1,value:!0}),t}}),p={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"};function i(r,e,t,_,f,x){return a(),l("div",p,[o("div",null,[e[0]||(e[0]=o("div",{style:{"font-size":"30vh"}},"404",-1)),e[1]||(e[1]=o("div",{class:"text-h2",style:{opacity:"0.4"}},"Oops. Nothing here...",-1)),u(c,{class:"q-mt-xl",color:"white","text-color":"blue",unelevated:"",to:"/",label:"Go Home","no-caps":""})])])}const v=n(d,[["render",i],["__file","ErrorNotFound.vue"]]);export{v as default}; +import{x as s,_ as n,z as a,a3 as l,a4 as o,C as u,Q as c}from"./index-EKspHiQe.js";const d=s({name:"ErrorNotFound",__name:"ErrorNotFound",setup(r,{expose:e}){e();const t={};return Object.defineProperty(t,"__isScriptSetup",{enumerable:!1,value:!0}),t}}),p={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"};function i(r,e,t,_,f,x){return a(),l("div",p,[o("div",null,[e[0]||(e[0]=o("div",{style:{"font-size":"30vh"}},"404",-1)),e[1]||(e[1]=o("div",{class:"text-h2",style:{opacity:"0.4"}},"Oops. Nothing here...",-1)),u(c,{class:"q-mt-xl",color:"white","text-color":"blue",unelevated:"",to:"/",label:"Go Home","no-caps":""})])])}const v=n(d,[["render",i],["__file","ErrorNotFound.vue"]]);export{v as default}; diff --git a/packages/modules/web_themes/koala/web/assets/IndexPage-BgPLllLV.css b/packages/modules/web_themes/koala/web/assets/IndexPage-CZ8EYgcH.css similarity index 99% rename from packages/modules/web_themes/koala/web/assets/IndexPage-BgPLllLV.css rename to packages/modules/web_themes/koala/web/assets/IndexPage-CZ8EYgcH.css index 310006c7b1..e4c13fa9f5 100644 --- a/packages/modules/web_themes/koala/web/assets/IndexPage-BgPLllLV.css +++ b/packages/modules/web_themes/koala/web/assets/IndexPage-CZ8EYgcH.css @@ -1 +1 @@ -.svg-container[data-v-62f971c1]{display:flex;flex-direction:column;align-items:center;width:100%;height:100%;-webkit-user-select:none;user-select:none}svg[data-v-62f971c1]{width:100%;height:100%;object-fit:contain}path[data-v-62f971c1]{fill:none;fill-rule:evenodd;stroke:#404040;stroke-width:.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;transition:stroke .5s}path.animated[data-v-62f971c1]{stroke:var(--q-white);stroke-dasharray:5;animation:dash-62f971c1 1s linear infinite}path.animatedReverse[data-v-62f971c1]{stroke:var(--q-white);stroke-dasharray:5;animation:dashReverse-62f971c1 1s linear infinite}path.animated.grid[data-v-62f971c1]{stroke:var(--q-negative)}path.animatedReverse.grid[data-v-62f971c1]{stroke:var(--q-positive)}:root path.home[data-v-62f971c1]{stroke:var(--q-grey)}.body--dark path.home[data-v-62f971c1]{stroke:var(--q-white)}path.animated.pv[data-v-62f971c1],path.animatedReverse.pv[data-v-62f971c1]{stroke:var(--q-positive)}path.animated.battery[data-v-62f971c1],path.animatedReverse.battery[data-v-62f971c1]{stroke:var(--q-warning)}path.animated.charge-point[data-v-62f971c1],path.animatedReverse.charge-point[data-v-62f971c1]{stroke:var(--q-primary)}path.animated.vehicle[data-v-62f971c1],path.animatedReverse.vehicle[data-v-62f971c1]{stroke:var(--q-accent)}circle[data-v-62f971c1]{fill:var(--q-secondary);fill-opacity:1;stroke:var(--q-grey);stroke-width:var(--7061f1f7);stroke-miterlimit:2;stroke-opacity:1}rect[data-v-62f971c1]{stroke-width:var(--7061f1f7);fill:var(--q-secondary)}:root image[data-v-62f971c1]{filter:brightness(.4)}.body--dark image[data-v-62f971c1]{filter:brightness(1)}@keyframes dash-62f971c1{0%{stroke-dashoffset:20}to{stroke-dashoffset:0}}@keyframes dashReverse-62f971c1{0%{stroke-dashoffset:0}to{stroke-dashoffset:20}}text[data-v-62f971c1]{font-size:var(--7c22ee07);line-height:1.25;font-family:Arial;fill:var(--q-white);fill-opacity:1}text .fill-success[data-v-62f971c1]{fill:var(--q-positive)}text .fill-danger[data-v-62f971c1]{fill:var(--q-negative)}text .fill-dark[data-v-62f971c1]{fill:var(--q-brown-text)}.grid text[data-v-62f971c1]{fill:var(--q-negative)}.grid circle[data-v-62f971c1],.grid rect[data-v-62f971c1]{stroke:var(--q-negative)}.grid circle[data-v-62f971c1]{fill:color-mix(in srgb,var(--q-negative) 20%,transparent)}.pv text[data-v-62f971c1]{fill:var(--q-positive)}.pv circle[data-v-62f971c1],.pv rect[data-v-62f971c1]{stroke:var(--q-positive)}.pv circle[data-v-62f971c1]{fill:color-mix(in srgb,var(--q-positive) 30%,transparent)}.battery text[data-v-62f971c1]{fill:var(--q-battery)}.battery circle[data-v-62f971c1],.battery rect[data-v-62f971c1]{stroke:var(--q-battery)}.battery circle[data-v-62f971c1]:not(.soc){fill:color-mix(in srgb,var(--q-battery) 50%,transparent)}:root .home text[data-v-62f971c1]{fill:var(--q-brown-text)}.body--dark .home text[data-v-62f971c1]{fill:var(--q-white)}.home circle[data-v-62f971c1],.home rect[data-v-62f971c1]{stroke:var(--q-flow-home-stroke)}.home circle[data-v-62f971c1]{fill:color-mix(in srgb,var(--q-brown-text) 20%,transparent)}.charge-point text[data-v-62f971c1]{fill:var(--q-primary)}.charge-point circle[data-v-62f971c1],.charge-point rect[data-v-62f971c1]{stroke:var(--q-primary)}.charge-point circle[data-v-62f971c1]{fill:color-mix(in srgb,var(--q-primary) 30%,transparent)}.background-circle[data-v-62f971c1]{fill:var(--q-secondary)!important}.vehicle text[data-v-62f971c1]{fill:var(--q-accent)}.vehicle circle[data-v-62f971c1],.vehicle rect[data-v-62f971c1]{stroke:var(--q-accent)}.vehicle circle[data-v-62f971c1]:not(.soc){fill:color-mix(in srgb,var(--q-accent) 50%,transparent)}.custom-legend-container[data-v-84b08d2c]{margin-bottom:5px;height:70px;border-radius:5px;text-align:left;width:100%}.legend-color-box[data-v-84b08d2c]{display:inline-block;width:20px;height:3px}.legend-item-hidden[data-v-84b08d2c]{opacity:.6!important;text-decoration:line-through!important}[data-v-84b08d2c] .q-item__section--avatar{min-width:5px!important;padding-right:0!important}@media (max-width: 576px){.legend-color-box[data-v-84b08d2c]{width:10px;height:2px}}.chart-container[data-v-df4fc9f6]{width:100%;height:100%;display:flex;flex-direction:column}.legend-wrapper[data-v-df4fc9f6]{flex:0 0 auto}.chart-wrapper[data-v-df4fc9f6]{flex:1;min-height:0}.carousel-height[data-v-85eaf875]{min-height:fit-content}.legend-button-text[data-v-85eaf875]{color:var(--q-carousel-control)}.carousel-slide[data-v-82f4aba3]{padding:0}.item-container[data-v-82f4aba3]{padding:.25em}.carousel-height[data-v-82f4aba3]{min-height:fit-content;height:100%}.search-field[data-v-69ac7669]{width:100%;max-width:18em}.clickable[data-v-69ac7669]{cursor:pointer}.slider-container[data-v-0e0e7cf9]{position:relative;height:40px}.current-slider[data-v-0e0e7cf9]{position:absolute;width:100%;z-index:1}.target-slider[data-v-0e0e7cf9]{position:absolute;width:100%}[data-v-674981ff] .q-btn-dropdown__arrow-container{width:0;padding:0}.flex-grow[data-v-674981ff]{flex-grow:1}.message-text[data-v-31323cae]{overflow-x:auto;overflow-y:auto}.flex-grow[data-v-ca7bfd56]{flex-grow:1}[data-v-d1d2b5c9]:root{--q-primary: #5c93d1;--q-secondary: #d2d2d7;--q-accent: #546e7a;--q-positive: #66bd7a;--q-negative: #db4f5f;--q-info: #7dc5d4;--q-warning: #d98e44;--q-background-1: #e3e3ec;--q-background-2: #eeeef3;--q-brown-text: #524f57;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #5c93d1;--q-toggle-off: #e0e0e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #ba7128;background-color:var(--q-background-1);color:var(--q-brown-text)}:root .theme-text[data-v-d1d2b5c9]{color:var(--q-brown-text)!important}:root .deselected[data-v-d1d2b5c9]{color:var(--q-grey)!important}:root .q-header[data-v-d1d2b5c9]{background-color:var(--q-background-2);color:var(--q-brown-text)}:root .q-drawer[data-v-d1d2b5c9]{background-color:var(--q-background-2)}:root .q-tab-panels[data-v-d1d2b5c9]{background-color:var(--q-background-2)}:root .q-tab[data-v-d1d2b5c9]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}:root .q-tab-icon[data-v-d1d2b5c9]{color:var(--q-primary)}:root .q-tab--active[data-v-d1d2b5c9]{background-color:#ceced3}:root .q-carousel__control .q-btn[data-v-d1d2b5c9]:before{box-shadow:none}:root .q-carousel__control .q-btn .q-icon[data-v-d1d2b5c9]{color:var(--q-primary)}:root .q-carousel__control .q-btn .q-icon[data-v-d1d2b5c9]:before{color:var(--q-primary);box-shadow:none}:root .q-carousel__slide[data-v-d1d2b5c9]{background-color:var(--q-background-2)}:root .q-card[data-v-d1d2b5c9]{background-color:var(--q-secondary)}:root .q-expansion-item__toggle-icon[data-v-d1d2b5c9]{color:var(--q-white)}:root .q-list[data-v-d1d2b5c9]{background-color:var(--q-background-2)}:root .q-toggle__thumb[data-v-d1d2b5c9]:after{background:var(--q-toggle-off)}:root .q-toggle__inner--truthy .q-toggle__thumb[data-v-d1d2b5c9]:after{background-color:currentColor}:root .white-outline-input.q-field--outlined .q-field__control[data-v-d1d2b5c9]:before{border-color:var(--q-white)!important}:root .sticky-header-table[data-v-d1d2b5c9]{height:310px}:root .sticky-header-table .q-table__top[data-v-d1d2b5c9],:root .sticky-header-table .q-table__bottom[data-v-d1d2b5c9],:root .sticky-header-table thead tr:first-child th[data-v-d1d2b5c9]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}:root .sticky-header-table thead tr th[data-v-d1d2b5c9]{position:sticky;z-index:1}:root .sticky-header-table thead tr:first-child th[data-v-d1d2b5c9]{top:0}:root .sticky-header-table.q-table--loading thead tr:last-child th[data-v-d1d2b5c9]{top:48px}:root .sticky-header-table tbody[data-v-d1d2b5c9]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-brown-text)}:root .sticky-header-table tbody tr[data-v-d1d2b5c9],:root .sticky-header-table .q-table__middle[data-v-d1d2b5c9],:root .sticky-header-table .q-table__grid-content .q-virtual-scroll .q-virtual-scroll--vertical scroll[data-v-d1d2b5c9]{background-color:var(--q-secondary)}:root .sticky-header-table tbody tr[data-v-d1d2b5c9]:hover{background-color:#0000000d}:root .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-d1d2b5c9]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}:root .q-table th[data-v-d1d2b5c9],:root .q-table td[data-v-d1d2b5c9]{padding:2px 6px!important}:root .q-table th[data-v-d1d2b5c9]:first-child,:root .q-table td[data-v-d1d2b5c9]:first-child{padding-left:12px!important}:root .q-table th[data-v-d1d2b5c9]:last-child,:root .q-table td[data-v-d1d2b5c9]:last-child{padding-right:12px!important}:root .q-scrollarea[data-v-d1d2b5c9]{border:1px solid var(--q-secondary)!important}.body--dark[data-v-d1d2b5c9]{--q-primary: #3874db;--q-secondary: #28293d;--q-accent: #546e7a;--q-positive: #3e8f5e;--q-negative: #c54d57;--q-info: #4b89aa;--q-warning: #d98e44;--q-background-1: #030627;--q-background-2: #010322;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #8b8f9f;--q-toggle-off: #e0e0e0;--q-list: rgb(40, 42, 62);--q-tab-icon: #d7d9e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #d98e44;background-color:#000;color:var(--q-white)}.body--dark .theme-text[data-v-d1d2b5c9]{color:var(--q-white)!important}.body--dark .deselected[data-v-d1d2b5c9]{color:var(--q-grey)!important}.body--dark .q-header[data-v-d1d2b5c9]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-drawer[data-v-d1d2b5c9]{background-color:var(--q-list)}.body--dark .q-tab .q-icon[data-v-d1d2b5c9]{color:var(--q-tab-icon)!important}.body--dark .q-tab-panels[data-v-d1d2b5c9]{background-color:var(--q-background-2)}.body--dark .q-tab[data-v-d1d2b5c9]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}.body--dark .q-tab--active[data-v-d1d2b5c9]{background-color:#383a56}.body--dark .q-carousel__control .q-btn[data-v-d1d2b5c9]:before{box-shadow:none}.body--dark .q-carousel__control .q-btn .q-icon[data-v-d1d2b5c9]{color:var(--q-carousel-control)}.body--dark .q-carousel__control .q-btn .q-icon[data-v-d1d2b5c9]:before{color:var(--q-carousel-control);box-shadow:none}.body--dark .q-carousel__slide[data-v-d1d2b5c9]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-card[data-v-d1d2b5c9]{background-color:var(--q-secondary);color:var(--q-white)}.body--dark .q-field__label[data-v-d1d2b5c9]{color:var(--q-white)}.body--dark .q-field__control .q-field__native[data-v-d1d2b5c9]::-webkit-calendar-picker-indicator{filter:invert(1)}.body--dark .q-placeholder[data-v-d1d2b5c9]{color:var(--q-white)}.body--dark .q-list[data-v-d1d2b5c9]{background-color:var(--q-list)}.body--dark .q-menu .q-item__section[data-v-d1d2b5c9]{color:var(--q-white)!important}.body--dark .q-toggle__thumb[data-v-d1d2b5c9]:after{background:var(--q-toggle-off)}.body--dark .q-toggle__inner--truthy .q-toggle__thumb[data-v-d1d2b5c9]:after{background-color:currentColor}.body--dark .sticky-header-table[data-v-d1d2b5c9]{height:310px}.body--dark .sticky-header-table .q-table__top[data-v-d1d2b5c9],.body--dark .sticky-header-table .q-table__bottom[data-v-d1d2b5c9],.body--dark .sticky-header-table thead tr:first-child th[data-v-d1d2b5c9]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}.body--dark .sticky-header-table thead tr th[data-v-d1d2b5c9]{position:sticky;z-index:1}.body--dark .sticky-header-table thead tr:first-child th[data-v-d1d2b5c9]{top:0}.body--dark .sticky-header-table.q-table--loading thead tr:last-child th[data-v-d1d2b5c9]{top:48px}.body--dark .sticky-header-table tbody[data-v-d1d2b5c9]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-white)}.body--dark .sticky-header-table tbody tr[data-v-d1d2b5c9],.body--dark .sticky-header-table .q-table__middle[data-v-d1d2b5c9],.body--dark .sticky-header-table .q-table__grid-content[data-v-d1d2b5c9]{background-color:var(--q-secondary)}.body--dark .sticky-header-table tbody tr[data-v-d1d2b5c9]:hover{background-color:#ffffff12}.body--dark .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-d1d2b5c9]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}.body--dark .q-scrollarea[data-v-d1d2b5c9]{border:1px solid var(--q-secondary)!important}.pending[data-v-d1d2b5c9]{color:#f44336}.flex-grow[data-v-d1d2b5c9]{flex-grow:1}.q-btn-group .q-btn[data-v-f45a6b19]{min-width:100px!important}body.mobile .q-btn-group .q-btn[data-v-f45a6b19]{padding:4px 8px;font-size:12px!important;min-height:30px}.chartContainer[data-v-9992330e]{width:100%;min-height:200px;height:min(50vh,300px);padding:.5em 0}.full-width[data-v-ddb41880]{width:100%}.plan-name[data-v-ddb41880]{font-weight:700}.plan-details[data-v-ddb41880]{display:flex;justify-content:center}.plan-details>div[data-v-ddb41880]{display:flex;align-items:center}.plan-details>div[data-v-ddb41880]:not(:last-child){margin-right:.5em}body.mobile .height[data-v-ddb41880]{height:2.5em}.full-width[data-v-1b9699bd],.full-width[data-v-e575064c]{width:100%}.plan-name[data-v-e575064c]{font-weight:700}.plan-details[data-v-e575064c]{display:flex;justify-content:center}.plan-details>div[data-v-e575064c]{display:flex;align-items:center}.plan-details>div[data-v-e575064c]:not(:last-child){margin-right:.5em}body.mobile .height[data-v-e575064c]{height:2.5em}.full-width[data-v-c5936aa3]{width:100%}.cp-power[data-v-680da291]{white-space:nowrap}[data-v-a81697eb]:root{--q-primary: #5c93d1;--q-secondary: #d2d2d7;--q-accent: #546e7a;--q-positive: #66bd7a;--q-negative: #db4f5f;--q-info: #7dc5d4;--q-warning: #d98e44;--q-background-1: #e3e3ec;--q-background-2: #eeeef3;--q-brown-text: #524f57;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #5c93d1;--q-toggle-off: #e0e0e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #ba7128;background-color:var(--q-background-1);color:var(--q-brown-text)}:root .theme-text[data-v-a81697eb]{color:var(--q-brown-text)!important}:root .deselected[data-v-a81697eb]{color:var(--q-grey)!important}:root .q-header[data-v-a81697eb]{background-color:var(--q-background-2);color:var(--q-brown-text)}:root .q-drawer[data-v-a81697eb]{background-color:var(--q-background-2)}:root .q-tab-panels[data-v-a81697eb]{background-color:var(--q-background-2)}:root .q-tab[data-v-a81697eb]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}:root .q-tab-icon[data-v-a81697eb]{color:var(--q-primary)}:root .q-tab--active[data-v-a81697eb]{background-color:#ceced3}:root .q-carousel__control .q-btn[data-v-a81697eb]:before{box-shadow:none}:root .q-carousel__control .q-btn .q-icon[data-v-a81697eb]{color:var(--q-primary)}:root .q-carousel__control .q-btn .q-icon[data-v-a81697eb]:before{color:var(--q-primary);box-shadow:none}:root .q-carousel__slide[data-v-a81697eb]{background-color:var(--q-background-2)}:root .q-card[data-v-a81697eb]{background-color:var(--q-secondary)}:root .q-expansion-item__toggle-icon[data-v-a81697eb]{color:var(--q-white)}:root .q-list[data-v-a81697eb]{background-color:var(--q-background-2)}:root .q-toggle__thumb[data-v-a81697eb]:after{background:var(--q-toggle-off)}:root .q-toggle__inner--truthy .q-toggle__thumb[data-v-a81697eb]:after{background-color:currentColor}:root .white-outline-input.q-field--outlined .q-field__control[data-v-a81697eb]:before{border-color:var(--q-white)!important}:root .sticky-header-table[data-v-a81697eb]{height:310px}:root .sticky-header-table .q-table__top[data-v-a81697eb],:root .sticky-header-table .q-table__bottom[data-v-a81697eb],:root .sticky-header-table thead tr:first-child th[data-v-a81697eb]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}:root .sticky-header-table thead tr th[data-v-a81697eb]{position:sticky;z-index:1}:root .sticky-header-table thead tr:first-child th[data-v-a81697eb]{top:0}:root .sticky-header-table.q-table--loading thead tr:last-child th[data-v-a81697eb]{top:48px}:root .sticky-header-table tbody[data-v-a81697eb]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-brown-text)}:root .sticky-header-table tbody tr[data-v-a81697eb],:root .sticky-header-table .q-table__middle[data-v-a81697eb],:root .sticky-header-table .q-table__grid-content .q-virtual-scroll .q-virtual-scroll--vertical scroll[data-v-a81697eb]{background-color:var(--q-secondary)}:root .sticky-header-table tbody tr[data-v-a81697eb]:hover{background-color:#0000000d}:root .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-a81697eb]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}:root .q-table th[data-v-a81697eb],:root .q-table td[data-v-a81697eb]{padding:2px 6px!important}:root .q-table th[data-v-a81697eb]:first-child,:root .q-table td[data-v-a81697eb]:first-child{padding-left:12px!important}:root .q-table th[data-v-a81697eb]:last-child,:root .q-table td[data-v-a81697eb]:last-child{padding-right:12px!important}:root .q-scrollarea[data-v-a81697eb]{border:1px solid var(--q-secondary)!important}.body--dark[data-v-a81697eb]{--q-primary: #3874db;--q-secondary: #28293d;--q-accent: #546e7a;--q-positive: #3e8f5e;--q-negative: #c54d57;--q-info: #4b89aa;--q-warning: #d98e44;--q-background-1: #030627;--q-background-2: #010322;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #8b8f9f;--q-toggle-off: #e0e0e0;--q-list: rgb(40, 42, 62);--q-tab-icon: #d7d9e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #d98e44;background-color:#000;color:var(--q-white)}.body--dark .theme-text[data-v-a81697eb]{color:var(--q-white)!important}.body--dark .deselected[data-v-a81697eb]{color:var(--q-grey)!important}.body--dark .q-header[data-v-a81697eb]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-drawer[data-v-a81697eb]{background-color:var(--q-list)}.body--dark .q-tab .q-icon[data-v-a81697eb]{color:var(--q-tab-icon)!important}.body--dark .q-tab-panels[data-v-a81697eb]{background-color:var(--q-background-2)}.body--dark .q-tab[data-v-a81697eb]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}.body--dark .q-tab--active[data-v-a81697eb]{background-color:#383a56}.body--dark .q-carousel__control .q-btn[data-v-a81697eb]:before{box-shadow:none}.body--dark .q-carousel__control .q-btn .q-icon[data-v-a81697eb]{color:var(--q-carousel-control)}.body--dark .q-carousel__control .q-btn .q-icon[data-v-a81697eb]:before{color:var(--q-carousel-control);box-shadow:none}.body--dark .q-carousel__slide[data-v-a81697eb]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-card[data-v-a81697eb]{background-color:var(--q-secondary);color:var(--q-white)}.body--dark .q-field__label[data-v-a81697eb]{color:var(--q-white)}.body--dark .q-field__control .q-field__native[data-v-a81697eb]::-webkit-calendar-picker-indicator{filter:invert(1)}.body--dark .q-placeholder[data-v-a81697eb]{color:var(--q-white)}.body--dark .q-list[data-v-a81697eb]{background-color:var(--q-list)}.body--dark .q-menu .q-item__section[data-v-a81697eb]{color:var(--q-white)!important}.body--dark .q-toggle__thumb[data-v-a81697eb]:after{background:var(--q-toggle-off)}.body--dark .q-toggle__inner--truthy .q-toggle__thumb[data-v-a81697eb]:after{background-color:currentColor}.body--dark .sticky-header-table[data-v-a81697eb]{height:310px}.body--dark .sticky-header-table .q-table__top[data-v-a81697eb],.body--dark .sticky-header-table .q-table__bottom[data-v-a81697eb],.body--dark .sticky-header-table thead tr:first-child th[data-v-a81697eb]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}.body--dark .sticky-header-table thead tr th[data-v-a81697eb]{position:sticky;z-index:1}.body--dark .sticky-header-table thead tr:first-child th[data-v-a81697eb]{top:0}.body--dark .sticky-header-table.q-table--loading thead tr:last-child th[data-v-a81697eb]{top:48px}.body--dark .sticky-header-table tbody[data-v-a81697eb]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-white)}.body--dark .sticky-header-table tbody tr[data-v-a81697eb],.body--dark .sticky-header-table .q-table__middle[data-v-a81697eb],.body--dark .sticky-header-table .q-table__grid-content[data-v-a81697eb]{background-color:var(--q-secondary)}.body--dark .sticky-header-table tbody tr[data-v-a81697eb]:hover{background-color:#ffffff12}.body--dark .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-a81697eb]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}.body--dark .q-scrollarea[data-v-a81697eb]{border:1px solid var(--q-secondary)!important}.card-width[data-v-a81697eb]{width:22em}.dialog-content[data-v-a2485117]{width:auto;max-width:24em}.close-button[data-v-a2485117]{position:absolute;bottom:.4em;right:.4em;z-index:1;background:transparent}.card-footer[data-v-a2485117]{height:1.9em}.card-width[data-v-ec5579eb]{width:22em}[data-v-34ff7409]:root{--q-primary: #5c93d1;--q-secondary: #d2d2d7;--q-accent: #546e7a;--q-positive: #66bd7a;--q-negative: #db4f5f;--q-info: #7dc5d4;--q-warning: #d98e44;--q-background-1: #e3e3ec;--q-background-2: #eeeef3;--q-brown-text: #524f57;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #5c93d1;--q-toggle-off: #e0e0e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #ba7128;background-color:var(--q-background-1);color:var(--q-brown-text)}:root .theme-text[data-v-34ff7409]{color:var(--q-brown-text)!important}:root .deselected[data-v-34ff7409]{color:var(--q-grey)!important}:root .q-header[data-v-34ff7409]{background-color:var(--q-background-2);color:var(--q-brown-text)}:root .q-drawer[data-v-34ff7409]{background-color:var(--q-background-2)}:root .q-tab-panels[data-v-34ff7409]{background-color:var(--q-background-2)}:root .q-tab[data-v-34ff7409]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}:root .q-tab-icon[data-v-34ff7409]{color:var(--q-primary)}:root .q-tab--active[data-v-34ff7409]{background-color:#ceced3}:root .q-carousel__control .q-btn[data-v-34ff7409]:before{box-shadow:none}:root .q-carousel__control .q-btn .q-icon[data-v-34ff7409]{color:var(--q-primary)}:root .q-carousel__control .q-btn .q-icon[data-v-34ff7409]:before{color:var(--q-primary);box-shadow:none}:root .q-carousel__slide[data-v-34ff7409]{background-color:var(--q-background-2)}:root .q-card[data-v-34ff7409]{background-color:var(--q-secondary)}:root .q-expansion-item__toggle-icon[data-v-34ff7409]{color:var(--q-white)}:root .q-list[data-v-34ff7409]{background-color:var(--q-background-2)}:root .q-toggle__thumb[data-v-34ff7409]:after{background:var(--q-toggle-off)}:root .q-toggle__inner--truthy .q-toggle__thumb[data-v-34ff7409]:after{background-color:currentColor}:root .white-outline-input.q-field--outlined .q-field__control[data-v-34ff7409]:before{border-color:var(--q-white)!important}:root .sticky-header-table[data-v-34ff7409]{height:310px}:root .sticky-header-table .q-table__top[data-v-34ff7409],:root .sticky-header-table .q-table__bottom[data-v-34ff7409],:root .sticky-header-table thead tr:first-child th[data-v-34ff7409]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}:root .sticky-header-table thead tr th[data-v-34ff7409]{position:sticky;z-index:1}:root .sticky-header-table thead tr:first-child th[data-v-34ff7409]{top:0}:root .sticky-header-table.q-table--loading thead tr:last-child th[data-v-34ff7409]{top:48px}:root .sticky-header-table tbody[data-v-34ff7409]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-brown-text)}:root .sticky-header-table tbody tr[data-v-34ff7409],:root .sticky-header-table .q-table__middle[data-v-34ff7409],:root .sticky-header-table .q-table__grid-content .q-virtual-scroll .q-virtual-scroll--vertical scroll[data-v-34ff7409]{background-color:var(--q-secondary)}:root .sticky-header-table tbody tr[data-v-34ff7409]:hover{background-color:#0000000d}:root .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-34ff7409]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}:root .q-table th[data-v-34ff7409],:root .q-table td[data-v-34ff7409]{padding:2px 6px!important}:root .q-table th[data-v-34ff7409]:first-child,:root .q-table td[data-v-34ff7409]:first-child{padding-left:12px!important}:root .q-table th[data-v-34ff7409]:last-child,:root .q-table td[data-v-34ff7409]:last-child{padding-right:12px!important}:root .q-scrollarea[data-v-34ff7409]{border:1px solid var(--q-secondary)!important}.body--dark[data-v-34ff7409]{--q-primary: #3874db;--q-secondary: #28293d;--q-accent: #546e7a;--q-positive: #3e8f5e;--q-negative: #c54d57;--q-info: #4b89aa;--q-warning: #d98e44;--q-background-1: #030627;--q-background-2: #010322;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #8b8f9f;--q-toggle-off: #e0e0e0;--q-list: rgb(40, 42, 62);--q-tab-icon: #d7d9e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #d98e44;background-color:#000;color:var(--q-white)}.body--dark .theme-text[data-v-34ff7409]{color:var(--q-white)!important}.body--dark .deselected[data-v-34ff7409]{color:var(--q-grey)!important}.body--dark .q-header[data-v-34ff7409]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-drawer[data-v-34ff7409]{background-color:var(--q-list)}.body--dark .q-tab .q-icon[data-v-34ff7409]{color:var(--q-tab-icon)!important}.body--dark .q-tab-panels[data-v-34ff7409]{background-color:var(--q-background-2)}.body--dark .q-tab[data-v-34ff7409]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}.body--dark .q-tab--active[data-v-34ff7409]{background-color:#383a56}.body--dark .q-carousel__control .q-btn[data-v-34ff7409]:before{box-shadow:none}.body--dark .q-carousel__control .q-btn .q-icon[data-v-34ff7409]{color:var(--q-carousel-control)}.body--dark .q-carousel__control .q-btn .q-icon[data-v-34ff7409]:before{color:var(--q-carousel-control);box-shadow:none}.body--dark .q-carousel__slide[data-v-34ff7409]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-card[data-v-34ff7409]{background-color:var(--q-secondary);color:var(--q-white)}.body--dark .q-field__label[data-v-34ff7409]{color:var(--q-white)}.body--dark .q-field__control .q-field__native[data-v-34ff7409]::-webkit-calendar-picker-indicator{filter:invert(1)}.body--dark .q-placeholder[data-v-34ff7409]{color:var(--q-white)}.body--dark .q-list[data-v-34ff7409]{background-color:var(--q-list)}.body--dark .q-menu .q-item__section[data-v-34ff7409]{color:var(--q-white)!important}.body--dark .q-toggle__thumb[data-v-34ff7409]:after{background:var(--q-toggle-off)}.body--dark .q-toggle__inner--truthy .q-toggle__thumb[data-v-34ff7409]:after{background-color:currentColor}.body--dark .sticky-header-table[data-v-34ff7409]{height:310px}.body--dark .sticky-header-table .q-table__top[data-v-34ff7409],.body--dark .sticky-header-table .q-table__bottom[data-v-34ff7409],.body--dark .sticky-header-table thead tr:first-child th[data-v-34ff7409]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}.body--dark .sticky-header-table thead tr th[data-v-34ff7409]{position:sticky;z-index:1}.body--dark .sticky-header-table thead tr:first-child th[data-v-34ff7409]{top:0}.body--dark .sticky-header-table.q-table--loading thead tr:last-child th[data-v-34ff7409]{top:48px}.body--dark .sticky-header-table tbody[data-v-34ff7409]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-white)}.body--dark .sticky-header-table tbody tr[data-v-34ff7409],.body--dark .sticky-header-table .q-table__middle[data-v-34ff7409],.body--dark .sticky-header-table .q-table__grid-content[data-v-34ff7409]{background-color:var(--q-secondary)}.body--dark .sticky-header-table tbody tr[data-v-34ff7409]:hover{background-color:#ffffff12}.body--dark .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-34ff7409]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}.body--dark .q-scrollarea[data-v-34ff7409]{border:1px solid var(--q-secondary)!important}.card-width[data-v-34ff7409]{width:22em}.slider-container[data-v-34ff7409]{position:relative;height:40px}.dialog-content[data-v-16daa238]{width:auto;max-width:24em}.close-button[data-v-16daa238]{position:absolute;bottom:.4em;right:.4em;z-index:1;background:transparent}.card-footer[data-v-16daa238]{height:1.9em}.chart-section[data-v-c7129eb4]{height:40vh} +.svg-container[data-v-62f971c1]{display:flex;flex-direction:column;align-items:center;width:100%;height:100%;-webkit-user-select:none;user-select:none}svg[data-v-62f971c1]{width:100%;height:100%;object-fit:contain}path[data-v-62f971c1]{fill:none;fill-rule:evenodd;stroke:#404040;stroke-width:.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;transition:stroke .5s}path.animated[data-v-62f971c1]{stroke:var(--q-white);stroke-dasharray:5;animation:dash-62f971c1 1s linear infinite}path.animatedReverse[data-v-62f971c1]{stroke:var(--q-white);stroke-dasharray:5;animation:dashReverse-62f971c1 1s linear infinite}path.animated.grid[data-v-62f971c1]{stroke:var(--q-negative)}path.animatedReverse.grid[data-v-62f971c1]{stroke:var(--q-positive)}:root path.home[data-v-62f971c1]{stroke:var(--q-grey)}.body--dark path.home[data-v-62f971c1]{stroke:var(--q-white)}path.animated.pv[data-v-62f971c1],path.animatedReverse.pv[data-v-62f971c1]{stroke:var(--q-positive)}path.animated.battery[data-v-62f971c1],path.animatedReverse.battery[data-v-62f971c1]{stroke:var(--q-warning)}path.animated.charge-point[data-v-62f971c1],path.animatedReverse.charge-point[data-v-62f971c1]{stroke:var(--q-primary)}path.animated.vehicle[data-v-62f971c1],path.animatedReverse.vehicle[data-v-62f971c1]{stroke:var(--q-accent)}circle[data-v-62f971c1]{fill:var(--q-secondary);fill-opacity:1;stroke:var(--q-grey);stroke-width:var(--7061f1f7);stroke-miterlimit:2;stroke-opacity:1}rect[data-v-62f971c1]{stroke-width:var(--7061f1f7);fill:var(--q-secondary)}:root image[data-v-62f971c1]{filter:brightness(.4)}.body--dark image[data-v-62f971c1]{filter:brightness(1)}@keyframes dash-62f971c1{0%{stroke-dashoffset:20}to{stroke-dashoffset:0}}@keyframes dashReverse-62f971c1{0%{stroke-dashoffset:0}to{stroke-dashoffset:20}}text[data-v-62f971c1]{font-size:var(--7c22ee07);line-height:1.25;font-family:Arial;fill:var(--q-white);fill-opacity:1}text .fill-success[data-v-62f971c1]{fill:var(--q-positive)}text .fill-danger[data-v-62f971c1]{fill:var(--q-negative)}text .fill-dark[data-v-62f971c1]{fill:var(--q-brown-text)}.grid text[data-v-62f971c1]{fill:var(--q-negative)}.grid circle[data-v-62f971c1],.grid rect[data-v-62f971c1]{stroke:var(--q-negative)}.grid circle[data-v-62f971c1]{fill:color-mix(in srgb,var(--q-negative) 20%,transparent)}.pv text[data-v-62f971c1]{fill:var(--q-positive)}.pv circle[data-v-62f971c1],.pv rect[data-v-62f971c1]{stroke:var(--q-positive)}.pv circle[data-v-62f971c1]{fill:color-mix(in srgb,var(--q-positive) 30%,transparent)}.battery text[data-v-62f971c1]{fill:var(--q-battery)}.battery circle[data-v-62f971c1],.battery rect[data-v-62f971c1]{stroke:var(--q-battery)}.battery circle[data-v-62f971c1]:not(.soc){fill:color-mix(in srgb,var(--q-battery) 50%,transparent)}:root .home text[data-v-62f971c1]{fill:var(--q-brown-text)}.body--dark .home text[data-v-62f971c1]{fill:var(--q-white)}.home circle[data-v-62f971c1],.home rect[data-v-62f971c1]{stroke:var(--q-flow-home-stroke)}.home circle[data-v-62f971c1]{fill:color-mix(in srgb,var(--q-brown-text) 20%,transparent)}.charge-point text[data-v-62f971c1]{fill:var(--q-primary)}.charge-point circle[data-v-62f971c1],.charge-point rect[data-v-62f971c1]{stroke:var(--q-primary)}.charge-point circle[data-v-62f971c1]{fill:color-mix(in srgb,var(--q-primary) 30%,transparent)}.background-circle[data-v-62f971c1]{fill:var(--q-secondary)!important}.vehicle text[data-v-62f971c1]{fill:var(--q-accent)}.vehicle circle[data-v-62f971c1],.vehicle rect[data-v-62f971c1]{stroke:var(--q-accent)}.vehicle circle[data-v-62f971c1]:not(.soc){fill:color-mix(in srgb,var(--q-accent) 50%,transparent)}.custom-legend-container[data-v-84b08d2c]{margin-bottom:5px;height:70px;border-radius:5px;text-align:left;width:100%}.legend-color-box[data-v-84b08d2c]{display:inline-block;width:20px;height:3px}.legend-item-hidden[data-v-84b08d2c]{opacity:.6!important;text-decoration:line-through!important}[data-v-84b08d2c] .q-item__section--avatar{min-width:5px!important;padding-right:0!important}@media (max-width: 576px){.legend-color-box[data-v-84b08d2c]{width:10px;height:2px}}.chart-container[data-v-df4fc9f6]{width:100%;height:100%;display:flex;flex-direction:column}.legend-wrapper[data-v-df4fc9f6]{flex:0 0 auto}.chart-wrapper[data-v-df4fc9f6]{flex:1;min-height:0}.carousel-height[data-v-85eaf875]{min-height:fit-content}.legend-button-text[data-v-85eaf875]{color:var(--q-carousel-control)}.carousel-slide[data-v-a4732b71]{padding:0}.item-container[data-v-a4732b71]{padding:.25em}.carousel-height[data-v-a4732b71]{min-height:fit-content;height:100%}.search-field[data-v-69ac7669]{width:100%;max-width:18em}.clickable[data-v-69ac7669]{cursor:pointer}.slider-container[data-v-0e0e7cf9]{position:relative;height:40px}.current-slider[data-v-0e0e7cf9]{position:absolute;width:100%;z-index:1}.target-slider[data-v-0e0e7cf9]{position:absolute;width:100%}[data-v-674981ff] .q-btn-dropdown__arrow-container{width:0;padding:0}.flex-grow[data-v-674981ff]{flex-grow:1}.message-text[data-v-31323cae]{overflow-x:auto;overflow-y:auto}.flex-grow[data-v-ca7bfd56]{flex-grow:1}[data-v-d1d2b5c9]:root{--q-primary: #5c93d1;--q-secondary: #d2d2d7;--q-accent: #546e7a;--q-positive: #66bd7a;--q-negative: #db4f5f;--q-info: #7dc5d4;--q-warning: #d98e44;--q-background-1: #e3e3ec;--q-background-2: #eeeef3;--q-brown-text: #524f57;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #5c93d1;--q-toggle-off: #e0e0e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #ba7128;background-color:var(--q-background-1);color:var(--q-brown-text)}:root .theme-text[data-v-d1d2b5c9]{color:var(--q-brown-text)!important}:root .deselected[data-v-d1d2b5c9]{color:var(--q-grey)!important}:root .q-header[data-v-d1d2b5c9]{background-color:var(--q-background-2);color:var(--q-brown-text)}:root .q-drawer[data-v-d1d2b5c9]{background-color:var(--q-background-2)}:root .q-tab-panels[data-v-d1d2b5c9]{background-color:var(--q-background-2)}:root .q-tab[data-v-d1d2b5c9]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}:root .q-tab-icon[data-v-d1d2b5c9]{color:var(--q-primary)}:root .q-tab--active[data-v-d1d2b5c9]{background-color:#ceced3}:root .q-carousel__control .q-btn[data-v-d1d2b5c9]:before{box-shadow:none}:root .q-carousel__control .q-btn .q-icon[data-v-d1d2b5c9]{color:var(--q-primary)}:root .q-carousel__control .q-btn .q-icon[data-v-d1d2b5c9]:before{color:var(--q-primary);box-shadow:none}:root .q-carousel__slide[data-v-d1d2b5c9]{background-color:var(--q-background-2)}:root .q-card[data-v-d1d2b5c9]{background-color:var(--q-secondary)}:root .q-expansion-item__toggle-icon[data-v-d1d2b5c9]{color:var(--q-white)}:root .q-list[data-v-d1d2b5c9]{background-color:var(--q-background-2)}:root .q-toggle__thumb[data-v-d1d2b5c9]:after{background:var(--q-toggle-off)}:root .q-toggle__inner--truthy .q-toggle__thumb[data-v-d1d2b5c9]:after{background-color:currentColor}:root .white-outline-input.q-field--outlined .q-field__control[data-v-d1d2b5c9]:before{border-color:var(--q-white)!important}:root .sticky-header-table[data-v-d1d2b5c9]{height:310px}:root .sticky-header-table .q-table__top[data-v-d1d2b5c9],:root .sticky-header-table .q-table__bottom[data-v-d1d2b5c9],:root .sticky-header-table thead tr:first-child th[data-v-d1d2b5c9]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}:root .sticky-header-table thead tr th[data-v-d1d2b5c9]{position:sticky;z-index:1}:root .sticky-header-table thead tr:first-child th[data-v-d1d2b5c9]{top:0}:root .sticky-header-table.q-table--loading thead tr:last-child th[data-v-d1d2b5c9]{top:48px}:root .sticky-header-table tbody[data-v-d1d2b5c9]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-brown-text)}:root .sticky-header-table tbody tr[data-v-d1d2b5c9],:root .sticky-header-table .q-table__middle[data-v-d1d2b5c9],:root .sticky-header-table .q-table__grid-content .q-virtual-scroll .q-virtual-scroll--vertical scroll[data-v-d1d2b5c9]{background-color:var(--q-secondary)}:root .sticky-header-table tbody tr[data-v-d1d2b5c9]:hover{background-color:#0000000d}:root .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-d1d2b5c9]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}:root .q-table th[data-v-d1d2b5c9],:root .q-table td[data-v-d1d2b5c9]{padding:2px 6px!important}:root .q-table th[data-v-d1d2b5c9]:first-child,:root .q-table td[data-v-d1d2b5c9]:first-child{padding-left:12px!important}:root .q-table th[data-v-d1d2b5c9]:last-child,:root .q-table td[data-v-d1d2b5c9]:last-child{padding-right:12px!important}:root .q-scrollarea[data-v-d1d2b5c9]{border:1px solid var(--q-secondary)!important}.body--dark[data-v-d1d2b5c9]{--q-primary: #3874db;--q-secondary: #28293d;--q-accent: #546e7a;--q-positive: #3e8f5e;--q-negative: #c54d57;--q-info: #4b89aa;--q-warning: #d98e44;--q-background-1: #030627;--q-background-2: #010322;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #8b8f9f;--q-toggle-off: #e0e0e0;--q-list: rgb(40, 42, 62);--q-tab-icon: #d7d9e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #d98e44;background-color:#000;color:var(--q-white)}.body--dark .theme-text[data-v-d1d2b5c9]{color:var(--q-white)!important}.body--dark .deselected[data-v-d1d2b5c9]{color:var(--q-grey)!important}.body--dark .q-header[data-v-d1d2b5c9]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-drawer[data-v-d1d2b5c9]{background-color:var(--q-list)}.body--dark .q-tab .q-icon[data-v-d1d2b5c9]{color:var(--q-tab-icon)!important}.body--dark .q-tab-panels[data-v-d1d2b5c9]{background-color:var(--q-background-2)}.body--dark .q-tab[data-v-d1d2b5c9]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}.body--dark .q-tab--active[data-v-d1d2b5c9]{background-color:#383a56}.body--dark .q-carousel__control .q-btn[data-v-d1d2b5c9]:before{box-shadow:none}.body--dark .q-carousel__control .q-btn .q-icon[data-v-d1d2b5c9]{color:var(--q-carousel-control)}.body--dark .q-carousel__control .q-btn .q-icon[data-v-d1d2b5c9]:before{color:var(--q-carousel-control);box-shadow:none}.body--dark .q-carousel__slide[data-v-d1d2b5c9]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-card[data-v-d1d2b5c9]{background-color:var(--q-secondary);color:var(--q-white)}.body--dark .q-field__label[data-v-d1d2b5c9]{color:var(--q-white)}.body--dark .q-field__control .q-field__native[data-v-d1d2b5c9]::-webkit-calendar-picker-indicator{filter:invert(1)}.body--dark .q-placeholder[data-v-d1d2b5c9]{color:var(--q-white)}.body--dark .q-list[data-v-d1d2b5c9]{background-color:var(--q-list)}.body--dark .q-menu .q-item__section[data-v-d1d2b5c9]{color:var(--q-white)!important}.body--dark .q-toggle__thumb[data-v-d1d2b5c9]:after{background:var(--q-toggle-off)}.body--dark .q-toggle__inner--truthy .q-toggle__thumb[data-v-d1d2b5c9]:after{background-color:currentColor}.body--dark .sticky-header-table[data-v-d1d2b5c9]{height:310px}.body--dark .sticky-header-table .q-table__top[data-v-d1d2b5c9],.body--dark .sticky-header-table .q-table__bottom[data-v-d1d2b5c9],.body--dark .sticky-header-table thead tr:first-child th[data-v-d1d2b5c9]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}.body--dark .sticky-header-table thead tr th[data-v-d1d2b5c9]{position:sticky;z-index:1}.body--dark .sticky-header-table thead tr:first-child th[data-v-d1d2b5c9]{top:0}.body--dark .sticky-header-table.q-table--loading thead tr:last-child th[data-v-d1d2b5c9]{top:48px}.body--dark .sticky-header-table tbody[data-v-d1d2b5c9]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-white)}.body--dark .sticky-header-table tbody tr[data-v-d1d2b5c9],.body--dark .sticky-header-table .q-table__middle[data-v-d1d2b5c9],.body--dark .sticky-header-table .q-table__grid-content[data-v-d1d2b5c9]{background-color:var(--q-secondary)}.body--dark .sticky-header-table tbody tr[data-v-d1d2b5c9]:hover{background-color:#ffffff12}.body--dark .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-d1d2b5c9]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}.body--dark .q-scrollarea[data-v-d1d2b5c9]{border:1px solid var(--q-secondary)!important}.pending[data-v-d1d2b5c9]{color:#f44336}.flex-grow[data-v-d1d2b5c9]{flex-grow:1}.q-btn-group .q-btn[data-v-f45a6b19]{min-width:100px!important}body.mobile .q-btn-group .q-btn[data-v-f45a6b19]{padding:4px 8px;font-size:12px!important;min-height:30px}.chartContainer[data-v-9992330e]{width:100%;min-height:200px;height:min(50vh,300px);padding:.5em 0}.full-width[data-v-ddb41880]{width:100%}.plan-name[data-v-ddb41880]{font-weight:700}.plan-details[data-v-ddb41880]{display:flex;justify-content:center}.plan-details>div[data-v-ddb41880]{display:flex;align-items:center}.plan-details>div[data-v-ddb41880]:not(:last-child){margin-right:.5em}body.mobile .height[data-v-ddb41880]{height:2.5em}.full-width[data-v-1b9699bd],.full-width[data-v-e575064c]{width:100%}.plan-name[data-v-e575064c]{font-weight:700}.plan-details[data-v-e575064c]{display:flex;justify-content:center}.plan-details>div[data-v-e575064c]{display:flex;align-items:center}.plan-details>div[data-v-e575064c]:not(:last-child){margin-right:.5em}body.mobile .height[data-v-e575064c]{height:2.5em}.full-width[data-v-c5936aa3]{width:100%}.cp-power[data-v-680da291]{white-space:nowrap}[data-v-a81697eb]:root{--q-primary: #5c93d1;--q-secondary: #d2d2d7;--q-accent: #546e7a;--q-positive: #66bd7a;--q-negative: #db4f5f;--q-info: #7dc5d4;--q-warning: #d98e44;--q-background-1: #e3e3ec;--q-background-2: #eeeef3;--q-brown-text: #524f57;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #5c93d1;--q-toggle-off: #e0e0e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #ba7128;background-color:var(--q-background-1);color:var(--q-brown-text)}:root .theme-text[data-v-a81697eb]{color:var(--q-brown-text)!important}:root .deselected[data-v-a81697eb]{color:var(--q-grey)!important}:root .q-header[data-v-a81697eb]{background-color:var(--q-background-2);color:var(--q-brown-text)}:root .q-drawer[data-v-a81697eb]{background-color:var(--q-background-2)}:root .q-tab-panels[data-v-a81697eb]{background-color:var(--q-background-2)}:root .q-tab[data-v-a81697eb]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}:root .q-tab-icon[data-v-a81697eb]{color:var(--q-primary)}:root .q-tab--active[data-v-a81697eb]{background-color:#ceced3}:root .q-carousel__control .q-btn[data-v-a81697eb]:before{box-shadow:none}:root .q-carousel__control .q-btn .q-icon[data-v-a81697eb]{color:var(--q-primary)}:root .q-carousel__control .q-btn .q-icon[data-v-a81697eb]:before{color:var(--q-primary);box-shadow:none}:root .q-carousel__slide[data-v-a81697eb]{background-color:var(--q-background-2)}:root .q-card[data-v-a81697eb]{background-color:var(--q-secondary)}:root .q-expansion-item__toggle-icon[data-v-a81697eb]{color:var(--q-white)}:root .q-list[data-v-a81697eb]{background-color:var(--q-background-2)}:root .q-toggle__thumb[data-v-a81697eb]:after{background:var(--q-toggle-off)}:root .q-toggle__inner--truthy .q-toggle__thumb[data-v-a81697eb]:after{background-color:currentColor}:root .white-outline-input.q-field--outlined .q-field__control[data-v-a81697eb]:before{border-color:var(--q-white)!important}:root .sticky-header-table[data-v-a81697eb]{height:310px}:root .sticky-header-table .q-table__top[data-v-a81697eb],:root .sticky-header-table .q-table__bottom[data-v-a81697eb],:root .sticky-header-table thead tr:first-child th[data-v-a81697eb]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}:root .sticky-header-table thead tr th[data-v-a81697eb]{position:sticky;z-index:1}:root .sticky-header-table thead tr:first-child th[data-v-a81697eb]{top:0}:root .sticky-header-table.q-table--loading thead tr:last-child th[data-v-a81697eb]{top:48px}:root .sticky-header-table tbody[data-v-a81697eb]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-brown-text)}:root .sticky-header-table tbody tr[data-v-a81697eb],:root .sticky-header-table .q-table__middle[data-v-a81697eb],:root .sticky-header-table .q-table__grid-content .q-virtual-scroll .q-virtual-scroll--vertical scroll[data-v-a81697eb]{background-color:var(--q-secondary)}:root .sticky-header-table tbody tr[data-v-a81697eb]:hover{background-color:#0000000d}:root .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-a81697eb]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}:root .q-table th[data-v-a81697eb],:root .q-table td[data-v-a81697eb]{padding:2px 6px!important}:root .q-table th[data-v-a81697eb]:first-child,:root .q-table td[data-v-a81697eb]:first-child{padding-left:12px!important}:root .q-table th[data-v-a81697eb]:last-child,:root .q-table td[data-v-a81697eb]:last-child{padding-right:12px!important}:root .q-scrollarea[data-v-a81697eb]{border:1px solid var(--q-secondary)!important}.body--dark[data-v-a81697eb]{--q-primary: #3874db;--q-secondary: #28293d;--q-accent: #546e7a;--q-positive: #3e8f5e;--q-negative: #c54d57;--q-info: #4b89aa;--q-warning: #d98e44;--q-background-1: #030627;--q-background-2: #010322;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #8b8f9f;--q-toggle-off: #e0e0e0;--q-list: rgb(40, 42, 62);--q-tab-icon: #d7d9e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #d98e44;background-color:#000;color:var(--q-white)}.body--dark .theme-text[data-v-a81697eb]{color:var(--q-white)!important}.body--dark .deselected[data-v-a81697eb]{color:var(--q-grey)!important}.body--dark .q-header[data-v-a81697eb]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-drawer[data-v-a81697eb]{background-color:var(--q-list)}.body--dark .q-tab .q-icon[data-v-a81697eb]{color:var(--q-tab-icon)!important}.body--dark .q-tab-panels[data-v-a81697eb]{background-color:var(--q-background-2)}.body--dark .q-tab[data-v-a81697eb]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}.body--dark .q-tab--active[data-v-a81697eb]{background-color:#383a56}.body--dark .q-carousel__control .q-btn[data-v-a81697eb]:before{box-shadow:none}.body--dark .q-carousel__control .q-btn .q-icon[data-v-a81697eb]{color:var(--q-carousel-control)}.body--dark .q-carousel__control .q-btn .q-icon[data-v-a81697eb]:before{color:var(--q-carousel-control);box-shadow:none}.body--dark .q-carousel__slide[data-v-a81697eb]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-card[data-v-a81697eb]{background-color:var(--q-secondary);color:var(--q-white)}.body--dark .q-field__label[data-v-a81697eb]{color:var(--q-white)}.body--dark .q-field__control .q-field__native[data-v-a81697eb]::-webkit-calendar-picker-indicator{filter:invert(1)}.body--dark .q-placeholder[data-v-a81697eb]{color:var(--q-white)}.body--dark .q-list[data-v-a81697eb]{background-color:var(--q-list)}.body--dark .q-menu .q-item__section[data-v-a81697eb]{color:var(--q-white)!important}.body--dark .q-toggle__thumb[data-v-a81697eb]:after{background:var(--q-toggle-off)}.body--dark .q-toggle__inner--truthy .q-toggle__thumb[data-v-a81697eb]:after{background-color:currentColor}.body--dark .sticky-header-table[data-v-a81697eb]{height:310px}.body--dark .sticky-header-table .q-table__top[data-v-a81697eb],.body--dark .sticky-header-table .q-table__bottom[data-v-a81697eb],.body--dark .sticky-header-table thead tr:first-child th[data-v-a81697eb]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}.body--dark .sticky-header-table thead tr th[data-v-a81697eb]{position:sticky;z-index:1}.body--dark .sticky-header-table thead tr:first-child th[data-v-a81697eb]{top:0}.body--dark .sticky-header-table.q-table--loading thead tr:last-child th[data-v-a81697eb]{top:48px}.body--dark .sticky-header-table tbody[data-v-a81697eb]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-white)}.body--dark .sticky-header-table tbody tr[data-v-a81697eb],.body--dark .sticky-header-table .q-table__middle[data-v-a81697eb],.body--dark .sticky-header-table .q-table__grid-content[data-v-a81697eb]{background-color:var(--q-secondary)}.body--dark .sticky-header-table tbody tr[data-v-a81697eb]:hover{background-color:#ffffff12}.body--dark .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-a81697eb]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}.body--dark .q-scrollarea[data-v-a81697eb]{border:1px solid var(--q-secondary)!important}.card-width[data-v-a81697eb]{width:22em}.dialog-content[data-v-a2485117]{width:auto;max-width:24em}.close-button[data-v-a2485117]{position:absolute;bottom:.4em;right:.4em;z-index:1;background:transparent}.card-footer[data-v-a2485117]{height:1.9em}.card-width[data-v-ec5579eb]{width:22em}[data-v-34ff7409]:root{--q-primary: #5c93d1;--q-secondary: #d2d2d7;--q-accent: #546e7a;--q-positive: #66bd7a;--q-negative: #db4f5f;--q-info: #7dc5d4;--q-warning: #d98e44;--q-background-1: #e3e3ec;--q-background-2: #eeeef3;--q-brown-text: #524f57;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #5c93d1;--q-toggle-off: #e0e0e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #ba7128;background-color:var(--q-background-1);color:var(--q-brown-text)}:root .theme-text[data-v-34ff7409]{color:var(--q-brown-text)!important}:root .deselected[data-v-34ff7409]{color:var(--q-grey)!important}:root .q-header[data-v-34ff7409]{background-color:var(--q-background-2);color:var(--q-brown-text)}:root .q-drawer[data-v-34ff7409]{background-color:var(--q-background-2)}:root .q-tab-panels[data-v-34ff7409]{background-color:var(--q-background-2)}:root .q-tab[data-v-34ff7409]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}:root .q-tab-icon[data-v-34ff7409]{color:var(--q-primary)}:root .q-tab--active[data-v-34ff7409]{background-color:#ceced3}:root .q-carousel__control .q-btn[data-v-34ff7409]:before{box-shadow:none}:root .q-carousel__control .q-btn .q-icon[data-v-34ff7409]{color:var(--q-primary)}:root .q-carousel__control .q-btn .q-icon[data-v-34ff7409]:before{color:var(--q-primary);box-shadow:none}:root .q-carousel__slide[data-v-34ff7409]{background-color:var(--q-background-2)}:root .q-card[data-v-34ff7409]{background-color:var(--q-secondary)}:root .q-expansion-item__toggle-icon[data-v-34ff7409]{color:var(--q-white)}:root .q-list[data-v-34ff7409]{background-color:var(--q-background-2)}:root .q-toggle__thumb[data-v-34ff7409]:after{background:var(--q-toggle-off)}:root .q-toggle__inner--truthy .q-toggle__thumb[data-v-34ff7409]:after{background-color:currentColor}:root .white-outline-input.q-field--outlined .q-field__control[data-v-34ff7409]:before{border-color:var(--q-white)!important}:root .sticky-header-table[data-v-34ff7409]{height:310px}:root .sticky-header-table .q-table__top[data-v-34ff7409],:root .sticky-header-table .q-table__bottom[data-v-34ff7409],:root .sticky-header-table thead tr:first-child th[data-v-34ff7409]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}:root .sticky-header-table thead tr th[data-v-34ff7409]{position:sticky;z-index:1}:root .sticky-header-table thead tr:first-child th[data-v-34ff7409]{top:0}:root .sticky-header-table.q-table--loading thead tr:last-child th[data-v-34ff7409]{top:48px}:root .sticky-header-table tbody[data-v-34ff7409]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-brown-text)}:root .sticky-header-table tbody tr[data-v-34ff7409],:root .sticky-header-table .q-table__middle[data-v-34ff7409],:root .sticky-header-table .q-table__grid-content .q-virtual-scroll .q-virtual-scroll--vertical scroll[data-v-34ff7409]{background-color:var(--q-secondary)}:root .sticky-header-table tbody tr[data-v-34ff7409]:hover{background-color:#0000000d}:root .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-34ff7409]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}:root .q-table th[data-v-34ff7409],:root .q-table td[data-v-34ff7409]{padding:2px 6px!important}:root .q-table th[data-v-34ff7409]:first-child,:root .q-table td[data-v-34ff7409]:first-child{padding-left:12px!important}:root .q-table th[data-v-34ff7409]:last-child,:root .q-table td[data-v-34ff7409]:last-child{padding-right:12px!important}:root .q-scrollarea[data-v-34ff7409]{border:1px solid var(--q-secondary)!important}.body--dark[data-v-34ff7409]{--q-primary: #3874db;--q-secondary: #28293d;--q-accent: #546e7a;--q-positive: #3e8f5e;--q-negative: #c54d57;--q-info: #4b89aa;--q-warning: #d98e44;--q-background-1: #030627;--q-background-2: #010322;--q-white: #ffffff;--q-grey: #9e9e9e;--q-carousel-control: #8b8f9f;--q-toggle-off: #e0e0e0;--q-list: rgb(40, 42, 62);--q-tab-icon: #d7d9e0;--q-flow-home-stroke: #9e9e9e;--q-battery: #d98e44;background-color:#000;color:var(--q-white)}.body--dark .theme-text[data-v-34ff7409]{color:var(--q-white)!important}.body--dark .deselected[data-v-34ff7409]{color:var(--q-grey)!important}.body--dark .q-header[data-v-34ff7409]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-drawer[data-v-34ff7409]{background-color:var(--q-list)}.body--dark .q-tab .q-icon[data-v-34ff7409]{color:var(--q-tab-icon)!important}.body--dark .q-tab-panels[data-v-34ff7409]{background-color:var(--q-background-2)}.body--dark .q-tab[data-v-34ff7409]{background-color:var(--q-background-2);border-top-left-radius:10px;border-top-right-radius:10px;border:1px solid var(--q-secondary)}.body--dark .q-tab--active[data-v-34ff7409]{background-color:#383a56}.body--dark .q-carousel__control .q-btn[data-v-34ff7409]:before{box-shadow:none}.body--dark .q-carousel__control .q-btn .q-icon[data-v-34ff7409]{color:var(--q-carousel-control)}.body--dark .q-carousel__control .q-btn .q-icon[data-v-34ff7409]:before{color:var(--q-carousel-control);box-shadow:none}.body--dark .q-carousel__slide[data-v-34ff7409]{background-color:var(--q-background-2);color:var(--q-white)}.body--dark .q-card[data-v-34ff7409]{background-color:var(--q-secondary);color:var(--q-white)}.body--dark .q-field__label[data-v-34ff7409]{color:var(--q-white)}.body--dark .q-field__control .q-field__native[data-v-34ff7409]::-webkit-calendar-picker-indicator{filter:invert(1)}.body--dark .q-placeholder[data-v-34ff7409]{color:var(--q-white)}.body--dark .q-list[data-v-34ff7409]{background-color:var(--q-list)}.body--dark .q-menu .q-item__section[data-v-34ff7409]{color:var(--q-white)!important}.body--dark .q-toggle__thumb[data-v-34ff7409]:after{background:var(--q-toggle-off)}.body--dark .q-toggle__inner--truthy .q-toggle__thumb[data-v-34ff7409]:after{background-color:currentColor}.body--dark .sticky-header-table[data-v-34ff7409]{height:310px}.body--dark .sticky-header-table .q-table__top[data-v-34ff7409],.body--dark .sticky-header-table .q-table__bottom[data-v-34ff7409],.body--dark .sticky-header-table thead tr:first-child th[data-v-34ff7409]{background-color:var(--q-primary);color:var(--q-white);font-size:.9rem}.body--dark .sticky-header-table thead tr th[data-v-34ff7409]{position:sticky;z-index:1}.body--dark .sticky-header-table thead tr:first-child th[data-v-34ff7409]{top:0}.body--dark .sticky-header-table.q-table--loading thead tr:last-child th[data-v-34ff7409]{top:48px}.body--dark .sticky-header-table tbody[data-v-34ff7409]{scroll-margin-top:48px;background-color:var(--q-secondary);color:var(--q-white)}.body--dark .sticky-header-table tbody tr[data-v-34ff7409],.body--dark .sticky-header-table .q-table__middle[data-v-34ff7409],.body--dark .sticky-header-table .q-table__grid-content[data-v-34ff7409]{background-color:var(--q-secondary)}.body--dark .sticky-header-table tbody tr[data-v-34ff7409]:hover{background-color:#ffffff12}.body--dark .sticky-header-table .q-table__middle.q-virtual-scroll[data-v-34ff7409]{scrollbar-width:thin;scrollbar-color:var(--q-primary) var(--q-secondary)}.body--dark .q-scrollarea[data-v-34ff7409]{border:1px solid var(--q-secondary)!important}.card-width[data-v-34ff7409]{width:22em}.slider-container[data-v-34ff7409]{position:relative;height:40px}.dialog-content[data-v-16daa238]{width:auto;max-width:24em}.close-button[data-v-16daa238]{position:absolute;bottom:.4em;right:.4em;z-index:1;background:transparent}.card-footer[data-v-16daa238]{height:1.9em}.chart-section[data-v-c7129eb4]{height:40vh} diff --git a/packages/modules/web_themes/koala/web/assets/IndexPage-BNtuL5nB.js b/packages/modules/web_themes/koala/web/assets/IndexPage-Dx0R7lfD.js similarity index 74% rename from packages/modules/web_themes/koala/web/assets/IndexPage-BNtuL5nB.js rename to packages/modules/web_themes/koala/web/assets/IndexPage-Dx0R7lfD.js index c6e0a7189e..de71945732 100644 --- a/packages/modules/web_themes/koala/web/assets/IndexPage-BNtuL5nB.js +++ b/packages/modules/web_themes/koala/web/assets/IndexPage-Dx0R7lfD.js @@ -1,4 +1,4 @@ -var zg=Object.defineProperty;var Bg=(t,e,n)=>e in t?zg(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Ae=(t,e,n)=>Bg(t,typeof e!="symbol"?e+"":e,n);import{i as Vs,e as xn,r as N,a as g,o as Lt,j as cn,F as gd,k as rn,R as md,h as w,G as Js,H as Va,I as Pt,E as _e,v as di,g as $e,c as ze,w as ge,p as Ng,J as er,K as tr,d as Ge,L as vd,M as Jn,N as pd,O as Wg,P as Go,S as Dr,T as Es,U as Or,V as Po,W as Hg,X as jg,m as nr,l as $g,q as Ug,Y as Yg,Z as Ea,$ as Ol,a0 as To,Q as Ve,x as Se,a1 as Zg,_ as Me,z as V,a2 as K,a3 as R,a4 as De,a5 as Je,a6 as Et,a7 as ue,D as Re,a8 as le,a9 as bd,aa as Xg,u as Kg,ab as Sn,n as at,ac as yd,ad as Qg,A as ne,B as L,C as I,ae as Aa,af as Gg,ag as _d,ah as oi,ai as tn,s as Jg,aj as xd,ak as em,al as Sd,am as ei,an as Rn,ao as tm,ap as wn,f as nm,aq as Vl,ar as qa,as as Ra,at as im,au as om,av as eo,aw as El,ax as ks,ay as sm,az as rm,aA as am,aB as lm,aC as Al,aD as ql,aE as cm,aF as wd,aG as um,aH as La,aI as dm,aJ as hm,aK as fm}from"./index-CMMTdT_8.js";import{t as yo,d as Io,Q as gm,v as Rl,w as Ll,x as mm,a as un,c as dn,k as In,m as ir,n as or,o as Do,q as sr,l as vm,u as kd,y as Fa,b as Cd,z as Md,A as Pd,e as Td,f as pm,B as rr,h as bm,C as ym,D as _m,E as xm,F as Id,G as Dd,H as Sm,I as Fl,J as wm,K as km,L as Cm,M as zl,N as Mm,O as Bl,P as Pm,R as Tm,S as Nl,p as _o,g as Pi,T as Im,s as an,r as pn}from"./use-quasar-CokCDZeI.js";import{u as Be}from"./mqtt-store-BO4qCeJ5.js";let Vr,Jo=0;const St=new Array(256);for(let t=0;t<256;t++)St[t]=(t+256).toString(16).substring(1);const Dm=(()=>{const t=typeof crypto<"u"?crypto:typeof window<"u"?window.crypto||window.msCrypto:void 0;if(t!==void 0){if(t.randomBytes!==void 0)return t.randomBytes;if(t.getRandomValues!==void 0)return e=>{const n=new Uint8Array(e);return t.getRandomValues(n),n}}return e=>{const n=[];for(let i=e;i>0;i--)n.push(Math.floor(Math.random()*256));return n}})(),Wl=4096;function sa(){(Vr===void 0||Jo+16>Wl)&&(Jo=0,Vr=Dm(Wl));const t=Array.prototype.slice.call(Vr,Jo,Jo+=16);return t[6]=t[6]&15|64,t[8]=t[8]&63|128,St[t[0]]+St[t[1]]+St[t[2]]+St[t[3]]+"-"+St[t[4]]+St[t[5]]+"-"+St[t[6]]+St[t[7]]+"-"+St[t[8]]+St[t[9]]+"-"+St[t[10]]+St[t[11]]+St[t[12]]+St[t[13]]+St[t[14]]+St[t[15]]}let Om=0;const Vm=["click","keydown"],Em={icon:String,label:[Number,String],alert:[Boolean,String],alertIcon:String,name:{type:[Number,String],default:()=>`t_${Om++}`},noCaps:Boolean,tabindex:[String,Number],disable:Boolean,contentClass:String,ripple:{type:[Boolean,Object],default:!0}};function Am(t,e,n,i){const o=Vs(gd,xn);if(o===xn)return console.error("QTab/QRouteTab component needs to be child of QTabs"),xn;const{proxy:s}=$e(),r=N(null),a=N(null),l=N(null),c=g(()=>t.disable===!0||t.ripple===!1?!1:Object.assign({keyCodes:[13,32],early:!0},t.ripple===!0?{}:t.ripple)),u=g(()=>o.currentModel.value===t.name),d=g(()=>"q-tab relative-position self-stretch flex flex-center text-center"+(u.value===!0?" q-tab--active"+(o.tabProps.value.activeClass?" "+o.tabProps.value.activeClass:"")+(o.tabProps.value.activeColor?` text-${o.tabProps.value.activeColor}`:"")+(o.tabProps.value.activeBgColor?` bg-${o.tabProps.value.activeBgColor}`:""):" q-tab--inactive")+(t.icon&&t.label&&o.tabProps.value.inlineLabel===!1?" q-tab--full":"")+(t.noCaps===!0||o.tabProps.value.noCaps===!0?" q-tab--no-caps":"")+(t.disable===!0?" disabled":" q-focusable q-hoverable cursor-pointer")),h=g(()=>"q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable "+(o.tabProps.value.inlineLabel===!0?"row no-wrap q-tab__content--inline":"column")+(t.contentClass!==void 0?` ${t.contentClass}`:"")),f=g(()=>t.disable===!0||o.hasFocus.value===!0||u.value===!1&&o.hasActiveTab.value===!0?-1:t.tabindex||0);function m(y,_){if(_!==!0&&r.value!==null&&r.value.focus(),t.disable!==!0){o.updateModel({name:t.name}),n("click",y);return}}function p(y){Js(y,[13,32])?m(y,!0):Va(y)!==!0&&y.keyCode>=35&&y.keyCode<=40&&y.altKey!==!0&&y.metaKey!==!0&&o.onKbdNavigate(y.keyCode,s.$el)===!0&&Pt(y),n("keydown",y)}function v(){const y=o.tabProps.value.narrowIndicator,_=[],C=w("div",{ref:l,class:["q-tab__indicator",o.tabProps.value.indicatorClass]});t.icon!==void 0&&_.push(w(_e,{class:"q-tab__icon",name:t.icon})),t.label!==void 0&&_.push(w("div",{class:"q-tab__label"},t.label)),t.alert!==!1&&_.push(t.alertIcon!==void 0?w(_e,{class:"q-tab__alert-icon",color:t.alert!==!0?t.alert:void 0,name:t.alertIcon}):w("div",{class:"q-tab__alert"+(t.alert!==!0?` text-${t.alert}`:"")})),y===!0&&_.push(C);const S=[w("div",{class:"q-focus-helper",tabindex:-1,ref:r}),w("div",{class:h.value},di(e.default,_))];return y===!1&&S.push(C),S}const b={name:g(()=>t.name),rootRef:a,tabIndicatorRef:l,routeData:i};Lt(()=>{o.unregisterTab(b)}),cn(()=>{o.registerTab(b)});function x(y,_){const C={ref:a,class:d.value,tabindex:f.value,role:"tab","aria-selected":u.value===!0?"true":"false","aria-disabled":t.disable===!0?"true":void 0,onClick:m,onKeydown:p,..._};return rn(w(y,C,v()),[[md,c.value]])}return{renderTab:x,$tabs:o}}const Er=ze({name:"QTab",props:Em,emits:Vm,setup(t,{slots:e,emit:n}){const{renderTab:i}=Am(t,e,n);return()=>i("div")}});let Oo=!1;{const t=document.createElement("div");t.setAttribute("dir","rtl"),Object.assign(t.style,{width:"1px",height:"1px",overflow:"auto"});const e=document.createElement("div");Object.assign(e.style,{width:"1000px",height:"1px"}),document.body.appendChild(t),t.appendChild(e),t.scrollLeft=-1e3,Oo=t.scrollLeft>=0,t.remove()}function qm(t,e,n){const i=n===!0?["left","right"]:["top","bottom"];return`absolute-${e===!0?i[0]:i[1]}${t?` text-${t}`:""}`}const Rm=["left","center","right","justify"],Lm=ze({name:"QTabs",props:{modelValue:[Number,String],align:{type:String,default:"center",validator:t=>Rm.includes(t)},breakpoint:{type:[String,Number],default:600},vertical:Boolean,shrink:Boolean,stretch:Boolean,activeClass:String,activeColor:String,activeBgColor:String,indicatorColor:String,leftIcon:String,rightIcon:String,outsideArrows:Boolean,mobileArrows:Boolean,switchIndicator:Boolean,narrowIndicator:Boolean,inlineLabel:Boolean,noCaps:Boolean,dense:Boolean,contentClass:String,"onUpdate:modelValue":[Function,Array]},setup(t,{slots:e,emit:n}){const{proxy:i}=$e(),{$q:o}=i,{registerTick:s}=yo(),{registerTick:r}=yo(),{registerTick:a}=yo(),{registerTimeout:l,removeTimeout:c}=Io(),{registerTimeout:u,removeTimeout:d}=Io(),h=N(null),f=N(null),m=N(t.modelValue),p=N(!1),v=N(!0),b=N(!1),x=N(!1),y=[],_=N(0),C=N(!1);let S=null,E=null,A;const O=g(()=>({activeClass:t.activeClass,activeColor:t.activeColor,activeBgColor:t.activeBgColor,indicatorClass:qm(t.indicatorColor,t.switchIndicator,t.vertical),narrowIndicator:t.narrowIndicator,inlineLabel:t.inlineLabel,noCaps:t.noCaps})),P=g(()=>{const j=_.value,re=m.value;for(let X=0;X`q-tabs__content--align-${p.value===!0?"left":x.value===!0?"justify":t.align}`),M=g(()=>`q-tabs row no-wrap items-center q-tabs--${p.value===!0?"":"not-"}scrollable q-tabs--${t.vertical===!0?"vertical":"horizontal"} q-tabs__arrows--${t.outsideArrows===!0?"outside":"inside"} q-tabs--mobile-with${t.mobileArrows===!0?"":"out"}-arrows`+(t.dense===!0?" q-tabs--dense":"")+(t.shrink===!0?" col-shrink":"")+(t.stretch===!0?" self-stretch":"")),H=g(()=>"q-tabs__content scroll--mobile row no-wrap items-center self-stretch hide-scrollbar relative-position "+q.value+(t.contentClass!==void 0?` ${t.contentClass}`:"")),z=g(()=>t.vertical===!0?{container:"height",content:"offsetHeight",scroll:"scrollHeight"}:{container:"width",content:"offsetWidth",scroll:"scrollWidth"}),$=g(()=>t.vertical!==!0&&o.lang.rtl===!0),U=g(()=>Oo===!1&&$.value===!0);ge($,T),ge(()=>t.modelValue,j=>{G({name:j,setCurrent:!0,skipEmit:!0})}),ge(()=>t.outsideArrows,Y);function G({name:j,setCurrent:re,skipEmit:X}){m.value!==j&&(X!==!0&&t["onUpdate:modelValue"]!==void 0&&n("update:modelValue",j),(re===!0||t["onUpdate:modelValue"]===void 0)&&(de(m.value,j),m.value=j))}function Y(){s(()=>{te({width:h.value.offsetWidth,height:h.value.offsetHeight})})}function te(j){if(z.value===void 0||f.value===null)return;const re=j[z.value.container],X=Math.min(f.value[z.value.scroll],Array.prototype.reduce.call(f.value.children,(Oe,ye)=>Oe+(ye[z.value.content]||0),0)),ce=re>0&&X>re;p.value=ce,ce===!0&&r(T),x.value=reOe.name.value===j):null,ce=re!=null&&re!==""?y.find(Oe=>Oe.name.value===re):null;if(ct===!0)ct=!1;else if(X&&ce){const Oe=X.tabIndicatorRef.value,ye=ce.tabIndicatorRef.value;S!==null&&(clearTimeout(S),S=null),Oe.style.transition="none",Oe.style.transform="none",ye.style.transition="none",ye.style.transform="none";const Pe=Oe.getBoundingClientRect(),ot=ye.getBoundingClientRect();ye.style.transform=t.vertical===!0?`translate3d(0,${Pe.top-ot.top}px,0) scale3d(1,${ot.height?Pe.height/ot.height:1},1)`:`translate3d(${Pe.left-ot.left}px,0,0) scale3d(${ot.width?Pe.width/ot.width:1},1,1)`,a(()=>{S=setTimeout(()=>{S=null,ye.style.transition="transform .25s cubic-bezier(.4, 0, .2, 1)",ye.style.transform="none"},70)})}ce&&p.value===!0&&D(ce.rootRef.value)}function D(j){const{left:re,width:X,top:ce,height:Oe}=f.value.getBoundingClientRect(),ye=j.getBoundingClientRect();let Pe=t.vertical===!0?ye.top-ce:ye.left-re;if(Pe<0){f.value[t.vertical===!0?"scrollTop":"scrollLeft"]+=Math.floor(Pe),T();return}Pe+=t.vertical===!0?ye.height-Oe:ye.width-X,Pe>0&&(f.value[t.vertical===!0?"scrollTop":"scrollLeft"]+=Math.ceil(Pe),T())}function T(){const j=f.value;if(j===null)return;const re=j.getBoundingClientRect(),X=t.vertical===!0?j.scrollTop:Math.abs(j.scrollLeft);$.value===!0?(v.value=Math.ceil(X+re.width)0):(v.value=X>0,b.value=t.vertical===!0?Math.ceil(X+re.height){Z(j)===!0&&B()},5)}function ae(){Q(U.value===!0?Number.MAX_SAFE_INTEGER:0)}function fe(){Q(U.value===!0?0:Number.MAX_SAFE_INTEGER)}function B(){E!==null&&(clearInterval(E),E=null)}function J(j,re){const X=Array.prototype.filter.call(f.value.children,ot=>ot===re||ot.matches&&ot.matches(".q-tab.q-focusable")===!0),ce=X.length;if(ce===0)return;if(j===36)return D(X[0]),X[0].focus(),!0;if(j===35)return D(X[ce-1]),X[ce-1].focus(),!0;const Oe=j===(t.vertical===!0?38:37),ye=j===(t.vertical===!0?40:39),Pe=Oe===!0?-1:ye===!0?1:void 0;if(Pe!==void 0){const ot=$.value===!0?-1:1,tt=X.indexOf(re)+Pe*ot;return tt>=0&&ttU.value===!0?{get:j=>Math.abs(j.scrollLeft),set:(j,re)=>{j.scrollLeft=-re}}:t.vertical===!0?{get:j=>j.scrollTop,set:(j,re)=>{j.scrollTop=re}}:{get:j=>j.scrollLeft,set:(j,re)=>{j.scrollLeft=re}});function Z(j){const re=f.value,{get:X,set:ce}=we.value;let Oe=!1,ye=X(re);const Pe=j=j)&&(Oe=!0,ye=j),ce(re,ye),T(),Oe}function Ee(j,re){for(const X in j)if(j[X]!==re[X])return!1;return!0}function Xe(){let j=null,re={matchedLen:0,queryDiff:9999,hrefLen:0};const X=y.filter(Pe=>Pe.routeData!==void 0&&Pe.routeData.hasRouterLink.value===!0),{hash:ce,query:Oe}=i.$route,ye=Object.keys(Oe).length;for(const Pe of X){const ot=Pe.routeData.exact.value===!0;if(Pe.routeData[ot===!0?"linkIsExactActive":"linkIsActive"].value!==!0)continue;const{hash:tt,query:vt,matched:Vt,href:W}=Pe.routeData.resolvedLink.value,me=Object.keys(vt).length;if(ot===!0){if(tt!==ce||me!==ye||Ee(Oe,vt)===!1)continue;j=Pe.name.value;break}if(tt!==""&&tt!==ce||me!==0&&Ee(vt,Oe)===!1)continue;const ke={matchedLen:Vt.length,queryDiff:ye-me,hrefLen:W.length-tt.length};if(ke.matchedLen>re.matchedLen){j=Pe.name.value,re=ke;continue}else if(ke.matchedLen!==re.matchedLen)continue;if(ke.queryDiffre.hrefLen&&(j=Pe.name.value,re=ke)}if(j===null&&y.some(Pe=>Pe.routeData===void 0&&Pe.name.value===m.value)===!0){ct=!1;return}G({name:j,setCurrent:!0})}function _t(j){if(c(),C.value!==!0&&h.value!==null&&j.target&&typeof j.target.closest=="function"){const re=j.target.closest(".q-tab");re&&h.value.contains(re)===!0&&(C.value=!0,p.value===!0&&D(re))}}function et(){l(()=>{C.value=!1},30)}function dt(){Dt.avoidRouteWatcher===!1?u(Xe):d()}function mt(){if(A===void 0){const j=ge(()=>i.$route.fullPath,dt);A=()=>{j(),A=void 0}}}function ht(j){y.push(j),_.value++,Y(),j.routeData===void 0||i.$route===void 0?u(()=>{if(p.value===!0){const re=m.value,X=re!=null&&re!==""?y.find(ce=>ce.name.value===re):null;X&&D(X.rootRef.value)}}):(mt(),j.routeData.hasRouterLink.value===!0&&dt())}function It(j){y.splice(y.indexOf(j),1),_.value--,Y(),A!==void 0&&j.routeData!==void 0&&(y.every(re=>re.routeData===void 0)===!0&&A(),dt())}const Dt={currentModel:m,tabProps:O,hasFocus:C,hasActiveTab:P,registerTab:ht,unregisterTab:It,verifyRouteModel:dt,updateModel:G,onKbdNavigate:J,avoidRouteWatcher:!1};Ng(gd,Dt);function $t(){S!==null&&clearTimeout(S),B(),A!==void 0&&A()}let Ot,ct;return Lt($t),er(()=>{Ot=A!==void 0,$t()}),tr(()=>{Ot===!0&&(mt(),ct=!0,dt()),Y()}),()=>w("div",{ref:h,class:M.value,role:"tablist",onFocusin:_t,onFocusout:et},[w(gm,{onResize:te}),w("div",{ref:f,class:H.value,onScroll:T},Ge(e.default)),w(_e,{class:"q-tabs__arrow q-tabs__arrow--left absolute q-tab__icon"+(v.value===!0?"":" q-tabs__arrow--faded"),name:t.leftIcon||o.iconSet.tabs[t.vertical===!0?"up":"left"],onMousedownPassive:ae,onTouchstartPassive:ae,onMouseupPassive:B,onMouseleavePassive:B,onTouchendPassive:B}),w(_e,{class:"q-tabs__arrow q-tabs__arrow--right absolute q-tab__icon"+(b.value===!0?"":" q-tabs__arrow--faded"),name:t.rightIcon||o.iconSet.tabs[t.vertical===!0?"down":"right"],onMousedownPassive:fe,onTouchstartPassive:fe,onMouseupPassive:B,onMouseleavePassive:B,onTouchendPassive:B})])}});function Fm(t){const e=[.06,6,50];return typeof t=="string"&&t.length&&t.split(":").forEach((n,i)=>{const o=parseFloat(n);o&&(e[i]=o)}),e}const zm=vd({name:"touch-swipe",beforeMount(t,{value:e,arg:n,modifiers:i}){if(i.mouse!==!0&&Jn.has.touch!==!0)return;const o=i.mouseCapture===!0?"Capture":"",s={handler:e,sensitivity:Fm(n),direction:Rl(i),noop:pd,mouseStart(r){Ll(r,s)&&Wg(r)&&(Go(s,"temp",[[document,"mousemove","move",`notPassive${o}`],[document,"mouseup","end","notPassiveCapture"]]),s.start(r,!0))},touchStart(r){if(Ll(r,s)){const a=r.target;Go(s,"temp",[[a,"touchmove","move","notPassiveCapture"],[a,"touchcancel","end","notPassiveCapture"],[a,"touchend","end","notPassiveCapture"]]),s.start(r)}},start(r,a){Jn.is.firefox===!0&&Dr(t,!0);const l=Es(r);s.event={x:l.left,y:l.top,time:Date.now(),mouse:a===!0,dir:!1}},move(r){if(s.event===void 0)return;if(s.event.dir!==!1){Pt(r);return}const a=Date.now()-s.event.time;if(a===0)return;const l=Es(r),c=l.left-s.event.x,u=Math.abs(c),d=l.top-s.event.y,h=Math.abs(d);if(s.event.mouse!==!0){if(us.sensitivity[0]&&(s.event.dir=d<0?"up":"down"),s.direction.horizontal===!0&&u>h&&h<100&&f>s.sensitivity[0]&&(s.event.dir=c<0?"left":"right"),s.direction.up===!0&&us.sensitivity[0]&&(s.event.dir="up"),s.direction.down===!0&&u0&&u<100&&m>s.sensitivity[0]&&(s.event.dir="down"),s.direction.left===!0&&u>h&&c<0&&h<100&&f>s.sensitivity[0]&&(s.event.dir="left"),s.direction.right===!0&&u>h&&c>0&&h<100&&f>s.sensitivity[0]&&(s.event.dir="right"),s.event.dir!==!1?(Pt(r),s.event.mouse===!0&&(document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),mm(),s.styleCleanup=p=>{s.styleCleanup=void 0,document.body.classList.remove("non-selectable");const v=()=>{document.body.classList.remove("no-pointer-events--children")};p===!0?setTimeout(v,50):v()}),s.handler({evt:r,touch:s.event.mouse!==!0,mouse:s.event.mouse,direction:s.event.dir,duration:a,distance:{x:u,y:h}})):s.end(r)},end(r){s.event!==void 0&&(Or(s,"temp"),Jn.is.firefox===!0&&Dr(t,!1),s.styleCleanup!==void 0&&s.styleCleanup(!0),r!==void 0&&s.event.dir!==!1&&Pt(r),s.event=void 0)}};if(t.__qtouchswipe=s,i.mouse===!0){const r=i.mouseCapture===!0||i.mousecapture===!0?"Capture":"";Go(s,"main",[[t,"mousedown","mouseStart",`passive${r}`]])}Jn.has.touch===!0&&Go(s,"main",[[t,"touchstart","touchStart",`passive${i.capture===!0?"Capture":""}`],[t,"touchmove","noop","notPassiveCapture"]])},updated(t,e){const n=t.__qtouchswipe;n!==void 0&&(e.oldValue!==e.value&&(typeof e.value!="function"&&n.end(),n.handler=e.value),n.direction=Rl(e.modifiers))},beforeUnmount(t){const e=t.__qtouchswipe;e!==void 0&&(Or(e,"main"),Or(e,"temp"),Jn.is.firefox===!0&&Dr(t,!1),e.styleCleanup!==void 0&&e.styleCleanup(),delete t.__qtouchswipe)}});function Bm(){let t=Object.create(null);return{getCache:(e,n)=>t[e]===void 0?t[e]=typeof n=="function"?n():n:t[e],setCache(e,n){t[e]=n},hasCache(e){return Object.hasOwnProperty.call(t,e)},clearCache(e){e!==void 0?delete t[e]:t=Object.create(null)}}}const Od={name:{required:!0},disable:Boolean},Hl={setup(t,{slots:e}){return()=>w("div",{class:"q-panel scroll",role:"tabpanel"},Ge(e.default))}},Vd={modelValue:{required:!0},animated:Boolean,infinite:Boolean,swipeable:Boolean,vertical:Boolean,transitionPrev:String,transitionNext:String,transitionDuration:{type:[String,Number],default:300},keepAlive:Boolean,keepAliveInclude:[String,Array,RegExp],keepAliveExclude:[String,Array,RegExp],keepAliveMax:Number},Ed=["update:modelValue","beforeTransition","transition"];function Ad(){const{props:t,emit:e,proxy:n}=$e(),{getCache:i}=Bm(),{registerTimeout:o}=Io();let s,r;const a=N(null),l=N(null);function c(z){const $=t.vertical===!0?"up":"left";A((n.$q.lang.rtl===!0?-1:1)*(z.direction===$?1:-1))}const u=g(()=>[[zm,c,void 0,{horizontal:t.vertical!==!0,vertical:t.vertical,mouse:!0}]]),d=g(()=>t.transitionPrev||`slide-${t.vertical===!0?"down":"right"}`),h=g(()=>t.transitionNext||`slide-${t.vertical===!0?"up":"left"}`),f=g(()=>`--q-transition-duration: ${t.transitionDuration}ms`),m=g(()=>typeof t.modelValue=="string"||typeof t.modelValue=="number"?t.modelValue:String(t.modelValue)),p=g(()=>({include:t.keepAliveInclude,exclude:t.keepAliveExclude,max:t.keepAliveMax})),v=g(()=>t.keepAliveInclude!==void 0||t.keepAliveExclude!==void 0);ge(()=>t.modelValue,(z,$)=>{const U=_(z)===!0?C(z):-1;r!==!0&&E(U===-1?0:U{e("transition",z,$)},t.transitionDuration))});function b(){A(1)}function x(){A(-1)}function y(z){e("update:modelValue",z)}function _(z){return z!=null&&z!==""}function C(z){return s.findIndex($=>$.props.name===z&&$.props.disable!==""&&$.props.disable!==!0)}function S(){return s.filter(z=>z.props.disable!==""&&z.props.disable!==!0)}function E(z){const $=z!==0&&t.animated===!0&&a.value!==-1?"q-transition--"+(z===-1?d.value:h.value):null;l.value!==$&&(l.value=$)}function A(z,$=a.value){let U=$+z;for(;U!==-1&&U{r=!1});return}U+=z}t.infinite===!0&&s.length!==0&&$!==-1&&$!==s.length&&A(z,z===-1?s.length:-1)}function O(){const z=C(t.modelValue);return a.value!==z&&(a.value=z),!0}function P(){const z=_(t.modelValue)===!0&&O()&&s[a.value];return t.keepAlive===!0?[w(jg,p.value,[w(v.value===!0?i(m.value,()=>({...Hl,name:m.value})):Hl,{key:m.value,style:f.value},()=>z)])]:[w("div",{class:"q-panel scroll",style:f.value,key:m.value,role:"tabpanel"},[z])]}function q(){if(s.length!==0)return t.animated===!0?[w(Po,{name:l.value},P)]:P()}function M(z){return s=Hg(Ge(z.default,[])).filter($=>$.props!==null&&$.props.slot===void 0&&_($.props.name)===!0),s.length}function H(){return s}return Object.assign(n,{next:b,previous:x,goTo:y}),{panelIndex:a,panelDirectives:u,updatePanelsList:M,updatePanelIndex:O,getPanelContent:q,getEnabledPanels:S,getPanels:H,isValidPanelName:_,keepAliveProps:p,needsUniqueKeepAliveWrapper:v,goToPanelByOffset:A,goToPanel:y,nextPanel:b,previousPanel:x}}const Ar=ze({name:"QTabPanel",props:Od,setup(t,{slots:e}){return()=>w("div",{class:"q-tab-panel",role:"tabpanel"},Ge(e.default))}}),Nm=ze({name:"QTabPanels",props:{...Vd,...un},emits:Ed,setup(t,{slots:e}){const n=$e(),i=dn(t,n.proxy.$q),{updatePanelsList:o,getPanelContent:s,panelDirectives:r}=Ad(),a=g(()=>"q-tab-panels q-panel-parent"+(i.value===!0?" q-tab-panels--dark q-dark":""));return()=>(o(e),nr("div",{class:a.value},s(),"pan",t.swipeable,()=>r.value))}}),Wm=ze({name:"QPage",props:{padding:Boolean,styleFn:Function},setup(t,{slots:e}){const{proxy:{$q:n}}=$e(),i=Vs($g,xn);if(i===xn)return console.error("QPage needs to be a deep child of QLayout"),xn;if(Vs(Ug,xn)===xn)return console.error("QPage needs to be child of QPageContainer"),xn;const s=g(()=>{const a=(i.header.space===!0?i.header.size:0)+(i.footer.space===!0?i.footer.size:0);if(typeof t.styleFn=="function"){const l=i.isContainer.value===!0?i.containerHeight.value:n.screen.height;return t.styleFn(a,l)}return{minHeight:i.isContainer.value===!0?i.containerHeight.value-a+"px":n.screen.height===0?a!==0?`calc(100vh - ${a}px)`:"100vh":n.screen.height-a+"px"}}),r=g(()=>`q-page${t.padding===!0?" q-layout-padding":""}`);return()=>w("main",{class:r.value,style:s.value},Ge(e.default))}}),qd=ze({name:"QCarouselSlide",props:{...Od,imgSrc:String},setup(t,{slots:e}){const n=g(()=>t.imgSrc?{backgroundImage:`url("${t.imgSrc}")`}:{});return()=>w("div",{class:"q-carousel__slide",style:n.value},Ge(e.default))}}),Hm=ze({name:"QCarouselControl",props:{position:{type:String,default:"bottom-right",validator:t=>["top-right","top-left","bottom-right","bottom-left","top","right","bottom","left"].includes(t)},offset:{type:Array,default:()=>[18,18],validator:t=>t.length===2}},setup(t,{slots:e}){const n=g(()=>`q-carousel__control absolute absolute-${t.position}`),i=g(()=>({margin:`${t.offset[1]}px ${t.offset[0]}px`}));return()=>w("div",{class:n.value,style:i.value},Ge(e.default))}});let to=0;const Rd={fullscreen:Boolean,noRouteFullscreenExit:Boolean},Ld=["update:fullscreen","fullscreen"];function Fd(){const t=$e(),{props:e,emit:n,proxy:i}=t;let o,s,r;const a=N(!1);Yg(t)===!0&&ge(()=>i.$route.fullPath,()=>{e.noRouteFullscreenExit!==!0&&u()}),ge(()=>e.fullscreen,d=>{a.value!==d&&l()}),ge(a,d=>{n("update:fullscreen",d),n("fullscreen",d)});function l(){a.value===!0?u():c()}function c(){a.value!==!0&&(a.value=!0,r=i.$el.parentNode,r.replaceChild(s,i.$el),document.body.appendChild(i.$el),to++,to===1&&document.body.classList.add("q-body--fullscreen-mixin"),o={handler:u},Ol.add(o))}function u(){a.value===!0&&(o!==void 0&&(Ol.remove(o),o=void 0),r.replaceChild(i.$el,s),a.value=!1,to=Math.max(0,to-1),to===0&&(document.body.classList.remove("q-body--fullscreen-mixin"),i.$el.scrollIntoView!==void 0&&setTimeout(()=>{i.$el.scrollIntoView()})))}return Ea(()=>{s=document.createElement("span")}),cn(()=>{e.fullscreen===!0&&c()}),Lt(u),Object.assign(i,{toggleFullscreen:l,setFullscreen:c,exitFullscreen:u}),{inFullscreen:a,toggleFullscreen:l}}const jm=["top","right","bottom","left"],$m=["regular","flat","outline","push","unelevated"],zd=ze({name:"QCarousel",props:{...un,...Vd,...Rd,transitionPrev:{type:String,default:"fade"},transitionNext:{type:String,default:"fade"},height:String,padding:Boolean,controlColor:String,controlTextColor:String,controlType:{type:String,validator:t=>$m.includes(t),default:"flat"},autoplay:[Number,Boolean],arrows:Boolean,prevIcon:String,nextIcon:String,navigation:Boolean,navigationPosition:{type:String,validator:t=>jm.includes(t)},navigationIcon:String,navigationActiveIcon:String,thumbnails:Boolean},emits:[...Ld,...Ed],setup(t,{slots:e}){const{proxy:{$q:n}}=$e(),i=dn(t,n);let o=null,s;const{updatePanelsList:r,getPanelContent:a,panelDirectives:l,goToPanel:c,previousPanel:u,nextPanel:d,getEnabledPanels:h,panelIndex:f}=Ad(),{inFullscreen:m}=Fd(),p=g(()=>m.value!==!0&&t.height!==void 0?{height:t.height}:{}),v=g(()=>t.vertical===!0?"vertical":"horizontal"),b=g(()=>t.navigationPosition||(t.vertical===!0?"right":"bottom")),x=g(()=>`q-carousel q-panel-parent q-carousel--with${t.padding===!0?"":"out"}-padding`+(m.value===!0?" fullscreen":"")+(i.value===!0?" q-carousel--dark q-dark":"")+(t.arrows===!0?` q-carousel--arrows-${v.value}`:"")+(t.navigation===!0?` q-carousel--navigation-${b.value}`:"")),y=g(()=>{const P=[t.prevIcon||n.iconSet.carousel[t.vertical===!0?"up":"left"],t.nextIcon||n.iconSet.carousel[t.vertical===!0?"down":"right"]];return t.vertical===!1&&n.lang.rtl===!0?P.reverse():P}),_=g(()=>t.navigationIcon||n.iconSet.carousel.navigationIcon),C=g(()=>t.navigationActiveIcon||_.value),S=g(()=>({color:t.controlColor,textColor:t.controlTextColor,round:!0,[t.controlType]:!0,dense:!0}));ge(()=>t.modelValue,()=>{t.autoplay&&E()}),ge(()=>t.autoplay,P=>{P?E():o!==null&&(clearTimeout(o),o=null)});function E(){const P=To(t.autoplay)===!0?Math.abs(t.autoplay):5e3;o!==null&&clearTimeout(o),o=setTimeout(()=>{o=null,P>=0?d():u()},P)}cn(()=>{t.autoplay&&E()}),Lt(()=>{o!==null&&clearTimeout(o)});function A(P,q){return w("div",{class:`q-carousel__control q-carousel__navigation no-wrap absolute flex q-carousel__navigation--${P} q-carousel__navigation--${b.value}`+(t.controlColor!==void 0?` text-${t.controlColor}`:"")},[w("div",{class:"q-carousel__navigation-inner flex flex-center no-wrap"},h().map(q))])}function O(){const P=[];if(t.navigation===!0){const q=e["navigation-icon"]!==void 0?e["navigation-icon"]:H=>w(Ve,{key:"nav"+H.name,class:`q-carousel__navigation-icon q-carousel__navigation-icon--${H.active===!0?"":"in"}active`,...H.btnProps,onClick:H.onClick}),M=s-1;P.push(A("buttons",(H,z)=>{const $=H.props.name,U=f.value===z;return q({index:z,maxIndex:M,name:$,active:U,btnProps:{icon:U===!0?C.value:_.value,size:"sm",...S.value},onClick:()=>{c($)}})}))}else if(t.thumbnails===!0){const q=t.controlColor!==void 0?` text-${t.controlColor}`:"";P.push(A("thumbnails",M=>{const H=M.props;return w("img",{key:"tmb#"+H.name,class:`q-carousel__thumbnail q-carousel__thumbnail--${H.name===t.modelValue?"":"in"}active`+q,src:H.imgSrc||H["img-src"],onClick:()=>{c(H.name)}})}))}return t.arrows===!0&&f.value>=0&&((t.infinite===!0||f.value>0)&&P.push(w("div",{key:"prev",class:`q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--${v.value} absolute flex flex-center`},[w(Ve,{icon:y.value[0],...S.value,onClick:u})])),(t.infinite===!0||f.value(s=r(e),w("div",{class:x.value,style:p.value},[nr("div",{class:"q-carousel__slides-container"},a(),"sl-cont",t.swipeable,()=>l.value)].concat(O())))}}),Um=Se({__name:"EnergyFlowChart",setup(t,{expose:e}){e(),Zg(X=>({"7061f1f7":s.value,"7c22ee07":l.value}));const n=Be(),i=N({xMin:0,xMax:150,yMin:0,yMax:105,circleRadius:10,strokeWidth:.5,textSize:5,numRows:4,numColumns:3}),o=g(()=>`${i.value.xMin} ${i.value.yMin} ${i.value.xMax} ${i.value.yMax}`),s=g(()=>i.value.strokeWidth),r=g(()=>i.value.circleRadius),a=g(()=>i.value.circleRadius),l=g(()=>`${i.value.textSize}px`),c=X=>{let ce={...X};return ce.textValue&&(ce.textValue=ce.textValue.replace(/^-/,"")),ce.value&&(ce.value=Math.abs(ce.value)),ce.scaledValue&&(ce.scaledValue=Math.abs(ce.scaledValue)),ce},u=g(()=>n.getGridPower("object")),d=g(()=>Number(u.value.value)>0),h=g(()=>Number(u.value.value)<0),f=g(()=>n.batteryTotalPower("object")),m=g(()=>Number(n.batteryTotalPower("value"))<0),p=g(()=>Number(n.batteryTotalPower("value"))>0),v=g(()=>Number(n.batterySocTotal)/100),b=g(()=>n.getHomePower("object")),x=g(()=>Number(b.value.value)>0),y=g(()=>Number(b.value.value)<0),_=g(()=>n.getPvPower("object")),C=g(()=>{const X=Number(_.value.value);return Math.abs(X)>=50}),S=g(()=>n.chargePointIds),E=g(()=>n.chargePointName(S.value[0])||"---"),A=g(()=>n.chargePointName(S.value[1])||"---"),O=g(()=>n.chargePointName(S.value[2])||"---"),P=g(()=>S.value.length>0?n.chargePointPower(S.value[0],"object")||{textValue:"Loading..."}:{textValue:"N/A"}),q=g(()=>S.value.length>0?n.chargePointPower(S.value[1],"object")||{textValue:"Loading..."}:{textValue:"N/A"}),M=g(()=>S.value.length>0?n.chargePointPower(S.value[2],"object")||{textValue:"Loading..."}:{textValue:"N/A"}),H=g(()=>Number(P.value.value)>0),z=g(()=>Number(P.value.value)<0),$=g(()=>Number(q.value.value)>0),U=g(()=>Number(q.value.value)<0),G=g(()=>Number(M.value.value)>0),Y=g(()=>Number(M.value.value)<0),te=X=>{switch(X){case"instant_charging":return{label:"Sofort",class:"danger"};case"pv_charging":return{label:"PV",class:"success"};case"scheduled_charging":return{label:"Zielladen",class:"primary"};case"time_charging":return{label:"Zeitladen",class:"warning"};case"eco_charging":return{label:"Eco",class:"secondary"};case"stop":return{label:"Stop",class:"dark"};default:return{label:"Stop",class:"dark"}}},de=g(()=>n.chargePointPlugState(S.value[0])),D=g(()=>{const X=n.chargePointConnectedVehicleChargeMode(S.value[0]);return te(X.value||"")}),T=g(()=>n.chargePointConnectedVehicleInfo(S.value[0]).value?.name||"---"),Q=g(()=>n.chargePointConnectedVehicleSoc(S.value[0])),ae=g(()=>n.chargePointPlugState(S.value[1])),fe=g(()=>{const X=n.chargePointConnectedVehicleChargeMode(S.value[1]);return te(X.value||"")}),B=g(()=>n.chargePointConnectedVehicleInfo(S.value[1]).value?.name||"---"),J=g(()=>n.chargePointConnectedVehicleSoc(S.value[1])),we=g(()=>n.chargePointPlugState(S.value[2])),Z=g(()=>{const X=n.chargePointConnectedVehicleChargeMode(S.value[2]);return te(X.value||"")}),Ee=g(()=>n.chargePointConnectedVehicleInfo(S.value[2]).value?.name||"---"),Xe=g(()=>n.chargePointConnectedVehicleSoc(S.value[2])),_t=g(()=>n.chargePointSumPower("object")),et=g(()=>Number(_t.value.value)<0),dt=g(()=>Number(_t.value.value)>0),mt=g(()=>{const X=[];return X.push({id:"grid",class:{base:"grid",valueLabel:h.value?"fill-success":d.value?"fill-danger":"",animated:d.value,animatedReverse:h.value},position:{row:0,column:0},label:["EVU",c(u.value).textValue],icon:"icons/owbGrid.svg"}),X.push({id:"home",class:{base:"home",valueLabel:"",animated:y.value,animatedReverse:x.value},position:{row:0,column:2},label:["Haus",c(b.value).textValue],icon:"icons/owbHouse.svg"}),n.getPvConfigured&&X.push({id:"pv",class:{base:"pv",valueLabel:"fill-success",animated:C.value,animatedReverse:!1},position:{row:1,column:0},label:["PV",c(_.value).textValue],icon:"icons/owbPV.svg"}),n.batteryConfigured&&X.push({id:"battery",class:{base:"battery",valueLabel:"",animated:m.value,animatedReverse:p.value},position:{row:1,column:2},label:["Speicher",c(f.value).textValue],soc:v.value,icon:"icons/owbBattery.svg"}),S.value.length>0&&(S.value.length<=3?(X.push({id:"charge-point-1",class:{base:"charge-point",valueLabel:"",animated:z.value,animatedReverse:H.value},position:{row:2,column:S.value.length>1?0:1},label:[E.value,c(P.value).textValue],icon:"icons/owbChargePoint.svg"}),de.value&&X.push({id:"vehicle-1",class:{base:"vehicle",valueLabel:"fill-"+D.value.class,animated:z.value,animatedReverse:H.value},position:{row:3,column:S.value.length>1?0:1},label:[T.value||"---",D.value.label||"---"],soc:(Q.value.value?.soc||0)/100,icon:"icons/owbVehicle.svg"}),S.value.length>1&&X.push({id:"charge-point-2",class:{base:"charge-point",valueLabel:"",animated:U.value,animatedReverse:$.value},position:{row:2,column:S.value.length>2?1:2},label:[A.value,c(q.value).textValue],icon:"icons/owbChargePoint.svg"}),ae.value&&X.push({id:"vehicle-2",class:{base:"vehicle",valueLabel:"fill-"+fe.value.class,animated:U.value,animatedReverse:$.value},position:{row:3,column:S.value.length>2?1:2},label:[B.value||"---",fe.value.label||"---"],soc:(J.value.value?.soc||0)/100,icon:"icons/owbVehicle.svg"}),S.value.length>2&&X.push({id:"charge-point-3",class:{base:"charge-point",valueLabel:"",animated:Y.value,animatedReverse:G.value},position:{row:2,column:2},label:[O.value,c(M.value).textValue],icon:"icons/owbChargePoint.svg"}),we.value&&X.push({id:"vehicle-3",class:{base:"vehicle",valueLabel:"fill-"+Z.value.class,animated:Y.value,animatedReverse:G.value},position:{row:3,column:2},label:[Ee.value||"---",Z.value.label||"---"],soc:(Xe.value.value?.soc||0)/100,icon:"icons/owbVehicle.svg"})):X.push({id:"charge-point-sum",class:{base:"charge-point",valueLabel:"",animated:et.value,animatedReverse:dt.value},position:{row:2,column:1},label:["Ladepunkte",c(_t.value).textValue],icon:"icons/owbChargePoint.svg"})),X}),ht=g(()=>S.value?.length>0?S.value.length>3?3:4:3);ge(ht,X=>{i.value.numRows=X},{immediate:!0});const It=X=>{const ce=i.value.yMin+i.value.strokeWidth+i.value.circleRadius,ye=i.value.yMax-i.value.strokeWidth-i.value.circleRadius-ce;return X*(ye/(i.value.numRows-1))+ce},Dt=X=>{const ce=i.value.xMin+i.value.strokeWidth+j.value/2,ye=i.value.xMax-i.value.strokeWidth-j.value/2-ce;return X*(ye/(i.value.numColumns-1))+ce},$t=X=>{const ce=Dt(X);return X<(i.value.numColumns-1)/2?ce+j.value/2-i.value.circleRadius:X>(i.value.numColumns-1)/2?ce-j.value/2+i.value.circleRadius:ce},Ot=X=>{const ce=document.getElementById(X);if(ce==null||!(ce instanceof SVGGraphicsElement))return{x:0,y:0,width:0,height:0};const Oe=ce.getBBox();return{x:Oe.x,y:Oe.y,width:Oe.width,height:Oe.height}},ct=X=>{const ce=document.querySelector(`#${X}`);ce&&ce.beginElement()},j=g(()=>(i.value.xMax-i.value.xMin-i.value.strokeWidth-i.value.numColumns)/i.value.numColumns),re={mqttStore:n,svgSize:i,svgViewBox:o,svgStrokeWidth:s,svgIconWidth:r,svgIconHeight:a,svgFontSize:l,absoluteValueObject:c,gridPower:u,gridConsumption:d,gridFeedIn:h,batteryPower:f,batteryDischarging:m,batteryCharging:p,batterySoc:v,homePower:b,homeConsumption:x,homeProduction:y,pvPower:_,pvProduction:C,connectedChargePoints:S,chargePoint1Name:E,chargePoint2Name:A,chargePoint3Name:O,chargePoint1Power:P,chargePoint2Power:q,chargePoint3Power:M,chargePoint1Charging:H,chargePoint1Discharging:z,chargePoint2Charging:$,chargePoint2Discharging:U,chargePoint3Charging:G,chargePoint3Discharging:Y,translateChargeMode:te,chargePoint1VehicleConnected:de,chargePoint1ConnectedVehicleChargeMode:D,chargePoint1ConnectedVehicleName:T,chargePoint1ConnectedVehicleSoc:Q,chargePoint2VehicleConnected:ae,chargePoint2ConnectedVehicleChargeMode:fe,chargePoint2ConnectedVehicleName:B,chargePoint2ConnectedVehicleSoc:J,chargePoint3VehicleConnected:we,chargePoint3ConnectedVehicleChargeMode:Z,chargePoint3ConnectedVehicleName:Ee,chargePoint3ConnectedVehicleSoc:Xe,chargePointSumPower:_t,chargePointSumDischarging:et,chargePointSumCharging:dt,svgComponents:mt,calculatedRows:ht,calcRowY:It,calcColumnX:Dt,calcFlowLineAnchorX:$t,calcSvgElementBoundingBox:Ot,beginAnimation:ct,svgRectWidth:j};return Object.defineProperty(re,"__isScriptSetup",{enumerable:!1,value:!0}),re}}),Ym={class:"svg-container"},Zm=["viewBox"],Xm={id:"layer1",style:{display:"inline"}},Km=["d"],Qm={id:"layer2",style:{display:"inline"}},Gm=["cx","cy","r"],Jm=["transform","onClick"],ev=["id"],tv=["x","y","width","height"],nv=["id"],iv=["x","y","width","height","rx","ry"],ov=["x","y","width","height","rx","ry"],sv=["clip-path"],rv=["id","x","y"],av=["id","values"],lv=["id","x","y"],cv=["transform"],uv=["r"],dv=["r"],hv=["r","clip-path"],fv=["href","x","y","height","width"];function gv(t,e,n,i,o,s){return V(),K("div",Ym,[(V(),K("svg",{viewBox:i.svgViewBox,version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},[R("g",Xm,[(V(!0),K(De,null,Je(i.svgComponents,r=>(V(),K("path",{key:r.id,class:Et([r.class.base,{animated:r.class.animated},{animatedReverse:r.class.animatedReverse}]),d:r.class.base!=="vehicle"?`M ${i.calcFlowLineAnchorX(r.position.column)}, ${i.calcRowY(r.position.row)} ${i.calcColumnX(1)}, ${i.calcRowY(1)}`:`M ${i.calcFlowLineAnchorX(r.position.column)}, ${i.calcRowY(r.position.row)} ${i.calcFlowLineAnchorX(r.position.column)}, ${i.calcRowY(r.position.row-1)}`},null,10,Km))),128))]),R("g",Qm,[R("circle",{id:"center",cx:i.calcColumnX(1),cy:i.calcRowY(1),r:i.svgSize.circleRadius/3},null,8,Gm),(V(!0),K(De,null,Je(i.svgComponents,r=>(V(),K("g",{key:r.id,class:Et(r.class.base),transform:`translate(${i.calcColumnX(r.position.column)}, ${i.calcRowY(r.position.row)})`,onClick:a=>i.beginAnimation(`animate-label-${r.id}`)},[R("defs",null,[r.soc?(V(),K("clipPath",{key:0,id:`clip-soc-${r.id}`},[R("rect",{x:-i.svgSize.circleRadius-i.svgSize.strokeWidth,y:(i.svgSize.circleRadius+i.svgSize.strokeWidth)*(1-2*r.soc),width:(i.svgSize.circleRadius+i.svgSize.strokeWidth)*2,height:(i.svgSize.circleRadius+i.svgSize.strokeWidth)*2*r.soc},null,8,tv)],8,ev)):ue("",!0),R("clipPath",{id:`clip-label-${r.id}`},[R("rect",{x:-i.svgRectWidth/2,y:-i.svgSize.circleRadius,width:i.svgRectWidth,height:i.svgSize.circleRadius*2,rx:i.svgSize.circleRadius,ry:i.svgSize.circleRadius},null,8,iv)],8,nv)]),R("rect",{x:-i.svgRectWidth/2,y:-i.svgSize.circleRadius,width:i.svgRectWidth,height:i.svgSize.circleRadius*2,rx:i.svgSize.circleRadius,ry:i.svgSize.circleRadius},null,8,ov),R("text",{"clip-path":`url(#clip-label-${r.id})`},[R("tspan",{id:`label-${r.id}`,"text-anchor":"start",x:-i.svgRectWidth/2+2*i.svgSize.circleRadius+i.svgSize.strokeWidth,y:-i.svgSize.textSize/2},[i.calcSvgElementBoundingBox(`label-${r.id}`).width>i.svgRectWidth-2*i.svgSize.circleRadius-2*i.svgSize.strokeWidth?(V(),K("animate",{key:0,id:`animate-label-${r.id}`,xmlns:"http://www.w3.org/2000/svg",attributeName:"x",dur:"5s",values:"0; "+(-i.calcSvgElementBoundingBox(`label-${r.id}`).width+i.svgRectWidth-2.5*i.svgSize.circleRadius-2*i.svgSize.strokeWidth)+"; 0;",repeatCount:"0",additive:"sum"},null,8,av)):ue("",!0),Re(" "+le(r.label[0]),1)],8,rv),R("tspan",{id:`value-${r.id}`,class:Et(r.class.valueLabel),"text-anchor":"end",x:2*i.svgSize.circleRadius+i.svgSize.strokeWidth,y:i.svgSize.textSize},le(r.label[1]),11,lv)],8,sv),R("g",{transform:`translate(${i.svgSize.circleRadius-i.svgRectWidth/2}, 0)`},[R("circle",{cx:"0",cy:"0",r:i.svgSize.circleRadius,class:"background-circle"},null,8,uv),R("circle",{cx:"0",cy:"0",r:i.svgSize.circleRadius,class:Et({soc:r.soc})},null,10,dv),r.soc?(V(),K("circle",{key:0,cx:"0",cy:"0",r:i.svgSize.circleRadius,"clip-path":`url(#clip-soc-${r.id})`},null,8,hv)):ue("",!0),R("image",{href:r.icon,x:-i.svgIconWidth/2,y:-i.svgIconHeight/2,height:i.svgIconHeight,width:i.svgIconWidth},null,8,fv)],8,cv)],10,Jm))),128))])],8,Zm))])}const mv=Me(Um,[["render",gv],["__scopeId","data-v-62f971c1"],["__file","EnergyFlowChart.vue"]]);/*! +var zg=Object.defineProperty;var Bg=(t,e,n)=>e in t?zg(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Ae=(t,e,n)=>Bg(t,typeof e!="symbol"?e+"":e,n);import{i as Vs,e as xn,r as N,a as g,o as Lt,j as cn,G as gd,k as rn,R as md,h as w,H as Js,I as Va,J as Pt,E as _e,v as di,g as $e,c as ze,w as ge,p as Ng,K as er,L as tr,d as Ge,M as vd,N as Jn,O as pd,P as Wg,S as Go,T as Dr,U as Es,V as Or,W as Po,X as Hg,Y as jg,m as nr,l as $g,q as Ug,Z as Yg,$ as Ea,a0 as Ol,a1 as To,Q as Ve,x as Se,a2 as Zg,_ as Me,z as V,a3 as K,a4 as R,a5 as De,a6 as Je,F as Et,a7 as ue,D as Re,a8 as le,a9 as bd,aa as Xg,u as Kg,ab as Sn,n as at,ac as yd,ad as Qg,A as ne,B as L,C as I,ae as Aa,af as Gg,ag as _d,ah as oi,ai as tn,s as Jg,aj as xd,ak as em,al as Sd,am as ei,an as Rn,ao as tm,ap as wn,f as nm,aq as Vl,ar as qa,as as Ra,at as im,au as om,av as eo,aw as El,ax as ks,ay as sm,az as rm,aA as am,aB as lm,aC as Al,aD as ql,aE as cm,aF as wd,aG as um,aH as La,aI as dm,aJ as hm,aK as fm}from"./index-EKspHiQe.js";import{t as yo,d as Io,Q as gm,v as Rl,w as Ll,x as mm,a as un,c as dn,k as In,m as ir,n as or,o as Do,q as sr,l as vm,u as kd,y as Fa,b as Cd,z as Md,A as Pd,e as Td,f as pm,B as rr,h as bm,C as ym,D as _m,E as xm,F as Id,G as Dd,H as Sm,I as Fl,J as wm,K as km,L as Cm,M as zl,N as Mm,O as Bl,P as Pm,R as Tm,S as Nl,p as _o,g as Pi,T as Im,s as an,r as pn}from"./use-quasar-uR0IoSjA.js";import{u as Be}from"./mqtt-store-DD98gHuI.js";let Vr,Jo=0;const St=new Array(256);for(let t=0;t<256;t++)St[t]=(t+256).toString(16).substring(1);const Dm=(()=>{const t=typeof crypto<"u"?crypto:typeof window<"u"?window.crypto||window.msCrypto:void 0;if(t!==void 0){if(t.randomBytes!==void 0)return t.randomBytes;if(t.getRandomValues!==void 0)return e=>{const n=new Uint8Array(e);return t.getRandomValues(n),n}}return e=>{const n=[];for(let i=e;i>0;i--)n.push(Math.floor(Math.random()*256));return n}})(),Wl=4096;function sa(){(Vr===void 0||Jo+16>Wl)&&(Jo=0,Vr=Dm(Wl));const t=Array.prototype.slice.call(Vr,Jo,Jo+=16);return t[6]=t[6]&15|64,t[8]=t[8]&63|128,St[t[0]]+St[t[1]]+St[t[2]]+St[t[3]]+"-"+St[t[4]]+St[t[5]]+"-"+St[t[6]]+St[t[7]]+"-"+St[t[8]]+St[t[9]]+"-"+St[t[10]]+St[t[11]]+St[t[12]]+St[t[13]]+St[t[14]]+St[t[15]]}let Om=0;const Vm=["click","keydown"],Em={icon:String,label:[Number,String],alert:[Boolean,String],alertIcon:String,name:{type:[Number,String],default:()=>`t_${Om++}`},noCaps:Boolean,tabindex:[String,Number],disable:Boolean,contentClass:String,ripple:{type:[Boolean,Object],default:!0}};function Am(t,e,n,i){const o=Vs(gd,xn);if(o===xn)return console.error("QTab/QRouteTab component needs to be child of QTabs"),xn;const{proxy:s}=$e(),r=N(null),a=N(null),l=N(null),c=g(()=>t.disable===!0||t.ripple===!1?!1:Object.assign({keyCodes:[13,32],early:!0},t.ripple===!0?{}:t.ripple)),u=g(()=>o.currentModel.value===t.name),d=g(()=>"q-tab relative-position self-stretch flex flex-center text-center"+(u.value===!0?" q-tab--active"+(o.tabProps.value.activeClass?" "+o.tabProps.value.activeClass:"")+(o.tabProps.value.activeColor?` text-${o.tabProps.value.activeColor}`:"")+(o.tabProps.value.activeBgColor?` bg-${o.tabProps.value.activeBgColor}`:""):" q-tab--inactive")+(t.icon&&t.label&&o.tabProps.value.inlineLabel===!1?" q-tab--full":"")+(t.noCaps===!0||o.tabProps.value.noCaps===!0?" q-tab--no-caps":"")+(t.disable===!0?" disabled":" q-focusable q-hoverable cursor-pointer")),h=g(()=>"q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable "+(o.tabProps.value.inlineLabel===!0?"row no-wrap q-tab__content--inline":"column")+(t.contentClass!==void 0?` ${t.contentClass}`:"")),f=g(()=>t.disable===!0||o.hasFocus.value===!0||u.value===!1&&o.hasActiveTab.value===!0?-1:t.tabindex||0);function m(y,_){if(_!==!0&&r.value!==null&&r.value.focus(),t.disable!==!0){o.updateModel({name:t.name}),n("click",y);return}}function p(y){Js(y,[13,32])?m(y,!0):Va(y)!==!0&&y.keyCode>=35&&y.keyCode<=40&&y.altKey!==!0&&y.metaKey!==!0&&o.onKbdNavigate(y.keyCode,s.$el)===!0&&Pt(y),n("keydown",y)}function v(){const y=o.tabProps.value.narrowIndicator,_=[],C=w("div",{ref:l,class:["q-tab__indicator",o.tabProps.value.indicatorClass]});t.icon!==void 0&&_.push(w(_e,{class:"q-tab__icon",name:t.icon})),t.label!==void 0&&_.push(w("div",{class:"q-tab__label"},t.label)),t.alert!==!1&&_.push(t.alertIcon!==void 0?w(_e,{class:"q-tab__alert-icon",color:t.alert!==!0?t.alert:void 0,name:t.alertIcon}):w("div",{class:"q-tab__alert"+(t.alert!==!0?` text-${t.alert}`:"")})),y===!0&&_.push(C);const S=[w("div",{class:"q-focus-helper",tabindex:-1,ref:r}),w("div",{class:h.value},di(e.default,_))];return y===!1&&S.push(C),S}const b={name:g(()=>t.name),rootRef:a,tabIndicatorRef:l,routeData:i};Lt(()=>{o.unregisterTab(b)}),cn(()=>{o.registerTab(b)});function x(y,_){const C={ref:a,class:d.value,tabindex:f.value,role:"tab","aria-selected":u.value===!0?"true":"false","aria-disabled":t.disable===!0?"true":void 0,onClick:m,onKeydown:p,..._};return rn(w(y,C,v()),[[md,c.value]])}return{renderTab:x,$tabs:o}}const Er=ze({name:"QTab",props:Em,emits:Vm,setup(t,{slots:e,emit:n}){const{renderTab:i}=Am(t,e,n);return()=>i("div")}});let Oo=!1;{const t=document.createElement("div");t.setAttribute("dir","rtl"),Object.assign(t.style,{width:"1px",height:"1px",overflow:"auto"});const e=document.createElement("div");Object.assign(e.style,{width:"1000px",height:"1px"}),document.body.appendChild(t),t.appendChild(e),t.scrollLeft=-1e3,Oo=t.scrollLeft>=0,t.remove()}function qm(t,e,n){const i=n===!0?["left","right"]:["top","bottom"];return`absolute-${e===!0?i[0]:i[1]}${t?` text-${t}`:""}`}const Rm=["left","center","right","justify"],Lm=ze({name:"QTabs",props:{modelValue:[Number,String],align:{type:String,default:"center",validator:t=>Rm.includes(t)},breakpoint:{type:[String,Number],default:600},vertical:Boolean,shrink:Boolean,stretch:Boolean,activeClass:String,activeColor:String,activeBgColor:String,indicatorColor:String,leftIcon:String,rightIcon:String,outsideArrows:Boolean,mobileArrows:Boolean,switchIndicator:Boolean,narrowIndicator:Boolean,inlineLabel:Boolean,noCaps:Boolean,dense:Boolean,contentClass:String,"onUpdate:modelValue":[Function,Array]},setup(t,{slots:e,emit:n}){const{proxy:i}=$e(),{$q:o}=i,{registerTick:s}=yo(),{registerTick:r}=yo(),{registerTick:a}=yo(),{registerTimeout:l,removeTimeout:c}=Io(),{registerTimeout:u,removeTimeout:d}=Io(),h=N(null),f=N(null),m=N(t.modelValue),p=N(!1),v=N(!0),b=N(!1),x=N(!1),y=[],_=N(0),C=N(!1);let S=null,E=null,A;const O=g(()=>({activeClass:t.activeClass,activeColor:t.activeColor,activeBgColor:t.activeBgColor,indicatorClass:qm(t.indicatorColor,t.switchIndicator,t.vertical),narrowIndicator:t.narrowIndicator,inlineLabel:t.inlineLabel,noCaps:t.noCaps})),P=g(()=>{const j=_.value,re=m.value;for(let X=0;X`q-tabs__content--align-${p.value===!0?"left":x.value===!0?"justify":t.align}`),M=g(()=>`q-tabs row no-wrap items-center q-tabs--${p.value===!0?"":"not-"}scrollable q-tabs--${t.vertical===!0?"vertical":"horizontal"} q-tabs__arrows--${t.outsideArrows===!0?"outside":"inside"} q-tabs--mobile-with${t.mobileArrows===!0?"":"out"}-arrows`+(t.dense===!0?" q-tabs--dense":"")+(t.shrink===!0?" col-shrink":"")+(t.stretch===!0?" self-stretch":"")),H=g(()=>"q-tabs__content scroll--mobile row no-wrap items-center self-stretch hide-scrollbar relative-position "+q.value+(t.contentClass!==void 0?` ${t.contentClass}`:"")),z=g(()=>t.vertical===!0?{container:"height",content:"offsetHeight",scroll:"scrollHeight"}:{container:"width",content:"offsetWidth",scroll:"scrollWidth"}),$=g(()=>t.vertical!==!0&&o.lang.rtl===!0),U=g(()=>Oo===!1&&$.value===!0);ge($,T),ge(()=>t.modelValue,j=>{G({name:j,setCurrent:!0,skipEmit:!0})}),ge(()=>t.outsideArrows,Y);function G({name:j,setCurrent:re,skipEmit:X}){m.value!==j&&(X!==!0&&t["onUpdate:modelValue"]!==void 0&&n("update:modelValue",j),(re===!0||t["onUpdate:modelValue"]===void 0)&&(de(m.value,j),m.value=j))}function Y(){s(()=>{te({width:h.value.offsetWidth,height:h.value.offsetHeight})})}function te(j){if(z.value===void 0||f.value===null)return;const re=j[z.value.container],X=Math.min(f.value[z.value.scroll],Array.prototype.reduce.call(f.value.children,(Oe,ye)=>Oe+(ye[z.value.content]||0),0)),ce=re>0&&X>re;p.value=ce,ce===!0&&r(T),x.value=reOe.name.value===j):null,ce=re!=null&&re!==""?y.find(Oe=>Oe.name.value===re):null;if(ct===!0)ct=!1;else if(X&&ce){const Oe=X.tabIndicatorRef.value,ye=ce.tabIndicatorRef.value;S!==null&&(clearTimeout(S),S=null),Oe.style.transition="none",Oe.style.transform="none",ye.style.transition="none",ye.style.transform="none";const Pe=Oe.getBoundingClientRect(),ot=ye.getBoundingClientRect();ye.style.transform=t.vertical===!0?`translate3d(0,${Pe.top-ot.top}px,0) scale3d(1,${ot.height?Pe.height/ot.height:1},1)`:`translate3d(${Pe.left-ot.left}px,0,0) scale3d(${ot.width?Pe.width/ot.width:1},1,1)`,a(()=>{S=setTimeout(()=>{S=null,ye.style.transition="transform .25s cubic-bezier(.4, 0, .2, 1)",ye.style.transform="none"},70)})}ce&&p.value===!0&&D(ce.rootRef.value)}function D(j){const{left:re,width:X,top:ce,height:Oe}=f.value.getBoundingClientRect(),ye=j.getBoundingClientRect();let Pe=t.vertical===!0?ye.top-ce:ye.left-re;if(Pe<0){f.value[t.vertical===!0?"scrollTop":"scrollLeft"]+=Math.floor(Pe),T();return}Pe+=t.vertical===!0?ye.height-Oe:ye.width-X,Pe>0&&(f.value[t.vertical===!0?"scrollTop":"scrollLeft"]+=Math.ceil(Pe),T())}function T(){const j=f.value;if(j===null)return;const re=j.getBoundingClientRect(),X=t.vertical===!0?j.scrollTop:Math.abs(j.scrollLeft);$.value===!0?(v.value=Math.ceil(X+re.width)0):(v.value=X>0,b.value=t.vertical===!0?Math.ceil(X+re.height){Z(j)===!0&&B()},5)}function ae(){Q(U.value===!0?Number.MAX_SAFE_INTEGER:0)}function fe(){Q(U.value===!0?0:Number.MAX_SAFE_INTEGER)}function B(){E!==null&&(clearInterval(E),E=null)}function J(j,re){const X=Array.prototype.filter.call(f.value.children,ot=>ot===re||ot.matches&&ot.matches(".q-tab.q-focusable")===!0),ce=X.length;if(ce===0)return;if(j===36)return D(X[0]),X[0].focus(),!0;if(j===35)return D(X[ce-1]),X[ce-1].focus(),!0;const Oe=j===(t.vertical===!0?38:37),ye=j===(t.vertical===!0?40:39),Pe=Oe===!0?-1:ye===!0?1:void 0;if(Pe!==void 0){const ot=$.value===!0?-1:1,tt=X.indexOf(re)+Pe*ot;return tt>=0&&ttU.value===!0?{get:j=>Math.abs(j.scrollLeft),set:(j,re)=>{j.scrollLeft=-re}}:t.vertical===!0?{get:j=>j.scrollTop,set:(j,re)=>{j.scrollTop=re}}:{get:j=>j.scrollLeft,set:(j,re)=>{j.scrollLeft=re}});function Z(j){const re=f.value,{get:X,set:ce}=we.value;let Oe=!1,ye=X(re);const Pe=j=j)&&(Oe=!0,ye=j),ce(re,ye),T(),Oe}function Ee(j,re){for(const X in j)if(j[X]!==re[X])return!1;return!0}function Xe(){let j=null,re={matchedLen:0,queryDiff:9999,hrefLen:0};const X=y.filter(Pe=>Pe.routeData!==void 0&&Pe.routeData.hasRouterLink.value===!0),{hash:ce,query:Oe}=i.$route,ye=Object.keys(Oe).length;for(const Pe of X){const ot=Pe.routeData.exact.value===!0;if(Pe.routeData[ot===!0?"linkIsExactActive":"linkIsActive"].value!==!0)continue;const{hash:tt,query:vt,matched:Vt,href:W}=Pe.routeData.resolvedLink.value,me=Object.keys(vt).length;if(ot===!0){if(tt!==ce||me!==ye||Ee(Oe,vt)===!1)continue;j=Pe.name.value;break}if(tt!==""&&tt!==ce||me!==0&&Ee(vt,Oe)===!1)continue;const ke={matchedLen:Vt.length,queryDiff:ye-me,hrefLen:W.length-tt.length};if(ke.matchedLen>re.matchedLen){j=Pe.name.value,re=ke;continue}else if(ke.matchedLen!==re.matchedLen)continue;if(ke.queryDiffre.hrefLen&&(j=Pe.name.value,re=ke)}if(j===null&&y.some(Pe=>Pe.routeData===void 0&&Pe.name.value===m.value)===!0){ct=!1;return}G({name:j,setCurrent:!0})}function _t(j){if(c(),C.value!==!0&&h.value!==null&&j.target&&typeof j.target.closest=="function"){const re=j.target.closest(".q-tab");re&&h.value.contains(re)===!0&&(C.value=!0,p.value===!0&&D(re))}}function et(){l(()=>{C.value=!1},30)}function dt(){Dt.avoidRouteWatcher===!1?u(Xe):d()}function mt(){if(A===void 0){const j=ge(()=>i.$route.fullPath,dt);A=()=>{j(),A=void 0}}}function ht(j){y.push(j),_.value++,Y(),j.routeData===void 0||i.$route===void 0?u(()=>{if(p.value===!0){const re=m.value,X=re!=null&&re!==""?y.find(ce=>ce.name.value===re):null;X&&D(X.rootRef.value)}}):(mt(),j.routeData.hasRouterLink.value===!0&&dt())}function It(j){y.splice(y.indexOf(j),1),_.value--,Y(),A!==void 0&&j.routeData!==void 0&&(y.every(re=>re.routeData===void 0)===!0&&A(),dt())}const Dt={currentModel:m,tabProps:O,hasFocus:C,hasActiveTab:P,registerTab:ht,unregisterTab:It,verifyRouteModel:dt,updateModel:G,onKbdNavigate:J,avoidRouteWatcher:!1};Ng(gd,Dt);function $t(){S!==null&&clearTimeout(S),B(),A!==void 0&&A()}let Ot,ct;return Lt($t),er(()=>{Ot=A!==void 0,$t()}),tr(()=>{Ot===!0&&(mt(),ct=!0,dt()),Y()}),()=>w("div",{ref:h,class:M.value,role:"tablist",onFocusin:_t,onFocusout:et},[w(gm,{onResize:te}),w("div",{ref:f,class:H.value,onScroll:T},Ge(e.default)),w(_e,{class:"q-tabs__arrow q-tabs__arrow--left absolute q-tab__icon"+(v.value===!0?"":" q-tabs__arrow--faded"),name:t.leftIcon||o.iconSet.tabs[t.vertical===!0?"up":"left"],onMousedownPassive:ae,onTouchstartPassive:ae,onMouseupPassive:B,onMouseleavePassive:B,onTouchendPassive:B}),w(_e,{class:"q-tabs__arrow q-tabs__arrow--right absolute q-tab__icon"+(b.value===!0?"":" q-tabs__arrow--faded"),name:t.rightIcon||o.iconSet.tabs[t.vertical===!0?"down":"right"],onMousedownPassive:fe,onTouchstartPassive:fe,onMouseupPassive:B,onMouseleavePassive:B,onTouchendPassive:B})])}});function Fm(t){const e=[.06,6,50];return typeof t=="string"&&t.length&&t.split(":").forEach((n,i)=>{const o=parseFloat(n);o&&(e[i]=o)}),e}const zm=vd({name:"touch-swipe",beforeMount(t,{value:e,arg:n,modifiers:i}){if(i.mouse!==!0&&Jn.has.touch!==!0)return;const o=i.mouseCapture===!0?"Capture":"",s={handler:e,sensitivity:Fm(n),direction:Rl(i),noop:pd,mouseStart(r){Ll(r,s)&&Wg(r)&&(Go(s,"temp",[[document,"mousemove","move",`notPassive${o}`],[document,"mouseup","end","notPassiveCapture"]]),s.start(r,!0))},touchStart(r){if(Ll(r,s)){const a=r.target;Go(s,"temp",[[a,"touchmove","move","notPassiveCapture"],[a,"touchcancel","end","notPassiveCapture"],[a,"touchend","end","notPassiveCapture"]]),s.start(r)}},start(r,a){Jn.is.firefox===!0&&Dr(t,!0);const l=Es(r);s.event={x:l.left,y:l.top,time:Date.now(),mouse:a===!0,dir:!1}},move(r){if(s.event===void 0)return;if(s.event.dir!==!1){Pt(r);return}const a=Date.now()-s.event.time;if(a===0)return;const l=Es(r),c=l.left-s.event.x,u=Math.abs(c),d=l.top-s.event.y,h=Math.abs(d);if(s.event.mouse!==!0){if(us.sensitivity[0]&&(s.event.dir=d<0?"up":"down"),s.direction.horizontal===!0&&u>h&&h<100&&f>s.sensitivity[0]&&(s.event.dir=c<0?"left":"right"),s.direction.up===!0&&us.sensitivity[0]&&(s.event.dir="up"),s.direction.down===!0&&u0&&u<100&&m>s.sensitivity[0]&&(s.event.dir="down"),s.direction.left===!0&&u>h&&c<0&&h<100&&f>s.sensitivity[0]&&(s.event.dir="left"),s.direction.right===!0&&u>h&&c>0&&h<100&&f>s.sensitivity[0]&&(s.event.dir="right"),s.event.dir!==!1?(Pt(r),s.event.mouse===!0&&(document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),mm(),s.styleCleanup=p=>{s.styleCleanup=void 0,document.body.classList.remove("non-selectable");const v=()=>{document.body.classList.remove("no-pointer-events--children")};p===!0?setTimeout(v,50):v()}),s.handler({evt:r,touch:s.event.mouse!==!0,mouse:s.event.mouse,direction:s.event.dir,duration:a,distance:{x:u,y:h}})):s.end(r)},end(r){s.event!==void 0&&(Or(s,"temp"),Jn.is.firefox===!0&&Dr(t,!1),s.styleCleanup!==void 0&&s.styleCleanup(!0),r!==void 0&&s.event.dir!==!1&&Pt(r),s.event=void 0)}};if(t.__qtouchswipe=s,i.mouse===!0){const r=i.mouseCapture===!0||i.mousecapture===!0?"Capture":"";Go(s,"main",[[t,"mousedown","mouseStart",`passive${r}`]])}Jn.has.touch===!0&&Go(s,"main",[[t,"touchstart","touchStart",`passive${i.capture===!0?"Capture":""}`],[t,"touchmove","noop","notPassiveCapture"]])},updated(t,e){const n=t.__qtouchswipe;n!==void 0&&(e.oldValue!==e.value&&(typeof e.value!="function"&&n.end(),n.handler=e.value),n.direction=Rl(e.modifiers))},beforeUnmount(t){const e=t.__qtouchswipe;e!==void 0&&(Or(e,"main"),Or(e,"temp"),Jn.is.firefox===!0&&Dr(t,!1),e.styleCleanup!==void 0&&e.styleCleanup(),delete t.__qtouchswipe)}});function Bm(){let t=Object.create(null);return{getCache:(e,n)=>t[e]===void 0?t[e]=typeof n=="function"?n():n:t[e],setCache(e,n){t[e]=n},hasCache(e){return Object.hasOwnProperty.call(t,e)},clearCache(e){e!==void 0?delete t[e]:t=Object.create(null)}}}const Od={name:{required:!0},disable:Boolean},Hl={setup(t,{slots:e}){return()=>w("div",{class:"q-panel scroll",role:"tabpanel"},Ge(e.default))}},Vd={modelValue:{required:!0},animated:Boolean,infinite:Boolean,swipeable:Boolean,vertical:Boolean,transitionPrev:String,transitionNext:String,transitionDuration:{type:[String,Number],default:300},keepAlive:Boolean,keepAliveInclude:[String,Array,RegExp],keepAliveExclude:[String,Array,RegExp],keepAliveMax:Number},Ed=["update:modelValue","beforeTransition","transition"];function Ad(){const{props:t,emit:e,proxy:n}=$e(),{getCache:i}=Bm(),{registerTimeout:o}=Io();let s,r;const a=N(null),l=N(null);function c(z){const $=t.vertical===!0?"up":"left";A((n.$q.lang.rtl===!0?-1:1)*(z.direction===$?1:-1))}const u=g(()=>[[zm,c,void 0,{horizontal:t.vertical!==!0,vertical:t.vertical,mouse:!0}]]),d=g(()=>t.transitionPrev||`slide-${t.vertical===!0?"down":"right"}`),h=g(()=>t.transitionNext||`slide-${t.vertical===!0?"up":"left"}`),f=g(()=>`--q-transition-duration: ${t.transitionDuration}ms`),m=g(()=>typeof t.modelValue=="string"||typeof t.modelValue=="number"?t.modelValue:String(t.modelValue)),p=g(()=>({include:t.keepAliveInclude,exclude:t.keepAliveExclude,max:t.keepAliveMax})),v=g(()=>t.keepAliveInclude!==void 0||t.keepAliveExclude!==void 0);ge(()=>t.modelValue,(z,$)=>{const U=_(z)===!0?C(z):-1;r!==!0&&E(U===-1?0:U{e("transition",z,$)},t.transitionDuration))});function b(){A(1)}function x(){A(-1)}function y(z){e("update:modelValue",z)}function _(z){return z!=null&&z!==""}function C(z){return s.findIndex($=>$.props.name===z&&$.props.disable!==""&&$.props.disable!==!0)}function S(){return s.filter(z=>z.props.disable!==""&&z.props.disable!==!0)}function E(z){const $=z!==0&&t.animated===!0&&a.value!==-1?"q-transition--"+(z===-1?d.value:h.value):null;l.value!==$&&(l.value=$)}function A(z,$=a.value){let U=$+z;for(;U!==-1&&U{r=!1});return}U+=z}t.infinite===!0&&s.length!==0&&$!==-1&&$!==s.length&&A(z,z===-1?s.length:-1)}function O(){const z=C(t.modelValue);return a.value!==z&&(a.value=z),!0}function P(){const z=_(t.modelValue)===!0&&O()&&s[a.value];return t.keepAlive===!0?[w(jg,p.value,[w(v.value===!0?i(m.value,()=>({...Hl,name:m.value})):Hl,{key:m.value,style:f.value},()=>z)])]:[w("div",{class:"q-panel scroll",style:f.value,key:m.value,role:"tabpanel"},[z])]}function q(){if(s.length!==0)return t.animated===!0?[w(Po,{name:l.value},P)]:P()}function M(z){return s=Hg(Ge(z.default,[])).filter($=>$.props!==null&&$.props.slot===void 0&&_($.props.name)===!0),s.length}function H(){return s}return Object.assign(n,{next:b,previous:x,goTo:y}),{panelIndex:a,panelDirectives:u,updatePanelsList:M,updatePanelIndex:O,getPanelContent:q,getEnabledPanels:S,getPanels:H,isValidPanelName:_,keepAliveProps:p,needsUniqueKeepAliveWrapper:v,goToPanelByOffset:A,goToPanel:y,nextPanel:b,previousPanel:x}}const Ar=ze({name:"QTabPanel",props:Od,setup(t,{slots:e}){return()=>w("div",{class:"q-tab-panel",role:"tabpanel"},Ge(e.default))}}),Nm=ze({name:"QTabPanels",props:{...Vd,...un},emits:Ed,setup(t,{slots:e}){const n=$e(),i=dn(t,n.proxy.$q),{updatePanelsList:o,getPanelContent:s,panelDirectives:r}=Ad(),a=g(()=>"q-tab-panels q-panel-parent"+(i.value===!0?" q-tab-panels--dark q-dark":""));return()=>(o(e),nr("div",{class:a.value},s(),"pan",t.swipeable,()=>r.value))}}),Wm=ze({name:"QPage",props:{padding:Boolean,styleFn:Function},setup(t,{slots:e}){const{proxy:{$q:n}}=$e(),i=Vs($g,xn);if(i===xn)return console.error("QPage needs to be a deep child of QLayout"),xn;if(Vs(Ug,xn)===xn)return console.error("QPage needs to be child of QPageContainer"),xn;const s=g(()=>{const a=(i.header.space===!0?i.header.size:0)+(i.footer.space===!0?i.footer.size:0);if(typeof t.styleFn=="function"){const l=i.isContainer.value===!0?i.containerHeight.value:n.screen.height;return t.styleFn(a,l)}return{minHeight:i.isContainer.value===!0?i.containerHeight.value-a+"px":n.screen.height===0?a!==0?`calc(100vh - ${a}px)`:"100vh":n.screen.height-a+"px"}}),r=g(()=>`q-page${t.padding===!0?" q-layout-padding":""}`);return()=>w("main",{class:r.value,style:s.value},Ge(e.default))}}),qd=ze({name:"QCarouselSlide",props:{...Od,imgSrc:String},setup(t,{slots:e}){const n=g(()=>t.imgSrc?{backgroundImage:`url("${t.imgSrc}")`}:{});return()=>w("div",{class:"q-carousel__slide",style:n.value},Ge(e.default))}}),Hm=ze({name:"QCarouselControl",props:{position:{type:String,default:"bottom-right",validator:t=>["top-right","top-left","bottom-right","bottom-left","top","right","bottom","left"].includes(t)},offset:{type:Array,default:()=>[18,18],validator:t=>t.length===2}},setup(t,{slots:e}){const n=g(()=>`q-carousel__control absolute absolute-${t.position}`),i=g(()=>({margin:`${t.offset[1]}px ${t.offset[0]}px`}));return()=>w("div",{class:n.value,style:i.value},Ge(e.default))}});let to=0;const Rd={fullscreen:Boolean,noRouteFullscreenExit:Boolean},Ld=["update:fullscreen","fullscreen"];function Fd(){const t=$e(),{props:e,emit:n,proxy:i}=t;let o,s,r;const a=N(!1);Yg(t)===!0&&ge(()=>i.$route.fullPath,()=>{e.noRouteFullscreenExit!==!0&&u()}),ge(()=>e.fullscreen,d=>{a.value!==d&&l()}),ge(a,d=>{n("update:fullscreen",d),n("fullscreen",d)});function l(){a.value===!0?u():c()}function c(){a.value!==!0&&(a.value=!0,r=i.$el.parentNode,r.replaceChild(s,i.$el),document.body.appendChild(i.$el),to++,to===1&&document.body.classList.add("q-body--fullscreen-mixin"),o={handler:u},Ol.add(o))}function u(){a.value===!0&&(o!==void 0&&(Ol.remove(o),o=void 0),r.replaceChild(i.$el,s),a.value=!1,to=Math.max(0,to-1),to===0&&(document.body.classList.remove("q-body--fullscreen-mixin"),i.$el.scrollIntoView!==void 0&&setTimeout(()=>{i.$el.scrollIntoView()})))}return Ea(()=>{s=document.createElement("span")}),cn(()=>{e.fullscreen===!0&&c()}),Lt(u),Object.assign(i,{toggleFullscreen:l,setFullscreen:c,exitFullscreen:u}),{inFullscreen:a,toggleFullscreen:l}}const jm=["top","right","bottom","left"],$m=["regular","flat","outline","push","unelevated"],zd=ze({name:"QCarousel",props:{...un,...Vd,...Rd,transitionPrev:{type:String,default:"fade"},transitionNext:{type:String,default:"fade"},height:String,padding:Boolean,controlColor:String,controlTextColor:String,controlType:{type:String,validator:t=>$m.includes(t),default:"flat"},autoplay:[Number,Boolean],arrows:Boolean,prevIcon:String,nextIcon:String,navigation:Boolean,navigationPosition:{type:String,validator:t=>jm.includes(t)},navigationIcon:String,navigationActiveIcon:String,thumbnails:Boolean},emits:[...Ld,...Ed],setup(t,{slots:e}){const{proxy:{$q:n}}=$e(),i=dn(t,n);let o=null,s;const{updatePanelsList:r,getPanelContent:a,panelDirectives:l,goToPanel:c,previousPanel:u,nextPanel:d,getEnabledPanels:h,panelIndex:f}=Ad(),{inFullscreen:m}=Fd(),p=g(()=>m.value!==!0&&t.height!==void 0?{height:t.height}:{}),v=g(()=>t.vertical===!0?"vertical":"horizontal"),b=g(()=>t.navigationPosition||(t.vertical===!0?"right":"bottom")),x=g(()=>`q-carousel q-panel-parent q-carousel--with${t.padding===!0?"":"out"}-padding`+(m.value===!0?" fullscreen":"")+(i.value===!0?" q-carousel--dark q-dark":"")+(t.arrows===!0?` q-carousel--arrows-${v.value}`:"")+(t.navigation===!0?` q-carousel--navigation-${b.value}`:"")),y=g(()=>{const P=[t.prevIcon||n.iconSet.carousel[t.vertical===!0?"up":"left"],t.nextIcon||n.iconSet.carousel[t.vertical===!0?"down":"right"]];return t.vertical===!1&&n.lang.rtl===!0?P.reverse():P}),_=g(()=>t.navigationIcon||n.iconSet.carousel.navigationIcon),C=g(()=>t.navigationActiveIcon||_.value),S=g(()=>({color:t.controlColor,textColor:t.controlTextColor,round:!0,[t.controlType]:!0,dense:!0}));ge(()=>t.modelValue,()=>{t.autoplay&&E()}),ge(()=>t.autoplay,P=>{P?E():o!==null&&(clearTimeout(o),o=null)});function E(){const P=To(t.autoplay)===!0?Math.abs(t.autoplay):5e3;o!==null&&clearTimeout(o),o=setTimeout(()=>{o=null,P>=0?d():u()},P)}cn(()=>{t.autoplay&&E()}),Lt(()=>{o!==null&&clearTimeout(o)});function A(P,q){return w("div",{class:`q-carousel__control q-carousel__navigation no-wrap absolute flex q-carousel__navigation--${P} q-carousel__navigation--${b.value}`+(t.controlColor!==void 0?` text-${t.controlColor}`:"")},[w("div",{class:"q-carousel__navigation-inner flex flex-center no-wrap"},h().map(q))])}function O(){const P=[];if(t.navigation===!0){const q=e["navigation-icon"]!==void 0?e["navigation-icon"]:H=>w(Ve,{key:"nav"+H.name,class:`q-carousel__navigation-icon q-carousel__navigation-icon--${H.active===!0?"":"in"}active`,...H.btnProps,onClick:H.onClick}),M=s-1;P.push(A("buttons",(H,z)=>{const $=H.props.name,U=f.value===z;return q({index:z,maxIndex:M,name:$,active:U,btnProps:{icon:U===!0?C.value:_.value,size:"sm",...S.value},onClick:()=>{c($)}})}))}else if(t.thumbnails===!0){const q=t.controlColor!==void 0?` text-${t.controlColor}`:"";P.push(A("thumbnails",M=>{const H=M.props;return w("img",{key:"tmb#"+H.name,class:`q-carousel__thumbnail q-carousel__thumbnail--${H.name===t.modelValue?"":"in"}active`+q,src:H.imgSrc||H["img-src"],onClick:()=>{c(H.name)}})}))}return t.arrows===!0&&f.value>=0&&((t.infinite===!0||f.value>0)&&P.push(w("div",{key:"prev",class:`q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--${v.value} absolute flex flex-center`},[w(Ve,{icon:y.value[0],...S.value,onClick:u})])),(t.infinite===!0||f.value(s=r(e),w("div",{class:x.value,style:p.value},[nr("div",{class:"q-carousel__slides-container"},a(),"sl-cont",t.swipeable,()=>l.value)].concat(O())))}}),Um=Se({__name:"EnergyFlowChart",setup(t,{expose:e}){e(),Zg(X=>({"7061f1f7":s.value,"7c22ee07":l.value}));const n=Be(),i=N({xMin:0,xMax:150,yMin:0,yMax:105,circleRadius:10,strokeWidth:.5,textSize:5,numRows:4,numColumns:3}),o=g(()=>`${i.value.xMin} ${i.value.yMin} ${i.value.xMax} ${i.value.yMax}`),s=g(()=>i.value.strokeWidth),r=g(()=>i.value.circleRadius),a=g(()=>i.value.circleRadius),l=g(()=>`${i.value.textSize}px`),c=X=>{let ce={...X};return ce.textValue&&(ce.textValue=ce.textValue.replace(/^-/,"")),ce.value&&(ce.value=Math.abs(ce.value)),ce.scaledValue&&(ce.scaledValue=Math.abs(ce.scaledValue)),ce},u=g(()=>n.getGridPower("object")),d=g(()=>Number(u.value.value)>0),h=g(()=>Number(u.value.value)<0),f=g(()=>n.batteryTotalPower("object")),m=g(()=>Number(n.batteryTotalPower("value"))<0),p=g(()=>Number(n.batteryTotalPower("value"))>0),v=g(()=>Number(n.batterySocTotal)/100),b=g(()=>n.getHomePower("object")),x=g(()=>Number(b.value.value)>0),y=g(()=>Number(b.value.value)<0),_=g(()=>n.getPvPower("object")),C=g(()=>{const X=Number(_.value.value);return Math.abs(X)>=50}),S=g(()=>n.chargePointIds),E=g(()=>n.chargePointName(S.value[0])||"---"),A=g(()=>n.chargePointName(S.value[1])||"---"),O=g(()=>n.chargePointName(S.value[2])||"---"),P=g(()=>S.value.length>0?n.chargePointPower(S.value[0],"object")||{textValue:"Loading..."}:{textValue:"N/A"}),q=g(()=>S.value.length>0?n.chargePointPower(S.value[1],"object")||{textValue:"Loading..."}:{textValue:"N/A"}),M=g(()=>S.value.length>0?n.chargePointPower(S.value[2],"object")||{textValue:"Loading..."}:{textValue:"N/A"}),H=g(()=>Number(P.value.value)>0),z=g(()=>Number(P.value.value)<0),$=g(()=>Number(q.value.value)>0),U=g(()=>Number(q.value.value)<0),G=g(()=>Number(M.value.value)>0),Y=g(()=>Number(M.value.value)<0),te=X=>{switch(X){case"instant_charging":return{label:"Sofort",class:"danger"};case"pv_charging":return{label:"PV",class:"success"};case"scheduled_charging":return{label:"Zielladen",class:"primary"};case"time_charging":return{label:"Zeitladen",class:"warning"};case"eco_charging":return{label:"Eco",class:"secondary"};case"stop":return{label:"Stop",class:"dark"};default:return{label:"Stop",class:"dark"}}},de=g(()=>n.chargePointPlugState(S.value[0])),D=g(()=>{const X=n.chargePointConnectedVehicleChargeMode(S.value[0]);return te(X.value||"")}),T=g(()=>n.chargePointConnectedVehicleInfo(S.value[0]).value?.name||"---"),Q=g(()=>n.chargePointConnectedVehicleSoc(S.value[0])),ae=g(()=>n.chargePointPlugState(S.value[1])),fe=g(()=>{const X=n.chargePointConnectedVehicleChargeMode(S.value[1]);return te(X.value||"")}),B=g(()=>n.chargePointConnectedVehicleInfo(S.value[1]).value?.name||"---"),J=g(()=>n.chargePointConnectedVehicleSoc(S.value[1])),we=g(()=>n.chargePointPlugState(S.value[2])),Z=g(()=>{const X=n.chargePointConnectedVehicleChargeMode(S.value[2]);return te(X.value||"")}),Ee=g(()=>n.chargePointConnectedVehicleInfo(S.value[2]).value?.name||"---"),Xe=g(()=>n.chargePointConnectedVehicleSoc(S.value[2])),_t=g(()=>n.chargePointSumPower("object")),et=g(()=>Number(_t.value.value)<0),dt=g(()=>Number(_t.value.value)>0),mt=g(()=>{const X=[];return X.push({id:"grid",class:{base:"grid",valueLabel:h.value?"fill-success":d.value?"fill-danger":"",animated:d.value,animatedReverse:h.value},position:{row:0,column:0},label:["EVU",c(u.value).textValue],icon:"icons/owbGrid.svg"}),X.push({id:"home",class:{base:"home",valueLabel:"",animated:y.value,animatedReverse:x.value},position:{row:0,column:2},label:["Haus",c(b.value).textValue],icon:"icons/owbHouse.svg"}),n.getPvConfigured&&X.push({id:"pv",class:{base:"pv",valueLabel:"fill-success",animated:C.value,animatedReverse:!1},position:{row:1,column:0},label:["PV",c(_.value).textValue],icon:"icons/owbPV.svg"}),n.batteryConfigured&&X.push({id:"battery",class:{base:"battery",valueLabel:"",animated:m.value,animatedReverse:p.value},position:{row:1,column:2},label:["Speicher",c(f.value).textValue],soc:v.value,icon:"icons/owbBattery.svg"}),S.value.length>0&&(S.value.length<=3?(X.push({id:"charge-point-1",class:{base:"charge-point",valueLabel:"",animated:z.value,animatedReverse:H.value},position:{row:2,column:S.value.length>1?0:1},label:[E.value,c(P.value).textValue],icon:"icons/owbChargePoint.svg"}),de.value&&X.push({id:"vehicle-1",class:{base:"vehicle",valueLabel:"fill-"+D.value.class,animated:z.value,animatedReverse:H.value},position:{row:3,column:S.value.length>1?0:1},label:[T.value||"---",D.value.label||"---"],soc:(Q.value.value?.soc||0)/100,icon:"icons/owbVehicle.svg"}),S.value.length>1&&X.push({id:"charge-point-2",class:{base:"charge-point",valueLabel:"",animated:U.value,animatedReverse:$.value},position:{row:2,column:S.value.length>2?1:2},label:[A.value,c(q.value).textValue],icon:"icons/owbChargePoint.svg"}),ae.value&&X.push({id:"vehicle-2",class:{base:"vehicle",valueLabel:"fill-"+fe.value.class,animated:U.value,animatedReverse:$.value},position:{row:3,column:S.value.length>2?1:2},label:[B.value||"---",fe.value.label||"---"],soc:(J.value.value?.soc||0)/100,icon:"icons/owbVehicle.svg"}),S.value.length>2&&X.push({id:"charge-point-3",class:{base:"charge-point",valueLabel:"",animated:Y.value,animatedReverse:G.value},position:{row:2,column:2},label:[O.value,c(M.value).textValue],icon:"icons/owbChargePoint.svg"}),we.value&&X.push({id:"vehicle-3",class:{base:"vehicle",valueLabel:"fill-"+Z.value.class,animated:Y.value,animatedReverse:G.value},position:{row:3,column:2},label:[Ee.value||"---",Z.value.label||"---"],soc:(Xe.value.value?.soc||0)/100,icon:"icons/owbVehicle.svg"})):X.push({id:"charge-point-sum",class:{base:"charge-point",valueLabel:"",animated:et.value,animatedReverse:dt.value},position:{row:2,column:1},label:["Ladepunkte",c(_t.value).textValue],icon:"icons/owbChargePoint.svg"})),X}),ht=g(()=>S.value?.length>0?S.value.length>3?3:4:3);ge(ht,X=>{i.value.numRows=X},{immediate:!0});const It=X=>{const ce=i.value.yMin+i.value.strokeWidth+i.value.circleRadius,ye=i.value.yMax-i.value.strokeWidth-i.value.circleRadius-ce;return X*(ye/(i.value.numRows-1))+ce},Dt=X=>{const ce=i.value.xMin+i.value.strokeWidth+j.value/2,ye=i.value.xMax-i.value.strokeWidth-j.value/2-ce;return X*(ye/(i.value.numColumns-1))+ce},$t=X=>{const ce=Dt(X);return X<(i.value.numColumns-1)/2?ce+j.value/2-i.value.circleRadius:X>(i.value.numColumns-1)/2?ce-j.value/2+i.value.circleRadius:ce},Ot=X=>{const ce=document.getElementById(X);if(ce==null||!(ce instanceof SVGGraphicsElement))return{x:0,y:0,width:0,height:0};const Oe=ce.getBBox();return{x:Oe.x,y:Oe.y,width:Oe.width,height:Oe.height}},ct=X=>{const ce=document.querySelector(`#${X}`);ce&&ce.beginElement()},j=g(()=>(i.value.xMax-i.value.xMin-i.value.strokeWidth-i.value.numColumns)/i.value.numColumns),re={mqttStore:n,svgSize:i,svgViewBox:o,svgStrokeWidth:s,svgIconWidth:r,svgIconHeight:a,svgFontSize:l,absoluteValueObject:c,gridPower:u,gridConsumption:d,gridFeedIn:h,batteryPower:f,batteryDischarging:m,batteryCharging:p,batterySoc:v,homePower:b,homeConsumption:x,homeProduction:y,pvPower:_,pvProduction:C,connectedChargePoints:S,chargePoint1Name:E,chargePoint2Name:A,chargePoint3Name:O,chargePoint1Power:P,chargePoint2Power:q,chargePoint3Power:M,chargePoint1Charging:H,chargePoint1Discharging:z,chargePoint2Charging:$,chargePoint2Discharging:U,chargePoint3Charging:G,chargePoint3Discharging:Y,translateChargeMode:te,chargePoint1VehicleConnected:de,chargePoint1ConnectedVehicleChargeMode:D,chargePoint1ConnectedVehicleName:T,chargePoint1ConnectedVehicleSoc:Q,chargePoint2VehicleConnected:ae,chargePoint2ConnectedVehicleChargeMode:fe,chargePoint2ConnectedVehicleName:B,chargePoint2ConnectedVehicleSoc:J,chargePoint3VehicleConnected:we,chargePoint3ConnectedVehicleChargeMode:Z,chargePoint3ConnectedVehicleName:Ee,chargePoint3ConnectedVehicleSoc:Xe,chargePointSumPower:_t,chargePointSumDischarging:et,chargePointSumCharging:dt,svgComponents:mt,calculatedRows:ht,calcRowY:It,calcColumnX:Dt,calcFlowLineAnchorX:$t,calcSvgElementBoundingBox:Ot,beginAnimation:ct,svgRectWidth:j};return Object.defineProperty(re,"__isScriptSetup",{enumerable:!1,value:!0}),re}}),Ym={class:"svg-container"},Zm=["viewBox"],Xm={id:"layer1",style:{display:"inline"}},Km=["d"],Qm={id:"layer2",style:{display:"inline"}},Gm=["cx","cy","r"],Jm=["transform","onClick"],ev=["id"],tv=["x","y","width","height"],nv=["id"],iv=["x","y","width","height","rx","ry"],ov=["x","y","width","height","rx","ry"],sv=["clip-path"],rv=["id","x","y"],av=["id","values"],lv=["id","x","y"],cv=["transform"],uv=["r"],dv=["r"],hv=["r","clip-path"],fv=["href","x","y","height","width"];function gv(t,e,n,i,o,s){return V(),K("div",Ym,[(V(),K("svg",{viewBox:i.svgViewBox,version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},[R("g",Xm,[(V(!0),K(De,null,Je(i.svgComponents,r=>(V(),K("path",{key:r.id,class:Et([r.class.base,{animated:r.class.animated},{animatedReverse:r.class.animatedReverse}]),d:r.class.base!=="vehicle"?`M ${i.calcFlowLineAnchorX(r.position.column)}, ${i.calcRowY(r.position.row)} ${i.calcColumnX(1)}, ${i.calcRowY(1)}`:`M ${i.calcFlowLineAnchorX(r.position.column)}, ${i.calcRowY(r.position.row)} ${i.calcFlowLineAnchorX(r.position.column)}, ${i.calcRowY(r.position.row-1)}`},null,10,Km))),128))]),R("g",Qm,[R("circle",{id:"center",cx:i.calcColumnX(1),cy:i.calcRowY(1),r:i.svgSize.circleRadius/3},null,8,Gm),(V(!0),K(De,null,Je(i.svgComponents,r=>(V(),K("g",{key:r.id,class:Et(r.class.base),transform:`translate(${i.calcColumnX(r.position.column)}, ${i.calcRowY(r.position.row)})`,onClick:a=>i.beginAnimation(`animate-label-${r.id}`)},[R("defs",null,[r.soc?(V(),K("clipPath",{key:0,id:`clip-soc-${r.id}`},[R("rect",{x:-i.svgSize.circleRadius-i.svgSize.strokeWidth,y:(i.svgSize.circleRadius+i.svgSize.strokeWidth)*(1-2*r.soc),width:(i.svgSize.circleRadius+i.svgSize.strokeWidth)*2,height:(i.svgSize.circleRadius+i.svgSize.strokeWidth)*2*r.soc},null,8,tv)],8,ev)):ue("",!0),R("clipPath",{id:`clip-label-${r.id}`},[R("rect",{x:-i.svgRectWidth/2,y:-i.svgSize.circleRadius,width:i.svgRectWidth,height:i.svgSize.circleRadius*2,rx:i.svgSize.circleRadius,ry:i.svgSize.circleRadius},null,8,iv)],8,nv)]),R("rect",{x:-i.svgRectWidth/2,y:-i.svgSize.circleRadius,width:i.svgRectWidth,height:i.svgSize.circleRadius*2,rx:i.svgSize.circleRadius,ry:i.svgSize.circleRadius},null,8,ov),R("text",{"clip-path":`url(#clip-label-${r.id})`},[R("tspan",{id:`label-${r.id}`,"text-anchor":"start",x:-i.svgRectWidth/2+2*i.svgSize.circleRadius+i.svgSize.strokeWidth,y:-i.svgSize.textSize/2},[i.calcSvgElementBoundingBox(`label-${r.id}`).width>i.svgRectWidth-2*i.svgSize.circleRadius-2*i.svgSize.strokeWidth?(V(),K("animate",{key:0,id:`animate-label-${r.id}`,xmlns:"http://www.w3.org/2000/svg",attributeName:"x",dur:"5s",values:"0; "+(-i.calcSvgElementBoundingBox(`label-${r.id}`).width+i.svgRectWidth-2.5*i.svgSize.circleRadius-2*i.svgSize.strokeWidth)+"; 0;",repeatCount:"0",additive:"sum"},null,8,av)):ue("",!0),Re(" "+le(r.label[0]),1)],8,rv),R("tspan",{id:`value-${r.id}`,class:Et(r.class.valueLabel),"text-anchor":"end",x:2*i.svgSize.circleRadius+i.svgSize.strokeWidth,y:i.svgSize.textSize},le(r.label[1]),11,lv)],8,sv),R("g",{transform:`translate(${i.svgSize.circleRadius-i.svgRectWidth/2}, 0)`},[R("circle",{cx:"0",cy:"0",r:i.svgSize.circleRadius,class:"background-circle"},null,8,uv),R("circle",{cx:"0",cy:"0",r:i.svgSize.circleRadius,class:Et({soc:r.soc})},null,10,dv),r.soc?(V(),K("circle",{key:0,cx:"0",cy:"0",r:i.svgSize.circleRadius,"clip-path":`url(#clip-soc-${r.id})`},null,8,hv)):ue("",!0),R("image",{href:r.icon,x:-i.svgIconWidth/2,y:-i.svgIconHeight/2,height:i.svgIconHeight,width:i.svgIconWidth},null,8,fv)],8,cv)],10,Jm))),128))])],8,Zm))])}const mv=Me(Um,[["render",gv],["__scopeId","data-v-62f971c1"],["__file","EnergyFlowChart.vue"]]);/*! * @kurkle/color v0.3.4 * https://github.com/kurkle/color#readme * (c) 2024 Jukka Kurkela @@ -20,7 +20,7 @@ var zg=Object.defineProperty;var Bg=(t,e,n)=>e in t?zg(t,e,{enumerable:!0,config * https://www.chartjs.org * (c) 2023 chartjs-adapter-luxon Contributors * Released under the MIT license - */const Ax={datetime:he.DATETIME_MED_WITH_SECONDS,millisecond:"h:mm:ss.SSS a",second:he.TIME_WITH_SECONDS,minute:he.TIME_SIMPLE,hour:{hour:"numeric"},day:{day:"numeric",month:"short"},week:"DD",month:{month:"short",year:"numeric"},quarter:"'Q'q - yyyy",year:{year:"numeric"}};dh._date.override({_id:"luxon",_create:function(t){return he.fromMillis(t,this.options)},init(t){this.options.locale||(this.options.locale=t.locale)},formats:function(){return Ax},parse:function(t,e){const n=this.options,i=typeof t;return t===null||i==="undefined"?null:(i==="number"?t=this._create(t):i==="string"?typeof e=="string"?t=he.fromFormat(t,e,n):t=he.fromISO(t,n):t instanceof Date?t=he.fromJSDate(t,n):i==="object"&&!(t instanceof he)&&(t=he.fromObject(t,n)),t.isValid?t.valueOf():null)},format:function(t,e){const n=this._create(t);return typeof e=="string"?n.toFormat(e):n.toLocaleString(e)},add:function(t,e,n){const i={};return i[n]=e,this._create(t).plus(i).valueOf()},diff:function(t,e,n){return this._create(t).diff(this._create(e)).as(n).valueOf()},startOf:function(t,e,n){if(e==="isoWeek"){n=Math.trunc(Math.min(Math.max(0,n),6));const i=this._create(t);return i.minus({days:(i.weekday-n+7)%7}).startOf("day").valueOf()}return e?this._create(t).startOf(e).valueOf():t},endOf:function(t,e){return this._create(t).endOf(e).valueOf()}});const qx=Se({__name:"HistoryChart",props:{showLegend:{type:Boolean}},setup(t,{expose:e}){e(),Nn.register(Ph,Ei,Cn,Co,Hs,Ni,m0,Ch);const n=g(()=>r.showLegend),i=Be(),o=tl(),s=In(),r=t,a=N(null),l=g(()=>y?.value?.datasets.length>15),c=S=>{S.data.datasets.forEach((E,A)=>{typeof E.label=="string"&&o.isDatasetHidden(E.label)&&S.hide(A)}),S.update()};ge(()=>a.value?.chart,S=>{S&&c(S)},{immediate:!0});const u=g(()=>{const S=i.chartData,E=Math.floor(Date.now()/1e3);return S.filter(A=>A.timestamp>E-v.value)}),d=g(()=>i.chargePointIds),h=g(()=>i.chargePointName),f=g(()=>{const S=i.getGridId;return S!==void 0?i.getComponentName(S):"Zähler"}),m=g(()=>f.value),p=g(()=>i.vehicleList),v=g(()=>i.themeConfiguration?.history_chart_range||3600),b=g(()=>d.value.map(S=>({label:`${h.value(S)}`,unit:"kW",borderColor:"#4766b5",backgroundColor:"rgba(71, 102, 181, 0.2)",data:u.value.map(E=>({x:E.timestamp*1e3,y:E[`cp${S}-power`]||0})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"}))),x=g(()=>p.value.map(S=>{const E=`ev${S.id}-soc`;if(u.value.some(A=>E in A))return{label:`${S.name} SoC`,unit:"%",borderColor:"#9F8AFF",borderWidth:2,borderDash:[10,5],pointRadius:0,pointHoverRadius:4,pointHitRadius:5,data:u.value.map(A=>({x:A.timestamp*1e3,y:Number(A[E]??0)})),fill:!1,yAxisID:"y2"}}).filter(S=>S!==void 0)),y=g(()=>({datasets:[{label:f.value,unit:"kW",borderColor:"#a33c42",backgroundColor:"rgba(239,182,188, 0.2)",data:u.value.map(S=>({x:S.timestamp*1e3,y:S.grid})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"},{label:"Hausverbrauch",unit:"kW",borderColor:"#949aa1",backgroundColor:"rgba(148, 154, 161, 0.2)",data:u.value.map(S=>({x:S.timestamp*1e3,y:S["house-power"]})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"},{label:"PV ges.",unit:"kW",borderColor:"green",backgroundColor:"rgba(144, 238, 144, 0.2)",data:u.value.map(S=>({x:S.timestamp*1e3,y:S["pv-all"]})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"},{label:"Speicher ges.",unit:"kW",borderColor:"#b5a647",backgroundColor:"rgba(181, 166, 71, 0.2)",data:u.value.map(S=>({x:S.timestamp*1e3,y:S["bat-all-power"]})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"},{label:"Speicher SoC",unit:"%",borderColor:"#FFB96E",borderWidth:2,borderDash:[10,5],pointRadius:0,pointHoverRadius:4,pointHitRadius:5,data:u.value.map(S=>({x:S.timestamp*1e3,y:S["bat-all-soc"]})),fill:!1,yAxisID:"y2"},...b.value,...x.value]})),_=g(()=>({responsive:!0,maintainAspectRatio:!1,animation:{duration:0},plugins:{legend:{display:!l.value&&n.value,fullSize:!0,align:"center",position:"bottom",labels:{boxWidth:19,boxHeight:.1},onClick:(S,E,A)=>{const O=E.datasetIndex,P=A.chart,q=E.text;o.toggleDataset(q),o.isDatasetHidden(q)?P.hide(O):P.show(O)}},tooltip:{mode:"index",intersect:!1,callbacks:{label:S=>`${S.dataset.label}: ${S.formattedValue} ${S.dataset.unit}`}}},scales:{x:{type:"time",time:{unit:"minute",displayFormats:{minute:"HH:mm"}},ticks:{maxTicksLimit:12,source:"auto"},grid:{tickLength:5,color:s.dark.isActive?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)"}},y:{position:"left",type:"linear",display:!0,title:{display:!0,text:"Leistung [kW]"},ticks:{stepSize:.2,maxTicksLimit:11},grid:{color:s.dark.isActive?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)"}},y2:{position:"right",type:"linear",display:!0,title:{display:!0,text:"SoC [%]"},min:0,max:100,ticks:{stepSize:10},grid:{display:!1}}}})),C={legendDisplay:n,mqttStore:i,localDataStore:o,$q:s,props:r,chartRef:a,legendLarge:l,applyHiddenDatasetsToChart:c,selectedData:u,chargePointIds:d,chargePointNames:h,gridMeterName:f,chartInstanceKey:m,vehicles:p,chartRange:v,chargePointDatasets:b,vehicleDatasets:x,lineChartData:y,chartOptions:_,get ChartjsLine(){return Vh},HistoryChartLegend:V0};return Object.defineProperty(C,"__isScriptSetup",{enumerable:!1,value:!0}),C}}),Rx={class:"chart-container"},Lx={class:"chart-wrapper"};function Fx(t,e,n,i,o,s){return V(),K("div",Rx,[R("div",Lx,[(V(),ne(i.ChartjsLine,{key:i.chartInstanceKey,data:i.lineChartData,options:i.chartOptions,ref:"chartRef"},null,8,["data","options"]))]),i.legendDisplay&&i.legendLarge?(V(),ne(i.HistoryChartLegend,{key:0,chart:i.chartRef?.chart||null,class:"legend-wrapper q-mt-sm"},null,8,["chart"])):ue("",!0)])}const zx=Me(qx,[["render",Fx],["__scopeId","data-v-df4fc9f6"],["__file","HistoryChart.vue"]]),Bx=Se({name:"ChartCarousel",__name:"ChartCarousel",setup(t,{expose:e}){e();const n=In(),i=tl(),o=N(0),s=()=>{i.toggleLegendVisibility()},r=g(()=>i.legendVisible),a=N(!1),l=[{name:"EnergyFlowChart",component:mv},{name:"HistoryChart",component:zx}],c=N(l[0].name);ge(()=>a.value,(d,h)=>{!d&&h&&c.value==="HistoryChart"&&o.value++});const u={$q:n,localDataStore:i,renderKey:o,toggleLegend:s,legendVisible:r,fullscreen:a,chartCarouselItems:l,currentSlide:c};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function Nx(t,e,n,i,o,s){return V(),ne(zd,{modelValue:i.currentSlide,"onUpdate:modelValue":e[1]||(e[1]=r=>i.currentSlide=r),fullscreen:i.fullscreen,"onUpdate:fullscreen":e[2]||(e[2]=r=>i.fullscreen=r),swipeable:"","control-color":"primary",padding:"",animated:"",infinite:"",navigation:i.chartCarouselItems.length>1,arrows:i.chartCarouselItems.length>1&&i.$q.screen.gt.xs,class:"full-width full-height bg-transparent carousel-height"},{control:L(()=>[I(Hm,{position:"bottom-right"},{default:L(()=>[i.currentSlide==="HistoryChart"?(V(),ne(Ve,{key:0,size:"sm",class:"q-mr-sm legend-button-text",label:"Legend ein/aus",onClick:i.toggleLegend})):ue("",!0),I(Ve,{push:"",round:"",dense:"","text-color":"primary",icon:i.fullscreen?"fullscreen_exit":"fullscreen",onClick:e[0]||(e[0]=r=>i.fullscreen=!i.fullscreen)},null,8,["icon"])]),_:1})]),default:L(()=>[(V(),K(De,null,Je(i.chartCarouselItems,r=>I(qd,{key:`${r.name}-${r.name==="HistoryChart"?i.renderKey:0}`,name:r.name},{default:L(()=>[(V(),ne(Gg(r.component),{"show-legend":i.legendVisible},null,8,["show-legend"]))]),_:2},1032,["name"])),64))]),_:1},8,["modelValue","fullscreen","navigation","arrows"])}const Wx=Me(Bx,[["render",Nx],["__scopeId","data-v-85eaf875"],["__file","ChartCarousel.vue"]]),vn=ze({name:"QTd",props:{props:Object,autoWidth:Boolean,noHover:Boolean},setup(t,{slots:e}){const n=$e(),i=g(()=>"q-td"+(t.autoWidth===!0?" q-table--col-auto-width":"")+(t.noHover===!0?" q-td--no-hover":"")+" ");return()=>{if(t.props===void 0)return w("td",{class:i.value},Ge(e.default));const o=n.vnode.key,s=(t.props.colsMap!==void 0?t.props.colsMap[o]:null)||t.props.col;if(s===void 0)return;const{row:r}=t.props;return w("td",{class:i.value+s.__tdClass(r),style:s.__tdStyle(r)},Ge(e.default))}}}),ri=[];let Hi;function Hx(t){Hi=t.keyCode===27}function jx(){Hi===!0&&(Hi=!1)}function $x(t){Hi===!0&&(Hi=!1,Js(t,27)===!0&&ri[ri.length-1](t))}function Af(t){window[t]("keydown",Hx),window[t]("blur",jx),window[t]("keyup",$x),Hi=!1}function qf(t){Jn.is.desktop===!0&&(ri.push(t),ri.length===1&&Af("addEventListener"))}function Zs(t){const e=ri.indexOf(t);e!==-1&&(ri.splice(e,1),ri.length===0&&Af("removeEventListener"))}const ai=[];function Rf(t){ai[ai.length-1](t)}function Lf(t){Jn.is.desktop===!0&&(ai.push(t),ai.length===1&&document.body.addEventListener("focusin",Rf))}function Sa(t){const e=ai.indexOf(t);e!==-1&&(ai.splice(e,1),ai.length===0&&document.body.removeEventListener("focusin",Rf))}let _s=0;const Ux={standard:"fixed-full flex-center",top:"fixed-top justify-center",bottom:"fixed-bottom justify-center",right:"fixed-right items-center",left:"fixed-left items-center"},Eu={standard:["scale","scale"],top:["slide-down","slide-up"],bottom:["slide-up","slide-down"],right:["slide-left","slide-right"],left:["slide-right","slide-left"]},Xi=ze({name:"QDialog",inheritAttrs:!1,props:{...kd,...Fa,transitionShow:String,transitionHide:String,persistent:Boolean,autoClose:Boolean,allowFocusOutside:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,backdropFilter:String,position:{type:String,default:"standard",validator:t=>["standard","top","bottom","left","right"].includes(t)}},emits:[...Cd,"shake","click","escapeKey"],setup(t,{slots:e,emit:n,attrs:i}){const o=$e(),s=N(null),r=N(!1),a=N(!1);let l=null,c=null,u,d;const h=g(()=>t.persistent!==!0&&t.noRouteDismiss!==!0&&t.seamless!==!0),{preventBodyScroll:f}=bm(),{registerTimeout:m}=Io(),{registerTick:p,removeTick:v}=yo(),{transitionProps:b,transitionStyle:x}=Md(t,()=>Eu[t.position][0],()=>Eu[t.position][1]),y=g(()=>x.value+(t.backdropFilter!==void 0?`;backdrop-filter:${t.backdropFilter};-webkit-backdrop-filter:${t.backdropFilter}`:"")),{showPortal:_,hidePortal:C,portalIsAccessible:S,renderPortal:E}=Pd(o,s,fe,"dialog"),{hide:A}=Td({showing:r,hideOnRouteChange:h,handleShow:$,handleHide:U,processOnMount:!0}),{addToHistory:O,removeFromHistory:P}=pm(r,A,h),q=g(()=>`q-dialog__inner flex no-pointer-events q-dialog__inner--${t.maximized===!0?"maximized":"minimized"} q-dialog__inner--${t.position} ${Ux[t.position]}`+(a.value===!0?" q-dialog__inner--animating":"")+(t.fullWidth===!0?" q-dialog__inner--fullwidth":"")+(t.fullHeight===!0?" q-dialog__inner--fullheight":"")+(t.square===!0?" q-dialog__inner--square":"")),M=g(()=>r.value===!0&&t.seamless!==!0),H=g(()=>t.autoClose===!0?{onClick:T}:{}),z=g(()=>[`q-dialog fullscreen no-pointer-events q-dialog--${M.value===!0?"modal":"seamless"}`,i.class]);ge(()=>t.maximized,B=>{r.value===!0&&D(B)}),ge(M,B=>{f(B),B===!0?(Lf(ae),qf(te)):(Sa(ae),Zs(te))});function $(B){O(),c=t.noRefocus===!1&&document.activeElement!==null?document.activeElement:null,D(t.maximized),_(),a.value=!0,t.noFocus!==!0?(document.activeElement!==null&&document.activeElement.blur(),p(G)):v(),m(()=>{if(o.proxy.$q.platform.is.ios===!0){if(t.seamless!==!0&&document.activeElement){const{top:J,bottom:we}=document.activeElement.getBoundingClientRect(),{innerHeight:Z}=window,Ee=window.visualViewport!==void 0?window.visualViewport.height:Z;J>0&&we>Ee/2&&(document.scrollingElement.scrollTop=Math.min(document.scrollingElement.scrollHeight-Ee,we>=Z?1/0:Math.ceil(document.scrollingElement.scrollTop+we-Ee/2))),document.activeElement.scrollIntoView()}d=!0,s.value.click(),d=!1}_(!0),a.value=!1,n("show",B)},t.transitionDuration)}function U(B){v(),P(),de(!0),a.value=!0,C(),c!==null&&(((B&&B.type.indexOf("key")===0?c.closest('[tabindex]:not([tabindex^="-"])'):void 0)||c).focus(),c=null),m(()=>{C(!0),a.value=!1,n("hide",B)},t.transitionDuration)}function G(B){rr(()=>{let J=s.value;if(J!==null){if(B!==void 0){const we=J.querySelector(B);if(we!==null){we.focus({preventScroll:!0});return}}J.contains(document.activeElement)!==!0&&(J=J.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||J.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||J.querySelector("[autofocus], [data-autofocus]")||J,J.focus({preventScroll:!0}))}})}function Y(B){B&&typeof B.focus=="function"?B.focus({preventScroll:!0}):G(),n("shake");const J=s.value;J!==null&&(J.classList.remove("q-animate--scale"),J.classList.add("q-animate--scale"),l!==null&&clearTimeout(l),l=setTimeout(()=>{l=null,s.value!==null&&(J.classList.remove("q-animate--scale"),G())},170))}function te(){t.seamless!==!0&&(t.persistent===!0||t.noEscDismiss===!0?t.maximized!==!0&&t.noShake!==!0&&Y():(n("escapeKey"),A()))}function de(B){l!==null&&(clearTimeout(l),l=null),(B===!0||r.value===!0)&&(D(!1),t.seamless!==!0&&(f(!1),Sa(ae),Zs(te))),B!==!0&&(c=null)}function D(B){B===!0?u!==!0&&(_s<1&&document.body.classList.add("q-body--dialog"),_s++,u=!0):u===!0&&(_s<2&&document.body.classList.remove("q-body--dialog"),_s--,u=!1)}function T(B){d!==!0&&(A(B),n("click",B))}function Q(B){t.persistent!==!0&&t.noBackdropDismiss!==!0?A(B):t.noShake!==!0&&Y()}function ae(B){t.allowFocusOutside!==!0&&S.value===!0&&_d(s.value,B.target)!==!0&&G('[tabindex]:not([tabindex="-1"])')}Object.assign(o.proxy,{focus:G,shake:Y,__updateRefocusTarget(B){c=B||null}}),Lt(de);function fe(){return w("div",{role:"dialog","aria-modal":M.value===!0?"true":"false",...i,class:z.value},[w(Po,{name:"q-transition--fade",appear:!0},()=>M.value===!0?w("div",{class:"q-dialog__backdrop fixed-full",style:y.value,"aria-hidden":"true",tabindex:-1,onClick:Q}):null),w(Po,b.value,()=>r.value===!0?w("div",{ref:s,class:q.value,style:x.value,tabindex:-1,...H.value},Ge(e.default)):null)])}return E}});function Au(t){if(t===!1)return 0;if(t===!0||t===void 0)return 1;const e=parseInt(t,10);return isNaN(e)?0:e}const Mn=vd({name:"close-popup",beforeMount(t,{value:e}){const n={depth:Au(e),handler(i){n.depth!==0&&setTimeout(()=>{const o=ym(t);o!==void 0&&_m(o,i,n.depth)})},handlerKey(i){Js(i,13)===!0&&n.handler(i)}};t.__qclosepopup=n,t.addEventListener("click",n.handler),t.addEventListener("keyup",n.handlerKey)},updated(t,{value:e,oldValue:n}){e!==n&&(t.__qclosepopup.depth=Au(e))},beforeUnmount(t){const e=t.__qclosepopup;t.removeEventListener("click",e.handler),t.removeEventListener("keyup",e.handlerKey),delete t.__qclosepopup}}),ul=()=>({chargeModes:[{value:"instant_charging",label:"Sofort",color:"negative"},{value:"pv_charging",label:"PV",color:"positive"},{value:"scheduled_charging",label:"Ziel",color:"primary"},{value:"eco_charging",label:"Eco",color:"accent"},{value:"stop",label:"Stop",color:"light"}]}),Yx=Se({__name:"BaseCarousel",props:{items:{}},setup(t,{expose:e}){e();const n=t,i=In(),o=N(0),s=N(!0),r=g(()=>{const h=i.screen.width>800?2:1;return n.items.reduce((f,m,p)=>{const v=Math.floor(p/h);return f[v]||(f[v]=[]),f[v].push(m),f},[])});ge(()=>r.value,async(h,f)=>{const m=p=>h.findIndex(v=>v.includes(p));if(!f||f.length===0){o.value=0;return}s.value=!1,o.value=Math.max(m(f[o.value][0]),0),await at(),s.value=!0});const a=()=>{const h=window.scrollY;at(()=>{c(),u(),window.scrollTo(0,h)})},l=N(0),c=()=>{const h=document.querySelectorAll(".item-container"),f=Array.from(h).map(m=>m.offsetHeight);l.value=Math.max(...f)},u=()=>{const h=new MutationObserver(()=>{c()});document.querySelectorAll(".item-container").forEach(m=>{h.observe(m,{childList:!0,subtree:!0,attributes:!0})})};cn(()=>{at(()=>{c(),u()})}),ge(()=>n.items,()=>{at(()=>{c(),u()})});const d={props:n,$q:i,currentSlide:o,animated:s,groupedItems:r,handleSlideChange:a,maxCardHeight:l,updateMaxCardHeight:c,observeCardChanges:u};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}});function Zx(t,e,n,i,o,s){return V(),ne(zd,{modelValue:i.currentSlide,"onUpdate:modelValue":[e[0]||(e[0]=r=>i.currentSlide=r),i.handleSlideChange],swipeable:"",animated:i.animated,"control-color":"primary",infinite:"",padding:"",navigation:i.groupedItems.length>1,arrows:i.groupedItems.length>1&&i.$q.screen.gt.xs,class:"carousel-height q-mt-md","transition-next":"slide-left","transition-prev":"slide-right",onMousedown:e[1]||(e[1]=tn(()=>{},["prevent"]))},{default:L(()=>[(V(!0),K(De,null,Je(i.groupedItems,(r,a)=>(V(),ne(qd,{key:a,name:a,class:"row no-wrap justify-center carousel-slide"},{default:L(()=>[(V(!0),K(De,null,Je(r,l=>(V(),K("div",{key:l,class:"item-container",style:Aa(`min-height: ${i.maxCardHeight}px`)},[oi(t.$slots,"item",{item:l},void 0,!0)],4))),128))]),_:2},1032,["name"]))),128))]),_:3},8,["modelValue","animated","navigation","arrows"])}const dl=Me(Yx,[["render",Zx],["__scopeId","data-v-82f4aba3"],["__file","BaseCarousel.vue"]]);function Xx(t){return t??null}function qu(t,e){return t??(e===!0?`f_${sa()}`:null)}function Ff({getValue:t,required:e=!0}={}){if(Jg.value===!0){const n=t!==void 0?N(Xx(t())):N(null);return e===!0&&n.value===null&&cn(()=>{n.value=`f_${sa()}`}),t!==void 0&&ge(t,i=>{n.value=qu(i,e)}),n}return t!==void 0?g(()=>qu(t(),e)):N(`f_${sa()}`)}const Ru=/^on[A-Z]/;function Kx(){const{attrs:t,vnode:e}=$e(),n={listeners:N({}),attributes:N({})};function i(){const o={},s={};for(const r in t)r!=="class"&&r!=="style"&&Ru.test(r)===!1&&(o[r]=t[r]);for(const r in e.props)Ru.test(r)===!0&&(s[r]=e.props[r]);n.attributes.value=o,n.listeners.value=s}return xd(i),i(),n}function Qx({validate:t,resetValidation:e,requiresQForm:n}){const i=Vs(em,!1);if(i!==!1){const{props:o,proxy:s}=$e();Object.assign(s,{validate:t,resetValidation:e}),ge(()=>o.disable,r=>{r===!0?(typeof e=="function"&&e(),i.unbindComponent(s)):i.bindComponent(s)}),cn(()=>{o.disable!==!0&&i.bindComponent(s)}),Lt(()=>{o.disable!==!0&&i.unbindComponent(s)})}else n===!0&&console.error("Parent QForm not found on useFormChild()!")}const Lu=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,Fu=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,zu=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,xs=/^rgb\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5])\)$/,Ss=/^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/,Jr={date:t=>/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(t),time:t=>/^([0-1]?\d|2[0-3]):[0-5]\d$/.test(t),fulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(t),timeOrFulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(t),email:t=>/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(t),hexColor:t=>Lu.test(t),hexaColor:t=>Fu.test(t),hexOrHexaColor:t=>zu.test(t),rgbColor:t=>xs.test(t),rgbaColor:t=>Ss.test(t),rgbOrRgbaColor:t=>xs.test(t)||Ss.test(t),hexOrRgbColor:t=>Lu.test(t)||xs.test(t),hexaOrRgbaColor:t=>Fu.test(t)||Ss.test(t),anyColor:t=>zu.test(t)||xs.test(t)||Ss.test(t)},Gx=[!0,!1,"ondemand"],Jx={modelValue:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],default:!1,validator:t=>Gx.includes(t)}};function eS(t,e){const{props:n,proxy:i}=$e(),o=N(!1),s=N(null),r=N(!1);Qx({validate:p,resetValidation:m});let a=0,l;const c=g(()=>n.rules!==void 0&&n.rules!==null&&n.rules.length!==0),u=g(()=>n.disable!==!0&&c.value===!0&&e.value===!1),d=g(()=>n.error===!0||o.value===!0),h=g(()=>typeof n.errorMessage=="string"&&n.errorMessage.length!==0?n.errorMessage:s.value);ge(()=>n.modelValue,()=>{r.value=!0,u.value===!0&&n.lazyRules===!1&&v()});function f(){n.lazyRules!=="ondemand"&&u.value===!0&&r.value===!0&&v()}ge(()=>n.reactiveRules,b=>{b===!0?l===void 0&&(l=ge(()=>n.rules,f,{immediate:!0,deep:!0})):l!==void 0&&(l(),l=void 0)},{immediate:!0}),ge(()=>n.lazyRules,f),ge(t,b=>{b===!0?r.value=!0:u.value===!0&&n.lazyRules!=="ondemand"&&v()});function m(){a++,e.value=!1,r.value=!1,o.value=!1,s.value=null,v.cancel()}function p(b=n.modelValue){if(n.disable===!0||c.value===!1)return!0;const x=++a,y=e.value!==!0?()=>{r.value=!0}:()=>{},_=(S,E)=>{S===!0&&y(),o.value=S,s.value=E||null,e.value=!1},C=[];for(let S=0;S{if(S===void 0||Array.isArray(S)===!1||S.length===0)return x===a&&_(!1),!0;const E=S.find(A=>A===!1||typeof A=="string");return x===a&&_(E!==void 0,E),E===void 0},S=>(x===a&&(console.error(S),_(!0)),!1)))}const v=Sd(p,0);return Lt(()=>{l!==void 0&&l(),v.cancel()}),Object.assign(i,{resetValidation:m,validate:p}),ei(i,"hasError",()=>d.value),{isDirtyModel:r,hasRules:c,hasError:d,errorMessage:h,validate:p,resetValidation:m}}function Fo(t){return t!=null&&(""+t).length!==0}const tS={...un,...Jx,label:String,stackLabel:Boolean,hint:String,hideHint:Boolean,prefix:String,suffix:String,labelColor:String,color:String,bgColor:String,filled:Boolean,outlined:Boolean,borderless:Boolean,standout:[Boolean,String],square:Boolean,loading:Boolean,labelSlot:Boolean,bottomSlots:Boolean,hideBottomSpace:Boolean,rounded:Boolean,dense:Boolean,itemAligned:Boolean,counter:Boolean,clearable:Boolean,clearIcon:String,disable:Boolean,readonly:Boolean,autofocus:Boolean,for:String},gr={...tS,maxlength:[Number,String]},hl=["update:modelValue","clear","focus","blur"];function fl({requiredForAttr:t=!0,tagProp:e,changeEvent:n=!1}={}){const{props:i,proxy:o}=$e(),s=dn(i,o.$q),r=Ff({required:t,getValue:()=>i.for});return{requiredForAttr:t,changeEvent:n,tag:e===!0?g(()=>i.tag):{value:"label"},isDark:s,editable:g(()=>i.disable!==!0&&i.readonly!==!0),innerLoading:N(!1),focused:N(!1),hasPopupOpen:!1,splitAttrs:Kx(),targetUid:r,rootRef:N(null),targetRef:N(null),controlRef:N(null)}}function gl(t){const{props:e,emit:n,slots:i,attrs:o,proxy:s}=$e(),{$q:r}=s;let a=null;t.hasValue===void 0&&(t.hasValue=g(()=>Fo(e.modelValue))),t.emitValue===void 0&&(t.emitValue=Y=>{n("update:modelValue",Y)}),t.controlEvents===void 0&&(t.controlEvents={onFocusin:O,onFocusout:P}),Object.assign(t,{clearValue:q,onControlFocusin:O,onControlFocusout:P,focus:E}),t.computedCounter===void 0&&(t.computedCounter=g(()=>{if(e.counter!==!1){const Y=typeof e.modelValue=="string"||typeof e.modelValue=="number"?(""+e.modelValue).length:Array.isArray(e.modelValue)===!0?e.modelValue.length:0,te=e.maxlength!==void 0?e.maxlength:e.maxValues;return Y+(te!==void 0?" / "+te:"")}}));const{isDirtyModel:l,hasRules:c,hasError:u,errorMessage:d,resetValidation:h}=eS(t.focused,t.innerLoading),f=t.floatingLabel!==void 0?g(()=>e.stackLabel===!0||t.focused.value===!0||t.floatingLabel.value===!0):g(()=>e.stackLabel===!0||t.focused.value===!0||t.hasValue.value===!0),m=g(()=>e.bottomSlots===!0||e.hint!==void 0||c.value===!0||e.counter===!0||e.error!==null),p=g(()=>e.filled===!0?"filled":e.outlined===!0?"outlined":e.borderless===!0?"borderless":e.standout?"standout":"standard"),v=g(()=>`q-field row no-wrap items-start q-field--${p.value}`+(t.fieldClass!==void 0?` ${t.fieldClass.value}`:"")+(e.rounded===!0?" q-field--rounded":"")+(e.square===!0?" q-field--square":"")+(f.value===!0?" q-field--float":"")+(x.value===!0?" q-field--labeled":"")+(e.dense===!0?" q-field--dense":"")+(e.itemAligned===!0?" q-field--item-aligned q-item-type":"")+(t.isDark.value===!0?" q-field--dark":"")+(t.getControl===void 0?" q-field--auto-height":"")+(t.focused.value===!0?" q-field--focused":"")+(u.value===!0?" q-field--error":"")+(u.value===!0||t.focused.value===!0?" q-field--highlighted":"")+(e.hideBottomSpace!==!0&&m.value===!0?" q-field--with-bottom":"")+(e.disable===!0?" q-field--disabled":e.readonly===!0?" q-field--readonly":"")),b=g(()=>"q-field__control relative-position row no-wrap"+(e.bgColor!==void 0?` bg-${e.bgColor}`:"")+(u.value===!0?" text-negative":typeof e.standout=="string"&&e.standout.length!==0&&t.focused.value===!0?` ${e.standout}`:e.color!==void 0?` text-${e.color}`:"")),x=g(()=>e.labelSlot===!0||e.label!==void 0),y=g(()=>"q-field__label no-pointer-events absolute ellipsis"+(e.labelColor!==void 0&&u.value!==!0?` text-${e.labelColor}`:"")),_=g(()=>({id:t.targetUid.value,editable:t.editable.value,focused:t.focused.value,floatingLabel:f.value,modelValue:e.modelValue,emitValue:t.emitValue})),C=g(()=>{const Y={};return t.targetUid.value&&(Y.for=t.targetUid.value),e.disable===!0&&(Y["aria-disabled"]="true"),Y});function S(){const Y=document.activeElement;let te=t.targetRef!==void 0&&t.targetRef.value;te&&(Y===null||Y.id!==t.targetUid.value)&&(te.hasAttribute("tabindex")===!0||(te=te.querySelector("[tabindex]")),te&&te!==Y&&te.focus({preventScroll:!0}))}function E(){rr(S)}function A(){xm(S);const Y=document.activeElement;Y!==null&&t.rootRef.value.contains(Y)&&Y.blur()}function O(Y){a!==null&&(clearTimeout(a),a=null),t.editable.value===!0&&t.focused.value===!1&&(t.focused.value=!0,n("focus",Y))}function P(Y,te){a!==null&&clearTimeout(a),a=setTimeout(()=>{a=null,!(document.hasFocus()===!0&&(t.hasPopupOpen===!0||t.controlRef===void 0||t.controlRef.value===null||t.controlRef.value.contains(document.activeElement)!==!1))&&(t.focused.value===!0&&(t.focused.value=!1,n("blur",Y)),te!==void 0&&te())})}function q(Y){Pt(Y),r.platform.is.mobile!==!0?(t.targetRef!==void 0&&t.targetRef.value||t.rootRef.value).focus():t.rootRef.value.contains(document.activeElement)===!0&&document.activeElement.blur(),e.type==="file"&&(t.inputRef.value.value=null),n("update:modelValue",null),t.changeEvent===!0&&n("change",null),n("clear",e.modelValue),at(()=>{const te=l.value;h(),l.value=te})}function M(Y){[13,32].includes(Y.keyCode)&&q(Y)}function H(){const Y=[];return i.prepend!==void 0&&Y.push(w("div",{class:"q-field__prepend q-field__marginal row no-wrap items-center",key:"prepend",onClick:Rn},i.prepend())),Y.push(w("div",{class:"q-field__control-container col relative-position row no-wrap q-anchor--skip"},z())),u.value===!0&&e.noErrorIcon===!1&&Y.push(U("error",[w(_e,{name:r.iconSet.field.error,color:"negative"})])),e.loading===!0||t.innerLoading.value===!0?Y.push(U("inner-loading-append",i.loading!==void 0?i.loading():[w(tm,{color:e.color})])):e.clearable===!0&&t.hasValue.value===!0&&t.editable.value===!0&&Y.push(U("inner-clearable-append",[w(_e,{class:"q-field__focusable-action",name:e.clearIcon||r.iconSet.field.clear,tabindex:0,role:"button","aria-hidden":"false","aria-label":r.lang.label.clear,onKeyup:M,onClick:q})])),i.append!==void 0&&Y.push(w("div",{class:"q-field__append q-field__marginal row no-wrap items-center",key:"append",onClick:Rn},i.append())),t.getInnerAppend!==void 0&&Y.push(U("inner-append",t.getInnerAppend())),t.getControlChild!==void 0&&Y.push(t.getControlChild()),Y}function z(){const Y=[];return e.prefix!==void 0&&e.prefix!==null&&Y.push(w("div",{class:"q-field__prefix no-pointer-events row items-center"},e.prefix)),t.getShadowControl!==void 0&&t.hasShadow.value===!0&&Y.push(t.getShadowControl()),t.getControl!==void 0?Y.push(t.getControl()):i.rawControl!==void 0?Y.push(i.rawControl()):i.control!==void 0&&Y.push(w("div",{ref:t.targetRef,class:"q-field__native row",tabindex:-1,...t.splitAttrs.attributes.value,"data-autofocus":e.autofocus===!0||void 0},i.control(_.value))),x.value===!0&&Y.push(w("div",{class:y.value},Ge(i.label,e.label))),e.suffix!==void 0&&e.suffix!==null&&Y.push(w("div",{class:"q-field__suffix no-pointer-events row items-center"},e.suffix)),Y.concat(Ge(i.default))}function $(){let Y,te;u.value===!0?d.value!==null?(Y=[w("div",{role:"alert"},d.value)],te=`q--slot-error-${d.value}`):(Y=Ge(i.error),te="q--slot-error"):(e.hideHint!==!0||t.focused.value===!0)&&(e.hint!==void 0?(Y=[w("div",e.hint)],te=`q--slot-hint-${e.hint}`):(Y=Ge(i.hint),te="q--slot-hint"));const de=e.counter===!0||i.counter!==void 0;if(e.hideBottomSpace===!0&&de===!1&&Y===void 0)return;const D=w("div",{key:te,class:"q-field__messages col"},Y);return w("div",{class:"q-field__bottom row items-start q-field__bottom--"+(e.hideBottomSpace!==!0?"animated":"stale"),onClick:Rn},[e.hideBottomSpace===!0?D:w(Po,{name:"q-transition--field-message"},()=>D),de===!0?w("div",{class:"q-field__counter"},i.counter!==void 0?i.counter():t.computedCounter.value):null])}function U(Y,te){return te===null?null:w("div",{key:Y,class:"q-field__append q-field__marginal row no-wrap items-center q-anchor--skip"},te)}let G=!1;return er(()=>{G=!0}),tr(()=>{G===!0&&e.autofocus===!0&&s.focus()}),e.autofocus===!0&&cn(()=>{s.focus()}),Lt(()=>{a!==null&&clearTimeout(a)}),Object.assign(s,{focus:E,blur:A}),function(){const te=t.getControl===void 0&&i.control===void 0?{...t.splitAttrs.attributes.value,"data-autofocus":e.autofocus===!0||void 0,...C.value}:C.value;return w(t.tag.value,{ref:t.rootRef,class:[v.value,o.class],style:o.style,...te},[i.before!==void 0?w("div",{class:"q-field__before q-field__marginal row no-wrap items-center",onClick:Rn},i.before()):null,w("div",{class:"q-field__inner relative-position col self-stretch"},[w("div",{ref:t.controlRef,class:b.value,tabindex:-1,...t.controlEvents},H()),m.value===!0?$():null]),i.after!==void 0?w("div",{class:"q-field__after q-field__marginal row no-wrap items-center",onClick:Rn},i.after()):null])}}const Bu={date:"####/##/##",datetime:"####/##/## ##:##",time:"##:##",fulltime:"##:##:##",phone:"(###) ### - ####",card:"#### #### #### ####"},Xs={"#":{pattern:"[\\d]",negate:"[^\\d]"},S:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]"},N:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]"},A:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleUpperCase()},a:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleLowerCase()},X:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleUpperCase()},x:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleLowerCase()}},zf=Object.keys(Xs);zf.forEach(t=>{Xs[t].regex=new RegExp(Xs[t].pattern)});const nS=new RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+zf.join("")+"])|(.)","g"),Nu=/[.*+?^${}()|[\]\\]/g,ft="",iS={mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean};function oS(t,e,n,i){let o,s,r,a,l,c;const u=N(null),d=N(f());function h(){return t.autogrow===!0||["textarea","text","search","url","tel","password"].includes(t.type)}ge(()=>t.type+t.autogrow,p),ge(()=>t.mask,O=>{if(O!==void 0)v(d.value,!0);else{const P=E(d.value);p(),t.modelValue!==P&&e("update:modelValue",P)}}),ge(()=>t.fillMask+t.reverseFillMask,()=>{u.value===!0&&v(d.value,!0)}),ge(()=>t.unmaskedValue,()=>{u.value===!0&&v(d.value)});function f(){if(p(),u.value===!0){const O=C(E(t.modelValue));return t.fillMask!==!1?A(O):O}return t.modelValue}function m(O){if(O0;H--)P+=ft;q=q.slice(0,M)+P+q.slice(M)}return q}function p(){if(u.value=t.mask!==void 0&&t.mask.length!==0&&h(),u.value===!1){a=void 0,o="",s="";return}const O=Bu[t.mask]===void 0?t.mask:Bu[t.mask],P=typeof t.fillMask=="string"&&t.fillMask.length!==0?t.fillMask.slice(0,1):"_",q=P.replace(Nu,"\\$&"),M=[],H=[],z=[];let $=t.reverseFillMask===!0,U="",G="";O.replace(nS,(D,T,Q,ae,fe)=>{if(ae!==void 0){const B=Xs[ae];z.push(B),G=B.negate,$===!0&&(H.push("(?:"+G+"+)?("+B.pattern+"+)?(?:"+G+"+)?("+B.pattern+"+)?"),$=!1),H.push("(?:"+G+"+)?("+B.pattern+")?")}else if(Q!==void 0)U="\\"+(Q==="\\"?"":Q),z.push(Q),M.push("([^"+U+"]+)?"+U+"?");else{const B=T!==void 0?T:fe;U=B==="\\"?"\\\\\\\\":B.replace(Nu,"\\\\$&"),z.push(B),M.push("([^"+U+"]+)?"+U+"?")}});const Y=new RegExp("^"+M.join("")+"("+(U===""?".":"[^"+U+"]")+"+)?"+(U===""?"":"["+U+"]*")+"$"),te=H.length-1,de=H.map((D,T)=>T===0&&t.reverseFillMask===!0?new RegExp("^"+q+"*"+D):T===te?new RegExp("^"+D+"("+(G===""?".":G)+"+)?"+(t.reverseFillMask===!0?"$":q+"*")):new RegExp("^"+D));r=z,a=D=>{const T=Y.exec(t.reverseFillMask===!0?D:D.slice(0,z.length+1));T!==null&&(D=T.slice(1).join(""));const Q=[],ae=de.length;for(let fe=0,B=D;fetypeof D=="string"?D:ft).join(""),s=o.split(ft).join(P)}function v(O,P,q){const M=i.value,H=M.selectionEnd,z=M.value.length-H,$=E(O);P===!0&&p();const U=C($),G=t.fillMask!==!1?A(U):U,Y=d.value!==G;M.value!==G&&(M.value=G),Y===!0&&(d.value=G),document.activeElement===M&&at(()=>{if(G===s){const de=t.reverseFillMask===!0?s.length:0;M.setSelectionRange(de,de,"forward");return}if(q==="insertFromPaste"&&t.reverseFillMask!==!0){const de=M.selectionEnd;let D=H-1;for(let T=l;T<=D&&TU.length?1:0:Math.max(0,G.length-(G===s?0:Math.min(U.length,z)+1))+1:H;M.setSelectionRange(de,de,"forward");return}if(t.reverseFillMask===!0)if(Y===!0){const de=Math.max(0,G.length-(G===s?0:Math.min(U.length,z+1)));de===1&&H===1?M.setSelectionRange(de,de,"forward"):x.rightReverse(M,de)}else{const de=G.length-z;M.setSelectionRange(de,de,"backward")}else if(Y===!0){const de=Math.max(0,o.indexOf(ft),Math.min(U.length,H)-1);x.right(M,de)}else{const de=H-1;x.right(M,de)}});const te=t.unmaskedValue===!0?E(G):G;String(t.modelValue)!==te&&(t.modelValue!==null||te!=="")&&n(te,!0)}function b(O,P,q){const M=C(E(O.value));P=Math.max(0,o.indexOf(ft),Math.min(M.length,P)),l=P,O.setSelectionRange(P,q,"forward")}const x={left(O,P){const q=o.slice(P-1).indexOf(ft)===-1;let M=Math.max(0,P-1);for(;M>=0;M--)if(o[M]===ft){P=M,q===!0&&P++;break}if(M<0&&o[P]!==void 0&&o[P]!==ft)return x.right(O,0);P>=0&&O.setSelectionRange(P,P,"backward")},right(O,P){const q=O.value.length;let M=Math.min(q,P+1);for(;M<=q;M++)if(o[M]===ft){P=M;break}else o[M-1]===ft&&(P=M);if(M>q&&o[P-1]!==void 0&&o[P-1]!==ft)return x.left(O,q);O.setSelectionRange(P,P,"forward")},leftReverse(O,P){const q=m(O.value.length);let M=Math.max(0,P-1);for(;M>=0;M--)if(q[M-1]===ft){P=M;break}else if(q[M]===ft&&(P=M,M===0))break;if(M<0&&q[P]!==void 0&&q[P]!==ft)return x.rightReverse(O,0);P>=0&&O.setSelectionRange(P,P,"backward")},rightReverse(O,P){const q=O.value.length,M=m(q),H=M.slice(0,P+1).indexOf(ft)===-1;let z=Math.min(q,P+1);for(;z<=q;z++)if(M[z-1]===ft){P=z,P>0&&H===!0&&P--;break}if(z>q&&M[P-1]!==void 0&&M[P-1]!==ft)return x.leftReverse(O,q);O.setSelectionRange(P,P,"forward")}};function y(O){e("click",O),c=void 0}function _(O){if(e("keydown",O),Va(O)===!0||O.altKey===!0)return;const P=i.value,q=P.selectionStart,M=P.selectionEnd;if(O.shiftKey||(c=void 0),O.keyCode===37||O.keyCode===39){O.shiftKey&&c===void 0&&(c=P.selectionDirection==="forward"?q:M);const H=x[(O.keyCode===39?"right":"left")+(t.reverseFillMask===!0?"Reverse":"")];if(O.preventDefault(),H(P,c===q?M:q),O.shiftKey){const z=P.selectionStart;P.setSelectionRange(Math.min(c,z),Math.max(c,z),"forward")}}else O.keyCode===8&&t.reverseFillMask!==!0&&q===M?(x.left(P,q),P.setSelectionRange(P.selectionStart,M,"backward")):O.keyCode===46&&t.reverseFillMask===!0&&q===M&&(x.rightReverse(P,M),P.setSelectionRange(q,P.selectionEnd,"forward"))}function C(O){if(O==null||O==="")return"";if(t.reverseFillMask===!0)return S(O);const P=r;let q=0,M="";for(let H=0;H=0&&M!==-1;z--){const $=P[z];let U=O[M];if(typeof $=="string")H=$+H,U===$&&M--;else if(U!==void 0&&$.regex.test(U))do H=($.transform!==void 0?$.transform(U):U)+H,M--,U=O[M];while(q===z&&U!==void 0&&$.regex.test(U));else return H}return H}function E(O){return typeof O!="string"||a===void 0?typeof O=="number"?a(""+O):O:a(O)}function A(O){return s.length-O.length<=0?O:t.reverseFillMask===!0&&O.length!==0?s.slice(0,-O.length)+O:O+s.slice(O.length)}return{innerValue:d,hasMask:u,moveCursorForPaste:b,updateMaskValue:v,onMaskedKeydown:_,onMaskedClick:y}}const mr={name:String};function sS(t){return g(()=>({type:"hidden",name:t.name,value:t.modelValue}))}function Bf(t={}){return(e,n,i)=>{e[n](w("input",{class:"hidden"+(i||""),...t.value}))}}function Nf(t){return g(()=>t.name||t.for)}function rS(t,e){function n(){const i=t.modelValue;try{const o="DataTransfer"in window?new DataTransfer:"ClipboardEvent"in window?new ClipboardEvent("").clipboardData:void 0;return Object(i)===i&&("length"in i?Array.from(i):[i]).forEach(s=>{o.items.add(s)}),{files:o.files}}catch{return{files:void 0}}}return g(()=>{if(t.type==="file")return n()})}function Wf(t){return function(n){if(n.type==="compositionend"||n.type==="change"){if(n.target.qComposing!==!0)return;n.target.qComposing=!1,t(n)}else n.type==="compositionstart"&&(n.target.qComposing=!0)}}const Hf=ze({name:"QInput",inheritAttrs:!1,props:{...gr,...iS,...mr,modelValue:[String,Number,FileList],shadowText:String,type:{type:String,default:"text"},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},emits:[...hl,"paste","change","keydown","click","animationend"],setup(t,{emit:e,attrs:n}){const{proxy:i}=$e(),{$q:o}=i,s={};let r=NaN,a,l,c=null,u;const d=N(null),h=Nf(t),{innerValue:f,hasMask:m,moveCursorForPaste:p,updateMaskValue:v,onMaskedKeydown:b,onMaskedClick:x}=oS(t,e,U,d),y=rS(t),_=g(()=>Fo(f.value)),C=Wf(z),S=fl({changeEvent:!0}),E=g(()=>t.type==="textarea"||t.autogrow===!0),A=g(()=>E.value===!0||["text","search","url","tel","password"].includes(t.type)),O=g(()=>{const T={...S.splitAttrs.listeners.value,onInput:z,onPaste:H,onChange:Y,onBlur:te,onFocus:wn};return T.onCompositionstart=T.onCompositionupdate=T.onCompositionend=C,m.value===!0&&(T.onKeydown=b,T.onClick=x),t.autogrow===!0&&(T.onAnimationend=$),T}),P=g(()=>{const T={tabindex:0,"data-autofocus":t.autofocus===!0||void 0,rows:t.type==="textarea"?6:void 0,"aria-label":t.label,name:h.value,...S.splitAttrs.attributes.value,id:S.targetUid.value,maxlength:t.maxlength,disabled:t.disable===!0,readonly:t.readonly===!0};return E.value===!1&&(T.type=t.type),t.autogrow===!0&&(T.rows=1),T});ge(()=>t.type,()=>{d.value&&(d.value.value=t.modelValue)}),ge(()=>t.modelValue,T=>{if(m.value===!0){if(l===!0&&(l=!1,String(T)===r))return;v(T)}else f.value!==T&&(f.value=T,t.type==="number"&&s.hasOwnProperty("value")===!0&&(a===!0?a=!1:delete s.value));t.autogrow===!0&&at(G)}),ge(()=>t.autogrow,T=>{T===!0?at(G):d.value!==null&&n.rows>0&&(d.value.style.height="auto")}),ge(()=>t.dense,()=>{t.autogrow===!0&&at(G)});function q(){rr(()=>{const T=document.activeElement;d.value!==null&&d.value!==T&&(T===null||T.id!==S.targetUid.value)&&d.value.focus({preventScroll:!0})})}function M(){d.value!==null&&d.value.select()}function H(T){if(m.value===!0&&t.reverseFillMask!==!0){const Q=T.target;p(Q,Q.selectionStart,Q.selectionEnd)}e("paste",T)}function z(T){if(!T||!T.target)return;if(t.type==="file"){e("update:modelValue",T.target.files);return}const Q=T.target.value;if(T.target.qComposing===!0){s.value=Q;return}if(m.value===!0)v(Q,!1,T.inputType);else if(U(Q),A.value===!0&&T.target===document.activeElement){const{selectionStart:ae,selectionEnd:fe}=T.target;ae!==void 0&&fe!==void 0&&at(()=>{T.target===document.activeElement&&Q.indexOf(T.target.value)===0&&T.target.setSelectionRange(ae,fe)})}t.autogrow===!0&&G()}function $(T){e("animationend",T),G()}function U(T,Q){u=()=>{c=null,t.type!=="number"&&s.hasOwnProperty("value")===!0&&delete s.value,t.modelValue!==T&&r!==T&&(r=T,Q===!0&&(l=!0),e("update:modelValue",T),at(()=>{r===T&&(r=NaN)})),u=void 0},t.type==="number"&&(a=!0,s.value=T),t.debounce!==void 0?(c!==null&&clearTimeout(c),s.value=T,c=setTimeout(u,t.debounce)):u()}function G(){requestAnimationFrame(()=>{const T=d.value;if(T!==null){const Q=T.parentNode.style,{scrollTop:ae}=T,{overflowY:fe,maxHeight:B}=o.platform.is.firefox===!0?{}:window.getComputedStyle(T),J=fe!==void 0&&fe!=="scroll";J===!0&&(T.style.overflowY="hidden"),Q.marginBottom=T.scrollHeight-1+"px",T.style.height="1px",T.style.height=T.scrollHeight+"px",J===!0&&(T.style.overflowY=parseInt(B,10){d.value!==null&&(d.value.value=f.value!==void 0?f.value:"")})}function de(){return s.hasOwnProperty("value")===!0?s.value:f.value!==void 0?f.value:""}Lt(()=>{te()}),cn(()=>{t.autogrow===!0&&G()}),Object.assign(S,{innerValue:f,fieldClass:g(()=>`q-${E.value===!0?"textarea":"input"}`+(t.autogrow===!0?" q-textarea--autogrow":"")),hasShadow:g(()=>t.type!=="file"&&typeof t.shadowText=="string"&&t.shadowText.length!==0),inputRef:d,emitValue:U,hasValue:_,floatingLabel:g(()=>_.value===!0&&(t.type!=="number"||isNaN(f.value)===!1)||Fo(t.displayValue)),getControl:()=>w(E.value===!0?"textarea":"input",{ref:d,class:["q-field__native q-placeholder",t.inputClass],style:t.inputStyle,...P.value,...O.value,...t.type!=="file"?{value:de()}:y.value}),getShadowControl:()=>w("div",{class:"q-field__native q-field__shadow absolute-bottom no-pointer-events"+(E.value===!0?"":" text-no-wrap")},[w("span",{class:"invisible"},de()),w("span",t.shadowText)])});const D=gl(S);return Object.assign(i,{focus:q,select:M,getNativeElement:()=>d.value}),ei(i,"nativeEl",()=>d.value),D}}),wa=ze({name:"QTh",props:{props:Object,autoWidth:Boolean},emits:["click"],setup(t,{slots:e,emit:n}){const i=$e(),{proxy:{$q:o}}=i,s=r=>{n("click",r)};return()=>{if(t.props===void 0)return w("th",{class:t.autoWidth===!0?"q-table--col-auto-width":"",onClick:s},Ge(e.default));let r,a;const l=i.vnode.key;if(l){if(r=t.props.colsMap[l],r===void 0)return}else r=t.props.col;if(r.sortable===!0){const u=r.align==="right"?"unshift":"push";a=nm(e.default,[]),a[u](w(_e,{class:r.__iconClass,name:o.iconSet.table.arrowUp}))}else a=Ge(e.default);const c={class:r.__thClass+(t.autoWidth===!0?" q-table--col-auto-width":""),style:r.headerStyle,onClick:u=>{r.sortable===!0&&t.props.sort(r),s(u)}};return w("th",c,a)}}}),ea=ze({name:"QTr",props:{props:Object,noHover:Boolean},setup(t,{slots:e}){const n=g(()=>"q-tr"+(t.props===void 0||t.props.header===!0?"":" "+t.props.__trClass)+(t.noHover===!0?" q-tr--no-hover":""));return()=>w("tr",{class:n.value},Ge(e.default))}}),aS=["horizontal","vertical","cell","none"],lS=ze({name:"QMarkupTable",props:{...un,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,wrapCells:Boolean,separator:{type:String,default:"horizontal",validator:t=>aS.includes(t)}},setup(t,{slots:e}){const n=$e(),i=dn(t,n.proxy.$q),o=g(()=>`q-markup-table q-table__container q-table__card q-table--${t.separator}-separator`+(i.value===!0?" q-table--dark q-table__card--dark q-dark":"")+(t.dense===!0?" q-table--dense":"")+(t.flat===!0?" q-table--flat":"")+(t.bordered===!0?" q-table--bordered":"")+(t.square===!0?" q-table--square":"")+(t.wrapCells===!1?" q-table--no-wrap":""));return()=>w("div",{class:o.value},[w("table",{class:"q-table"},Ge(e.default))])}});function jf(t,e){return w("div",t,[w("table",{class:"q-table"},e)])}const nn=1e3,cS=["start","center","end","start-force","center-force","end-force"],$f=Array.prototype.filter,uS=window.getComputedStyle(document.body).overflowAnchor===void 0?pd:function(t,e){t!==null&&(t._qOverflowAnimationFrame!==void 0&&cancelAnimationFrame(t._qOverflowAnimationFrame),t._qOverflowAnimationFrame=requestAnimationFrame(()=>{if(t===null)return;t._qOverflowAnimationFrame=void 0;const n=t.children||[];$f.call(n,o=>o.dataset&&o.dataset.qVsAnchor!==void 0).forEach(o=>{delete o.dataset.qVsAnchor});const i=n[e];i&&i.dataset&&(i.dataset.qVsAnchor="")}))};function Ri(t,e){return t+e}function ta(t,e,n,i,o,s,r,a){const l=t===window?document.scrollingElement||document.documentElement:t,c=o===!0?"offsetWidth":"offsetHeight",u={scrollStart:0,scrollViewSize:-r-a,scrollMaxSize:0,offsetStart:-r,offsetEnd:-a};if(o===!0?(t===window?(u.scrollStart=window.pageXOffset||window.scrollX||document.body.scrollLeft||0,u.scrollViewSize+=document.documentElement.clientWidth):(u.scrollStart=l.scrollLeft,u.scrollViewSize+=l.clientWidth),u.scrollMaxSize=l.scrollWidth,s===!0&&(u.scrollStart=(Oo===!0?u.scrollMaxSize-u.scrollViewSize:0)-u.scrollStart)):(t===window?(u.scrollStart=window.pageYOffset||window.scrollY||document.body.scrollTop||0,u.scrollViewSize+=document.documentElement.clientHeight):(u.scrollStart=l.scrollTop,u.scrollViewSize+=l.clientHeight),u.scrollMaxSize=l.scrollHeight),n!==null)for(let d=n.previousElementSibling;d!==null;d=d.previousElementSibling)d.classList.contains("q-virtual-scroll--skip")===!1&&(u.offsetStart+=d[c]);if(i!==null)for(let d=i.nextElementSibling;d!==null;d=d.nextElementSibling)d.classList.contains("q-virtual-scroll--skip")===!1&&(u.offsetEnd+=d[c]);if(e!==t){const d=l.getBoundingClientRect(),h=e.getBoundingClientRect();o===!0?(u.offsetStart+=h.left-d.left,u.offsetEnd-=h.width):(u.offsetStart+=h.top-d.top,u.offsetEnd-=h.height),t!==window&&(u.offsetStart+=u.scrollStart),u.offsetEnd+=u.scrollMaxSize-u.offsetStart}return u}function Wu(t,e,n,i){e==="end"&&(e=(t===window?document.body:t)[n===!0?"scrollWidth":"scrollHeight"]),t===window?n===!0?(i===!0&&(e=(Oo===!0?document.body.scrollWidth-document.documentElement.clientWidth:0)-e),window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)):window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e):n===!0?(i===!0&&(e=(Oo===!0?t.scrollWidth-t.offsetWidth:0)-e),t.scrollLeft=e):t.scrollTop=e}function lo(t,e,n,i){if(n>=i)return 0;const o=e.length,s=Math.floor(n/nn),r=Math.floor((i-1)/nn)+1;let a=t.slice(s,r).reduce(Ri,0);return n%nn!==0&&(a-=e.slice(s*nn,n).reduce(Ri,0)),i%nn!==0&&i!==o&&(a-=e.slice(i,r*nn).reduce(Ri,0)),a}const Uf={virtualScrollSliceSize:{type:[Number,String],default:10},virtualScrollSliceRatioBefore:{type:[Number,String],default:1},virtualScrollSliceRatioAfter:{type:[Number,String],default:1},virtualScrollItemSize:{type:[Number,String],default:24},virtualScrollStickySizeStart:{type:[Number,String],default:0},virtualScrollStickySizeEnd:{type:[Number,String],default:0},tableColspan:[Number,String]},Yf=Object.keys(Uf),ka={virtualScrollHorizontal:Boolean,onVirtualScroll:Function,...Uf};function Zf({virtualScrollLength:t,getVirtualScrollTarget:e,getVirtualScrollEl:n,virtualScrollItemSizeComputed:i}){const o=$e(),{props:s,emit:r,proxy:a}=o,{$q:l}=a;let c,u,d,h=[],f;const m=N(0),p=N(0),v=N({}),b=N(null),x=N(null),y=N(null),_=N({from:0,to:0}),C=g(()=>s.tableColspan!==void 0?s.tableColspan:100);i===void 0&&(i=g(()=>s.virtualScrollItemSize));const S=g(()=>i.value+";"+s.virtualScrollHorizontal),E=g(()=>S.value+";"+s.virtualScrollSliceRatioBefore+";"+s.virtualScrollSliceRatioAfter);ge(E,()=>{U()}),ge(S,A);function A(){$(u,!0)}function O(D){$(D===void 0?u:D)}function P(D,T){const Q=e();if(Q==null||Q.nodeType===8)return;const ae=ta(Q,n(),b.value,x.value,s.virtualScrollHorizontal,l.lang.rtl,s.virtualScrollStickySizeStart,s.virtualScrollStickySizeEnd);d!==ae.scrollViewSize&&U(ae.scrollViewSize),M(Q,ae,Math.min(t.value-1,Math.max(0,parseInt(D,10)||0)),0,cS.indexOf(T)!==-1?T:u!==-1&&D>u?"end":"start")}function q(){const D=e();if(D==null||D.nodeType===8)return;const T=ta(D,n(),b.value,x.value,s.virtualScrollHorizontal,l.lang.rtl,s.virtualScrollStickySizeStart,s.virtualScrollStickySizeEnd),Q=t.value-1,ae=T.scrollMaxSize-T.offsetStart-T.offsetEnd-p.value;if(c===T.scrollStart)return;if(T.scrollMaxSize<=0){M(D,T,0,0);return}d!==T.scrollViewSize&&U(T.scrollViewSize),H(_.value.from);const fe=Math.floor(T.scrollMaxSize-Math.max(T.scrollViewSize,T.offsetEnd)-Math.min(f[Q],T.scrollViewSize/2));if(fe>0&&Math.ceil(T.scrollStart)>=fe){M(D,T,Q,T.scrollMaxSize-T.offsetEnd-h.reduce(Ri,0));return}let B=0,J=T.scrollStart-T.offsetStart,we=J;if(J<=ae&&J+T.scrollViewSize>=m.value)J-=m.value,B=_.value.from,we=J;else for(let Z=0;J>=h[Z]&&B0&&B-T.scrollViewSize?(B++,we=J):we=f[B]+J;M(D,T,B,we)}function M(D,T,Q,ae,fe){const B=typeof fe=="string"&&fe.indexOf("-force")!==-1,J=B===!0?fe.replace("-force",""):fe,we=J!==void 0?J:"start";let Z=Math.max(0,Q-v.value[we]),Ee=Z+v.value.total;Ee>t.value&&(Ee=t.value,Z=Math.max(0,Ee-v.value.total)),c=T.scrollStart;const Xe=Z!==_.value.from||Ee!==_.value.to;if(Xe===!1&&J===void 0){Y(Q);return}const{activeElement:_t}=document,et=y.value;Xe===!0&&et!==null&&et!==_t&&et.contains(_t)===!0&&(et.addEventListener("focusout",z),setTimeout(()=>{et!==null&&et.removeEventListener("focusout",z)})),uS(et,Q-Z);const dt=J!==void 0?f.slice(Z,Q).reduce(Ri,0):0;if(Xe===!0){const mt=Ee>=_.value.from&&Z<=_.value.to?_.value.to:Ee;_.value={from:Z,to:mt},m.value=lo(h,f,0,Z),p.value=lo(h,f,Ee,t.value),requestAnimationFrame(()=>{_.value.to!==Ee&&c===T.scrollStart&&(_.value={from:_.value.from,to:Ee},p.value=lo(h,f,Ee,t.value))})}requestAnimationFrame(()=>{if(c!==T.scrollStart)return;Xe===!0&&H(Z);const mt=f.slice(Z,Q).reduce(Ri,0),ht=mt+T.offsetStart+m.value,It=ht+f[Q];let Dt=ht+ae;if(J!==void 0){const $t=mt-dt,Ot=T.scrollStart+$t;Dt=B!==!0&&OtZ.classList&&Z.classList.contains("q-virtual-scroll--skip")===!1),ae=Q.length,fe=s.virtualScrollHorizontal===!0?Z=>Z.getBoundingClientRect().width:Z=>Z.offsetHeight;let B=D,J,we;for(let Z=0;Z=ae;B--)f[B]=Q;const fe=Math.floor((t.value-1)/nn);h=[];for(let B=0;B<=fe;B++){let J=0;const we=Math.min((B+1)*nn,t.value);for(let Z=B*nn;Z=0?(H(_.value.from),at(()=>{P(D)})):te()}function U(D){if(D===void 0&&typeof window<"u"){const J=e();J!=null&&J.nodeType!==8&&(D=ta(J,n(),b.value,x.value,s.virtualScrollHorizontal,l.lang.rtl,s.virtualScrollStickySizeStart,s.virtualScrollStickySizeEnd).scrollViewSize)}d=D;const T=parseFloat(s.virtualScrollSliceRatioBefore)||0,Q=parseFloat(s.virtualScrollSliceRatioAfter)||0,ae=1+T+Q,fe=D===void 0||D<=0?1:Math.ceil(D/i.value),B=Math.max(1,fe,Math.ceil((s.virtualScrollSliceSize>0?s.virtualScrollSliceSize:10)/ae));v.value={total:Math.ceil(B*ae),start:Math.ceil(B*T),center:Math.ceil(B*(.5+T)),end:Math.ceil(B*(1+T)),view:fe}}function G(D,T){const Q=s.virtualScrollHorizontal===!0?"width":"height",ae={["--q-virtual-scroll-item-"+Q]:i.value+"px"};return[D==="tbody"?w(D,{class:"q-virtual-scroll__padding",key:"before",ref:b},[w("tr",[w("td",{style:{[Q]:`${m.value}px`,...ae},colspan:C.value})])]):w(D,{class:"q-virtual-scroll__padding",key:"before",ref:b,style:{[Q]:`${m.value}px`,...ae}}),w(D,{class:"q-virtual-scroll__content",key:"content",ref:y,tabindex:-1},T.flat()),D==="tbody"?w(D,{class:"q-virtual-scroll__padding",key:"after",ref:x},[w("tr",[w("td",{style:{[Q]:`${p.value}px`,...ae},colspan:C.value})])]):w(D,{class:"q-virtual-scroll__padding",key:"after",ref:x,style:{[Q]:`${p.value}px`,...ae}})]}function Y(D){u!==D&&(s.onVirtualScroll!==void 0&&r("virtualScroll",{index:D,from:_.value.from,to:_.value.to-1,direction:D{U()});let de=!1;return er(()=>{de=!0}),tr(()=>{if(de!==!0)return;const D=e();c!==void 0&&D!==void 0&&D!==null&&D.nodeType!==8?Wu(D,c,s.virtualScrollHorizontal,l.lang.rtl):P(u)}),Lt(()=>{te.cancel()}),Object.assign(a,{scrollTo:P,reset:A,refresh:O}),{virtualScrollSliceRange:_,virtualScrollSliceSizeComputed:v,setVirtualScrollSize:U,onVirtualScrollEvt:te,localResetVirtualScroll:$,padVirtualScroll:G,scrollTo:P,reset:A,refresh:O}}const dS={list:ir,table:lS},hS=["list","table","__qtable"],fS=ze({name:"QVirtualScroll",props:{...ka,type:{type:String,default:"list",validator:t=>hS.includes(t)},items:{type:Array,default:()=>[]},itemsFn:Function,itemsSize:Number,scrollTarget:Id},setup(t,{slots:e,attrs:n}){let i;const o=N(null),s=g(()=>t.itemsSize>=0&&t.itemsFn!==void 0?parseInt(t.itemsSize,10):Array.isArray(t.items)?t.items.length:0),{virtualScrollSliceRange:r,localResetVirtualScroll:a,padVirtualScroll:l,onVirtualScrollEvt:c}=Zf({virtualScrollLength:s,getVirtualScrollTarget:m,getVirtualScrollEl:f}),u=g(()=>{if(s.value===0)return[];const x=(y,_)=>({index:r.value.from+_,item:y});return t.itemsFn===void 0?t.items.slice(r.value.from,r.value.to).map(x):t.itemsFn(r.value.from,r.value.to-r.value.from).map(x)}),d=g(()=>"q-virtual-scroll q-virtual-scroll"+(t.virtualScrollHorizontal===!0?"--horizontal":"--vertical")+(t.scrollTarget!==void 0?"":" scroll")),h=g(()=>t.scrollTarget!==void 0?{}:{tabindex:0});ge(s,()=>{a()}),ge(()=>t.scrollTarget,()=>{v(),p()});function f(){return o.value.$el||o.value}function m(){return i}function p(){i=Dd(f(),t.scrollTarget),i.addEventListener("scroll",c,Vl.passive)}function v(){i!==void 0&&(i.removeEventListener("scroll",c,Vl.passive),i=void 0)}function b(){let x=l(t.type==="list"?"div":"tbody",u.value.map(e.default));return e.before!==void 0&&(x=e.before().concat(x)),di(e.after,x)}return Ea(()=>{a()}),cn(()=>{p()}),tr(()=>{p()}),er(()=>{v()}),Lt(()=>{v()}),()=>{if(e.default===void 0){console.error("QVirtualScroll: default scoped slot is required for rendering");return}return t.type==="__qtable"?jf({ref:o,class:"q-table__middle "+d.value},b()):w(dS[t.type],{...n,ref:o,class:[n.class,d.value],...h.value},b)}}}),Xf=ze({name:"QField",inheritAttrs:!1,props:{...gr,tag:{type:String,default:"label"}},emits:hl,setup(){return gl(fl({tagProp:!0}))}}),gS={xs:8,sm:10,md:14,lg:20,xl:24},Ks=ze({name:"QChip",props:{...un,...qa,dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,modelValue:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean,ripple:{type:[Boolean,Object],default:!0}},emits:["update:modelValue","update:selected","remove","click"],setup(t,{slots:e,emit:n}){const{proxy:{$q:i}}=$e(),o=dn(t,i),s=Ra(t,gS),r=g(()=>t.selected===!0||t.icon!==void 0),a=g(()=>t.selected===!0?t.iconSelected||i.iconSet.chip.selected:t.icon),l=g(()=>t.iconRemove||i.iconSet.chip.remove),c=g(()=>t.disable===!1&&(t.clickable===!0||t.selected!==null)),u=g(()=>{const v=t.outline===!0&&t.color||t.textColor;return"q-chip row inline no-wrap items-center"+(t.outline===!1&&t.color!==void 0?` bg-${t.color}`:"")+(v?` text-${v} q-chip--colored`:"")+(t.disable===!0?" disabled":"")+(t.dense===!0?" q-chip--dense":"")+(t.outline===!0?" q-chip--outline":"")+(t.selected===!0?" q-chip--selected":"")+(c.value===!0?" q-chip--clickable cursor-pointer non-selectable q-hoverable":"")+(t.square===!0?" q-chip--square":"")+(o.value===!0?" q-chip--dark q-dark":"")}),d=g(()=>{const v=t.disable===!0?{tabindex:-1,"aria-disabled":"true"}:{tabindex:t.tabindex||0},b={...v,role:"button","aria-hidden":"false","aria-label":t.removeAriaLabel||i.lang.label.remove};return{chip:v,remove:b}});function h(v){v.keyCode===13&&f(v)}function f(v){t.disable||(n("update:selected",!t.selected),n("click",v))}function m(v){(v.keyCode===void 0||v.keyCode===13)&&(Pt(v),t.disable===!1&&(n("update:modelValue",!1),n("remove")))}function p(){const v=[];c.value===!0&&v.push(w("div",{class:"q-focus-helper"})),r.value===!0&&v.push(w(_e,{class:"q-chip__icon q-chip__icon--left",name:a.value}));const b=t.label!==void 0?[w("div",{class:"ellipsis"},[t.label])]:void 0;return v.push(w("div",{class:"q-chip__content col row no-wrap items-center q-anchor--skip"},im(e.default,b))),t.iconRight&&v.push(w(_e,{class:"q-chip__icon q-chip__icon--right",name:t.iconRight})),t.removable===!0&&v.push(w(_e,{class:"q-chip__icon q-chip__icon--remove cursor-pointer",name:l.value,...d.value.remove,onClick:m,onKeyup:m})),v}return()=>{if(t.modelValue===!1)return;const v={class:u.value,style:s.value};return c.value===!0&&Object.assign(v,d.value.chip,{onClick:f,onKeyup:h}),nr("div",v,p(),"ripple",t.ripple!==!1&&t.disable!==!0,()=>[[md,t.ripple]])}}}),Kf=ze({name:"QMenu",inheritAttrs:!1,props:{...Sm,...kd,...un,...Fa,persistent:Boolean,autoClose:Boolean,separateClosePopup:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,fit:Boolean,cover:Boolean,square:Boolean,anchor:{type:String,validator:Fl},self:{type:String,validator:Fl},offset:{type:Array,validator:wm},scrollTarget:Id,touchPosition:Boolean,maxHeight:{type:String,default:null},maxWidth:{type:String,default:null}},emits:[...Cd,"click","escapeKey"],setup(t,{slots:e,emit:n,attrs:i}){let o=null,s,r,a;const l=$e(),{proxy:c}=l,{$q:u}=c,d=N(null),h=N(!1),f=g(()=>t.persistent!==!0&&t.noRouteDismiss!==!0),m=dn(t,u),{registerTick:p,removeTick:v}=yo(),{registerTimeout:b}=Io(),{transitionProps:x,transitionStyle:y}=Md(t),{localScrollTarget:_,changeScrollEvent:C,unconfigureScrollTarget:S}=km(t,Q),{anchorEl:E,canShow:A}=Cm({showing:h}),{hide:O}=Td({showing:h,canShow:A,handleShow:de,handleHide:D,hideOnRouteChange:f,processOnMount:!0}),{showPortal:P,hidePortal:q,renderPortal:M}=Pd(l,d,we,"menu"),H={anchorEl:E,innerRef:d,onClickOutside(Z){if(t.persistent!==!0&&h.value===!0)return O(Z),(Z.type==="touchstart"||Z.target.classList.contains("q-dialog__backdrop"))&&Pt(Z),!0}},z=g(()=>Bl(t.anchor||(t.cover===!0?"center middle":"bottom start"),u.lang.rtl)),$=g(()=>t.cover===!0?z.value:Bl(t.self||"top start",u.lang.rtl)),U=g(()=>(t.square===!0?" q-menu--square":"")+(m.value===!0?" q-menu--dark q-dark":"")),G=g(()=>t.autoClose===!0?{onClick:ae}:{}),Y=g(()=>h.value===!0&&t.persistent!==!0);ge(Y,Z=>{Z===!0?(qf(B),Tm(H)):(Zs(B),zl(H))});function te(){rr(()=>{let Z=d.value;Z&&Z.contains(document.activeElement)!==!0&&(Z=Z.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||Z.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||Z.querySelector("[autofocus], [data-autofocus]")||Z,Z.focus({preventScroll:!0}))})}function de(Z){if(o=t.noRefocus===!1?document.activeElement:null,Lf(fe),P(),Q(),s=void 0,Z!==void 0&&(t.touchPosition||t.contextMenu)){const Ee=Es(Z);if(Ee.left!==void 0){const{top:Xe,left:_t}=E.value.getBoundingClientRect();s={left:Ee.left-_t,top:Ee.top-Xe}}}r===void 0&&(r=ge(()=>u.screen.width+"|"+u.screen.height+"|"+t.self+"|"+t.anchor+"|"+u.lang.rtl,J)),t.noFocus!==!0&&document.activeElement.blur(),p(()=>{J(),t.noFocus!==!0&&te()}),b(()=>{u.platform.is.ios===!0&&(a=t.autoClose,d.value.click()),J(),P(!0),n("show",Z)},t.transitionDuration)}function D(Z){v(),q(),T(!0),o!==null&&(Z===void 0||Z.qClickOutside!==!0)&&(((Z&&Z.type.indexOf("key")===0?o.closest('[tabindex]:not([tabindex^="-"])'):void 0)||o).focus(),o=null),b(()=>{q(!0),n("hide",Z)},t.transitionDuration)}function T(Z){s=void 0,r!==void 0&&(r(),r=void 0),(Z===!0||h.value===!0)&&(Sa(fe),S(),zl(H),Zs(B)),Z!==!0&&(o=null)}function Q(){(E.value!==null||t.scrollTarget!==void 0)&&(_.value=Dd(E.value,t.scrollTarget),C(_.value,J))}function ae(Z){a!==!0?(Pm(c,Z),n("click",Z)):a=!1}function fe(Z){Y.value===!0&&t.noFocus!==!0&&_d(d.value,Z.target)!==!0&&te()}function B(Z){n("escapeKey"),O(Z)}function J(){Mm({targetEl:d.value,offset:t.offset,anchorEl:E.value,anchorOrigin:z.value,selfOrigin:$.value,absoluteOffset:s,fit:t.fit,cover:t.cover,maxHeight:t.maxHeight,maxWidth:t.maxWidth})}function we(){return w(Po,x.value,()=>h.value===!0?w("div",{role:"menu",...i,ref:d,tabindex:-1,class:["q-menu q-position-engine scroll"+U.value,i.class],style:[i.style,y.value],...G.value},Ge(e.default)):null)}return Lt(T),Object.assign(c,{focus:te,updatePosition:J}),M}}),Hu=t=>["add","add-unique","toggle"].includes(t),mS=".*+?^${}()|[]\\",vS=Object.keys(gr);function na(t,e){if(typeof t=="function")return t;const n=t!==void 0?t:e;return i=>i!==null&&typeof i=="object"&&n in i?i[n]:i}const pS=ze({name:"QSelect",inheritAttrs:!1,props:{...ka,...mr,...gr,modelValue:{required:!0},multiple:Boolean,displayValue:[String,Number],displayValueHtml:Boolean,dropdownIcon:String,options:{type:Array,default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],hideSelected:Boolean,hideDropdownIcon:Boolean,fillInput:Boolean,maxValues:[Number,String],optionsDense:Boolean,optionsDark:{type:Boolean,default:null},optionsSelectedClass:String,optionsHtml:Boolean,optionsCover:Boolean,menuShrink:Boolean,menuAnchor:String,menuSelf:String,menuOffset:Array,popupContentClass:String,popupContentStyle:[String,Array,Object],popupNoRouteDismiss:Boolean,useInput:Boolean,useChips:Boolean,newValueMode:{type:String,validator:Hu},mapOptions:Boolean,emitValue:Boolean,disableTabSelection:Boolean,inputDebounce:{type:[Number,String],default:500},inputClass:[Array,String,Object],inputStyle:[Array,String,Object],tabindex:{type:[String,Number],default:0},autocomplete:String,transitionShow:{},transitionHide:{},transitionDuration:{},behavior:{type:String,validator:t=>["default","menu","dialog"].includes(t),default:"default"},virtualScrollItemSize:ka.virtualScrollItemSize.type,onNewValue:Function,onFilter:Function},emits:[...hl,"add","remove","inputValue","keyup","keypress","keydown","popupShow","popupHide","filterAbort"],setup(t,{slots:e,emit:n}){const{proxy:i}=$e(),{$q:o}=i,s=N(!1),r=N(!1),a=N(-1),l=N(""),c=N(!1),u=N(!1);let d=null,h=null,f,m,p,v=null,b,x,y,_;const C=N(null),S=N(null),E=N(null),A=N(null),O=N(null),P=Nf(t),q=Wf(F),M=g(()=>t.options.length),H=g(()=>t.virtualScrollItemSize===void 0?t.optionsDense===!0?24:48:t.virtualScrollItemSize),{virtualScrollSliceRange:z,virtualScrollSliceSizeComputed:$,localResetVirtualScroll:U,padVirtualScroll:G,onVirtualScrollEvt:Y,scrollTo:te,setVirtualScrollSize:de}=Zf({virtualScrollLength:M,getVirtualScrollTarget:kr,getVirtualScrollEl:Dn,virtualScrollItemSizeComputed:H}),D=fl(),T=g(()=>{const k=t.mapOptions===!0&&t.multiple!==!0,oe=t.modelValue!==void 0&&(t.modelValue!==null||k===!0)?t.multiple===!0&&Array.isArray(t.modelValue)?t.modelValue:[t.modelValue]:[];if(t.mapOptions===!0){const se=t.mapOptions===!0&&f!==void 0?f:[],Ie=oe.map(Ye=>W(Ye,se));return t.modelValue===null&&k===!0?Ie.filter(Ye=>Ye!==null):Ie}return oe}),Q=g(()=>{const k={};return vS.forEach(oe=>{const se=t[oe];se!==void 0&&(k[oe]=se)}),k}),ae=g(()=>t.optionsDark===null?D.isDark.value:t.optionsDark),fe=g(()=>Fo(T.value)),B=g(()=>{let k="q-field__input q-placeholder col";return t.hideSelected===!0||T.value.length===0?[k,t.inputClass]:(k+=" q-field__input--padding",t.inputClass===void 0?k:[k,t.inputClass])}),J=g(()=>(t.virtualScrollHorizontal===!0?"q-virtual-scroll--horizontal":"")+(t.popupContentClass?" "+t.popupContentClass:"")),we=g(()=>M.value===0),Z=g(()=>T.value.map(k=>j.value(k)).join(", ")),Ee=g(()=>t.displayValue!==void 0?t.displayValue:Z.value),Xe=g(()=>t.optionsHtml===!0?()=>!0:k=>k!=null&&k.html===!0),_t=g(()=>t.displayValueHtml===!0||t.displayValue===void 0&&(t.optionsHtml===!0||T.value.some(Xe.value))),et=g(()=>D.focused.value===!0?t.tabindex:-1),dt=g(()=>{const k={tabindex:t.tabindex,role:"combobox","aria-label":t.label,"aria-readonly":t.readonly===!0?"true":"false","aria-autocomplete":t.useInput===!0?"list":"none","aria-expanded":s.value===!0?"true":"false","aria-controls":`${D.targetUid.value}_lb`};return a.value>=0&&(k["aria-activedescendant"]=`${D.targetUid.value}_${a.value}`),k}),mt=g(()=>({id:`${D.targetUid.value}_lb`,role:"listbox","aria-multiselectable":t.multiple===!0?"true":"false"})),ht=g(()=>T.value.map((k,oe)=>({index:oe,opt:k,html:Xe.value(k),selected:!0,removeAtIndex:Pe,toggleOption:tt,tabindex:et.value}))),It=g(()=>{if(M.value===0)return[];const{from:k,to:oe}=z.value;return t.options.slice(k,oe).map((se,Ie)=>{const Ye=re.value(se)===!0,Ue=me(se)===!0,xt=k+Ie,ut={clickable:!0,active:Ue,activeClass:Ot.value,manualFocus:!0,focused:!1,disable:Ye,tabindex:-1,dense:t.optionsDense,dark:ae.value,role:"option","aria-selected":Ue===!0?"true":"false",id:`${D.targetUid.value}_${xt}`,onClick:()=>{tt(se)}};return Ye!==!0&&(a.value===xt&&(ut.focused=!0),o.platform.is.desktop===!0&&(ut.onMousemove=()=>{s.value===!0&&vt(xt)})),{index:xt,opt:se,html:Xe.value(se),label:j.value(se),selected:ut.active,focused:ut.focused,toggleOption:tt,setOptionIndex:vt,itemProps:ut}})}),Dt=g(()=>t.dropdownIcon!==void 0?t.dropdownIcon:o.iconSet.arrow.dropdown),$t=g(()=>t.optionsCover===!1&&t.outlined!==!0&&t.standout!==!0&&t.borderless!==!0&&t.rounded!==!0),Ot=g(()=>t.optionsSelectedClass!==void 0?t.optionsSelectedClass:t.color!==void 0?`text-${t.color}`:""),ct=g(()=>na(t.optionValue,"value")),j=g(()=>na(t.optionLabel,"label")),re=g(()=>na(t.optionDisable,"disable")),X=g(()=>T.value.map(ct.value)),ce=g(()=>{const k={onInput:F,onChange:q,onKeydown:Qt,onKeyup:nt,onKeypress:Ft,onFocus:ke,onClick(oe){m===!0&&wn(oe)}};return k.onCompositionstart=k.onCompositionupdate=k.onCompositionend=q,k});ge(T,k=>{f=k,t.useInput===!0&&t.fillInput===!0&&t.multiple!==!0&&D.innerLoading.value!==!0&&(r.value!==!0&&s.value!==!0||fe.value!==!0)&&(p!==!0&&_i(),(r.value===!0||s.value===!0)&&pe(""))},{immediate:!0}),ge(()=>t.fillInput,_i),ge(s,Tr),ge(M,Fg);function Oe(k){return t.emitValue===!0?ct.value(k):k}function ye(k){if(k!==-1&&k=t.maxValues)return;const Ie=t.modelValue.slice();n("add",{index:Ie.length,value:se}),Ie.push(se),n("update:modelValue",Ie)}function tt(k,oe){if(D.editable.value!==!0||k===void 0||re.value(k)===!0)return;const se=ct.value(k);if(t.multiple!==!0){oe!==!0&&(ve(t.fillInput===!0?j.value(k):"",!0,!0),Un()),S.value!==null&&S.value.focus(),(T.value.length===0||eo(ct.value(T.value[0]),se)!==!0)&&n("update:modelValue",t.emitValue===!0?se:k);return}if((m!==!0||c.value===!0)&&D.focus(),ke(),T.value.length===0){const Ue=t.emitValue===!0?se:k;n("add",{index:0,value:Ue}),n("update:modelValue",t.multiple===!0?[Ue]:Ue);return}const Ie=t.modelValue.slice(),Ye=X.value.findIndex(Ue=>eo(Ue,se));if(Ye!==-1)n("remove",{index:Ye,value:Ie.splice(Ye,1)[0]});else{if(t.maxValues!==void 0&&Ie.length>=t.maxValues)return;const Ue=t.emitValue===!0?se:k;n("add",{index:Ie.length,value:Ue}),Ie.push(Ue)}n("update:modelValue",Ie)}function vt(k){if(o.platform.is.desktop!==!0)return;const oe=k!==-1&&k=0?j.value(t.options[se]):b,!0))}}function W(k,oe){const se=Ie=>eo(ct.value(Ie),k);return t.options.find(se)||oe.find(se)||k}function me(k){const oe=ct.value(k);return X.value.find(se=>eo(se,oe))!==void 0}function ke(k){t.useInput===!0&&S.value!==null&&(k===void 0||S.value===k.target&&k.target.value===Z.value)&&S.value.select()}function He(k){Js(k,27)===!0&&s.value===!0&&(wn(k),Un(),_i()),n("keyup",k)}function nt(k){const{value:oe}=k.target;if(k.keyCode!==void 0){He(k);return}if(k.target.value="",d!==null&&(clearTimeout(d),d=null),h!==null&&(clearTimeout(h),h=null),_i(),typeof oe=="string"&&oe.length!==0){const se=oe.toLocaleLowerCase(),Ie=Ue=>{const xt=t.options.find(ut=>Ue.value(ut).toLocaleLowerCase()===se);return xt===void 0?!1:(T.value.indexOf(xt)===-1?tt(xt):Un(),!0)},Ye=Ue=>{Ie(ct)!==!0&&(Ie(j)===!0||Ue===!0||pe(oe,!0,()=>Ye(!0)))};Ye()}else D.clearValue(k)}function Ft(k){n("keypress",k)}function Qt(k){if(n("keydown",k),Va(k)===!0)return;const oe=l.value.length!==0&&(t.newValueMode!==void 0||t.onNewValue!==void 0),se=k.shiftKey!==!0&&t.disableTabSelection!==!0&&t.multiple!==!0&&(a.value!==-1||oe===!0);if(k.keyCode===27){Rn(k);return}if(k.keyCode===9&&se===!1){bi();return}if(k.target===void 0||k.target.id!==D.targetUid.value||D.editable.value!==!0)return;if(k.keyCode===40&&D.innerLoading.value!==!0&&s.value===!1){Pt(k),yi();return}if(k.keyCode===8&&(t.useChips===!0||t.clearable===!0)&&t.hideSelected!==!0&&l.value.length===0){t.multiple===!0&&Array.isArray(t.modelValue)===!0?ye(t.modelValue.length-1):t.multiple!==!0&&t.modelValue!==null&&n("update:modelValue",null);return}(k.keyCode===35||k.keyCode===36)&&(typeof l.value!="string"||l.value.length===0)&&(Pt(k),a.value=-1,Vt(k.keyCode===36?1:-1,t.multiple)),(k.keyCode===33||k.keyCode===34)&&$.value!==void 0&&(Pt(k),a.value=Math.max(-1,Math.min(M.value,a.value+(k.keyCode===33?-1:1)*$.value.view)),Vt(k.keyCode===33?1:-1,t.multiple)),(k.keyCode===38||k.keyCode===40)&&(Pt(k),Vt(k.keyCode===38?-1:1,t.multiple));const Ie=M.value;if((y===void 0||_0&&t.useInput!==!0&&k.key!==void 0&&k.key.length===1&&k.altKey===!1&&k.ctrlKey===!1&&k.metaKey===!1&&(k.keyCode!==32||y.length!==0)){s.value!==!0&&yi(k);const Ye=k.key.toLocaleLowerCase(),Ue=y.length===1&&y[0]===Ye;_=Date.now()+1500,Ue===!1&&(Pt(k),y+=Ye);const xt=new RegExp("^"+y.split("").map(Ir=>mS.indexOf(Ir)!==-1?"\\"+Ir:Ir).join(".*"),"i");let ut=a.value;if(Ue===!0||ut<0||xt.test(j.value(t.options[ut]))!==!0)do ut=Nl(ut+1,-1,Ie-1);while(ut!==a.value&&(re.value(t.options[ut])===!0||xt.test(j.value(t.options[ut]))!==!0));a.value!==ut&&at(()=>{vt(ut),te(ut),ut>=0&&t.useInput===!0&&t.fillInput===!0&&ie(j.value(t.options[ut]),!0)});return}if(!(k.keyCode!==13&&(k.keyCode!==32||t.useInput===!0||y!=="")&&(k.keyCode!==9||se===!1))){if(k.keyCode!==9&&Pt(k),a.value!==-1&&a.value{if(xt){if(Hu(xt)!==!0)return}else xt=t.newValueMode;if(ve("",t.multiple!==!0,!0),Ue==null)return;(xt==="toggle"?tt:ot)(Ue,xt==="add-unique"),t.multiple!==!0&&(S.value!==null&&S.value.focus(),Un())};if(t.onNewValue!==void 0?n("newValue",l.value,Ye):Ye(l.value),t.multiple!==!0)return}s.value===!0?bi():D.innerLoading.value!==!0&&yi()}}function Dn(){return m===!0?O.value:E.value!==null&&E.value.contentEl!==null?E.value.contentEl:void 0}function kr(){return Dn()}function Cr(){return t.hideSelected===!0?[]:e["selected-item"]!==void 0?ht.value.map(k=>e["selected-item"](k)).slice():e.selected!==void 0?[].concat(e.selected()):t.useChips===!0?ht.value.map((k,oe)=>w(Ks,{key:"option-"+oe,removable:D.editable.value===!0&&re.value(k.opt)!==!0,dense:!0,textColor:t.color,tabindex:et.value,onRemove(){k.removeAtIndex(oe)}},()=>w("span",{class:"ellipsis",[k.html===!0?"innerHTML":"textContent"]:j.value(k.opt)}))):[w("span",{[_t.value===!0?"innerHTML":"textContent"]:Ee.value})]}function Qo(){if(we.value===!0)return e["no-option"]!==void 0?e["no-option"]({inputValue:l.value}):void 0;const k=e.option!==void 0?e.option:se=>w(or,{key:se.index,...se.itemProps},()=>w(Do,()=>w(sr,()=>w("span",{[se.html===!0?"innerHTML":"textContent"]:se.label}))));let oe=G("div",It.value.map(k));return e["before-options"]!==void 0&&(oe=e["before-options"]().concat(oe)),di(e["after-options"],oe)}function Mr(k,oe){const se=oe===!0?{...dt.value,...D.splitAttrs.attributes.value}:void 0,Ie={ref:oe===!0?S:void 0,key:"i_t",class:B.value,style:t.inputStyle,value:l.value!==void 0?l.value:"",type:"search",...se,id:oe===!0?D.targetUid.value:void 0,maxlength:t.maxlength,autocomplete:t.autocomplete,"data-autofocus":k===!0||t.autofocus===!0||void 0,disabled:t.disable===!0,readonly:t.readonly===!0,...ce.value};return k!==!0&&m===!0&&(Array.isArray(Ie.class)===!0?Ie.class=[...Ie.class,"no-pointer-events"]:Ie.class+=" no-pointer-events"),w("input",Ie)}function F(k){d!==null&&(clearTimeout(d),d=null),h!==null&&(clearTimeout(h),h=null),!(k&&k.target&&k.target.qComposing===!0)&&(ie(k.target.value||""),p=!0,b=l.value,D.focused.value!==!0&&(m!==!0||c.value===!0)&&D.focus(),t.onFilter!==void 0&&(d=setTimeout(()=>{d=null,pe(l.value)},t.inputDebounce)))}function ie(k,oe){l.value!==k&&(l.value=k,oe===!0||t.inputDebounce===0||t.inputDebounce==="0"?n("inputValue",k):h=setTimeout(()=>{h=null,n("inputValue",k)},t.inputDebounce))}function ve(k,oe,se){p=se!==!0,t.useInput===!0&&(ie(k,!0),(oe===!0||se!==!0)&&(b=k),oe!==!0&&pe(k))}function pe(k,oe,se){if(t.onFilter===void 0||oe!==!0&&D.focused.value!==!0)return;D.innerLoading.value===!0?n("filterAbort"):(D.innerLoading.value=!0,u.value=!0),k!==""&&t.multiple!==!0&&T.value.length!==0&&p!==!0&&k===j.value(T.value[0])&&(k="");const Ie=setTimeout(()=>{s.value===!0&&(s.value=!1)},10);v!==null&&clearTimeout(v),v=Ie,n("filter",k,(Ye,Ue)=>{(oe===!0||D.focused.value===!0)&&v===Ie&&(clearTimeout(v),typeof Ye=="function"&&Ye(),u.value=!1,at(()=>{D.innerLoading.value=!1,D.editable.value===!0&&(oe===!0?s.value===!0&&Un():s.value===!0?Tr(!0):s.value=!0),typeof Ue=="function"&&at(()=>{Ue(i)}),typeof se=="function"&&at(()=>{se(i)})}))},()=>{D.focused.value===!0&&v===Ie&&(clearTimeout(v),D.innerLoading.value=!1,u.value=!1),s.value===!0&&(s.value=!1)})}function Te(){return w(Kf,{ref:E,class:J.value,style:t.popupContentStyle,modelValue:s.value,fit:t.menuShrink!==!0,cover:t.optionsCover===!0&&we.value!==!0&&t.useInput!==!0,anchor:t.menuAnchor,self:t.menuSelf,offset:t.menuOffset,dark:ae.value,noParentEvent:!0,noRefocus:!0,noFocus:!0,noRouteDismiss:t.popupNoRouteDismiss,square:$t.value,transitionShow:t.transitionShow,transitionHide:t.transitionHide,transitionDuration:t.transitionDuration,separateClosePopup:!0,...mt.value,onScrollPassive:Y,onBeforeShow:Tl,onBeforeHide:it,onShow:Ke},Qo)}function it(k){Il(k),bi()}function Ke(){de()}function Gt(k){wn(k),S.value!==null&&S.value.focus(),c.value=!0,window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,0)}function Ct(k){wn(k),at(()=>{c.value=!1})}function vi(){const k=[w(Xf,{class:`col-auto ${D.fieldClass.value}`,...Q.value,for:D.targetUid.value,dark:ae.value,square:!0,loading:u.value,itemAligned:!1,filled:!0,stackLabel:l.value.length!==0,...D.splitAttrs.listeners.value,onFocus:Gt,onBlur:Ct},{...e,rawControl:()=>D.getControl(!0),before:void 0,after:void 0})];return s.value===!0&&k.push(w("div",{ref:O,class:J.value+" scroll",style:t.popupContentStyle,...mt.value,onClick:Rn,onScrollPassive:Y},Qo())),w(Xi,{ref:A,modelValue:r.value,position:t.useInput===!0?"top":void 0,transitionShow:x,transitionHide:t.transitionHide,transitionDuration:t.transitionDuration,noRouteDismiss:t.popupNoRouteDismiss,onBeforeShow:Tl,onBeforeHide:pi,onHide:Pr,onShow:Lg},()=>w("div",{class:"q-select__dialog"+(ae.value===!0?" q-select__dialog--dark q-dark":"")+(c.value===!0?" q-select__dialog--focused":"")},k))}function pi(k){Il(k),A.value!==null&&A.value.__updateRefocusTarget(D.rootRef.value.querySelector(".q-field__native > [tabindex]:last-child")),D.focused.value=!1}function Pr(k){Un(),D.focused.value===!1&&n("blur",k),_i()}function Lg(){const k=document.activeElement;(k===null||k.id!==D.targetUid.value)&&S.value!==null&&S.value!==k&&S.value.focus(),de()}function bi(){r.value!==!0&&(a.value=-1,s.value===!0&&(s.value=!1),D.focused.value===!1&&(v!==null&&(clearTimeout(v),v=null),D.innerLoading.value===!0&&(n("filterAbort"),D.innerLoading.value=!1,u.value=!1)))}function yi(k){D.editable.value===!0&&(m===!0?(D.onControlFocusin(k),r.value=!0,at(()=>{D.focus()})):D.focus(),t.onFilter!==void 0?pe(l.value):(we.value!==!0||e["no-option"]!==void 0)&&(s.value=!0))}function Un(){r.value=!1,bi()}function _i(){t.useInput===!0&&ve(t.multiple!==!0&&t.fillInput===!0&&T.value.length!==0&&j.value(T.value[0])||"",!0,!0)}function Tr(k){let oe=-1;if(k===!0){if(T.value.length!==0){const se=ct.value(T.value[0]);oe=t.options.findIndex(Ie=>eo(ct.value(Ie),se))}U(oe)}vt(oe)}function Fg(k,oe){s.value===!0&&D.innerLoading.value===!1&&(U(-1,!0),at(()=>{s.value===!0&&D.innerLoading.value===!1&&(k>oe?U():Tr(!0))}))}function Pl(){r.value===!1&&E.value!==null&&E.value.updatePosition()}function Tl(k){k!==void 0&&wn(k),n("popupShow",k),D.hasPopupOpen=!0,D.onControlFocusin(k)}function Il(k){k!==void 0&&wn(k),n("popupHide",k),D.hasPopupOpen=!1,D.onControlFocusout(k)}function Dl(){m=o.platform.is.mobile!==!0&&t.behavior!=="dialog"?!1:t.behavior!=="menu"&&(t.useInput===!0?e["no-option"]!==void 0||t.onFilter!==void 0||we.value===!1:!0),x=o.platform.is.ios===!0&&m===!0&&t.useInput===!0?"fade":t.transitionShow}return xd(Dl),om(Pl),Dl(),Lt(()=>{d!==null&&clearTimeout(d),h!==null&&clearTimeout(h)}),Object.assign(i,{showPopup:yi,hidePopup:Un,removeAtIndex:ye,add:ot,toggleOption:tt,getOptionIndex:()=>a.value,setOptionIndex:vt,moveOptionSelection:Vt,filter:pe,updateMenuPosition:Pl,updateInputValue:ve,isOptionSelected:me,getEmittingOptionValue:Oe,isOptionDisabled:(...k)=>re.value.apply(null,k)===!0,getOptionValue:(...k)=>ct.value.apply(null,k),getOptionLabel:(...k)=>j.value.apply(null,k)}),Object.assign(D,{innerValue:T,fieldClass:g(()=>`q-select q-field--auto-height q-select--with${t.useInput!==!0?"out":""}-input q-select--with${t.useChips!==!0?"out":""}-chips q-select--${t.multiple===!0?"multiple":"single"}`),inputRef:C,targetRef:S,hasValue:fe,showPopup:yi,floatingLabel:g(()=>t.hideSelected!==!0&&fe.value===!0||typeof l.value=="number"||l.value.length!==0||Fo(t.displayValue)),getControlChild:()=>{if(D.editable.value!==!1&&(r.value===!0||we.value!==!0||e["no-option"]!==void 0))return m===!0?vi():Te();D.hasPopupOpen===!0&&(D.hasPopupOpen=!1)},controlEvents:{onFocusin(k){D.onControlFocusin(k)},onFocusout(k){D.onControlFocusout(k,()=>{_i(),bi()})},onClick(k){if(Rn(k),m!==!0&&s.value===!0){bi(),S.value!==null&&S.value.focus();return}yi(k)}},getControl:k=>{const oe=Cr(),se=k===!0||r.value!==!0||m!==!0;if(t.useInput===!0)oe.push(Mr(k,se));else if(D.editable.value===!0){const Ye=se===!0?dt.value:void 0;oe.push(w("input",{ref:se===!0?S:void 0,key:"d_t",class:"q-select__focus-target",id:se===!0?D.targetUid.value:void 0,value:Ee.value,readonly:!0,"data-autofocus":k===!0||t.autofocus===!0||void 0,...Ye,onKeydown:Qt,onKeyup:He,onKeypress:Ft})),se===!0&&typeof t.autocomplete=="string"&&t.autocomplete.length!==0&&oe.push(w("input",{class:"q-select__autocomplete-input",autocomplete:t.autocomplete,tabindex:-1,onKeyup:nt}))}if(P.value!==void 0&&t.disable!==!0&&X.value.length!==0){const Ye=X.value.map(Ue=>w("option",{value:Ue,selected:!0}));oe.push(w("select",{class:"hidden",name:P.value,multiple:t.multiple},Ye))}const Ie=t.useInput===!0||se!==!0?void 0:D.splitAttrs.attributes.value;return w("div",{class:"q-field__native row items-center",...Ie,...D.splitAttrs.listeners.value},oe)},getInnerAppend:()=>t.loading!==!0&&u.value!==!0&&t.hideDropdownIcon!==!0?[w(_e,{class:"q-select__dropdown-icon"+(s.value===!0?" rotate-180":""),name:Dt.value})]:null}),gl(D)}}),bS={xs:2,sm:4,md:6,lg:10,xl:14};function ju(t,e,n){return{transform:e===!0?`translateX(${n.lang.rtl===!0?"-":""}100%) scale3d(${-t},1,1)`:`scale3d(${t},1,1)`}}const yS=ze({name:"QLinearProgress",props:{...un,...qa,value:{type:Number,default:0},buffer:Number,color:String,trackColor:String,reverse:Boolean,stripe:Boolean,indeterminate:Boolean,query:Boolean,rounded:Boolean,animationSpeed:{type:[String,Number],default:2100},instantFeedback:Boolean},setup(t,{slots:e}){const{proxy:n}=$e(),i=dn(t,n.$q),o=Ra(t,bS),s=g(()=>t.indeterminate===!0||t.query===!0),r=g(()=>t.reverse!==t.query),a=g(()=>({...o.value!==null?o.value:{},"--q-linear-progress-speed":`${t.animationSpeed}ms`})),l=g(()=>"q-linear-progress"+(t.color!==void 0?` text-${t.color}`:"")+(t.reverse===!0||t.query===!0?" q-linear-progress--reverse":"")+(t.rounded===!0?" rounded-borders":"")),c=g(()=>ju(t.buffer!==void 0?t.buffer:1,r.value,n.$q)),u=g(()=>`with${t.instantFeedback===!0?"out":""}-transition`),d=g(()=>`q-linear-progress__track absolute-full q-linear-progress__track--${u.value} q-linear-progress__track--${i.value===!0?"dark":"light"}`+(t.trackColor!==void 0?` bg-${t.trackColor}`:"")),h=g(()=>ju(s.value===!0?1:t.value,r.value,n.$q)),f=g(()=>`q-linear-progress__model absolute-full q-linear-progress__model--${u.value} q-linear-progress__model--${s.value===!0?"in":""}determinate`),m=g(()=>({width:`${t.value*100}%`})),p=g(()=>`q-linear-progress__stripe absolute-${t.reverse===!0?"right":"left"} q-linear-progress__stripe--${u.value}`);return()=>{const v=[w("div",{class:d.value,style:c.value}),w("div",{class:f.value,style:h.value})];return t.stripe===!0&&s.value===!1&&v.push(w("div",{class:p.value,style:m.value})),w("div",{class:l.value,style:a.value,role:"progressbar","aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":t.indeterminate===!0?void 0:t.value},di(e.default,v))}}});function _S(t,e){const n=N(null),i=g(()=>t.disable===!0?null:w("span",{ref:n,class:"no-outline",tabindex:-1}));function o(s){const r=e.value;s!==void 0&&s.type.indexOf("key")===0?r!==null&&document.activeElement!==r&&r.contains(document.activeElement)===!0&&r.focus():n.value!==null&&(s===void 0||r!==null&&r.contains(s.target)===!0)&&n.value.focus()}return{refocusTargetEl:i,refocusTarget:o}}const xS={xs:30,sm:35,md:40,lg:50,xl:60},Qf={...un,...qa,...mr,modelValue:{required:!0,default:null},val:{},trueValue:{default:!0},falseValue:{default:!1},indeterminateValue:{default:null},checkedIcon:String,uncheckedIcon:String,indeterminateIcon:String,toggleOrder:{type:String,validator:t=>t==="tf"||t==="ft"},toggleIndeterminate:Boolean,label:String,leftLabel:Boolean,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},Gf=["update:modelValue"];function Jf(t,e){const{props:n,slots:i,emit:o,proxy:s}=$e(),{$q:r}=s,a=dn(n,r),l=N(null),{refocusTargetEl:c,refocusTarget:u}=_S(n,l),d=Ra(n,xS),h=g(()=>n.val!==void 0&&Array.isArray(n.modelValue)),f=g(()=>{const M=Sn(n.val);return h.value===!0?n.modelValue.findIndex(H=>Sn(H)===M):-1}),m=g(()=>h.value===!0?f.value!==-1:Sn(n.modelValue)===Sn(n.trueValue)),p=g(()=>h.value===!0?f.value===-1:Sn(n.modelValue)===Sn(n.falseValue)),v=g(()=>m.value===!1&&p.value===!1),b=g(()=>n.disable===!0?-1:n.tabindex||0),x=g(()=>`q-${t} cursor-pointer no-outline row inline no-wrap items-center`+(n.disable===!0?" disabled":"")+(a.value===!0?` q-${t}--dark`:"")+(n.dense===!0?` q-${t}--dense`:"")+(n.leftLabel===!0?" reverse":"")),y=g(()=>{const M=m.value===!0?"truthy":p.value===!0?"falsy":"indet",H=n.color!==void 0&&(n.keepColor===!0||(t==="toggle"?m.value===!0:p.value!==!0))?` text-${n.color}`:"";return`q-${t}__inner relative-position non-selectable q-${t}__inner--${M}${H}`}),_=g(()=>{const M={type:"checkbox"};return n.name!==void 0&&Object.assign(M,{".checked":m.value,"^checked":m.value===!0?"checked":void 0,name:n.name,value:h.value===!0?n.val:n.trueValue}),M}),C=Bf(_),S=g(()=>{const M={tabindex:b.value,role:t==="toggle"?"switch":"checkbox","aria-label":n.label,"aria-checked":v.value===!0?"mixed":m.value===!0?"true":"false"};return n.disable===!0&&(M["aria-disabled"]="true"),M});function E(M){M!==void 0&&(Pt(M),u(M)),n.disable!==!0&&o("update:modelValue",A(),M)}function A(){if(h.value===!0){if(m.value===!0){const M=n.modelValue.slice();return M.splice(f.value,1),M}return n.modelValue.concat([n.val])}if(m.value===!0){if(n.toggleOrder!=="ft"||n.toggleIndeterminate===!1)return n.falseValue}else if(p.value===!0){if(n.toggleOrder==="ft"||n.toggleIndeterminate===!1)return n.trueValue}else return n.toggleOrder!=="ft"?n.trueValue:n.falseValue;return n.indeterminateValue}function O(M){(M.keyCode===13||M.keyCode===32)&&Pt(M)}function P(M){(M.keyCode===13||M.keyCode===32)&&E(M)}const q=e(m,v);return Object.assign(s,{toggle:E}),()=>{const M=q();n.disable!==!0&&C(M,"unshift",` q-${t}__native absolute q-ma-none q-pa-none`);const H=[w("div",{class:y.value,style:d.value,"aria-hidden":"true"},M)];c.value!==null&&H.push(c.value);const z=n.label!==void 0?di(i.default,[n.label]):Ge(i.default);return z!==void 0&&H.push(w("div",{class:`q-${t}__label q-anchor--skip`},z)),w("div",{ref:l,class:x.value,...S.value,onClick:E,onKeydown:O,onKeyup:P},H)}}const SS=()=>w("div",{key:"svg",class:"q-checkbox__bg absolute"},[w("svg",{class:"q-checkbox__svg fit absolute-full",viewBox:"0 0 24 24"},[w("path",{class:"q-checkbox__truthy",fill:"none",d:"M1.73,12.91 8.1,19.28 22.79,4.59"}),w("path",{class:"q-checkbox__indet",d:"M4,14H20V10H4"})])]),ia=ze({name:"QCheckbox",props:Qf,emits:Gf,setup(t){const e=SS();function n(i,o){const s=g(()=>(i.value===!0?t.checkedIcon:o.value===!0?t.indeterminateIcon:t.uncheckedIcon)||null);return()=>s.value!==null?[w("div",{key:"icon",class:"q-checkbox__icon-container absolute-full flex flex-center no-wrap"},[w(_e,{class:"q-checkbox__icon",name:s.value})])]:[e]}return Jf("checkbox",n)}});function wS(t,e){return new Date(t)-new Date(e)}const kS={sortMethod:Function,binaryStateSort:Boolean,columnSortOrder:{type:String,validator:t=>t==="ad"||t==="da",default:"ad"}};function CS(t,e,n,i){const o=g(()=>{const{sortBy:a}=e.value;return a&&n.value.find(l=>l.name===a)||null}),s=g(()=>t.sortMethod!==void 0?t.sortMethod:(a,l,c)=>{const u=n.value.find(f=>f.name===l);if(u===void 0||u.field===void 0)return a;const d=c===!0?-1:1,h=typeof u.field=="function"?f=>u.field(f):f=>f[u.field];return a.sort((f,m)=>{let p=h(f),v=h(m);return u.rawSort!==void 0?u.rawSort(p,v,f,m)*d:p==null?-1*d:v==null?1*d:u.sort!==void 0?u.sort(p,v,f,m)*d:To(p)===!0&&To(v)===!0?(p-v)*d:El(p)===!0&&El(v)===!0?wS(p,v)*d:typeof p=="boolean"&&typeof v=="boolean"?(p-v)*d:([p,v]=[p,v].map(b=>(b+"").toLocaleString().toLowerCase()),ph.name===a);d!==void 0&&d.sortOrder&&(l=d.sortOrder)}let{sortBy:c,descending:u}=e.value;c!==a?(c=a,u=l==="da"):t.binaryStateSort===!0?u=!u:u===!0?l==="ad"?c=null:u=!1:l==="ad"?u=!0:c=null,i({sortBy:c,descending:u,page:1})}return{columnToSort:o,computedSortMethod:s,sort:r}}const MS={filter:[String,Object],filterMethod:Function};function PS(t,e){const n=g(()=>t.filterMethod!==void 0?t.filterMethod:(i,o,s,r)=>{const a=o?o.toLowerCase():"";return i.filter(l=>s.some(c=>{const u=r(c,l)+"";return(u==="undefined"||u==="null"?"":u.toLowerCase()).indexOf(a)!==-1}))});return ge(()=>t.filter,()=>{at(()=>{e({page:1},!0)})},{deep:!0}),{computedFilterMethod:n}}function TS(t,e){for(const n in e)if(e[n]!==t[n])return!1;return!0}function $u(t){return t.page<1&&(t.page=1),t.rowsPerPage!==void 0&&t.rowsPerPage<1&&(t.rowsPerPage=0),t}const IS={pagination:Object,rowsPerPageOptions:{type:Array,default:()=>[5,7,10,15,20,25,50,0]},"onUpdate:pagination":[Function,Array]};function DS(t,e){const{props:n,emit:i}=t,o=N(Object.assign({sortBy:null,descending:!1,page:1,rowsPerPage:n.rowsPerPageOptions.length!==0?n.rowsPerPageOptions[0]:5},n.pagination)),s=g(()=>{const u=n["onUpdate:pagination"]!==void 0?{...o.value,...n.pagination}:o.value;return $u(u)}),r=g(()=>s.value.rowsNumber!==void 0);function a(u){l({pagination:u,filter:n.filter})}function l(u={}){at(()=>{i("request",{pagination:u.pagination||s.value,filter:u.filter||n.filter,getCellValue:e})})}function c(u,d){const h=$u({...s.value,...u});if(TS(s.value,h)===!0){r.value===!0&&d===!0&&a(h);return}if(r.value===!0){a(h);return}n.pagination!==void 0&&n["onUpdate:pagination"]!==void 0?i("update:pagination",h):o.value=h}return{innerPagination:o,computedPagination:s,isServerSide:r,requestServerInteraction:l,setPagination:c}}function OS(t,e,n,i,o,s){const{props:r,emit:a,proxy:{$q:l}}=t,c=g(()=>i.value===!0?n.value.rowsNumber||0:s.value),u=g(()=>{const{page:_,rowsPerPage:C}=n.value;return(_-1)*C}),d=g(()=>{const{page:_,rowsPerPage:C}=n.value;return _*C}),h=g(()=>n.value.page===1),f=g(()=>n.value.rowsPerPage===0?1:Math.max(1,Math.ceil(c.value/n.value.rowsPerPage))),m=g(()=>d.value===0?!0:n.value.page>=f.value),p=g(()=>(r.rowsPerPageOptions.includes(e.value.rowsPerPage)?r.rowsPerPageOptions:[e.value.rowsPerPage].concat(r.rowsPerPageOptions)).map(C=>({label:C===0?l.lang.table.allRows:""+C,value:C})));ge(f,(_,C)=>{if(_===C)return;const S=n.value.page;_&&!S?o({page:1}):_1&&o({page:_-1})}function x(){const{page:_,rowsPerPage:C}=n.value;d.value>0&&_*C["single","multiple","none"].includes(t)},selected:{type:Array,default:()=>[]}},ES=["update:selected","selection"];function AS(t,e,n,i){const o=g(()=>{const m={};return t.selected.map(i.value).forEach(p=>{m[p]=!0}),m}),s=g(()=>t.selection!=="none"),r=g(()=>t.selection==="single"),a=g(()=>t.selection==="multiple"),l=g(()=>n.value.length!==0&&n.value.every(m=>o.value[i.value(m)]===!0)),c=g(()=>l.value!==!0&&n.value.some(m=>o.value[i.value(m)]===!0)),u=g(()=>t.selected.length);function d(m){return o.value[m]===!0}function h(){e("update:selected",[])}function f(m,p,v,b){e("selection",{rows:p,added:v,keys:m,evt:b});const x=r.value===!0?v===!0?p:[]:v===!0?t.selected.concat(p):t.selected.filter(y=>m.includes(i.value(y))===!1);e("update:selected",x)}return{hasSelectionMode:s,singleSelection:r,multipleSelection:a,allRowsSelected:l,someRowsSelected:c,rowsSelectedNumber:u,isRowSelected:d,clearSelection:h,updateSelection:f}}function Uu(t){return Array.isArray(t)?t.slice():[]}const qS={expanded:Array},RS=["update:expanded"];function LS(t,e){const n=N(Uu(t.expanded));ge(()=>t.expanded,r=>{n.value=Uu(r)});function i(r){return n.value.includes(r)}function o(r){t.expanded!==void 0?e("update:expanded",r):n.value=r}function s(r,a){const l=n.value.slice(),c=l.indexOf(r);a===!0?c===-1&&(l.push(r),o(l)):c!==-1&&(l.splice(c,1),o(l))}return{isRowExpanded:i,setExpanded:o,updateExpanded:s}}const FS={visibleColumns:Array};function zS(t,e,n){const i=g(()=>{if(t.columns!==void 0)return t.columns;const a=t.rows[0];return a!==void 0?Object.keys(a).map(l=>({name:l,label:l.toUpperCase(),field:l,align:To(a[l])?"right":"left",sortable:!0})):[]}),o=g(()=>{const{sortBy:a,descending:l}=e.value;return(t.visibleColumns!==void 0?i.value.filter(u=>u.required===!0||t.visibleColumns.includes(u.name)===!0):i.value).map(u=>{const d=u.align||"right",h=`text-${d}`;return{...u,align:d,__iconClass:`q-table__sort-icon q-table__sort-icon--${d}`,__thClass:h+(u.headerClasses!==void 0?" "+u.headerClasses:"")+(u.sortable===!0?" sortable":"")+(u.name===a?` sorted ${l===!0?"sort-desc":""}`:""),__tdStyle:u.style!==void 0?typeof u.style!="function"?()=>u.style:u.style:()=>null,__tdClass:u.classes!==void 0?typeof u.classes!="function"?()=>h+" "+u.classes:f=>h+" "+u.classes(f):()=>h}})}),s=g(()=>{const a={};return o.value.forEach(l=>{a[l.name]=l}),a}),r=g(()=>t.tableColspan!==void 0?t.tableColspan:o.value.length+(n.value===!0?1:0));return{colList:i,computedCols:o,computedColsMap:s,computedColspan:r}}const ws="q-table__bottom row items-center",eg={};Yf.forEach(t=>{eg[t]={}});const BS=ze({name:"QTable",props:{rows:{type:Array,required:!0},rowKey:{type:[String,Function],default:"id"},columns:Array,loading:Boolean,iconFirstPage:String,iconPrevPage:String,iconNextPage:String,iconLastPage:String,title:String,hideHeader:Boolean,grid:Boolean,gridHeader:Boolean,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:t=>["horizontal","vertical","cell","none"].includes(t)},wrapCells:Boolean,virtualScroll:Boolean,virtualScrollTarget:{},...eg,noDataLabel:String,noResultsLabel:String,loadingLabel:String,selectedRowsLabel:Function,rowsPerPageLabel:String,paginationLabel:Function,color:{type:String,default:"grey-8"},titleClass:[String,Array,Object],tableStyle:[String,Array,Object],tableClass:[String,Array,Object],tableHeaderStyle:[String,Array,Object],tableHeaderClass:[String,Array,Object],cardContainerClass:[String,Array,Object],cardContainerStyle:[String,Array,Object],cardStyle:[String,Array,Object],cardClass:[String,Array,Object],hideBottom:Boolean,hideSelectedBanner:Boolean,hideNoData:Boolean,hidePagination:Boolean,onRowClick:Function,onRowDblclick:Function,onRowContextmenu:Function,...un,...Rd,...FS,...MS,...IS,...qS,...VS,...kS},emits:["request","virtualScroll",...Ld,...RS,...ES],setup(t,{slots:e,emit:n}){const i=$e(),{proxy:{$q:o}}=i,s=dn(t,o),{inFullscreen:r,toggleFullscreen:a}=Fd(),l=g(()=>typeof t.rowKey=="function"?t.rowKey:F=>F[t.rowKey]),c=N(null),u=N(null),d=g(()=>t.grid!==!0&&t.virtualScroll===!0),h=g(()=>" q-table__card"+(s.value===!0?" q-table__card--dark q-dark":"")+(t.square===!0?" q-table--square":"")+(t.flat===!0?" q-table--flat":"")+(t.bordered===!0?" q-table--bordered":"")),f=g(()=>`q-table__container q-table--${t.separator}-separator column no-wrap`+(t.grid===!0?" q-table--grid":h.value)+(s.value===!0?" q-table--dark":"")+(t.dense===!0?" q-table--dense":"")+(t.wrapCells===!1?" q-table--no-wrap":"")+(r.value===!0?" fullscreen scroll":"")),m=g(()=>f.value+(t.loading===!0?" q-table--loading":""));ge(()=>t.tableStyle+t.tableClass+t.tableHeaderStyle+t.tableHeaderClass+f.value,()=>{d.value===!0&&u.value!==null&&u.value.reset()});const{innerPagination:p,computedPagination:v,isServerSide:b,requestServerInteraction:x,setPagination:y}=DS(i,vt),{computedFilterMethod:_}=PS(t,y),{isRowExpanded:C,setExpanded:S,updateExpanded:E}=LS(t,n),A=g(()=>{let F=t.rows;if(b.value===!0||F.length===0)return F;const{sortBy:ie,descending:ve}=v.value;return t.filter&&(F=_.value(F,t.filter,D.value,vt)),ae.value!==null&&(F=fe.value(t.rows===F?F.slice():F,ie,ve)),F}),O=g(()=>A.value.length),P=g(()=>{let F=A.value;if(b.value===!0)return F;const{rowsPerPage:ie}=v.value;return ie!==0&&(J.value===0&&t.rows!==F?F.length>we.value&&(F=F.slice(0,we.value)):F=F.slice(J.value,we.value)),F}),{hasSelectionMode:q,singleSelection:M,multipleSelection:H,allRowsSelected:z,someRowsSelected:$,rowsSelectedNumber:U,isRowSelected:G,clearSelection:Y,updateSelection:te}=AS(t,n,P,l),{colList:de,computedCols:D,computedColsMap:T,computedColspan:Q}=zS(t,v,q),{columnToSort:ae,computedSortMethod:fe,sort:B}=CS(t,v,de,y),{firstRowIndex:J,lastRowIndex:we,isFirstPage:Z,isLastPage:Ee,pagesNumber:Xe,computedRowsPerPageOptions:_t,computedRowsNumber:et,firstPage:dt,prevPage:mt,nextPage:ht,lastPage:It}=OS(i,p,v,b,y,O),Dt=g(()=>P.value.length===0),$t=g(()=>{const F={};return Yf.forEach(ie=>{F[ie]=t[ie]}),F.virtualScrollItemSize===void 0&&(F.virtualScrollItemSize=t.dense===!0?28:48),F});function Ot(){d.value===!0&&u.value.reset()}function ct(){if(t.grid===!0)return Mr();const F=t.hideHeader!==!0?ke:null;if(d.value===!0){const ve=e["top-row"],pe=e["bottom-row"],Te={default:it=>ce(it.item,e.body,it.index)};if(ve!==void 0){const it=w("tbody",ve({cols:D.value}));Te.before=F===null?()=>it:()=>[F()].concat(it)}else F!==null&&(Te.before=F);return pe!==void 0&&(Te.after=()=>w("tbody",pe({cols:D.value}))),w(fS,{ref:u,class:t.tableClass,style:t.tableStyle,...$t.value,scrollTarget:t.virtualScrollTarget,items:P.value,type:"__qtable",tableColspan:Q.value,onVirtualScroll:re},Te)}const ie=[Oe()];return F!==null&&ie.unshift(F()),jf({class:["q-table__middle scroll",t.tableClass],style:t.tableStyle},ie)}function j(F,ie){if(u.value!==null){u.value.scrollTo(F,ie);return}F=parseInt(F,10);const ve=c.value.querySelector(`tbody tr:nth-of-type(${F+1})`);if(ve!==null){const pe=c.value.querySelector(".q-table__middle.scroll"),Te=ve.offsetTop-t.virtualScrollStickySizeStart,it=Te{const vi=e[`body-cell-${Ct.name}`],pi=vi!==void 0?vi:it;return pi!==void 0?pi(Pe({key:pe,row:F,pageIndex:ve,col:Ct})):w("td",{class:Ct.__tdClass(F),style:Ct.__tdStyle(F)},vt(Ct,F))});if(q.value===!0){const Ct=e["body-selection"],vi=Ct!==void 0?Ct(ot({key:pe,row:F,pageIndex:ve})):[w(ia,{modelValue:Te,color:t.color,dark:s.value,dense:t.dense,"onUpdate:modelValue":(pi,Pr)=>{te([pe],[F],pi,Pr)}})];Ke.unshift(w("td",{class:"q-table--col-auto-width"},vi))}const Gt={key:pe,class:{selected:Te}};return t.onRowClick!==void 0&&(Gt.class["cursor-pointer"]=!0,Gt.onClick=Ct=>{n("rowClick",Ct,F,ve)}),t.onRowDblclick!==void 0&&(Gt.class["cursor-pointer"]=!0,Gt.onDblclick=Ct=>{n("rowDblclick",Ct,F,ve)}),t.onRowContextmenu!==void 0&&(Gt.class["cursor-pointer"]=!0,Gt.onContextmenu=Ct=>{n("rowContextmenu",Ct,F,ve)}),w("tr",Gt,Ke)}function Oe(){const F=e.body,ie=e["top-row"],ve=e["bottom-row"];let pe=P.value.map((Te,it)=>ce(Te,F,it));return ie!==void 0&&(pe=ie({cols:D.value}).concat(pe)),ve!==void 0&&(pe=pe.concat(ve({cols:D.value}))),w("tbody",pe)}function ye(F){return tt(F),F.cols=F.cols.map(ie=>ei({...ie},"value",()=>vt(ie,F.row))),F}function Pe(F){return tt(F),ei(F,"value",()=>vt(F.col,F.row)),F}function ot(F){return tt(F),F}function tt(F){Object.assign(F,{cols:D.value,colsMap:T.value,sort:B,rowIndex:J.value+F.pageIndex,color:t.color,dark:s.value,dense:t.dense}),q.value===!0&&ei(F,"selected",()=>G(F.key),(ie,ve)=>{te([F.key],[F.row],ie,ve)}),ei(F,"expand",()=>C(F.key),ie=>{E(F.key,ie)})}function vt(F,ie){const ve=typeof F.field=="function"?F.field(ie):ie[F.field];return F.format!==void 0?F.format(ve,ie):ve}const Vt=g(()=>({pagination:v.value,pagesNumber:Xe.value,isFirstPage:Z.value,isLastPage:Ee.value,firstPage:dt,prevPage:mt,nextPage:ht,lastPage:It,inFullscreen:r.value,toggleFullscreen:a}));function W(){const F=e.top,ie=e["top-left"],ve=e["top-right"],pe=e["top-selection"],Te=q.value===!0&&pe!==void 0&&U.value>0,it="q-table__top relative-position row items-center";if(F!==void 0)return w("div",{class:it},[F(Vt.value)]);let Ke;if(Te===!0?Ke=pe(Vt.value).slice():(Ke=[],ie!==void 0?Ke.push(w("div",{class:"q-table__control"},[ie(Vt.value)])):t.title&&Ke.push(w("div",{class:"q-table__control"},[w("div",{class:["q-table__title",t.titleClass]},t.title)]))),ve!==void 0&&(Ke.push(w("div",{class:"q-table__separator col"})),Ke.push(w("div",{class:"q-table__control"},[ve(Vt.value)]))),Ke.length!==0)return w("div",{class:it},Ke)}const me=g(()=>$.value===!0?null:z.value);function ke(){const F=He();return t.loading===!0&&e.loading===void 0&&F.push(w("tr",{class:"q-table__progress"},[w("th",{class:"relative-position",colspan:Q.value},X())])),w("thead",F)}function He(){const F=e.header,ie=e["header-cell"];if(F!==void 0)return F(nt({header:!0})).slice();const ve=D.value.map(pe=>{const Te=e[`header-cell-${pe.name}`],it=Te!==void 0?Te:ie,Ke=nt({col:pe});return it!==void 0?it(Ke):w(wa,{key:pe.name,props:Ke},()=>pe.label)});if(M.value===!0&&t.grid!==!0)ve.unshift(w("th",{class:"q-table--col-auto-width"}," "));else if(H.value===!0){const pe=e["header-selection"],Te=pe!==void 0?pe(nt({})):[w(ia,{color:t.color,modelValue:me.value,dark:s.value,dense:t.dense,"onUpdate:modelValue":Ft})];ve.unshift(w("th",{class:"q-table--col-auto-width"},Te))}return[w("tr",{class:t.tableHeaderClass,style:t.tableHeaderStyle},ve)]}function nt(F){return Object.assign(F,{cols:D.value,sort:B,colsMap:T.value,color:t.color,dark:s.value,dense:t.dense}),H.value===!0&&ei(F,"selected",()=>me.value,Ft),F}function Ft(F){$.value===!0&&(F=!1),te(P.value.map(l.value),P.value,F)}const Qt=g(()=>{const F=[t.iconFirstPage||o.iconSet.table.firstPage,t.iconPrevPage||o.iconSet.table.prevPage,t.iconNextPage||o.iconSet.table.nextPage,t.iconLastPage||o.iconSet.table.lastPage];return o.lang.rtl===!0?F.reverse():F});function Dn(){if(t.hideBottom===!0)return;if(Dt.value===!0){if(t.hideNoData===!0)return;const ve=t.loading===!0?t.loadingLabel||o.lang.table.loading:t.filter?t.noResultsLabel||o.lang.table.noResults:t.noDataLabel||o.lang.table.noData,pe=e["no-data"],Te=pe!==void 0?[pe({message:ve,icon:o.iconSet.table.warning,filter:t.filter})]:[w(_e,{class:"q-table__bottom-nodata-icon",name:o.iconSet.table.warning}),ve];return w("div",{class:ws+" q-table__bottom--nodata"},Te)}const F=e.bottom;if(F!==void 0)return w("div",{class:ws},[F(Vt.value)]);const ie=t.hideSelectedBanner!==!0&&q.value===!0&&U.value>0?[w("div",{class:"q-table__control"},[w("div",[(t.selectedRowsLabel||o.lang.table.selectedRecords)(U.value)])])]:[];if(t.hidePagination!==!0)return w("div",{class:ws+" justify-end"},Cr(ie));if(ie.length!==0)return w("div",{class:ws},ie)}function kr(F){y({page:1,rowsPerPage:F.value})}function Cr(F){let ie;const{rowsPerPage:ve}=v.value,pe=t.paginationLabel||o.lang.table.pagination,Te=e.pagination,it=t.rowsPerPageOptions.length>1;if(F.push(w("div",{class:"q-table__separator col"})),it===!0&&F.push(w("div",{class:"q-table__control"},[w("span",{class:"q-table__bottom-item"},[t.rowsPerPageLabel||o.lang.table.recordsPerPage]),w(pS,{class:"q-table__select inline q-table__bottom-item",color:t.color,modelValue:ve,options:_t.value,displayValue:ve===0?o.lang.table.allRows:ve,dark:s.value,borderless:!0,dense:!0,optionsDense:!0,optionsCover:!0,"onUpdate:modelValue":kr})])),Te!==void 0)ie=Te(Vt.value);else if(ie=[w("span",ve!==0?{class:"q-table__bottom-item"}:{},[ve?pe(J.value+1,Math.min(we.value,et.value),et.value):pe(1,O.value,et.value)])],ve!==0&&Xe.value>1){const Ke={color:t.color,round:!0,dense:!0,flat:!0};t.dense===!0&&(Ke.size="sm"),Xe.value>2&&ie.push(w(Ve,{key:"pgFirst",...Ke,icon:Qt.value[0],disable:Z.value,onClick:dt})),ie.push(w(Ve,{key:"pgPrev",...Ke,icon:Qt.value[1],disable:Z.value,onClick:mt}),w(Ve,{key:"pgNext",...Ke,icon:Qt.value[2],disable:Ee.value,onClick:ht})),Xe.value>2&&ie.push(w(Ve,{key:"pgLast",...Ke,icon:Qt.value[3],disable:Ee.value,onClick:It}))}return F.push(w("div",{class:"q-table__control"},ie)),F}function Qo(){const F=t.gridHeader===!0?[w("table",{class:"q-table"},[ke()])]:t.loading===!0&&e.loading===void 0?X():void 0;return w("div",{class:"q-table__middle"},F)}function Mr(){const F=e.item!==void 0?e.item:ie=>{const ve=ie.cols.map(Te=>w("div",{class:"q-table__grid-item-row"},[w("div",{class:"q-table__grid-item-title"},[Te.label]),w("div",{class:"q-table__grid-item-value"},[Te.value])]));if(q.value===!0){const Te=e["body-selection"],it=Te!==void 0?Te(ie):[w(ia,{modelValue:ie.selected,color:t.color,dark:s.value,dense:t.dense,"onUpdate:modelValue":(Ke,Gt)=>{te([ie.key],[ie.row],Ke,Gt)}})];ve.unshift(w("div",{class:"q-table__grid-item-row"},it),w(_o,{dark:s.value}))}const pe={class:["q-table__grid-item-card"+h.value,t.cardClass],style:t.cardStyle};return(t.onRowClick!==void 0||t.onRowDblclick!==void 0)&&(pe.class[0]+=" cursor-pointer",t.onRowClick!==void 0&&(pe.onClick=Te=>{n("RowClick",Te,ie.row,ie.pageIndex)}),t.onRowDblclick!==void 0&&(pe.onDblclick=Te=>{n("RowDblclick",Te,ie.row,ie.pageIndex)})),w("div",{class:"q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3"+(ie.selected===!0?" q-table__grid-item--selected":"")},[w("div",pe,ve)])};return w("div",{class:["q-table__grid-content row",t.cardContainerClass],style:t.cardContainerStyle},P.value.map((ie,ve)=>F(ye({key:l.value(ie),row:ie,pageIndex:ve}))))}return Object.assign(i.proxy,{requestServerInteraction:x,setPagination:y,firstPage:dt,prevPage:mt,nextPage:ht,lastPage:It,isRowSelected:G,clearSelection:Y,isRowExpanded:C,setExpanded:S,sort:B,resetVirtualScroll:Ot,scrollTo:j,getCellValue:vt}),sm(i.proxy,{filteredSortedRows:()=>A.value,computedRows:()=>P.value,computedRowsNumber:()=>et.value}),()=>{const F=[W()],ie={ref:c,class:m.value};return t.grid===!0?F.push(Qo()):Object.assign(ie,{class:[ie.class,t.cardClass],style:t.cardStyle}),F.push(ct(),Dn()),t.loading===!0&&e.loading!==void 0&&F.push(e.loading()),w("div",ie,F)}}}),NS=Se({__name:"BaseTable",props:{items:{},rowData:{type:[Function,Object]},columnConfig:{},rowKey:{},searchInputVisible:{type:Boolean},tableHeight:{},filter:{},columnsToSearch:{},rowExpandable:{type:Boolean}},emits:["row-click","update:filter"],setup(t,{expose:e,emit:n}){e();const i=t,o=N([]),s=rm(),r=g(()=>i.rowExpandable?Object.keys(s).filter(m=>!m.startsWith("body")):Object.keys(s)),a=n,l=g({get:()=>i.filter||"",set:m=>a("update:filter",m)}),c=g(()=>i.items.map(typeof i.rowData=="function"?i.rowData:i.rowData.value)),u=g(()=>i.columnConfig.filter(m=>!m.expandField).map(m=>({name:m.field,field:m.field,label:m.label,align:m.align??"left",sortable:!0,headerStyle:"font-weight: bold"}))),f={props:i,expanded:o,slots:s,forwardedSlotNames:r,emit:a,filterModel:l,mappedRows:c,mappedColumns:u,customFilterMethod:(m,p,v)=>{if(!p||p.trim()==="")return m;const b=p.toLowerCase(),x=i.columnsToSearch||v.map(y=>typeof y.field=="string"?y.field:"");return m.filter(y=>x.some(_=>{const C=y[_];return C&&String(C).toLowerCase().includes(b)}))},onRowClick:(m,p)=>a("row-click",p)};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),WS={class:"q-pa-md"},HS={class:"row full-width items-center q-mb-sm"},jS={class:"col"};function $S(t,e,n,i,o,s){return V(),K("div",WS,[I(BS,{class:"sticky-header-table",rows:i.mappedRows,columns:i.mappedColumns,"row-key":"id",expanded:i.expanded,"onUpdate:expanded":e[1]||(e[1]=r=>i.expanded=r),filter:i.filterModel,"filter-method":i.customFilterMethod,"virtual-scroll":"","virtual-scroll-item-size":48,"virtual-scroll-sticky-size-start":30,style:Aa({height:n.tableHeight}),onRowClick:i.onRowClick,"binary-state-sort":"",pagination:{rowsPerPage:0},"hide-bottom":""},am({_:2},[n.searchInputVisible?{name:"top",fn:L(()=>[R("div",HS,[R("div",jS,[I(Hf,{modelValue:i.filterModel,"onUpdate:modelValue":e[0]||(e[0]=r=>i.filterModel=r),dense:"",outlined:"",color:"white",placeholder:"Suchen...",class:"search-field white-outline-input","input-class":"text-white"},{append:L(()=>[I(_e,{name:"search",color:"white"})]),_:1},8,["modelValue"])])])]),key:"0"}:void 0,i.props.rowExpandable?{name:"header",fn:L(r=>[I(ea,{props:r},{default:L(()=>[I(wa,{"auto-width":"",props:{...r,col:{}}},null,8,["props"]),(V(!0),K(De,null,Je(r.cols,a=>(V(),ne(wa,{key:a.name,props:{...r,col:a}},{default:L(()=>[Re(le(a.label),1)]),_:2},1032,["props"]))),128))]),_:2},1032,["props"])]),key:"1"}:void 0,i.props.rowExpandable?{name:"body",fn:L(r=>[(V(),ne(ea,{key:`main-${r.key}`,props:r,onClick:a=>i.onRowClick(a,r.row),class:"clickable"},{default:L(()=>[I(vn,{"auto-width":""},{default:L(()=>[I(Ve,{dense:"",flat:"",round:"",size:"sm",icon:r.expand?"keyboard_arrow_up":"keyboard_arrow_down",onClick:tn(a=>r.expand=!r.expand,["stop"])},null,8,["icon","onClick"])]),_:2},1024),(V(!0),K(De,null,Je(r.cols,a=>(V(),K(De,{key:a.name},[t.$slots[`body-cell-${a.name}`]?oi(t.$slots,`body-cell-${a.name}`,lm({key:0,ref_for:!0},{...r,col:a}),void 0,!0):(V(),ne(vn,{key:1,props:{...r,col:a,value:r.row[a.field]}},{default:L(()=>[Re(le(r.row[a.field]),1)]),_:2},1032,["props"]))],64))),128))]),_:2},1032,["props","onClick"])),rn((V(),ne(ea,{key:`xp-${r.key}`,props:r,class:"q-virtual-scroll--with-prev"},{default:L(()=>[I(vn,{colspan:r.cols.length+1},{default:L(()=>[oi(t.$slots,"row-expand",Al(ql(r)),void 0,!0)]),_:2},1032,["colspan"])]),_:2},1032,["props"])),[[cm,r.expand]])]),key:"2"}:void 0,Je(i.forwardedSlotNames,r=>({name:r,fn:L(a=>[oi(t.$slots,r,Al(ql(a)),void 0,!0)])}))]),1032,["rows","columns","expanded","filter","style"])])}const tg=Me(NS,[["render",$S],["__scopeId","data-v-69ac7669"],["__file","BaseTable.vue"]]),jn=ze({name:"QCardSection",props:{tag:{type:String,default:"div"},horizontal:Boolean},setup(t,{slots:e}){const n=g(()=>`q-card__section q-card__section--${t.horizontal===!0?"horiz row no-wrap":"vert"}`);return()=>w(t.tag,{class:n.value},Ge(e.default))}}),Ki=ze({name:"QCard",props:{...un,tag:{type:String,default:"div"},square:Boolean,flat:Boolean,bordered:Boolean},setup(t,{slots:e}){const{proxy:{$q:n}}=$e(),i=dn(t,n),o=g(()=>"q-card"+(i.value===!0?" q-card--dark q-dark":"")+(t.bordered===!0?" q-card--bordered":"")+(t.square===!0?" q-card--square no-border-radius":"")+(t.flat===!0?" q-card--flat no-shadow":""));return()=>w(t.tag,{class:o.value},Ge(e.default))}}),Yu="q-slider__marker-labels",US=t=>({value:t}),YS=({marker:t})=>w("div",{key:t.value,style:t.style,class:t.classes},t.label),ng=[34,37,40,33,39,38],ZS={...un,...mr,min:{type:Number,default:0},max:{type:Number,default:100},innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:t=>t>=0},snap:Boolean,vertical:Boolean,reverse:Boolean,color:String,markerLabelsClass:String,label:Boolean,labelColor:String,labelTextColor:String,labelAlways:Boolean,switchLabelSide:Boolean,markers:[Boolean,Number],markerLabels:[Boolean,Array,Object,Function],switchMarkerLabelsSide:Boolean,trackImg:String,trackColor:String,innerTrackImg:String,innerTrackColor:String,selectionColor:String,selectionImg:String,thumbSize:{type:String,default:"20px"},trackSize:{type:String,default:"4px"},disable:Boolean,readonly:Boolean,dense:Boolean,tabindex:[String,Number],thumbColor:String,thumbPath:{type:String,default:"M 4, 10 a 6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"}},XS=["pan","update:modelValue","change"];function KS({updateValue:t,updatePosition:e,getDragging:n,formAttrs:i}){const{props:o,emit:s,slots:r,proxy:{$q:a}}=$e(),l=dn(o,a),c=Bf(i),u=N(!1),d=N(!1),h=N(!1),f=N(!1),m=g(()=>o.vertical===!0?"--v":"--h"),p=g(()=>"-"+(o.switchLabelSide===!0?"switched":"standard")),v=g(()=>o.vertical===!0?o.reverse===!0:o.reverse!==(a.lang.rtl===!0)),b=g(()=>isNaN(o.innerMin)===!0||o.innerMinisNaN(o.innerMax)===!0||o.innerMax>o.max?o.max:o.innerMax),y=g(()=>o.disable!==!0&&o.readonly!==!0&&b.value{if(o.step===0)return me=>me;const W=(String(o.step).trim().split(".")[1]||"").length;return me=>parseFloat(me.toFixed(W))}),C=g(()=>o.step===0?1:o.step),S=g(()=>y.value===!0?o.tabindex||0:-1),E=g(()=>o.max-o.min),A=g(()=>x.value-b.value),O=g(()=>Xe(b.value)),P=g(()=>Xe(x.value)),q=g(()=>o.vertical===!0?v.value===!0?"bottom":"top":v.value===!0?"right":"left"),M=g(()=>o.vertical===!0?"height":"width"),H=g(()=>o.vertical===!0?"width":"height"),z=g(()=>o.vertical===!0?"vertical":"horizontal"),$=g(()=>{const W={role:"slider","aria-valuemin":b.value,"aria-valuemax":x.value,"aria-orientation":z.value,"data-step":o.step};return o.disable===!0?W["aria-disabled"]="true":o.readonly===!0&&(W["aria-readonly"]="true"),W}),U=g(()=>`q-slider q-slider${m.value} q-slider--${u.value===!0?"":"in"}active inline no-wrap `+(o.vertical===!0?"row":"column")+(o.disable===!0?" disabled":" q-slider--enabled"+(y.value===!0?" q-slider--editable":""))+(h.value==="both"?" q-slider--focus":"")+(o.label||o.labelAlways===!0?" q-slider--label":"")+(o.labelAlways===!0?" q-slider--label-always":"")+(l.value===!0?" q-slider--dark":"")+(o.dense===!0?" q-slider--dense q-slider--dense"+m.value:""));function G(W){const me="q-slider__"+W;return`${me} ${me}${m.value} ${me}${m.value}${p.value}`}function Y(W){const me="q-slider__"+W;return`${me} ${me}${m.value}`}const te=g(()=>{const W=o.selectionColor||o.color;return"q-slider__selection absolute"+(W!==void 0?` text-${W}`:"")}),de=g(()=>Y("markers")+" absolute overflow-hidden"),D=g(()=>Y("track-container")),T=g(()=>G("pin")),Q=g(()=>G("label")),ae=g(()=>G("text-container")),fe=g(()=>G("marker-labels-container")+(o.markerLabelsClass!==void 0?` ${o.markerLabelsClass}`:"")),B=g(()=>"q-slider__track relative-position no-outline"+(o.trackColor!==void 0?` bg-${o.trackColor}`:"")),J=g(()=>{const W={[H.value]:o.trackSize};return o.trackImg!==void 0&&(W.backgroundImage=`url(${o.trackImg}) !important`),W}),we=g(()=>"q-slider__inner absolute"+(o.innerTrackColor!==void 0?` bg-${o.innerTrackColor}`:"")),Z=g(()=>{const W=P.value-O.value,me={[q.value]:`${100*O.value}%`,[M.value]:W===0?"2px":`${100*W}%`};return o.innerTrackImg!==void 0&&(me.backgroundImage=`url(${o.innerTrackImg}) !important`),me});function Ee(W){const{min:me,max:ke,step:He}=o;let nt=me+W*(ke-me);if(He>0){const Ft=(nt-b.value)%He;nt+=(Math.abs(Ft)>=He/2?(Ft<0?-1:1)*He:0)-Ft}return nt=_.value(nt),Pi(nt,b.value,x.value)}function Xe(W){return E.value===0?0:(W-o.min)/E.value}function _t(W,me){const ke=Es(W),He=o.vertical===!0?Pi((ke.top-me.top)/me.height,0,1):Pi((ke.left-me.left)/me.width,0,1);return Pi(v.value===!0?1-He:He,O.value,P.value)}const et=g(()=>To(o.markers)===!0?o.markers:C.value),dt=g(()=>{const W=[],me=et.value,ke=o.max;let He=o.min;do W.push(He),He+=me;while(He{const W=` ${Yu}${m.value}-`;return Yu+`${W}${o.switchMarkerLabelsSide===!0?"switched":"standard"}${W}${v.value===!0?"rtl":"ltr"}`}),ht=g(()=>o.markerLabels===!1?null:$t(o.markerLabels).map((W,me)=>({index:me,value:W.value,label:W.label||W.value,classes:mt.value+(W.classes!==void 0?" "+W.classes:""),style:{...Ot(W.value),...W.style||{}}}))),It=g(()=>({markerList:ht.value,markerMap:ct.value,classes:mt.value,getStyle:Ot})),Dt=g(()=>{const W=A.value===0?"2px":100*et.value/A.value;return{...Z.value,backgroundSize:o.vertical===!0?`2px ${W}%`:`${W}% 2px`}});function $t(W){if(W===!1)return null;if(W===!0)return dt.value.map(US);if(typeof W=="function")return dt.value.map(ke=>{const He=W(ke);return ks(He)===!0?{...He,value:ke}:{value:ke,label:He}});const me=({value:ke})=>ke>=o.min&&ke<=o.max;return Array.isArray(W)===!0?W.map(ke=>ks(ke)===!0?ke:{value:ke}).filter(me):Object.keys(W).map(ke=>{const He=W[ke],nt=Number(ke);return ks(He)===!0?{...He,value:nt}:{value:nt,label:He}}).filter(me)}function Ot(W){return{[q.value]:`${100*(W-o.min)/E.value}%`}}const ct=g(()=>{if(o.markerLabels===!1)return null;const W={};return ht.value.forEach(me=>{W[me.value]=me}),W});function j(){if(r["marker-label-group"]!==void 0)return r["marker-label-group"](It.value);const W=r["marker-label"]||YS;return ht.value.map(me=>W({marker:me,...It.value}))}const re=g(()=>[[Im,X,void 0,{[z.value]:!0,prevent:!0,stop:!0,mouse:!0,mouseAllDir:!0}]]);function X(W){W.isFinal===!0?(f.value!==void 0&&(e(W.evt),W.touch===!0&&t(!0),f.value=void 0,s("pan","end")),u.value=!1,h.value=!1):W.isFirst===!0?(f.value=n(W.evt),e(W.evt),t(),u.value=!0,s("pan","start")):(e(W.evt),t())}function ce(){h.value=!1}function Oe(W){e(W,n(W)),t(),d.value=!0,u.value=!0,document.addEventListener("mouseup",ye,!0)}function ye(){d.value=!1,u.value=!1,t(!0),ce(),document.removeEventListener("mouseup",ye,!0)}function Pe(W){e(W,n(W)),t(!0)}function ot(W){ng.includes(W.keyCode)&&t(!0)}function tt(W){if(o.vertical===!0)return null;const me=a.lang.rtl!==o.reverse?1-W:W;return{transform:`translateX(calc(${2*me-1} * ${o.thumbSize} / 2 + ${50-100*me}%))`}}function vt(W){const me=g(()=>d.value===!1&&(h.value===W.focusValue||h.value==="both")?" q-slider--focus":""),ke=g(()=>`q-slider__thumb q-slider__thumb${m.value} q-slider__thumb${m.value}-${v.value===!0?"rtl":"ltr"} absolute non-selectable`+me.value+(W.thumbColor.value!==void 0?` text-${W.thumbColor.value}`:"")),He=g(()=>({width:o.thumbSize,height:o.thumbSize,[q.value]:`${100*W.ratio.value}%`,zIndex:h.value===W.focusValue?2:void 0})),nt=g(()=>W.labelColor.value!==void 0?` text-${W.labelColor.value}`:""),Ft=g(()=>tt(W.ratio.value)),Qt=g(()=>"q-slider__text"+(W.labelTextColor.value!==void 0?` text-${W.labelTextColor.value}`:""));return()=>{const Dn=[w("svg",{class:"q-slider__thumb-shape absolute-full",viewBox:"0 0 20 20","aria-hidden":"true"},[w("path",{d:o.thumbPath})]),w("div",{class:"q-slider__focus-ring fit"})];return(o.label===!0||o.labelAlways===!0)&&(Dn.push(w("div",{class:T.value+" absolute fit no-pointer-events"+nt.value},[w("div",{class:Q.value,style:{minWidth:o.thumbSize}},[w("div",{class:ae.value,style:Ft.value},[w("span",{class:Qt.value},W.label.value)])])])),o.name!==void 0&&o.disable!==!0&&c(Dn,"push")),w("div",{class:ke.value,style:He.value,...W.getNodeData()},Dn)}}function Vt(W,me,ke,He){const nt=[];o.innerTrackColor!=="transparent"&&nt.push(w("div",{key:"inner",class:we.value,style:Z.value})),o.selectionColor!=="transparent"&&nt.push(w("div",{key:"selection",class:te.value,style:W.value})),o.markers!==!1&&nt.push(w("div",{key:"marker",class:de.value,style:Dt.value})),He(nt);const Ft=[nr("div",{key:"trackC",class:D.value,tabindex:me.value,...ke.value},[w("div",{class:B.value,style:J.value},nt)],"slide",y.value,()=>re.value)];if(o.markerLabels!==!1){const Qt=o.switchMarkerLabelsSide===!0?"unshift":"push";Ft[Qt](w("div",{key:"markerL",class:fe.value},j()))}return Ft}return Lt(()=>{document.removeEventListener("mouseup",ye,!0)}),{state:{active:u,focus:h,preventFocus:d,dragging:f,editable:y,classes:U,tabindex:S,attributes:$,roundValueFn:_,keyStep:C,trackLen:E,innerMin:b,innerMinRatio:O,innerMax:x,innerMaxRatio:P,positionProp:q,sizeProp:M,isReversed:v},methods:{onActivate:Oe,onMobileClick:Pe,onBlur:ce,onKeyup:ot,getContent:Vt,getThumbRenderFn:vt,convertRatioToModel:Ee,convertModelToRatio:Xe,getDraggingRatio:_t}}}const QS=()=>({}),Qs=ze({name:"QSlider",props:{...ZS,modelValue:{required:!0,default:null,validator:t=>typeof t=="number"||t===null},labelValue:[String,Number]},emits:XS,setup(t,{emit:e}){const{proxy:{$q:n}}=$e(),{state:i,methods:o}=KS({updateValue:m,updatePosition:v,getDragging:p,formAttrs:sS(t)}),s=N(null),r=N(0),a=N(0);function l(){a.value=t.modelValue===null?i.innerMin.value:Pi(t.modelValue,i.innerMin.value,i.innerMax.value)}ge(()=>`${t.modelValue}|${i.innerMin.value}|${i.innerMax.value}`,l),l();const c=g(()=>o.convertModelToRatio(a.value)),u=g(()=>i.active.value===!0?r.value:c.value),d=g(()=>{const y={[i.positionProp.value]:`${100*i.innerMinRatio.value}%`,[i.sizeProp.value]:`${100*(u.value-i.innerMinRatio.value)}%`};return t.selectionImg!==void 0&&(y.backgroundImage=`url(${t.selectionImg}) !important`),y}),h=o.getThumbRenderFn({focusValue:!0,getNodeData:QS,ratio:u,label:g(()=>t.labelValue!==void 0?t.labelValue:a.value),thumbColor:g(()=>t.thumbColor||t.color),labelColor:g(()=>t.labelColor),labelTextColor:g(()=>t.labelTextColor)}),f=g(()=>i.editable.value!==!0?{}:n.platform.is.mobile===!0?{onClick:o.onMobileClick}:{onMousedown:o.onActivate,onFocus:b,onBlur:o.onBlur,onKeydown:x,onKeyup:o.onKeyup});function m(y){a.value!==t.modelValue&&e("update:modelValue",a.value),y===!0&&e("change",a.value)}function p(){return s.value.getBoundingClientRect()}function v(y,_=i.dragging.value){const C=o.getDraggingRatio(y,_);a.value=o.convertRatioToModel(C),r.value=t.snap!==!0||t.step===0?C:o.convertModelToRatio(a.value)}function b(){i.focus.value=!0}function x(y){if(!ng.includes(y.keyCode))return;Pt(y);const _=([34,33].includes(y.keyCode)?10:1)*i.keyStep.value,C=([34,37,40].includes(y.keyCode)?-1:1)*(i.isReversed.value===!0?-1:1)*(t.vertical===!0?-1:1)*_;a.value=Pi(i.roundValueFn.value(a.value+C),i.innerMin.value,i.innerMax.value),m()}return()=>{const y=o.getContent(d,i.tabindex,f,_=>{_.push(h())});return w("div",{ref:s,class:i.classes.value+(t.modelValue===null?" q-slider--no-value":""),...i.attributes.value,"aria-valuenow":t.modelValue},y)}}}),GS=Se({name:"SliderDouble",__name:"SliderDouble",props:{modelValue:{type:Number,required:!1,default:-1},readonly:{type:Boolean,default:!1},chargeMode:{type:String,default:""},limitMode:{type:String,default:"soc"},currentValue:{type:Number,default:0},targetTime:{type:String,required:!1,default:void 0}},emits:["update:modelValue"],setup(t,{expose:e,emit:n}){e();const i=n,o=t,s=g({get:()=>o.modelValue,set:u=>{o.readonly||i("update:modelValue",u)}}),r=g(()=>s.value>=0&&o.limitMode!=="none"),a=g(()=>["soc","none"].includes(o.limitMode)?100:s.value),c={emit:i,props:o,target:s,targetSet:r,maxValue:a,formatEnergy:u=>u>=1e3?(u/1e3).toFixed(2)+" kWh":u.toFixed(0)+" Wh"};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),JS={class:"double-slider-container"},ew={class:"slider-container"},tw={class:"row justify-between no-wrap"},nw={class:"col"},iw={key:0,class:"col text-center"},ow={key:1,class:"col text-right"};function sw(t,e,n,i,o,s){return V(),K("div",JS,[R("div",ew,[I(Qs,{"model-value":n.currentValue,min:0,max:i.maxValue,markers:i.props.limitMode=="amount"?1e4:10,color:"green-7",class:"current-slider","track-size":"1.5em","thumb-size":"0px",readonly:"","no-focus":"",onTouchstart:e[0]||(e[0]=tn(()=>{},["stop"])),onTouchmove:e[1]||(e[1]=tn(()=>{},["stop"])),onTouchend:e[2]||(e[2]=tn(()=>{},["stop"]))},null,8,["model-value","max","markers"]),i.props.limitMode=="soc"?(V(),ne(Qs,{key:0,modelValue:i.target,"onUpdate:modelValue":e[3]||(e[3]=r=>i.target=r),min:0,max:100,color:"light-green-5","inner-track-color":"blue-grey-2",class:"target-slider","track-size":"1.5em","thumb-size":i.props.readonly?"0":"2em",readonly:i.props.readonly,onTouchstart:e[4]||(e[4]=tn(()=>{},["stop"])),onTouchmove:e[5]||(e[5]=tn(()=>{},["stop"])),onTouchend:e[6]||(e[6]=tn(()=>{},["stop"]))},null,8,["modelValue","thumb-size","readonly"])):ue("",!0)]),R("div",tw,[R("div",nw,[R("div",null,le(i.props.limitMode=="amount"?"Geladen":"Ladestand"),1),R("div",null,[Re(le(i.props.limitMode=="amount"?i.formatEnergy(n.currentValue):n.currentValue+"%")+" ",1),oi(t.$slots,"update-soc-icon",{},void 0)])]),i.props.targetTime?(V(),K("div",iw,[e[7]||(e[7]=R("div",null,"Zielzeit",-1)),R("div",null,le(i.props.targetTime),1)])):ue("",!0),i.targetSet?(V(),K("div",ow,[R("div",null,le(i.props.limitMode=="soc"?"Ladeziel":"Energieziel"),1),R("div",null,le(i.props.limitMode=="soc"?i.target+"%":i.target/1e3+" kWh"),1)])):ue("",!0)])])}const ml=Me(GS,[["render",sw],["__scopeId","data-v-0e0e7cf9"],["__file","SliderDouble.vue"]]),vr=ze({name:"QToggle",props:{...Qf,icon:String,iconColor:String},emits:Gf,setup(t){function e(n,i){const o=g(()=>(n.value===!0?t.checkedIcon:i.value===!0?t.indeterminateIcon:t.uncheckedIcon)||t.icon),s=g(()=>n.value===!0?t.iconColor:null);return()=>[w("div",{class:"q-toggle__track"}),w("div",{class:"q-toggle__thumb absolute flex flex-center no-wrap"},o.value!==void 0?[w(_e,{name:o.value,color:s.value})]:void 0)]}return Jf("toggle",e)}}),rw=Se({__name:"ChargePointLock",props:{chargePointId:{type:Number,required:!0},readonly:{type:Boolean,default:!1},dense:{type:Boolean,default:!1}},setup(t,{expose:e}){e();const n=t,i=Be(),o=i.chargePointManualLock(n.chargePointId),s={props:n,mqttStore:i,locked:o};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}});function aw(t,e,n,i,o,s){return i.props.readonly?(V(),ne(_e,{key:0,name:i.locked?"lock":"lock_open",size:"sm",color:i.locked?"negative":"positive"},null,8,["name","color"])):(V(),ne(vr,{key:1,modelValue:i.locked,"onUpdate:modelValue":e[0]||(e[0]=r=>i.locked=r),color:i.locked?"primary":"positive","checked-icon":"lock","unchecked-icon":"lock_open",size:"lg",dense:i.props.dense},{default:L(()=>[I(an,null,{default:L(()=>[Re(le(i.locked?"Ladepunkt gesperrt":"Ladepunkt entsperrt"),1)]),_:1})]),_:1},8,["modelValue","color","dense"]))}const ig=Me(rw,[["render",aw],["__file","ChargePointLock.vue"]]),lw=Se({__name:"ChargePointStateIcon",props:{chargePointId:{},vehicleId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>n.vehicleId!==void 0?i.vehicleConnectionState(n.vehicleId).some(l=>l.plugged):n.chargePointId!==void 0?i.chargePointPlugState(n.chargePointId):!1),s=g(()=>n.vehicleId!==void 0?i.vehicleConnectionState(n.vehicleId).some(l=>l.charging):n.chargePointId!==void 0?i.chargePointChargeState(n.chargePointId):!1),r={props:n,mqttStore:i,plugState:o,chargeState:s};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function cw(t,e,n,i,o,s){return V(),ne(_e,{name:i.plugState?"power":"power_off",size:"sm",color:i.plugState?i.chargeState?"positive":"warning":"negative"},{default:L(()=>[I(an,null,{default:L(()=>[Re(le(i.plugState?i.chargeState?"Lädt":"Angesteckt, lädt nicht":"Nicht angesteckt"),1)]),_:1})]),_:1},8,["name","color"])}const vl=Me(lw,[["render",cw],["__file","ChargePointStateIcon.vue"]]),uw=Se({__name:"ChargePointPriority",props:{chargePointId:{type:Number,required:!0},readonly:{type:Boolean,default:!1},dense:{type:Boolean,default:!1}},setup(t,{expose:e}){e();const n=t,i={off:"star_border",on:"star"},o=Be(),s=o.chargePointConnectedVehiclePriority(n.chargePointId),r={props:n,icon:i,mqttStore:o,priority:s};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function dw(t,e,n,i,o,s){return i.props.readonly?(V(),ne(_e,{key:0,name:i.priority?i.icon.on:i.icon.off,color:i.priority?"warning":"",size:"sm"},null,8,["name","color"])):(V(),ne(vr,{key:1,modelValue:i.priority,"onUpdate:modelValue":e[0]||(e[0]=r=>i.priority=r),color:i.priority?"primary":"","checked-icon":i.icon.on,"unchecked-icon":i.icon.off,size:"lg",dense:i.props.dense},{default:L(()=>[I(an,null,{default:L(()=>[Re(le(i.priority?"Fahrzeug priorisiert":"Fahrzeug nicht priorisiert"),1)]),_:1})]),_:1},8,["modelValue","color","checked-icon","unchecked-icon","dense"]))}const og=Me(uw,[["render",dw],["__file","ChargePointPriority.vue"]]),hw=Object.keys(wd);function fw(t){return hw.reduce((e,n)=>{const i=t[n];return i!==void 0&&(e[n]=i),e},{})}const sg=ze({name:"QBtnDropdown",props:{...wd,...Fa,modelValue:Boolean,split:Boolean,dropdownIcon:String,contentClass:[Array,String,Object],contentStyle:[Array,String,Object],cover:Boolean,persistent:Boolean,noRouteDismiss:Boolean,autoClose:Boolean,menuAnchor:{type:String,default:"bottom end"},menuSelf:{type:String,default:"top end"},menuOffset:Array,disableMainBtn:Boolean,disableDropdown:Boolean,noIconAnimation:Boolean,toggleAriaLabel:String},emits:["update:modelValue","click","beforeShow","show","beforeHide","hide"],setup(t,{slots:e,emit:n}){const{proxy:i}=$e(),o=N(t.modelValue),s=N(null),r=Ff(),a=g(()=>{const _={"aria-expanded":o.value===!0?"true":"false","aria-haspopup":"true","aria-controls":r.value,"aria-label":t.toggleAriaLabel||i.$q.lang.label[o.value===!0?"collapse":"expand"](t.label)};return(t.disable===!0||t.split===!1&&t.disableMainBtn===!0||t.disableDropdown===!0)&&(_["aria-disabled"]="true"),_}),l=g(()=>"q-btn-dropdown__arrow"+(o.value===!0&&t.noIconAnimation===!1?" rotate-180":"")+(t.split===!1?" q-btn-dropdown__arrow-container":"")),c=g(()=>um(t)),u=g(()=>fw(t));ge(()=>t.modelValue,_=>{s.value!==null&&s.value[_?"show":"hide"]()}),ge(()=>t.split,y);function d(_){o.value=!0,n("beforeShow",_)}function h(_){n("show",_),n("update:modelValue",!0)}function f(_){o.value=!1,n("beforeHide",_)}function m(_){n("hide",_),n("update:modelValue",!1)}function p(_){n("click",_)}function v(_){wn(_),y(),n("click",_)}function b(_){s.value!==null&&s.value.toggle(_)}function x(_){s.value!==null&&s.value.show(_)}function y(_){s.value!==null&&s.value.hide(_)}return Object.assign(i,{show:x,hide:y,toggle:b}),cn(()=>{t.modelValue===!0&&x()}),()=>{const _=[w(_e,{class:l.value,name:t.dropdownIcon||i.$q.iconSet.arrow.dropdown})];return t.disableDropdown!==!0&&_.push(w(Kf,{ref:s,id:r.value,class:t.contentClass,style:t.contentStyle,cover:t.cover,fit:!0,persistent:t.persistent,noRouteDismiss:t.noRouteDismiss,autoClose:t.autoClose,anchor:t.menuAnchor,self:t.menuSelf,offset:t.menuOffset,separateClosePopup:!0,transitionShow:t.transitionShow,transitionHide:t.transitionHide,transitionDuration:t.transitionDuration,onBeforeShow:d,onShow:h,onBeforeHide:f,onHide:m},e.default)),t.split===!1?w(Ve,{class:"q-btn-dropdown q-btn-dropdown--simple",...u.value,...a.value,disable:t.disable===!0||t.disableMainBtn===!0,noWrap:!0,round:!1,onClick:p},{default:()=>Ge(e.label,[]).concat(_),loading:e.loading}):w(pn,{class:"q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item",rounded:t.rounded,square:t.square,...c.value,glossy:t.glossy,stretch:t.stretch},()=>[w(Ve,{class:"q-btn-dropdown--current",...u.value,disable:t.disable===!0||t.disableMainBtn===!0,noWrap:!0,round:!1,onClick:v},{default:e.label,loading:e.loading}),w(Ve,{class:"q-btn-dropdown__arrow-container q-anchor--skip",...a.value,...c.value,disable:t.disable===!0||t.disableDropdown===!0,rounded:t.rounded,color:t.color,textColor:t.textColor,dense:t.dense,size:t.size,padding:t.padding,ripple:t.ripple},()=>_)])}}}),gw=Se({__name:"ChargePointModeButtons",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=g(()=>La.is.mobile),{chargeModes:o}=ul(),s=Be(),r=g(()=>s.chargePointConnectedVehicleChargeMode(n.chargePointId)),a=g(()=>o.find(c=>c.value===r.value.value)?.label),l={props:n,isMobile:i,chargeModes:o,mqttStore:s,chargeMode:r,currentModeLabel:a};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),mw={key:0,class:"q-pt-md full-width"};function vw(t,e,n,i,o,s){return i.isMobile?(V(),K("div",mw,[I(sg,{"transition-show":"scale","transition-hide":"scale","transition-duration":"500",class:"full-width",color:"primary",label:i.currentModeLabel,size:"lg","dropdown-icon":"none",cover:"",push:""},{default:L(()=>[I(ir,null,{default:L(()=>[(V(!0),K(De,null,Je(i.chargeModes,(r,a)=>(V(),K(De,{key:r.value},[rn((V(),ne(or,{clickable:"",onClick:l=>i.chargeMode.value=r.value,active:i.chargeMode.value===r.value,"active-class":"bg-primary text-white"},{default:L(()=>[I(Do,{class:"text-center text-weight-bold"},{default:L(()=>[I(sr,null,{default:L(()=>[Re(le(r.label.toLocaleUpperCase()),1)]),_:2},1024)]),_:2},1024)]),_:2},1032,["onClick","active"])),[[Mn]]),a[(V(!0),K(De,null,Je(i.chargeModes,r=>(V(),ne(Ve,{key:r.value,color:i.chargeMode.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"flex-grow",onClick:a=>i.chargeMode.value=r.value},null,8,["color","label","onClick"]))),128))]),_:1}))}const rg=Me(gw,[["render",vw],["__scopeId","data-v-674981ff"],["__file","ChargePointModeButtons.vue"]]),pw=Se({__name:"ChargePointStateMessage",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>i.chargePointStateMessage(n.chargePointId)),s={props:n,mqttStore:i,message:o};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),bw={class:"row q-mt-sm q-pa-sm bg-primary text-white no-wrap message-text",color:"primary",style:{"border-radius":"10px"}};function yw(t,e,n,i,o,s){return V(),K("div",bw,[I(_e,{name:"info",size:"sm",class:"q-mr-xs"}),Re(" "+le(i.message),1)])}const _w=Me(pw,[["render",yw],["__scopeId","data-v-31323cae"],["__file","ChargePointStateMessage.vue"]]),xw=Se({__name:"ChargePointFaultMessage",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>i.chargePointFaultState(n.chargePointId)),s=g(()=>i.chargePointFaultMessage(n.chargePointId)),r=g(()=>{switch(o.value){case 1:return"bg-warning";case 2:return"bg-negative";default:return"bg-primary"}}),a=g(()=>{switch(o.value){case 1:return"warning";case 2:return"error";default:return"info"}}),l={props:n,mqttStore:i,state:o,message:s,messageClass:r,iconName:a};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}});function Sw(t,e,n,i,o,s){return i.state!==void 0&&i.state!==0?(V(),K("div",{key:0,class:Et(["row q-mt-sm q-pa-sm text-white no-wrap",i.messageClass]),style:{"border-radius":"10px"}},[I(_e,{name:i.iconName,size:"sm",class:"q-mr-xs"},null,8,["name"]),Re(" "+le(i.message),1)],2)):ue("",!0)}const ww=Me(xw,[["render",Sw],["__file","ChargePointFaultMessage.vue"]]),kw=Se({__name:"ChargePointVehicleSelect",props:{chargePointId:{type:Number,required:!0},readonly:{type:Boolean,default:!1}},setup(t,{expose:e}){e();const n=t,i=Be(),o=i.chargePointConnectedVehicleInfo(n.chargePointId),s=g(()=>i.vehicleList),r={props:n,mqttStore:i,connectedVehicle:o,vehicles:s};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Cw={key:0,class:"q-mx-sm"};function Mw(t,e,n,i,o,s){return i.props.readonly?(V(),K("div",Cw,le(i.connectedVehicle?.name),1)):(V(),ne(sg,{key:1,color:"grey",label:i.connectedVehicle?.name,icon:"directions_car",dense:"","no-caps":"",class:"flex-grow"},{default:L(()=>[I(ir,null,{default:L(()=>[(V(!0),K(De,null,Je(i.vehicles,r=>rn((V(),ne(or,{key:r.id,clickable:"",dense:"",onClick:a=>i.connectedVehicle=r},{default:L(()=>[I(Do,null,{default:L(()=>[I(sr,null,{default:L(()=>[Re(le(r.name),1)]),_:2},1024)]),_:2},1024)]),_:2},1032,["onClick"])),[[Mn]])),128))]),_:1})]),_:1},8,["label"]))}const ag=Me(kw,[["render",Mw],["__scopeId","data-v-ca7bfd56"],["__file","ChargePointVehicleSelect.vue"]]),lg=ze({name:"QSpace",setup(){const t=w("div",{class:"q-space"});return()=>t}}),pl=ze({name:"QCardActions",props:{...dm,vertical:Boolean},setup(t,{slots:e}){const n=hm(t),i=g(()=>`q-card__actions ${n.value} q-card__actions--${t.vertical===!0?"vert column":"horiz row"}`);return()=>w("div",{class:i.value},Ge(e.default))}}),Pw=Se({name:"SliderStandard",__name:"SliderStandard",props:{title:{type:String,default:"title"},modelValue:{type:Number},max:{type:Number,required:!0},min:{type:Number,required:!0},step:{type:Number,default:1},unit:{type:String,default:""},offValueRight:{type:Number,default:105},offValueLeft:{type:Number,default:-1},discreteValues:{type:Array,default:void 0}},emits:["update:model-value"],setup(t,{expose:e,emit:n}){e();const i=t,o=n,s=N(i.modelValue),r=N(null),a=g(()=>s.value!==i.modelValue),l=g({get:()=>{if(i.discreteValues){const m=i.discreteValues.indexOf(s.value??i.discreteValues[0]);return m>=0?m:0}return s.value},set:m=>{r.value&&clearTimeout(r.value),i.discreteValues?s.value=i.discreteValues[m]:s.value=m}}),c=m=>{a.value&&(r.value&&clearTimeout(r.value),r.value=setTimeout(()=>{o("update:model-value",i.discreteValues?i.discreteValues[m]:m)},2e3))},u=g(()=>{const m=i.discreteValues&&l.value!==void 0?i.discreteValues[l.value]:l.value;return m===i.offValueLeft||m===i.offValueRight?"Aus":m}),d=g(()=>{const m=i.discreteValues&&l.value!==void 0?i.discreteValues[l.value]:l.value;return m===i.offValueLeft||m===i.offValueRight?"":i.unit});ge(()=>i.modelValue,m=>{s.value=m}),Lt(()=>{if(r.value){clearTimeout(r.value);const m=l.value!==void 0?l.value:0;o("update:model-value",i.discreteValues?i.discreteValues[m]:m)}});const h=g(()=>a.value?"pending":""),f={props:i,emit:o,tempValue:s,updateTimeout:r,updatePending:a,value:l,updateValue:c,displayValue:u,displayUnit:d,myClass:h};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),Tw={class:"text-subtitle2"},Iw={class:"row items-center justify-between q-ml-sm"};function Dw(t,e,n,i,o,s){return V(),K("div",null,[R("div",null,[R("div",Tw,le(i.props.title),1)]),R("div",Iw,[I(Qs,{modelValue:i.value,"onUpdate:modelValue":e[0]||(e[0]=r=>i.value=r),min:i.props.discreteValues?0:i.props.min,max:i.props.discreteValues?i.props.discreteValues.length-1:i.props.max,step:i.props.step,color:"primary",style:{width:"75%"},"track-size":"0.5em","thumb-size":"1.7em",onTouchstart:e[1]||(e[1]=tn(()=>{},["stop"])),onTouchmove:e[2]||(e[2]=tn(()=>{},["stop"])),onTouchend:e[3]||(e[3]=tn(()=>{},["stop"])),onChange:i.updateValue},null,8,["modelValue","min","max","step"]),R("div",{class:Et(["q-ml-md no-wrap",i.myClass])},le(i.displayValue)+" "+le(i.displayUnit),3)])])}const bl=Me(Pw,[["render",Dw],["__scopeId","data-v-d1d2b5c9"],["__file","SliderStandard.vue"]]),Ow=Se({__name:"ChargePointInstantSettings",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>{let p=[{value:"none",label:"keine",color:"primary"},{value:"soc",label:"EV-SoC",color:"primary"},{value:"amount",label:"Energiemenge",color:"primary"}];return s.value===void 0&&(p=p.filter(v=>v.value!=="soc")),p}),s=g(()=>i.chargePointConnectedVehicleSocType(n.chargePointId))?.value,r=[{value:1,label:"1"},{value:3,label:"Maximum"}],a=g(()=>i.chargePointConnectedVehicleInstantChargeCurrent(n.chargePointId)),l=g(()=>i.dcChargingEnabled),c=g(()=>i.chargePointConnectedVehicleInstantDcChargePower(n.chargePointId)),u=g(()=>i.chargePointConnectedVehicleInstantChargePhases(n.chargePointId)),d=g(()=>i.chargePointConnectedVehicleInstantChargeLimit(n.chargePointId)),h=g(()=>i.chargePointConnectedVehicleInstantChargeLimitSoC(n.chargePointId)),f=g(()=>i.chargePointConnectedVehicleInstantChargeLimitEnergy(n.chargePointId)),m={props:n,mqttStore:i,limitModes:o,vehicleSocType:s,phaseOptions:r,instantChargeCurrent:a,dcCharging:l,instantChargeCurrentDc:c,numPhases:u,limitMode:d,limitSoC:h,limitEnergy:f,SliderStandard:bl};return Object.defineProperty(m,"__isScriptSetup",{enumerable:!1,value:!0}),m}}),Vw={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"},Ew={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"};function Aw(t,e,n,i,o,s){return V(),K(De,null,[I(i.SliderStandard,{title:"Stromstärke",min:6,max:32,unit:"A",modelValue:i.instantChargeCurrent.value,"onUpdate:modelValue":e[0]||(e[0]=r=>i.instantChargeCurrent.value=r),class:"q-mt-sm"},null,8,["modelValue"]),i.dcCharging?(V(),ne(i.SliderStandard,{key:0,title:"DC-Sollleistung",min:4,max:300,unit:"kW",modelValue:i.instantChargeCurrentDc.value,"onUpdate:modelValue":e[1]||(e[1]=r=>i.instantChargeCurrentDc.value=r),class:"q-mt-sm"},null,8,["modelValue"])):ue("",!0),e[4]||(e[4]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Anzahl Phasen",-1)),R("div",Vw,[I(pn,{class:"col"},{default:L(()=>[(V(),K(De,null,Je(i.phaseOptions,r=>I(Ve,{key:r.value,color:i.numPhases.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.numPhases.value=r.value},null,8,["color","label","onClick"])),64))]),_:1})]),e[5]||(e[5]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Begrenzung",-1)),R("div",Ew,[I(pn,{class:"col"},{default:L(()=>[(V(!0),K(De,null,Je(i.limitModes,r=>(V(),ne(Ve,{key:r.value,color:i.limitMode.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.limitMode.value=r.value},null,8,["color","label","onClick"]))),128))]),_:1})]),i.limitMode.value==="soc"?(V(),ne(i.SliderStandard,{key:1,title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%",modelValue:i.limitSoC.value,"onUpdate:modelValue":e[2]||(e[2]=r=>i.limitSoC.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),i.limitMode.value==="amount"?(V(),ne(i.SliderStandard,{key:2,title:"Energie-Limit",min:1,max:50,unit:"kWh",modelValue:i.limitEnergy.value,"onUpdate:modelValue":e[3]||(e[3]=r=>i.limitEnergy.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0)],64)}const qw=Me(Ow,[["render",Aw],["__scopeId","data-v-f45a6b19"],["__file","ChargePointInstantSettings.vue"]]),Rw=Se({__name:"ToggleStandard",props:{value:{type:Boolean,default:!1},size:{type:String,default:"lg"}},emits:["update:value"],setup(t,{expose:e,emit:n}){e();const i=t,o=n,r={props:i,emit:o,emitValue:a=>{o("update:value",a)}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function Lw(t,e,n,i,o,s){return V(),ne(vr,{"model-value":i.props.value,"onUpdate:modelValue":i.emitValue,color:i.props.value?"positive":"negative",size:i.props.size},null,8,["model-value","color","size"])}const Fw=Me(Rw,[["render",Lw],["__file","ToggleStandard.vue"]]),zw=Se({__name:"ChargePointPvSettings",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>{let C=[{value:"none",label:"keine",color:"primary"},{value:"soc",label:"EV-SoC",color:"primary"},{value:"amount",label:"Energiemenge",color:"primary"}];return s.value===void 0&&(C=C.filter(S=>S.value!=="soc")),C}),s=g(()=>i.chargePointConnectedVehicleSocType(n.chargePointId))?.value,r=[{value:1,label:"1"},{value:3,label:"Maximum"},{value:0,label:"Automatik"}],a=[{value:1,label:"1"},{value:3,label:"Maximum"}],l=g(()=>i.chargePointConnectedVehiclePvChargeMinCurrent(n.chargePointId)),c=g(()=>i.dcChargingEnabled),u=g(()=>i.chargePointConnectedVehiclePvDcChargePower(n.chargePointId)),d=g(()=>i.chargePointConnectedVehiclePvDcMinSocPower(n.chargePointId)),h=g(()=>i.chargePointConnectedVehiclePvChargePhases(n.chargePointId)),f=g(()=>i.chargePointConnectedVehiclePvChargePhasesMinSoc(n.chargePointId)),m=g(()=>i.chargePointConnectedVehiclePvChargeMinSoc(n.chargePointId)),p=g(()=>i.chargePointConnectedVehiclePvChargeMinSocCurrent(n.chargePointId)),v=g(()=>i.chargePointConnectedVehiclePvChargeLimit(n.chargePointId)),b=g(()=>i.chargePointConnectedVehiclePvChargeLimitSoC(n.chargePointId)),x=g(()=>i.chargePointConnectedVehiclePvChargeLimitEnergy(n.chargePointId)),y=g(()=>i.chargePointConnectedVehiclePvChargeFeedInLimit(n.chargePointId)),_={props:n,mqttStore:i,limitModes:o,vehicleSocType:s,phaseOptions:r,phaseOptionsMinSoc:a,pvMinCurrent:l,dcCharging:c,pvMinDcPower:u,pvMinDcMinSocPower:d,numPhases:h,numPhasesMinSoc:f,pvMinSoc:m,pvMinSocCurrent:p,limitMode:v,limitSoC:b,limitEnergy:x,feedInLimit:y,SliderStandard:bl,ToggleStandard:Fw};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),Bw={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"},Nw={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"},Ww={key:3},Hw={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"},jw={class:"row items-center justify-between q-ma-none q-pa-none no-wrap q-mt-md"};function $w(t,e,n,i,o,s){return V(),K(De,null,[I(i.SliderStandard,{title:"Minimaler Dauerstrom",min:-1,max:16,step:1,unit:"A","off-value-left":-1,"discrete-values":[-1,6,7,8,9,10,11,12,13,14,15,16],modelValue:i.pvMinCurrent.value,"onUpdate:modelValue":e[0]||(e[0]=r=>i.pvMinCurrent.value=r),class:"q-mt-md"},null,8,["modelValue"]),i.dcCharging?(V(),ne(i.SliderStandard,{key:0,title:"Minimaler DC-Dauerleistung",min:0,max:300,step:1,unit:"kW",modelValue:i.pvMinDcPower.value,"onUpdate:modelValue":e[1]||(e[1]=r=>i.pvMinDcPower.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),e[10]||(e[10]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Anzahl Phasen",-1)),R("div",Bw,[I(pn,{class:"col"},{default:L(()=>[(V(),K(De,null,Je(i.phaseOptions,r=>I(Ve,{key:r.value,color:i.numPhases.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.numPhases.value=r.value},null,8,["color","label","onClick"])),64))]),_:1})]),e[11]||(e[11]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Begrenzung",-1)),R("div",Nw,[I(pn,{class:"col"},{default:L(()=>[(V(!0),K(De,null,Je(i.limitModes,r=>(V(),ne(Ve,{key:r.value,color:i.limitMode.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.limitMode.value=r.value},null,8,["color","label","onClick"]))),128))]),_:1})]),i.limitMode.value==="soc"?(V(),ne(i.SliderStandard,{key:1,title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%",modelValue:i.limitSoC.value,"onUpdate:modelValue":e[2]||(e[2]=r=>i.limitSoC.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),i.limitMode.value==="amount"?(V(),ne(i.SliderStandard,{key:2,title:"Energie-Limit",min:1,max:50,unit:"kWh",modelValue:i.limitEnergy.value,"onUpdate:modelValue":e[3]||(e[3]=r=>i.limitEnergy.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),i.vehicleSocType!==void 0?(V(),K("div",Ww,[I(i.SliderStandard,{title:"Mindest-SoC für das Fahrzeug",min:0,max:100,step:5,unit:"%","off-value-left":0,modelValue:i.pvMinSoc.value,"onUpdate:modelValue":e[4]||(e[4]=r=>i.pvMinSoc.value=r),class:"q-mt-md"},null,8,["modelValue"]),I(i.SliderStandard,{title:"Mindest-SoC-Strom",min:6,max:32,unit:"A",modelValue:i.pvMinSocCurrent.value,"onUpdate:modelValue":e[5]||(e[5]=r=>i.pvMinSocCurrent.value=r),class:"q-mt-md"},null,8,["modelValue"]),i.dcCharging?(V(),ne(i.SliderStandard,{key:0,title:"DC Mindest-SoC-Leistung",min:0,max:300,step:1,unit:"kW",modelValue:i.pvMinDcMinSocPower.value,"onUpdate:modelValue":e[6]||(e[6]=r=>i.pvMinDcMinSocPower.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),e[8]||(e[8]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Anzahl Phasen Mindest-SoC",-1)),R("div",Hw,[I(pn,{class:"col"},{default:L(()=>[(V(),K(De,null,Je(i.phaseOptionsMinSoc,r=>I(Ve,{key:r.value,color:i.numPhasesMinSoc.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.numPhasesMinSoc.value=r.value},null,8,["color","label","onClick"])),64))]),_:1})])])):ue("",!0),R("div",jw,[e[9]||(e[9]=R("div",{class:"text-subtitle2 q-mr-sm"},"Einspeisegrenze beachten",-1)),R("div",null,[I(i.ToggleStandard,{dense:"",modelValue:i.feedInLimit.value,"onUpdate:modelValue":e[7]||(e[7]=r=>i.feedInLimit.value=r)},null,8,["modelValue"])])])],64)}const Uw=Me(zw,[["render",$w],["__file","ChargePointPvSettings.vue"]]);/*! + */const Ax={datetime:he.DATETIME_MED_WITH_SECONDS,millisecond:"h:mm:ss.SSS a",second:he.TIME_WITH_SECONDS,minute:he.TIME_SIMPLE,hour:{hour:"numeric"},day:{day:"numeric",month:"short"},week:"DD",month:{month:"short",year:"numeric"},quarter:"'Q'q - yyyy",year:{year:"numeric"}};dh._date.override({_id:"luxon",_create:function(t){return he.fromMillis(t,this.options)},init(t){this.options.locale||(this.options.locale=t.locale)},formats:function(){return Ax},parse:function(t,e){const n=this.options,i=typeof t;return t===null||i==="undefined"?null:(i==="number"?t=this._create(t):i==="string"?typeof e=="string"?t=he.fromFormat(t,e,n):t=he.fromISO(t,n):t instanceof Date?t=he.fromJSDate(t,n):i==="object"&&!(t instanceof he)&&(t=he.fromObject(t,n)),t.isValid?t.valueOf():null)},format:function(t,e){const n=this._create(t);return typeof e=="string"?n.toFormat(e):n.toLocaleString(e)},add:function(t,e,n){const i={};return i[n]=e,this._create(t).plus(i).valueOf()},diff:function(t,e,n){return this._create(t).diff(this._create(e)).as(n).valueOf()},startOf:function(t,e,n){if(e==="isoWeek"){n=Math.trunc(Math.min(Math.max(0,n),6));const i=this._create(t);return i.minus({days:(i.weekday-n+7)%7}).startOf("day").valueOf()}return e?this._create(t).startOf(e).valueOf():t},endOf:function(t,e){return this._create(t).endOf(e).valueOf()}});const qx=Se({__name:"HistoryChart",props:{showLegend:{type:Boolean}},setup(t,{expose:e}){e(),Nn.register(Ph,Ei,Cn,Co,Hs,Ni,m0,Ch);const n=g(()=>r.showLegend),i=Be(),o=tl(),s=In(),r=t,a=N(null),l=g(()=>y?.value?.datasets.length>15),c=S=>{S.data.datasets.forEach((E,A)=>{typeof E.label=="string"&&o.isDatasetHidden(E.label)&&S.hide(A)}),S.update()};ge(()=>a.value?.chart,S=>{S&&c(S)},{immediate:!0});const u=g(()=>{const S=i.chartData,E=Math.floor(Date.now()/1e3);return S.filter(A=>A.timestamp>E-v.value)}),d=g(()=>i.chargePointIds),h=g(()=>i.chargePointName),f=g(()=>{const S=i.getGridId;return S!==void 0?i.getComponentName(S):"Zähler"}),m=g(()=>f.value),p=g(()=>i.vehicleList),v=g(()=>i.themeConfiguration?.history_chart_range||3600),b=g(()=>d.value.map(S=>({label:`${h.value(S)}`,unit:"kW",borderColor:"#4766b5",backgroundColor:"rgba(71, 102, 181, 0.2)",data:u.value.map(E=>({x:E.timestamp*1e3,y:E[`cp${S}-power`]||0})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"}))),x=g(()=>p.value.map(S=>{const E=`ev${S.id}-soc`;if(u.value.some(A=>E in A))return{label:`${S.name} SoC`,unit:"%",borderColor:"#9F8AFF",borderWidth:2,borderDash:[10,5],pointRadius:0,pointHoverRadius:4,pointHitRadius:5,data:u.value.map(A=>({x:A.timestamp*1e3,y:Number(A[E]??0)})),fill:!1,yAxisID:"y2"}}).filter(S=>S!==void 0)),y=g(()=>({datasets:[{label:f.value,unit:"kW",borderColor:"#a33c42",backgroundColor:"rgba(239,182,188, 0.2)",data:u.value.map(S=>({x:S.timestamp*1e3,y:S.grid})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"},{label:"Hausverbrauch",unit:"kW",borderColor:"#949aa1",backgroundColor:"rgba(148, 154, 161, 0.2)",data:u.value.map(S=>({x:S.timestamp*1e3,y:S["house-power"]})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"},{label:"PV ges.",unit:"kW",borderColor:"green",backgroundColor:"rgba(144, 238, 144, 0.2)",data:u.value.map(S=>({x:S.timestamp*1e3,y:S["pv-all"]})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"},{label:"Speicher ges.",unit:"kW",borderColor:"#b5a647",backgroundColor:"rgba(181, 166, 71, 0.2)",data:u.value.map(S=>({x:S.timestamp*1e3,y:S["bat-all-power"]})),borderWidth:2,pointRadius:0,pointHoverRadius:4,pointHitRadius:5,fill:!0,yAxisID:"y"},{label:"Speicher SoC",unit:"%",borderColor:"#FFB96E",borderWidth:2,borderDash:[10,5],pointRadius:0,pointHoverRadius:4,pointHitRadius:5,data:u.value.map(S=>({x:S.timestamp*1e3,y:S["bat-all-soc"]})),fill:!1,yAxisID:"y2"},...b.value,...x.value]})),_=g(()=>({responsive:!0,maintainAspectRatio:!1,animation:{duration:0},plugins:{legend:{display:!l.value&&n.value,fullSize:!0,align:"center",position:"bottom",labels:{boxWidth:19,boxHeight:.1},onClick:(S,E,A)=>{const O=E.datasetIndex,P=A.chart,q=E.text;o.toggleDataset(q),o.isDatasetHidden(q)?P.hide(O):P.show(O)}},tooltip:{mode:"index",intersect:!1,callbacks:{label:S=>`${S.dataset.label}: ${S.formattedValue} ${S.dataset.unit}`}}},scales:{x:{type:"time",time:{unit:"minute",displayFormats:{minute:"HH:mm"}},ticks:{maxTicksLimit:12,source:"auto"},grid:{tickLength:5,color:s.dark.isActive?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)"}},y:{position:"left",type:"linear",display:!0,title:{display:!0,text:"Leistung [kW]"},ticks:{stepSize:.2,maxTicksLimit:11},grid:{color:s.dark.isActive?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)"}},y2:{position:"right",type:"linear",display:!0,title:{display:!0,text:"SoC [%]"},min:0,max:100,ticks:{stepSize:10},grid:{display:!1}}}})),C={legendDisplay:n,mqttStore:i,localDataStore:o,$q:s,props:r,chartRef:a,legendLarge:l,applyHiddenDatasetsToChart:c,selectedData:u,chargePointIds:d,chargePointNames:h,gridMeterName:f,chartInstanceKey:m,vehicles:p,chartRange:v,chargePointDatasets:b,vehicleDatasets:x,lineChartData:y,chartOptions:_,get ChartjsLine(){return Vh},HistoryChartLegend:V0};return Object.defineProperty(C,"__isScriptSetup",{enumerable:!1,value:!0}),C}}),Rx={class:"chart-container"},Lx={class:"chart-wrapper"};function Fx(t,e,n,i,o,s){return V(),K("div",Rx,[R("div",Lx,[(V(),ne(i.ChartjsLine,{key:i.chartInstanceKey,data:i.lineChartData,options:i.chartOptions,ref:"chartRef"},null,8,["data","options"]))]),i.legendDisplay&&i.legendLarge?(V(),ne(i.HistoryChartLegend,{key:0,chart:i.chartRef?.chart||null,class:"legend-wrapper q-mt-sm"},null,8,["chart"])):ue("",!0)])}const zx=Me(qx,[["render",Fx],["__scopeId","data-v-df4fc9f6"],["__file","HistoryChart.vue"]]),Bx=Se({name:"ChartCarousel",__name:"ChartCarousel",setup(t,{expose:e}){e();const n=In(),i=tl(),o=N(0),s=()=>{i.toggleLegendVisibility()},r=g(()=>i.legendVisible),a=N(!1),l=[{name:"EnergyFlowChart",component:mv},{name:"HistoryChart",component:zx}],c=N(l[0].name);ge(()=>a.value,(d,h)=>{!d&&h&&c.value==="HistoryChart"&&o.value++});const u={$q:n,localDataStore:i,renderKey:o,toggleLegend:s,legendVisible:r,fullscreen:a,chartCarouselItems:l,currentSlide:c};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function Nx(t,e,n,i,o,s){return V(),ne(zd,{modelValue:i.currentSlide,"onUpdate:modelValue":e[1]||(e[1]=r=>i.currentSlide=r),fullscreen:i.fullscreen,"onUpdate:fullscreen":e[2]||(e[2]=r=>i.fullscreen=r),swipeable:"","control-color":"primary",padding:"",animated:"",infinite:"",navigation:i.chartCarouselItems.length>1,arrows:i.chartCarouselItems.length>1&&i.$q.screen.gt.xs,class:"full-width full-height bg-transparent carousel-height"},{control:L(()=>[I(Hm,{position:"bottom-right"},{default:L(()=>[i.currentSlide==="HistoryChart"?(V(),ne(Ve,{key:0,size:"sm",class:"q-mr-sm legend-button-text",label:"Legend ein/aus",onClick:i.toggleLegend})):ue("",!0),I(Ve,{push:"",round:"",dense:"","text-color":"primary",icon:i.fullscreen?"fullscreen_exit":"fullscreen",onClick:e[0]||(e[0]=r=>i.fullscreen=!i.fullscreen)},null,8,["icon"])]),_:1})]),default:L(()=>[(V(),K(De,null,Je(i.chartCarouselItems,r=>I(qd,{key:`${r.name}-${r.name==="HistoryChart"?i.renderKey:0}`,name:r.name},{default:L(()=>[(V(),ne(Gg(r.component),{"show-legend":i.legendVisible},null,8,["show-legend"]))]),_:2},1032,["name"])),64))]),_:1},8,["modelValue","fullscreen","navigation","arrows"])}const Wx=Me(Bx,[["render",Nx],["__scopeId","data-v-85eaf875"],["__file","ChartCarousel.vue"]]),vn=ze({name:"QTd",props:{props:Object,autoWidth:Boolean,noHover:Boolean},setup(t,{slots:e}){const n=$e(),i=g(()=>"q-td"+(t.autoWidth===!0?" q-table--col-auto-width":"")+(t.noHover===!0?" q-td--no-hover":"")+" ");return()=>{if(t.props===void 0)return w("td",{class:i.value},Ge(e.default));const o=n.vnode.key,s=(t.props.colsMap!==void 0?t.props.colsMap[o]:null)||t.props.col;if(s===void 0)return;const{row:r}=t.props;return w("td",{class:i.value+s.__tdClass(r),style:s.__tdStyle(r)},Ge(e.default))}}}),ri=[];let Hi;function Hx(t){Hi=t.keyCode===27}function jx(){Hi===!0&&(Hi=!1)}function $x(t){Hi===!0&&(Hi=!1,Js(t,27)===!0&&ri[ri.length-1](t))}function Af(t){window[t]("keydown",Hx),window[t]("blur",jx),window[t]("keyup",$x),Hi=!1}function qf(t){Jn.is.desktop===!0&&(ri.push(t),ri.length===1&&Af("addEventListener"))}function Zs(t){const e=ri.indexOf(t);e!==-1&&(ri.splice(e,1),ri.length===0&&Af("removeEventListener"))}const ai=[];function Rf(t){ai[ai.length-1](t)}function Lf(t){Jn.is.desktop===!0&&(ai.push(t),ai.length===1&&document.body.addEventListener("focusin",Rf))}function Sa(t){const e=ai.indexOf(t);e!==-1&&(ai.splice(e,1),ai.length===0&&document.body.removeEventListener("focusin",Rf))}let _s=0;const Ux={standard:"fixed-full flex-center",top:"fixed-top justify-center",bottom:"fixed-bottom justify-center",right:"fixed-right items-center",left:"fixed-left items-center"},Eu={standard:["scale","scale"],top:["slide-down","slide-up"],bottom:["slide-up","slide-down"],right:["slide-left","slide-right"],left:["slide-right","slide-left"]},Xi=ze({name:"QDialog",inheritAttrs:!1,props:{...kd,...Fa,transitionShow:String,transitionHide:String,persistent:Boolean,autoClose:Boolean,allowFocusOutside:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,backdropFilter:String,position:{type:String,default:"standard",validator:t=>["standard","top","bottom","left","right"].includes(t)}},emits:[...Cd,"shake","click","escapeKey"],setup(t,{slots:e,emit:n,attrs:i}){const o=$e(),s=N(null),r=N(!1),a=N(!1);let l=null,c=null,u,d;const h=g(()=>t.persistent!==!0&&t.noRouteDismiss!==!0&&t.seamless!==!0),{preventBodyScroll:f}=bm(),{registerTimeout:m}=Io(),{registerTick:p,removeTick:v}=yo(),{transitionProps:b,transitionStyle:x}=Md(t,()=>Eu[t.position][0],()=>Eu[t.position][1]),y=g(()=>x.value+(t.backdropFilter!==void 0?`;backdrop-filter:${t.backdropFilter};-webkit-backdrop-filter:${t.backdropFilter}`:"")),{showPortal:_,hidePortal:C,portalIsAccessible:S,renderPortal:E}=Pd(o,s,fe,"dialog"),{hide:A}=Td({showing:r,hideOnRouteChange:h,handleShow:$,handleHide:U,processOnMount:!0}),{addToHistory:O,removeFromHistory:P}=pm(r,A,h),q=g(()=>`q-dialog__inner flex no-pointer-events q-dialog__inner--${t.maximized===!0?"maximized":"minimized"} q-dialog__inner--${t.position} ${Ux[t.position]}`+(a.value===!0?" q-dialog__inner--animating":"")+(t.fullWidth===!0?" q-dialog__inner--fullwidth":"")+(t.fullHeight===!0?" q-dialog__inner--fullheight":"")+(t.square===!0?" q-dialog__inner--square":"")),M=g(()=>r.value===!0&&t.seamless!==!0),H=g(()=>t.autoClose===!0?{onClick:T}:{}),z=g(()=>[`q-dialog fullscreen no-pointer-events q-dialog--${M.value===!0?"modal":"seamless"}`,i.class]);ge(()=>t.maximized,B=>{r.value===!0&&D(B)}),ge(M,B=>{f(B),B===!0?(Lf(ae),qf(te)):(Sa(ae),Zs(te))});function $(B){O(),c=t.noRefocus===!1&&document.activeElement!==null?document.activeElement:null,D(t.maximized),_(),a.value=!0,t.noFocus!==!0?(document.activeElement!==null&&document.activeElement.blur(),p(G)):v(),m(()=>{if(o.proxy.$q.platform.is.ios===!0){if(t.seamless!==!0&&document.activeElement){const{top:J,bottom:we}=document.activeElement.getBoundingClientRect(),{innerHeight:Z}=window,Ee=window.visualViewport!==void 0?window.visualViewport.height:Z;J>0&&we>Ee/2&&(document.scrollingElement.scrollTop=Math.min(document.scrollingElement.scrollHeight-Ee,we>=Z?1/0:Math.ceil(document.scrollingElement.scrollTop+we-Ee/2))),document.activeElement.scrollIntoView()}d=!0,s.value.click(),d=!1}_(!0),a.value=!1,n("show",B)},t.transitionDuration)}function U(B){v(),P(),de(!0),a.value=!0,C(),c!==null&&(((B&&B.type.indexOf("key")===0?c.closest('[tabindex]:not([tabindex^="-"])'):void 0)||c).focus(),c=null),m(()=>{C(!0),a.value=!1,n("hide",B)},t.transitionDuration)}function G(B){rr(()=>{let J=s.value;if(J!==null){if(B!==void 0){const we=J.querySelector(B);if(we!==null){we.focus({preventScroll:!0});return}}J.contains(document.activeElement)!==!0&&(J=J.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||J.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||J.querySelector("[autofocus], [data-autofocus]")||J,J.focus({preventScroll:!0}))}})}function Y(B){B&&typeof B.focus=="function"?B.focus({preventScroll:!0}):G(),n("shake");const J=s.value;J!==null&&(J.classList.remove("q-animate--scale"),J.classList.add("q-animate--scale"),l!==null&&clearTimeout(l),l=setTimeout(()=>{l=null,s.value!==null&&(J.classList.remove("q-animate--scale"),G())},170))}function te(){t.seamless!==!0&&(t.persistent===!0||t.noEscDismiss===!0?t.maximized!==!0&&t.noShake!==!0&&Y():(n("escapeKey"),A()))}function de(B){l!==null&&(clearTimeout(l),l=null),(B===!0||r.value===!0)&&(D(!1),t.seamless!==!0&&(f(!1),Sa(ae),Zs(te))),B!==!0&&(c=null)}function D(B){B===!0?u!==!0&&(_s<1&&document.body.classList.add("q-body--dialog"),_s++,u=!0):u===!0&&(_s<2&&document.body.classList.remove("q-body--dialog"),_s--,u=!1)}function T(B){d!==!0&&(A(B),n("click",B))}function Q(B){t.persistent!==!0&&t.noBackdropDismiss!==!0?A(B):t.noShake!==!0&&Y()}function ae(B){t.allowFocusOutside!==!0&&S.value===!0&&_d(s.value,B.target)!==!0&&G('[tabindex]:not([tabindex="-1"])')}Object.assign(o.proxy,{focus:G,shake:Y,__updateRefocusTarget(B){c=B||null}}),Lt(de);function fe(){return w("div",{role:"dialog","aria-modal":M.value===!0?"true":"false",...i,class:z.value},[w(Po,{name:"q-transition--fade",appear:!0},()=>M.value===!0?w("div",{class:"q-dialog__backdrop fixed-full",style:y.value,"aria-hidden":"true",tabindex:-1,onClick:Q}):null),w(Po,b.value,()=>r.value===!0?w("div",{ref:s,class:q.value,style:x.value,tabindex:-1,...H.value},Ge(e.default)):null)])}return E}});function Au(t){if(t===!1)return 0;if(t===!0||t===void 0)return 1;const e=parseInt(t,10);return isNaN(e)?0:e}const Mn=vd({name:"close-popup",beforeMount(t,{value:e}){const n={depth:Au(e),handler(i){n.depth!==0&&setTimeout(()=>{const o=ym(t);o!==void 0&&_m(o,i,n.depth)})},handlerKey(i){Js(i,13)===!0&&n.handler(i)}};t.__qclosepopup=n,t.addEventListener("click",n.handler),t.addEventListener("keyup",n.handlerKey)},updated(t,{value:e,oldValue:n}){e!==n&&(t.__qclosepopup.depth=Au(e))},beforeUnmount(t){const e=t.__qclosepopup;t.removeEventListener("click",e.handler),t.removeEventListener("keyup",e.handlerKey),delete t.__qclosepopup}}),ul=()=>({chargeModes:[{value:"instant_charging",label:"Sofort",color:"negative"},{value:"pv_charging",label:"PV",color:"positive"},{value:"scheduled_charging",label:"Ziel",color:"primary"},{value:"eco_charging",label:"Eco",color:"accent"},{value:"stop",label:"Stop",color:"light"}]}),Yx=Se({__name:"BaseCarousel",props:{items:{}},setup(t,{expose:e}){e();const n=t,i=In(),o=N(0),s=N(!0),r=g(()=>{const h=i.screen.width>1400?3:i.screen.width>800?2:1;return n.items.reduce((f,m,p)=>{const v=Math.floor(p/h);return f[v]||(f[v]=[]),f[v].push(m),f},[])});ge(()=>r.value,async(h,f)=>{const m=p=>h.findIndex(v=>v.includes(p));if(!f||f.length===0){o.value=0;return}s.value=!1,o.value=Math.max(m(f[o.value][0]),0),await at(),s.value=!0});const a=()=>{const h=window.scrollY;at(()=>{c(),u(),window.scrollTo(0,h)})},l=N(0),c=()=>{const h=document.querySelectorAll(".item-container"),f=Array.from(h).map(m=>m.offsetHeight);l.value=Math.max(...f)},u=()=>{const h=new MutationObserver(()=>{c()});document.querySelectorAll(".item-container").forEach(m=>{h.observe(m,{childList:!0,subtree:!0,attributes:!0})})};cn(()=>{at(()=>{c(),u()})}),ge(()=>n.items,()=>{at(()=>{c(),u()})});const d={props:n,$q:i,currentSlide:o,animated:s,groupedItems:r,handleSlideChange:a,maxCardHeight:l,updateMaxCardHeight:c,observeCardChanges:u};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}});function Zx(t,e,n,i,o,s){return V(),ne(zd,{modelValue:i.currentSlide,"onUpdate:modelValue":[e[0]||(e[0]=r=>i.currentSlide=r),i.handleSlideChange],swipeable:"",animated:i.animated,"control-color":"primary",infinite:"",padding:"",navigation:i.groupedItems.length>1,arrows:i.groupedItems.length>1&&i.$q.screen.gt.xs,class:"carousel-height q-mt-md","transition-next":"slide-left","transition-prev":"slide-right",onMousedown:e[1]||(e[1]=tn(()=>{},["prevent"]))},{default:L(()=>[(V(!0),K(De,null,Je(i.groupedItems,(r,a)=>(V(),ne(qd,{key:a,name:a,class:"row no-wrap justify-center carousel-slide"},{default:L(()=>[(V(!0),K(De,null,Je(r,l=>(V(),K("div",{key:l,class:"item-container",style:Aa(`min-height: ${i.maxCardHeight}px`)},[oi(t.$slots,"item",{item:l},void 0,!0)],4))),128))]),_:2},1032,["name"]))),128))]),_:3},8,["modelValue","animated","navigation","arrows"])}const dl=Me(Yx,[["render",Zx],["__scopeId","data-v-a4732b71"],["__file","BaseCarousel.vue"]]);function Xx(t){return t??null}function qu(t,e){return t??(e===!0?`f_${sa()}`:null)}function Ff({getValue:t,required:e=!0}={}){if(Jg.value===!0){const n=t!==void 0?N(Xx(t())):N(null);return e===!0&&n.value===null&&cn(()=>{n.value=`f_${sa()}`}),t!==void 0&&ge(t,i=>{n.value=qu(i,e)}),n}return t!==void 0?g(()=>qu(t(),e)):N(`f_${sa()}`)}const Ru=/^on[A-Z]/;function Kx(){const{attrs:t,vnode:e}=$e(),n={listeners:N({}),attributes:N({})};function i(){const o={},s={};for(const r in t)r!=="class"&&r!=="style"&&Ru.test(r)===!1&&(o[r]=t[r]);for(const r in e.props)Ru.test(r)===!0&&(s[r]=e.props[r]);n.attributes.value=o,n.listeners.value=s}return xd(i),i(),n}function Qx({validate:t,resetValidation:e,requiresQForm:n}){const i=Vs(em,!1);if(i!==!1){const{props:o,proxy:s}=$e();Object.assign(s,{validate:t,resetValidation:e}),ge(()=>o.disable,r=>{r===!0?(typeof e=="function"&&e(),i.unbindComponent(s)):i.bindComponent(s)}),cn(()=>{o.disable!==!0&&i.bindComponent(s)}),Lt(()=>{o.disable!==!0&&i.unbindComponent(s)})}else n===!0&&console.error("Parent QForm not found on useFormChild()!")}const Lu=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,Fu=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,zu=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,xs=/^rgb\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5])\)$/,Ss=/^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/,Jr={date:t=>/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(t),time:t=>/^([0-1]?\d|2[0-3]):[0-5]\d$/.test(t),fulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(t),timeOrFulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(t),email:t=>/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(t),hexColor:t=>Lu.test(t),hexaColor:t=>Fu.test(t),hexOrHexaColor:t=>zu.test(t),rgbColor:t=>xs.test(t),rgbaColor:t=>Ss.test(t),rgbOrRgbaColor:t=>xs.test(t)||Ss.test(t),hexOrRgbColor:t=>Lu.test(t)||xs.test(t),hexaOrRgbaColor:t=>Fu.test(t)||Ss.test(t),anyColor:t=>zu.test(t)||xs.test(t)||Ss.test(t)},Gx=[!0,!1,"ondemand"],Jx={modelValue:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],default:!1,validator:t=>Gx.includes(t)}};function eS(t,e){const{props:n,proxy:i}=$e(),o=N(!1),s=N(null),r=N(!1);Qx({validate:p,resetValidation:m});let a=0,l;const c=g(()=>n.rules!==void 0&&n.rules!==null&&n.rules.length!==0),u=g(()=>n.disable!==!0&&c.value===!0&&e.value===!1),d=g(()=>n.error===!0||o.value===!0),h=g(()=>typeof n.errorMessage=="string"&&n.errorMessage.length!==0?n.errorMessage:s.value);ge(()=>n.modelValue,()=>{r.value=!0,u.value===!0&&n.lazyRules===!1&&v()});function f(){n.lazyRules!=="ondemand"&&u.value===!0&&r.value===!0&&v()}ge(()=>n.reactiveRules,b=>{b===!0?l===void 0&&(l=ge(()=>n.rules,f,{immediate:!0,deep:!0})):l!==void 0&&(l(),l=void 0)},{immediate:!0}),ge(()=>n.lazyRules,f),ge(t,b=>{b===!0?r.value=!0:u.value===!0&&n.lazyRules!=="ondemand"&&v()});function m(){a++,e.value=!1,r.value=!1,o.value=!1,s.value=null,v.cancel()}function p(b=n.modelValue){if(n.disable===!0||c.value===!1)return!0;const x=++a,y=e.value!==!0?()=>{r.value=!0}:()=>{},_=(S,E)=>{S===!0&&y(),o.value=S,s.value=E||null,e.value=!1},C=[];for(let S=0;S{if(S===void 0||Array.isArray(S)===!1||S.length===0)return x===a&&_(!1),!0;const E=S.find(A=>A===!1||typeof A=="string");return x===a&&_(E!==void 0,E),E===void 0},S=>(x===a&&(console.error(S),_(!0)),!1)))}const v=Sd(p,0);return Lt(()=>{l!==void 0&&l(),v.cancel()}),Object.assign(i,{resetValidation:m,validate:p}),ei(i,"hasError",()=>d.value),{isDirtyModel:r,hasRules:c,hasError:d,errorMessage:h,validate:p,resetValidation:m}}function Fo(t){return t!=null&&(""+t).length!==0}const tS={...un,...Jx,label:String,stackLabel:Boolean,hint:String,hideHint:Boolean,prefix:String,suffix:String,labelColor:String,color:String,bgColor:String,filled:Boolean,outlined:Boolean,borderless:Boolean,standout:[Boolean,String],square:Boolean,loading:Boolean,labelSlot:Boolean,bottomSlots:Boolean,hideBottomSpace:Boolean,rounded:Boolean,dense:Boolean,itemAligned:Boolean,counter:Boolean,clearable:Boolean,clearIcon:String,disable:Boolean,readonly:Boolean,autofocus:Boolean,for:String},gr={...tS,maxlength:[Number,String]},hl=["update:modelValue","clear","focus","blur"];function fl({requiredForAttr:t=!0,tagProp:e,changeEvent:n=!1}={}){const{props:i,proxy:o}=$e(),s=dn(i,o.$q),r=Ff({required:t,getValue:()=>i.for});return{requiredForAttr:t,changeEvent:n,tag:e===!0?g(()=>i.tag):{value:"label"},isDark:s,editable:g(()=>i.disable!==!0&&i.readonly!==!0),innerLoading:N(!1),focused:N(!1),hasPopupOpen:!1,splitAttrs:Kx(),targetUid:r,rootRef:N(null),targetRef:N(null),controlRef:N(null)}}function gl(t){const{props:e,emit:n,slots:i,attrs:o,proxy:s}=$e(),{$q:r}=s;let a=null;t.hasValue===void 0&&(t.hasValue=g(()=>Fo(e.modelValue))),t.emitValue===void 0&&(t.emitValue=Y=>{n("update:modelValue",Y)}),t.controlEvents===void 0&&(t.controlEvents={onFocusin:O,onFocusout:P}),Object.assign(t,{clearValue:q,onControlFocusin:O,onControlFocusout:P,focus:E}),t.computedCounter===void 0&&(t.computedCounter=g(()=>{if(e.counter!==!1){const Y=typeof e.modelValue=="string"||typeof e.modelValue=="number"?(""+e.modelValue).length:Array.isArray(e.modelValue)===!0?e.modelValue.length:0,te=e.maxlength!==void 0?e.maxlength:e.maxValues;return Y+(te!==void 0?" / "+te:"")}}));const{isDirtyModel:l,hasRules:c,hasError:u,errorMessage:d,resetValidation:h}=eS(t.focused,t.innerLoading),f=t.floatingLabel!==void 0?g(()=>e.stackLabel===!0||t.focused.value===!0||t.floatingLabel.value===!0):g(()=>e.stackLabel===!0||t.focused.value===!0||t.hasValue.value===!0),m=g(()=>e.bottomSlots===!0||e.hint!==void 0||c.value===!0||e.counter===!0||e.error!==null),p=g(()=>e.filled===!0?"filled":e.outlined===!0?"outlined":e.borderless===!0?"borderless":e.standout?"standout":"standard"),v=g(()=>`q-field row no-wrap items-start q-field--${p.value}`+(t.fieldClass!==void 0?` ${t.fieldClass.value}`:"")+(e.rounded===!0?" q-field--rounded":"")+(e.square===!0?" q-field--square":"")+(f.value===!0?" q-field--float":"")+(x.value===!0?" q-field--labeled":"")+(e.dense===!0?" q-field--dense":"")+(e.itemAligned===!0?" q-field--item-aligned q-item-type":"")+(t.isDark.value===!0?" q-field--dark":"")+(t.getControl===void 0?" q-field--auto-height":"")+(t.focused.value===!0?" q-field--focused":"")+(u.value===!0?" q-field--error":"")+(u.value===!0||t.focused.value===!0?" q-field--highlighted":"")+(e.hideBottomSpace!==!0&&m.value===!0?" q-field--with-bottom":"")+(e.disable===!0?" q-field--disabled":e.readonly===!0?" q-field--readonly":"")),b=g(()=>"q-field__control relative-position row no-wrap"+(e.bgColor!==void 0?` bg-${e.bgColor}`:"")+(u.value===!0?" text-negative":typeof e.standout=="string"&&e.standout.length!==0&&t.focused.value===!0?` ${e.standout}`:e.color!==void 0?` text-${e.color}`:"")),x=g(()=>e.labelSlot===!0||e.label!==void 0),y=g(()=>"q-field__label no-pointer-events absolute ellipsis"+(e.labelColor!==void 0&&u.value!==!0?` text-${e.labelColor}`:"")),_=g(()=>({id:t.targetUid.value,editable:t.editable.value,focused:t.focused.value,floatingLabel:f.value,modelValue:e.modelValue,emitValue:t.emitValue})),C=g(()=>{const Y={};return t.targetUid.value&&(Y.for=t.targetUid.value),e.disable===!0&&(Y["aria-disabled"]="true"),Y});function S(){const Y=document.activeElement;let te=t.targetRef!==void 0&&t.targetRef.value;te&&(Y===null||Y.id!==t.targetUid.value)&&(te.hasAttribute("tabindex")===!0||(te=te.querySelector("[tabindex]")),te&&te!==Y&&te.focus({preventScroll:!0}))}function E(){rr(S)}function A(){xm(S);const Y=document.activeElement;Y!==null&&t.rootRef.value.contains(Y)&&Y.blur()}function O(Y){a!==null&&(clearTimeout(a),a=null),t.editable.value===!0&&t.focused.value===!1&&(t.focused.value=!0,n("focus",Y))}function P(Y,te){a!==null&&clearTimeout(a),a=setTimeout(()=>{a=null,!(document.hasFocus()===!0&&(t.hasPopupOpen===!0||t.controlRef===void 0||t.controlRef.value===null||t.controlRef.value.contains(document.activeElement)!==!1))&&(t.focused.value===!0&&(t.focused.value=!1,n("blur",Y)),te!==void 0&&te())})}function q(Y){Pt(Y),r.platform.is.mobile!==!0?(t.targetRef!==void 0&&t.targetRef.value||t.rootRef.value).focus():t.rootRef.value.contains(document.activeElement)===!0&&document.activeElement.blur(),e.type==="file"&&(t.inputRef.value.value=null),n("update:modelValue",null),t.changeEvent===!0&&n("change",null),n("clear",e.modelValue),at(()=>{const te=l.value;h(),l.value=te})}function M(Y){[13,32].includes(Y.keyCode)&&q(Y)}function H(){const Y=[];return i.prepend!==void 0&&Y.push(w("div",{class:"q-field__prepend q-field__marginal row no-wrap items-center",key:"prepend",onClick:Rn},i.prepend())),Y.push(w("div",{class:"q-field__control-container col relative-position row no-wrap q-anchor--skip"},z())),u.value===!0&&e.noErrorIcon===!1&&Y.push(U("error",[w(_e,{name:r.iconSet.field.error,color:"negative"})])),e.loading===!0||t.innerLoading.value===!0?Y.push(U("inner-loading-append",i.loading!==void 0?i.loading():[w(tm,{color:e.color})])):e.clearable===!0&&t.hasValue.value===!0&&t.editable.value===!0&&Y.push(U("inner-clearable-append",[w(_e,{class:"q-field__focusable-action",name:e.clearIcon||r.iconSet.field.clear,tabindex:0,role:"button","aria-hidden":"false","aria-label":r.lang.label.clear,onKeyup:M,onClick:q})])),i.append!==void 0&&Y.push(w("div",{class:"q-field__append q-field__marginal row no-wrap items-center",key:"append",onClick:Rn},i.append())),t.getInnerAppend!==void 0&&Y.push(U("inner-append",t.getInnerAppend())),t.getControlChild!==void 0&&Y.push(t.getControlChild()),Y}function z(){const Y=[];return e.prefix!==void 0&&e.prefix!==null&&Y.push(w("div",{class:"q-field__prefix no-pointer-events row items-center"},e.prefix)),t.getShadowControl!==void 0&&t.hasShadow.value===!0&&Y.push(t.getShadowControl()),t.getControl!==void 0?Y.push(t.getControl()):i.rawControl!==void 0?Y.push(i.rawControl()):i.control!==void 0&&Y.push(w("div",{ref:t.targetRef,class:"q-field__native row",tabindex:-1,...t.splitAttrs.attributes.value,"data-autofocus":e.autofocus===!0||void 0},i.control(_.value))),x.value===!0&&Y.push(w("div",{class:y.value},Ge(i.label,e.label))),e.suffix!==void 0&&e.suffix!==null&&Y.push(w("div",{class:"q-field__suffix no-pointer-events row items-center"},e.suffix)),Y.concat(Ge(i.default))}function $(){let Y,te;u.value===!0?d.value!==null?(Y=[w("div",{role:"alert"},d.value)],te=`q--slot-error-${d.value}`):(Y=Ge(i.error),te="q--slot-error"):(e.hideHint!==!0||t.focused.value===!0)&&(e.hint!==void 0?(Y=[w("div",e.hint)],te=`q--slot-hint-${e.hint}`):(Y=Ge(i.hint),te="q--slot-hint"));const de=e.counter===!0||i.counter!==void 0;if(e.hideBottomSpace===!0&&de===!1&&Y===void 0)return;const D=w("div",{key:te,class:"q-field__messages col"},Y);return w("div",{class:"q-field__bottom row items-start q-field__bottom--"+(e.hideBottomSpace!==!0?"animated":"stale"),onClick:Rn},[e.hideBottomSpace===!0?D:w(Po,{name:"q-transition--field-message"},()=>D),de===!0?w("div",{class:"q-field__counter"},i.counter!==void 0?i.counter():t.computedCounter.value):null])}function U(Y,te){return te===null?null:w("div",{key:Y,class:"q-field__append q-field__marginal row no-wrap items-center q-anchor--skip"},te)}let G=!1;return er(()=>{G=!0}),tr(()=>{G===!0&&e.autofocus===!0&&s.focus()}),e.autofocus===!0&&cn(()=>{s.focus()}),Lt(()=>{a!==null&&clearTimeout(a)}),Object.assign(s,{focus:E,blur:A}),function(){const te=t.getControl===void 0&&i.control===void 0?{...t.splitAttrs.attributes.value,"data-autofocus":e.autofocus===!0||void 0,...C.value}:C.value;return w(t.tag.value,{ref:t.rootRef,class:[v.value,o.class],style:o.style,...te},[i.before!==void 0?w("div",{class:"q-field__before q-field__marginal row no-wrap items-center",onClick:Rn},i.before()):null,w("div",{class:"q-field__inner relative-position col self-stretch"},[w("div",{ref:t.controlRef,class:b.value,tabindex:-1,...t.controlEvents},H()),m.value===!0?$():null]),i.after!==void 0?w("div",{class:"q-field__after q-field__marginal row no-wrap items-center",onClick:Rn},i.after()):null])}}const Bu={date:"####/##/##",datetime:"####/##/## ##:##",time:"##:##",fulltime:"##:##:##",phone:"(###) ### - ####",card:"#### #### #### ####"},Xs={"#":{pattern:"[\\d]",negate:"[^\\d]"},S:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]"},N:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]"},A:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleUpperCase()},a:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleLowerCase()},X:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleUpperCase()},x:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleLowerCase()}},zf=Object.keys(Xs);zf.forEach(t=>{Xs[t].regex=new RegExp(Xs[t].pattern)});const nS=new RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+zf.join("")+"])|(.)","g"),Nu=/[.*+?^${}()|[\]\\]/g,ft="",iS={mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean};function oS(t,e,n,i){let o,s,r,a,l,c;const u=N(null),d=N(f());function h(){return t.autogrow===!0||["textarea","text","search","url","tel","password"].includes(t.type)}ge(()=>t.type+t.autogrow,p),ge(()=>t.mask,O=>{if(O!==void 0)v(d.value,!0);else{const P=E(d.value);p(),t.modelValue!==P&&e("update:modelValue",P)}}),ge(()=>t.fillMask+t.reverseFillMask,()=>{u.value===!0&&v(d.value,!0)}),ge(()=>t.unmaskedValue,()=>{u.value===!0&&v(d.value)});function f(){if(p(),u.value===!0){const O=C(E(t.modelValue));return t.fillMask!==!1?A(O):O}return t.modelValue}function m(O){if(O0;H--)P+=ft;q=q.slice(0,M)+P+q.slice(M)}return q}function p(){if(u.value=t.mask!==void 0&&t.mask.length!==0&&h(),u.value===!1){a=void 0,o="",s="";return}const O=Bu[t.mask]===void 0?t.mask:Bu[t.mask],P=typeof t.fillMask=="string"&&t.fillMask.length!==0?t.fillMask.slice(0,1):"_",q=P.replace(Nu,"\\$&"),M=[],H=[],z=[];let $=t.reverseFillMask===!0,U="",G="";O.replace(nS,(D,T,Q,ae,fe)=>{if(ae!==void 0){const B=Xs[ae];z.push(B),G=B.negate,$===!0&&(H.push("(?:"+G+"+)?("+B.pattern+"+)?(?:"+G+"+)?("+B.pattern+"+)?"),$=!1),H.push("(?:"+G+"+)?("+B.pattern+")?")}else if(Q!==void 0)U="\\"+(Q==="\\"?"":Q),z.push(Q),M.push("([^"+U+"]+)?"+U+"?");else{const B=T!==void 0?T:fe;U=B==="\\"?"\\\\\\\\":B.replace(Nu,"\\\\$&"),z.push(B),M.push("([^"+U+"]+)?"+U+"?")}});const Y=new RegExp("^"+M.join("")+"("+(U===""?".":"[^"+U+"]")+"+)?"+(U===""?"":"["+U+"]*")+"$"),te=H.length-1,de=H.map((D,T)=>T===0&&t.reverseFillMask===!0?new RegExp("^"+q+"*"+D):T===te?new RegExp("^"+D+"("+(G===""?".":G)+"+)?"+(t.reverseFillMask===!0?"$":q+"*")):new RegExp("^"+D));r=z,a=D=>{const T=Y.exec(t.reverseFillMask===!0?D:D.slice(0,z.length+1));T!==null&&(D=T.slice(1).join(""));const Q=[],ae=de.length;for(let fe=0,B=D;fetypeof D=="string"?D:ft).join(""),s=o.split(ft).join(P)}function v(O,P,q){const M=i.value,H=M.selectionEnd,z=M.value.length-H,$=E(O);P===!0&&p();const U=C($),G=t.fillMask!==!1?A(U):U,Y=d.value!==G;M.value!==G&&(M.value=G),Y===!0&&(d.value=G),document.activeElement===M&&at(()=>{if(G===s){const de=t.reverseFillMask===!0?s.length:0;M.setSelectionRange(de,de,"forward");return}if(q==="insertFromPaste"&&t.reverseFillMask!==!0){const de=M.selectionEnd;let D=H-1;for(let T=l;T<=D&&TU.length?1:0:Math.max(0,G.length-(G===s?0:Math.min(U.length,z)+1))+1:H;M.setSelectionRange(de,de,"forward");return}if(t.reverseFillMask===!0)if(Y===!0){const de=Math.max(0,G.length-(G===s?0:Math.min(U.length,z+1)));de===1&&H===1?M.setSelectionRange(de,de,"forward"):x.rightReverse(M,de)}else{const de=G.length-z;M.setSelectionRange(de,de,"backward")}else if(Y===!0){const de=Math.max(0,o.indexOf(ft),Math.min(U.length,H)-1);x.right(M,de)}else{const de=H-1;x.right(M,de)}});const te=t.unmaskedValue===!0?E(G):G;String(t.modelValue)!==te&&(t.modelValue!==null||te!=="")&&n(te,!0)}function b(O,P,q){const M=C(E(O.value));P=Math.max(0,o.indexOf(ft),Math.min(M.length,P)),l=P,O.setSelectionRange(P,q,"forward")}const x={left(O,P){const q=o.slice(P-1).indexOf(ft)===-1;let M=Math.max(0,P-1);for(;M>=0;M--)if(o[M]===ft){P=M,q===!0&&P++;break}if(M<0&&o[P]!==void 0&&o[P]!==ft)return x.right(O,0);P>=0&&O.setSelectionRange(P,P,"backward")},right(O,P){const q=O.value.length;let M=Math.min(q,P+1);for(;M<=q;M++)if(o[M]===ft){P=M;break}else o[M-1]===ft&&(P=M);if(M>q&&o[P-1]!==void 0&&o[P-1]!==ft)return x.left(O,q);O.setSelectionRange(P,P,"forward")},leftReverse(O,P){const q=m(O.value.length);let M=Math.max(0,P-1);for(;M>=0;M--)if(q[M-1]===ft){P=M;break}else if(q[M]===ft&&(P=M,M===0))break;if(M<0&&q[P]!==void 0&&q[P]!==ft)return x.rightReverse(O,0);P>=0&&O.setSelectionRange(P,P,"backward")},rightReverse(O,P){const q=O.value.length,M=m(q),H=M.slice(0,P+1).indexOf(ft)===-1;let z=Math.min(q,P+1);for(;z<=q;z++)if(M[z-1]===ft){P=z,P>0&&H===!0&&P--;break}if(z>q&&M[P-1]!==void 0&&M[P-1]!==ft)return x.leftReverse(O,q);O.setSelectionRange(P,P,"forward")}};function y(O){e("click",O),c=void 0}function _(O){if(e("keydown",O),Va(O)===!0||O.altKey===!0)return;const P=i.value,q=P.selectionStart,M=P.selectionEnd;if(O.shiftKey||(c=void 0),O.keyCode===37||O.keyCode===39){O.shiftKey&&c===void 0&&(c=P.selectionDirection==="forward"?q:M);const H=x[(O.keyCode===39?"right":"left")+(t.reverseFillMask===!0?"Reverse":"")];if(O.preventDefault(),H(P,c===q?M:q),O.shiftKey){const z=P.selectionStart;P.setSelectionRange(Math.min(c,z),Math.max(c,z),"forward")}}else O.keyCode===8&&t.reverseFillMask!==!0&&q===M?(x.left(P,q),P.setSelectionRange(P.selectionStart,M,"backward")):O.keyCode===46&&t.reverseFillMask===!0&&q===M&&(x.rightReverse(P,M),P.setSelectionRange(q,P.selectionEnd,"forward"))}function C(O){if(O==null||O==="")return"";if(t.reverseFillMask===!0)return S(O);const P=r;let q=0,M="";for(let H=0;H=0&&M!==-1;z--){const $=P[z];let U=O[M];if(typeof $=="string")H=$+H,U===$&&M--;else if(U!==void 0&&$.regex.test(U))do H=($.transform!==void 0?$.transform(U):U)+H,M--,U=O[M];while(q===z&&U!==void 0&&$.regex.test(U));else return H}return H}function E(O){return typeof O!="string"||a===void 0?typeof O=="number"?a(""+O):O:a(O)}function A(O){return s.length-O.length<=0?O:t.reverseFillMask===!0&&O.length!==0?s.slice(0,-O.length)+O:O+s.slice(O.length)}return{innerValue:d,hasMask:u,moveCursorForPaste:b,updateMaskValue:v,onMaskedKeydown:_,onMaskedClick:y}}const mr={name:String};function sS(t){return g(()=>({type:"hidden",name:t.name,value:t.modelValue}))}function Bf(t={}){return(e,n,i)=>{e[n](w("input",{class:"hidden"+(i||""),...t.value}))}}function Nf(t){return g(()=>t.name||t.for)}function rS(t,e){function n(){const i=t.modelValue;try{const o="DataTransfer"in window?new DataTransfer:"ClipboardEvent"in window?new ClipboardEvent("").clipboardData:void 0;return Object(i)===i&&("length"in i?Array.from(i):[i]).forEach(s=>{o.items.add(s)}),{files:o.files}}catch{return{files:void 0}}}return g(()=>{if(t.type==="file")return n()})}function Wf(t){return function(n){if(n.type==="compositionend"||n.type==="change"){if(n.target.qComposing!==!0)return;n.target.qComposing=!1,t(n)}else n.type==="compositionstart"&&(n.target.qComposing=!0)}}const Hf=ze({name:"QInput",inheritAttrs:!1,props:{...gr,...iS,...mr,modelValue:[String,Number,FileList],shadowText:String,type:{type:String,default:"text"},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},emits:[...hl,"paste","change","keydown","click","animationend"],setup(t,{emit:e,attrs:n}){const{proxy:i}=$e(),{$q:o}=i,s={};let r=NaN,a,l,c=null,u;const d=N(null),h=Nf(t),{innerValue:f,hasMask:m,moveCursorForPaste:p,updateMaskValue:v,onMaskedKeydown:b,onMaskedClick:x}=oS(t,e,U,d),y=rS(t),_=g(()=>Fo(f.value)),C=Wf(z),S=fl({changeEvent:!0}),E=g(()=>t.type==="textarea"||t.autogrow===!0),A=g(()=>E.value===!0||["text","search","url","tel","password"].includes(t.type)),O=g(()=>{const T={...S.splitAttrs.listeners.value,onInput:z,onPaste:H,onChange:Y,onBlur:te,onFocus:wn};return T.onCompositionstart=T.onCompositionupdate=T.onCompositionend=C,m.value===!0&&(T.onKeydown=b,T.onClick=x),t.autogrow===!0&&(T.onAnimationend=$),T}),P=g(()=>{const T={tabindex:0,"data-autofocus":t.autofocus===!0||void 0,rows:t.type==="textarea"?6:void 0,"aria-label":t.label,name:h.value,...S.splitAttrs.attributes.value,id:S.targetUid.value,maxlength:t.maxlength,disabled:t.disable===!0,readonly:t.readonly===!0};return E.value===!1&&(T.type=t.type),t.autogrow===!0&&(T.rows=1),T});ge(()=>t.type,()=>{d.value&&(d.value.value=t.modelValue)}),ge(()=>t.modelValue,T=>{if(m.value===!0){if(l===!0&&(l=!1,String(T)===r))return;v(T)}else f.value!==T&&(f.value=T,t.type==="number"&&s.hasOwnProperty("value")===!0&&(a===!0?a=!1:delete s.value));t.autogrow===!0&&at(G)}),ge(()=>t.autogrow,T=>{T===!0?at(G):d.value!==null&&n.rows>0&&(d.value.style.height="auto")}),ge(()=>t.dense,()=>{t.autogrow===!0&&at(G)});function q(){rr(()=>{const T=document.activeElement;d.value!==null&&d.value!==T&&(T===null||T.id!==S.targetUid.value)&&d.value.focus({preventScroll:!0})})}function M(){d.value!==null&&d.value.select()}function H(T){if(m.value===!0&&t.reverseFillMask!==!0){const Q=T.target;p(Q,Q.selectionStart,Q.selectionEnd)}e("paste",T)}function z(T){if(!T||!T.target)return;if(t.type==="file"){e("update:modelValue",T.target.files);return}const Q=T.target.value;if(T.target.qComposing===!0){s.value=Q;return}if(m.value===!0)v(Q,!1,T.inputType);else if(U(Q),A.value===!0&&T.target===document.activeElement){const{selectionStart:ae,selectionEnd:fe}=T.target;ae!==void 0&&fe!==void 0&&at(()=>{T.target===document.activeElement&&Q.indexOf(T.target.value)===0&&T.target.setSelectionRange(ae,fe)})}t.autogrow===!0&&G()}function $(T){e("animationend",T),G()}function U(T,Q){u=()=>{c=null,t.type!=="number"&&s.hasOwnProperty("value")===!0&&delete s.value,t.modelValue!==T&&r!==T&&(r=T,Q===!0&&(l=!0),e("update:modelValue",T),at(()=>{r===T&&(r=NaN)})),u=void 0},t.type==="number"&&(a=!0,s.value=T),t.debounce!==void 0?(c!==null&&clearTimeout(c),s.value=T,c=setTimeout(u,t.debounce)):u()}function G(){requestAnimationFrame(()=>{const T=d.value;if(T!==null){const Q=T.parentNode.style,{scrollTop:ae}=T,{overflowY:fe,maxHeight:B}=o.platform.is.firefox===!0?{}:window.getComputedStyle(T),J=fe!==void 0&&fe!=="scroll";J===!0&&(T.style.overflowY="hidden"),Q.marginBottom=T.scrollHeight-1+"px",T.style.height="1px",T.style.height=T.scrollHeight+"px",J===!0&&(T.style.overflowY=parseInt(B,10){d.value!==null&&(d.value.value=f.value!==void 0?f.value:"")})}function de(){return s.hasOwnProperty("value")===!0?s.value:f.value!==void 0?f.value:""}Lt(()=>{te()}),cn(()=>{t.autogrow===!0&&G()}),Object.assign(S,{innerValue:f,fieldClass:g(()=>`q-${E.value===!0?"textarea":"input"}`+(t.autogrow===!0?" q-textarea--autogrow":"")),hasShadow:g(()=>t.type!=="file"&&typeof t.shadowText=="string"&&t.shadowText.length!==0),inputRef:d,emitValue:U,hasValue:_,floatingLabel:g(()=>_.value===!0&&(t.type!=="number"||isNaN(f.value)===!1)||Fo(t.displayValue)),getControl:()=>w(E.value===!0?"textarea":"input",{ref:d,class:["q-field__native q-placeholder",t.inputClass],style:t.inputStyle,...P.value,...O.value,...t.type!=="file"?{value:de()}:y.value}),getShadowControl:()=>w("div",{class:"q-field__native q-field__shadow absolute-bottom no-pointer-events"+(E.value===!0?"":" text-no-wrap")},[w("span",{class:"invisible"},de()),w("span",t.shadowText)])});const D=gl(S);return Object.assign(i,{focus:q,select:M,getNativeElement:()=>d.value}),ei(i,"nativeEl",()=>d.value),D}}),wa=ze({name:"QTh",props:{props:Object,autoWidth:Boolean},emits:["click"],setup(t,{slots:e,emit:n}){const i=$e(),{proxy:{$q:o}}=i,s=r=>{n("click",r)};return()=>{if(t.props===void 0)return w("th",{class:t.autoWidth===!0?"q-table--col-auto-width":"",onClick:s},Ge(e.default));let r,a;const l=i.vnode.key;if(l){if(r=t.props.colsMap[l],r===void 0)return}else r=t.props.col;if(r.sortable===!0){const u=r.align==="right"?"unshift":"push";a=nm(e.default,[]),a[u](w(_e,{class:r.__iconClass,name:o.iconSet.table.arrowUp}))}else a=Ge(e.default);const c={class:r.__thClass+(t.autoWidth===!0?" q-table--col-auto-width":""),style:r.headerStyle,onClick:u=>{r.sortable===!0&&t.props.sort(r),s(u)}};return w("th",c,a)}}}),ea=ze({name:"QTr",props:{props:Object,noHover:Boolean},setup(t,{slots:e}){const n=g(()=>"q-tr"+(t.props===void 0||t.props.header===!0?"":" "+t.props.__trClass)+(t.noHover===!0?" q-tr--no-hover":""));return()=>w("tr",{class:n.value},Ge(e.default))}}),aS=["horizontal","vertical","cell","none"],lS=ze({name:"QMarkupTable",props:{...un,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,wrapCells:Boolean,separator:{type:String,default:"horizontal",validator:t=>aS.includes(t)}},setup(t,{slots:e}){const n=$e(),i=dn(t,n.proxy.$q),o=g(()=>`q-markup-table q-table__container q-table__card q-table--${t.separator}-separator`+(i.value===!0?" q-table--dark q-table__card--dark q-dark":"")+(t.dense===!0?" q-table--dense":"")+(t.flat===!0?" q-table--flat":"")+(t.bordered===!0?" q-table--bordered":"")+(t.square===!0?" q-table--square":"")+(t.wrapCells===!1?" q-table--no-wrap":""));return()=>w("div",{class:o.value},[w("table",{class:"q-table"},Ge(e.default))])}});function jf(t,e){return w("div",t,[w("table",{class:"q-table"},e)])}const nn=1e3,cS=["start","center","end","start-force","center-force","end-force"],$f=Array.prototype.filter,uS=window.getComputedStyle(document.body).overflowAnchor===void 0?pd:function(t,e){t!==null&&(t._qOverflowAnimationFrame!==void 0&&cancelAnimationFrame(t._qOverflowAnimationFrame),t._qOverflowAnimationFrame=requestAnimationFrame(()=>{if(t===null)return;t._qOverflowAnimationFrame=void 0;const n=t.children||[];$f.call(n,o=>o.dataset&&o.dataset.qVsAnchor!==void 0).forEach(o=>{delete o.dataset.qVsAnchor});const i=n[e];i&&i.dataset&&(i.dataset.qVsAnchor="")}))};function Ri(t,e){return t+e}function ta(t,e,n,i,o,s,r,a){const l=t===window?document.scrollingElement||document.documentElement:t,c=o===!0?"offsetWidth":"offsetHeight",u={scrollStart:0,scrollViewSize:-r-a,scrollMaxSize:0,offsetStart:-r,offsetEnd:-a};if(o===!0?(t===window?(u.scrollStart=window.pageXOffset||window.scrollX||document.body.scrollLeft||0,u.scrollViewSize+=document.documentElement.clientWidth):(u.scrollStart=l.scrollLeft,u.scrollViewSize+=l.clientWidth),u.scrollMaxSize=l.scrollWidth,s===!0&&(u.scrollStart=(Oo===!0?u.scrollMaxSize-u.scrollViewSize:0)-u.scrollStart)):(t===window?(u.scrollStart=window.pageYOffset||window.scrollY||document.body.scrollTop||0,u.scrollViewSize+=document.documentElement.clientHeight):(u.scrollStart=l.scrollTop,u.scrollViewSize+=l.clientHeight),u.scrollMaxSize=l.scrollHeight),n!==null)for(let d=n.previousElementSibling;d!==null;d=d.previousElementSibling)d.classList.contains("q-virtual-scroll--skip")===!1&&(u.offsetStart+=d[c]);if(i!==null)for(let d=i.nextElementSibling;d!==null;d=d.nextElementSibling)d.classList.contains("q-virtual-scroll--skip")===!1&&(u.offsetEnd+=d[c]);if(e!==t){const d=l.getBoundingClientRect(),h=e.getBoundingClientRect();o===!0?(u.offsetStart+=h.left-d.left,u.offsetEnd-=h.width):(u.offsetStart+=h.top-d.top,u.offsetEnd-=h.height),t!==window&&(u.offsetStart+=u.scrollStart),u.offsetEnd+=u.scrollMaxSize-u.offsetStart}return u}function Wu(t,e,n,i){e==="end"&&(e=(t===window?document.body:t)[n===!0?"scrollWidth":"scrollHeight"]),t===window?n===!0?(i===!0&&(e=(Oo===!0?document.body.scrollWidth-document.documentElement.clientWidth:0)-e),window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)):window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e):n===!0?(i===!0&&(e=(Oo===!0?t.scrollWidth-t.offsetWidth:0)-e),t.scrollLeft=e):t.scrollTop=e}function lo(t,e,n,i){if(n>=i)return 0;const o=e.length,s=Math.floor(n/nn),r=Math.floor((i-1)/nn)+1;let a=t.slice(s,r).reduce(Ri,0);return n%nn!==0&&(a-=e.slice(s*nn,n).reduce(Ri,0)),i%nn!==0&&i!==o&&(a-=e.slice(i,r*nn).reduce(Ri,0)),a}const Uf={virtualScrollSliceSize:{type:[Number,String],default:10},virtualScrollSliceRatioBefore:{type:[Number,String],default:1},virtualScrollSliceRatioAfter:{type:[Number,String],default:1},virtualScrollItemSize:{type:[Number,String],default:24},virtualScrollStickySizeStart:{type:[Number,String],default:0},virtualScrollStickySizeEnd:{type:[Number,String],default:0},tableColspan:[Number,String]},Yf=Object.keys(Uf),ka={virtualScrollHorizontal:Boolean,onVirtualScroll:Function,...Uf};function Zf({virtualScrollLength:t,getVirtualScrollTarget:e,getVirtualScrollEl:n,virtualScrollItemSizeComputed:i}){const o=$e(),{props:s,emit:r,proxy:a}=o,{$q:l}=a;let c,u,d,h=[],f;const m=N(0),p=N(0),v=N({}),b=N(null),x=N(null),y=N(null),_=N({from:0,to:0}),C=g(()=>s.tableColspan!==void 0?s.tableColspan:100);i===void 0&&(i=g(()=>s.virtualScrollItemSize));const S=g(()=>i.value+";"+s.virtualScrollHorizontal),E=g(()=>S.value+";"+s.virtualScrollSliceRatioBefore+";"+s.virtualScrollSliceRatioAfter);ge(E,()=>{U()}),ge(S,A);function A(){$(u,!0)}function O(D){$(D===void 0?u:D)}function P(D,T){const Q=e();if(Q==null||Q.nodeType===8)return;const ae=ta(Q,n(),b.value,x.value,s.virtualScrollHorizontal,l.lang.rtl,s.virtualScrollStickySizeStart,s.virtualScrollStickySizeEnd);d!==ae.scrollViewSize&&U(ae.scrollViewSize),M(Q,ae,Math.min(t.value-1,Math.max(0,parseInt(D,10)||0)),0,cS.indexOf(T)!==-1?T:u!==-1&&D>u?"end":"start")}function q(){const D=e();if(D==null||D.nodeType===8)return;const T=ta(D,n(),b.value,x.value,s.virtualScrollHorizontal,l.lang.rtl,s.virtualScrollStickySizeStart,s.virtualScrollStickySizeEnd),Q=t.value-1,ae=T.scrollMaxSize-T.offsetStart-T.offsetEnd-p.value;if(c===T.scrollStart)return;if(T.scrollMaxSize<=0){M(D,T,0,0);return}d!==T.scrollViewSize&&U(T.scrollViewSize),H(_.value.from);const fe=Math.floor(T.scrollMaxSize-Math.max(T.scrollViewSize,T.offsetEnd)-Math.min(f[Q],T.scrollViewSize/2));if(fe>0&&Math.ceil(T.scrollStart)>=fe){M(D,T,Q,T.scrollMaxSize-T.offsetEnd-h.reduce(Ri,0));return}let B=0,J=T.scrollStart-T.offsetStart,we=J;if(J<=ae&&J+T.scrollViewSize>=m.value)J-=m.value,B=_.value.from,we=J;else for(let Z=0;J>=h[Z]&&B0&&B-T.scrollViewSize?(B++,we=J):we=f[B]+J;M(D,T,B,we)}function M(D,T,Q,ae,fe){const B=typeof fe=="string"&&fe.indexOf("-force")!==-1,J=B===!0?fe.replace("-force",""):fe,we=J!==void 0?J:"start";let Z=Math.max(0,Q-v.value[we]),Ee=Z+v.value.total;Ee>t.value&&(Ee=t.value,Z=Math.max(0,Ee-v.value.total)),c=T.scrollStart;const Xe=Z!==_.value.from||Ee!==_.value.to;if(Xe===!1&&J===void 0){Y(Q);return}const{activeElement:_t}=document,et=y.value;Xe===!0&&et!==null&&et!==_t&&et.contains(_t)===!0&&(et.addEventListener("focusout",z),setTimeout(()=>{et!==null&&et.removeEventListener("focusout",z)})),uS(et,Q-Z);const dt=J!==void 0?f.slice(Z,Q).reduce(Ri,0):0;if(Xe===!0){const mt=Ee>=_.value.from&&Z<=_.value.to?_.value.to:Ee;_.value={from:Z,to:mt},m.value=lo(h,f,0,Z),p.value=lo(h,f,Ee,t.value),requestAnimationFrame(()=>{_.value.to!==Ee&&c===T.scrollStart&&(_.value={from:_.value.from,to:Ee},p.value=lo(h,f,Ee,t.value))})}requestAnimationFrame(()=>{if(c!==T.scrollStart)return;Xe===!0&&H(Z);const mt=f.slice(Z,Q).reduce(Ri,0),ht=mt+T.offsetStart+m.value,It=ht+f[Q];let Dt=ht+ae;if(J!==void 0){const $t=mt-dt,Ot=T.scrollStart+$t;Dt=B!==!0&&OtZ.classList&&Z.classList.contains("q-virtual-scroll--skip")===!1),ae=Q.length,fe=s.virtualScrollHorizontal===!0?Z=>Z.getBoundingClientRect().width:Z=>Z.offsetHeight;let B=D,J,we;for(let Z=0;Z=ae;B--)f[B]=Q;const fe=Math.floor((t.value-1)/nn);h=[];for(let B=0;B<=fe;B++){let J=0;const we=Math.min((B+1)*nn,t.value);for(let Z=B*nn;Z=0?(H(_.value.from),at(()=>{P(D)})):te()}function U(D){if(D===void 0&&typeof window<"u"){const J=e();J!=null&&J.nodeType!==8&&(D=ta(J,n(),b.value,x.value,s.virtualScrollHorizontal,l.lang.rtl,s.virtualScrollStickySizeStart,s.virtualScrollStickySizeEnd).scrollViewSize)}d=D;const T=parseFloat(s.virtualScrollSliceRatioBefore)||0,Q=parseFloat(s.virtualScrollSliceRatioAfter)||0,ae=1+T+Q,fe=D===void 0||D<=0?1:Math.ceil(D/i.value),B=Math.max(1,fe,Math.ceil((s.virtualScrollSliceSize>0?s.virtualScrollSliceSize:10)/ae));v.value={total:Math.ceil(B*ae),start:Math.ceil(B*T),center:Math.ceil(B*(.5+T)),end:Math.ceil(B*(1+T)),view:fe}}function G(D,T){const Q=s.virtualScrollHorizontal===!0?"width":"height",ae={["--q-virtual-scroll-item-"+Q]:i.value+"px"};return[D==="tbody"?w(D,{class:"q-virtual-scroll__padding",key:"before",ref:b},[w("tr",[w("td",{style:{[Q]:`${m.value}px`,...ae},colspan:C.value})])]):w(D,{class:"q-virtual-scroll__padding",key:"before",ref:b,style:{[Q]:`${m.value}px`,...ae}}),w(D,{class:"q-virtual-scroll__content",key:"content",ref:y,tabindex:-1},T.flat()),D==="tbody"?w(D,{class:"q-virtual-scroll__padding",key:"after",ref:x},[w("tr",[w("td",{style:{[Q]:`${p.value}px`,...ae},colspan:C.value})])]):w(D,{class:"q-virtual-scroll__padding",key:"after",ref:x,style:{[Q]:`${p.value}px`,...ae}})]}function Y(D){u!==D&&(s.onVirtualScroll!==void 0&&r("virtualScroll",{index:D,from:_.value.from,to:_.value.to-1,direction:D{U()});let de=!1;return er(()=>{de=!0}),tr(()=>{if(de!==!0)return;const D=e();c!==void 0&&D!==void 0&&D!==null&&D.nodeType!==8?Wu(D,c,s.virtualScrollHorizontal,l.lang.rtl):P(u)}),Lt(()=>{te.cancel()}),Object.assign(a,{scrollTo:P,reset:A,refresh:O}),{virtualScrollSliceRange:_,virtualScrollSliceSizeComputed:v,setVirtualScrollSize:U,onVirtualScrollEvt:te,localResetVirtualScroll:$,padVirtualScroll:G,scrollTo:P,reset:A,refresh:O}}const dS={list:ir,table:lS},hS=["list","table","__qtable"],fS=ze({name:"QVirtualScroll",props:{...ka,type:{type:String,default:"list",validator:t=>hS.includes(t)},items:{type:Array,default:()=>[]},itemsFn:Function,itemsSize:Number,scrollTarget:Id},setup(t,{slots:e,attrs:n}){let i;const o=N(null),s=g(()=>t.itemsSize>=0&&t.itemsFn!==void 0?parseInt(t.itemsSize,10):Array.isArray(t.items)?t.items.length:0),{virtualScrollSliceRange:r,localResetVirtualScroll:a,padVirtualScroll:l,onVirtualScrollEvt:c}=Zf({virtualScrollLength:s,getVirtualScrollTarget:m,getVirtualScrollEl:f}),u=g(()=>{if(s.value===0)return[];const x=(y,_)=>({index:r.value.from+_,item:y});return t.itemsFn===void 0?t.items.slice(r.value.from,r.value.to).map(x):t.itemsFn(r.value.from,r.value.to-r.value.from).map(x)}),d=g(()=>"q-virtual-scroll q-virtual-scroll"+(t.virtualScrollHorizontal===!0?"--horizontal":"--vertical")+(t.scrollTarget!==void 0?"":" scroll")),h=g(()=>t.scrollTarget!==void 0?{}:{tabindex:0});ge(s,()=>{a()}),ge(()=>t.scrollTarget,()=>{v(),p()});function f(){return o.value.$el||o.value}function m(){return i}function p(){i=Dd(f(),t.scrollTarget),i.addEventListener("scroll",c,Vl.passive)}function v(){i!==void 0&&(i.removeEventListener("scroll",c,Vl.passive),i=void 0)}function b(){let x=l(t.type==="list"?"div":"tbody",u.value.map(e.default));return e.before!==void 0&&(x=e.before().concat(x)),di(e.after,x)}return Ea(()=>{a()}),cn(()=>{p()}),tr(()=>{p()}),er(()=>{v()}),Lt(()=>{v()}),()=>{if(e.default===void 0){console.error("QVirtualScroll: default scoped slot is required for rendering");return}return t.type==="__qtable"?jf({ref:o,class:"q-table__middle "+d.value},b()):w(dS[t.type],{...n,ref:o,class:[n.class,d.value],...h.value},b)}}}),Xf=ze({name:"QField",inheritAttrs:!1,props:{...gr,tag:{type:String,default:"label"}},emits:hl,setup(){return gl(fl({tagProp:!0}))}}),gS={xs:8,sm:10,md:14,lg:20,xl:24},Ks=ze({name:"QChip",props:{...un,...qa,dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,modelValue:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean,ripple:{type:[Boolean,Object],default:!0}},emits:["update:modelValue","update:selected","remove","click"],setup(t,{slots:e,emit:n}){const{proxy:{$q:i}}=$e(),o=dn(t,i),s=Ra(t,gS),r=g(()=>t.selected===!0||t.icon!==void 0),a=g(()=>t.selected===!0?t.iconSelected||i.iconSet.chip.selected:t.icon),l=g(()=>t.iconRemove||i.iconSet.chip.remove),c=g(()=>t.disable===!1&&(t.clickable===!0||t.selected!==null)),u=g(()=>{const v=t.outline===!0&&t.color||t.textColor;return"q-chip row inline no-wrap items-center"+(t.outline===!1&&t.color!==void 0?` bg-${t.color}`:"")+(v?` text-${v} q-chip--colored`:"")+(t.disable===!0?" disabled":"")+(t.dense===!0?" q-chip--dense":"")+(t.outline===!0?" q-chip--outline":"")+(t.selected===!0?" q-chip--selected":"")+(c.value===!0?" q-chip--clickable cursor-pointer non-selectable q-hoverable":"")+(t.square===!0?" q-chip--square":"")+(o.value===!0?" q-chip--dark q-dark":"")}),d=g(()=>{const v=t.disable===!0?{tabindex:-1,"aria-disabled":"true"}:{tabindex:t.tabindex||0},b={...v,role:"button","aria-hidden":"false","aria-label":t.removeAriaLabel||i.lang.label.remove};return{chip:v,remove:b}});function h(v){v.keyCode===13&&f(v)}function f(v){t.disable||(n("update:selected",!t.selected),n("click",v))}function m(v){(v.keyCode===void 0||v.keyCode===13)&&(Pt(v),t.disable===!1&&(n("update:modelValue",!1),n("remove")))}function p(){const v=[];c.value===!0&&v.push(w("div",{class:"q-focus-helper"})),r.value===!0&&v.push(w(_e,{class:"q-chip__icon q-chip__icon--left",name:a.value}));const b=t.label!==void 0?[w("div",{class:"ellipsis"},[t.label])]:void 0;return v.push(w("div",{class:"q-chip__content col row no-wrap items-center q-anchor--skip"},im(e.default,b))),t.iconRight&&v.push(w(_e,{class:"q-chip__icon q-chip__icon--right",name:t.iconRight})),t.removable===!0&&v.push(w(_e,{class:"q-chip__icon q-chip__icon--remove cursor-pointer",name:l.value,...d.value.remove,onClick:m,onKeyup:m})),v}return()=>{if(t.modelValue===!1)return;const v={class:u.value,style:s.value};return c.value===!0&&Object.assign(v,d.value.chip,{onClick:f,onKeyup:h}),nr("div",v,p(),"ripple",t.ripple!==!1&&t.disable!==!0,()=>[[md,t.ripple]])}}}),Kf=ze({name:"QMenu",inheritAttrs:!1,props:{...Sm,...kd,...un,...Fa,persistent:Boolean,autoClose:Boolean,separateClosePopup:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,fit:Boolean,cover:Boolean,square:Boolean,anchor:{type:String,validator:Fl},self:{type:String,validator:Fl},offset:{type:Array,validator:wm},scrollTarget:Id,touchPosition:Boolean,maxHeight:{type:String,default:null},maxWidth:{type:String,default:null}},emits:[...Cd,"click","escapeKey"],setup(t,{slots:e,emit:n,attrs:i}){let o=null,s,r,a;const l=$e(),{proxy:c}=l,{$q:u}=c,d=N(null),h=N(!1),f=g(()=>t.persistent!==!0&&t.noRouteDismiss!==!0),m=dn(t,u),{registerTick:p,removeTick:v}=yo(),{registerTimeout:b}=Io(),{transitionProps:x,transitionStyle:y}=Md(t),{localScrollTarget:_,changeScrollEvent:C,unconfigureScrollTarget:S}=km(t,Q),{anchorEl:E,canShow:A}=Cm({showing:h}),{hide:O}=Td({showing:h,canShow:A,handleShow:de,handleHide:D,hideOnRouteChange:f,processOnMount:!0}),{showPortal:P,hidePortal:q,renderPortal:M}=Pd(l,d,we,"menu"),H={anchorEl:E,innerRef:d,onClickOutside(Z){if(t.persistent!==!0&&h.value===!0)return O(Z),(Z.type==="touchstart"||Z.target.classList.contains("q-dialog__backdrop"))&&Pt(Z),!0}},z=g(()=>Bl(t.anchor||(t.cover===!0?"center middle":"bottom start"),u.lang.rtl)),$=g(()=>t.cover===!0?z.value:Bl(t.self||"top start",u.lang.rtl)),U=g(()=>(t.square===!0?" q-menu--square":"")+(m.value===!0?" q-menu--dark q-dark":"")),G=g(()=>t.autoClose===!0?{onClick:ae}:{}),Y=g(()=>h.value===!0&&t.persistent!==!0);ge(Y,Z=>{Z===!0?(qf(B),Tm(H)):(Zs(B),zl(H))});function te(){rr(()=>{let Z=d.value;Z&&Z.contains(document.activeElement)!==!0&&(Z=Z.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||Z.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||Z.querySelector("[autofocus], [data-autofocus]")||Z,Z.focus({preventScroll:!0}))})}function de(Z){if(o=t.noRefocus===!1?document.activeElement:null,Lf(fe),P(),Q(),s=void 0,Z!==void 0&&(t.touchPosition||t.contextMenu)){const Ee=Es(Z);if(Ee.left!==void 0){const{top:Xe,left:_t}=E.value.getBoundingClientRect();s={left:Ee.left-_t,top:Ee.top-Xe}}}r===void 0&&(r=ge(()=>u.screen.width+"|"+u.screen.height+"|"+t.self+"|"+t.anchor+"|"+u.lang.rtl,J)),t.noFocus!==!0&&document.activeElement.blur(),p(()=>{J(),t.noFocus!==!0&&te()}),b(()=>{u.platform.is.ios===!0&&(a=t.autoClose,d.value.click()),J(),P(!0),n("show",Z)},t.transitionDuration)}function D(Z){v(),q(),T(!0),o!==null&&(Z===void 0||Z.qClickOutside!==!0)&&(((Z&&Z.type.indexOf("key")===0?o.closest('[tabindex]:not([tabindex^="-"])'):void 0)||o).focus(),o=null),b(()=>{q(!0),n("hide",Z)},t.transitionDuration)}function T(Z){s=void 0,r!==void 0&&(r(),r=void 0),(Z===!0||h.value===!0)&&(Sa(fe),S(),zl(H),Zs(B)),Z!==!0&&(o=null)}function Q(){(E.value!==null||t.scrollTarget!==void 0)&&(_.value=Dd(E.value,t.scrollTarget),C(_.value,J))}function ae(Z){a!==!0?(Pm(c,Z),n("click",Z)):a=!1}function fe(Z){Y.value===!0&&t.noFocus!==!0&&_d(d.value,Z.target)!==!0&&te()}function B(Z){n("escapeKey"),O(Z)}function J(){Mm({targetEl:d.value,offset:t.offset,anchorEl:E.value,anchorOrigin:z.value,selfOrigin:$.value,absoluteOffset:s,fit:t.fit,cover:t.cover,maxHeight:t.maxHeight,maxWidth:t.maxWidth})}function we(){return w(Po,x.value,()=>h.value===!0?w("div",{role:"menu",...i,ref:d,tabindex:-1,class:["q-menu q-position-engine scroll"+U.value,i.class],style:[i.style,y.value],...G.value},Ge(e.default)):null)}return Lt(T),Object.assign(c,{focus:te,updatePosition:J}),M}}),Hu=t=>["add","add-unique","toggle"].includes(t),mS=".*+?^${}()|[]\\",vS=Object.keys(gr);function na(t,e){if(typeof t=="function")return t;const n=t!==void 0?t:e;return i=>i!==null&&typeof i=="object"&&n in i?i[n]:i}const pS=ze({name:"QSelect",inheritAttrs:!1,props:{...ka,...mr,...gr,modelValue:{required:!0},multiple:Boolean,displayValue:[String,Number],displayValueHtml:Boolean,dropdownIcon:String,options:{type:Array,default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],hideSelected:Boolean,hideDropdownIcon:Boolean,fillInput:Boolean,maxValues:[Number,String],optionsDense:Boolean,optionsDark:{type:Boolean,default:null},optionsSelectedClass:String,optionsHtml:Boolean,optionsCover:Boolean,menuShrink:Boolean,menuAnchor:String,menuSelf:String,menuOffset:Array,popupContentClass:String,popupContentStyle:[String,Array,Object],popupNoRouteDismiss:Boolean,useInput:Boolean,useChips:Boolean,newValueMode:{type:String,validator:Hu},mapOptions:Boolean,emitValue:Boolean,disableTabSelection:Boolean,inputDebounce:{type:[Number,String],default:500},inputClass:[Array,String,Object],inputStyle:[Array,String,Object],tabindex:{type:[String,Number],default:0},autocomplete:String,transitionShow:{},transitionHide:{},transitionDuration:{},behavior:{type:String,validator:t=>["default","menu","dialog"].includes(t),default:"default"},virtualScrollItemSize:ka.virtualScrollItemSize.type,onNewValue:Function,onFilter:Function},emits:[...hl,"add","remove","inputValue","keyup","keypress","keydown","popupShow","popupHide","filterAbort"],setup(t,{slots:e,emit:n}){const{proxy:i}=$e(),{$q:o}=i,s=N(!1),r=N(!1),a=N(-1),l=N(""),c=N(!1),u=N(!1);let d=null,h=null,f,m,p,v=null,b,x,y,_;const C=N(null),S=N(null),E=N(null),A=N(null),O=N(null),P=Nf(t),q=Wf(F),M=g(()=>t.options.length),H=g(()=>t.virtualScrollItemSize===void 0?t.optionsDense===!0?24:48:t.virtualScrollItemSize),{virtualScrollSliceRange:z,virtualScrollSliceSizeComputed:$,localResetVirtualScroll:U,padVirtualScroll:G,onVirtualScrollEvt:Y,scrollTo:te,setVirtualScrollSize:de}=Zf({virtualScrollLength:M,getVirtualScrollTarget:kr,getVirtualScrollEl:Dn,virtualScrollItemSizeComputed:H}),D=fl(),T=g(()=>{const k=t.mapOptions===!0&&t.multiple!==!0,oe=t.modelValue!==void 0&&(t.modelValue!==null||k===!0)?t.multiple===!0&&Array.isArray(t.modelValue)?t.modelValue:[t.modelValue]:[];if(t.mapOptions===!0){const se=t.mapOptions===!0&&f!==void 0?f:[],Ie=oe.map(Ye=>W(Ye,se));return t.modelValue===null&&k===!0?Ie.filter(Ye=>Ye!==null):Ie}return oe}),Q=g(()=>{const k={};return vS.forEach(oe=>{const se=t[oe];se!==void 0&&(k[oe]=se)}),k}),ae=g(()=>t.optionsDark===null?D.isDark.value:t.optionsDark),fe=g(()=>Fo(T.value)),B=g(()=>{let k="q-field__input q-placeholder col";return t.hideSelected===!0||T.value.length===0?[k,t.inputClass]:(k+=" q-field__input--padding",t.inputClass===void 0?k:[k,t.inputClass])}),J=g(()=>(t.virtualScrollHorizontal===!0?"q-virtual-scroll--horizontal":"")+(t.popupContentClass?" "+t.popupContentClass:"")),we=g(()=>M.value===0),Z=g(()=>T.value.map(k=>j.value(k)).join(", ")),Ee=g(()=>t.displayValue!==void 0?t.displayValue:Z.value),Xe=g(()=>t.optionsHtml===!0?()=>!0:k=>k!=null&&k.html===!0),_t=g(()=>t.displayValueHtml===!0||t.displayValue===void 0&&(t.optionsHtml===!0||T.value.some(Xe.value))),et=g(()=>D.focused.value===!0?t.tabindex:-1),dt=g(()=>{const k={tabindex:t.tabindex,role:"combobox","aria-label":t.label,"aria-readonly":t.readonly===!0?"true":"false","aria-autocomplete":t.useInput===!0?"list":"none","aria-expanded":s.value===!0?"true":"false","aria-controls":`${D.targetUid.value}_lb`};return a.value>=0&&(k["aria-activedescendant"]=`${D.targetUid.value}_${a.value}`),k}),mt=g(()=>({id:`${D.targetUid.value}_lb`,role:"listbox","aria-multiselectable":t.multiple===!0?"true":"false"})),ht=g(()=>T.value.map((k,oe)=>({index:oe,opt:k,html:Xe.value(k),selected:!0,removeAtIndex:Pe,toggleOption:tt,tabindex:et.value}))),It=g(()=>{if(M.value===0)return[];const{from:k,to:oe}=z.value;return t.options.slice(k,oe).map((se,Ie)=>{const Ye=re.value(se)===!0,Ue=me(se)===!0,xt=k+Ie,ut={clickable:!0,active:Ue,activeClass:Ot.value,manualFocus:!0,focused:!1,disable:Ye,tabindex:-1,dense:t.optionsDense,dark:ae.value,role:"option","aria-selected":Ue===!0?"true":"false",id:`${D.targetUid.value}_${xt}`,onClick:()=>{tt(se)}};return Ye!==!0&&(a.value===xt&&(ut.focused=!0),o.platform.is.desktop===!0&&(ut.onMousemove=()=>{s.value===!0&&vt(xt)})),{index:xt,opt:se,html:Xe.value(se),label:j.value(se),selected:ut.active,focused:ut.focused,toggleOption:tt,setOptionIndex:vt,itemProps:ut}})}),Dt=g(()=>t.dropdownIcon!==void 0?t.dropdownIcon:o.iconSet.arrow.dropdown),$t=g(()=>t.optionsCover===!1&&t.outlined!==!0&&t.standout!==!0&&t.borderless!==!0&&t.rounded!==!0),Ot=g(()=>t.optionsSelectedClass!==void 0?t.optionsSelectedClass:t.color!==void 0?`text-${t.color}`:""),ct=g(()=>na(t.optionValue,"value")),j=g(()=>na(t.optionLabel,"label")),re=g(()=>na(t.optionDisable,"disable")),X=g(()=>T.value.map(ct.value)),ce=g(()=>{const k={onInput:F,onChange:q,onKeydown:Qt,onKeyup:nt,onKeypress:Ft,onFocus:ke,onClick(oe){m===!0&&wn(oe)}};return k.onCompositionstart=k.onCompositionupdate=k.onCompositionend=q,k});ge(T,k=>{f=k,t.useInput===!0&&t.fillInput===!0&&t.multiple!==!0&&D.innerLoading.value!==!0&&(r.value!==!0&&s.value!==!0||fe.value!==!0)&&(p!==!0&&_i(),(r.value===!0||s.value===!0)&&pe(""))},{immediate:!0}),ge(()=>t.fillInput,_i),ge(s,Tr),ge(M,Fg);function Oe(k){return t.emitValue===!0?ct.value(k):k}function ye(k){if(k!==-1&&k=t.maxValues)return;const Ie=t.modelValue.slice();n("add",{index:Ie.length,value:se}),Ie.push(se),n("update:modelValue",Ie)}function tt(k,oe){if(D.editable.value!==!0||k===void 0||re.value(k)===!0)return;const se=ct.value(k);if(t.multiple!==!0){oe!==!0&&(ve(t.fillInput===!0?j.value(k):"",!0,!0),Un()),S.value!==null&&S.value.focus(),(T.value.length===0||eo(ct.value(T.value[0]),se)!==!0)&&n("update:modelValue",t.emitValue===!0?se:k);return}if((m!==!0||c.value===!0)&&D.focus(),ke(),T.value.length===0){const Ue=t.emitValue===!0?se:k;n("add",{index:0,value:Ue}),n("update:modelValue",t.multiple===!0?[Ue]:Ue);return}const Ie=t.modelValue.slice(),Ye=X.value.findIndex(Ue=>eo(Ue,se));if(Ye!==-1)n("remove",{index:Ye,value:Ie.splice(Ye,1)[0]});else{if(t.maxValues!==void 0&&Ie.length>=t.maxValues)return;const Ue=t.emitValue===!0?se:k;n("add",{index:Ie.length,value:Ue}),Ie.push(Ue)}n("update:modelValue",Ie)}function vt(k){if(o.platform.is.desktop!==!0)return;const oe=k!==-1&&k=0?j.value(t.options[se]):b,!0))}}function W(k,oe){const se=Ie=>eo(ct.value(Ie),k);return t.options.find(se)||oe.find(se)||k}function me(k){const oe=ct.value(k);return X.value.find(se=>eo(se,oe))!==void 0}function ke(k){t.useInput===!0&&S.value!==null&&(k===void 0||S.value===k.target&&k.target.value===Z.value)&&S.value.select()}function He(k){Js(k,27)===!0&&s.value===!0&&(wn(k),Un(),_i()),n("keyup",k)}function nt(k){const{value:oe}=k.target;if(k.keyCode!==void 0){He(k);return}if(k.target.value="",d!==null&&(clearTimeout(d),d=null),h!==null&&(clearTimeout(h),h=null),_i(),typeof oe=="string"&&oe.length!==0){const se=oe.toLocaleLowerCase(),Ie=Ue=>{const xt=t.options.find(ut=>Ue.value(ut).toLocaleLowerCase()===se);return xt===void 0?!1:(T.value.indexOf(xt)===-1?tt(xt):Un(),!0)},Ye=Ue=>{Ie(ct)!==!0&&(Ie(j)===!0||Ue===!0||pe(oe,!0,()=>Ye(!0)))};Ye()}else D.clearValue(k)}function Ft(k){n("keypress",k)}function Qt(k){if(n("keydown",k),Va(k)===!0)return;const oe=l.value.length!==0&&(t.newValueMode!==void 0||t.onNewValue!==void 0),se=k.shiftKey!==!0&&t.disableTabSelection!==!0&&t.multiple!==!0&&(a.value!==-1||oe===!0);if(k.keyCode===27){Rn(k);return}if(k.keyCode===9&&se===!1){bi();return}if(k.target===void 0||k.target.id!==D.targetUid.value||D.editable.value!==!0)return;if(k.keyCode===40&&D.innerLoading.value!==!0&&s.value===!1){Pt(k),yi();return}if(k.keyCode===8&&(t.useChips===!0||t.clearable===!0)&&t.hideSelected!==!0&&l.value.length===0){t.multiple===!0&&Array.isArray(t.modelValue)===!0?ye(t.modelValue.length-1):t.multiple!==!0&&t.modelValue!==null&&n("update:modelValue",null);return}(k.keyCode===35||k.keyCode===36)&&(typeof l.value!="string"||l.value.length===0)&&(Pt(k),a.value=-1,Vt(k.keyCode===36?1:-1,t.multiple)),(k.keyCode===33||k.keyCode===34)&&$.value!==void 0&&(Pt(k),a.value=Math.max(-1,Math.min(M.value,a.value+(k.keyCode===33?-1:1)*$.value.view)),Vt(k.keyCode===33?1:-1,t.multiple)),(k.keyCode===38||k.keyCode===40)&&(Pt(k),Vt(k.keyCode===38?-1:1,t.multiple));const Ie=M.value;if((y===void 0||_0&&t.useInput!==!0&&k.key!==void 0&&k.key.length===1&&k.altKey===!1&&k.ctrlKey===!1&&k.metaKey===!1&&(k.keyCode!==32||y.length!==0)){s.value!==!0&&yi(k);const Ye=k.key.toLocaleLowerCase(),Ue=y.length===1&&y[0]===Ye;_=Date.now()+1500,Ue===!1&&(Pt(k),y+=Ye);const xt=new RegExp("^"+y.split("").map(Ir=>mS.indexOf(Ir)!==-1?"\\"+Ir:Ir).join(".*"),"i");let ut=a.value;if(Ue===!0||ut<0||xt.test(j.value(t.options[ut]))!==!0)do ut=Nl(ut+1,-1,Ie-1);while(ut!==a.value&&(re.value(t.options[ut])===!0||xt.test(j.value(t.options[ut]))!==!0));a.value!==ut&&at(()=>{vt(ut),te(ut),ut>=0&&t.useInput===!0&&t.fillInput===!0&&ie(j.value(t.options[ut]),!0)});return}if(!(k.keyCode!==13&&(k.keyCode!==32||t.useInput===!0||y!=="")&&(k.keyCode!==9||se===!1))){if(k.keyCode!==9&&Pt(k),a.value!==-1&&a.value{if(xt){if(Hu(xt)!==!0)return}else xt=t.newValueMode;if(ve("",t.multiple!==!0,!0),Ue==null)return;(xt==="toggle"?tt:ot)(Ue,xt==="add-unique"),t.multiple!==!0&&(S.value!==null&&S.value.focus(),Un())};if(t.onNewValue!==void 0?n("newValue",l.value,Ye):Ye(l.value),t.multiple!==!0)return}s.value===!0?bi():D.innerLoading.value!==!0&&yi()}}function Dn(){return m===!0?O.value:E.value!==null&&E.value.contentEl!==null?E.value.contentEl:void 0}function kr(){return Dn()}function Cr(){return t.hideSelected===!0?[]:e["selected-item"]!==void 0?ht.value.map(k=>e["selected-item"](k)).slice():e.selected!==void 0?[].concat(e.selected()):t.useChips===!0?ht.value.map((k,oe)=>w(Ks,{key:"option-"+oe,removable:D.editable.value===!0&&re.value(k.opt)!==!0,dense:!0,textColor:t.color,tabindex:et.value,onRemove(){k.removeAtIndex(oe)}},()=>w("span",{class:"ellipsis",[k.html===!0?"innerHTML":"textContent"]:j.value(k.opt)}))):[w("span",{[_t.value===!0?"innerHTML":"textContent"]:Ee.value})]}function Qo(){if(we.value===!0)return e["no-option"]!==void 0?e["no-option"]({inputValue:l.value}):void 0;const k=e.option!==void 0?e.option:se=>w(or,{key:se.index,...se.itemProps},()=>w(Do,()=>w(sr,()=>w("span",{[se.html===!0?"innerHTML":"textContent"]:se.label}))));let oe=G("div",It.value.map(k));return e["before-options"]!==void 0&&(oe=e["before-options"]().concat(oe)),di(e["after-options"],oe)}function Mr(k,oe){const se=oe===!0?{...dt.value,...D.splitAttrs.attributes.value}:void 0,Ie={ref:oe===!0?S:void 0,key:"i_t",class:B.value,style:t.inputStyle,value:l.value!==void 0?l.value:"",type:"search",...se,id:oe===!0?D.targetUid.value:void 0,maxlength:t.maxlength,autocomplete:t.autocomplete,"data-autofocus":k===!0||t.autofocus===!0||void 0,disabled:t.disable===!0,readonly:t.readonly===!0,...ce.value};return k!==!0&&m===!0&&(Array.isArray(Ie.class)===!0?Ie.class=[...Ie.class,"no-pointer-events"]:Ie.class+=" no-pointer-events"),w("input",Ie)}function F(k){d!==null&&(clearTimeout(d),d=null),h!==null&&(clearTimeout(h),h=null),!(k&&k.target&&k.target.qComposing===!0)&&(ie(k.target.value||""),p=!0,b=l.value,D.focused.value!==!0&&(m!==!0||c.value===!0)&&D.focus(),t.onFilter!==void 0&&(d=setTimeout(()=>{d=null,pe(l.value)},t.inputDebounce)))}function ie(k,oe){l.value!==k&&(l.value=k,oe===!0||t.inputDebounce===0||t.inputDebounce==="0"?n("inputValue",k):h=setTimeout(()=>{h=null,n("inputValue",k)},t.inputDebounce))}function ve(k,oe,se){p=se!==!0,t.useInput===!0&&(ie(k,!0),(oe===!0||se!==!0)&&(b=k),oe!==!0&&pe(k))}function pe(k,oe,se){if(t.onFilter===void 0||oe!==!0&&D.focused.value!==!0)return;D.innerLoading.value===!0?n("filterAbort"):(D.innerLoading.value=!0,u.value=!0),k!==""&&t.multiple!==!0&&T.value.length!==0&&p!==!0&&k===j.value(T.value[0])&&(k="");const Ie=setTimeout(()=>{s.value===!0&&(s.value=!1)},10);v!==null&&clearTimeout(v),v=Ie,n("filter",k,(Ye,Ue)=>{(oe===!0||D.focused.value===!0)&&v===Ie&&(clearTimeout(v),typeof Ye=="function"&&Ye(),u.value=!1,at(()=>{D.innerLoading.value=!1,D.editable.value===!0&&(oe===!0?s.value===!0&&Un():s.value===!0?Tr(!0):s.value=!0),typeof Ue=="function"&&at(()=>{Ue(i)}),typeof se=="function"&&at(()=>{se(i)})}))},()=>{D.focused.value===!0&&v===Ie&&(clearTimeout(v),D.innerLoading.value=!1,u.value=!1),s.value===!0&&(s.value=!1)})}function Te(){return w(Kf,{ref:E,class:J.value,style:t.popupContentStyle,modelValue:s.value,fit:t.menuShrink!==!0,cover:t.optionsCover===!0&&we.value!==!0&&t.useInput!==!0,anchor:t.menuAnchor,self:t.menuSelf,offset:t.menuOffset,dark:ae.value,noParentEvent:!0,noRefocus:!0,noFocus:!0,noRouteDismiss:t.popupNoRouteDismiss,square:$t.value,transitionShow:t.transitionShow,transitionHide:t.transitionHide,transitionDuration:t.transitionDuration,separateClosePopup:!0,...mt.value,onScrollPassive:Y,onBeforeShow:Tl,onBeforeHide:it,onShow:Ke},Qo)}function it(k){Il(k),bi()}function Ke(){de()}function Gt(k){wn(k),S.value!==null&&S.value.focus(),c.value=!0,window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,0)}function Ct(k){wn(k),at(()=>{c.value=!1})}function vi(){const k=[w(Xf,{class:`col-auto ${D.fieldClass.value}`,...Q.value,for:D.targetUid.value,dark:ae.value,square:!0,loading:u.value,itemAligned:!1,filled:!0,stackLabel:l.value.length!==0,...D.splitAttrs.listeners.value,onFocus:Gt,onBlur:Ct},{...e,rawControl:()=>D.getControl(!0),before:void 0,after:void 0})];return s.value===!0&&k.push(w("div",{ref:O,class:J.value+" scroll",style:t.popupContentStyle,...mt.value,onClick:Rn,onScrollPassive:Y},Qo())),w(Xi,{ref:A,modelValue:r.value,position:t.useInput===!0?"top":void 0,transitionShow:x,transitionHide:t.transitionHide,transitionDuration:t.transitionDuration,noRouteDismiss:t.popupNoRouteDismiss,onBeforeShow:Tl,onBeforeHide:pi,onHide:Pr,onShow:Lg},()=>w("div",{class:"q-select__dialog"+(ae.value===!0?" q-select__dialog--dark q-dark":"")+(c.value===!0?" q-select__dialog--focused":"")},k))}function pi(k){Il(k),A.value!==null&&A.value.__updateRefocusTarget(D.rootRef.value.querySelector(".q-field__native > [tabindex]:last-child")),D.focused.value=!1}function Pr(k){Un(),D.focused.value===!1&&n("blur",k),_i()}function Lg(){const k=document.activeElement;(k===null||k.id!==D.targetUid.value)&&S.value!==null&&S.value!==k&&S.value.focus(),de()}function bi(){r.value!==!0&&(a.value=-1,s.value===!0&&(s.value=!1),D.focused.value===!1&&(v!==null&&(clearTimeout(v),v=null),D.innerLoading.value===!0&&(n("filterAbort"),D.innerLoading.value=!1,u.value=!1)))}function yi(k){D.editable.value===!0&&(m===!0?(D.onControlFocusin(k),r.value=!0,at(()=>{D.focus()})):D.focus(),t.onFilter!==void 0?pe(l.value):(we.value!==!0||e["no-option"]!==void 0)&&(s.value=!0))}function Un(){r.value=!1,bi()}function _i(){t.useInput===!0&&ve(t.multiple!==!0&&t.fillInput===!0&&T.value.length!==0&&j.value(T.value[0])||"",!0,!0)}function Tr(k){let oe=-1;if(k===!0){if(T.value.length!==0){const se=ct.value(T.value[0]);oe=t.options.findIndex(Ie=>eo(ct.value(Ie),se))}U(oe)}vt(oe)}function Fg(k,oe){s.value===!0&&D.innerLoading.value===!1&&(U(-1,!0),at(()=>{s.value===!0&&D.innerLoading.value===!1&&(k>oe?U():Tr(!0))}))}function Pl(){r.value===!1&&E.value!==null&&E.value.updatePosition()}function Tl(k){k!==void 0&&wn(k),n("popupShow",k),D.hasPopupOpen=!0,D.onControlFocusin(k)}function Il(k){k!==void 0&&wn(k),n("popupHide",k),D.hasPopupOpen=!1,D.onControlFocusout(k)}function Dl(){m=o.platform.is.mobile!==!0&&t.behavior!=="dialog"?!1:t.behavior!=="menu"&&(t.useInput===!0?e["no-option"]!==void 0||t.onFilter!==void 0||we.value===!1:!0),x=o.platform.is.ios===!0&&m===!0&&t.useInput===!0?"fade":t.transitionShow}return xd(Dl),om(Pl),Dl(),Lt(()=>{d!==null&&clearTimeout(d),h!==null&&clearTimeout(h)}),Object.assign(i,{showPopup:yi,hidePopup:Un,removeAtIndex:ye,add:ot,toggleOption:tt,getOptionIndex:()=>a.value,setOptionIndex:vt,moveOptionSelection:Vt,filter:pe,updateMenuPosition:Pl,updateInputValue:ve,isOptionSelected:me,getEmittingOptionValue:Oe,isOptionDisabled:(...k)=>re.value.apply(null,k)===!0,getOptionValue:(...k)=>ct.value.apply(null,k),getOptionLabel:(...k)=>j.value.apply(null,k)}),Object.assign(D,{innerValue:T,fieldClass:g(()=>`q-select q-field--auto-height q-select--with${t.useInput!==!0?"out":""}-input q-select--with${t.useChips!==!0?"out":""}-chips q-select--${t.multiple===!0?"multiple":"single"}`),inputRef:C,targetRef:S,hasValue:fe,showPopup:yi,floatingLabel:g(()=>t.hideSelected!==!0&&fe.value===!0||typeof l.value=="number"||l.value.length!==0||Fo(t.displayValue)),getControlChild:()=>{if(D.editable.value!==!1&&(r.value===!0||we.value!==!0||e["no-option"]!==void 0))return m===!0?vi():Te();D.hasPopupOpen===!0&&(D.hasPopupOpen=!1)},controlEvents:{onFocusin(k){D.onControlFocusin(k)},onFocusout(k){D.onControlFocusout(k,()=>{_i(),bi()})},onClick(k){if(Rn(k),m!==!0&&s.value===!0){bi(),S.value!==null&&S.value.focus();return}yi(k)}},getControl:k=>{const oe=Cr(),se=k===!0||r.value!==!0||m!==!0;if(t.useInput===!0)oe.push(Mr(k,se));else if(D.editable.value===!0){const Ye=se===!0?dt.value:void 0;oe.push(w("input",{ref:se===!0?S:void 0,key:"d_t",class:"q-select__focus-target",id:se===!0?D.targetUid.value:void 0,value:Ee.value,readonly:!0,"data-autofocus":k===!0||t.autofocus===!0||void 0,...Ye,onKeydown:Qt,onKeyup:He,onKeypress:Ft})),se===!0&&typeof t.autocomplete=="string"&&t.autocomplete.length!==0&&oe.push(w("input",{class:"q-select__autocomplete-input",autocomplete:t.autocomplete,tabindex:-1,onKeyup:nt}))}if(P.value!==void 0&&t.disable!==!0&&X.value.length!==0){const Ye=X.value.map(Ue=>w("option",{value:Ue,selected:!0}));oe.push(w("select",{class:"hidden",name:P.value,multiple:t.multiple},Ye))}const Ie=t.useInput===!0||se!==!0?void 0:D.splitAttrs.attributes.value;return w("div",{class:"q-field__native row items-center",...Ie,...D.splitAttrs.listeners.value},oe)},getInnerAppend:()=>t.loading!==!0&&u.value!==!0&&t.hideDropdownIcon!==!0?[w(_e,{class:"q-select__dropdown-icon"+(s.value===!0?" rotate-180":""),name:Dt.value})]:null}),gl(D)}}),bS={xs:2,sm:4,md:6,lg:10,xl:14};function ju(t,e,n){return{transform:e===!0?`translateX(${n.lang.rtl===!0?"-":""}100%) scale3d(${-t},1,1)`:`scale3d(${t},1,1)`}}const yS=ze({name:"QLinearProgress",props:{...un,...qa,value:{type:Number,default:0},buffer:Number,color:String,trackColor:String,reverse:Boolean,stripe:Boolean,indeterminate:Boolean,query:Boolean,rounded:Boolean,animationSpeed:{type:[String,Number],default:2100},instantFeedback:Boolean},setup(t,{slots:e}){const{proxy:n}=$e(),i=dn(t,n.$q),o=Ra(t,bS),s=g(()=>t.indeterminate===!0||t.query===!0),r=g(()=>t.reverse!==t.query),a=g(()=>({...o.value!==null?o.value:{},"--q-linear-progress-speed":`${t.animationSpeed}ms`})),l=g(()=>"q-linear-progress"+(t.color!==void 0?` text-${t.color}`:"")+(t.reverse===!0||t.query===!0?" q-linear-progress--reverse":"")+(t.rounded===!0?" rounded-borders":"")),c=g(()=>ju(t.buffer!==void 0?t.buffer:1,r.value,n.$q)),u=g(()=>`with${t.instantFeedback===!0?"out":""}-transition`),d=g(()=>`q-linear-progress__track absolute-full q-linear-progress__track--${u.value} q-linear-progress__track--${i.value===!0?"dark":"light"}`+(t.trackColor!==void 0?` bg-${t.trackColor}`:"")),h=g(()=>ju(s.value===!0?1:t.value,r.value,n.$q)),f=g(()=>`q-linear-progress__model absolute-full q-linear-progress__model--${u.value} q-linear-progress__model--${s.value===!0?"in":""}determinate`),m=g(()=>({width:`${t.value*100}%`})),p=g(()=>`q-linear-progress__stripe absolute-${t.reverse===!0?"right":"left"} q-linear-progress__stripe--${u.value}`);return()=>{const v=[w("div",{class:d.value,style:c.value}),w("div",{class:f.value,style:h.value})];return t.stripe===!0&&s.value===!1&&v.push(w("div",{class:p.value,style:m.value})),w("div",{class:l.value,style:a.value,role:"progressbar","aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":t.indeterminate===!0?void 0:t.value},di(e.default,v))}}});function _S(t,e){const n=N(null),i=g(()=>t.disable===!0?null:w("span",{ref:n,class:"no-outline",tabindex:-1}));function o(s){const r=e.value;s!==void 0&&s.type.indexOf("key")===0?r!==null&&document.activeElement!==r&&r.contains(document.activeElement)===!0&&r.focus():n.value!==null&&(s===void 0||r!==null&&r.contains(s.target)===!0)&&n.value.focus()}return{refocusTargetEl:i,refocusTarget:o}}const xS={xs:30,sm:35,md:40,lg:50,xl:60},Qf={...un,...qa,...mr,modelValue:{required:!0,default:null},val:{},trueValue:{default:!0},falseValue:{default:!1},indeterminateValue:{default:null},checkedIcon:String,uncheckedIcon:String,indeterminateIcon:String,toggleOrder:{type:String,validator:t=>t==="tf"||t==="ft"},toggleIndeterminate:Boolean,label:String,leftLabel:Boolean,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},Gf=["update:modelValue"];function Jf(t,e){const{props:n,slots:i,emit:o,proxy:s}=$e(),{$q:r}=s,a=dn(n,r),l=N(null),{refocusTargetEl:c,refocusTarget:u}=_S(n,l),d=Ra(n,xS),h=g(()=>n.val!==void 0&&Array.isArray(n.modelValue)),f=g(()=>{const M=Sn(n.val);return h.value===!0?n.modelValue.findIndex(H=>Sn(H)===M):-1}),m=g(()=>h.value===!0?f.value!==-1:Sn(n.modelValue)===Sn(n.trueValue)),p=g(()=>h.value===!0?f.value===-1:Sn(n.modelValue)===Sn(n.falseValue)),v=g(()=>m.value===!1&&p.value===!1),b=g(()=>n.disable===!0?-1:n.tabindex||0),x=g(()=>`q-${t} cursor-pointer no-outline row inline no-wrap items-center`+(n.disable===!0?" disabled":"")+(a.value===!0?` q-${t}--dark`:"")+(n.dense===!0?` q-${t}--dense`:"")+(n.leftLabel===!0?" reverse":"")),y=g(()=>{const M=m.value===!0?"truthy":p.value===!0?"falsy":"indet",H=n.color!==void 0&&(n.keepColor===!0||(t==="toggle"?m.value===!0:p.value!==!0))?` text-${n.color}`:"";return`q-${t}__inner relative-position non-selectable q-${t}__inner--${M}${H}`}),_=g(()=>{const M={type:"checkbox"};return n.name!==void 0&&Object.assign(M,{".checked":m.value,"^checked":m.value===!0?"checked":void 0,name:n.name,value:h.value===!0?n.val:n.trueValue}),M}),C=Bf(_),S=g(()=>{const M={tabindex:b.value,role:t==="toggle"?"switch":"checkbox","aria-label":n.label,"aria-checked":v.value===!0?"mixed":m.value===!0?"true":"false"};return n.disable===!0&&(M["aria-disabled"]="true"),M});function E(M){M!==void 0&&(Pt(M),u(M)),n.disable!==!0&&o("update:modelValue",A(),M)}function A(){if(h.value===!0){if(m.value===!0){const M=n.modelValue.slice();return M.splice(f.value,1),M}return n.modelValue.concat([n.val])}if(m.value===!0){if(n.toggleOrder!=="ft"||n.toggleIndeterminate===!1)return n.falseValue}else if(p.value===!0){if(n.toggleOrder==="ft"||n.toggleIndeterminate===!1)return n.trueValue}else return n.toggleOrder!=="ft"?n.trueValue:n.falseValue;return n.indeterminateValue}function O(M){(M.keyCode===13||M.keyCode===32)&&Pt(M)}function P(M){(M.keyCode===13||M.keyCode===32)&&E(M)}const q=e(m,v);return Object.assign(s,{toggle:E}),()=>{const M=q();n.disable!==!0&&C(M,"unshift",` q-${t}__native absolute q-ma-none q-pa-none`);const H=[w("div",{class:y.value,style:d.value,"aria-hidden":"true"},M)];c.value!==null&&H.push(c.value);const z=n.label!==void 0?di(i.default,[n.label]):Ge(i.default);return z!==void 0&&H.push(w("div",{class:`q-${t}__label q-anchor--skip`},z)),w("div",{ref:l,class:x.value,...S.value,onClick:E,onKeydown:O,onKeyup:P},H)}}const SS=()=>w("div",{key:"svg",class:"q-checkbox__bg absolute"},[w("svg",{class:"q-checkbox__svg fit absolute-full",viewBox:"0 0 24 24"},[w("path",{class:"q-checkbox__truthy",fill:"none",d:"M1.73,12.91 8.1,19.28 22.79,4.59"}),w("path",{class:"q-checkbox__indet",d:"M4,14H20V10H4"})])]),ia=ze({name:"QCheckbox",props:Qf,emits:Gf,setup(t){const e=SS();function n(i,o){const s=g(()=>(i.value===!0?t.checkedIcon:o.value===!0?t.indeterminateIcon:t.uncheckedIcon)||null);return()=>s.value!==null?[w("div",{key:"icon",class:"q-checkbox__icon-container absolute-full flex flex-center no-wrap"},[w(_e,{class:"q-checkbox__icon",name:s.value})])]:[e]}return Jf("checkbox",n)}});function wS(t,e){return new Date(t)-new Date(e)}const kS={sortMethod:Function,binaryStateSort:Boolean,columnSortOrder:{type:String,validator:t=>t==="ad"||t==="da",default:"ad"}};function CS(t,e,n,i){const o=g(()=>{const{sortBy:a}=e.value;return a&&n.value.find(l=>l.name===a)||null}),s=g(()=>t.sortMethod!==void 0?t.sortMethod:(a,l,c)=>{const u=n.value.find(f=>f.name===l);if(u===void 0||u.field===void 0)return a;const d=c===!0?-1:1,h=typeof u.field=="function"?f=>u.field(f):f=>f[u.field];return a.sort((f,m)=>{let p=h(f),v=h(m);return u.rawSort!==void 0?u.rawSort(p,v,f,m)*d:p==null?-1*d:v==null?1*d:u.sort!==void 0?u.sort(p,v,f,m)*d:To(p)===!0&&To(v)===!0?(p-v)*d:El(p)===!0&&El(v)===!0?wS(p,v)*d:typeof p=="boolean"&&typeof v=="boolean"?(p-v)*d:([p,v]=[p,v].map(b=>(b+"").toLocaleString().toLowerCase()),ph.name===a);d!==void 0&&d.sortOrder&&(l=d.sortOrder)}let{sortBy:c,descending:u}=e.value;c!==a?(c=a,u=l==="da"):t.binaryStateSort===!0?u=!u:u===!0?l==="ad"?c=null:u=!1:l==="ad"?u=!0:c=null,i({sortBy:c,descending:u,page:1})}return{columnToSort:o,computedSortMethod:s,sort:r}}const MS={filter:[String,Object],filterMethod:Function};function PS(t,e){const n=g(()=>t.filterMethod!==void 0?t.filterMethod:(i,o,s,r)=>{const a=o?o.toLowerCase():"";return i.filter(l=>s.some(c=>{const u=r(c,l)+"";return(u==="undefined"||u==="null"?"":u.toLowerCase()).indexOf(a)!==-1}))});return ge(()=>t.filter,()=>{at(()=>{e({page:1},!0)})},{deep:!0}),{computedFilterMethod:n}}function TS(t,e){for(const n in e)if(e[n]!==t[n])return!1;return!0}function $u(t){return t.page<1&&(t.page=1),t.rowsPerPage!==void 0&&t.rowsPerPage<1&&(t.rowsPerPage=0),t}const IS={pagination:Object,rowsPerPageOptions:{type:Array,default:()=>[5,7,10,15,20,25,50,0]},"onUpdate:pagination":[Function,Array]};function DS(t,e){const{props:n,emit:i}=t,o=N(Object.assign({sortBy:null,descending:!1,page:1,rowsPerPage:n.rowsPerPageOptions.length!==0?n.rowsPerPageOptions[0]:5},n.pagination)),s=g(()=>{const u=n["onUpdate:pagination"]!==void 0?{...o.value,...n.pagination}:o.value;return $u(u)}),r=g(()=>s.value.rowsNumber!==void 0);function a(u){l({pagination:u,filter:n.filter})}function l(u={}){at(()=>{i("request",{pagination:u.pagination||s.value,filter:u.filter||n.filter,getCellValue:e})})}function c(u,d){const h=$u({...s.value,...u});if(TS(s.value,h)===!0){r.value===!0&&d===!0&&a(h);return}if(r.value===!0){a(h);return}n.pagination!==void 0&&n["onUpdate:pagination"]!==void 0?i("update:pagination",h):o.value=h}return{innerPagination:o,computedPagination:s,isServerSide:r,requestServerInteraction:l,setPagination:c}}function OS(t,e,n,i,o,s){const{props:r,emit:a,proxy:{$q:l}}=t,c=g(()=>i.value===!0?n.value.rowsNumber||0:s.value),u=g(()=>{const{page:_,rowsPerPage:C}=n.value;return(_-1)*C}),d=g(()=>{const{page:_,rowsPerPage:C}=n.value;return _*C}),h=g(()=>n.value.page===1),f=g(()=>n.value.rowsPerPage===0?1:Math.max(1,Math.ceil(c.value/n.value.rowsPerPage))),m=g(()=>d.value===0?!0:n.value.page>=f.value),p=g(()=>(r.rowsPerPageOptions.includes(e.value.rowsPerPage)?r.rowsPerPageOptions:[e.value.rowsPerPage].concat(r.rowsPerPageOptions)).map(C=>({label:C===0?l.lang.table.allRows:""+C,value:C})));ge(f,(_,C)=>{if(_===C)return;const S=n.value.page;_&&!S?o({page:1}):_1&&o({page:_-1})}function x(){const{page:_,rowsPerPage:C}=n.value;d.value>0&&_*C["single","multiple","none"].includes(t)},selected:{type:Array,default:()=>[]}},ES=["update:selected","selection"];function AS(t,e,n,i){const o=g(()=>{const m={};return t.selected.map(i.value).forEach(p=>{m[p]=!0}),m}),s=g(()=>t.selection!=="none"),r=g(()=>t.selection==="single"),a=g(()=>t.selection==="multiple"),l=g(()=>n.value.length!==0&&n.value.every(m=>o.value[i.value(m)]===!0)),c=g(()=>l.value!==!0&&n.value.some(m=>o.value[i.value(m)]===!0)),u=g(()=>t.selected.length);function d(m){return o.value[m]===!0}function h(){e("update:selected",[])}function f(m,p,v,b){e("selection",{rows:p,added:v,keys:m,evt:b});const x=r.value===!0?v===!0?p:[]:v===!0?t.selected.concat(p):t.selected.filter(y=>m.includes(i.value(y))===!1);e("update:selected",x)}return{hasSelectionMode:s,singleSelection:r,multipleSelection:a,allRowsSelected:l,someRowsSelected:c,rowsSelectedNumber:u,isRowSelected:d,clearSelection:h,updateSelection:f}}function Uu(t){return Array.isArray(t)?t.slice():[]}const qS={expanded:Array},RS=["update:expanded"];function LS(t,e){const n=N(Uu(t.expanded));ge(()=>t.expanded,r=>{n.value=Uu(r)});function i(r){return n.value.includes(r)}function o(r){t.expanded!==void 0?e("update:expanded",r):n.value=r}function s(r,a){const l=n.value.slice(),c=l.indexOf(r);a===!0?c===-1&&(l.push(r),o(l)):c!==-1&&(l.splice(c,1),o(l))}return{isRowExpanded:i,setExpanded:o,updateExpanded:s}}const FS={visibleColumns:Array};function zS(t,e,n){const i=g(()=>{if(t.columns!==void 0)return t.columns;const a=t.rows[0];return a!==void 0?Object.keys(a).map(l=>({name:l,label:l.toUpperCase(),field:l,align:To(a[l])?"right":"left",sortable:!0})):[]}),o=g(()=>{const{sortBy:a,descending:l}=e.value;return(t.visibleColumns!==void 0?i.value.filter(u=>u.required===!0||t.visibleColumns.includes(u.name)===!0):i.value).map(u=>{const d=u.align||"right",h=`text-${d}`;return{...u,align:d,__iconClass:`q-table__sort-icon q-table__sort-icon--${d}`,__thClass:h+(u.headerClasses!==void 0?" "+u.headerClasses:"")+(u.sortable===!0?" sortable":"")+(u.name===a?` sorted ${l===!0?"sort-desc":""}`:""),__tdStyle:u.style!==void 0?typeof u.style!="function"?()=>u.style:u.style:()=>null,__tdClass:u.classes!==void 0?typeof u.classes!="function"?()=>h+" "+u.classes:f=>h+" "+u.classes(f):()=>h}})}),s=g(()=>{const a={};return o.value.forEach(l=>{a[l.name]=l}),a}),r=g(()=>t.tableColspan!==void 0?t.tableColspan:o.value.length+(n.value===!0?1:0));return{colList:i,computedCols:o,computedColsMap:s,computedColspan:r}}const ws="q-table__bottom row items-center",eg={};Yf.forEach(t=>{eg[t]={}});const BS=ze({name:"QTable",props:{rows:{type:Array,required:!0},rowKey:{type:[String,Function],default:"id"},columns:Array,loading:Boolean,iconFirstPage:String,iconPrevPage:String,iconNextPage:String,iconLastPage:String,title:String,hideHeader:Boolean,grid:Boolean,gridHeader:Boolean,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:t=>["horizontal","vertical","cell","none"].includes(t)},wrapCells:Boolean,virtualScroll:Boolean,virtualScrollTarget:{},...eg,noDataLabel:String,noResultsLabel:String,loadingLabel:String,selectedRowsLabel:Function,rowsPerPageLabel:String,paginationLabel:Function,color:{type:String,default:"grey-8"},titleClass:[String,Array,Object],tableStyle:[String,Array,Object],tableClass:[String,Array,Object],tableHeaderStyle:[String,Array,Object],tableHeaderClass:[String,Array,Object],cardContainerClass:[String,Array,Object],cardContainerStyle:[String,Array,Object],cardStyle:[String,Array,Object],cardClass:[String,Array,Object],hideBottom:Boolean,hideSelectedBanner:Boolean,hideNoData:Boolean,hidePagination:Boolean,onRowClick:Function,onRowDblclick:Function,onRowContextmenu:Function,...un,...Rd,...FS,...MS,...IS,...qS,...VS,...kS},emits:["request","virtualScroll",...Ld,...RS,...ES],setup(t,{slots:e,emit:n}){const i=$e(),{proxy:{$q:o}}=i,s=dn(t,o),{inFullscreen:r,toggleFullscreen:a}=Fd(),l=g(()=>typeof t.rowKey=="function"?t.rowKey:F=>F[t.rowKey]),c=N(null),u=N(null),d=g(()=>t.grid!==!0&&t.virtualScroll===!0),h=g(()=>" q-table__card"+(s.value===!0?" q-table__card--dark q-dark":"")+(t.square===!0?" q-table--square":"")+(t.flat===!0?" q-table--flat":"")+(t.bordered===!0?" q-table--bordered":"")),f=g(()=>`q-table__container q-table--${t.separator}-separator column no-wrap`+(t.grid===!0?" q-table--grid":h.value)+(s.value===!0?" q-table--dark":"")+(t.dense===!0?" q-table--dense":"")+(t.wrapCells===!1?" q-table--no-wrap":"")+(r.value===!0?" fullscreen scroll":"")),m=g(()=>f.value+(t.loading===!0?" q-table--loading":""));ge(()=>t.tableStyle+t.tableClass+t.tableHeaderStyle+t.tableHeaderClass+f.value,()=>{d.value===!0&&u.value!==null&&u.value.reset()});const{innerPagination:p,computedPagination:v,isServerSide:b,requestServerInteraction:x,setPagination:y}=DS(i,vt),{computedFilterMethod:_}=PS(t,y),{isRowExpanded:C,setExpanded:S,updateExpanded:E}=LS(t,n),A=g(()=>{let F=t.rows;if(b.value===!0||F.length===0)return F;const{sortBy:ie,descending:ve}=v.value;return t.filter&&(F=_.value(F,t.filter,D.value,vt)),ae.value!==null&&(F=fe.value(t.rows===F?F.slice():F,ie,ve)),F}),O=g(()=>A.value.length),P=g(()=>{let F=A.value;if(b.value===!0)return F;const{rowsPerPage:ie}=v.value;return ie!==0&&(J.value===0&&t.rows!==F?F.length>we.value&&(F=F.slice(0,we.value)):F=F.slice(J.value,we.value)),F}),{hasSelectionMode:q,singleSelection:M,multipleSelection:H,allRowsSelected:z,someRowsSelected:$,rowsSelectedNumber:U,isRowSelected:G,clearSelection:Y,updateSelection:te}=AS(t,n,P,l),{colList:de,computedCols:D,computedColsMap:T,computedColspan:Q}=zS(t,v,q),{columnToSort:ae,computedSortMethod:fe,sort:B}=CS(t,v,de,y),{firstRowIndex:J,lastRowIndex:we,isFirstPage:Z,isLastPage:Ee,pagesNumber:Xe,computedRowsPerPageOptions:_t,computedRowsNumber:et,firstPage:dt,prevPage:mt,nextPage:ht,lastPage:It}=OS(i,p,v,b,y,O),Dt=g(()=>P.value.length===0),$t=g(()=>{const F={};return Yf.forEach(ie=>{F[ie]=t[ie]}),F.virtualScrollItemSize===void 0&&(F.virtualScrollItemSize=t.dense===!0?28:48),F});function Ot(){d.value===!0&&u.value.reset()}function ct(){if(t.grid===!0)return Mr();const F=t.hideHeader!==!0?ke:null;if(d.value===!0){const ve=e["top-row"],pe=e["bottom-row"],Te={default:it=>ce(it.item,e.body,it.index)};if(ve!==void 0){const it=w("tbody",ve({cols:D.value}));Te.before=F===null?()=>it:()=>[F()].concat(it)}else F!==null&&(Te.before=F);return pe!==void 0&&(Te.after=()=>w("tbody",pe({cols:D.value}))),w(fS,{ref:u,class:t.tableClass,style:t.tableStyle,...$t.value,scrollTarget:t.virtualScrollTarget,items:P.value,type:"__qtable",tableColspan:Q.value,onVirtualScroll:re},Te)}const ie=[Oe()];return F!==null&&ie.unshift(F()),jf({class:["q-table__middle scroll",t.tableClass],style:t.tableStyle},ie)}function j(F,ie){if(u.value!==null){u.value.scrollTo(F,ie);return}F=parseInt(F,10);const ve=c.value.querySelector(`tbody tr:nth-of-type(${F+1})`);if(ve!==null){const pe=c.value.querySelector(".q-table__middle.scroll"),Te=ve.offsetTop-t.virtualScrollStickySizeStart,it=Te{const vi=e[`body-cell-${Ct.name}`],pi=vi!==void 0?vi:it;return pi!==void 0?pi(Pe({key:pe,row:F,pageIndex:ve,col:Ct})):w("td",{class:Ct.__tdClass(F),style:Ct.__tdStyle(F)},vt(Ct,F))});if(q.value===!0){const Ct=e["body-selection"],vi=Ct!==void 0?Ct(ot({key:pe,row:F,pageIndex:ve})):[w(ia,{modelValue:Te,color:t.color,dark:s.value,dense:t.dense,"onUpdate:modelValue":(pi,Pr)=>{te([pe],[F],pi,Pr)}})];Ke.unshift(w("td",{class:"q-table--col-auto-width"},vi))}const Gt={key:pe,class:{selected:Te}};return t.onRowClick!==void 0&&(Gt.class["cursor-pointer"]=!0,Gt.onClick=Ct=>{n("rowClick",Ct,F,ve)}),t.onRowDblclick!==void 0&&(Gt.class["cursor-pointer"]=!0,Gt.onDblclick=Ct=>{n("rowDblclick",Ct,F,ve)}),t.onRowContextmenu!==void 0&&(Gt.class["cursor-pointer"]=!0,Gt.onContextmenu=Ct=>{n("rowContextmenu",Ct,F,ve)}),w("tr",Gt,Ke)}function Oe(){const F=e.body,ie=e["top-row"],ve=e["bottom-row"];let pe=P.value.map((Te,it)=>ce(Te,F,it));return ie!==void 0&&(pe=ie({cols:D.value}).concat(pe)),ve!==void 0&&(pe=pe.concat(ve({cols:D.value}))),w("tbody",pe)}function ye(F){return tt(F),F.cols=F.cols.map(ie=>ei({...ie},"value",()=>vt(ie,F.row))),F}function Pe(F){return tt(F),ei(F,"value",()=>vt(F.col,F.row)),F}function ot(F){return tt(F),F}function tt(F){Object.assign(F,{cols:D.value,colsMap:T.value,sort:B,rowIndex:J.value+F.pageIndex,color:t.color,dark:s.value,dense:t.dense}),q.value===!0&&ei(F,"selected",()=>G(F.key),(ie,ve)=>{te([F.key],[F.row],ie,ve)}),ei(F,"expand",()=>C(F.key),ie=>{E(F.key,ie)})}function vt(F,ie){const ve=typeof F.field=="function"?F.field(ie):ie[F.field];return F.format!==void 0?F.format(ve,ie):ve}const Vt=g(()=>({pagination:v.value,pagesNumber:Xe.value,isFirstPage:Z.value,isLastPage:Ee.value,firstPage:dt,prevPage:mt,nextPage:ht,lastPage:It,inFullscreen:r.value,toggleFullscreen:a}));function W(){const F=e.top,ie=e["top-left"],ve=e["top-right"],pe=e["top-selection"],Te=q.value===!0&&pe!==void 0&&U.value>0,it="q-table__top relative-position row items-center";if(F!==void 0)return w("div",{class:it},[F(Vt.value)]);let Ke;if(Te===!0?Ke=pe(Vt.value).slice():(Ke=[],ie!==void 0?Ke.push(w("div",{class:"q-table__control"},[ie(Vt.value)])):t.title&&Ke.push(w("div",{class:"q-table__control"},[w("div",{class:["q-table__title",t.titleClass]},t.title)]))),ve!==void 0&&(Ke.push(w("div",{class:"q-table__separator col"})),Ke.push(w("div",{class:"q-table__control"},[ve(Vt.value)]))),Ke.length!==0)return w("div",{class:it},Ke)}const me=g(()=>$.value===!0?null:z.value);function ke(){const F=He();return t.loading===!0&&e.loading===void 0&&F.push(w("tr",{class:"q-table__progress"},[w("th",{class:"relative-position",colspan:Q.value},X())])),w("thead",F)}function He(){const F=e.header,ie=e["header-cell"];if(F!==void 0)return F(nt({header:!0})).slice();const ve=D.value.map(pe=>{const Te=e[`header-cell-${pe.name}`],it=Te!==void 0?Te:ie,Ke=nt({col:pe});return it!==void 0?it(Ke):w(wa,{key:pe.name,props:Ke},()=>pe.label)});if(M.value===!0&&t.grid!==!0)ve.unshift(w("th",{class:"q-table--col-auto-width"}," "));else if(H.value===!0){const pe=e["header-selection"],Te=pe!==void 0?pe(nt({})):[w(ia,{color:t.color,modelValue:me.value,dark:s.value,dense:t.dense,"onUpdate:modelValue":Ft})];ve.unshift(w("th",{class:"q-table--col-auto-width"},Te))}return[w("tr",{class:t.tableHeaderClass,style:t.tableHeaderStyle},ve)]}function nt(F){return Object.assign(F,{cols:D.value,sort:B,colsMap:T.value,color:t.color,dark:s.value,dense:t.dense}),H.value===!0&&ei(F,"selected",()=>me.value,Ft),F}function Ft(F){$.value===!0&&(F=!1),te(P.value.map(l.value),P.value,F)}const Qt=g(()=>{const F=[t.iconFirstPage||o.iconSet.table.firstPage,t.iconPrevPage||o.iconSet.table.prevPage,t.iconNextPage||o.iconSet.table.nextPage,t.iconLastPage||o.iconSet.table.lastPage];return o.lang.rtl===!0?F.reverse():F});function Dn(){if(t.hideBottom===!0)return;if(Dt.value===!0){if(t.hideNoData===!0)return;const ve=t.loading===!0?t.loadingLabel||o.lang.table.loading:t.filter?t.noResultsLabel||o.lang.table.noResults:t.noDataLabel||o.lang.table.noData,pe=e["no-data"],Te=pe!==void 0?[pe({message:ve,icon:o.iconSet.table.warning,filter:t.filter})]:[w(_e,{class:"q-table__bottom-nodata-icon",name:o.iconSet.table.warning}),ve];return w("div",{class:ws+" q-table__bottom--nodata"},Te)}const F=e.bottom;if(F!==void 0)return w("div",{class:ws},[F(Vt.value)]);const ie=t.hideSelectedBanner!==!0&&q.value===!0&&U.value>0?[w("div",{class:"q-table__control"},[w("div",[(t.selectedRowsLabel||o.lang.table.selectedRecords)(U.value)])])]:[];if(t.hidePagination!==!0)return w("div",{class:ws+" justify-end"},Cr(ie));if(ie.length!==0)return w("div",{class:ws},ie)}function kr(F){y({page:1,rowsPerPage:F.value})}function Cr(F){let ie;const{rowsPerPage:ve}=v.value,pe=t.paginationLabel||o.lang.table.pagination,Te=e.pagination,it=t.rowsPerPageOptions.length>1;if(F.push(w("div",{class:"q-table__separator col"})),it===!0&&F.push(w("div",{class:"q-table__control"},[w("span",{class:"q-table__bottom-item"},[t.rowsPerPageLabel||o.lang.table.recordsPerPage]),w(pS,{class:"q-table__select inline q-table__bottom-item",color:t.color,modelValue:ve,options:_t.value,displayValue:ve===0?o.lang.table.allRows:ve,dark:s.value,borderless:!0,dense:!0,optionsDense:!0,optionsCover:!0,"onUpdate:modelValue":kr})])),Te!==void 0)ie=Te(Vt.value);else if(ie=[w("span",ve!==0?{class:"q-table__bottom-item"}:{},[ve?pe(J.value+1,Math.min(we.value,et.value),et.value):pe(1,O.value,et.value)])],ve!==0&&Xe.value>1){const Ke={color:t.color,round:!0,dense:!0,flat:!0};t.dense===!0&&(Ke.size="sm"),Xe.value>2&&ie.push(w(Ve,{key:"pgFirst",...Ke,icon:Qt.value[0],disable:Z.value,onClick:dt})),ie.push(w(Ve,{key:"pgPrev",...Ke,icon:Qt.value[1],disable:Z.value,onClick:mt}),w(Ve,{key:"pgNext",...Ke,icon:Qt.value[2],disable:Ee.value,onClick:ht})),Xe.value>2&&ie.push(w(Ve,{key:"pgLast",...Ke,icon:Qt.value[3],disable:Ee.value,onClick:It}))}return F.push(w("div",{class:"q-table__control"},ie)),F}function Qo(){const F=t.gridHeader===!0?[w("table",{class:"q-table"},[ke()])]:t.loading===!0&&e.loading===void 0?X():void 0;return w("div",{class:"q-table__middle"},F)}function Mr(){const F=e.item!==void 0?e.item:ie=>{const ve=ie.cols.map(Te=>w("div",{class:"q-table__grid-item-row"},[w("div",{class:"q-table__grid-item-title"},[Te.label]),w("div",{class:"q-table__grid-item-value"},[Te.value])]));if(q.value===!0){const Te=e["body-selection"],it=Te!==void 0?Te(ie):[w(ia,{modelValue:ie.selected,color:t.color,dark:s.value,dense:t.dense,"onUpdate:modelValue":(Ke,Gt)=>{te([ie.key],[ie.row],Ke,Gt)}})];ve.unshift(w("div",{class:"q-table__grid-item-row"},it),w(_o,{dark:s.value}))}const pe={class:["q-table__grid-item-card"+h.value,t.cardClass],style:t.cardStyle};return(t.onRowClick!==void 0||t.onRowDblclick!==void 0)&&(pe.class[0]+=" cursor-pointer",t.onRowClick!==void 0&&(pe.onClick=Te=>{n("RowClick",Te,ie.row,ie.pageIndex)}),t.onRowDblclick!==void 0&&(pe.onDblclick=Te=>{n("RowDblclick",Te,ie.row,ie.pageIndex)})),w("div",{class:"q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3"+(ie.selected===!0?" q-table__grid-item--selected":"")},[w("div",pe,ve)])};return w("div",{class:["q-table__grid-content row",t.cardContainerClass],style:t.cardContainerStyle},P.value.map((ie,ve)=>F(ye({key:l.value(ie),row:ie,pageIndex:ve}))))}return Object.assign(i.proxy,{requestServerInteraction:x,setPagination:y,firstPage:dt,prevPage:mt,nextPage:ht,lastPage:It,isRowSelected:G,clearSelection:Y,isRowExpanded:C,setExpanded:S,sort:B,resetVirtualScroll:Ot,scrollTo:j,getCellValue:vt}),sm(i.proxy,{filteredSortedRows:()=>A.value,computedRows:()=>P.value,computedRowsNumber:()=>et.value}),()=>{const F=[W()],ie={ref:c,class:m.value};return t.grid===!0?F.push(Qo()):Object.assign(ie,{class:[ie.class,t.cardClass],style:t.cardStyle}),F.push(ct(),Dn()),t.loading===!0&&e.loading!==void 0&&F.push(e.loading()),w("div",ie,F)}}}),NS=Se({__name:"BaseTable",props:{items:{},rowData:{type:[Function,Object]},columnConfig:{},rowKey:{},searchInputVisible:{type:Boolean},tableHeight:{},filter:{},columnsToSearch:{},rowExpandable:{type:Boolean}},emits:["row-click","update:filter"],setup(t,{expose:e,emit:n}){e();const i=t,o=N([]),s=rm(),r=g(()=>i.rowExpandable?Object.keys(s).filter(m=>!m.startsWith("body")):Object.keys(s)),a=n,l=g({get:()=>i.filter||"",set:m=>a("update:filter",m)}),c=g(()=>i.items.map(typeof i.rowData=="function"?i.rowData:i.rowData.value)),u=g(()=>i.columnConfig.filter(m=>!m.expandField).map(m=>({name:m.field,field:m.field,label:m.label,align:m.align??"left",sortable:!0,headerStyle:"font-weight: bold"}))),f={props:i,expanded:o,slots:s,forwardedSlotNames:r,emit:a,filterModel:l,mappedRows:c,mappedColumns:u,customFilterMethod:(m,p,v)=>{if(!p||p.trim()==="")return m;const b=p.toLowerCase(),x=i.columnsToSearch||v.map(y=>typeof y.field=="string"?y.field:"");return m.filter(y=>x.some(_=>{const C=y[_];return C&&String(C).toLowerCase().includes(b)}))},onRowClick:(m,p)=>a("row-click",p)};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),WS={class:"q-pa-md"},HS={class:"row full-width items-center q-mb-sm"},jS={class:"col"};function $S(t,e,n,i,o,s){return V(),K("div",WS,[I(BS,{class:"sticky-header-table",rows:i.mappedRows,columns:i.mappedColumns,"row-key":"id",expanded:i.expanded,"onUpdate:expanded":e[1]||(e[1]=r=>i.expanded=r),filter:i.filterModel,"filter-method":i.customFilterMethod,"virtual-scroll":"","virtual-scroll-item-size":48,"virtual-scroll-sticky-size-start":30,style:Aa({height:n.tableHeight}),onRowClick:i.onRowClick,"binary-state-sort":"",pagination:{rowsPerPage:0},"hide-bottom":""},am({_:2},[n.searchInputVisible?{name:"top",fn:L(()=>[R("div",HS,[R("div",jS,[I(Hf,{modelValue:i.filterModel,"onUpdate:modelValue":e[0]||(e[0]=r=>i.filterModel=r),dense:"",outlined:"",color:"white",placeholder:"Suchen...",class:"search-field white-outline-input","input-class":"text-white"},{append:L(()=>[I(_e,{name:"search",color:"white"})]),_:1},8,["modelValue"])])])]),key:"0"}:void 0,i.props.rowExpandable?{name:"header",fn:L(r=>[I(ea,{props:r},{default:L(()=>[I(wa,{"auto-width":"",props:{...r,col:{}}},null,8,["props"]),(V(!0),K(De,null,Je(r.cols,a=>(V(),ne(wa,{key:a.name,props:{...r,col:a}},{default:L(()=>[Re(le(a.label),1)]),_:2},1032,["props"]))),128))]),_:2},1032,["props"])]),key:"1"}:void 0,i.props.rowExpandable?{name:"body",fn:L(r=>[(V(),ne(ea,{key:`main-${r.key}`,props:r,onClick:a=>i.onRowClick(a,r.row),class:"clickable"},{default:L(()=>[I(vn,{"auto-width":""},{default:L(()=>[I(Ve,{dense:"",flat:"",round:"",size:"sm",icon:r.expand?"keyboard_arrow_up":"keyboard_arrow_down",onClick:tn(a=>r.expand=!r.expand,["stop"])},null,8,["icon","onClick"])]),_:2},1024),(V(!0),K(De,null,Je(r.cols,a=>(V(),K(De,{key:a.name},[t.$slots[`body-cell-${a.name}`]?oi(t.$slots,`body-cell-${a.name}`,lm({key:0,ref_for:!0},{...r,col:a}),void 0,!0):(V(),ne(vn,{key:1,props:{...r,col:a,value:r.row[a.field]}},{default:L(()=>[Re(le(r.row[a.field]),1)]),_:2},1032,["props"]))],64))),128))]),_:2},1032,["props","onClick"])),rn((V(),ne(ea,{key:`xp-${r.key}`,props:r,class:"q-virtual-scroll--with-prev"},{default:L(()=>[I(vn,{colspan:r.cols.length+1},{default:L(()=>[oi(t.$slots,"row-expand",Al(ql(r)),void 0,!0)]),_:2},1032,["colspan"])]),_:2},1032,["props"])),[[cm,r.expand]])]),key:"2"}:void 0,Je(i.forwardedSlotNames,r=>({name:r,fn:L(a=>[oi(t.$slots,r,Al(ql(a)),void 0,!0)])}))]),1032,["rows","columns","expanded","filter","style"])])}const tg=Me(NS,[["render",$S],["__scopeId","data-v-69ac7669"],["__file","BaseTable.vue"]]),jn=ze({name:"QCardSection",props:{tag:{type:String,default:"div"},horizontal:Boolean},setup(t,{slots:e}){const n=g(()=>`q-card__section q-card__section--${t.horizontal===!0?"horiz row no-wrap":"vert"}`);return()=>w(t.tag,{class:n.value},Ge(e.default))}}),Ki=ze({name:"QCard",props:{...un,tag:{type:String,default:"div"},square:Boolean,flat:Boolean,bordered:Boolean},setup(t,{slots:e}){const{proxy:{$q:n}}=$e(),i=dn(t,n),o=g(()=>"q-card"+(i.value===!0?" q-card--dark q-dark":"")+(t.bordered===!0?" q-card--bordered":"")+(t.square===!0?" q-card--square no-border-radius":"")+(t.flat===!0?" q-card--flat no-shadow":""));return()=>w(t.tag,{class:o.value},Ge(e.default))}}),Yu="q-slider__marker-labels",US=t=>({value:t}),YS=({marker:t})=>w("div",{key:t.value,style:t.style,class:t.classes},t.label),ng=[34,37,40,33,39,38],ZS={...un,...mr,min:{type:Number,default:0},max:{type:Number,default:100},innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:t=>t>=0},snap:Boolean,vertical:Boolean,reverse:Boolean,color:String,markerLabelsClass:String,label:Boolean,labelColor:String,labelTextColor:String,labelAlways:Boolean,switchLabelSide:Boolean,markers:[Boolean,Number],markerLabels:[Boolean,Array,Object,Function],switchMarkerLabelsSide:Boolean,trackImg:String,trackColor:String,innerTrackImg:String,innerTrackColor:String,selectionColor:String,selectionImg:String,thumbSize:{type:String,default:"20px"},trackSize:{type:String,default:"4px"},disable:Boolean,readonly:Boolean,dense:Boolean,tabindex:[String,Number],thumbColor:String,thumbPath:{type:String,default:"M 4, 10 a 6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"}},XS=["pan","update:modelValue","change"];function KS({updateValue:t,updatePosition:e,getDragging:n,formAttrs:i}){const{props:o,emit:s,slots:r,proxy:{$q:a}}=$e(),l=dn(o,a),c=Bf(i),u=N(!1),d=N(!1),h=N(!1),f=N(!1),m=g(()=>o.vertical===!0?"--v":"--h"),p=g(()=>"-"+(o.switchLabelSide===!0?"switched":"standard")),v=g(()=>o.vertical===!0?o.reverse===!0:o.reverse!==(a.lang.rtl===!0)),b=g(()=>isNaN(o.innerMin)===!0||o.innerMinisNaN(o.innerMax)===!0||o.innerMax>o.max?o.max:o.innerMax),y=g(()=>o.disable!==!0&&o.readonly!==!0&&b.value{if(o.step===0)return me=>me;const W=(String(o.step).trim().split(".")[1]||"").length;return me=>parseFloat(me.toFixed(W))}),C=g(()=>o.step===0?1:o.step),S=g(()=>y.value===!0?o.tabindex||0:-1),E=g(()=>o.max-o.min),A=g(()=>x.value-b.value),O=g(()=>Xe(b.value)),P=g(()=>Xe(x.value)),q=g(()=>o.vertical===!0?v.value===!0?"bottom":"top":v.value===!0?"right":"left"),M=g(()=>o.vertical===!0?"height":"width"),H=g(()=>o.vertical===!0?"width":"height"),z=g(()=>o.vertical===!0?"vertical":"horizontal"),$=g(()=>{const W={role:"slider","aria-valuemin":b.value,"aria-valuemax":x.value,"aria-orientation":z.value,"data-step":o.step};return o.disable===!0?W["aria-disabled"]="true":o.readonly===!0&&(W["aria-readonly"]="true"),W}),U=g(()=>`q-slider q-slider${m.value} q-slider--${u.value===!0?"":"in"}active inline no-wrap `+(o.vertical===!0?"row":"column")+(o.disable===!0?" disabled":" q-slider--enabled"+(y.value===!0?" q-slider--editable":""))+(h.value==="both"?" q-slider--focus":"")+(o.label||o.labelAlways===!0?" q-slider--label":"")+(o.labelAlways===!0?" q-slider--label-always":"")+(l.value===!0?" q-slider--dark":"")+(o.dense===!0?" q-slider--dense q-slider--dense"+m.value:""));function G(W){const me="q-slider__"+W;return`${me} ${me}${m.value} ${me}${m.value}${p.value}`}function Y(W){const me="q-slider__"+W;return`${me} ${me}${m.value}`}const te=g(()=>{const W=o.selectionColor||o.color;return"q-slider__selection absolute"+(W!==void 0?` text-${W}`:"")}),de=g(()=>Y("markers")+" absolute overflow-hidden"),D=g(()=>Y("track-container")),T=g(()=>G("pin")),Q=g(()=>G("label")),ae=g(()=>G("text-container")),fe=g(()=>G("marker-labels-container")+(o.markerLabelsClass!==void 0?` ${o.markerLabelsClass}`:"")),B=g(()=>"q-slider__track relative-position no-outline"+(o.trackColor!==void 0?` bg-${o.trackColor}`:"")),J=g(()=>{const W={[H.value]:o.trackSize};return o.trackImg!==void 0&&(W.backgroundImage=`url(${o.trackImg}) !important`),W}),we=g(()=>"q-slider__inner absolute"+(o.innerTrackColor!==void 0?` bg-${o.innerTrackColor}`:"")),Z=g(()=>{const W=P.value-O.value,me={[q.value]:`${100*O.value}%`,[M.value]:W===0?"2px":`${100*W}%`};return o.innerTrackImg!==void 0&&(me.backgroundImage=`url(${o.innerTrackImg}) !important`),me});function Ee(W){const{min:me,max:ke,step:He}=o;let nt=me+W*(ke-me);if(He>0){const Ft=(nt-b.value)%He;nt+=(Math.abs(Ft)>=He/2?(Ft<0?-1:1)*He:0)-Ft}return nt=_.value(nt),Pi(nt,b.value,x.value)}function Xe(W){return E.value===0?0:(W-o.min)/E.value}function _t(W,me){const ke=Es(W),He=o.vertical===!0?Pi((ke.top-me.top)/me.height,0,1):Pi((ke.left-me.left)/me.width,0,1);return Pi(v.value===!0?1-He:He,O.value,P.value)}const et=g(()=>To(o.markers)===!0?o.markers:C.value),dt=g(()=>{const W=[],me=et.value,ke=o.max;let He=o.min;do W.push(He),He+=me;while(He{const W=` ${Yu}${m.value}-`;return Yu+`${W}${o.switchMarkerLabelsSide===!0?"switched":"standard"}${W}${v.value===!0?"rtl":"ltr"}`}),ht=g(()=>o.markerLabels===!1?null:$t(o.markerLabels).map((W,me)=>({index:me,value:W.value,label:W.label||W.value,classes:mt.value+(W.classes!==void 0?" "+W.classes:""),style:{...Ot(W.value),...W.style||{}}}))),It=g(()=>({markerList:ht.value,markerMap:ct.value,classes:mt.value,getStyle:Ot})),Dt=g(()=>{const W=A.value===0?"2px":100*et.value/A.value;return{...Z.value,backgroundSize:o.vertical===!0?`2px ${W}%`:`${W}% 2px`}});function $t(W){if(W===!1)return null;if(W===!0)return dt.value.map(US);if(typeof W=="function")return dt.value.map(ke=>{const He=W(ke);return ks(He)===!0?{...He,value:ke}:{value:ke,label:He}});const me=({value:ke})=>ke>=o.min&&ke<=o.max;return Array.isArray(W)===!0?W.map(ke=>ks(ke)===!0?ke:{value:ke}).filter(me):Object.keys(W).map(ke=>{const He=W[ke],nt=Number(ke);return ks(He)===!0?{...He,value:nt}:{value:nt,label:He}}).filter(me)}function Ot(W){return{[q.value]:`${100*(W-o.min)/E.value}%`}}const ct=g(()=>{if(o.markerLabels===!1)return null;const W={};return ht.value.forEach(me=>{W[me.value]=me}),W});function j(){if(r["marker-label-group"]!==void 0)return r["marker-label-group"](It.value);const W=r["marker-label"]||YS;return ht.value.map(me=>W({marker:me,...It.value}))}const re=g(()=>[[Im,X,void 0,{[z.value]:!0,prevent:!0,stop:!0,mouse:!0,mouseAllDir:!0}]]);function X(W){W.isFinal===!0?(f.value!==void 0&&(e(W.evt),W.touch===!0&&t(!0),f.value=void 0,s("pan","end")),u.value=!1,h.value=!1):W.isFirst===!0?(f.value=n(W.evt),e(W.evt),t(),u.value=!0,s("pan","start")):(e(W.evt),t())}function ce(){h.value=!1}function Oe(W){e(W,n(W)),t(),d.value=!0,u.value=!0,document.addEventListener("mouseup",ye,!0)}function ye(){d.value=!1,u.value=!1,t(!0),ce(),document.removeEventListener("mouseup",ye,!0)}function Pe(W){e(W,n(W)),t(!0)}function ot(W){ng.includes(W.keyCode)&&t(!0)}function tt(W){if(o.vertical===!0)return null;const me=a.lang.rtl!==o.reverse?1-W:W;return{transform:`translateX(calc(${2*me-1} * ${o.thumbSize} / 2 + ${50-100*me}%))`}}function vt(W){const me=g(()=>d.value===!1&&(h.value===W.focusValue||h.value==="both")?" q-slider--focus":""),ke=g(()=>`q-slider__thumb q-slider__thumb${m.value} q-slider__thumb${m.value}-${v.value===!0?"rtl":"ltr"} absolute non-selectable`+me.value+(W.thumbColor.value!==void 0?` text-${W.thumbColor.value}`:"")),He=g(()=>({width:o.thumbSize,height:o.thumbSize,[q.value]:`${100*W.ratio.value}%`,zIndex:h.value===W.focusValue?2:void 0})),nt=g(()=>W.labelColor.value!==void 0?` text-${W.labelColor.value}`:""),Ft=g(()=>tt(W.ratio.value)),Qt=g(()=>"q-slider__text"+(W.labelTextColor.value!==void 0?` text-${W.labelTextColor.value}`:""));return()=>{const Dn=[w("svg",{class:"q-slider__thumb-shape absolute-full",viewBox:"0 0 20 20","aria-hidden":"true"},[w("path",{d:o.thumbPath})]),w("div",{class:"q-slider__focus-ring fit"})];return(o.label===!0||o.labelAlways===!0)&&(Dn.push(w("div",{class:T.value+" absolute fit no-pointer-events"+nt.value},[w("div",{class:Q.value,style:{minWidth:o.thumbSize}},[w("div",{class:ae.value,style:Ft.value},[w("span",{class:Qt.value},W.label.value)])])])),o.name!==void 0&&o.disable!==!0&&c(Dn,"push")),w("div",{class:ke.value,style:He.value,...W.getNodeData()},Dn)}}function Vt(W,me,ke,He){const nt=[];o.innerTrackColor!=="transparent"&&nt.push(w("div",{key:"inner",class:we.value,style:Z.value})),o.selectionColor!=="transparent"&&nt.push(w("div",{key:"selection",class:te.value,style:W.value})),o.markers!==!1&&nt.push(w("div",{key:"marker",class:de.value,style:Dt.value})),He(nt);const Ft=[nr("div",{key:"trackC",class:D.value,tabindex:me.value,...ke.value},[w("div",{class:B.value,style:J.value},nt)],"slide",y.value,()=>re.value)];if(o.markerLabels!==!1){const Qt=o.switchMarkerLabelsSide===!0?"unshift":"push";Ft[Qt](w("div",{key:"markerL",class:fe.value},j()))}return Ft}return Lt(()=>{document.removeEventListener("mouseup",ye,!0)}),{state:{active:u,focus:h,preventFocus:d,dragging:f,editable:y,classes:U,tabindex:S,attributes:$,roundValueFn:_,keyStep:C,trackLen:E,innerMin:b,innerMinRatio:O,innerMax:x,innerMaxRatio:P,positionProp:q,sizeProp:M,isReversed:v},methods:{onActivate:Oe,onMobileClick:Pe,onBlur:ce,onKeyup:ot,getContent:Vt,getThumbRenderFn:vt,convertRatioToModel:Ee,convertModelToRatio:Xe,getDraggingRatio:_t}}}const QS=()=>({}),Qs=ze({name:"QSlider",props:{...ZS,modelValue:{required:!0,default:null,validator:t=>typeof t=="number"||t===null},labelValue:[String,Number]},emits:XS,setup(t,{emit:e}){const{proxy:{$q:n}}=$e(),{state:i,methods:o}=KS({updateValue:m,updatePosition:v,getDragging:p,formAttrs:sS(t)}),s=N(null),r=N(0),a=N(0);function l(){a.value=t.modelValue===null?i.innerMin.value:Pi(t.modelValue,i.innerMin.value,i.innerMax.value)}ge(()=>`${t.modelValue}|${i.innerMin.value}|${i.innerMax.value}`,l),l();const c=g(()=>o.convertModelToRatio(a.value)),u=g(()=>i.active.value===!0?r.value:c.value),d=g(()=>{const y={[i.positionProp.value]:`${100*i.innerMinRatio.value}%`,[i.sizeProp.value]:`${100*(u.value-i.innerMinRatio.value)}%`};return t.selectionImg!==void 0&&(y.backgroundImage=`url(${t.selectionImg}) !important`),y}),h=o.getThumbRenderFn({focusValue:!0,getNodeData:QS,ratio:u,label:g(()=>t.labelValue!==void 0?t.labelValue:a.value),thumbColor:g(()=>t.thumbColor||t.color),labelColor:g(()=>t.labelColor),labelTextColor:g(()=>t.labelTextColor)}),f=g(()=>i.editable.value!==!0?{}:n.platform.is.mobile===!0?{onClick:o.onMobileClick}:{onMousedown:o.onActivate,onFocus:b,onBlur:o.onBlur,onKeydown:x,onKeyup:o.onKeyup});function m(y){a.value!==t.modelValue&&e("update:modelValue",a.value),y===!0&&e("change",a.value)}function p(){return s.value.getBoundingClientRect()}function v(y,_=i.dragging.value){const C=o.getDraggingRatio(y,_);a.value=o.convertRatioToModel(C),r.value=t.snap!==!0||t.step===0?C:o.convertModelToRatio(a.value)}function b(){i.focus.value=!0}function x(y){if(!ng.includes(y.keyCode))return;Pt(y);const _=([34,33].includes(y.keyCode)?10:1)*i.keyStep.value,C=([34,37,40].includes(y.keyCode)?-1:1)*(i.isReversed.value===!0?-1:1)*(t.vertical===!0?-1:1)*_;a.value=Pi(i.roundValueFn.value(a.value+C),i.innerMin.value,i.innerMax.value),m()}return()=>{const y=o.getContent(d,i.tabindex,f,_=>{_.push(h())});return w("div",{ref:s,class:i.classes.value+(t.modelValue===null?" q-slider--no-value":""),...i.attributes.value,"aria-valuenow":t.modelValue},y)}}}),GS=Se({name:"SliderDouble",__name:"SliderDouble",props:{modelValue:{type:Number,required:!1,default:-1},readonly:{type:Boolean,default:!1},chargeMode:{type:String,default:""},limitMode:{type:String,default:"soc"},currentValue:{type:Number,default:0},targetTime:{type:String,required:!1,default:void 0}},emits:["update:modelValue"],setup(t,{expose:e,emit:n}){e();const i=n,o=t,s=g({get:()=>o.modelValue,set:u=>{o.readonly||i("update:modelValue",u)}}),r=g(()=>s.value>=0&&o.limitMode!=="none"),a=g(()=>["soc","none"].includes(o.limitMode)?100:s.value),c={emit:i,props:o,target:s,targetSet:r,maxValue:a,formatEnergy:u=>u>=1e3?(u/1e3).toFixed(2)+" kWh":u.toFixed(0)+" Wh"};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),JS={class:"double-slider-container"},ew={class:"slider-container"},tw={class:"row justify-between no-wrap"},nw={class:"col"},iw={key:0,class:"col text-center"},ow={key:1,class:"col text-right"};function sw(t,e,n,i,o,s){return V(),K("div",JS,[R("div",ew,[I(Qs,{"model-value":n.currentValue,min:0,max:i.maxValue,markers:i.props.limitMode=="amount"?1e4:10,color:"green-7",class:"current-slider","track-size":"1.5em","thumb-size":"0px",readonly:"","no-focus":"",onTouchstart:e[0]||(e[0]=tn(()=>{},["stop"])),onTouchmove:e[1]||(e[1]=tn(()=>{},["stop"])),onTouchend:e[2]||(e[2]=tn(()=>{},["stop"]))},null,8,["model-value","max","markers"]),i.props.limitMode=="soc"?(V(),ne(Qs,{key:0,modelValue:i.target,"onUpdate:modelValue":e[3]||(e[3]=r=>i.target=r),min:0,max:100,color:"light-green-5","inner-track-color":"blue-grey-2",class:"target-slider","track-size":"1.5em","thumb-size":i.props.readonly?"0":"2em",readonly:i.props.readonly,onTouchstart:e[4]||(e[4]=tn(()=>{},["stop"])),onTouchmove:e[5]||(e[5]=tn(()=>{},["stop"])),onTouchend:e[6]||(e[6]=tn(()=>{},["stop"]))},null,8,["modelValue","thumb-size","readonly"])):ue("",!0)]),R("div",tw,[R("div",nw,[R("div",null,le(i.props.limitMode=="amount"?"Geladen":"Ladestand"),1),R("div",null,[Re(le(i.props.limitMode=="amount"?i.formatEnergy(n.currentValue):n.currentValue+"%")+" ",1),oi(t.$slots,"update-soc-icon",{},void 0)])]),i.props.targetTime?(V(),K("div",iw,[e[7]||(e[7]=R("div",null,"Zielzeit",-1)),R("div",null,le(i.props.targetTime),1)])):ue("",!0),i.targetSet?(V(),K("div",ow,[R("div",null,le(i.props.limitMode=="soc"?"Ladeziel":"Energieziel"),1),R("div",null,le(i.props.limitMode=="soc"?i.target+"%":i.target/1e3+" kWh"),1)])):ue("",!0)])])}const ml=Me(GS,[["render",sw],["__scopeId","data-v-0e0e7cf9"],["__file","SliderDouble.vue"]]),vr=ze({name:"QToggle",props:{...Qf,icon:String,iconColor:String},emits:Gf,setup(t){function e(n,i){const o=g(()=>(n.value===!0?t.checkedIcon:i.value===!0?t.indeterminateIcon:t.uncheckedIcon)||t.icon),s=g(()=>n.value===!0?t.iconColor:null);return()=>[w("div",{class:"q-toggle__track"}),w("div",{class:"q-toggle__thumb absolute flex flex-center no-wrap"},o.value!==void 0?[w(_e,{name:o.value,color:s.value})]:void 0)]}return Jf("toggle",e)}}),rw=Se({__name:"ChargePointLock",props:{chargePointId:{type:Number,required:!0},readonly:{type:Boolean,default:!1},dense:{type:Boolean,default:!1}},setup(t,{expose:e}){e();const n=t,i=Be(),o=i.chargePointManualLock(n.chargePointId),s={props:n,mqttStore:i,locked:o};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}});function aw(t,e,n,i,o,s){return i.props.readonly?(V(),ne(_e,{key:0,name:i.locked?"lock":"lock_open",size:"sm",color:i.locked?"negative":"positive"},null,8,["name","color"])):(V(),ne(vr,{key:1,modelValue:i.locked,"onUpdate:modelValue":e[0]||(e[0]=r=>i.locked=r),color:i.locked?"primary":"positive","checked-icon":"lock","unchecked-icon":"lock_open",size:"lg",dense:i.props.dense},{default:L(()=>[I(an,null,{default:L(()=>[Re(le(i.locked?"Ladepunkt gesperrt":"Ladepunkt entsperrt"),1)]),_:1})]),_:1},8,["modelValue","color","dense"]))}const ig=Me(rw,[["render",aw],["__file","ChargePointLock.vue"]]),lw=Se({__name:"ChargePointStateIcon",props:{chargePointId:{},vehicleId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>n.vehicleId!==void 0?i.vehicleConnectionState(n.vehicleId).some(l=>l.plugged):n.chargePointId!==void 0?i.chargePointPlugState(n.chargePointId):!1),s=g(()=>n.vehicleId!==void 0?i.vehicleConnectionState(n.vehicleId).some(l=>l.charging):n.chargePointId!==void 0?i.chargePointChargeState(n.chargePointId):!1),r={props:n,mqttStore:i,plugState:o,chargeState:s};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function cw(t,e,n,i,o,s){return V(),ne(_e,{name:i.plugState?"power":"power_off",size:"sm",color:i.plugState?i.chargeState?"positive":"warning":"negative"},{default:L(()=>[I(an,null,{default:L(()=>[Re(le(i.plugState?i.chargeState?"Lädt":"Angesteckt, lädt nicht":"Nicht angesteckt"),1)]),_:1})]),_:1},8,["name","color"])}const vl=Me(lw,[["render",cw],["__file","ChargePointStateIcon.vue"]]),uw=Se({__name:"ChargePointPriority",props:{chargePointId:{type:Number,required:!0},readonly:{type:Boolean,default:!1},dense:{type:Boolean,default:!1}},setup(t,{expose:e}){e();const n=t,i={off:"star_border",on:"star"},o=Be(),s=o.chargePointConnectedVehiclePriority(n.chargePointId),r={props:n,icon:i,mqttStore:o,priority:s};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function dw(t,e,n,i,o,s){return i.props.readonly?(V(),ne(_e,{key:0,name:i.priority?i.icon.on:i.icon.off,color:i.priority?"warning":"",size:"sm"},null,8,["name","color"])):(V(),ne(vr,{key:1,modelValue:i.priority,"onUpdate:modelValue":e[0]||(e[0]=r=>i.priority=r),color:i.priority?"primary":"","checked-icon":i.icon.on,"unchecked-icon":i.icon.off,size:"lg",dense:i.props.dense},{default:L(()=>[I(an,null,{default:L(()=>[Re(le(i.priority?"Fahrzeug priorisiert":"Fahrzeug nicht priorisiert"),1)]),_:1})]),_:1},8,["modelValue","color","checked-icon","unchecked-icon","dense"]))}const og=Me(uw,[["render",dw],["__file","ChargePointPriority.vue"]]),hw=Object.keys(wd);function fw(t){return hw.reduce((e,n)=>{const i=t[n];return i!==void 0&&(e[n]=i),e},{})}const sg=ze({name:"QBtnDropdown",props:{...wd,...Fa,modelValue:Boolean,split:Boolean,dropdownIcon:String,contentClass:[Array,String,Object],contentStyle:[Array,String,Object],cover:Boolean,persistent:Boolean,noRouteDismiss:Boolean,autoClose:Boolean,menuAnchor:{type:String,default:"bottom end"},menuSelf:{type:String,default:"top end"},menuOffset:Array,disableMainBtn:Boolean,disableDropdown:Boolean,noIconAnimation:Boolean,toggleAriaLabel:String},emits:["update:modelValue","click","beforeShow","show","beforeHide","hide"],setup(t,{slots:e,emit:n}){const{proxy:i}=$e(),o=N(t.modelValue),s=N(null),r=Ff(),a=g(()=>{const _={"aria-expanded":o.value===!0?"true":"false","aria-haspopup":"true","aria-controls":r.value,"aria-label":t.toggleAriaLabel||i.$q.lang.label[o.value===!0?"collapse":"expand"](t.label)};return(t.disable===!0||t.split===!1&&t.disableMainBtn===!0||t.disableDropdown===!0)&&(_["aria-disabled"]="true"),_}),l=g(()=>"q-btn-dropdown__arrow"+(o.value===!0&&t.noIconAnimation===!1?" rotate-180":"")+(t.split===!1?" q-btn-dropdown__arrow-container":"")),c=g(()=>um(t)),u=g(()=>fw(t));ge(()=>t.modelValue,_=>{s.value!==null&&s.value[_?"show":"hide"]()}),ge(()=>t.split,y);function d(_){o.value=!0,n("beforeShow",_)}function h(_){n("show",_),n("update:modelValue",!0)}function f(_){o.value=!1,n("beforeHide",_)}function m(_){n("hide",_),n("update:modelValue",!1)}function p(_){n("click",_)}function v(_){wn(_),y(),n("click",_)}function b(_){s.value!==null&&s.value.toggle(_)}function x(_){s.value!==null&&s.value.show(_)}function y(_){s.value!==null&&s.value.hide(_)}return Object.assign(i,{show:x,hide:y,toggle:b}),cn(()=>{t.modelValue===!0&&x()}),()=>{const _=[w(_e,{class:l.value,name:t.dropdownIcon||i.$q.iconSet.arrow.dropdown})];return t.disableDropdown!==!0&&_.push(w(Kf,{ref:s,id:r.value,class:t.contentClass,style:t.contentStyle,cover:t.cover,fit:!0,persistent:t.persistent,noRouteDismiss:t.noRouteDismiss,autoClose:t.autoClose,anchor:t.menuAnchor,self:t.menuSelf,offset:t.menuOffset,separateClosePopup:!0,transitionShow:t.transitionShow,transitionHide:t.transitionHide,transitionDuration:t.transitionDuration,onBeforeShow:d,onShow:h,onBeforeHide:f,onHide:m},e.default)),t.split===!1?w(Ve,{class:"q-btn-dropdown q-btn-dropdown--simple",...u.value,...a.value,disable:t.disable===!0||t.disableMainBtn===!0,noWrap:!0,round:!1,onClick:p},{default:()=>Ge(e.label,[]).concat(_),loading:e.loading}):w(pn,{class:"q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item",rounded:t.rounded,square:t.square,...c.value,glossy:t.glossy,stretch:t.stretch},()=>[w(Ve,{class:"q-btn-dropdown--current",...u.value,disable:t.disable===!0||t.disableMainBtn===!0,noWrap:!0,round:!1,onClick:v},{default:e.label,loading:e.loading}),w(Ve,{class:"q-btn-dropdown__arrow-container q-anchor--skip",...a.value,...c.value,disable:t.disable===!0||t.disableDropdown===!0,rounded:t.rounded,color:t.color,textColor:t.textColor,dense:t.dense,size:t.size,padding:t.padding,ripple:t.ripple},()=>_)])}}}),gw=Se({__name:"ChargePointModeButtons",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=g(()=>La.is.mobile),{chargeModes:o}=ul(),s=Be(),r=g(()=>s.chargePointConnectedVehicleChargeMode(n.chargePointId)),a=g(()=>o.find(c=>c.value===r.value.value)?.label),l={props:n,isMobile:i,chargeModes:o,mqttStore:s,chargeMode:r,currentModeLabel:a};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),mw={key:0,class:"q-pt-md full-width"};function vw(t,e,n,i,o,s){return i.isMobile?(V(),K("div",mw,[I(sg,{"transition-show":"scale","transition-hide":"scale","transition-duration":"500",class:"full-width",color:"primary",label:i.currentModeLabel,size:"lg","dropdown-icon":"none",cover:"",push:""},{default:L(()=>[I(ir,null,{default:L(()=>[(V(!0),K(De,null,Je(i.chargeModes,(r,a)=>(V(),K(De,{key:r.value},[rn((V(),ne(or,{clickable:"",onClick:l=>i.chargeMode.value=r.value,active:i.chargeMode.value===r.value,"active-class":"bg-primary text-white"},{default:L(()=>[I(Do,{class:"text-center text-weight-bold"},{default:L(()=>[I(sr,null,{default:L(()=>[Re(le(r.label.toLocaleUpperCase()),1)]),_:2},1024)]),_:2},1024)]),_:2},1032,["onClick","active"])),[[Mn]]),a[(V(!0),K(De,null,Je(i.chargeModes,r=>(V(),ne(Ve,{key:r.value,color:i.chargeMode.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"flex-grow",onClick:a=>i.chargeMode.value=r.value},null,8,["color","label","onClick"]))),128))]),_:1}))}const rg=Me(gw,[["render",vw],["__scopeId","data-v-674981ff"],["__file","ChargePointModeButtons.vue"]]),pw=Se({__name:"ChargePointStateMessage",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>i.chargePointStateMessage(n.chargePointId)),s={props:n,mqttStore:i,message:o};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),bw={class:"row q-mt-sm q-pa-sm bg-primary text-white no-wrap message-text",color:"primary",style:{"border-radius":"10px"}};function yw(t,e,n,i,o,s){return V(),K("div",bw,[I(_e,{name:"info",size:"sm",class:"q-mr-xs"}),Re(" "+le(i.message),1)])}const _w=Me(pw,[["render",yw],["__scopeId","data-v-31323cae"],["__file","ChargePointStateMessage.vue"]]),xw=Se({__name:"ChargePointFaultMessage",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>i.chargePointFaultState(n.chargePointId)),s=g(()=>i.chargePointFaultMessage(n.chargePointId)),r=g(()=>{switch(o.value){case 1:return"bg-warning";case 2:return"bg-negative";default:return"bg-primary"}}),a=g(()=>{switch(o.value){case 1:return"warning";case 2:return"error";default:return"info"}}),l={props:n,mqttStore:i,state:o,message:s,messageClass:r,iconName:a};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}});function Sw(t,e,n,i,o,s){return i.state!==void 0&&i.state!==0?(V(),K("div",{key:0,class:Et(["row q-mt-sm q-pa-sm text-white no-wrap",i.messageClass]),style:{"border-radius":"10px"}},[I(_e,{name:i.iconName,size:"sm",class:"q-mr-xs"},null,8,["name"]),Re(" "+le(i.message),1)],2)):ue("",!0)}const ww=Me(xw,[["render",Sw],["__file","ChargePointFaultMessage.vue"]]),kw=Se({__name:"ChargePointVehicleSelect",props:{chargePointId:{type:Number,required:!0},readonly:{type:Boolean,default:!1}},setup(t,{expose:e}){e();const n=t,i=Be(),o=i.chargePointConnectedVehicleInfo(n.chargePointId),s=g(()=>i.vehicleList),r={props:n,mqttStore:i,connectedVehicle:o,vehicles:s};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Cw={key:0,class:"q-mx-sm"};function Mw(t,e,n,i,o,s){return i.props.readonly?(V(),K("div",Cw,le(i.connectedVehicle?.name),1)):(V(),ne(sg,{key:1,color:"grey",label:i.connectedVehicle?.name,icon:"directions_car",dense:"","no-caps":"",class:"flex-grow"},{default:L(()=>[I(ir,null,{default:L(()=>[(V(!0),K(De,null,Je(i.vehicles,r=>rn((V(),ne(or,{key:r.id,clickable:"",dense:"",onClick:a=>i.connectedVehicle=r},{default:L(()=>[I(Do,null,{default:L(()=>[I(sr,null,{default:L(()=>[Re(le(r.name),1)]),_:2},1024)]),_:2},1024)]),_:2},1032,["onClick"])),[[Mn]])),128))]),_:1})]),_:1},8,["label"]))}const ag=Me(kw,[["render",Mw],["__scopeId","data-v-ca7bfd56"],["__file","ChargePointVehicleSelect.vue"]]),lg=ze({name:"QSpace",setup(){const t=w("div",{class:"q-space"});return()=>t}}),pl=ze({name:"QCardActions",props:{...dm,vertical:Boolean},setup(t,{slots:e}){const n=hm(t),i=g(()=>`q-card__actions ${n.value} q-card__actions--${t.vertical===!0?"vert column":"horiz row"}`);return()=>w("div",{class:i.value},Ge(e.default))}}),Pw=Se({name:"SliderStandard",__name:"SliderStandard",props:{title:{type:String,default:"title"},modelValue:{type:Number},max:{type:Number,required:!0},min:{type:Number,required:!0},step:{type:Number,default:1},unit:{type:String,default:""},offValueRight:{type:Number,default:105},offValueLeft:{type:Number,default:-1},discreteValues:{type:Array,default:void 0}},emits:["update:model-value"],setup(t,{expose:e,emit:n}){e();const i=t,o=n,s=N(i.modelValue),r=N(null),a=g(()=>s.value!==i.modelValue),l=g({get:()=>{if(i.discreteValues){const m=i.discreteValues.indexOf(s.value??i.discreteValues[0]);return m>=0?m:0}return s.value},set:m=>{r.value&&clearTimeout(r.value),i.discreteValues?s.value=i.discreteValues[m]:s.value=m}}),c=m=>{a.value&&(r.value&&clearTimeout(r.value),r.value=setTimeout(()=>{o("update:model-value",i.discreteValues?i.discreteValues[m]:m)},2e3))},u=g(()=>{const m=i.discreteValues&&l.value!==void 0?i.discreteValues[l.value]:l.value;return m===i.offValueLeft||m===i.offValueRight?"Aus":m}),d=g(()=>{const m=i.discreteValues&&l.value!==void 0?i.discreteValues[l.value]:l.value;return m===i.offValueLeft||m===i.offValueRight?"":i.unit});ge(()=>i.modelValue,m=>{s.value=m}),Lt(()=>{if(r.value){clearTimeout(r.value);const m=l.value!==void 0?l.value:0;o("update:model-value",i.discreteValues?i.discreteValues[m]:m)}});const h=g(()=>a.value?"pending":""),f={props:i,emit:o,tempValue:s,updateTimeout:r,updatePending:a,value:l,updateValue:c,displayValue:u,displayUnit:d,myClass:h};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),Tw={class:"text-subtitle2"},Iw={class:"row items-center justify-between q-ml-sm"};function Dw(t,e,n,i,o,s){return V(),K("div",null,[R("div",null,[R("div",Tw,le(i.props.title),1)]),R("div",Iw,[I(Qs,{modelValue:i.value,"onUpdate:modelValue":e[0]||(e[0]=r=>i.value=r),min:i.props.discreteValues?0:i.props.min,max:i.props.discreteValues?i.props.discreteValues.length-1:i.props.max,step:i.props.step,color:"primary",style:{width:"75%"},"track-size":"0.5em","thumb-size":"1.7em",onTouchstart:e[1]||(e[1]=tn(()=>{},["stop"])),onTouchmove:e[2]||(e[2]=tn(()=>{},["stop"])),onTouchend:e[3]||(e[3]=tn(()=>{},["stop"])),onChange:i.updateValue},null,8,["modelValue","min","max","step"]),R("div",{class:Et(["q-ml-md no-wrap",i.myClass])},le(i.displayValue)+" "+le(i.displayUnit),3)])])}const bl=Me(Pw,[["render",Dw],["__scopeId","data-v-d1d2b5c9"],["__file","SliderStandard.vue"]]),Ow=Se({__name:"ChargePointInstantSettings",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>{let p=[{value:"none",label:"keine",color:"primary"},{value:"soc",label:"EV-SoC",color:"primary"},{value:"amount",label:"Energiemenge",color:"primary"}];return s.value===void 0&&(p=p.filter(v=>v.value!=="soc")),p}),s=g(()=>i.chargePointConnectedVehicleSocType(n.chargePointId))?.value,r=[{value:1,label:"1"},{value:3,label:"Maximum"}],a=g(()=>i.chargePointConnectedVehicleInstantChargeCurrent(n.chargePointId)),l=g(()=>i.dcChargingEnabled),c=g(()=>i.chargePointConnectedVehicleInstantDcChargePower(n.chargePointId)),u=g(()=>i.chargePointConnectedVehicleInstantChargePhases(n.chargePointId)),d=g(()=>i.chargePointConnectedVehicleInstantChargeLimit(n.chargePointId)),h=g(()=>i.chargePointConnectedVehicleInstantChargeLimitSoC(n.chargePointId)),f=g(()=>i.chargePointConnectedVehicleInstantChargeLimitEnergy(n.chargePointId)),m={props:n,mqttStore:i,limitModes:o,vehicleSocType:s,phaseOptions:r,instantChargeCurrent:a,dcCharging:l,instantChargeCurrentDc:c,numPhases:u,limitMode:d,limitSoC:h,limitEnergy:f,SliderStandard:bl};return Object.defineProperty(m,"__isScriptSetup",{enumerable:!1,value:!0}),m}}),Vw={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"},Ew={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"};function Aw(t,e,n,i,o,s){return V(),K(De,null,[I(i.SliderStandard,{title:"Stromstärke",min:6,max:32,unit:"A",modelValue:i.instantChargeCurrent.value,"onUpdate:modelValue":e[0]||(e[0]=r=>i.instantChargeCurrent.value=r),class:"q-mt-sm"},null,8,["modelValue"]),i.dcCharging?(V(),ne(i.SliderStandard,{key:0,title:"DC-Sollleistung",min:4,max:300,unit:"kW",modelValue:i.instantChargeCurrentDc.value,"onUpdate:modelValue":e[1]||(e[1]=r=>i.instantChargeCurrentDc.value=r),class:"q-mt-sm"},null,8,["modelValue"])):ue("",!0),e[4]||(e[4]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Anzahl Phasen",-1)),R("div",Vw,[I(pn,{class:"col"},{default:L(()=>[(V(),K(De,null,Je(i.phaseOptions,r=>I(Ve,{key:r.value,color:i.numPhases.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.numPhases.value=r.value},null,8,["color","label","onClick"])),64))]),_:1})]),e[5]||(e[5]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Begrenzung",-1)),R("div",Ew,[I(pn,{class:"col"},{default:L(()=>[(V(!0),K(De,null,Je(i.limitModes,r=>(V(),ne(Ve,{key:r.value,color:i.limitMode.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.limitMode.value=r.value},null,8,["color","label","onClick"]))),128))]),_:1})]),i.limitMode.value==="soc"?(V(),ne(i.SliderStandard,{key:1,title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%",modelValue:i.limitSoC.value,"onUpdate:modelValue":e[2]||(e[2]=r=>i.limitSoC.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),i.limitMode.value==="amount"?(V(),ne(i.SliderStandard,{key:2,title:"Energie-Limit",min:1,max:50,unit:"kWh",modelValue:i.limitEnergy.value,"onUpdate:modelValue":e[3]||(e[3]=r=>i.limitEnergy.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0)],64)}const qw=Me(Ow,[["render",Aw],["__scopeId","data-v-f45a6b19"],["__file","ChargePointInstantSettings.vue"]]),Rw=Se({__name:"ToggleStandard",props:{value:{type:Boolean,default:!1},size:{type:String,default:"lg"}},emits:["update:value"],setup(t,{expose:e,emit:n}){e();const i=t,o=n,r={props:i,emit:o,emitValue:a=>{o("update:value",a)}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function Lw(t,e,n,i,o,s){return V(),ne(vr,{"model-value":i.props.value,"onUpdate:modelValue":i.emitValue,color:i.props.value?"positive":"negative",size:i.props.size},null,8,["model-value","color","size"])}const Fw=Me(Rw,[["render",Lw],["__file","ToggleStandard.vue"]]),zw=Se({__name:"ChargePointPvSettings",props:{chargePointId:{}},setup(t,{expose:e}){e();const n=t,i=Be(),o=g(()=>{let C=[{value:"none",label:"keine",color:"primary"},{value:"soc",label:"EV-SoC",color:"primary"},{value:"amount",label:"Energiemenge",color:"primary"}];return s.value===void 0&&(C=C.filter(S=>S.value!=="soc")),C}),s=g(()=>i.chargePointConnectedVehicleSocType(n.chargePointId))?.value,r=[{value:1,label:"1"},{value:3,label:"Maximum"},{value:0,label:"Automatik"}],a=[{value:1,label:"1"},{value:3,label:"Maximum"}],l=g(()=>i.chargePointConnectedVehiclePvChargeMinCurrent(n.chargePointId)),c=g(()=>i.dcChargingEnabled),u=g(()=>i.chargePointConnectedVehiclePvDcChargePower(n.chargePointId)),d=g(()=>i.chargePointConnectedVehiclePvDcMinSocPower(n.chargePointId)),h=g(()=>i.chargePointConnectedVehiclePvChargePhases(n.chargePointId)),f=g(()=>i.chargePointConnectedVehiclePvChargePhasesMinSoc(n.chargePointId)),m=g(()=>i.chargePointConnectedVehiclePvChargeMinSoc(n.chargePointId)),p=g(()=>i.chargePointConnectedVehiclePvChargeMinSocCurrent(n.chargePointId)),v=g(()=>i.chargePointConnectedVehiclePvChargeLimit(n.chargePointId)),b=g(()=>i.chargePointConnectedVehiclePvChargeLimitSoC(n.chargePointId)),x=g(()=>i.chargePointConnectedVehiclePvChargeLimitEnergy(n.chargePointId)),y=g(()=>i.chargePointConnectedVehiclePvChargeFeedInLimit(n.chargePointId)),_={props:n,mqttStore:i,limitModes:o,vehicleSocType:s,phaseOptions:r,phaseOptionsMinSoc:a,pvMinCurrent:l,dcCharging:c,pvMinDcPower:u,pvMinDcMinSocPower:d,numPhases:h,numPhasesMinSoc:f,pvMinSoc:m,pvMinSocCurrent:p,limitMode:v,limitSoC:b,limitEnergy:x,feedInLimit:y,SliderStandard:bl,ToggleStandard:Fw};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),Bw={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"},Nw={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"},Ww={key:3},Hw={class:"row items-center justify-center q-ma-none q-pa-none no-wrap"},jw={class:"row items-center justify-between q-ma-none q-pa-none no-wrap q-mt-md"};function $w(t,e,n,i,o,s){return V(),K(De,null,[I(i.SliderStandard,{title:"Minimaler Dauerstrom",min:-1,max:16,step:1,unit:"A","off-value-left":-1,"discrete-values":[-1,6,7,8,9,10,11,12,13,14,15,16],modelValue:i.pvMinCurrent.value,"onUpdate:modelValue":e[0]||(e[0]=r=>i.pvMinCurrent.value=r),class:"q-mt-md"},null,8,["modelValue"]),i.dcCharging?(V(),ne(i.SliderStandard,{key:0,title:"Minimaler DC-Dauerleistung",min:0,max:300,step:1,unit:"kW",modelValue:i.pvMinDcPower.value,"onUpdate:modelValue":e[1]||(e[1]=r=>i.pvMinDcPower.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),e[10]||(e[10]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Anzahl Phasen",-1)),R("div",Bw,[I(pn,{class:"col"},{default:L(()=>[(V(),K(De,null,Je(i.phaseOptions,r=>I(Ve,{key:r.value,color:i.numPhases.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.numPhases.value=r.value},null,8,["color","label","onClick"])),64))]),_:1})]),e[11]||(e[11]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Begrenzung",-1)),R("div",Nw,[I(pn,{class:"col"},{default:L(()=>[(V(!0),K(De,null,Je(i.limitModes,r=>(V(),ne(Ve,{key:r.value,color:i.limitMode.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.limitMode.value=r.value},null,8,["color","label","onClick"]))),128))]),_:1})]),i.limitMode.value==="soc"?(V(),ne(i.SliderStandard,{key:1,title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%",modelValue:i.limitSoC.value,"onUpdate:modelValue":e[2]||(e[2]=r=>i.limitSoC.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),i.limitMode.value==="amount"?(V(),ne(i.SliderStandard,{key:2,title:"Energie-Limit",min:1,max:50,unit:"kWh",modelValue:i.limitEnergy.value,"onUpdate:modelValue":e[3]||(e[3]=r=>i.limitEnergy.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),i.vehicleSocType!==void 0?(V(),K("div",Ww,[I(i.SliderStandard,{title:"Mindest-SoC für das Fahrzeug",min:0,max:100,step:5,unit:"%","off-value-left":0,modelValue:i.pvMinSoc.value,"onUpdate:modelValue":e[4]||(e[4]=r=>i.pvMinSoc.value=r),class:"q-mt-md"},null,8,["modelValue"]),I(i.SliderStandard,{title:"Mindest-SoC-Strom",min:6,max:32,unit:"A",modelValue:i.pvMinSocCurrent.value,"onUpdate:modelValue":e[5]||(e[5]=r=>i.pvMinSocCurrent.value=r),class:"q-mt-md"},null,8,["modelValue"]),i.dcCharging?(V(),ne(i.SliderStandard,{key:0,title:"DC Mindest-SoC-Leistung",min:0,max:300,step:1,unit:"kW",modelValue:i.pvMinDcMinSocPower.value,"onUpdate:modelValue":e[6]||(e[6]=r=>i.pvMinDcMinSocPower.value=r),class:"q-mt-md"},null,8,["modelValue"])):ue("",!0),e[8]||(e[8]=R("div",{class:"text-subtitle2 q-mt-sm q-mr-sm"},"Anzahl Phasen Mindest-SoC",-1)),R("div",Hw,[I(pn,{class:"col"},{default:L(()=>[(V(),K(De,null,Je(i.phaseOptionsMinSoc,r=>I(Ve,{key:r.value,color:i.numPhasesMinSoc.value===r.value?"primary":"grey",label:r.label,size:"sm",class:"col",onClick:a=>i.numPhasesMinSoc.value=r.value},null,8,["color","label","onClick"])),64))]),_:1})])])):ue("",!0),R("div",jw,[e[9]||(e[9]=R("div",{class:"text-subtitle2 q-mr-sm"},"Einspeisegrenze beachten",-1)),R("div",null,[I(i.ToggleStandard,{dense:"",modelValue:i.feedInLimit.value,"onUpdate:modelValue":e[7]||(e[7]=r=>i.feedInLimit.value=r)},null,8,["modelValue"])])])],64)}const Uw=Me(zw,[["render",$w],["__file","ChargePointPvSettings.vue"]]);/*! * chartjs-plugin-annotation v3.1.0 * https://www.chartjs.org/chartjs-plugin-annotation/index * (c) 2024 chartjs-plugin-annotation Contributors diff --git a/packages/modules/web_themes/koala/web/assets/MainLayout-Cg53HLWo.css b/packages/modules/web_themes/koala/web/assets/MainLayout-Cg53HLWo.css new file mode 100644 index 0000000000..bde530529b --- /dev/null +++ b/packages/modules/web_themes/koala/web/assets/MainLayout-Cg53HLWo.css @@ -0,0 +1 @@ +.centered-container[data-v-e2d2191f]{max-width:1000px;margin-left:auto;margin-right:auto}.centered-container-large[data-v-e2d2191f]{max-width:1400px;margin-left:auto;margin-right:auto} diff --git a/packages/modules/web_themes/koala/web/assets/MainLayout-DDxw-kff.js b/packages/modules/web_themes/koala/web/assets/MainLayout-DDxw-kff.js new file mode 100644 index 0000000000..3dbd5f98f8 --- /dev/null +++ b/packages/modules/web_themes/koala/web/assets/MainLayout-DDxw-kff.js @@ -0,0 +1 @@ +import{c as F,a as i,h as _,d as le,i as we,e as P,r as q,w as g,o as Le,f as Ne,l as oe,g as ne,j as Te,n as qe,k as X,m as Ce,p as ze,q as je,s as Ee,t as Z,u as Ue,v as Ke,x as Ge,_ as Xe,y as Je,z as E,A as U,B as s,C as r,Q as ee,D as M,E as K,F as Ye,R as te}from"./index-EKspHiQe.js";import{Q as ye,u as Ze,a as et,b as tt,c as at,d as lt,e as ot,f as nt,T as ve,g as ae,h as rt,i as me,j as it,k as ut,l as st,m as dt,n as G,o as $,p as he,q as ge,r as ct,s as be}from"./use-quasar-uR0IoSjA.js";const ft=F({name:"QToolbarTitle",props:{shrink:Boolean},setup(e,{slots:l}){const c=i(()=>"q-toolbar__title ellipsis"+(e.shrink===!0?" col-shrink":""));return()=>_("div",{class:c.value},le(l.default))}}),vt=F({name:"QToolbar",props:{inset:Boolean},setup(e,{slots:l}){const c=i(()=>"q-toolbar row no-wrap items-center"+(e.inset===!0?" q-toolbar--inset":""));return()=>_("div",{class:c.value,role:"toolbar"},le(l.default))}}),mt=F({name:"QHeader",props:{modelValue:{type:Boolean,default:!0},reveal:Boolean,revealOffset:{type:Number,default:250},bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},emits:["reveal","focusin"],setup(e,{slots:l,emit:c}){const{proxy:{$q:o}}=ne(),u=we(oe,P);if(u===P)return console.error("QHeader needs to be child of QLayout"),P;const f=q(parseInt(e.heightHint,10)),w=q(!0),b=i(()=>e.reveal===!0||u.view.value.indexOf("H")!==-1||o.platform.is.ios&&u.isContainer.value===!0),y=i(()=>{if(e.modelValue!==!0)return 0;if(b.value===!0)return w.value===!0?f.value:0;const n=f.value-u.scroll.value.position;return n>0?n:0}),C=i(()=>e.modelValue!==!0||b.value===!0&&w.value!==!0),a=i(()=>e.modelValue===!0&&C.value===!0&&e.reveal===!0),V=i(()=>"q-header q-layout__section--marginal "+(b.value===!0?"fixed":"absolute")+"-top"+(e.bordered===!0?" q-header--bordered":"")+(C.value===!0?" q-header--hidden":"")+(e.modelValue!==!0?" q-layout--prevent-focus":"")),Q=i(()=>{const n=u.rows.value.top,p={};return n[0]==="l"&&u.left.space===!0&&(p[o.lang.rtl===!0?"right":"left"]=`${u.left.size}px`),n[2]==="r"&&u.right.space===!0&&(p[o.lang.rtl===!0?"left":"right"]=`${u.right.size}px`),p});function k(n,p){u.update("header",n,p)}function h(n,p){n.value!==p&&(n.value=p)}function W({height:n}){h(f,n),k("size",n)}function x(n){a.value===!0&&h(w,!0),c("focusin",n)}g(()=>e.modelValue,n=>{k("space",n),h(w,!0),u.animate()}),g(y,n=>{k("offset",n)}),g(()=>e.reveal,n=>{n===!1&&h(w,e.modelValue)}),g(w,n=>{u.animate(),c("reveal",n)}),g(u.scroll,n=>{e.reveal===!0&&h(w,n.direction==="up"||n.position<=e.revealOffset||n.position-n.inflectionPoint<100)});const m={};return u.instances.header=m,e.modelValue===!0&&k("size",f.value),k("space",e.modelValue),k("offset",y.value),Le(()=>{u.instances.header===m&&(u.instances.header=void 0,k("size",0),k("offset",0),k("space",!1))}),()=>{const n=Ne(l.default,[]);return e.elevated===!0&&n.push(_("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),n.push(_(ye,{debounce:0,onResize:W})),_("header",{class:V.value,style:Q.value,onFocusin:x},n)}}}),pe=150,ht=F({name:"QDrawer",inheritAttrs:!1,props:{...Ze,...et,side:{type:String,default:"left",validator:e=>["left","right"].includes(e)},width:{type:Number,default:300},mini:Boolean,miniToOverlay:Boolean,miniWidth:{type:Number,default:57},noMiniAnimation:Boolean,breakpoint:{type:Number,default:1023},showIfAbove:Boolean,behavior:{type:String,validator:e=>["default","desktop","mobile"].includes(e),default:"default"},bordered:Boolean,elevated:Boolean,overlay:Boolean,persistent:Boolean,noSwipeOpen:Boolean,noSwipeClose:Boolean,noSwipeBackdrop:Boolean},emits:[...tt,"onLayout","miniState"],setup(e,{slots:l,emit:c,attrs:o}){const u=ne(),{proxy:{$q:f}}=u,w=at(e,f),{preventBodyScroll:b}=rt(),{registerTimeout:y,removeTimeout:C}=lt(),a=we(oe,P);if(a===P)return console.error("QDrawer needs to be child of QLayout"),P;let V,Q=null,k;const h=q(e.behavior==="mobile"||e.behavior!=="desktop"&&a.totalWidth.value<=e.breakpoint),W=i(()=>e.mini===!0&&h.value!==!0),x=i(()=>W.value===!0?e.miniWidth:e.width),m=q(e.showIfAbove===!0&&h.value===!1?!0:e.modelValue===!0),n=i(()=>e.persistent!==!0&&(h.value===!0||Be.value===!0));function p(t,d){if(z(),t!==!1&&a.animate(),B(0),h.value===!0){const T=a.instances[J.value];T!==void 0&&T.belowBreakpoint===!0&&T.hide(!1),H(1),a.isContainer.value!==!0&&b(!0)}else H(0),t!==!1&&de(!1);y(()=>{t!==!1&&de(!0),d!==!0&&c("show",t)},pe)}function v(t,d){N(),t!==!1&&a.animate(),H(0),B(I.value*x.value),ce(),d!==!0?y(()=>{c("hide",t)},pe):C()}const{show:S,hide:L}=ot({showing:m,hideOnRouteChange:n,handleShow:p,handleHide:v}),{addToHistory:z,removeFromHistory:N}=nt(m,L,n),R={belowBreakpoint:h,hide:L},O=i(()=>e.side==="right"),I=i(()=>(f.lang.rtl===!0?-1:1)*(O.value===!0?1:-1)),ke=q(0),A=q(!1),re=q(!1),Se=q(x.value*I.value),J=i(()=>O.value===!0?"left":"right"),ie=i(()=>m.value===!0&&h.value===!1&&e.overlay===!1?e.miniToOverlay===!0?e.miniWidth:x.value:0),ue=i(()=>e.overlay===!0||e.miniToOverlay===!0||a.view.value.indexOf(O.value?"R":"L")!==-1||f.platform.is.ios===!0&&a.isContainer.value===!0),j=i(()=>e.overlay===!1&&m.value===!0&&h.value===!1),Be=i(()=>e.overlay===!0&&m.value===!0&&h.value===!1),Qe=i(()=>"fullscreen q-drawer__backdrop"+(m.value===!1&&A.value===!1?" hidden":"")),Me=i(()=>({backgroundColor:`rgba(0,0,0,${ke.value*.4})`})),_e=i(()=>O.value===!0?a.rows.value.top[2]==="r":a.rows.value.top[0]==="l"),$e=i(()=>O.value===!0?a.rows.value.bottom[2]==="r":a.rows.value.bottom[0]==="l"),We=i(()=>{const t={};return a.header.space===!0&&_e.value===!1&&(ue.value===!0?t.top=`${a.header.offset}px`:a.header.space===!0&&(t.top=`${a.header.size}px`)),a.footer.space===!0&&$e.value===!1&&(ue.value===!0?t.bottom=`${a.footer.offset}px`:a.footer.space===!0&&(t.bottom=`${a.footer.size}px`)),t}),Oe=i(()=>{const t={width:`${x.value}px`,transform:`translateX(${Se.value}px)`};return h.value===!0?t:Object.assign(t,We.value)}),Pe=i(()=>"q-drawer__content fit "+(a.isContainer.value!==!0?"scroll":"overflow-auto")),He=i(()=>`q-drawer q-drawer--${e.side}`+(re.value===!0?" q-drawer--mini-animate":"")+(e.bordered===!0?" q-drawer--bordered":"")+(w.value===!0?" q-drawer--dark q-dark":"")+(A.value===!0?" no-transition":m.value===!0?"":" q-layout--prevent-focus")+(h.value===!0?" fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding":` q-drawer--${W.value===!0?"mini":"standard"}`+(ue.value===!0||j.value!==!0?" fixed":"")+(e.overlay===!0||e.miniToOverlay===!0?" q-drawer--on-top":"")+(_e.value===!0?" q-drawer--top-padding":""))),De=i(()=>{const t=f.lang.rtl===!0?e.side:J.value;return[[ve,Ae,void 0,{[t]:!0,mouse:!0}]]}),Ve=i(()=>{const t=f.lang.rtl===!0?J.value:e.side;return[[ve,xe,void 0,{[t]:!0,mouse:!0}]]}),Re=i(()=>{const t=f.lang.rtl===!0?J.value:e.side;return[[ve,xe,void 0,{[t]:!0,mouse:!0,mouseAllDir:!0}]]});function se(){Fe(h,e.behavior==="mobile"||e.behavior!=="desktop"&&a.totalWidth.value<=e.breakpoint)}g(h,t=>{t===!0?(V=m.value,m.value===!0&&L(!1)):e.overlay===!1&&e.behavior!=="mobile"&&V!==!1&&(m.value===!0?(B(0),H(0),ce()):S(!1))}),g(()=>e.side,(t,d)=>{a.instances[d]===R&&(a.instances[d]=void 0,a[d].space=!1,a[d].offset=0),a.instances[t]=R,a[t].size=x.value,a[t].space=j.value,a[t].offset=ie.value}),g(a.totalWidth,()=>{(a.isContainer.value===!0||document.qScrollPrevented!==!0)&&se()}),g(()=>e.behavior+e.breakpoint,se),g(a.isContainer,t=>{m.value===!0&&b(t!==!0),t===!0&&se()}),g(a.scrollbarWidth,()=>{B(m.value===!0?0:void 0)}),g(ie,t=>{D("offset",t)}),g(j,t=>{c("onLayout",t),D("space",t)}),g(O,()=>{B()}),g(x,t=>{B(),fe(e.miniToOverlay,t)}),g(()=>e.miniToOverlay,t=>{fe(t,x.value)}),g(()=>f.lang.rtl,()=>{B()}),g(()=>e.mini,()=>{e.noMiniAnimation||e.modelValue===!0&&(Ie(),a.animate())}),g(W,t=>{c("miniState",t)});function B(t){t===void 0?qe(()=>{t=m.value===!0?0:x.value,B(I.value*t)}):(a.isContainer.value===!0&&O.value===!0&&(h.value===!0||Math.abs(t)===x.value)&&(t+=I.value*a.scrollbarWidth.value),Se.value=t)}function H(t){ke.value=t}function de(t){const d=t===!0?"remove":a.isContainer.value!==!0?"add":"";d!==""&&document.body.classList[d]("q-body--drawer-toggle")}function Ie(){Q!==null&&clearTimeout(Q),u.proxy&&u.proxy.$el&&u.proxy.$el.classList.add("q-drawer--mini-animate"),re.value=!0,Q=setTimeout(()=>{Q=null,re.value=!1,u&&u.proxy&&u.proxy.$el&&u.proxy.$el.classList.remove("q-drawer--mini-animate")},150)}function Ae(t){if(m.value!==!1)return;const d=x.value,T=ae(t.distance.x,0,d);if(t.isFinal===!0){T>=Math.min(75,d)===!0?S():(a.animate(),H(0),B(I.value*d)),A.value=!1;return}B((f.lang.rtl===!0?O.value!==!0:O.value)?Math.max(d-T,0):Math.min(0,T-d)),H(ae(T/d,0,1)),t.isFirst===!0&&(A.value=!0)}function xe(t){if(m.value!==!0)return;const d=x.value,T=t.direction===e.side,Y=(f.lang.rtl===!0?T!==!0:T)?ae(t.distance.x,0,d):0;if(t.isFinal===!0){Math.abs(Y){c("onLayout",j.value),c("miniState",W.value),V=e.showIfAbove===!0;const t=()=>{(m.value===!0?p:v)(!1,!0)};if(a.totalWidth.value!==0){qe(t);return}k=g(a.totalWidth,()=>{k(),k=void 0,m.value===!1&&e.showIfAbove===!0&&h.value===!1?S(!1):t()})}),Le(()=>{k!==void 0&&k(),Q!==null&&(clearTimeout(Q),Q=null),m.value===!0&&ce(),a.instances[e.side]===R&&(a.instances[e.side]=void 0,D("size",0),D("offset",0),D("space",!1))}),()=>{const t=[];h.value===!0&&(e.noSwipeOpen===!1&&t.push(X(_("div",{key:"open",class:`q-drawer__opener fixed-${e.side}`,"aria-hidden":"true"}),De.value)),t.push(Ce("div",{ref:"backdrop",class:Qe.value,style:Me.value,"aria-hidden":"true",onClick:L},void 0,"backdrop",e.noSwipeBackdrop!==!0&&m.value===!0,()=>Re.value)));const d=W.value===!0&&l.mini!==void 0,T=[_("div",{...o,key:""+d,class:[Pe.value,o.class]},d===!0?l.mini():le(l.default))];return e.elevated===!0&&m.value===!0&&T.push(_("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),t.push(Ce("aside",{ref:"content",class:He.value,style:Oe.value},T,"contentclose",e.noSwipeClose!==!0&&h.value===!0,()=>Ve.value)),_("div",{class:"q-drawer-container"},t)}}}),gt=F({name:"QPageContainer",setup(e,{slots:l}){const{proxy:{$q:c}}=ne(),o=we(oe,P);if(o===P)return console.error("QPageContainer needs to be child of QLayout"),P;ze(je,!0);const u=i(()=>{const f={};return o.header.space===!0&&(f.paddingTop=`${o.header.size}px`),o.right.space===!0&&(f[`padding${c.lang.rtl===!0?"Left":"Right"}`]=`${o.right.size}px`),o.footer.space===!0&&(f.paddingBottom=`${o.footer.size}px`),o.left.space===!0&&(f[`padding${c.lang.rtl===!0?"Right":"Left"}`]=`${o.left.size}px`),f});return()=>_("div",{class:"q-page-container",style:u.value},le(l.default))}}),bt=F({name:"QLayout",props:{container:Boolean,view:{type:String,default:"hhh lpr fff",validator:e=>/^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(e.toLowerCase())},onScroll:Function,onScrollHeight:Function,onResize:Function},setup(e,{slots:l,emit:c}){const{proxy:{$q:o}}=ne(),u=q(null),f=q(o.screen.height),w=q(e.container===!0?0:o.screen.width),b=q({position:0,direction:"down",inflectionPoint:0}),y=q(0),C=q(Ee.value===!0?0:me()),a=i(()=>"q-layout q-layout--"+(e.container===!0?"containerized":"standard")),V=i(()=>e.container===!1?{minHeight:o.screen.height+"px"}:null),Q=i(()=>C.value!==0?{[o.lang.rtl===!0?"left":"right"]:`${C.value}px`}:null),k=i(()=>C.value!==0?{[o.lang.rtl===!0?"right":"left"]:0,[o.lang.rtl===!0?"left":"right"]:`-${C.value}px`,width:`calc(100% + ${C.value}px)`}:null);function h(v){if(e.container===!0||document.qScrollPrevented!==!0){const S={position:v.position.top,direction:v.direction,directionChanged:v.directionChanged,inflectionPoint:v.inflectionPoint.top,delta:v.delta.top};b.value=S,e.onScroll!==void 0&&c("scroll",S)}}function W(v){const{height:S,width:L}=v;let z=!1;f.value!==S&&(z=!0,f.value=S,e.onScrollHeight!==void 0&&c("scrollHeight",S),m()),w.value!==L&&(z=!0,w.value=L),z===!0&&e.onResize!==void 0&&c("resize",v)}function x({height:v}){y.value!==v&&(y.value=v,m())}function m(){if(e.container===!0){const v=f.value>y.value?me():0;C.value!==v&&(C.value=v)}}let n=null;const p={instances:{},view:i(()=>e.view),isContainer:i(()=>e.container),rootRef:u,height:f,containerHeight:y,scrollbarWidth:C,totalWidth:i(()=>w.value+C.value),rows:i(()=>{const v=e.view.toLowerCase().split(" ");return{top:v[0].split(""),middle:v[1].split(""),bottom:v[2].split("")}}),header:Z({size:0,offset:0,space:!1}),right:Z({size:300,offset:0,space:!1}),footer:Z({size:0,offset:0,space:!1}),left:Z({size:300,offset:0,space:!1}),scroll:b,animate(){n!==null?clearTimeout(n):document.body.classList.add("q-body--layout-animate"),n=setTimeout(()=>{n=null,document.body.classList.remove("q-body--layout-animate")},155)},update(v,S,L){p[v][S]=L}};if(ze(oe,p),me()>0){let v=function(){z=null,N.classList.remove("hide-scrollbar")},S=function(){if(z===null){if(N.scrollHeight>o.screen.height)return;N.classList.add("hide-scrollbar")}else clearTimeout(z);z=setTimeout(v,300)},L=function(R){z!==null&&R==="remove"&&(clearTimeout(z),v()),window[`${R}EventListener`]("resize",S)},z=null;const N=document.body;g(()=>e.container!==!0?"add":"remove",L),e.container!==!0&&L("add"),Ue(()=>{L("remove")})}return()=>{const v=Ke(l.default,[_(it,{onScroll:h}),_(ye,{onResize:W})]),S=_("div",{class:a.value,style:V.value,ref:e.container===!0?void 0:u,tabindex:-1},v);return e.container===!0?_("div",{class:"q-layout-container overflow-hidden",ref:u},[_(ye,{onResize:x}),_("div",{class:"absolute-full",style:Q.value},[_("div",{class:"scroll",style:k.value},[S])])]):S}}}),yt=Ge({name:"MainLayout",__name:"MainLayout",setup(e,{expose:l}){l();const c=ut(),o=q(!1),u=q("auto"),f=i(()=>c.screen.width>1400),w=y=>{u.value=y,y==="auto"?(localStorage.removeItem("theme"),c.dark.set("auto")):(c.dark.set(y==="dark"),localStorage.setItem("theme",y))};Te(()=>{const y=localStorage.getItem("theme");y?(u.value=y,c.dark.set(y==="dark")):(u.value="auto",c.dark.set("auto"))});const b={$q:c,drawer:o,themeMode:u,isLargeScreen:f,setTheme:w};return Object.defineProperty(b,"__isScriptSetup",{enumerable:!1,value:!0}),b}});function wt(e,l,c,o,u,f){const w=Je("router-view");return E(),U(bt,{view:"hHh lpr lFf"},{default:s(()=>[r(mt,{elevated:""},{default:s(()=>[r(vt,null,{default:s(()=>[r(ee,{dense:"",flat:"",round:"",icon:"menu",onClick:l[0]||(l[0]=b=>o.drawer=!o.drawer)}),r(ft,null,{default:s(()=>l[5]||(l[5]=[M("openWB")])),_:1})]),_:1})]),_:1}),r(ht,{modelValue:o.drawer,"onUpdate:modelValue":l[4]||(l[4]=b=>o.drawer=b),side:"left",overlay:"",elevated:"",breakpoint:500},{default:s(()=>[r(st,{class:"fit","horizontal-thumb-style":{opacity:"0"}},{default:s(()=>[r(dt,{padding:""},{default:s(()=>[X((E(),U(G,{clickable:"",href:"/openWB/web/settings/#/Status"},{default:s(()=>[r($,{avatar:""},{default:s(()=>[r(K,{name:"dashboard"})]),_:1}),r($,null,{default:s(()=>l[6]||(l[6]=[M(" Status ")])),_:1})]),_:1})),[[te]]),r(he),r(ge,{header:""},{default:s(()=>l[7]||(l[7]=[M("Auswertungen")])),_:1}),X((E(),U(G,{clickable:"",href:"/openWB/web/settings/#/Logging/ChargeLog"},{default:s(()=>[r($,{avatar:""},{default:s(()=>[r(K,{name:"table_chart"})]),_:1}),r($,null,{default:s(()=>l[8]||(l[8]=[M(" Ladeprotokoll ")])),_:1})]),_:1})),[[te]]),X((E(),U(G,{clickable:"",href:"/openWB/web/settings/#/Logging/Chart"},{default:s(()=>[r($,{avatar:""},{default:s(()=>[r(K,{name:"area_chart"})]),_:1}),r($,null,{default:s(()=>l[9]||(l[9]=[M(" Diagramme ")])),_:1})]),_:1})),[[te]]),r(he),X((E(),U(G,{clickable:"",href:"/openWB/web/settings/"},{default:s(()=>[r($,{avatar:""},{default:s(()=>[r(K,{name:"settings"})]),_:1}),r($,null,{default:s(()=>l[10]||(l[10]=[M(" Einstellungen ")])),_:1})]),_:1})),[[te]]),r(he),r(ge,{header:""},{default:s(()=>l[11]||(l[11]=[M("Anzeigeeinstellungen")])),_:1}),r(G,null,{default:s(()=>[r($,{avatar:""},{default:s(()=>[r(K,{name:"light_mode"})]),_:1}),r($,null,{default:s(()=>[r(ge,null,{default:s(()=>l[12]||(l[12]=[M("Darstellungsmodus")])),_:1})]),_:1}),r($,{side:""},{default:s(()=>[r(ct,{flat:""},{default:s(()=>[r(ee,{flat:"",round:"",color:o.themeMode==="light"?"primary":"",icon:"light_mode",onClick:l[1]||(l[1]=b=>o.setTheme("light")),size:"sm",disable:o.themeMode==="light","aria-label":"Light Mode"},{default:s(()=>[r(be,null,{default:s(()=>l[13]||(l[13]=[M("Hell")])),_:1})]),_:1},8,["color","disable"]),r(ee,{flat:"",round:"",color:o.themeMode==="dark"?"primary":"",icon:"dark_mode",onClick:l[2]||(l[2]=b=>o.setTheme("dark")),size:"sm",disable:o.themeMode==="dark","aria-label":"Dark Mode"},{default:s(()=>[r(be,null,{default:s(()=>l[14]||(l[14]=[M("Dunkel")])),_:1})]),_:1},8,["color","disable"]),r(ee,{flat:"",round:"",color:o.themeMode==="auto"?"primary":"",icon:"devices",onClick:l[3]||(l[3]=b=>o.setTheme("auto")),size:"sm",disable:o.themeMode==="auto","aria-label":"System Mode"},{default:s(()=>[r(be,null,{default:s(()=>l[15]||(l[15]=[M("Systemeinstellung")])),_:1})]),_:1},8,["color","disable"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),r(gt,{class:Ye(["column","flex",{"centered-container":!o.isLargeScreen,"centered-container-large":o.isLargeScreen}])},{default:s(()=>[r(w)]),_:1},8,["class"])]),_:1})}const xt=Xe(yt,[["render",wt],["__scopeId","data-v-e2d2191f"],["__file","MainLayout.vue"]]);export{xt as default}; diff --git a/packages/modules/web_themes/koala/web/assets/MainLayout-D_XoEdvD.js b/packages/modules/web_themes/koala/web/assets/MainLayout-D_XoEdvD.js deleted file mode 100644 index 9654cbdc81..0000000000 --- a/packages/modules/web_themes/koala/web/assets/MainLayout-D_XoEdvD.js +++ /dev/null @@ -1 +0,0 @@ -import{c as F,a as i,h as S,d as le,i as we,e as P,r as x,w as b,o as Te,f as Ne,l as oe,g as ne,j as Be,n as qe,k as X,m as pe,p as ze,q as je,s as Ee,t as Z,u as Ue,v as Ke,x as Ge,_ as Xe,y as Je,z as E,A as U,B as s,C as r,Q as ee,D as Q,E as K,R as te}from"./index-CMMTdT_8.js";import{Q as ye,u as Ye,a as Ze,b as et,c as tt,d as at,e as lt,f as ot,T as ve,g as ae,h as nt,i as me,j as rt,k as it,l as ut,m as st,n as G,o as M,p as he,q as ge,r as dt,s as be}from"./use-quasar-CokCDZeI.js";const ct=F({name:"QToolbarTitle",props:{shrink:Boolean},setup(e,{slots:l}){const c=i(()=>"q-toolbar__title ellipsis"+(e.shrink===!0?" col-shrink":""));return()=>S("div",{class:c.value},le(l.default))}}),ft=F({name:"QToolbar",props:{inset:Boolean},setup(e,{slots:l}){const c=i(()=>"q-toolbar row no-wrap items-center"+(e.inset===!0?" q-toolbar--inset":""));return()=>S("div",{class:c.value,role:"toolbar"},le(l.default))}}),vt=F({name:"QHeader",props:{modelValue:{type:Boolean,default:!0},reveal:Boolean,revealOffset:{type:Number,default:250},bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},emits:["reveal","focusin"],setup(e,{slots:l,emit:c}){const{proxy:{$q:o}}=ne(),u=we(oe,P);if(u===P)return console.error("QHeader needs to be child of QLayout"),P;const f=x(parseInt(e.heightHint,10)),y=x(!0),h=i(()=>e.reveal===!0||u.view.value.indexOf("H")!==-1||o.platform.is.ios&&u.isContainer.value===!0),$=i(()=>{if(e.modelValue!==!0)return 0;if(h.value===!0)return y.value===!0?f.value:0;const n=f.value-u.scroll.value.position;return n>0?n:0}),q=i(()=>e.modelValue!==!0||h.value===!0&&y.value!==!0),a=i(()=>e.modelValue===!0&&q.value===!0&&e.reveal===!0),V=i(()=>"q-header q-layout__section--marginal "+(h.value===!0?"fixed":"absolute")+"-top"+(e.bordered===!0?" q-header--bordered":"")+(q.value===!0?" q-header--hidden":"")+(e.modelValue!==!0?" q-layout--prevent-focus":"")),L=i(()=>{const n=u.rows.value.top,p={};return n[0]==="l"&&u.left.space===!0&&(p[o.lang.rtl===!0?"right":"left"]=`${u.left.size}px`),n[2]==="r"&&u.right.space===!0&&(p[o.lang.rtl===!0?"left":"right"]=`${u.right.size}px`),p});function w(n,p){u.update("header",n,p)}function g(n,p){n.value!==p&&(n.value=p)}function W({height:n}){g(f,n),w("size",n)}function _(n){a.value===!0&&g(y,!0),c("focusin",n)}b(()=>e.modelValue,n=>{w("space",n),g(y,!0),u.animate()}),b($,n=>{w("offset",n)}),b(()=>e.reveal,n=>{n===!1&&g(y,e.modelValue)}),b(y,n=>{u.animate(),c("reveal",n)}),b(u.scroll,n=>{e.reveal===!0&&g(y,n.direction==="up"||n.position<=e.revealOffset||n.position-n.inflectionPoint<100)});const m={};return u.instances.header=m,e.modelValue===!0&&w("size",f.value),w("space",e.modelValue),w("offset",$.value),Te(()=>{u.instances.header===m&&(u.instances.header=void 0,w("size",0),w("offset",0),w("space",!1))}),()=>{const n=Ne(l.default,[]);return e.elevated===!0&&n.push(S("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),n.push(S(ye,{debounce:0,onResize:W})),S("header",{class:V.value,style:L.value,onFocusin:_},n)}}}),Ce=150,mt=F({name:"QDrawer",inheritAttrs:!1,props:{...Ye,...Ze,side:{type:String,default:"left",validator:e=>["left","right"].includes(e)},width:{type:Number,default:300},mini:Boolean,miniToOverlay:Boolean,miniWidth:{type:Number,default:57},noMiniAnimation:Boolean,breakpoint:{type:Number,default:1023},showIfAbove:Boolean,behavior:{type:String,validator:e=>["default","desktop","mobile"].includes(e),default:"default"},bordered:Boolean,elevated:Boolean,overlay:Boolean,persistent:Boolean,noSwipeOpen:Boolean,noSwipeClose:Boolean,noSwipeBackdrop:Boolean},emits:[...et,"onLayout","miniState"],setup(e,{slots:l,emit:c,attrs:o}){const u=ne(),{proxy:{$q:f}}=u,y=tt(e,f),{preventBodyScroll:h}=nt(),{registerTimeout:$,removeTimeout:q}=at(),a=we(oe,P);if(a===P)return console.error("QDrawer needs to be child of QLayout"),P;let V,L=null,w;const g=x(e.behavior==="mobile"||e.behavior!=="desktop"&&a.totalWidth.value<=e.breakpoint),W=i(()=>e.mini===!0&&g.value!==!0),_=i(()=>W.value===!0?e.miniWidth:e.width),m=x(e.showIfAbove===!0&&g.value===!1?!0:e.modelValue===!0),n=i(()=>e.persistent!==!0&&(g.value===!0||Le.value===!0));function p(t,d){if(B(),t!==!1&&a.animate(),z(0),g.value===!0){const T=a.instances[J.value];T!==void 0&&T.belowBreakpoint===!0&&T.hide(!1),H(1),a.isContainer.value!==!0&&h(!0)}else H(0),t!==!1&&de(!1);$(()=>{t!==!1&&de(!0),d!==!0&&c("show",t)},Ce)}function v(t,d){N(),t!==!1&&a.animate(),H(0),z(I.value*_.value),ce(),d!==!0?$(()=>{c("hide",t)},Ce):q()}const{show:k,hide:C}=lt({showing:m,hideOnRouteChange:n,handleShow:p,handleHide:v}),{addToHistory:B,removeFromHistory:N}=ot(m,C,n),R={belowBreakpoint:g,hide:C},O=i(()=>e.side==="right"),I=i(()=>(f.lang.rtl===!0?-1:1)*(O.value===!0?1:-1)),ke=x(0),A=x(!1),re=x(!1),Se=x(_.value*I.value),J=i(()=>O.value===!0?"left":"right"),ie=i(()=>m.value===!0&&g.value===!1&&e.overlay===!1?e.miniToOverlay===!0?e.miniWidth:_.value:0),ue=i(()=>e.overlay===!0||e.miniToOverlay===!0||a.view.value.indexOf(O.value?"R":"L")!==-1||f.platform.is.ios===!0&&a.isContainer.value===!0),j=i(()=>e.overlay===!1&&m.value===!0&&g.value===!1),Le=i(()=>e.overlay===!0&&m.value===!0&&g.value===!1),Qe=i(()=>"fullscreen q-drawer__backdrop"+(m.value===!1&&A.value===!1?" hidden":"")),Me=i(()=>({backgroundColor:`rgba(0,0,0,${ke.value*.4})`})),_e=i(()=>O.value===!0?a.rows.value.top[2]==="r":a.rows.value.top[0]==="l"),$e=i(()=>O.value===!0?a.rows.value.bottom[2]==="r":a.rows.value.bottom[0]==="l"),We=i(()=>{const t={};return a.header.space===!0&&_e.value===!1&&(ue.value===!0?t.top=`${a.header.offset}px`:a.header.space===!0&&(t.top=`${a.header.size}px`)),a.footer.space===!0&&$e.value===!1&&(ue.value===!0?t.bottom=`${a.footer.offset}px`:a.footer.space===!0&&(t.bottom=`${a.footer.size}px`)),t}),Oe=i(()=>{const t={width:`${_.value}px`,transform:`translateX(${Se.value}px)`};return g.value===!0?t:Object.assign(t,We.value)}),Pe=i(()=>"q-drawer__content fit "+(a.isContainer.value!==!0?"scroll":"overflow-auto")),He=i(()=>`q-drawer q-drawer--${e.side}`+(re.value===!0?" q-drawer--mini-animate":"")+(e.bordered===!0?" q-drawer--bordered":"")+(y.value===!0?" q-drawer--dark q-dark":"")+(A.value===!0?" no-transition":m.value===!0?"":" q-layout--prevent-focus")+(g.value===!0?" fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding":` q-drawer--${W.value===!0?"mini":"standard"}`+(ue.value===!0||j.value!==!0?" fixed":"")+(e.overlay===!0||e.miniToOverlay===!0?" q-drawer--on-top":"")+(_e.value===!0?" q-drawer--top-padding":""))),De=i(()=>{const t=f.lang.rtl===!0?e.side:J.value;return[[ve,Ae,void 0,{[t]:!0,mouse:!0}]]}),Ve=i(()=>{const t=f.lang.rtl===!0?J.value:e.side;return[[ve,xe,void 0,{[t]:!0,mouse:!0}]]}),Re=i(()=>{const t=f.lang.rtl===!0?J.value:e.side;return[[ve,xe,void 0,{[t]:!0,mouse:!0,mouseAllDir:!0}]]});function se(){Fe(g,e.behavior==="mobile"||e.behavior!=="desktop"&&a.totalWidth.value<=e.breakpoint)}b(g,t=>{t===!0?(V=m.value,m.value===!0&&C(!1)):e.overlay===!1&&e.behavior!=="mobile"&&V!==!1&&(m.value===!0?(z(0),H(0),ce()):k(!1))}),b(()=>e.side,(t,d)=>{a.instances[d]===R&&(a.instances[d]=void 0,a[d].space=!1,a[d].offset=0),a.instances[t]=R,a[t].size=_.value,a[t].space=j.value,a[t].offset=ie.value}),b(a.totalWidth,()=>{(a.isContainer.value===!0||document.qScrollPrevented!==!0)&&se()}),b(()=>e.behavior+e.breakpoint,se),b(a.isContainer,t=>{m.value===!0&&h(t!==!0),t===!0&&se()}),b(a.scrollbarWidth,()=>{z(m.value===!0?0:void 0)}),b(ie,t=>{D("offset",t)}),b(j,t=>{c("onLayout",t),D("space",t)}),b(O,()=>{z()}),b(_,t=>{z(),fe(e.miniToOverlay,t)}),b(()=>e.miniToOverlay,t=>{fe(t,_.value)}),b(()=>f.lang.rtl,()=>{z()}),b(()=>e.mini,()=>{e.noMiniAnimation||e.modelValue===!0&&(Ie(),a.animate())}),b(W,t=>{c("miniState",t)});function z(t){t===void 0?qe(()=>{t=m.value===!0?0:_.value,z(I.value*t)}):(a.isContainer.value===!0&&O.value===!0&&(g.value===!0||Math.abs(t)===_.value)&&(t+=I.value*a.scrollbarWidth.value),Se.value=t)}function H(t){ke.value=t}function de(t){const d=t===!0?"remove":a.isContainer.value!==!0?"add":"";d!==""&&document.body.classList[d]("q-body--drawer-toggle")}function Ie(){L!==null&&clearTimeout(L),u.proxy&&u.proxy.$el&&u.proxy.$el.classList.add("q-drawer--mini-animate"),re.value=!0,L=setTimeout(()=>{L=null,re.value=!1,u&&u.proxy&&u.proxy.$el&&u.proxy.$el.classList.remove("q-drawer--mini-animate")},150)}function Ae(t){if(m.value!==!1)return;const d=_.value,T=ae(t.distance.x,0,d);if(t.isFinal===!0){T>=Math.min(75,d)===!0?k():(a.animate(),H(0),z(I.value*d)),A.value=!1;return}z((f.lang.rtl===!0?O.value!==!0:O.value)?Math.max(d-T,0):Math.min(0,T-d)),H(ae(T/d,0,1)),t.isFirst===!0&&(A.value=!0)}function xe(t){if(m.value!==!0)return;const d=_.value,T=t.direction===e.side,Y=(f.lang.rtl===!0?T!==!0:T)?ae(t.distance.x,0,d):0;if(t.isFinal===!0){Math.abs(Y){c("onLayout",j.value),c("miniState",W.value),V=e.showIfAbove===!0;const t=()=>{(m.value===!0?p:v)(!1,!0)};if(a.totalWidth.value!==0){qe(t);return}w=b(a.totalWidth,()=>{w(),w=void 0,m.value===!1&&e.showIfAbove===!0&&g.value===!1?k(!1):t()})}),Te(()=>{w!==void 0&&w(),L!==null&&(clearTimeout(L),L=null),m.value===!0&&ce(),a.instances[e.side]===R&&(a.instances[e.side]=void 0,D("size",0),D("offset",0),D("space",!1))}),()=>{const t=[];g.value===!0&&(e.noSwipeOpen===!1&&t.push(X(S("div",{key:"open",class:`q-drawer__opener fixed-${e.side}`,"aria-hidden":"true"}),De.value)),t.push(pe("div",{ref:"backdrop",class:Qe.value,style:Me.value,"aria-hidden":"true",onClick:C},void 0,"backdrop",e.noSwipeBackdrop!==!0&&m.value===!0,()=>Re.value)));const d=W.value===!0&&l.mini!==void 0,T=[S("div",{...o,key:""+d,class:[Pe.value,o.class]},d===!0?l.mini():le(l.default))];return e.elevated===!0&&m.value===!0&&T.push(S("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),t.push(pe("aside",{ref:"content",class:He.value,style:Oe.value},T,"contentclose",e.noSwipeClose!==!0&&g.value===!0,()=>Ve.value)),S("div",{class:"q-drawer-container"},t)}}}),ht=F({name:"QPageContainer",setup(e,{slots:l}){const{proxy:{$q:c}}=ne(),o=we(oe,P);if(o===P)return console.error("QPageContainer needs to be child of QLayout"),P;ze(je,!0);const u=i(()=>{const f={};return o.header.space===!0&&(f.paddingTop=`${o.header.size}px`),o.right.space===!0&&(f[`padding${c.lang.rtl===!0?"Left":"Right"}`]=`${o.right.size}px`),o.footer.space===!0&&(f.paddingBottom=`${o.footer.size}px`),o.left.space===!0&&(f[`padding${c.lang.rtl===!0?"Right":"Left"}`]=`${o.left.size}px`),f});return()=>S("div",{class:"q-page-container",style:u.value},le(l.default))}}),gt=F({name:"QLayout",props:{container:Boolean,view:{type:String,default:"hhh lpr fff",validator:e=>/^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(e.toLowerCase())},onScroll:Function,onScrollHeight:Function,onResize:Function},setup(e,{slots:l,emit:c}){const{proxy:{$q:o}}=ne(),u=x(null),f=x(o.screen.height),y=x(e.container===!0?0:o.screen.width),h=x({position:0,direction:"down",inflectionPoint:0}),$=x(0),q=x(Ee.value===!0?0:me()),a=i(()=>"q-layout q-layout--"+(e.container===!0?"containerized":"standard")),V=i(()=>e.container===!1?{minHeight:o.screen.height+"px"}:null),L=i(()=>q.value!==0?{[o.lang.rtl===!0?"left":"right"]:`${q.value}px`}:null),w=i(()=>q.value!==0?{[o.lang.rtl===!0?"right":"left"]:0,[o.lang.rtl===!0?"left":"right"]:`-${q.value}px`,width:`calc(100% + ${q.value}px)`}:null);function g(v){if(e.container===!0||document.qScrollPrevented!==!0){const k={position:v.position.top,direction:v.direction,directionChanged:v.directionChanged,inflectionPoint:v.inflectionPoint.top,delta:v.delta.top};h.value=k,e.onScroll!==void 0&&c("scroll",k)}}function W(v){const{height:k,width:C}=v;let B=!1;f.value!==k&&(B=!0,f.value=k,e.onScrollHeight!==void 0&&c("scrollHeight",k),m()),y.value!==C&&(B=!0,y.value=C),B===!0&&e.onResize!==void 0&&c("resize",v)}function _({height:v}){$.value!==v&&($.value=v,m())}function m(){if(e.container===!0){const v=f.value>$.value?me():0;q.value!==v&&(q.value=v)}}let n=null;const p={instances:{},view:i(()=>e.view),isContainer:i(()=>e.container),rootRef:u,height:f,containerHeight:$,scrollbarWidth:q,totalWidth:i(()=>y.value+q.value),rows:i(()=>{const v=e.view.toLowerCase().split(" ");return{top:v[0].split(""),middle:v[1].split(""),bottom:v[2].split("")}}),header:Z({size:0,offset:0,space:!1}),right:Z({size:300,offset:0,space:!1}),footer:Z({size:0,offset:0,space:!1}),left:Z({size:300,offset:0,space:!1}),scroll:h,animate(){n!==null?clearTimeout(n):document.body.classList.add("q-body--layout-animate"),n=setTimeout(()=>{n=null,document.body.classList.remove("q-body--layout-animate")},155)},update(v,k,C){p[v][k]=C}};if(ze(oe,p),me()>0){let v=function(){B=null,N.classList.remove("hide-scrollbar")},k=function(){if(B===null){if(N.scrollHeight>o.screen.height)return;N.classList.add("hide-scrollbar")}else clearTimeout(B);B=setTimeout(v,300)},C=function(R){B!==null&&R==="remove"&&(clearTimeout(B),v()),window[`${R}EventListener`]("resize",k)},B=null;const N=document.body;b(()=>e.container!==!0?"add":"remove",C),e.container!==!0&&C("add"),Ue(()=>{C("remove")})}return()=>{const v=Ke(l.default,[S(rt,{onScroll:g}),S(ye,{onResize:W})]),k=S("div",{class:a.value,style:V.value,ref:e.container===!0?void 0:u,tabindex:-1},v);return e.container===!0?S("div",{class:"q-layout-container overflow-hidden",ref:u},[S(ye,{onResize:_}),S("div",{class:"absolute-full",style:L.value},[S("div",{class:"scroll",style:w.value},[k])])]):k}}}),bt=Ge({name:"MainLayout",__name:"MainLayout",setup(e,{expose:l}){l();const c=it(),o=x(!1),u=x("auto"),f=h=>{u.value=h,h==="auto"?(localStorage.removeItem("theme"),c.dark.set("auto")):(c.dark.set(h==="dark"),localStorage.setItem("theme",h))};Be(()=>{const h=localStorage.getItem("theme");h?(u.value=h,c.dark.set(h==="dark")):(u.value="auto",c.dark.set("auto"))});const y={$q:c,drawer:o,themeMode:u,setTheme:f};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}});function yt(e,l,c,o,u,f){const y=Je("router-view");return E(),U(gt,{view:"hHh lpr lFf"},{default:s(()=>[r(vt,{elevated:""},{default:s(()=>[r(ft,null,{default:s(()=>[r(ee,{dense:"",flat:"",round:"",icon:"menu",onClick:l[0]||(l[0]=h=>o.drawer=!o.drawer)}),r(ct,null,{default:s(()=>l[5]||(l[5]=[Q("openWB")])),_:1})]),_:1})]),_:1}),r(mt,{modelValue:o.drawer,"onUpdate:modelValue":l[4]||(l[4]=h=>o.drawer=h),side:"left",overlay:"",elevated:"",breakpoint:500},{default:s(()=>[r(ut,{class:"fit","horizontal-thumb-style":{opacity:"0"}},{default:s(()=>[r(st,{padding:""},{default:s(()=>[X((E(),U(G,{clickable:"",href:"/openWB/web/settings/#/Status"},{default:s(()=>[r(M,{avatar:""},{default:s(()=>[r(K,{name:"dashboard"})]),_:1}),r(M,null,{default:s(()=>l[6]||(l[6]=[Q(" Status ")])),_:1})]),_:1})),[[te]]),r(he),r(ge,{header:""},{default:s(()=>l[7]||(l[7]=[Q("Auswertungen")])),_:1}),X((E(),U(G,{clickable:"",href:"/openWB/web/settings/#/Logging/ChargeLog"},{default:s(()=>[r(M,{avatar:""},{default:s(()=>[r(K,{name:"table_chart"})]),_:1}),r(M,null,{default:s(()=>l[8]||(l[8]=[Q(" Ladeprotokoll ")])),_:1})]),_:1})),[[te]]),X((E(),U(G,{clickable:"",href:"/openWB/web/settings/#/Logging/Chart"},{default:s(()=>[r(M,{avatar:""},{default:s(()=>[r(K,{name:"area_chart"})]),_:1}),r(M,null,{default:s(()=>l[9]||(l[9]=[Q(" Diagramme ")])),_:1})]),_:1})),[[te]]),r(he),X((E(),U(G,{clickable:"",href:"/openWB/web/settings/"},{default:s(()=>[r(M,{avatar:""},{default:s(()=>[r(K,{name:"settings"})]),_:1}),r(M,null,{default:s(()=>l[10]||(l[10]=[Q(" Einstellungen ")])),_:1})]),_:1})),[[te]]),r(he),r(ge,{header:""},{default:s(()=>l[11]||(l[11]=[Q("Anzeigeeinstellungen")])),_:1}),r(G,null,{default:s(()=>[r(M,{avatar:""},{default:s(()=>[r(K,{name:"light_mode"})]),_:1}),r(M,null,{default:s(()=>[r(ge,null,{default:s(()=>l[12]||(l[12]=[Q("Darstellungsmodus")])),_:1})]),_:1}),r(M,{side:""},{default:s(()=>[r(dt,{flat:""},{default:s(()=>[r(ee,{flat:"",round:"",color:o.themeMode==="light"?"primary":"",icon:"light_mode",onClick:l[1]||(l[1]=h=>o.setTheme("light")),size:"sm",disable:o.themeMode==="light","aria-label":"Light Mode"},{default:s(()=>[r(be,null,{default:s(()=>l[13]||(l[13]=[Q("Hell")])),_:1})]),_:1},8,["color","disable"]),r(ee,{flat:"",round:"",color:o.themeMode==="dark"?"primary":"",icon:"dark_mode",onClick:l[2]||(l[2]=h=>o.setTheme("dark")),size:"sm",disable:o.themeMode==="dark","aria-label":"Dark Mode"},{default:s(()=>[r(be,null,{default:s(()=>l[14]||(l[14]=[Q("Dunkel")])),_:1})]),_:1},8,["color","disable"]),r(ee,{flat:"",round:"",color:o.themeMode==="auto"?"primary":"",icon:"devices",onClick:l[3]||(l[3]=h=>o.setTheme("auto")),size:"sm",disable:o.themeMode==="auto","aria-label":"System Mode"},{default:s(()=>[r(be,null,{default:s(()=>l[15]||(l[15]=[Q("Systemeinstellung")])),_:1})]),_:1},8,["color","disable"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),r(ht,{class:"column flex centered-container"},{default:s(()=>[r(y)]),_:1})]),_:1})}const _t=Xe(bt,[["render",yt],["__scopeId","data-v-5f30bb98"],["__file","MainLayout.vue"]]);export{_t as default}; diff --git a/packages/modules/web_themes/koala/web/assets/MainLayout-g_PPAXMc.css b/packages/modules/web_themes/koala/web/assets/MainLayout-g_PPAXMc.css deleted file mode 100644 index fac2a96239..0000000000 --- a/packages/modules/web_themes/koala/web/assets/MainLayout-g_PPAXMc.css +++ /dev/null @@ -1 +0,0 @@ -.centered-container[data-v-5f30bb98]{max-width:1000px;margin-left:auto;margin-right:auto} diff --git a/packages/modules/web_themes/koala/web/assets/index-CMMTdT_8.js b/packages/modules/web_themes/koala/web/assets/index-EKspHiQe.js similarity index 99% rename from packages/modules/web_themes/koala/web/assets/index-CMMTdT_8.js rename to packages/modules/web_themes/koala/web/assets/index-EKspHiQe.js index 4d90041bf4..d7d3bf1450 100644 --- a/packages/modules/web_themes/koala/web/assets/index-CMMTdT_8.js +++ b/packages/modules/web_themes/koala/web/assets/index-EKspHiQe.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MainLayout-D_XoEdvD.js","assets/use-quasar-CokCDZeI.js","assets/MainLayout-g_PPAXMc.css","assets/IndexPage-BNtuL5nB.js","assets/mqtt-store-BO4qCeJ5.js","assets/IndexPage-BgPLllLV.css","assets/store-init-DR3g0YQB.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MainLayout-DDxw-kff.js","assets/use-quasar-uR0IoSjA.js","assets/MainLayout-Cg53HLWo.css","assets/IndexPage-Dx0R7lfD.js","assets/mqtt-store-DD98gHuI.js","assets/IndexPage-CZ8EYgcH.css","assets/store-init-DphRCu_b.js"])))=>i.map(i=>d[i]); const Ic=function(){const t=typeof document<"u"&&document.createElement("link").relList;return t&&t.supports&&t.supports("modulepreload")?"modulepreload":"preload"}(),$c=function(e){return"/openWB/web/themes/koala/"+e},No={},fr=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),l=i?.nonce||i?.getAttribute("nonce");s=Promise.allSettled(n.map(a=>{if(a=$c(a),a in No)return;No[a]=!0;const u=a.endsWith(".css"),c=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${a}"]${c}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":Ic,u||(d.as="script"),d.crossOrigin="",d.href=a,l&&d.setAttribute("nonce",l),document.head.appendChild(d),u)return new Promise((f,g)=>{d.addEventListener("load",f),d.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${a}`)))})}))}function o(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return s.then(i=>{for(const l of i||[])l.status==="rejected"&&o(l.reason);return t().catch(o)})};/** * @vue/shared v3.5.11 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -25,4 +25,4 @@ Only state can be modified.`);i[0]="$state",fn=!1,r.set(o,i,r.state.value),fn=!0 * vue-router v4.4.5 * (c) 2024 Eduardo San Martin Morote * @license MIT - */const ht=typeof document<"u";function tc(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Lh(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&tc(e.default)}const se=Object.assign;function Cs(e,t){const n={};for(const r in t){const s=t[r];n[r]=De(s)?s.map(e):e(s)}return n}const Fn=()=>{},De=Array.isArray,nc=/#/g,Ih=/&/g,$h=/\//g,Mh=/=/g,Nh=/\?/g,rc=/\+/g,jh=/%5B/g,Dh=/%5D/g,sc=/%5E/g,Fh=/%60/g,oc=/%7B/g,Bh=/%7C/g,ic=/%7D/g,Hh=/%20/g;function ko(e){return encodeURI(""+e).replace(Bh,"|").replace(jh,"[").replace(Dh,"]")}function qh(e){return ko(e).replace(oc,"{").replace(ic,"}").replace(sc,"^")}function Ys(e){return ko(e).replace(rc,"%2B").replace(Hh,"+").replace(nc,"%23").replace(Ih,"%26").replace(Fh,"`").replace(oc,"{").replace(ic,"}").replace(sc,"^")}function Vh(e){return Ys(e).replace(Mh,"%3D")}function Uh(e){return ko(e).replace(nc,"%23").replace(Nh,"%3F")}function zh(e){return e==null?"":Uh(e).replace($h,"%2F")}function vn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const Kh=/\/$/,Wh=e=>e.replace(Kh,"");function Ps(e,t,n="/"){let r,s={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),o=t.slice(a+1,l>-1?l:t.length),s=e(o)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=Yh(r??t,n),{fullPath:r+(o&&"?")+o+i,path:r,query:s,hash:vn(i)}}function Gh(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ii(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Qh(e,t,n){const r=t.matched.length-1,s=n.matched.length-1;return r>-1&&r===s&&Mt(t.matched[r],n.matched[s])&&lc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Mt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function lc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Jh(e[n],t[n]))return!1;return!0}function Jh(e,t){return De(e)?$i(e,t):De(t)?$i(t,e):e===t}function $i(e,t){return De(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Yh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),s=r[r.length-1];(s===".."||s===".")&&r.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+r.slice(i).join("/")}const St={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Gn;(function(e){e.pop="pop",e.push="push"})(Gn||(Gn={}));var Bn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Bn||(Bn={}));function Xh(e){if(!e)if(ht){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Wh(e)}const Zh=/^[^#]+#/;function ep(e,t){return e.replace(Zh,"#")+t}function tp(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const ls=()=>({left:window.scrollX,top:window.scrollY});function np(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=tp(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Mi(e,t){return(history.state?history.state.position-t:-1)+e}const Xs=new Map;function rp(e,t){Xs.set(e,t)}function sp(e){const t=Xs.get(e);return Xs.delete(e),t}let op=()=>location.protocol+"//"+location.host;function ac(e,t){const{pathname:n,search:r,hash:s}=t,o=e.indexOf("#");if(o>-1){let l=s.includes(e.slice(o))?e.slice(o).length:1,a=s.slice(l);return a[0]!=="/"&&(a="/"+a),Ii(a,"")}return Ii(n,e)+r+s}function ip(e,t,n,r){let s=[],o=[],i=null;const l=({state:f})=>{const g=ac(e,location),v=n.value,E=t.value;let P=0;if(f){if(n.value=g,t.value=f,i&&i===v){i=null;return}P=E?f.position-E.position:0}else r(g);s.forEach(R=>{R(n.value,v,{delta:P,type:Gn.pop,direction:P?P>0?Bn.forward:Bn.back:Bn.unknown})})};function a(){i=n.value}function u(f){s.push(f);const g=()=>{const v=s.indexOf(f);v>-1&&s.splice(v,1)};return o.push(g),g}function c(){const{history:f}=window;f.state&&f.replaceState(se({},f.state,{scroll:ls()}),"")}function d(){for(const f of o)f();o=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",c)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",c,{passive:!0}),{pauseListeners:a,listen:u,destroy:d}}function Ni(e,t,n,r=!1,s=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:s?ls():null}}function lp(e){const{history:t,location:n}=window,r={value:ac(e,n)},s={value:t.state};s.value||o(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,u,c){const d=e.indexOf("#"),f=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+a:op()+e+a;try{t[c?"replaceState":"pushState"](u,"",f),s.value=u}catch(g){console.error(g),n[c?"replace":"assign"](f)}}function i(a,u){const c=se({},t.state,Ni(s.value.back,a,s.value.forward,!0),u,{position:s.value.position});o(a,c,!0),r.value=a}function l(a,u){const c=se({},s.value,t.state,{forward:a,scroll:ls()});o(c.current,c,!0);const d=se({},Ni(r.value,a,null),{position:c.position+1},u);o(a,d,!1),r.value=a}return{location:r,state:s,push:l,replace:i}}function ap(e){e=Xh(e);const t=lp(e),n=ip(e,t.state,t.location,t.replace);function r(o,i=!0){i||n.pauseListeners(),history.go(o)}const s=se({location:"",base:e,go:r,createHref:ep.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function cp(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),ap(e)}function cc(e){return typeof e=="string"||e&&typeof e=="object"}function uc(e){return typeof e=="string"||typeof e=="symbol"}const fc=Symbol("");var ji;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(ji||(ji={}));function _n(e,t){return se(new Error,{type:e,[fc]:!0},t)}function ut(e,t){return e instanceof Error&&fc in e&&(t==null||!!(e.type&t))}const Di="[^/]+?",up={sensitive:!1,strict:!1,start:!0,end:!0},fp=/[.+*?^${}()[\]/\\]/g;function dp(e,t){const n=se({},up,t),r=[];let s=n.start?"^":"";const o=[];for(const u of e){const c=u.length?[]:[90];n.strict&&!u.length&&(s+="/");for(let d=0;dt.length?t.length===1&&t[0]===80?1:-1:0}function dc(e,t){let n=0;const r=e.score,s=t.score;for(;n0&&t[t.length-1]<0}const pp={type:0,value:""},gp=/[a-zA-Z0-9_]/;function mp(e){if(!e)return[[]];if(e==="/")return[[pp]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${u}": ${g}`)}let n=0,r=n;const s=[];let o;function i(){o&&s.push(o),o=[]}let l=0,a,u="",c="";function d(){u&&(n===0?o.push({type:0,value:u}):n===1||n===2||n===3?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:u,regexp:c,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function f(){u+=a}for(;l{i(S)}:Fn}function i(d){if(uc(d)){const f=r.get(d);f&&(r.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(i),f.alias.forEach(i))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&r.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function l(){return n}function a(d){const f=wp(d,n);n.splice(f,0,d),d.record.name&&!qi(d)&&r.set(d.record.name,d)}function u(d,f){let g,v={},E,P;if("name"in d&&d.name){if(g=r.get(d.name),!g)throw _n(1,{location:d});P=g.record.name,v=se(Bi(f.params,g.keys.filter(S=>!S.optional).concat(g.parent?g.parent.keys.filter(S=>S.optional):[]).map(S=>S.name)),d.params&&Bi(d.params,g.keys.map(S=>S.name))),E=g.stringify(v)}else if(d.path!=null)E=d.path,g=n.find(S=>S.re.test(E)),g&&(v=g.parse(E),P=g.record.name);else{if(g=f.name?r.get(f.name):n.find(S=>S.re.test(f.path)),!g)throw _n(1,{location:d,currentLocation:f});P=g.record.name,v=se({},f.params,d.params),E=g.stringify(v)}const R=[];let w=g;for(;w;)R.unshift(w.record),w=w.parent;return{name:P,path:E,params:v,matched:R,meta:bp(R)}}e.forEach(d=>o(d));function c(){n.length=0,r.clear()}return{addRoute:o,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:l,getRecordMatcher:s}}function Bi(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Hi(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:yp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function yp(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function qi(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function bp(e){return e.reduce((t,n)=>se(t,n.meta),{})}function Vi(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function wp(e,t){let n=0,r=t.length;for(;n!==r;){const o=n+r>>1;dc(e,t[o])<0?r=o:n=o+1}const s=Sp(e);return s&&(r=t.lastIndexOf(s,r-1)),r}function Sp(e){let t=e;for(;t=t.parent;)if(hc(t)&&dc(e,t)===0)return t}function hc({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function xp(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;so&&Ys(o)):[r&&Ys(r)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Ep(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=De(r)?r.map(s=>s==null?null:""+s):r==null?r:""+r)}return t}const Cp=Symbol(""),zi=Symbol(""),Oo=Symbol(""),pc=Symbol(""),Zs=Symbol("");function xn(){let e=[];function t(r){return e.push(r),()=>{const s=e.indexOf(r);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Rt(e,t,n,r,s,o=i=>i()){const i=r&&(r.enterCallbacks[s]=r.enterCallbacks[s]||[]);return()=>new Promise((l,a)=>{const u=f=>{f===!1?a(_n(4,{from:n,to:t})):f instanceof Error?a(f):cc(f)?a(_n(2,{from:t,to:f})):(i&&r.enterCallbacks[s]===i&&typeof f=="function"&&i.push(f),l())},c=o(()=>e.call(r&&r.instances[s],t,n,u));let d=Promise.resolve(c);e.length<3&&(d=d.then(u)),d.catch(f=>a(f))})}function Ts(e,t,n,r,s=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(tc(a)){const c=(a.__vccOpts||a)[t];c&&o.push(Rt(c,n,r,i,l,s))}else{let u=a();o.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const d=Lh(c)?c.default:c;i.mods[l]=c,i.components[l]=d;const g=(d.__vccOpts||d)[t];return g&&Rt(g,n,r,i,l,s)()}))}}return o}function Ki(e){const t=rt(Oo),n=rt(pc),r=G(()=>{const a=gt(e.to);return t.resolve(a)}),s=G(()=>{const{matched:a}=r.value,{length:u}=a,c=a[u-1],d=n.matched;if(!c||!d.length)return-1;const f=d.findIndex(Mt.bind(null,c));if(f>-1)return f;const g=Wi(a[u-2]);return u>1&&Wi(c)===g&&d[d.length-1].path!==g?d.findIndex(Mt.bind(null,a[u-2])):f}),o=G(()=>s.value>-1&&kp(n.params,r.value.params)),i=G(()=>s.value>-1&&s.value===n.matched.length-1&&lc(n.params,r.value.params));function l(a={}){return Rp(a)?t[gt(e.replace)?"replace":"push"](gt(e.to)).catch(Fn):Promise.resolve()}if(ht){const a=lt();if(a){const u={route:r.value,isActive:o.value,isExactActive:i.value,error:null};a.__vrl_devtools=a.__vrl_devtools||[],a.__vrl_devtools.push(u),wf(()=>{u.route=r.value,u.isActive=o.value,u.isExactActive=i.value,u.error=cc(gt(e.to))?null:'Invalid "to" value'},{flush:"post"})}}return{route:r,href:G(()=>r.value.href),isActive:o,isExactActive:i,navigate:l}}const Pp=Qr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Ki,setup(e,{slots:t}){const n=Xt(Ki(e)),{options:r}=rt(Oo),s=G(()=>({[Gi(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Gi(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:W("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},o)}}}),Tp=Pp;function Rp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function kp(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(!De(s)||s.length!==r.length||r.some((o,i)=>o!==s[i]))return!1}return!0}function Wi(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Gi=(e,t,n)=>e??t??n,Op=Qr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=rt(Zs),s=G(()=>e.route||r.value),o=rt(zi,0),i=G(()=>{let u=gt(o);const{matched:c}=s.value;let d;for(;(d=c[u])&&!d.components;)u++;return u}),l=G(()=>s.value.matched[i.value]);hr(zi,G(()=>i.value+1)),hr(Cp,l),hr(Zs,s);const a=Gt();return Lt(()=>[a.value,l.value,e.name],([u,c,d],[f,g,v])=>{c&&(c.instances[d]=u,g&&g!==c&&u&&u===f&&(c.leaveGuards.size||(c.leaveGuards=g.leaveGuards),c.updateGuards.size||(c.updateGuards=g.updateGuards))),u&&c&&(!g||!Mt(c,g)||!f)&&(c.enterCallbacks[d]||[]).forEach(E=>E(u))},{flush:"post"}),()=>{const u=s.value,c=e.name,d=l.value,f=d&&d.components[c];if(!f)return Qi(n.default,{Component:f,route:u});const g=d.props[c],v=g?g===!0?u.params:typeof g=="function"?g(u):g:null,P=W(f,se({},v,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(d.instances[c]=null)},ref:a}));if(ht&&P.ref){const R={depth:i.value,name:d.name,path:d.path,meta:d.meta};(De(P.ref)?P.ref.map(S=>S.i):[P.ref.i]).forEach(S=>{S.__vrv_devtools=R})}return Qi(n.default,{Component:P,route:u})||P}}});function Qi(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Ap=Op;function En(e,t){const n=se({},e,{matched:e.matched.map(r=>qp(r,["instances","children","aliasOf"]))});return{_custom:{type:null,readOnly:!0,display:e.fullPath,tooltip:t,value:n}}}function ur(e){return{_custom:{display:e}}}let Lp=0;function Ip(e,t,n){if(t.__hasDevtools)return;t.__hasDevtools=!0;const r=Lp++;Po({id:"org.vuejs.router"+(r?"."+r:""),label:"Vue Router",packageName:"vue-router",homepage:"https://router.vuejs.org",logo:"https://router.vuejs.org/logo.png",componentStateTypes:["Routing"],app:e},s=>{typeof s.now!="function"&&console.warn("[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),s.on.inspectComponent((c,d)=>{c.instanceData&&c.instanceData.state.push({type:"Routing",key:"$route",editable:!1,value:En(t.currentRoute.value,"Current Route")})}),s.on.visitComponentTree(({treeNode:c,componentInstance:d})=>{if(d.__vrv_devtools){const f=d.__vrv_devtools;c.tags.push({label:(f.name?`${f.name.toString()}: `:"")+f.path,textColor:0,tooltip:"This component is rendered by <router-view>",backgroundColor:gc})}De(d.__vrl_devtools)&&(d.__devtoolsApi=s,d.__vrl_devtools.forEach(f=>{let g=f.route.path,v=_c,E="",P=0;f.error?(g=f.error,v=Dp,P=Fp):f.isExactActive?(v=vc,E="This is exactly active"):f.isActive&&(v=mc,E="This link is active"),c.tags.push({label:g,textColor:P,tooltip:E,backgroundColor:v})}))}),Lt(t.currentRoute,()=>{a(),s.notifyComponentUpdate(),s.sendInspectorTree(l),s.sendInspectorState(l)});const o="router:navigations:"+r;s.addTimelineLayer({id:o,label:`Router${r?" "+r:""} Navigations`,color:4237508}),t.onError((c,d)=>{s.addTimelineEvent({layerId:o,event:{title:"Error during Navigation",subtitle:d.fullPath,logType:"error",time:s.now(),data:{error:c},groupId:d.meta.__navigationId}})});let i=0;t.beforeEach((c,d)=>{const f={guard:ur("beforeEach"),from:En(d,"Current Location during this navigation"),to:En(c,"Target location")};Object.defineProperty(c.meta,"__navigationId",{value:i++}),s.addTimelineEvent({layerId:o,event:{time:s.now(),title:"Start of navigation",subtitle:c.fullPath,data:f,groupId:c.meta.__navigationId}})}),t.afterEach((c,d,f)=>{const g={guard:ur("afterEach")};f?(g.failure={_custom:{type:Error,readOnly:!0,display:f?f.message:"",tooltip:"Navigation Failure",value:f}},g.status=ur("❌")):g.status=ur("✅"),g.from=En(d,"Current Location during this navigation"),g.to=En(c,"Target location"),s.addTimelineEvent({layerId:o,event:{title:"End of navigation",subtitle:c.fullPath,time:s.now(),data:g,logType:f?"warning":"default",groupId:c.meta.__navigationId}})});const l="router-inspector:"+r;s.addInspector({id:l,label:"Routes"+(r?" "+r:""),icon:"book",treeFilterPlaceholder:"Search routes"});function a(){if(!u)return;const c=u;let d=n.getRoutes().filter(f=>!f.parent||!f.parent.record.components);d.forEach(wc),c.filter&&(d=d.filter(f=>eo(f,c.filter.toLowerCase()))),d.forEach(f=>bc(f,t.currentRoute.value)),c.rootNodes=d.map(yc)}let u;s.on.getInspectorTree(c=>{u=c,c.app===e&&c.inspectorId===l&&a()}),s.on.getInspectorState(c=>{if(c.app===e&&c.inspectorId===l){const f=n.getRoutes().find(g=>g.record.__vd_id===c.nodeId);f&&(c.state={options:Mp(f)})}}),s.sendInspectorTree(l),s.sendInspectorState(l)})}function $p(e){return e.optional?e.repeatable?"*":"?":e.repeatable?"+":""}function Mp(e){const{record:t}=e,n=[{editable:!1,key:"path",value:t.path}];return t.name!=null&&n.push({editable:!1,key:"name",value:t.name}),n.push({editable:!1,key:"regexp",value:e.re}),e.keys.length&&n.push({editable:!1,key:"keys",value:{_custom:{type:null,readOnly:!0,display:e.keys.map(r=>`${r.name}${$p(r)}`).join(" "),tooltip:"Param keys",value:e.keys}}}),t.redirect!=null&&n.push({editable:!1,key:"redirect",value:t.redirect}),e.alias.length&&n.push({editable:!1,key:"aliases",value:e.alias.map(r=>r.record.path)}),Object.keys(e.record.meta).length&&n.push({editable:!1,key:"meta",value:e.record.meta}),n.push({key:"score",editable:!1,value:{_custom:{type:null,readOnly:!0,display:e.score.map(r=>r.join(", ")).join(" | "),tooltip:"Score used to sort routes",value:e.score}}}),n}const gc=15485081,mc=2450411,vc=8702998,Np=2282478,_c=16486972,jp=6710886,Dp=16704226,Fp=12131356;function yc(e){const t=[],{record:n}=e;n.name!=null&&t.push({label:String(n.name),textColor:0,backgroundColor:Np}),n.aliasOf&&t.push({label:"alias",textColor:0,backgroundColor:_c}),e.__vd_match&&t.push({label:"matches",textColor:0,backgroundColor:gc}),e.__vd_exactActive&&t.push({label:"exact",textColor:0,backgroundColor:vc}),e.__vd_active&&t.push({label:"active",textColor:0,backgroundColor:mc}),n.redirect&&t.push({label:typeof n.redirect=="string"?`redirect: ${n.redirect}`:"redirects",textColor:16777215,backgroundColor:jp});let r=n.__vd_id;return r==null&&(r=String(Bp++),n.__vd_id=r),{id:r,label:n.path,tags:t,children:e.children.map(yc)}}let Bp=0;const Hp=/^\/(.*)\/([a-z]*)$/;function bc(e,t){const n=t.matched.length&&Mt(t.matched[t.matched.length-1],e.record);e.__vd_exactActive=e.__vd_active=n,n||(e.__vd_active=t.matched.some(r=>Mt(r,e.record))),e.children.forEach(r=>bc(r,t))}function wc(e){e.__vd_match=!1,e.children.forEach(wc)}function eo(e,t){const n=String(e.re).match(Hp);if(e.__vd_match=!1,!n||n.length<3)return!1;if(new RegExp(n[1].replace(/\$$/,""),n[2]).test(t))return e.children.forEach(i=>eo(i,t)),e.record.path!=="/"||t==="/"?(e.__vd_match=e.re.test(t),!0):!1;const s=e.record.path.toLowerCase(),o=vn(s);return!t.startsWith("/")&&(o.includes(t)||s.includes(t))||o.startsWith(t)||s.startsWith(t)||e.record.name&&String(e.record.name).includes(t)?!0:e.children.some(i=>eo(i,t))}function qp(e,t){const n={};for(const r in e)t.includes(r)||(n[r]=e[r]);return n}function Vp(e){const t=_p(e.routes,e),n=e.parseQuery||xp,r=e.stringifyQuery||Ui,s=e.history,o=xn(),i=xn(),l=xn(),a=Il(St);let u=St;ht&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Cs.bind(null,b=>""+b),d=Cs.bind(null,zh),f=Cs.bind(null,vn);function g(b,H){let D,V;return uc(b)?(D=t.getRecordMatcher(b),V=H):V=b,t.addRoute(V,D)}function v(b){const H=t.getRecordMatcher(b);H&&t.removeRoute(H)}function E(){return t.getRoutes().map(b=>b.record)}function P(b){return!!t.getRecordMatcher(b)}function R(b,H){if(H=se({},H||a.value),typeof b=="string"){const p=Ps(n,b,H.path),m=t.resolve({path:p.path},H),x=s.createHref(p.fullPath);return se(p,m,{params:f(m.params),hash:vn(p.hash),redirectedFrom:void 0,href:x})}let D;if(b.path!=null)D=se({},b,{path:Ps(n,b.path,H.path).path});else{const p=se({},b.params);for(const m in p)p[m]==null&&delete p[m];D=se({},b,{params:d(p)}),H.params=d(H.params)}const V=t.resolve(D,H),ie=b.hash||"";V.params=c(f(V.params));const pe=Gh(r,se({},b,{hash:qh(ie),path:V.path})),h=s.createHref(pe);return se({fullPath:pe,hash:ie,query:r===Ui?Ep(b.query):b.query||{}},V,{redirectedFrom:void 0,href:h})}function w(b){return typeof b=="string"?Ps(n,b,a.value.path):se({},b)}function S(b,H){if(u!==b)return _n(8,{from:H,to:b})}function y(b){return j(b)}function I(b){return y(se(w(b),{replace:!0}))}function q(b){const H=b.matched[b.matched.length-1];if(H&&H.redirect){const{redirect:D}=H;let V=typeof D=="function"?D(b):D;return typeof V=="string"&&(V=V.includes("?")||V.includes("#")?V=w(V):{path:V},V.params={}),se({query:b.query,hash:b.hash,params:V.path!=null?{}:b.params},V)}}function j(b,H){const D=u=R(b),V=a.value,ie=b.state,pe=b.force,h=b.replace===!0,p=q(D);if(p)return j(se(w(p),{state:typeof p=="object"?se({},ie,p.state):ie,force:pe,replace:h}),H||D);const m=D;m.redirectedFrom=H;let x;return!pe&&Qh(r,V,D)&&(x=_n(16,{to:m,from:V}),Ye(V,V,!0,!1)),(x?Promise.resolve(x):$(m,V)).catch(_=>ut(_)?ut(_,2)?_:yt(_):te(_,m,V)).then(_=>{if(_){if(ut(_,2))return j(se({replace:h},w(_.to),{state:typeof _.to=="object"?se({},ie,_.to.state):ie,force:pe}),H||m)}else _=O(m,V,!0,h,ie);return L(m,V,_),_})}function X(b,H){const D=S(b,H);return D?Promise.reject(D):Promise.resolve()}function F(b){const H=en.values().next().value;return H&&typeof H.runWithContext=="function"?H.runWithContext(b):b()}function $(b,H){let D;const[V,ie,pe]=Up(b,H);D=Ts(V.reverse(),"beforeRouteLeave",b,H);for(const p of V)p.leaveGuards.forEach(m=>{D.push(Rt(m,b,H))});const h=X.bind(null,b,H);return D.push(h),Fe(D).then(()=>{D=[];for(const p of o.list())D.push(Rt(p,b,H));return D.push(h),Fe(D)}).then(()=>{D=Ts(ie,"beforeRouteUpdate",b,H);for(const p of ie)p.updateGuards.forEach(m=>{D.push(Rt(m,b,H))});return D.push(h),Fe(D)}).then(()=>{D=[];for(const p of pe)if(p.beforeEnter)if(De(p.beforeEnter))for(const m of p.beforeEnter)D.push(Rt(m,b,H));else D.push(Rt(p.beforeEnter,b,H));return D.push(h),Fe(D)}).then(()=>(b.matched.forEach(p=>p.enterCallbacks={}),D=Ts(pe,"beforeRouteEnter",b,H,F),D.push(h),Fe(D))).then(()=>{D=[];for(const p of i.list())D.push(Rt(p,b,H));return D.push(h),Fe(D)}).catch(p=>ut(p,8)?p:Promise.reject(p))}function L(b,H,D){l.list().forEach(V=>F(()=>V(b,H,D)))}function O(b,H,D,V,ie){const pe=S(b,H);if(pe)return pe;const h=H===St,p=ht?history.state:{};D&&(V||h?s.replace(b.fullPath,se({scroll:h&&p&&p.scroll},ie)):s.push(b.fullPath,ie)),a.value=b,Ye(b,H,D,h),yt()}let Y;function M(){Y||(Y=s.listen((b,H,D)=>{if(!er.listening)return;const V=R(b),ie=q(V);if(ie){j(se(ie,{replace:!0}),V).catch(Fn);return}u=V;const pe=a.value;ht&&rp(Mi(pe.fullPath,D.delta),ls()),$(V,pe).catch(h=>ut(h,12)?h:ut(h,2)?(j(h.to,V).then(p=>{ut(p,20)&&!D.delta&&D.type===Gn.pop&&s.go(-1,!1)}).catch(Fn),Promise.reject()):(D.delta&&s.go(-D.delta,!1),te(h,V,pe))).then(h=>{h=h||O(V,pe,!1),h&&(D.delta&&!ut(h,8)?s.go(-D.delta,!1):D.type===Gn.pop&&ut(h,20)&&s.go(-1,!1)),L(V,pe,h)}).catch(Fn)}))}let ee=xn(),ae=xn(),re;function te(b,H,D){yt(b);const V=ae.list();return V.length?V.forEach(ie=>ie(b,H,D)):console.error(b),Promise.reject(b)}function ge(){return re&&a.value!==St?Promise.resolve():new Promise((b,H)=>{ee.add([b,H])})}function yt(b){return re||(re=!b,M(),ee.list().forEach(([H,D])=>b?D(b):H()),ee.reset()),b}function Ye(b,H,D,V){const{scrollBehavior:ie}=e;if(!ht||!ie)return Promise.resolve();const pe=!D&&sp(Mi(b.fullPath,0))||(V||!D)&&history.state&&history.state.scroll||null;return mo().then(()=>ie(b,H,pe)).then(h=>h&&np(h)).catch(h=>te(h,b,H))}const Ie=b=>s.go(b);let Zt;const en=new Set,er={currentRoute:a,listening:!0,addRoute:g,removeRoute:v,clearRoutes:t.clearRoutes,hasRoute:P,getRoutes:E,resolve:R,options:e,push:y,replace:I,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:ae.add,isReady:ge,install(b){const H=this;b.component("RouterLink",Tp),b.component("RouterView",Ap),b.config.globalProperties.$router=H,Object.defineProperty(b.config.globalProperties,"$route",{enumerable:!0,get:()=>gt(a)}),ht&&!Zt&&a.value===St&&(Zt=!0,y(s.location).catch(ie=>{}));const D={};for(const ie in St)Object.defineProperty(D,ie,{get:()=>a.value[ie],enumerable:!0});b.provide(Oo,H),b.provide(pc,Al(D)),b.provide(Zs,a);const V=b.unmount;en.add(b),b.unmount=function(){en.delete(b),en.size<1&&(u=St,Y&&Y(),Y=null,a.value=St,Zt=!1,re=!1),V()},ht&&Ip(b,H,t)}};function Fe(b){return b.reduce((H,D)=>H.then(()=>F(D)),Promise.resolve())}return er}function Up(e,t){const n=[],r=[],s=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iMt(u,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(u=>Mt(u,a))||s.push(a))}return[n,r,s]}const zp=[{path:"/",component:()=>fr(()=>import("./MainLayout-D_XoEdvD.js"),__vite__mapDeps([0,1,2])),children:[{path:"",component:()=>fr(()=>import("./IndexPage-BNtuL5nB.js"),__vite__mapDeps([3,1,4,5]))}]},{path:"/:catchAll(.*)*",component:()=>fr(()=>import("./ErrorNotFound-Ci81UTWi.js"),[])}],Rs=function(){return Vp({scrollBehavior:()=>({left:0,top:0}),routes:zp,history:cp("/openWB/web/themes/koala/")})};async function Kp(e,t){const n=e(eh);n.use(Jd,t);const r=typeof Es=="function"?await Es({}):Es;n.use(r);const s=it(typeof Rs=="function"?await Rs({store:r}):Rs);return r.use(({store:o})=>{o.router=s}),{app:n,store:r,router:s}}const Wp={isoName:"de-DE",nativeName:"Deutsch (DE)",label:{clear:"Leeren",ok:"Ok",cancel:"Abbrechen",close:"Schließen",set:"Setzen",select:"Auswählen",reset:"Zurücksetzen",remove:"Löschen",update:"Aktualisieren",create:"Erstellen",search:"Suche",filter:"Filter",refresh:"Aktualisieren",expand:e=>e?`Erweitern Sie "${e}"`:"Erweitern",collapse:e=>e?`"${e}" minimieren`:"Zusammenbruch"},date:{days:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),daysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan_Feb_März_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"Tage"},table:{noData:"Keine Daten vorhanden.",noResults:"Keine Einträge gefunden",loading:"Lade...",selectedRecords:e=>e>1?e+" ausgewählte Zeilen":(e===0?"Keine":"1")+" ausgewählt.",recordsPerPage:"Zeilen pro Seite",allRows:"Alle",pagination:(e,t,n)=>e+"-"+t+" von "+n,columns:"Spalten"},editor:{url:"URL",bold:"Fett",italic:"Kursiv",strikethrough:"Durchgestrichen",underline:"Unterstrichen",unorderedList:"Ungeordnete Liste",orderedList:"Geordnete Liste",subscript:"tiefgestellt",superscript:"hochgestellt",hyperlink:"Link",toggleFullscreen:"Vollbild umschalten",quote:"Zitat",left:"linksbündig",center:"zentriert",right:"rechtsbündig",justify:"Ausrichten",print:"Drucken",outdent:"ausrücken",indent:"einrücken",removeFormat:"Entferne Formatierung",formatting:"Formatiere",fontSize:"Schriftgröße",align:"Ausrichten",hr:"Horizontale Linie einfügen",undo:"Rückgänging",redo:"Wiederherstellen",heading1:"Überschrift 1",heading2:"Überschrift 2",heading3:"Überschrift 3",heading4:"Überschrift 4",heading5:"Überschrift 5",heading6:"Überschrift 6",paragraph:"Absatz",code:"Code",size1:"Sehr klein",size2:"klein",size3:"Normal",size4:"Groß",size5:"Größer",size6:"Sehr groß",size7:"Maximum",defaultFont:"Standard Schrift",viewSource:"Quelltext anzeigen"},tree:{noNodes:"Keine Knoten verfügbar",noResults:"Keine passenden Knoten gefunden"}},to={xs:18,sm:24,md:32,lg:38,xl:46},Ao={size:String};function Lo(e,t=to){return G(()=>e.size!==void 0?{fontSize:e.size in t?`${t[e.size]}px`:e.size}:null)}function Gp(e,t){return e!==void 0&&e()||t}function fm(e,t){if(e!==void 0){const n=e();if(n!=null)return n.slice()}return t}function kn(e,t){return e!==void 0?t.concat(e()):t}function Qp(e,t){return e===void 0?t:t!==void 0?t.concat(e()):e()}function dm(e,t,n,r,s,o){t.key=r+s;const i=W(e,t,n);return s===!0?Vl(i,o()):i}const Ji="0 0 24 24",Yi=e=>e,ks=e=>`ionicons ${e}`,Sc={"mdi-":e=>`mdi ${e}`,"icon-":Yi,"bt-":e=>`bt ${e}`,"eva-":e=>`eva ${e}`,"ion-md":ks,"ion-ios":ks,"ion-logo":ks,"iconfont ":Yi,"ti-":e=>`themify-icon ${e}`,"bi-":e=>`bootstrap-icons ${e}`},xc={o_:"-outlined",r_:"-round",s_:"-sharp"},Ec={sym_o_:"-outlined",sym_r_:"-rounded",sym_s_:"-sharp"},Jp=new RegExp("^("+Object.keys(Sc).join("|")+")"),Yp=new RegExp("^("+Object.keys(xc).join("|")+")"),Xi=new RegExp("^("+Object.keys(Ec).join("|")+")"),Xp=/^[Mm]\s?[-+]?\.?\d/,Zp=/^img:/,eg=/^svguse:/,tg=/^ion-/,ng=/^(fa-(classic|sharp|solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /,Fr=Zn({name:"QIcon",props:{...Ao,tag:{type:String,default:"i"},name:String,color:String,left:Boolean,right:Boolean},setup(e,{slots:t}){const{proxy:{$q:n}}=lt(),r=Lo(e),s=G(()=>"q-icon"+(e.left===!0?" on-left":"")+(e.right===!0?" on-right":"")+(e.color!==void 0?` text-${e.color}`:"")),o=G(()=>{let i,l=e.name;if(l==="none"||!l)return{none:!0};if(n.iconMapFn!==null){const c=n.iconMapFn(l);if(c!==void 0)if(c.icon!==void 0){if(l=c.icon,l==="none"||!l)return{none:!0}}else return{cls:c.cls,content:c.content!==void 0?c.content:" "}}if(Xp.test(l)===!0){const[c,d=Ji]=l.split("|");return{svg:!0,viewBox:d,nodes:c.split("&&").map(f=>{const[g,v,E]=f.split("@@");return W("path",{style:v,d:g,transform:E})})}}if(Zp.test(l)===!0)return{img:!0,src:l.substring(4)};if(eg.test(l)===!0){const[c,d=Ji]=l.split("|");return{svguse:!0,src:c.substring(7),viewBox:d}}let a=" ";const u=l.match(Jp);if(u!==null)i=Sc[u[1]](l);else if(ng.test(l)===!0)i=l;else if(tg.test(l)===!0)i=`ionicons ion-${n.platform.is.ios===!0?"ios":"md"}${l.substring(3)}`;else if(Xi.test(l)===!0){i="notranslate material-symbols";const c=l.match(Xi);c!==null&&(l=l.substring(6),i+=Ec[c[1]]),a=l}else{i="notranslate material-icons";const c=l.match(Yp);c!==null&&(l=l.substring(2),i+=xc[c[1]]),a=l}return{cls:i,content:a}});return()=>{const i={class:s.value,style:r.value,"aria-hidden":"true",role:"presentation"};return o.value.none===!0?W(e.tag,i,Gp(t.default)):o.value.img===!0?W(e.tag,i,kn(t.default,[W("img",{src:o.value.src})])):o.value.svg===!0?W(e.tag,i,kn(t.default,[W("svg",{viewBox:o.value.viewBox||"0 0 24 24"},o.value.nodes)])):o.value.svguse===!0?W(e.tag,i,kn(t.default,[W("svg",{viewBox:o.value.viewBox},[W("use",{"xlink:href":o.value.src})])])):(o.value.cls!==void 0&&(i.class+=" "+o.value.cls),W(e.tag,i,kn(t.default,[o.value.content])))}}}),rg=Zn({name:"QAvatar",props:{...Ao,fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},setup(e,{slots:t}){const n=Lo(e),r=G(()=>"q-avatar"+(e.color?` bg-${e.color}`:"")+(e.textColor?` text-${e.textColor} q-chip--colored`:"")+(e.square===!0?" q-avatar--square":e.rounded===!0?" rounded-borders":"")),s=G(()=>e.fontSize?{fontSize:e.fontSize}:null);return()=>{const o=e.icon!==void 0?[W(Fr,{name:e.icon})]:void 0;return W("div",{class:r.value,style:n.value},[W("div",{class:"q-avatar__content row flex-center overflow-hidden",style:s.value},Qp(t.default,o))])}}}),sg={size:{type:[String,Number],default:"1em"},color:String};function og(e){return{cSize:G(()=>e.size in to?`${to[e.size]}px`:e.size),classes:G(()=>"q-spinner"+(e.color?` text-${e.color}`:""))}}const Cc=Zn({name:"QSpinner",props:{...sg,thickness:{type:Number,default:5}},setup(e){const{cSize:t,classes:n}=og(e);return()=>W("svg",{class:n.value+" q-spinner-mat",width:t.value,height:t.value,viewBox:"25 25 50 50"},[W("circle",{class:"path",cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":e.thickness,"stroke-miterlimit":"10"})])}});function ig(e,t){const n=e.style;for(const r in t)n[r]=t[r]}function hm(e){if(e==null)return;if(typeof e=="string")try{return document.querySelector(e)||void 0}catch{return}const t=gt(e);if(t)return t.$el||t}function pm(e,t){if(e==null||e.contains(t)===!0)return!0;for(let n=e.nextElementSibling;n!==null;n=n.nextElementSibling)if(n.contains(t))return!0;return!1}function lg(e,t=250){let n=!1,r;return function(){return n===!1&&(n=!0,setTimeout(()=>{n=!1},t),r=e.apply(this,arguments)),r}}function Zi(e,t,n,r){n.modifiers.stop===!0&&ja(e);const s=n.modifiers.color;let o=n.modifiers.center;o=o===!0||r===!0;const i=document.createElement("span"),l=document.createElement("span"),a=Rd(e),{left:u,top:c,width:d,height:f}=t.getBoundingClientRect(),g=Math.sqrt(d*d+f*f),v=g/2,E=`${(d-g)/2}px`,P=o?E:`${a.left-u-v}px`,R=`${(f-g)/2}px`,w=o?R:`${a.top-c-v}px`;l.className="q-ripple__inner",ig(l,{height:`${g}px`,width:`${g}px`,transform:`translate3d(${P},${w},0) scale3d(.2,.2,1)`,opacity:0}),i.className=`q-ripple${s?" text-"+s:""}`,i.setAttribute("dir","ltr"),i.appendChild(l),t.appendChild(i);const S=()=>{i.remove(),clearTimeout(y)};n.abort.push(S);let y=setTimeout(()=>{l.classList.add("q-ripple__inner--enter"),l.style.transform=`translate3d(${E},${R},0) scale3d(1,1,1)`,l.style.opacity=.2,y=setTimeout(()=>{l.classList.remove("q-ripple__inner--enter"),l.classList.add("q-ripple__inner--leave"),l.style.opacity=0,y=setTimeout(()=>{i.remove(),n.abort.splice(n.abort.indexOf(S),1)},275)},250)},50)}function el(e,{modifiers:t,value:n,arg:r}){const s=Object.assign({},e.cfg.ripple,t,n);e.modifiers={early:s.early===!0,stop:s.stop===!0,center:s.center===!0,color:s.color||r,keyCodes:[].concat(s.keyCodes||13)}}const ag=Td({name:"ripple",beforeMount(e,t){const n=t.instance.$.appContext.config.globalProperties.$q.config||{};if(n.ripple===!1)return;const r={cfg:n,enabled:t.value!==!1,modifiers:{},abort:[],start(s){r.enabled===!0&&s.qSkipRipple!==!0&&s.type===(r.modifiers.early===!0?"pointerdown":"click")&&Zi(s,e,r,s.qKeyEvent===!0)},keystart:lg(s=>{r.enabled===!0&&s.qSkipRipple!==!0&&Ws(s,r.modifiers.keyCodes)===!0&&s.type===`key${r.modifiers.early===!0?"down":"up"}`&&Zi(s,e,r,!0)},300)};el(r,t),e.__qripple=r,kd(r,"main",[[e,"pointerdown","start","passive"],[e,"click","start","passive"],[e,"keydown","keystart","passive"],[e,"keyup","keystart","passive"]])},updated(e,t){if(t.oldValue!==t.value){const n=e.__qripple;n!==void 0&&(n.enabled=t.value!==!1,n.enabled===!0&&Object(t.value)===t.value&&el(n,t))}},beforeUnmount(e){const t=e.__qripple;t!==void 0&&(t.abort.forEach(n=>{n()}),Od(t,"main"),delete e._qripple)}}),Pc={left:"start",center:"center",right:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},cg=Object.keys(Pc),ug={align:{type:String,validator:e=>cg.includes(e)}};function fg(e){return G(()=>{const t=e.align===void 0?e.vertical===!0?"stretch":"left":e.align;return`${e.vertical===!0?"items":"justify"}-${Pc[t]}`})}function gm(e){if(Object(e.$parent)===e.$parent)return e.$parent;let{parent:t}=e.$;for(;Object(t)===t;){if(Object(t.proxy)===t.proxy)return t.proxy;t=t.parent}}function Tc(e,t){typeof t.type=="symbol"?Array.isArray(t.children)===!0&&t.children.forEach(n=>{Tc(e,n)}):e.add(t)}function mm(e){const t=new Set;return e.forEach(n=>{Tc(t,n)}),Array.from(t)}function dg(e){return e.appContext.config.globalProperties.$router!==void 0}function vm(e){return e.isUnmounted===!0||e.isDeactivated===!0}function tl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}function nl(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function hg(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(Array.isArray(s)===!1||s.length!==r.length||r.some((o,i)=>o!==s[i]))return!1}return!0}function rl(e,t){return Array.isArray(t)===!0?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function pg(e,t){return Array.isArray(e)===!0?rl(e,t):Array.isArray(t)===!0?rl(t,e):e===t}function gg(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(pg(e[n],t[n])===!1)return!1;return!0}const Rc={to:[String,Object],replace:Boolean,href:String,target:String,disable:Boolean},_m={...Rc,exact:Boolean,activeClass:{type:String,default:"q-router-link--active"},exactActiveClass:{type:String,default:"q-router-link--exact-active"}};function mg({fallbackTag:e,useDisableForRouterLinkProps:t=!0}={}){const n=lt(),{props:r,proxy:s,emit:o}=n,i=dg(n),l=G(()=>r.disable!==!0&&r.href!==void 0),a=G(t===!0?()=>i===!0&&r.disable!==!0&&l.value!==!0&&r.to!==void 0&&r.to!==null&&r.to!=="":()=>i===!0&&l.value!==!0&&r.to!==void 0&&r.to!==null&&r.to!==""),u=G(()=>a.value===!0?w(r.to):null),c=G(()=>u.value!==null),d=G(()=>l.value===!0||c.value===!0),f=G(()=>r.type==="a"||d.value===!0?"a":r.tag||e||"div"),g=G(()=>l.value===!0?{href:r.href,target:r.target}:c.value===!0?{href:u.value.href,target:r.target}:{}),v=G(()=>{if(c.value===!1)return-1;const{matched:I}=u.value,{length:q}=I,j=I[q-1];if(j===void 0)return-1;const X=s.$route.matched;if(X.length===0)return-1;const F=X.findIndex(nl.bind(null,j));if(F!==-1)return F;const $=tl(I[q-2]);return q>1&&tl(j)===$&&X[X.length-1].path!==$?X.findIndex(nl.bind(null,I[q-2])):F}),E=G(()=>c.value===!0&&v.value!==-1&&hg(s.$route.params,u.value.params)),P=G(()=>E.value===!0&&v.value===s.$route.matched.length-1&&gg(s.$route.params,u.value.params)),R=G(()=>c.value===!0?P.value===!0?` ${r.exactActiveClass} ${r.activeClass}`:r.exact===!0?"":E.value===!0?` ${r.activeClass}`:"":"");function w(I){try{return s.$router.resolve(I)}catch{}return null}function S(I,{returnRouterError:q,to:j=r.to,replace:X=r.replace}={}){if(r.disable===!0)return I.preventDefault(),Promise.resolve(!1);if(I.metaKey||I.altKey||I.ctrlKey||I.shiftKey||I.button!==void 0&&I.button!==0||r.target==="_blank")return Promise.resolve(!1);I.preventDefault();const F=s.$router[X===!0?"replace":"push"](j);return q===!0?F:F.then(()=>{}).catch(()=>{})}function y(I){if(c.value===!0){const q=j=>S(I,j);o("click",I,q),I.defaultPrevented!==!0&&q()}else o("click",I)}return{hasRouterLink:c,hasHrefLink:l,hasLink:d,linkTag:f,resolvedLink:u,linkIsActive:E,linkIsExactActive:P,linkClass:R,linkAttrs:g,getLink:w,navigateToRouterLink:S,navigateOnClick:y}}const sl={none:0,xs:4,sm:8,md:16,lg:24,xl:32},vg={xs:8,sm:10,md:14,lg:20,xl:24},_g=["button","submit","reset"],yg=/[^\s]\/[^\s]/,bg=["flat","outline","push","unelevated"];function kc(e,t){return e.flat===!0?"flat":e.outline===!0?"outline":e.push===!0?"push":e.unelevated===!0?"unelevated":t}function ym(e){const t=kc(e);return t!==void 0?{[t]:!0}:{}}const wg={...Ao,...Rc,type:{type:String,default:"button"},label:[Number,String],icon:String,iconRight:String,...bg.reduce((e,t)=>(e[t]=Boolean)&&e,{}),square:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],ripple:{type:[Boolean,Object],default:!0},align:{...ug.align,default:"center"},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean},Sg={...wg,round:Boolean};function xg(e){const t=Lo(e,vg),n=fg(e),{hasRouterLink:r,hasLink:s,linkTag:o,linkAttrs:i,navigateOnClick:l}=mg({fallbackTag:"button"}),a=G(()=>{const P=e.fab===!1&&e.fabMini===!1?t.value:{};return e.padding!==void 0?Object.assign({},P,{padding:e.padding.split(/\s+/).map(R=>R in sl?sl[R]+"px":R).join(" "),minWidth:"0",minHeight:"0"}):P}),u=G(()=>e.rounded===!0||e.fab===!0||e.fabMini===!0),c=G(()=>e.disable!==!0&&e.loading!==!0),d=G(()=>c.value===!0?e.tabindex||0:-1),f=G(()=>kc(e,"standard")),g=G(()=>{const P={tabindex:d.value};return s.value===!0?Object.assign(P,i.value):_g.includes(e.type)===!0&&(P.type=e.type),o.value==="a"?(e.disable===!0?P["aria-disabled"]="true":P.href===void 0&&(P.role="button"),r.value!==!0&&yg.test(e.type)===!0&&(P.type=e.type)):e.disable===!0&&(P.disabled="",P["aria-disabled"]="true"),e.loading===!0&&e.percentage!==void 0&&Object.assign(P,{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":e.percentage}),P}),v=G(()=>{let P;e.color!==void 0?e.flat===!0||e.outline===!0?P=`text-${e.textColor||e.color}`:P=`bg-${e.color} text-${e.textColor||"white"}`:e.textColor&&(P=`text-${e.textColor}`);const R=e.round===!0?"round":`rectangle${u.value===!0?" q-btn--rounded":e.square===!0?" q-btn--square":""}`;return`q-btn--${f.value} q-btn--${R}`+(P!==void 0?" "+P:"")+(c.value===!0?" q-btn--actionable q-focusable q-hoverable":e.disable===!0?" disabled":"")+(e.fab===!0?" q-btn--fab":e.fabMini===!0?" q-btn--fab-mini":"")+(e.noCaps===!0?" q-btn--no-uppercase":"")+(e.dense===!0?" q-btn--dense":"")+(e.stretch===!0?" no-border-radius self-stretch":"")+(e.glossy===!0?" glossy":"")+(e.square?" q-btn--square":"")}),E=G(()=>n.value+(e.stack===!0?" column":" row")+(e.noWrap===!0?" no-wrap text-no-wrap":"")+(e.loading===!0?" q-btn__content--hidden":""));return{classes:v,style:a,innerClasses:E,attributes:g,hasLink:s,linkTag:o,navigateOnClick:l,isActionable:c}}const{passiveCapture:He}=Jt;let on=null,ln=null,an=null;const Eg=Zn({name:"QBtn",props:{...Sg,percentage:Number,darkPercentage:Boolean,onTouchstart:[Function,Array]},emits:["click","keydown","mousedown","keyup"],setup(e,{slots:t,emit:n}){const{proxy:r}=lt(),{classes:s,style:o,innerClasses:i,attributes:l,hasLink:a,linkTag:u,navigateOnClick:c,isActionable:d}=xg(e),f=Gt(null),g=Gt(null);let v=null,E,P=null;const R=G(()=>e.label!==void 0&&e.label!==null&&e.label!==""),w=G(()=>e.disable===!0||e.ripple===!1?!1:{keyCodes:a.value===!0?[13,32]:[13],...e.ripple===!0?{}:e.ripple}),S=G(()=>({center:e.round})),y=G(()=>{const M=Math.max(0,Math.min(100,e.percentage));return M>0?{transition:"transform 0.6s",transform:`translateX(${M-100}%)`}:{}}),I=G(()=>{if(e.loading===!0)return{onMousedown:Y,onTouchstart:Y,onClick:Y,onKeydown:Y,onKeyup:Y};if(d.value===!0){const M={onClick:j,onKeydown:X,onMousedown:$};if(r.$q.platform.has.touch===!0){const ee=e.onTouchstart!==void 0?"":"Passive";M[`onTouchstart${ee}`]=F}return M}return{onClick:nn}}),q=G(()=>({ref:f,class:"q-btn q-btn-item non-selectable no-outline "+s.value,style:o.value,...l.value,...I.value}));function j(M){if(f.value!==null){if(M!==void 0){if(M.defaultPrevented===!0)return;const ee=document.activeElement;if(e.type==="submit"&&ee!==document.body&&f.value.contains(ee)===!1&&ee.contains(f.value)===!1){f.value.focus();const ae=()=>{document.removeEventListener("keydown",nn,!0),document.removeEventListener("keyup",ae,He),f.value!==null&&f.value.removeEventListener("blur",ae,He)};document.addEventListener("keydown",nn,!0),document.addEventListener("keyup",ae,He),f.value.addEventListener("blur",ae,He)}}c(M)}}function X(M){f.value!==null&&(n("keydown",M),Ws(M,[13,32])===!0&&ln!==f.value&&(ln!==null&&O(),M.defaultPrevented!==!0&&(f.value.focus(),ln=f.value,f.value.classList.add("q-btn--active"),document.addEventListener("keyup",L,!0),f.value.addEventListener("blur",L,He)),nn(M)))}function F(M){f.value!==null&&(n("touchstart",M),M.defaultPrevented!==!0&&(on!==f.value&&(on!==null&&O(),on=f.value,v=M.target,v.addEventListener("touchcancel",L,He),v.addEventListener("touchend",L,He)),E=!0,P!==null&&clearTimeout(P),P=setTimeout(()=>{P=null,E=!1},200)))}function $(M){f.value!==null&&(M.qSkipRipple=E===!0,n("mousedown",M),M.defaultPrevented!==!0&&an!==f.value&&(an!==null&&O(),an=f.value,f.value.classList.add("q-btn--active"),document.addEventListener("mouseup",L,He)))}function L(M){if(f.value!==null&&!(M!==void 0&&M.type==="blur"&&document.activeElement===f.value)){if(M!==void 0&&M.type==="keyup"){if(ln===f.value&&Ws(M,[13,32])===!0){const ee=new MouseEvent("click",M);ee.qKeyEvent=!0,M.defaultPrevented===!0&&Ks(ee),M.cancelBubble===!0&&ja(ee),f.value.dispatchEvent(ee),nn(M),M.qKeyEvent=!0}n("keyup",M)}O()}}function O(M){const ee=g.value;M!==!0&&(on===f.value||an===f.value)&&ee!==null&&ee!==document.activeElement&&(ee.setAttribute("tabindex",-1),ee.focus()),on===f.value&&(v!==null&&(v.removeEventListener("touchcancel",L,He),v.removeEventListener("touchend",L,He)),on=v=null),an===f.value&&(document.removeEventListener("mouseup",L,He),an=null),ln===f.value&&(document.removeEventListener("keyup",L,!0),f.value!==null&&f.value.removeEventListener("blur",L,He),ln=null),f.value!==null&&f.value.classList.remove("q-btn--active")}function Y(M){nn(M),M.qSkipRipple=!0}return Zr(()=>{O(!0)}),Object.assign(r,{click:M=>{d.value===!0&&j(M)}}),()=>{let M=[];e.icon!==void 0&&M.push(W(Fr,{name:e.icon,left:e.stack!==!0&&R.value===!0,role:"img"})),R.value===!0&&M.push(W("span",{class:"block"},[e.label])),M=kn(t.default,M),e.iconRight!==void 0&&e.round===!1&&M.push(W(Fr,{name:e.iconRight,right:e.stack!==!0&&R.value===!0,role:"img"}));const ee=[W("span",{class:"q-focus-helper",ref:g})];return e.loading===!0&&e.percentage!==void 0&&ee.push(W("span",{class:"q-btn__progress absolute-full overflow-hidden"+(e.darkPercentage===!0?" q-btn__progress--dark":"")},[W("span",{class:"q-btn__progress-indicator fit block",style:y.value})])),ee.push(W("span",{class:"q-btn__content text-center col items-center q-anchor--skip "+i.value},M)),e.loading!==null&&ee.push(W(Wf,{name:"q-transition--fade"},()=>e.loading===!0?[W("span",{key:"loading",class:"absolute-full flex flex-center"},t.loading!==void 0?t.loading():[W(Cc)])]:null)),Vl(W(u.value,q.value,ee),[[ag,w.value,void 0,S.value]])}}});let Cg=1,Pg=document.body;function Tg(e,t){const n=document.createElement("div");if(n.id=t!==void 0?`q-portal--${t}--${Cg++}`:e,jr.globalNodes!==void 0){const r=jr.globalNodes.class;r!==void 0&&(n.className=r)}return Pg.appendChild(n),n}function bm(e){e.remove()}let Rg=0;const br={},wr={},Ge={},Oc={},kg=/^\s*$/,Ac=[],Og=[void 0,null,!0,!1,""],Io=["top-left","top-right","bottom-left","bottom-right","top","bottom","left","right","center"],Ag=["top-left","top-right","bottom-left","bottom-right"],un={positive:{icon:e=>e.iconSet.type.positive,color:"positive"},negative:{icon:e=>e.iconSet.type.negative,color:"negative"},warning:{icon:e=>e.iconSet.type.warning,color:"warning",textColor:"dark"},info:{icon:e=>e.iconSet.type.info,color:"info"},ongoing:{group:!1,timeout:0,spinner:!0,color:"grey-8"}};function Lc(e,t,n){if(!e)return Cn("parameter required");let r;const s={textColor:"white"};if(e.ignoreDefaults!==!0&&Object.assign(s,br),Wn(e)===!1&&(s.type&&Object.assign(s,un[s.type]),e={message:e}),Object.assign(s,un[e.type||s.type],e),typeof s.icon=="function"&&(s.icon=s.icon(t)),s.spinner?(s.spinner===!0&&(s.spinner=Cc),s.spinner=it(s.spinner)):s.spinner=!1,s.meta={hasMedia:!!(s.spinner!==!1||s.icon||s.avatar),hasText:ol(s.message)||ol(s.caption)},s.position){if(Io.includes(s.position)===!1)return Cn("wrong position",e)}else s.position="bottom";if(Og.includes(s.timeout)===!0)s.timeout=5e3;else{const a=Number(s.timeout);if(isNaN(a)||a<0)return Cn("wrong timeout",e);s.timeout=Number.isFinite(a)?a:0}s.timeout===0?s.progress=!1:s.progress===!0&&(s.meta.progressClass="q-notification__progress"+(s.progressClass?` ${s.progressClass}`:""),s.meta.progressStyle={animationDuration:`${s.timeout+1e3}ms`});const o=(Array.isArray(e.actions)===!0?e.actions:[]).concat(e.ignoreDefaults!==!0&&Array.isArray(br.actions)===!0?br.actions:[]).concat(un[e.type]!==void 0&&Array.isArray(un[e.type].actions)===!0?un[e.type].actions:[]),{closeBtn:i}=s;if(i&&o.push({label:typeof i=="string"?i:t.lang.label.close}),s.actions=o.map(({handler:a,noDismiss:u,...c})=>({flat:!0,...c,onClick:typeof a=="function"?()=>{a(),u!==!0&&l()}:()=>{l()}})),s.multiLine===void 0&&(s.multiLine=s.actions.length>1),Object.assign(s.meta,{class:`q-notification row items-stretch q-notification--${s.multiLine===!0?"multi-line":"standard"}`+(s.color!==void 0?` bg-${s.color}`:"")+(s.textColor!==void 0?` text-${s.textColor}`:"")+(s.classes!==void 0?` ${s.classes}`:""),wrapperClass:"q-notification__wrapper col relative-position border-radius-inherit "+(s.multiLine===!0?"column no-wrap justify-center":"row items-center"),contentClass:"q-notification__content row items-center"+(s.multiLine===!0?"":" col"),leftClass:s.meta.hasText===!0?"additional":"single",attrs:{role:"alert",...s.attrs}}),s.group===!1?(s.group=void 0,s.meta.group=void 0):((s.group===void 0||s.group===!0)&&(s.group=[s.message,s.caption,s.multiline].concat(s.actions.map(a=>`${a.label}*${a.icon}`)).join("|")),s.meta.group=s.group+"|"+s.position),s.actions.length===0?s.actions=void 0:s.meta.actionsClass="q-notification__actions row items-center "+(s.multiLine===!0?"justify-end":"col-auto")+(s.meta.hasMedia===!0?" q-notification__actions--with-media":""),n!==void 0){n.notif.meta.timer&&(clearTimeout(n.notif.meta.timer),n.notif.meta.timer=void 0),s.meta.uid=n.notif.meta.uid;const a=Ge[s.position].value.indexOf(n.notif);Ge[s.position].value[a]=s}else{const a=wr[s.meta.group];if(a===void 0){if(s.meta.uid=Rg++,s.meta.badge=1,["left","right","center"].indexOf(s.position)!==-1)Ge[s.position].value.splice(Math.floor(Ge[s.position].value.length/2),0,s);else{const u=s.position.indexOf("top")!==-1?"unshift":"push";Ge[s.position].value[u](s)}s.group!==void 0&&(wr[s.meta.group]=s)}else{if(a.meta.timer&&(clearTimeout(a.meta.timer),a.meta.timer=void 0),s.badgePosition!==void 0){if(Ag.includes(s.badgePosition)===!1)return Cn("wrong badgePosition",e)}else s.badgePosition=`top-${s.position.indexOf("left")!==-1?"right":"left"}`;s.meta.uid=a.meta.uid,s.meta.badge=a.meta.badge+1,s.meta.badgeClass=`q-notification__badge q-notification__badge--${s.badgePosition}`+(s.badgeColor!==void 0?` bg-${s.badgeColor}`:"")+(s.badgeTextColor!==void 0?` text-${s.badgeTextColor}`:"")+(s.badgeClass?` ${s.badgeClass}`:"");const u=Ge[s.position].value.indexOf(a);Ge[s.position].value[u]=wr[s.meta.group]=s}}const l=()=>{Lg(s),r=void 0};if(s.timeout>0&&(s.meta.timer=setTimeout(()=>{s.meta.timer=void 0,l()},s.timeout+1e3)),s.group!==void 0)return a=>{a!==void 0?Cn("trying to update a grouped one which is forbidden",e):l()};if(r={dismiss:l,config:e,notif:s},n!==void 0){Object.assign(n,r);return}return a=>{if(r!==void 0)if(a===void 0)r.dismiss();else{const u=Object.assign({},r.config,a,{group:!1,position:s.position});Lc(u,t,r)}}}function Lg(e){e.meta.timer&&(clearTimeout(e.meta.timer),e.meta.timer=void 0);const t=Ge[e.position].value.indexOf(e);if(t!==-1){e.group!==void 0&&delete wr[e.meta.group];const n=Ac[""+e.meta.uid];if(n){const{width:r,height:s}=getComputedStyle(n);n.style.left=`${n.offsetLeft}px`,n.style.width=r,n.style.height=s}Ge[e.position].value.splice(t,1),typeof e.onDismiss=="function"&&e.onDismiss()}}function ol(e){return e!=null&&kg.test(e)!==!0}function Cn(e,t){return console.error(`Notify: ${e}`,t),!1}function Ig(){return Zn({name:"QNotifications",devtools:{hide:!0},setup(){return()=>W("div",{class:"q-notifications"},Io.map(e=>W(dd,{key:e,class:Oc[e],tag:"div",name:`q-notification--${e}`},()=>Ge[e].value.map(t=>{const n=t.meta,r=[];if(n.hasMedia===!0&&(t.spinner!==!1?r.push(W(t.spinner,{class:"q-notification__spinner q-notification__spinner--"+n.leftClass,color:t.spinnerColor,size:t.spinnerSize})):t.icon?r.push(W(Fr,{class:"q-notification__icon q-notification__icon--"+n.leftClass,name:t.icon,color:t.iconColor,size:t.iconSize,role:"img"})):t.avatar&&r.push(W(rg,{class:"q-notification__avatar q-notification__avatar--"+n.leftClass},()=>W("img",{src:t.avatar,"aria-hidden":"true"})))),n.hasText===!0){let o;const i={class:"q-notification__message col"};if(t.html===!0)i.innerHTML=t.caption?`
${t.message}
${t.caption}
`:t.message;else{const l=[t.message];o=t.caption?[W("div",l),W("div",{class:"q-notification__caption"},[t.caption])]:l}r.push(W("div",i,o))}const s=[W("div",{class:n.contentClass},r)];return t.progress===!0&&s.push(W("div",{key:`${n.uid}|p|${n.badge}`,class:n.progressClass,style:n.progressStyle})),t.actions!==void 0&&s.push(W("div",{class:n.actionsClass},t.actions.map(o=>W(Eg,o)))),n.badge>1&&s.push(W("div",{key:`${n.uid}|${n.badge}`,class:t.meta.badgeClass,style:t.badgeStyle},[n.badge])),W("div",{ref:o=>{Ac[""+n.uid]=o},key:n.uid,class:n.class,...n.attrs},[W("div",{class:n.wrapperClass},s)])}))))}})}const $g={setDefaults(e){Wn(e)===!0&&Object.assign(br,e)},registerType(e,t){Wn(t)===!0&&(un[e]=t)},install({$q:e,parentApp:t}){if(e.notify=this.create=n=>Lc(n,e),e.notify.setDefaults=this.setDefaults,e.notify.registerType=this.registerType,e.config.notify!==void 0&&this.setDefaults(e.config.notify),this.__installed!==!0){Io.forEach(r=>{Ge[r]=Gt([]);const s=["left","center","right"].includes(r)===!0?"center":r.indexOf("top")!==-1?"top":"bottom",o=r.indexOf("left")!==-1?"start":r.indexOf("right")!==-1?"end":"center",i=["left","right"].includes(r)?`items-${r==="left"?"start":"end"} justify-center`:r==="center"?"flex-center":`items-${o}`;Oc[r]=`q-notifications__list q-notifications__list--${s} fixed column no-wrap ${i}`});const n=Tg("q-notify");Wd(Ig(),t).mount(n)}}},Mg={config:{dark:"auto"},lang:Wp,plugins:{Notify:$g}},Ng="/openWB/web/themes/koala/";async function jg({app:e,router:t,store:n},r){let s=!1;const o=a=>{try{return t.resolve(a).href}catch{}return Object(a)===a?null:a},i=a=>{if(s=!0,typeof a=="string"&&/^https?:\/\//.test(a)){window.location.href=a;return}const u=o(a);u!==null&&(window.location.href=u,window.location.reload())},l=window.location.href.replace(window.location.origin,"");for(let a=0;s===!1&&a{const[t,n]=Promise.allSettled!==void 0?["allSettled",r=>r.map(s=>{if(s.status==="rejected"){console.error("[Quasar] boot error:",s.reason);return}return s.value.default})]:["all",r=>r.map(s=>s.default)];return Promise[t]([fr(()=>import("./store-init-DR3g0YQB.js"),__vite__mapDeps([6,4]))]).then(r=>{const s=n(r).filter(o=>typeof o=="function");jg(e,s)})});export{Vd as $,Ar as A,Nu as B,Le as C,$f as D,Fr as E,om as F,Ws as G,Md as H,nn as I,Uu as J,Vu as K,Td as L,st as M,Kn as N,Zg as O,kd as P,Eg as Q,ag as R,tm as S,Rd as T,Od as U,Wf as V,mm as W,Hg as X,dg as Y,ea as Z,Xd as _,G as a,am as a0,Jg as a1,Wg as a2,wa as a3,Te as a4,Vg as a5,Ur as a6,Gg as a7,Qc as a8,Il as a9,Ug as aA,Mf as aB,Dg as aC,If as aD,Qg as aE,wg as aF,ym as aG,zs as aH,ug as aI,fg as aJ,Bg as aK,_m as aL,mg as aM,gm as aN,Fg as aO,Tg as aP,bm as aQ,vm as aR,hm as aS,ig as aT,em as aU,zd as aV,oi as aa,Z as ab,po as ac,um as ad,Vr as ae,qg as af,pm as ag,zg as ah,Yg as ai,Ku as aj,sm as ak,Ad as al,ss as am,Ks as an,Cc as ao,ja as ap,Jt as aq,Ao as ar,Lo as as,Qp as at,bo as au,Ss as av,lm as aw,Wn as ax,Xg as ay,Kg as az,cm as b,Zn as c,Gp as d,im as e,fm as f,lt as g,W as h,rt as i,Xr as j,Vl as k,nm as l,dm as m,mo as n,Zr as o,hr as p,rm as q,Gt as r,Qt as s,Xt as t,wo as u,kn as v,Lt as w,Qr as x,Yu as y,Or as z}; + */const ht=typeof document<"u";function tc(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Lh(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&tc(e.default)}const se=Object.assign;function Cs(e,t){const n={};for(const r in t){const s=t[r];n[r]=De(s)?s.map(e):e(s)}return n}const Fn=()=>{},De=Array.isArray,nc=/#/g,Ih=/&/g,$h=/\//g,Mh=/=/g,Nh=/\?/g,rc=/\+/g,jh=/%5B/g,Dh=/%5D/g,sc=/%5E/g,Fh=/%60/g,oc=/%7B/g,Bh=/%7C/g,ic=/%7D/g,Hh=/%20/g;function ko(e){return encodeURI(""+e).replace(Bh,"|").replace(jh,"[").replace(Dh,"]")}function qh(e){return ko(e).replace(oc,"{").replace(ic,"}").replace(sc,"^")}function Ys(e){return ko(e).replace(rc,"%2B").replace(Hh,"+").replace(nc,"%23").replace(Ih,"%26").replace(Fh,"`").replace(oc,"{").replace(ic,"}").replace(sc,"^")}function Vh(e){return Ys(e).replace(Mh,"%3D")}function Uh(e){return ko(e).replace(nc,"%23").replace(Nh,"%3F")}function zh(e){return e==null?"":Uh(e).replace($h,"%2F")}function vn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const Kh=/\/$/,Wh=e=>e.replace(Kh,"");function Ps(e,t,n="/"){let r,s={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),o=t.slice(a+1,l>-1?l:t.length),s=e(o)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=Yh(r??t,n),{fullPath:r+(o&&"?")+o+i,path:r,query:s,hash:vn(i)}}function Gh(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ii(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Qh(e,t,n){const r=t.matched.length-1,s=n.matched.length-1;return r>-1&&r===s&&Mt(t.matched[r],n.matched[s])&&lc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Mt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function lc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Jh(e[n],t[n]))return!1;return!0}function Jh(e,t){return De(e)?$i(e,t):De(t)?$i(t,e):e===t}function $i(e,t){return De(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Yh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),s=r[r.length-1];(s===".."||s===".")&&r.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+r.slice(i).join("/")}const St={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Gn;(function(e){e.pop="pop",e.push="push"})(Gn||(Gn={}));var Bn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Bn||(Bn={}));function Xh(e){if(!e)if(ht){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Wh(e)}const Zh=/^[^#]+#/;function ep(e,t){return e.replace(Zh,"#")+t}function tp(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const ls=()=>({left:window.scrollX,top:window.scrollY});function np(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=tp(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Mi(e,t){return(history.state?history.state.position-t:-1)+e}const Xs=new Map;function rp(e,t){Xs.set(e,t)}function sp(e){const t=Xs.get(e);return Xs.delete(e),t}let op=()=>location.protocol+"//"+location.host;function ac(e,t){const{pathname:n,search:r,hash:s}=t,o=e.indexOf("#");if(o>-1){let l=s.includes(e.slice(o))?e.slice(o).length:1,a=s.slice(l);return a[0]!=="/"&&(a="/"+a),Ii(a,"")}return Ii(n,e)+r+s}function ip(e,t,n,r){let s=[],o=[],i=null;const l=({state:f})=>{const g=ac(e,location),v=n.value,E=t.value;let P=0;if(f){if(n.value=g,t.value=f,i&&i===v){i=null;return}P=E?f.position-E.position:0}else r(g);s.forEach(R=>{R(n.value,v,{delta:P,type:Gn.pop,direction:P?P>0?Bn.forward:Bn.back:Bn.unknown})})};function a(){i=n.value}function u(f){s.push(f);const g=()=>{const v=s.indexOf(f);v>-1&&s.splice(v,1)};return o.push(g),g}function c(){const{history:f}=window;f.state&&f.replaceState(se({},f.state,{scroll:ls()}),"")}function d(){for(const f of o)f();o=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",c)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",c,{passive:!0}),{pauseListeners:a,listen:u,destroy:d}}function Ni(e,t,n,r=!1,s=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:s?ls():null}}function lp(e){const{history:t,location:n}=window,r={value:ac(e,n)},s={value:t.state};s.value||o(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,u,c){const d=e.indexOf("#"),f=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+a:op()+e+a;try{t[c?"replaceState":"pushState"](u,"",f),s.value=u}catch(g){console.error(g),n[c?"replace":"assign"](f)}}function i(a,u){const c=se({},t.state,Ni(s.value.back,a,s.value.forward,!0),u,{position:s.value.position});o(a,c,!0),r.value=a}function l(a,u){const c=se({},s.value,t.state,{forward:a,scroll:ls()});o(c.current,c,!0);const d=se({},Ni(r.value,a,null),{position:c.position+1},u);o(a,d,!1),r.value=a}return{location:r,state:s,push:l,replace:i}}function ap(e){e=Xh(e);const t=lp(e),n=ip(e,t.state,t.location,t.replace);function r(o,i=!0){i||n.pauseListeners(),history.go(o)}const s=se({location:"",base:e,go:r,createHref:ep.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function cp(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),ap(e)}function cc(e){return typeof e=="string"||e&&typeof e=="object"}function uc(e){return typeof e=="string"||typeof e=="symbol"}const fc=Symbol("");var ji;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(ji||(ji={}));function _n(e,t){return se(new Error,{type:e,[fc]:!0},t)}function ut(e,t){return e instanceof Error&&fc in e&&(t==null||!!(e.type&t))}const Di="[^/]+?",up={sensitive:!1,strict:!1,start:!0,end:!0},fp=/[.+*?^${}()[\]/\\]/g;function dp(e,t){const n=se({},up,t),r=[];let s=n.start?"^":"";const o=[];for(const u of e){const c=u.length?[]:[90];n.strict&&!u.length&&(s+="/");for(let d=0;dt.length?t.length===1&&t[0]===80?1:-1:0}function dc(e,t){let n=0;const r=e.score,s=t.score;for(;n0&&t[t.length-1]<0}const pp={type:0,value:""},gp=/[a-zA-Z0-9_]/;function mp(e){if(!e)return[[]];if(e==="/")return[[pp]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${u}": ${g}`)}let n=0,r=n;const s=[];let o;function i(){o&&s.push(o),o=[]}let l=0,a,u="",c="";function d(){u&&(n===0?o.push({type:0,value:u}):n===1||n===2||n===3?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:u,regexp:c,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function f(){u+=a}for(;l{i(S)}:Fn}function i(d){if(uc(d)){const f=r.get(d);f&&(r.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(i),f.alias.forEach(i))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&r.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function l(){return n}function a(d){const f=wp(d,n);n.splice(f,0,d),d.record.name&&!qi(d)&&r.set(d.record.name,d)}function u(d,f){let g,v={},E,P;if("name"in d&&d.name){if(g=r.get(d.name),!g)throw _n(1,{location:d});P=g.record.name,v=se(Bi(f.params,g.keys.filter(S=>!S.optional).concat(g.parent?g.parent.keys.filter(S=>S.optional):[]).map(S=>S.name)),d.params&&Bi(d.params,g.keys.map(S=>S.name))),E=g.stringify(v)}else if(d.path!=null)E=d.path,g=n.find(S=>S.re.test(E)),g&&(v=g.parse(E),P=g.record.name);else{if(g=f.name?r.get(f.name):n.find(S=>S.re.test(f.path)),!g)throw _n(1,{location:d,currentLocation:f});P=g.record.name,v=se({},f.params,d.params),E=g.stringify(v)}const R=[];let w=g;for(;w;)R.unshift(w.record),w=w.parent;return{name:P,path:E,params:v,matched:R,meta:bp(R)}}e.forEach(d=>o(d));function c(){n.length=0,r.clear()}return{addRoute:o,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:l,getRecordMatcher:s}}function Bi(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Hi(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:yp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function yp(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function qi(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function bp(e){return e.reduce((t,n)=>se(t,n.meta),{})}function Vi(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function wp(e,t){let n=0,r=t.length;for(;n!==r;){const o=n+r>>1;dc(e,t[o])<0?r=o:n=o+1}const s=Sp(e);return s&&(r=t.lastIndexOf(s,r-1)),r}function Sp(e){let t=e;for(;t=t.parent;)if(hc(t)&&dc(e,t)===0)return t}function hc({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function xp(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;so&&Ys(o)):[r&&Ys(r)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Ep(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=De(r)?r.map(s=>s==null?null:""+s):r==null?r:""+r)}return t}const Cp=Symbol(""),zi=Symbol(""),Oo=Symbol(""),pc=Symbol(""),Zs=Symbol("");function xn(){let e=[];function t(r){return e.push(r),()=>{const s=e.indexOf(r);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Rt(e,t,n,r,s,o=i=>i()){const i=r&&(r.enterCallbacks[s]=r.enterCallbacks[s]||[]);return()=>new Promise((l,a)=>{const u=f=>{f===!1?a(_n(4,{from:n,to:t})):f instanceof Error?a(f):cc(f)?a(_n(2,{from:t,to:f})):(i&&r.enterCallbacks[s]===i&&typeof f=="function"&&i.push(f),l())},c=o(()=>e.call(r&&r.instances[s],t,n,u));let d=Promise.resolve(c);e.length<3&&(d=d.then(u)),d.catch(f=>a(f))})}function Ts(e,t,n,r,s=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(tc(a)){const c=(a.__vccOpts||a)[t];c&&o.push(Rt(c,n,r,i,l,s))}else{let u=a();o.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const d=Lh(c)?c.default:c;i.mods[l]=c,i.components[l]=d;const g=(d.__vccOpts||d)[t];return g&&Rt(g,n,r,i,l,s)()}))}}return o}function Ki(e){const t=rt(Oo),n=rt(pc),r=G(()=>{const a=gt(e.to);return t.resolve(a)}),s=G(()=>{const{matched:a}=r.value,{length:u}=a,c=a[u-1],d=n.matched;if(!c||!d.length)return-1;const f=d.findIndex(Mt.bind(null,c));if(f>-1)return f;const g=Wi(a[u-2]);return u>1&&Wi(c)===g&&d[d.length-1].path!==g?d.findIndex(Mt.bind(null,a[u-2])):f}),o=G(()=>s.value>-1&&kp(n.params,r.value.params)),i=G(()=>s.value>-1&&s.value===n.matched.length-1&&lc(n.params,r.value.params));function l(a={}){return Rp(a)?t[gt(e.replace)?"replace":"push"](gt(e.to)).catch(Fn):Promise.resolve()}if(ht){const a=lt();if(a){const u={route:r.value,isActive:o.value,isExactActive:i.value,error:null};a.__vrl_devtools=a.__vrl_devtools||[],a.__vrl_devtools.push(u),wf(()=>{u.route=r.value,u.isActive=o.value,u.isExactActive=i.value,u.error=cc(gt(e.to))?null:'Invalid "to" value'},{flush:"post"})}}return{route:r,href:G(()=>r.value.href),isActive:o,isExactActive:i,navigate:l}}const Pp=Qr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Ki,setup(e,{slots:t}){const n=Xt(Ki(e)),{options:r}=rt(Oo),s=G(()=>({[Gi(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Gi(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:W("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},o)}}}),Tp=Pp;function Rp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function kp(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(!De(s)||s.length!==r.length||r.some((o,i)=>o!==s[i]))return!1}return!0}function Wi(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Gi=(e,t,n)=>e??t??n,Op=Qr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=rt(Zs),s=G(()=>e.route||r.value),o=rt(zi,0),i=G(()=>{let u=gt(o);const{matched:c}=s.value;let d;for(;(d=c[u])&&!d.components;)u++;return u}),l=G(()=>s.value.matched[i.value]);hr(zi,G(()=>i.value+1)),hr(Cp,l),hr(Zs,s);const a=Gt();return Lt(()=>[a.value,l.value,e.name],([u,c,d],[f,g,v])=>{c&&(c.instances[d]=u,g&&g!==c&&u&&u===f&&(c.leaveGuards.size||(c.leaveGuards=g.leaveGuards),c.updateGuards.size||(c.updateGuards=g.updateGuards))),u&&c&&(!g||!Mt(c,g)||!f)&&(c.enterCallbacks[d]||[]).forEach(E=>E(u))},{flush:"post"}),()=>{const u=s.value,c=e.name,d=l.value,f=d&&d.components[c];if(!f)return Qi(n.default,{Component:f,route:u});const g=d.props[c],v=g?g===!0?u.params:typeof g=="function"?g(u):g:null,P=W(f,se({},v,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(d.instances[c]=null)},ref:a}));if(ht&&P.ref){const R={depth:i.value,name:d.name,path:d.path,meta:d.meta};(De(P.ref)?P.ref.map(S=>S.i):[P.ref.i]).forEach(S=>{S.__vrv_devtools=R})}return Qi(n.default,{Component:P,route:u})||P}}});function Qi(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Ap=Op;function En(e,t){const n=se({},e,{matched:e.matched.map(r=>qp(r,["instances","children","aliasOf"]))});return{_custom:{type:null,readOnly:!0,display:e.fullPath,tooltip:t,value:n}}}function ur(e){return{_custom:{display:e}}}let Lp=0;function Ip(e,t,n){if(t.__hasDevtools)return;t.__hasDevtools=!0;const r=Lp++;Po({id:"org.vuejs.router"+(r?"."+r:""),label:"Vue Router",packageName:"vue-router",homepage:"https://router.vuejs.org",logo:"https://router.vuejs.org/logo.png",componentStateTypes:["Routing"],app:e},s=>{typeof s.now!="function"&&console.warn("[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),s.on.inspectComponent((c,d)=>{c.instanceData&&c.instanceData.state.push({type:"Routing",key:"$route",editable:!1,value:En(t.currentRoute.value,"Current Route")})}),s.on.visitComponentTree(({treeNode:c,componentInstance:d})=>{if(d.__vrv_devtools){const f=d.__vrv_devtools;c.tags.push({label:(f.name?`${f.name.toString()}: `:"")+f.path,textColor:0,tooltip:"This component is rendered by <router-view>",backgroundColor:gc})}De(d.__vrl_devtools)&&(d.__devtoolsApi=s,d.__vrl_devtools.forEach(f=>{let g=f.route.path,v=_c,E="",P=0;f.error?(g=f.error,v=Dp,P=Fp):f.isExactActive?(v=vc,E="This is exactly active"):f.isActive&&(v=mc,E="This link is active"),c.tags.push({label:g,textColor:P,tooltip:E,backgroundColor:v})}))}),Lt(t.currentRoute,()=>{a(),s.notifyComponentUpdate(),s.sendInspectorTree(l),s.sendInspectorState(l)});const o="router:navigations:"+r;s.addTimelineLayer({id:o,label:`Router${r?" "+r:""} Navigations`,color:4237508}),t.onError((c,d)=>{s.addTimelineEvent({layerId:o,event:{title:"Error during Navigation",subtitle:d.fullPath,logType:"error",time:s.now(),data:{error:c},groupId:d.meta.__navigationId}})});let i=0;t.beforeEach((c,d)=>{const f={guard:ur("beforeEach"),from:En(d,"Current Location during this navigation"),to:En(c,"Target location")};Object.defineProperty(c.meta,"__navigationId",{value:i++}),s.addTimelineEvent({layerId:o,event:{time:s.now(),title:"Start of navigation",subtitle:c.fullPath,data:f,groupId:c.meta.__navigationId}})}),t.afterEach((c,d,f)=>{const g={guard:ur("afterEach")};f?(g.failure={_custom:{type:Error,readOnly:!0,display:f?f.message:"",tooltip:"Navigation Failure",value:f}},g.status=ur("❌")):g.status=ur("✅"),g.from=En(d,"Current Location during this navigation"),g.to=En(c,"Target location"),s.addTimelineEvent({layerId:o,event:{title:"End of navigation",subtitle:c.fullPath,time:s.now(),data:g,logType:f?"warning":"default",groupId:c.meta.__navigationId}})});const l="router-inspector:"+r;s.addInspector({id:l,label:"Routes"+(r?" "+r:""),icon:"book",treeFilterPlaceholder:"Search routes"});function a(){if(!u)return;const c=u;let d=n.getRoutes().filter(f=>!f.parent||!f.parent.record.components);d.forEach(wc),c.filter&&(d=d.filter(f=>eo(f,c.filter.toLowerCase()))),d.forEach(f=>bc(f,t.currentRoute.value)),c.rootNodes=d.map(yc)}let u;s.on.getInspectorTree(c=>{u=c,c.app===e&&c.inspectorId===l&&a()}),s.on.getInspectorState(c=>{if(c.app===e&&c.inspectorId===l){const f=n.getRoutes().find(g=>g.record.__vd_id===c.nodeId);f&&(c.state={options:Mp(f)})}}),s.sendInspectorTree(l),s.sendInspectorState(l)})}function $p(e){return e.optional?e.repeatable?"*":"?":e.repeatable?"+":""}function Mp(e){const{record:t}=e,n=[{editable:!1,key:"path",value:t.path}];return t.name!=null&&n.push({editable:!1,key:"name",value:t.name}),n.push({editable:!1,key:"regexp",value:e.re}),e.keys.length&&n.push({editable:!1,key:"keys",value:{_custom:{type:null,readOnly:!0,display:e.keys.map(r=>`${r.name}${$p(r)}`).join(" "),tooltip:"Param keys",value:e.keys}}}),t.redirect!=null&&n.push({editable:!1,key:"redirect",value:t.redirect}),e.alias.length&&n.push({editable:!1,key:"aliases",value:e.alias.map(r=>r.record.path)}),Object.keys(e.record.meta).length&&n.push({editable:!1,key:"meta",value:e.record.meta}),n.push({key:"score",editable:!1,value:{_custom:{type:null,readOnly:!0,display:e.score.map(r=>r.join(", ")).join(" | "),tooltip:"Score used to sort routes",value:e.score}}}),n}const gc=15485081,mc=2450411,vc=8702998,Np=2282478,_c=16486972,jp=6710886,Dp=16704226,Fp=12131356;function yc(e){const t=[],{record:n}=e;n.name!=null&&t.push({label:String(n.name),textColor:0,backgroundColor:Np}),n.aliasOf&&t.push({label:"alias",textColor:0,backgroundColor:_c}),e.__vd_match&&t.push({label:"matches",textColor:0,backgroundColor:gc}),e.__vd_exactActive&&t.push({label:"exact",textColor:0,backgroundColor:vc}),e.__vd_active&&t.push({label:"active",textColor:0,backgroundColor:mc}),n.redirect&&t.push({label:typeof n.redirect=="string"?`redirect: ${n.redirect}`:"redirects",textColor:16777215,backgroundColor:jp});let r=n.__vd_id;return r==null&&(r=String(Bp++),n.__vd_id=r),{id:r,label:n.path,tags:t,children:e.children.map(yc)}}let Bp=0;const Hp=/^\/(.*)\/([a-z]*)$/;function bc(e,t){const n=t.matched.length&&Mt(t.matched[t.matched.length-1],e.record);e.__vd_exactActive=e.__vd_active=n,n||(e.__vd_active=t.matched.some(r=>Mt(r,e.record))),e.children.forEach(r=>bc(r,t))}function wc(e){e.__vd_match=!1,e.children.forEach(wc)}function eo(e,t){const n=String(e.re).match(Hp);if(e.__vd_match=!1,!n||n.length<3)return!1;if(new RegExp(n[1].replace(/\$$/,""),n[2]).test(t))return e.children.forEach(i=>eo(i,t)),e.record.path!=="/"||t==="/"?(e.__vd_match=e.re.test(t),!0):!1;const s=e.record.path.toLowerCase(),o=vn(s);return!t.startsWith("/")&&(o.includes(t)||s.includes(t))||o.startsWith(t)||s.startsWith(t)||e.record.name&&String(e.record.name).includes(t)?!0:e.children.some(i=>eo(i,t))}function qp(e,t){const n={};for(const r in e)t.includes(r)||(n[r]=e[r]);return n}function Vp(e){const t=_p(e.routes,e),n=e.parseQuery||xp,r=e.stringifyQuery||Ui,s=e.history,o=xn(),i=xn(),l=xn(),a=Il(St);let u=St;ht&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Cs.bind(null,b=>""+b),d=Cs.bind(null,zh),f=Cs.bind(null,vn);function g(b,H){let D,V;return uc(b)?(D=t.getRecordMatcher(b),V=H):V=b,t.addRoute(V,D)}function v(b){const H=t.getRecordMatcher(b);H&&t.removeRoute(H)}function E(){return t.getRoutes().map(b=>b.record)}function P(b){return!!t.getRecordMatcher(b)}function R(b,H){if(H=se({},H||a.value),typeof b=="string"){const p=Ps(n,b,H.path),m=t.resolve({path:p.path},H),x=s.createHref(p.fullPath);return se(p,m,{params:f(m.params),hash:vn(p.hash),redirectedFrom:void 0,href:x})}let D;if(b.path!=null)D=se({},b,{path:Ps(n,b.path,H.path).path});else{const p=se({},b.params);for(const m in p)p[m]==null&&delete p[m];D=se({},b,{params:d(p)}),H.params=d(H.params)}const V=t.resolve(D,H),ie=b.hash||"";V.params=c(f(V.params));const pe=Gh(r,se({},b,{hash:qh(ie),path:V.path})),h=s.createHref(pe);return se({fullPath:pe,hash:ie,query:r===Ui?Ep(b.query):b.query||{}},V,{redirectedFrom:void 0,href:h})}function w(b){return typeof b=="string"?Ps(n,b,a.value.path):se({},b)}function S(b,H){if(u!==b)return _n(8,{from:H,to:b})}function y(b){return j(b)}function I(b){return y(se(w(b),{replace:!0}))}function q(b){const H=b.matched[b.matched.length-1];if(H&&H.redirect){const{redirect:D}=H;let V=typeof D=="function"?D(b):D;return typeof V=="string"&&(V=V.includes("?")||V.includes("#")?V=w(V):{path:V},V.params={}),se({query:b.query,hash:b.hash,params:V.path!=null?{}:b.params},V)}}function j(b,H){const D=u=R(b),V=a.value,ie=b.state,pe=b.force,h=b.replace===!0,p=q(D);if(p)return j(se(w(p),{state:typeof p=="object"?se({},ie,p.state):ie,force:pe,replace:h}),H||D);const m=D;m.redirectedFrom=H;let x;return!pe&&Qh(r,V,D)&&(x=_n(16,{to:m,from:V}),Ye(V,V,!0,!1)),(x?Promise.resolve(x):$(m,V)).catch(_=>ut(_)?ut(_,2)?_:yt(_):te(_,m,V)).then(_=>{if(_){if(ut(_,2))return j(se({replace:h},w(_.to),{state:typeof _.to=="object"?se({},ie,_.to.state):ie,force:pe}),H||m)}else _=O(m,V,!0,h,ie);return L(m,V,_),_})}function X(b,H){const D=S(b,H);return D?Promise.reject(D):Promise.resolve()}function F(b){const H=en.values().next().value;return H&&typeof H.runWithContext=="function"?H.runWithContext(b):b()}function $(b,H){let D;const[V,ie,pe]=Up(b,H);D=Ts(V.reverse(),"beforeRouteLeave",b,H);for(const p of V)p.leaveGuards.forEach(m=>{D.push(Rt(m,b,H))});const h=X.bind(null,b,H);return D.push(h),Fe(D).then(()=>{D=[];for(const p of o.list())D.push(Rt(p,b,H));return D.push(h),Fe(D)}).then(()=>{D=Ts(ie,"beforeRouteUpdate",b,H);for(const p of ie)p.updateGuards.forEach(m=>{D.push(Rt(m,b,H))});return D.push(h),Fe(D)}).then(()=>{D=[];for(const p of pe)if(p.beforeEnter)if(De(p.beforeEnter))for(const m of p.beforeEnter)D.push(Rt(m,b,H));else D.push(Rt(p.beforeEnter,b,H));return D.push(h),Fe(D)}).then(()=>(b.matched.forEach(p=>p.enterCallbacks={}),D=Ts(pe,"beforeRouteEnter",b,H,F),D.push(h),Fe(D))).then(()=>{D=[];for(const p of i.list())D.push(Rt(p,b,H));return D.push(h),Fe(D)}).catch(p=>ut(p,8)?p:Promise.reject(p))}function L(b,H,D){l.list().forEach(V=>F(()=>V(b,H,D)))}function O(b,H,D,V,ie){const pe=S(b,H);if(pe)return pe;const h=H===St,p=ht?history.state:{};D&&(V||h?s.replace(b.fullPath,se({scroll:h&&p&&p.scroll},ie)):s.push(b.fullPath,ie)),a.value=b,Ye(b,H,D,h),yt()}let Y;function M(){Y||(Y=s.listen((b,H,D)=>{if(!er.listening)return;const V=R(b),ie=q(V);if(ie){j(se(ie,{replace:!0}),V).catch(Fn);return}u=V;const pe=a.value;ht&&rp(Mi(pe.fullPath,D.delta),ls()),$(V,pe).catch(h=>ut(h,12)?h:ut(h,2)?(j(h.to,V).then(p=>{ut(p,20)&&!D.delta&&D.type===Gn.pop&&s.go(-1,!1)}).catch(Fn),Promise.reject()):(D.delta&&s.go(-D.delta,!1),te(h,V,pe))).then(h=>{h=h||O(V,pe,!1),h&&(D.delta&&!ut(h,8)?s.go(-D.delta,!1):D.type===Gn.pop&&ut(h,20)&&s.go(-1,!1)),L(V,pe,h)}).catch(Fn)}))}let ee=xn(),ae=xn(),re;function te(b,H,D){yt(b);const V=ae.list();return V.length?V.forEach(ie=>ie(b,H,D)):console.error(b),Promise.reject(b)}function ge(){return re&&a.value!==St?Promise.resolve():new Promise((b,H)=>{ee.add([b,H])})}function yt(b){return re||(re=!b,M(),ee.list().forEach(([H,D])=>b?D(b):H()),ee.reset()),b}function Ye(b,H,D,V){const{scrollBehavior:ie}=e;if(!ht||!ie)return Promise.resolve();const pe=!D&&sp(Mi(b.fullPath,0))||(V||!D)&&history.state&&history.state.scroll||null;return mo().then(()=>ie(b,H,pe)).then(h=>h&&np(h)).catch(h=>te(h,b,H))}const Ie=b=>s.go(b);let Zt;const en=new Set,er={currentRoute:a,listening:!0,addRoute:g,removeRoute:v,clearRoutes:t.clearRoutes,hasRoute:P,getRoutes:E,resolve:R,options:e,push:y,replace:I,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:ae.add,isReady:ge,install(b){const H=this;b.component("RouterLink",Tp),b.component("RouterView",Ap),b.config.globalProperties.$router=H,Object.defineProperty(b.config.globalProperties,"$route",{enumerable:!0,get:()=>gt(a)}),ht&&!Zt&&a.value===St&&(Zt=!0,y(s.location).catch(ie=>{}));const D={};for(const ie in St)Object.defineProperty(D,ie,{get:()=>a.value[ie],enumerable:!0});b.provide(Oo,H),b.provide(pc,Al(D)),b.provide(Zs,a);const V=b.unmount;en.add(b),b.unmount=function(){en.delete(b),en.size<1&&(u=St,Y&&Y(),Y=null,a.value=St,Zt=!1,re=!1),V()},ht&&Ip(b,H,t)}};function Fe(b){return b.reduce((H,D)=>H.then(()=>F(D)),Promise.resolve())}return er}function Up(e,t){const n=[],r=[],s=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iMt(u,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(u=>Mt(u,a))||s.push(a))}return[n,r,s]}const zp=[{path:"/",component:()=>fr(()=>import("./MainLayout-DDxw-kff.js"),__vite__mapDeps([0,1,2])),children:[{path:"",component:()=>fr(()=>import("./IndexPage-Dx0R7lfD.js"),__vite__mapDeps([3,1,4,5]))}]},{path:"/:catchAll(.*)*",component:()=>fr(()=>import("./ErrorNotFound-CzRyWO0R.js"),[])}],Rs=function(){return Vp({scrollBehavior:()=>({left:0,top:0}),routes:zp,history:cp("/openWB/web/themes/koala/")})};async function Kp(e,t){const n=e(eh);n.use(Jd,t);const r=typeof Es=="function"?await Es({}):Es;n.use(r);const s=it(typeof Rs=="function"?await Rs({store:r}):Rs);return r.use(({store:o})=>{o.router=s}),{app:n,store:r,router:s}}const Wp={isoName:"de-DE",nativeName:"Deutsch (DE)",label:{clear:"Leeren",ok:"Ok",cancel:"Abbrechen",close:"Schließen",set:"Setzen",select:"Auswählen",reset:"Zurücksetzen",remove:"Löschen",update:"Aktualisieren",create:"Erstellen",search:"Suche",filter:"Filter",refresh:"Aktualisieren",expand:e=>e?`Erweitern Sie "${e}"`:"Erweitern",collapse:e=>e?`"${e}" minimieren`:"Zusammenbruch"},date:{days:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),daysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan_Feb_März_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"Tage"},table:{noData:"Keine Daten vorhanden.",noResults:"Keine Einträge gefunden",loading:"Lade...",selectedRecords:e=>e>1?e+" ausgewählte Zeilen":(e===0?"Keine":"1")+" ausgewählt.",recordsPerPage:"Zeilen pro Seite",allRows:"Alle",pagination:(e,t,n)=>e+"-"+t+" von "+n,columns:"Spalten"},editor:{url:"URL",bold:"Fett",italic:"Kursiv",strikethrough:"Durchgestrichen",underline:"Unterstrichen",unorderedList:"Ungeordnete Liste",orderedList:"Geordnete Liste",subscript:"tiefgestellt",superscript:"hochgestellt",hyperlink:"Link",toggleFullscreen:"Vollbild umschalten",quote:"Zitat",left:"linksbündig",center:"zentriert",right:"rechtsbündig",justify:"Ausrichten",print:"Drucken",outdent:"ausrücken",indent:"einrücken",removeFormat:"Entferne Formatierung",formatting:"Formatiere",fontSize:"Schriftgröße",align:"Ausrichten",hr:"Horizontale Linie einfügen",undo:"Rückgänging",redo:"Wiederherstellen",heading1:"Überschrift 1",heading2:"Überschrift 2",heading3:"Überschrift 3",heading4:"Überschrift 4",heading5:"Überschrift 5",heading6:"Überschrift 6",paragraph:"Absatz",code:"Code",size1:"Sehr klein",size2:"klein",size3:"Normal",size4:"Groß",size5:"Größer",size6:"Sehr groß",size7:"Maximum",defaultFont:"Standard Schrift",viewSource:"Quelltext anzeigen"},tree:{noNodes:"Keine Knoten verfügbar",noResults:"Keine passenden Knoten gefunden"}},to={xs:18,sm:24,md:32,lg:38,xl:46},Ao={size:String};function Lo(e,t=to){return G(()=>e.size!==void 0?{fontSize:e.size in t?`${t[e.size]}px`:e.size}:null)}function Gp(e,t){return e!==void 0&&e()||t}function fm(e,t){if(e!==void 0){const n=e();if(n!=null)return n.slice()}return t}function kn(e,t){return e!==void 0?t.concat(e()):t}function Qp(e,t){return e===void 0?t:t!==void 0?t.concat(e()):e()}function dm(e,t,n,r,s,o){t.key=r+s;const i=W(e,t,n);return s===!0?Vl(i,o()):i}const Ji="0 0 24 24",Yi=e=>e,ks=e=>`ionicons ${e}`,Sc={"mdi-":e=>`mdi ${e}`,"icon-":Yi,"bt-":e=>`bt ${e}`,"eva-":e=>`eva ${e}`,"ion-md":ks,"ion-ios":ks,"ion-logo":ks,"iconfont ":Yi,"ti-":e=>`themify-icon ${e}`,"bi-":e=>`bootstrap-icons ${e}`},xc={o_:"-outlined",r_:"-round",s_:"-sharp"},Ec={sym_o_:"-outlined",sym_r_:"-rounded",sym_s_:"-sharp"},Jp=new RegExp("^("+Object.keys(Sc).join("|")+")"),Yp=new RegExp("^("+Object.keys(xc).join("|")+")"),Xi=new RegExp("^("+Object.keys(Ec).join("|")+")"),Xp=/^[Mm]\s?[-+]?\.?\d/,Zp=/^img:/,eg=/^svguse:/,tg=/^ion-/,ng=/^(fa-(classic|sharp|solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /,Fr=Zn({name:"QIcon",props:{...Ao,tag:{type:String,default:"i"},name:String,color:String,left:Boolean,right:Boolean},setup(e,{slots:t}){const{proxy:{$q:n}}=lt(),r=Lo(e),s=G(()=>"q-icon"+(e.left===!0?" on-left":"")+(e.right===!0?" on-right":"")+(e.color!==void 0?` text-${e.color}`:"")),o=G(()=>{let i,l=e.name;if(l==="none"||!l)return{none:!0};if(n.iconMapFn!==null){const c=n.iconMapFn(l);if(c!==void 0)if(c.icon!==void 0){if(l=c.icon,l==="none"||!l)return{none:!0}}else return{cls:c.cls,content:c.content!==void 0?c.content:" "}}if(Xp.test(l)===!0){const[c,d=Ji]=l.split("|");return{svg:!0,viewBox:d,nodes:c.split("&&").map(f=>{const[g,v,E]=f.split("@@");return W("path",{style:v,d:g,transform:E})})}}if(Zp.test(l)===!0)return{img:!0,src:l.substring(4)};if(eg.test(l)===!0){const[c,d=Ji]=l.split("|");return{svguse:!0,src:c.substring(7),viewBox:d}}let a=" ";const u=l.match(Jp);if(u!==null)i=Sc[u[1]](l);else if(ng.test(l)===!0)i=l;else if(tg.test(l)===!0)i=`ionicons ion-${n.platform.is.ios===!0?"ios":"md"}${l.substring(3)}`;else if(Xi.test(l)===!0){i="notranslate material-symbols";const c=l.match(Xi);c!==null&&(l=l.substring(6),i+=Ec[c[1]]),a=l}else{i="notranslate material-icons";const c=l.match(Yp);c!==null&&(l=l.substring(2),i+=xc[c[1]]),a=l}return{cls:i,content:a}});return()=>{const i={class:s.value,style:r.value,"aria-hidden":"true",role:"presentation"};return o.value.none===!0?W(e.tag,i,Gp(t.default)):o.value.img===!0?W(e.tag,i,kn(t.default,[W("img",{src:o.value.src})])):o.value.svg===!0?W(e.tag,i,kn(t.default,[W("svg",{viewBox:o.value.viewBox||"0 0 24 24"},o.value.nodes)])):o.value.svguse===!0?W(e.tag,i,kn(t.default,[W("svg",{viewBox:o.value.viewBox},[W("use",{"xlink:href":o.value.src})])])):(o.value.cls!==void 0&&(i.class+=" "+o.value.cls),W(e.tag,i,kn(t.default,[o.value.content])))}}}),rg=Zn({name:"QAvatar",props:{...Ao,fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},setup(e,{slots:t}){const n=Lo(e),r=G(()=>"q-avatar"+(e.color?` bg-${e.color}`:"")+(e.textColor?` text-${e.textColor} q-chip--colored`:"")+(e.square===!0?" q-avatar--square":e.rounded===!0?" rounded-borders":"")),s=G(()=>e.fontSize?{fontSize:e.fontSize}:null);return()=>{const o=e.icon!==void 0?[W(Fr,{name:e.icon})]:void 0;return W("div",{class:r.value,style:n.value},[W("div",{class:"q-avatar__content row flex-center overflow-hidden",style:s.value},Qp(t.default,o))])}}}),sg={size:{type:[String,Number],default:"1em"},color:String};function og(e){return{cSize:G(()=>e.size in to?`${to[e.size]}px`:e.size),classes:G(()=>"q-spinner"+(e.color?` text-${e.color}`:""))}}const Cc=Zn({name:"QSpinner",props:{...sg,thickness:{type:Number,default:5}},setup(e){const{cSize:t,classes:n}=og(e);return()=>W("svg",{class:n.value+" q-spinner-mat",width:t.value,height:t.value,viewBox:"25 25 50 50"},[W("circle",{class:"path",cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":e.thickness,"stroke-miterlimit":"10"})])}});function ig(e,t){const n=e.style;for(const r in t)n[r]=t[r]}function hm(e){if(e==null)return;if(typeof e=="string")try{return document.querySelector(e)||void 0}catch{return}const t=gt(e);if(t)return t.$el||t}function pm(e,t){if(e==null||e.contains(t)===!0)return!0;for(let n=e.nextElementSibling;n!==null;n=n.nextElementSibling)if(n.contains(t))return!0;return!1}function lg(e,t=250){let n=!1,r;return function(){return n===!1&&(n=!0,setTimeout(()=>{n=!1},t),r=e.apply(this,arguments)),r}}function Zi(e,t,n,r){n.modifiers.stop===!0&&ja(e);const s=n.modifiers.color;let o=n.modifiers.center;o=o===!0||r===!0;const i=document.createElement("span"),l=document.createElement("span"),a=Rd(e),{left:u,top:c,width:d,height:f}=t.getBoundingClientRect(),g=Math.sqrt(d*d+f*f),v=g/2,E=`${(d-g)/2}px`,P=o?E:`${a.left-u-v}px`,R=`${(f-g)/2}px`,w=o?R:`${a.top-c-v}px`;l.className="q-ripple__inner",ig(l,{height:`${g}px`,width:`${g}px`,transform:`translate3d(${P},${w},0) scale3d(.2,.2,1)`,opacity:0}),i.className=`q-ripple${s?" text-"+s:""}`,i.setAttribute("dir","ltr"),i.appendChild(l),t.appendChild(i);const S=()=>{i.remove(),clearTimeout(y)};n.abort.push(S);let y=setTimeout(()=>{l.classList.add("q-ripple__inner--enter"),l.style.transform=`translate3d(${E},${R},0) scale3d(1,1,1)`,l.style.opacity=.2,y=setTimeout(()=>{l.classList.remove("q-ripple__inner--enter"),l.classList.add("q-ripple__inner--leave"),l.style.opacity=0,y=setTimeout(()=>{i.remove(),n.abort.splice(n.abort.indexOf(S),1)},275)},250)},50)}function el(e,{modifiers:t,value:n,arg:r}){const s=Object.assign({},e.cfg.ripple,t,n);e.modifiers={early:s.early===!0,stop:s.stop===!0,center:s.center===!0,color:s.color||r,keyCodes:[].concat(s.keyCodes||13)}}const ag=Td({name:"ripple",beforeMount(e,t){const n=t.instance.$.appContext.config.globalProperties.$q.config||{};if(n.ripple===!1)return;const r={cfg:n,enabled:t.value!==!1,modifiers:{},abort:[],start(s){r.enabled===!0&&s.qSkipRipple!==!0&&s.type===(r.modifiers.early===!0?"pointerdown":"click")&&Zi(s,e,r,s.qKeyEvent===!0)},keystart:lg(s=>{r.enabled===!0&&s.qSkipRipple!==!0&&Ws(s,r.modifiers.keyCodes)===!0&&s.type===`key${r.modifiers.early===!0?"down":"up"}`&&Zi(s,e,r,!0)},300)};el(r,t),e.__qripple=r,kd(r,"main",[[e,"pointerdown","start","passive"],[e,"click","start","passive"],[e,"keydown","keystart","passive"],[e,"keyup","keystart","passive"]])},updated(e,t){if(t.oldValue!==t.value){const n=e.__qripple;n!==void 0&&(n.enabled=t.value!==!1,n.enabled===!0&&Object(t.value)===t.value&&el(n,t))}},beforeUnmount(e){const t=e.__qripple;t!==void 0&&(t.abort.forEach(n=>{n()}),Od(t,"main"),delete e._qripple)}}),Pc={left:"start",center:"center",right:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},cg=Object.keys(Pc),ug={align:{type:String,validator:e=>cg.includes(e)}};function fg(e){return G(()=>{const t=e.align===void 0?e.vertical===!0?"stretch":"left":e.align;return`${e.vertical===!0?"items":"justify"}-${Pc[t]}`})}function gm(e){if(Object(e.$parent)===e.$parent)return e.$parent;let{parent:t}=e.$;for(;Object(t)===t;){if(Object(t.proxy)===t.proxy)return t.proxy;t=t.parent}}function Tc(e,t){typeof t.type=="symbol"?Array.isArray(t.children)===!0&&t.children.forEach(n=>{Tc(e,n)}):e.add(t)}function mm(e){const t=new Set;return e.forEach(n=>{Tc(t,n)}),Array.from(t)}function dg(e){return e.appContext.config.globalProperties.$router!==void 0}function vm(e){return e.isUnmounted===!0||e.isDeactivated===!0}function tl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}function nl(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function hg(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(Array.isArray(s)===!1||s.length!==r.length||r.some((o,i)=>o!==s[i]))return!1}return!0}function rl(e,t){return Array.isArray(t)===!0?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function pg(e,t){return Array.isArray(e)===!0?rl(e,t):Array.isArray(t)===!0?rl(t,e):e===t}function gg(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(pg(e[n],t[n])===!1)return!1;return!0}const Rc={to:[String,Object],replace:Boolean,href:String,target:String,disable:Boolean},_m={...Rc,exact:Boolean,activeClass:{type:String,default:"q-router-link--active"},exactActiveClass:{type:String,default:"q-router-link--exact-active"}};function mg({fallbackTag:e,useDisableForRouterLinkProps:t=!0}={}){const n=lt(),{props:r,proxy:s,emit:o}=n,i=dg(n),l=G(()=>r.disable!==!0&&r.href!==void 0),a=G(t===!0?()=>i===!0&&r.disable!==!0&&l.value!==!0&&r.to!==void 0&&r.to!==null&&r.to!=="":()=>i===!0&&l.value!==!0&&r.to!==void 0&&r.to!==null&&r.to!==""),u=G(()=>a.value===!0?w(r.to):null),c=G(()=>u.value!==null),d=G(()=>l.value===!0||c.value===!0),f=G(()=>r.type==="a"||d.value===!0?"a":r.tag||e||"div"),g=G(()=>l.value===!0?{href:r.href,target:r.target}:c.value===!0?{href:u.value.href,target:r.target}:{}),v=G(()=>{if(c.value===!1)return-1;const{matched:I}=u.value,{length:q}=I,j=I[q-1];if(j===void 0)return-1;const X=s.$route.matched;if(X.length===0)return-1;const F=X.findIndex(nl.bind(null,j));if(F!==-1)return F;const $=tl(I[q-2]);return q>1&&tl(j)===$&&X[X.length-1].path!==$?X.findIndex(nl.bind(null,I[q-2])):F}),E=G(()=>c.value===!0&&v.value!==-1&&hg(s.$route.params,u.value.params)),P=G(()=>E.value===!0&&v.value===s.$route.matched.length-1&&gg(s.$route.params,u.value.params)),R=G(()=>c.value===!0?P.value===!0?` ${r.exactActiveClass} ${r.activeClass}`:r.exact===!0?"":E.value===!0?` ${r.activeClass}`:"":"");function w(I){try{return s.$router.resolve(I)}catch{}return null}function S(I,{returnRouterError:q,to:j=r.to,replace:X=r.replace}={}){if(r.disable===!0)return I.preventDefault(),Promise.resolve(!1);if(I.metaKey||I.altKey||I.ctrlKey||I.shiftKey||I.button!==void 0&&I.button!==0||r.target==="_blank")return Promise.resolve(!1);I.preventDefault();const F=s.$router[X===!0?"replace":"push"](j);return q===!0?F:F.then(()=>{}).catch(()=>{})}function y(I){if(c.value===!0){const q=j=>S(I,j);o("click",I,q),I.defaultPrevented!==!0&&q()}else o("click",I)}return{hasRouterLink:c,hasHrefLink:l,hasLink:d,linkTag:f,resolvedLink:u,linkIsActive:E,linkIsExactActive:P,linkClass:R,linkAttrs:g,getLink:w,navigateToRouterLink:S,navigateOnClick:y}}const sl={none:0,xs:4,sm:8,md:16,lg:24,xl:32},vg={xs:8,sm:10,md:14,lg:20,xl:24},_g=["button","submit","reset"],yg=/[^\s]\/[^\s]/,bg=["flat","outline","push","unelevated"];function kc(e,t){return e.flat===!0?"flat":e.outline===!0?"outline":e.push===!0?"push":e.unelevated===!0?"unelevated":t}function ym(e){const t=kc(e);return t!==void 0?{[t]:!0}:{}}const wg={...Ao,...Rc,type:{type:String,default:"button"},label:[Number,String],icon:String,iconRight:String,...bg.reduce((e,t)=>(e[t]=Boolean)&&e,{}),square:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],ripple:{type:[Boolean,Object],default:!0},align:{...ug.align,default:"center"},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean},Sg={...wg,round:Boolean};function xg(e){const t=Lo(e,vg),n=fg(e),{hasRouterLink:r,hasLink:s,linkTag:o,linkAttrs:i,navigateOnClick:l}=mg({fallbackTag:"button"}),a=G(()=>{const P=e.fab===!1&&e.fabMini===!1?t.value:{};return e.padding!==void 0?Object.assign({},P,{padding:e.padding.split(/\s+/).map(R=>R in sl?sl[R]+"px":R).join(" "),minWidth:"0",minHeight:"0"}):P}),u=G(()=>e.rounded===!0||e.fab===!0||e.fabMini===!0),c=G(()=>e.disable!==!0&&e.loading!==!0),d=G(()=>c.value===!0?e.tabindex||0:-1),f=G(()=>kc(e,"standard")),g=G(()=>{const P={tabindex:d.value};return s.value===!0?Object.assign(P,i.value):_g.includes(e.type)===!0&&(P.type=e.type),o.value==="a"?(e.disable===!0?P["aria-disabled"]="true":P.href===void 0&&(P.role="button"),r.value!==!0&&yg.test(e.type)===!0&&(P.type=e.type)):e.disable===!0&&(P.disabled="",P["aria-disabled"]="true"),e.loading===!0&&e.percentage!==void 0&&Object.assign(P,{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":e.percentage}),P}),v=G(()=>{let P;e.color!==void 0?e.flat===!0||e.outline===!0?P=`text-${e.textColor||e.color}`:P=`bg-${e.color} text-${e.textColor||"white"}`:e.textColor&&(P=`text-${e.textColor}`);const R=e.round===!0?"round":`rectangle${u.value===!0?" q-btn--rounded":e.square===!0?" q-btn--square":""}`;return`q-btn--${f.value} q-btn--${R}`+(P!==void 0?" "+P:"")+(c.value===!0?" q-btn--actionable q-focusable q-hoverable":e.disable===!0?" disabled":"")+(e.fab===!0?" q-btn--fab":e.fabMini===!0?" q-btn--fab-mini":"")+(e.noCaps===!0?" q-btn--no-uppercase":"")+(e.dense===!0?" q-btn--dense":"")+(e.stretch===!0?" no-border-radius self-stretch":"")+(e.glossy===!0?" glossy":"")+(e.square?" q-btn--square":"")}),E=G(()=>n.value+(e.stack===!0?" column":" row")+(e.noWrap===!0?" no-wrap text-no-wrap":"")+(e.loading===!0?" q-btn__content--hidden":""));return{classes:v,style:a,innerClasses:E,attributes:g,hasLink:s,linkTag:o,navigateOnClick:l,isActionable:c}}const{passiveCapture:He}=Jt;let on=null,ln=null,an=null;const Eg=Zn({name:"QBtn",props:{...Sg,percentage:Number,darkPercentage:Boolean,onTouchstart:[Function,Array]},emits:["click","keydown","mousedown","keyup"],setup(e,{slots:t,emit:n}){const{proxy:r}=lt(),{classes:s,style:o,innerClasses:i,attributes:l,hasLink:a,linkTag:u,navigateOnClick:c,isActionable:d}=xg(e),f=Gt(null),g=Gt(null);let v=null,E,P=null;const R=G(()=>e.label!==void 0&&e.label!==null&&e.label!==""),w=G(()=>e.disable===!0||e.ripple===!1?!1:{keyCodes:a.value===!0?[13,32]:[13],...e.ripple===!0?{}:e.ripple}),S=G(()=>({center:e.round})),y=G(()=>{const M=Math.max(0,Math.min(100,e.percentage));return M>0?{transition:"transform 0.6s",transform:`translateX(${M-100}%)`}:{}}),I=G(()=>{if(e.loading===!0)return{onMousedown:Y,onTouchstart:Y,onClick:Y,onKeydown:Y,onKeyup:Y};if(d.value===!0){const M={onClick:j,onKeydown:X,onMousedown:$};if(r.$q.platform.has.touch===!0){const ee=e.onTouchstart!==void 0?"":"Passive";M[`onTouchstart${ee}`]=F}return M}return{onClick:nn}}),q=G(()=>({ref:f,class:"q-btn q-btn-item non-selectable no-outline "+s.value,style:o.value,...l.value,...I.value}));function j(M){if(f.value!==null){if(M!==void 0){if(M.defaultPrevented===!0)return;const ee=document.activeElement;if(e.type==="submit"&&ee!==document.body&&f.value.contains(ee)===!1&&ee.contains(f.value)===!1){f.value.focus();const ae=()=>{document.removeEventListener("keydown",nn,!0),document.removeEventListener("keyup",ae,He),f.value!==null&&f.value.removeEventListener("blur",ae,He)};document.addEventListener("keydown",nn,!0),document.addEventListener("keyup",ae,He),f.value.addEventListener("blur",ae,He)}}c(M)}}function X(M){f.value!==null&&(n("keydown",M),Ws(M,[13,32])===!0&&ln!==f.value&&(ln!==null&&O(),M.defaultPrevented!==!0&&(f.value.focus(),ln=f.value,f.value.classList.add("q-btn--active"),document.addEventListener("keyup",L,!0),f.value.addEventListener("blur",L,He)),nn(M)))}function F(M){f.value!==null&&(n("touchstart",M),M.defaultPrevented!==!0&&(on!==f.value&&(on!==null&&O(),on=f.value,v=M.target,v.addEventListener("touchcancel",L,He),v.addEventListener("touchend",L,He)),E=!0,P!==null&&clearTimeout(P),P=setTimeout(()=>{P=null,E=!1},200)))}function $(M){f.value!==null&&(M.qSkipRipple=E===!0,n("mousedown",M),M.defaultPrevented!==!0&&an!==f.value&&(an!==null&&O(),an=f.value,f.value.classList.add("q-btn--active"),document.addEventListener("mouseup",L,He)))}function L(M){if(f.value!==null&&!(M!==void 0&&M.type==="blur"&&document.activeElement===f.value)){if(M!==void 0&&M.type==="keyup"){if(ln===f.value&&Ws(M,[13,32])===!0){const ee=new MouseEvent("click",M);ee.qKeyEvent=!0,M.defaultPrevented===!0&&Ks(ee),M.cancelBubble===!0&&ja(ee),f.value.dispatchEvent(ee),nn(M),M.qKeyEvent=!0}n("keyup",M)}O()}}function O(M){const ee=g.value;M!==!0&&(on===f.value||an===f.value)&&ee!==null&&ee!==document.activeElement&&(ee.setAttribute("tabindex",-1),ee.focus()),on===f.value&&(v!==null&&(v.removeEventListener("touchcancel",L,He),v.removeEventListener("touchend",L,He)),on=v=null),an===f.value&&(document.removeEventListener("mouseup",L,He),an=null),ln===f.value&&(document.removeEventListener("keyup",L,!0),f.value!==null&&f.value.removeEventListener("blur",L,He),ln=null),f.value!==null&&f.value.classList.remove("q-btn--active")}function Y(M){nn(M),M.qSkipRipple=!0}return Zr(()=>{O(!0)}),Object.assign(r,{click:M=>{d.value===!0&&j(M)}}),()=>{let M=[];e.icon!==void 0&&M.push(W(Fr,{name:e.icon,left:e.stack!==!0&&R.value===!0,role:"img"})),R.value===!0&&M.push(W("span",{class:"block"},[e.label])),M=kn(t.default,M),e.iconRight!==void 0&&e.round===!1&&M.push(W(Fr,{name:e.iconRight,right:e.stack!==!0&&R.value===!0,role:"img"}));const ee=[W("span",{class:"q-focus-helper",ref:g})];return e.loading===!0&&e.percentage!==void 0&&ee.push(W("span",{class:"q-btn__progress absolute-full overflow-hidden"+(e.darkPercentage===!0?" q-btn__progress--dark":"")},[W("span",{class:"q-btn__progress-indicator fit block",style:y.value})])),ee.push(W("span",{class:"q-btn__content text-center col items-center q-anchor--skip "+i.value},M)),e.loading!==null&&ee.push(W(Wf,{name:"q-transition--fade"},()=>e.loading===!0?[W("span",{key:"loading",class:"absolute-full flex flex-center"},t.loading!==void 0?t.loading():[W(Cc)])]:null)),Vl(W(u.value,q.value,ee),[[ag,w.value,void 0,S.value]])}}});let Cg=1,Pg=document.body;function Tg(e,t){const n=document.createElement("div");if(n.id=t!==void 0?`q-portal--${t}--${Cg++}`:e,jr.globalNodes!==void 0){const r=jr.globalNodes.class;r!==void 0&&(n.className=r)}return Pg.appendChild(n),n}function bm(e){e.remove()}let Rg=0;const br={},wr={},Ge={},Oc={},kg=/^\s*$/,Ac=[],Og=[void 0,null,!0,!1,""],Io=["top-left","top-right","bottom-left","bottom-right","top","bottom","left","right","center"],Ag=["top-left","top-right","bottom-left","bottom-right"],un={positive:{icon:e=>e.iconSet.type.positive,color:"positive"},negative:{icon:e=>e.iconSet.type.negative,color:"negative"},warning:{icon:e=>e.iconSet.type.warning,color:"warning",textColor:"dark"},info:{icon:e=>e.iconSet.type.info,color:"info"},ongoing:{group:!1,timeout:0,spinner:!0,color:"grey-8"}};function Lc(e,t,n){if(!e)return Cn("parameter required");let r;const s={textColor:"white"};if(e.ignoreDefaults!==!0&&Object.assign(s,br),Wn(e)===!1&&(s.type&&Object.assign(s,un[s.type]),e={message:e}),Object.assign(s,un[e.type||s.type],e),typeof s.icon=="function"&&(s.icon=s.icon(t)),s.spinner?(s.spinner===!0&&(s.spinner=Cc),s.spinner=it(s.spinner)):s.spinner=!1,s.meta={hasMedia:!!(s.spinner!==!1||s.icon||s.avatar),hasText:ol(s.message)||ol(s.caption)},s.position){if(Io.includes(s.position)===!1)return Cn("wrong position",e)}else s.position="bottom";if(Og.includes(s.timeout)===!0)s.timeout=5e3;else{const a=Number(s.timeout);if(isNaN(a)||a<0)return Cn("wrong timeout",e);s.timeout=Number.isFinite(a)?a:0}s.timeout===0?s.progress=!1:s.progress===!0&&(s.meta.progressClass="q-notification__progress"+(s.progressClass?` ${s.progressClass}`:""),s.meta.progressStyle={animationDuration:`${s.timeout+1e3}ms`});const o=(Array.isArray(e.actions)===!0?e.actions:[]).concat(e.ignoreDefaults!==!0&&Array.isArray(br.actions)===!0?br.actions:[]).concat(un[e.type]!==void 0&&Array.isArray(un[e.type].actions)===!0?un[e.type].actions:[]),{closeBtn:i}=s;if(i&&o.push({label:typeof i=="string"?i:t.lang.label.close}),s.actions=o.map(({handler:a,noDismiss:u,...c})=>({flat:!0,...c,onClick:typeof a=="function"?()=>{a(),u!==!0&&l()}:()=>{l()}})),s.multiLine===void 0&&(s.multiLine=s.actions.length>1),Object.assign(s.meta,{class:`q-notification row items-stretch q-notification--${s.multiLine===!0?"multi-line":"standard"}`+(s.color!==void 0?` bg-${s.color}`:"")+(s.textColor!==void 0?` text-${s.textColor}`:"")+(s.classes!==void 0?` ${s.classes}`:""),wrapperClass:"q-notification__wrapper col relative-position border-radius-inherit "+(s.multiLine===!0?"column no-wrap justify-center":"row items-center"),contentClass:"q-notification__content row items-center"+(s.multiLine===!0?"":" col"),leftClass:s.meta.hasText===!0?"additional":"single",attrs:{role:"alert",...s.attrs}}),s.group===!1?(s.group=void 0,s.meta.group=void 0):((s.group===void 0||s.group===!0)&&(s.group=[s.message,s.caption,s.multiline].concat(s.actions.map(a=>`${a.label}*${a.icon}`)).join("|")),s.meta.group=s.group+"|"+s.position),s.actions.length===0?s.actions=void 0:s.meta.actionsClass="q-notification__actions row items-center "+(s.multiLine===!0?"justify-end":"col-auto")+(s.meta.hasMedia===!0?" q-notification__actions--with-media":""),n!==void 0){n.notif.meta.timer&&(clearTimeout(n.notif.meta.timer),n.notif.meta.timer=void 0),s.meta.uid=n.notif.meta.uid;const a=Ge[s.position].value.indexOf(n.notif);Ge[s.position].value[a]=s}else{const a=wr[s.meta.group];if(a===void 0){if(s.meta.uid=Rg++,s.meta.badge=1,["left","right","center"].indexOf(s.position)!==-1)Ge[s.position].value.splice(Math.floor(Ge[s.position].value.length/2),0,s);else{const u=s.position.indexOf("top")!==-1?"unshift":"push";Ge[s.position].value[u](s)}s.group!==void 0&&(wr[s.meta.group]=s)}else{if(a.meta.timer&&(clearTimeout(a.meta.timer),a.meta.timer=void 0),s.badgePosition!==void 0){if(Ag.includes(s.badgePosition)===!1)return Cn("wrong badgePosition",e)}else s.badgePosition=`top-${s.position.indexOf("left")!==-1?"right":"left"}`;s.meta.uid=a.meta.uid,s.meta.badge=a.meta.badge+1,s.meta.badgeClass=`q-notification__badge q-notification__badge--${s.badgePosition}`+(s.badgeColor!==void 0?` bg-${s.badgeColor}`:"")+(s.badgeTextColor!==void 0?` text-${s.badgeTextColor}`:"")+(s.badgeClass?` ${s.badgeClass}`:"");const u=Ge[s.position].value.indexOf(a);Ge[s.position].value[u]=wr[s.meta.group]=s}}const l=()=>{Lg(s),r=void 0};if(s.timeout>0&&(s.meta.timer=setTimeout(()=>{s.meta.timer=void 0,l()},s.timeout+1e3)),s.group!==void 0)return a=>{a!==void 0?Cn("trying to update a grouped one which is forbidden",e):l()};if(r={dismiss:l,config:e,notif:s},n!==void 0){Object.assign(n,r);return}return a=>{if(r!==void 0)if(a===void 0)r.dismiss();else{const u=Object.assign({},r.config,a,{group:!1,position:s.position});Lc(u,t,r)}}}function Lg(e){e.meta.timer&&(clearTimeout(e.meta.timer),e.meta.timer=void 0);const t=Ge[e.position].value.indexOf(e);if(t!==-1){e.group!==void 0&&delete wr[e.meta.group];const n=Ac[""+e.meta.uid];if(n){const{width:r,height:s}=getComputedStyle(n);n.style.left=`${n.offsetLeft}px`,n.style.width=r,n.style.height=s}Ge[e.position].value.splice(t,1),typeof e.onDismiss=="function"&&e.onDismiss()}}function ol(e){return e!=null&&kg.test(e)!==!0}function Cn(e,t){return console.error(`Notify: ${e}`,t),!1}function Ig(){return Zn({name:"QNotifications",devtools:{hide:!0},setup(){return()=>W("div",{class:"q-notifications"},Io.map(e=>W(dd,{key:e,class:Oc[e],tag:"div",name:`q-notification--${e}`},()=>Ge[e].value.map(t=>{const n=t.meta,r=[];if(n.hasMedia===!0&&(t.spinner!==!1?r.push(W(t.spinner,{class:"q-notification__spinner q-notification__spinner--"+n.leftClass,color:t.spinnerColor,size:t.spinnerSize})):t.icon?r.push(W(Fr,{class:"q-notification__icon q-notification__icon--"+n.leftClass,name:t.icon,color:t.iconColor,size:t.iconSize,role:"img"})):t.avatar&&r.push(W(rg,{class:"q-notification__avatar q-notification__avatar--"+n.leftClass},()=>W("img",{src:t.avatar,"aria-hidden":"true"})))),n.hasText===!0){let o;const i={class:"q-notification__message col"};if(t.html===!0)i.innerHTML=t.caption?`
${t.message}
${t.caption}
`:t.message;else{const l=[t.message];o=t.caption?[W("div",l),W("div",{class:"q-notification__caption"},[t.caption])]:l}r.push(W("div",i,o))}const s=[W("div",{class:n.contentClass},r)];return t.progress===!0&&s.push(W("div",{key:`${n.uid}|p|${n.badge}`,class:n.progressClass,style:n.progressStyle})),t.actions!==void 0&&s.push(W("div",{class:n.actionsClass},t.actions.map(o=>W(Eg,o)))),n.badge>1&&s.push(W("div",{key:`${n.uid}|${n.badge}`,class:t.meta.badgeClass,style:t.badgeStyle},[n.badge])),W("div",{ref:o=>{Ac[""+n.uid]=o},key:n.uid,class:n.class,...n.attrs},[W("div",{class:n.wrapperClass},s)])}))))}})}const $g={setDefaults(e){Wn(e)===!0&&Object.assign(br,e)},registerType(e,t){Wn(t)===!0&&(un[e]=t)},install({$q:e,parentApp:t}){if(e.notify=this.create=n=>Lc(n,e),e.notify.setDefaults=this.setDefaults,e.notify.registerType=this.registerType,e.config.notify!==void 0&&this.setDefaults(e.config.notify),this.__installed!==!0){Io.forEach(r=>{Ge[r]=Gt([]);const s=["left","center","right"].includes(r)===!0?"center":r.indexOf("top")!==-1?"top":"bottom",o=r.indexOf("left")!==-1?"start":r.indexOf("right")!==-1?"end":"center",i=["left","right"].includes(r)?`items-${r==="left"?"start":"end"} justify-center`:r==="center"?"flex-center":`items-${o}`;Oc[r]=`q-notifications__list q-notifications__list--${s} fixed column no-wrap ${i}`});const n=Tg("q-notify");Wd(Ig(),t).mount(n)}}},Mg={config:{dark:"auto"},lang:Wp,plugins:{Notify:$g}},Ng="/openWB/web/themes/koala/";async function jg({app:e,router:t,store:n},r){let s=!1;const o=a=>{try{return t.resolve(a).href}catch{}return Object(a)===a?null:a},i=a=>{if(s=!0,typeof a=="string"&&/^https?:\/\//.test(a)){window.location.href=a;return}const u=o(a);u!==null&&(window.location.href=u,window.location.reload())},l=window.location.href.replace(window.location.origin,"");for(let a=0;s===!1&&a{const[t,n]=Promise.allSettled!==void 0?["allSettled",r=>r.map(s=>{if(s.status==="rejected"){console.error("[Quasar] boot error:",s.reason);return}return s.value.default})]:["all",r=>r.map(s=>s.default)];return Promise[t]([fr(()=>import("./store-init-DphRCu_b.js"),__vite__mapDeps([6,4]))]).then(r=>{const s=n(r).filter(o=>typeof o=="function");jg(e,s)})});export{ea as $,Ar as A,Nu as B,Le as C,$f as D,Fr as E,Ur as F,om as G,Ws as H,Md as I,nn as J,Uu as K,Vu as L,Td as M,st as N,Kn as O,Zg as P,Eg as Q,ag as R,kd as S,tm as T,Rd as U,Od as V,Wf as W,mm as X,Hg as Y,dg as Z,Xd as _,G as a,Vd as a0,am as a1,Jg as a2,Wg as a3,wa as a4,Te as a5,Vg as a6,Gg as a7,Qc as a8,Il as a9,Ug as aA,Mf as aB,Dg as aC,If as aD,Qg as aE,wg as aF,ym as aG,zs as aH,ug as aI,fg as aJ,Bg as aK,_m as aL,mg as aM,gm as aN,Fg as aO,Tg as aP,bm as aQ,vm as aR,hm as aS,ig as aT,em as aU,zd as aV,oi as aa,Z as ab,po as ac,um as ad,Vr as ae,qg as af,pm as ag,zg as ah,Yg as ai,Ku as aj,sm as ak,Ad as al,ss as am,Ks as an,Cc as ao,ja as ap,Jt as aq,Ao as ar,Lo as as,Qp as at,bo as au,Ss as av,lm as aw,Wn as ax,Xg as ay,Kg as az,cm as b,Zn as c,Gp as d,im as e,fm as f,lt as g,W as h,rt as i,Xr as j,Vl as k,nm as l,dm as m,mo as n,Zr as o,hr as p,rm as q,Gt as r,Qt as s,Xt as t,wo as u,kn as v,Lt as w,Qr as x,Yu as y,Or as z}; diff --git a/packages/modules/web_themes/koala/web/assets/mqtt-store-BO4qCeJ5.js b/packages/modules/web_themes/koala/web/assets/mqtt-store-DD98gHuI.js similarity index 99% rename from packages/modules/web_themes/koala/web/assets/mqtt-store-BO4qCeJ5.js rename to packages/modules/web_themes/koala/web/assets/mqtt-store-DD98gHuI.js index 1983464753..ed8ba2c6bf 100644 --- a/packages/modules/web_themes/koala/web/assets/mqtt-store-BO4qCeJ5.js +++ b/packages/modules/web_themes/koala/web/assets/mqtt-store-DD98gHuI.js @@ -1,4 +1,4 @@ -var cl=Object.defineProperty;var Qi=e=>{throw TypeError(e)};var fl=(e,i,t)=>i in e?cl(e,i,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[i]=t;var it=(e,i,t)=>fl(e,typeof i!="symbol"?i+"":i,t),Gr=(e,i,t)=>i.has(e)||Qi("Cannot "+t);var M=(e,i,t)=>(Gr(e,i,"read from private field"),t?t.call(e):i.get(e)),je=(e,i,t)=>i.has(e)?Qi("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(e):i.set(e,t),xe=(e,i,t,l)=>(Gr(e,i,"write to private field"),l?l.call(e,t):i.set(e,t),t),Oe=(e,i,t)=>(Gr(e,i,"access private method"),t);var Ar=(e,i,t,l)=>({set _(h){xe(e,i,h,t)},get _(){return M(e,i,l)}});import{ad as dl,r as Gi,a as be}from"./index-CMMTdT_8.js";var Mi=Object.defineProperty,pl=Object.getOwnPropertyDescriptor,gl=Object.getOwnPropertyNames,ml=Object.prototype.hasOwnProperty,et=(e,i)=>()=>(e&&(i=e(e=0)),i),Se=(e,i)=>()=>(i||e((i={exports:{}}).exports,i),i.exports),nr=(e,i)=>{for(var t in i)Mi(e,t,{get:i[t],enumerable:!0})},bl=(e,i,t,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let h of gl(i))!ml.call(e,h)&&h!==t&&Mi(e,h,{get:()=>i[h],enumerable:!(l=pl(i,h))||l.enumerable});return e},De=e=>bl(Mi({},"__esModule",{value:!0}),e),fe=et(()=>{}),Le={};nr(Le,{_debugEnd:()=>Vn,_debugProcess:()=>qn,_events:()=>oi,_eventsCount:()=>si,_exiting:()=>On,_fatalExceptions:()=>Dn,_getActiveHandles:()=>Ho,_getActiveRequests:()=>Vo,_kill:()=>Rn,_linkedBinding:()=>$o,_maxListeners:()=>ii,_preload_modules:()=>ri,_rawDebug:()=>Cn,_startProfilerIdleNotifier:()=>Hn,_stopProfilerIdleNotifier:()=>zn,_tickCallback:()=>$n,abort:()=>Gn,addListener:()=>ai,allowedNodeEnvironmentFlags:()=>Nn,arch:()=>dn,argv:()=>mn,argv0:()=>ti,assert:()=>zo,binding:()=>_n,chdir:()=>An,config:()=>Bn,cpuUsage:()=>br,cwd:()=>Sn,debugPort:()=>ei,default:()=>Ui,dlopen:()=>qo,domain:()=>Tn,emit:()=>fi,emitWarning:()=>wn,env:()=>gn,execArgv:()=>bn,execPath:()=>Xn,exit:()=>Un,features:()=>Wn,hasUncaughtExceptionCaptureCallback:()=>Ko,hrtime:()=>Pr,kill:()=>jn,listeners:()=>Qo,memoryUsage:()=>Mn,moduleLoadList:()=>In,nextTick:()=>Do,off:()=>ui,on:()=>At,once:()=>li,openStdin:()=>Ln,pid:()=>Jn,platform:()=>pn,ppid:()=>Zn,prependListener:()=>di,prependOnceListener:()=>pi,reallyExit:()=>Pn,release:()=>kn,removeAllListeners:()=>ci,removeListener:()=>hi,resourceUsage:()=>xn,setSourceMapsEnabled:()=>ni,setUncaughtExceptionCaptureCallback:()=>Fn,stderr:()=>Yn,stdin:()=>Qn,stdout:()=>Kn,title:()=>fn,umask:()=>En,uptime:()=>Yo,version:()=>yn,versions:()=>vn});function ji(e){throw new Error("Node.js process "+e+" is not supported by JSPM core outside of Node.js")}function yl(){!er||!Zt||(er=!1,Zt.length?_t=Zt.concat(_t):wr=-1,_t.length&&Wo())}function Wo(){if(!er){var e=setTimeout(yl,0);er=!0;for(var i=_t.length;i;){for(Zt=_t,_t=[];++wr1)for(var t=1;t{fe(),pe(),de(),_t=[],er=!1,wr=-1,Fo.prototype.run=function(){this.fun.apply(null,this.array)},fn="browser",dn="x64",pn="browser",gn={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},mn=["/usr/bin/node"],bn=[],yn="v16.8.0",vn={},wn=function(e,i){console.warn((i?i+": ":"")+e)},_n=function(e){ji("binding")},En=function(e){return 0},Sn=function(){return"/"},An=function(e){},kn={name:"node",sourceUrl:"",headersUrl:"",libUrl:""},Cn=ot,In=[],Tn={},On=!1,Bn={},Pn=ot,Rn=ot,br=function(){return{}},xn=br,Mn=br,jn=ot,Un=ot,Ln=ot,Nn={},Wn={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},Dn=ot,Fn=ot,$n=ot,qn=ot,Vn=ot,Hn=ot,zn=ot,Kn=void 0,Yn=void 0,Qn=void 0,Gn=ot,Jn=2,Zn=1,Xn="/bin/usr/node",ei=9229,ti="node",ri=[],ni=ot,Tt={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0},Tt.now===void 0&&(Jr=Date.now(),Tt.timing&&Tt.timing.navigationStart&&(Jr=Tt.timing.navigationStart),Tt.now=()=>Date.now()-Jr),Rr=1e9,Pr.bigint=function(e){var i=Pr(e);return typeof BigInt>"u"?i[0]*Rr+i[1]:BigInt(i[0]*Rr)+BigInt(i[1])},ii=10,oi={},si=0,ai=At,li=At,ui=At,hi=At,ci=At,fi=ot,di=At,pi=At,Ui={version:yn,versions:vn,arch:dn,platform:pn,release:kn,_rawDebug:Cn,moduleLoadList:In,binding:_n,_linkedBinding:$o,_events:oi,_eventsCount:si,_maxListeners:ii,on:At,addListener:ai,once:li,off:ui,removeListener:hi,removeAllListeners:ci,emit:fi,prependListener:di,prependOnceListener:pi,listeners:Qo,domain:Tn,_exiting:On,config:Bn,dlopen:qo,uptime:Yo,_getActiveRequests:Vo,_getActiveHandles:Ho,reallyExit:Pn,_kill:Rn,cpuUsage:br,resourceUsage:xn,memoryUsage:Mn,kill:jn,exit:Un,openStdin:Ln,allowedNodeEnvironmentFlags:Nn,assert:zo,features:Wn,_fatalExceptions:Dn,setUncaughtExceptionCaptureCallback:Fn,hasUncaughtExceptionCaptureCallback:Ko,emitWarning:wn,nextTick:Do,_tickCallback:$n,_debugProcess:qn,_debugEnd:Vn,_startProfilerIdleNotifier:Hn,_stopProfilerIdleNotifier:zn,stdout:Kn,stdin:Qn,stderr:Yn,abort:Gn,umask:En,chdir:An,cwd:Sn,env:gn,title:fn,argv:mn,execArgv:bn,pid:Jn,ppid:Zn,execPath:Xn,debugPort:ei,hrtime:Pr,argv0:ti,_preload_modules:ri,setSourceMapsEnabled:ni}}),de=et(()=>{vl()}),tt={};nr(tt,{Buffer:()=>Wr,INSPECT_MAX_BYTES:()=>Go,default:()=>kt,kMaxLength:()=>Jo});function wl(){if(gi)return lr;gi=!0,lr.byteLength=o,lr.toByteArray=a,lr.fromByteArray=g;for(var e=[],i=[],t=typeof Uint8Array<"u"?Uint8Array:Array,l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,s=l.length;h0)throw new Error("Invalid string. Length must be a multiple of 4");var v=m.indexOf("=");v===-1&&(v=b);var k=v===b?0:4-v%4;return[v,k]}function o(m){var b=r(m),v=b[0],k=b[1];return(v+k)*3/4-k}function n(m,b,v){return(b+v)*3/4-v}function a(m){var b,v=r(m),k=v[0],N=v[1],B=new t(n(m,k,N)),w=0,U=N>0?k-4:k,q;for(q=0;q>16&255,B[w++]=b>>8&255,B[w++]=b&255;return N===2&&(b=i[m.charCodeAt(q)]<<2|i[m.charCodeAt(q+1)]>>4,B[w++]=b&255),N===1&&(b=i[m.charCodeAt(q)]<<10|i[m.charCodeAt(q+1)]<<4|i[m.charCodeAt(q+2)]>>2,B[w++]=b>>8&255,B[w++]=b&255),B}function f(m){return e[m>>18&63]+e[m>>12&63]+e[m>>6&63]+e[m&63]}function p(m,b,v){for(var k,N=[],B=b;BU?U:w+B));return k===1?(b=m[v-1],N.push(e[b>>2]+e[b<<4&63]+"==")):k===2&&(b=(m[v-2]<<8)+m[v-1],N.push(e[b>>10]+e[b>>4&63]+e[b<<2&63]+"=")),N.join("")}return lr}function _l(){return mi?yr:(mi=!0,yr.read=function(e,i,t,l,h){var s,r,o=h*8-l-1,n=(1<>1,f=-7,p=t?h-1:0,g=t?-1:1,m=e[i+p];for(p+=g,s=m&(1<<-f)-1,m>>=-f,f+=o;f>0;s=s*256+e[i+p],p+=g,f-=8);for(r=s&(1<<-f)-1,s>>=-f,f+=l;f>0;r=r*256+e[i+p],p+=g,f-=8);if(s===0)s=1-a;else{if(s===n)return r?NaN:(m?-1:1)*(1/0);r=r+Math.pow(2,l),s=s-a}return(m?-1:1)*r*Math.pow(2,s-l)},yr.write=function(e,i,t,l,h,s){var r,o,n,a=s*8-h-1,f=(1<>1,g=h===23?Math.pow(2,-24)-Math.pow(2,-77):0,m=l?0:s-1,b=l?1:-1,v=i<0||i===0&&1/i<0?1:0;for(i=Math.abs(i),isNaN(i)||i===1/0?(o=isNaN(i)?1:0,r=f):(r=Math.floor(Math.log(i)/Math.LN2),i*(n=Math.pow(2,-r))<1&&(r--,n*=2),r+p>=1?i+=g/n:i+=g*Math.pow(2,1-p),i*n>=2&&(r++,n/=2),r+p>=f?(o=0,r=f):r+p>=1?(o=(i*n-1)*Math.pow(2,h),r=r+p):(o=i*Math.pow(2,p-1)*Math.pow(2,h),r=0));h>=8;e[t+m]=o&255,m+=b,o/=256,h-=8);for(r=r<0;e[t+m]=r&255,m+=b,r/=256,a-=8);e[t+m-b]|=v*128},yr)}function El(){if(bi)return Nt;bi=!0;let e=wl(),i=_l(),t=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Nt.Buffer=r,Nt.SlowBuffer=N,Nt.INSPECT_MAX_BYTES=50;let l=2147483647;Nt.kMaxLength=l,r.TYPED_ARRAY_SUPPORT=h(),!r.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function h(){try{let c=new Uint8Array(1),u={foo:function(){return 42}};return Object.setPrototypeOf(u,Uint8Array.prototype),Object.setPrototypeOf(c,u),c.foo()===42}catch{return!1}}Object.defineProperty(r.prototype,"parent",{enumerable:!0,get:function(){if(r.isBuffer(this))return this.buffer}}),Object.defineProperty(r.prototype,"offset",{enumerable:!0,get:function(){if(r.isBuffer(this))return this.byteOffset}});function s(c){if(c>l)throw new RangeError('The value "'+c+'" is invalid for option "size"');let u=new Uint8Array(c);return Object.setPrototypeOf(u,r.prototype),u}function r(c,u,d){if(typeof c=="number"){if(typeof u=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return f(c)}return o(c,u,d)}r.poolSize=8192;function o(c,u,d){if(typeof c=="string")return p(c,u);if(ArrayBuffer.isView(c))return m(c);if(c==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof c);if(S(c,ArrayBuffer)||c&&S(c.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(S(c,SharedArrayBuffer)||c&&S(c.buffer,SharedArrayBuffer)))return b(c,u,d);if(typeof c=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let _=c.valueOf&&c.valueOf();if(_!=null&&_!==c)return r.from(_,u,d);let P=v(c);if(P)return P;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof c[Symbol.toPrimitive]=="function")return r.from(c[Symbol.toPrimitive]("string"),u,d);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof c)}r.from=function(c,u,d){return o(c,u,d)},Object.setPrototypeOf(r.prototype,Uint8Array.prototype),Object.setPrototypeOf(r,Uint8Array);function n(c){if(typeof c!="number")throw new TypeError('"size" argument must be of type number');if(c<0)throw new RangeError('The value "'+c+'" is invalid for option "size"')}function a(c,u,d){return n(c),c<=0?s(c):u!==void 0?typeof d=="string"?s(c).fill(u,d):s(c).fill(u):s(c)}r.alloc=function(c,u,d){return a(c,u,d)};function f(c){return n(c),s(c<0?0:k(c)|0)}r.allocUnsafe=function(c){return f(c)},r.allocUnsafeSlow=function(c){return f(c)};function p(c,u){if((typeof u!="string"||u==="")&&(u="utf8"),!r.isEncoding(u))throw new TypeError("Unknown encoding: "+u);let d=B(c,u)|0,_=s(d),P=_.write(c,u);return P!==d&&(_=_.slice(0,P)),_}function g(c){let u=c.length<0?0:k(c.length)|0,d=s(u);for(let _=0;_=l)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+l.toString(16)+" bytes");return c|0}function N(c){return+c!=c&&(c=0),r.alloc(+c)}r.isBuffer=function(c){return c!=null&&c._isBuffer===!0&&c!==r.prototype},r.compare=function(c,u){if(S(c,Uint8Array)&&(c=r.from(c,c.offset,c.byteLength)),S(u,Uint8Array)&&(u=r.from(u,u.offset,u.byteLength)),!r.isBuffer(c)||!r.isBuffer(u))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(c===u)return 0;let d=c.length,_=u.length;for(let P=0,D=Math.min(d,_);P_.length?(r.isBuffer(D)||(D=r.from(D)),D.copy(_,P)):Uint8Array.prototype.set.call(_,D,P);else if(r.isBuffer(D))D.copy(_,P);else throw new TypeError('"list" argument must be an Array of Buffers');P+=D.length}return _};function B(c,u){if(r.isBuffer(c))return c.length;if(ArrayBuffer.isView(c)||S(c,ArrayBuffer))return c.byteLength;if(typeof c!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof c);let d=c.length,_=arguments.length>2&&arguments[2]===!0;if(!_&&d===0)return 0;let P=!1;for(;;)switch(u){case"ascii":case"latin1":case"binary":return d;case"utf8":case"utf-8":return F(c).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return d*2;case"hex":return d>>>1;case"base64":return ee(c).length;default:if(P)return _?-1:F(c).length;u=(""+u).toLowerCase(),P=!0}}r.byteLength=B;function w(c,u,d){let _=!1;if((u===void 0||u<0)&&(u=0),u>this.length||((d===void 0||d>this.length)&&(d=this.length),d<=0)||(d>>>=0,u>>>=0,d<=u))return"";for(c||(c="utf8");;)switch(c){case"hex":return V(this,u,d);case"utf8":case"utf-8":return K(this,u,d);case"ascii":return _e(this,u,d);case"latin1":case"binary":return he(this,u,d);case"base64":return T(this,u,d);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ae(this,u,d);default:if(_)throw new TypeError("Unknown encoding: "+c);c=(c+"").toLowerCase(),_=!0}}r.prototype._isBuffer=!0;function U(c,u,d){let _=c[u];c[u]=c[d],c[d]=_}r.prototype.swap16=function(){let c=this.length;if(c%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let u=0;uu&&(c+=" ... "),""},t&&(r.prototype[t]=r.prototype.inspect),r.prototype.compare=function(c,u,d,_,P){if(S(c,Uint8Array)&&(c=r.from(c,c.offset,c.byteLength)),!r.isBuffer(c))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof c);if(u===void 0&&(u=0),d===void 0&&(d=c?c.length:0),_===void 0&&(_=0),P===void 0&&(P=this.length),u<0||d>c.length||_<0||P>this.length)throw new RangeError("out of range index");if(_>=P&&u>=d)return 0;if(_>=P)return-1;if(u>=d)return 1;if(u>>>=0,d>>>=0,_>>>=0,P>>>=0,this===c)return 0;let D=P-_,ce=d-u,Pe=Math.min(D,ce),Me=this.slice(_,P),Ie=c.slice(u,d);for(let Te=0;Te2147483647?d=2147483647:d<-2147483648&&(d=-2147483648),d=+d,j(d)&&(d=P?0:c.length-1),d<0&&(d=c.length+d),d>=c.length){if(P)return-1;d=c.length-1}else if(d<0)if(P)d=0;else return-1;if(typeof u=="string"&&(u=r.from(u,_)),r.isBuffer(u))return u.length===0?-1:I(c,u,d,_,P);if(typeof u=="number")return u=u&255,typeof Uint8Array.prototype.indexOf=="function"?P?Uint8Array.prototype.indexOf.call(c,u,d):Uint8Array.prototype.lastIndexOf.call(c,u,d):I(c,[u],d,_,P);throw new TypeError("val must be string, number or Buffer")}function I(c,u,d,_,P){let D=1,ce=c.length,Pe=u.length;if(_!==void 0&&(_=String(_).toLowerCase(),_==="ucs2"||_==="ucs-2"||_==="utf16le"||_==="utf-16le")){if(c.length<2||u.length<2)return-1;D=2,ce/=2,Pe/=2,d/=2}function Me(Te,Be){return D===1?Te[Be]:Te.readUInt16BE(Be*D)}let Ie;if(P){let Te=-1;for(Ie=d;Iece&&(d=ce-Pe),Ie=d;Ie>=0;Ie--){let Te=!0;for(let Be=0;BeP&&(_=P)):_=P;let D=u.length;_>D/2&&(_=D/2);let ce;for(ce=0;ce<_;++ce){let Pe=parseInt(u.substr(ce*2,2),16);if(j(Pe))return ce;c[d+ce]=Pe}return ce}function R(c,u,d,_){return L(F(u,c.length-d),c,d,_)}function Q(c,u,d,_){return L($(u),c,d,_)}function te(c,u,d,_){return L(ee(u),c,d,_)}function se(c,u,d,_){return L(ue(u,c.length-d),c,d,_)}r.prototype.write=function(c,u,d,_){if(u===void 0)_="utf8",d=this.length,u=0;else if(d===void 0&&typeof u=="string")_=u,d=this.length,u=0;else if(isFinite(u))u=u>>>0,isFinite(d)?(d=d>>>0,_===void 0&&(_="utf8")):(_=d,d=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let P=this.length-u;if((d===void 0||d>P)&&(d=P),c.length>0&&(d<0||u<0)||u>this.length)throw new RangeError("Attempt to write outside buffer bounds");_||(_="utf8");let D=!1;for(;;)switch(_){case"hex":return C(this,c,u,d);case"utf8":case"utf-8":return R(this,c,u,d);case"ascii":case"latin1":case"binary":return Q(this,c,u,d);case"base64":return te(this,c,u,d);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return se(this,c,u,d);default:if(D)throw new TypeError("Unknown encoding: "+_);_=(""+_).toLowerCase(),D=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(c,u,d){return u===0&&d===c.length?e.fromByteArray(c):e.fromByteArray(c.slice(u,d))}function K(c,u,d){d=Math.min(c.length,d);let _=[],P=u;for(;P239?4:D>223?3:D>191?2:1;if(P+Pe<=d){let Me,Ie,Te,Be;switch(Pe){case 1:D<128&&(ce=D);break;case 2:Me=c[P+1],(Me&192)===128&&(Be=(D&31)<<6|Me&63,Be>127&&(ce=Be));break;case 3:Me=c[P+1],Ie=c[P+2],(Me&192)===128&&(Ie&192)===128&&(Be=(D&15)<<12|(Me&63)<<6|Ie&63,Be>2047&&(Be<55296||Be>57343)&&(ce=Be));break;case 4:Me=c[P+1],Ie=c[P+2],Te=c[P+3],(Me&192)===128&&(Ie&192)===128&&(Te&192)===128&&(Be=(D&15)<<18|(Me&63)<<12|(Ie&63)<<6|Te&63,Be>65535&&Be<1114112&&(ce=Be))}}ce===null?(ce=65533,Pe=1):ce>65535&&(ce-=65536,_.push(ce>>>10&1023|55296),ce=56320|ce&1023),_.push(ce),P+=Pe}return J(_)}let re=4096;function J(c){let u=c.length;if(u<=re)return String.fromCharCode.apply(String,c);let d="",_=0;for(;__)&&(d=_);let P="";for(let D=u;Dd&&(c=d),u<0?(u+=d,u<0&&(u=0)):u>d&&(u=d),ud)throw new RangeError("Trying to access beyond buffer length")}r.prototype.readUintLE=r.prototype.readUIntLE=function(c,u,d){c=c>>>0,u=u>>>0,d||ie(c,u,this.length);let _=this[c],P=1,D=0;for(;++D>>0,u=u>>>0,d||ie(c,u,this.length);let _=this[c+--u],P=1;for(;u>0&&(P*=256);)_+=this[c+--u]*P;return _},r.prototype.readUint8=r.prototype.readUInt8=function(c,u){return c=c>>>0,u||ie(c,1,this.length),this[c]},r.prototype.readUint16LE=r.prototype.readUInt16LE=function(c,u){return c=c>>>0,u||ie(c,2,this.length),this[c]|this[c+1]<<8},r.prototype.readUint16BE=r.prototype.readUInt16BE=function(c,u){return c=c>>>0,u||ie(c,2,this.length),this[c]<<8|this[c+1]},r.prototype.readUint32LE=r.prototype.readUInt32LE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),(this[c]|this[c+1]<<8|this[c+2]<<16)+this[c+3]*16777216},r.prototype.readUint32BE=r.prototype.readUInt32BE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),this[c]*16777216+(this[c+1]<<16|this[c+2]<<8|this[c+3])},r.prototype.readBigUInt64LE=Z(function(c){c=c>>>0,ne(c,"offset");let u=this[c],d=this[c+7];(u===void 0||d===void 0)&&Ee(c,this.length-8);let _=u+this[++c]*2**8+this[++c]*2**16+this[++c]*2**24,P=this[++c]+this[++c]*2**8+this[++c]*2**16+d*2**24;return BigInt(_)+(BigInt(P)<>>0,ne(c,"offset");let u=this[c],d=this[c+7];(u===void 0||d===void 0)&&Ee(c,this.length-8);let _=u*2**24+this[++c]*2**16+this[++c]*2**8+this[++c],P=this[++c]*2**24+this[++c]*2**16+this[++c]*2**8+d;return(BigInt(_)<>>0,u=u>>>0,d||ie(c,u,this.length);let _=this[c],P=1,D=0;for(;++D=P&&(_-=Math.pow(2,8*u)),_},r.prototype.readIntBE=function(c,u,d){c=c>>>0,u=u>>>0,d||ie(c,u,this.length);let _=u,P=1,D=this[c+--_];for(;_>0&&(P*=256);)D+=this[c+--_]*P;return P*=128,D>=P&&(D-=Math.pow(2,8*u)),D},r.prototype.readInt8=function(c,u){return c=c>>>0,u||ie(c,1,this.length),this[c]&128?(255-this[c]+1)*-1:this[c]},r.prototype.readInt16LE=function(c,u){c=c>>>0,u||ie(c,2,this.length);let d=this[c]|this[c+1]<<8;return d&32768?d|4294901760:d},r.prototype.readInt16BE=function(c,u){c=c>>>0,u||ie(c,2,this.length);let d=this[c+1]|this[c]<<8;return d&32768?d|4294901760:d},r.prototype.readInt32LE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),this[c]|this[c+1]<<8|this[c+2]<<16|this[c+3]<<24},r.prototype.readInt32BE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),this[c]<<24|this[c+1]<<16|this[c+2]<<8|this[c+3]},r.prototype.readBigInt64LE=Z(function(c){c=c>>>0,ne(c,"offset");let u=this[c],d=this[c+7];(u===void 0||d===void 0)&&Ee(c,this.length-8);let _=this[c+4]+this[c+5]*2**8+this[c+6]*2**16+(d<<24);return(BigInt(_)<>>0,ne(c,"offset");let u=this[c],d=this[c+7];(u===void 0||d===void 0)&&Ee(c,this.length-8);let _=(u<<24)+this[++c]*2**16+this[++c]*2**8+this[++c];return(BigInt(_)<>>0,u||ie(c,4,this.length),i.read(this,c,!0,23,4)},r.prototype.readFloatBE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),i.read(this,c,!1,23,4)},r.prototype.readDoubleLE=function(c,u){return c=c>>>0,u||ie(c,8,this.length),i.read(this,c,!0,52,8)},r.prototype.readDoubleBE=function(c,u){return c=c>>>0,u||ie(c,8,this.length),i.read(this,c,!1,52,8)};function X(c,u,d,_,P,D){if(!r.isBuffer(c))throw new TypeError('"buffer" argument must be a Buffer instance');if(u>P||uc.length)throw new RangeError("Index out of range")}r.prototype.writeUintLE=r.prototype.writeUIntLE=function(c,u,d,_){if(c=+c,u=u>>>0,d=d>>>0,!_){let ce=Math.pow(2,8*d)-1;X(this,c,u,d,ce,0)}let P=1,D=0;for(this[u]=c&255;++D>>0,d=d>>>0,!_){let ce=Math.pow(2,8*d)-1;X(this,c,u,d,ce,0)}let P=d-1,D=1;for(this[u+P]=c&255;--P>=0&&(D*=256);)this[u+P]=c/D&255;return u+d},r.prototype.writeUint8=r.prototype.writeUInt8=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,1,255,0),this[u]=c&255,u+1},r.prototype.writeUint16LE=r.prototype.writeUInt16LE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,2,65535,0),this[u]=c&255,this[u+1]=c>>>8,u+2},r.prototype.writeUint16BE=r.prototype.writeUInt16BE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,2,65535,0),this[u]=c>>>8,this[u+1]=c&255,u+2},r.prototype.writeUint32LE=r.prototype.writeUInt32LE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,4,4294967295,0),this[u+3]=c>>>24,this[u+2]=c>>>16,this[u+1]=c>>>8,this[u]=c&255,u+4},r.prototype.writeUint32BE=r.prototype.writeUInt32BE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,4,4294967295,0),this[u]=c>>>24,this[u+1]=c>>>16,this[u+2]=c>>>8,this[u+3]=c&255,u+4};function O(c,u,d,_,P){ae(u,_,P,c,d,7);let D=Number(u&BigInt(4294967295));c[d++]=D,D=D>>8,c[d++]=D,D=D>>8,c[d++]=D,D=D>>8,c[d++]=D;let ce=Number(u>>BigInt(32)&BigInt(4294967295));return c[d++]=ce,ce=ce>>8,c[d++]=ce,ce=ce>>8,c[d++]=ce,ce=ce>>8,c[d++]=ce,d}function G(c,u,d,_,P){ae(u,_,P,c,d,7);let D=Number(u&BigInt(4294967295));c[d+7]=D,D=D>>8,c[d+6]=D,D=D>>8,c[d+5]=D,D=D>>8,c[d+4]=D;let ce=Number(u>>BigInt(32)&BigInt(4294967295));return c[d+3]=ce,ce=ce>>8,c[d+2]=ce,ce=ce>>8,c[d+1]=ce,ce=ce>>8,c[d]=ce,d+8}r.prototype.writeBigUInt64LE=Z(function(c,u=0){return O(this,c,u,BigInt(0),BigInt("0xffffffffffffffff"))}),r.prototype.writeBigUInt64BE=Z(function(c,u=0){return G(this,c,u,BigInt(0),BigInt("0xffffffffffffffff"))}),r.prototype.writeIntLE=function(c,u,d,_){if(c=+c,u=u>>>0,!_){let Pe=Math.pow(2,8*d-1);X(this,c,u,d,Pe-1,-Pe)}let P=0,D=1,ce=0;for(this[u]=c&255;++P>0)-ce&255;return u+d},r.prototype.writeIntBE=function(c,u,d,_){if(c=+c,u=u>>>0,!_){let Pe=Math.pow(2,8*d-1);X(this,c,u,d,Pe-1,-Pe)}let P=d-1,D=1,ce=0;for(this[u+P]=c&255;--P>=0&&(D*=256);)c<0&&ce===0&&this[u+P+1]!==0&&(ce=1),this[u+P]=(c/D>>0)-ce&255;return u+d},r.prototype.writeInt8=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,1,127,-128),c<0&&(c=255+c+1),this[u]=c&255,u+1},r.prototype.writeInt16LE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,2,32767,-32768),this[u]=c&255,this[u+1]=c>>>8,u+2},r.prototype.writeInt16BE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,2,32767,-32768),this[u]=c>>>8,this[u+1]=c&255,u+2},r.prototype.writeInt32LE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,4,2147483647,-2147483648),this[u]=c&255,this[u+1]=c>>>8,this[u+2]=c>>>16,this[u+3]=c>>>24,u+4},r.prototype.writeInt32BE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,4,2147483647,-2147483648),c<0&&(c=4294967295+c+1),this[u]=c>>>24,this[u+1]=c>>>16,this[u+2]=c>>>8,this[u+3]=c&255,u+4},r.prototype.writeBigInt64LE=Z(function(c,u=0){return O(this,c,u,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),r.prototype.writeBigInt64BE=Z(function(c,u=0){return G(this,c,u,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function ve(c,u,d,_,P,D){if(d+_>c.length)throw new RangeError("Index out of range");if(d<0)throw new RangeError("Index out of range")}function Ce(c,u,d,_,P){return u=+u,d=d>>>0,P||ve(c,u,d,4),i.write(c,u,d,_,23,4),d+4}r.prototype.writeFloatLE=function(c,u,d){return Ce(this,c,u,!0,d)},r.prototype.writeFloatBE=function(c,u,d){return Ce(this,c,u,!1,d)};function le(c,u,d,_,P){return u=+u,d=d>>>0,P||ve(c,u,d,8),i.write(c,u,d,_,52,8),d+8}r.prototype.writeDoubleLE=function(c,u,d){return le(this,c,u,!0,d)},r.prototype.writeDoubleBE=function(c,u,d){return le(this,c,u,!1,d)},r.prototype.copy=function(c,u,d,_){if(!r.isBuffer(c))throw new TypeError("argument should be a Buffer");if(d||(d=0),!_&&_!==0&&(_=this.length),u>=c.length&&(u=c.length),u||(u=0),_>0&&_=this.length)throw new RangeError("Index out of range");if(_<0)throw new RangeError("sourceEnd out of bounds");_>this.length&&(_=this.length),c.length-u<_-d&&(_=c.length-u+d);let P=_-d;return this===c&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(u,d,_):Uint8Array.prototype.set.call(c,this.subarray(d,_),u),P},r.prototype.fill=function(c,u,d,_){if(typeof c=="string"){if(typeof u=="string"?(_=u,u=0,d=this.length):typeof d=="string"&&(_=d,d=this.length),_!==void 0&&typeof _!="string")throw new TypeError("encoding must be a string");if(typeof _=="string"&&!r.isEncoding(_))throw new TypeError("Unknown encoding: "+_);if(c.length===1){let D=c.charCodeAt(0);(_==="utf8"&&D<128||_==="latin1")&&(c=D)}}else typeof c=="number"?c=c&255:typeof c=="boolean"&&(c=Number(c));if(u<0||this.length>>0,d=d===void 0?this.length:d>>>0,c||(c=0);let P;if(typeof c=="number")for(P=u;P2**32?P=Y(String(d)):typeof d=="bigint"&&(P=String(d),(d>BigInt(2)**BigInt(32)||d<-(BigInt(2)**BigInt(32)))&&(P=Y(P)),P+="n"),_+=` It must be ${u}. Received ${P}`,_},RangeError);function Y(c){let u="",d=c.length,_=c[0]==="-"?1:0;for(;d>=_+4;d-=3)u=`_${c.slice(d-3,d)}${u}`;return`${c.slice(0,d)}${u}`}function ge(c,u,d){ne(u,"offset"),(c[u]===void 0||c[u+d]===void 0)&&Ee(u,c.length-(d+1))}function ae(c,u,d,_,P,D){if(c>d||c= 0${ce} and < 2${ce} ** ${(D+1)*8}${ce}`:Pe=`>= -(2${ce} ** ${(D+1)*8-1}${ce}) and < 2 ** ${(D+1)*8-1}${ce}`,new W.ERR_OUT_OF_RANGE("value",Pe,c)}ge(_,P,D)}function ne(c,u){if(typeof c!="number")throw new W.ERR_INVALID_ARG_TYPE(u,"number",c)}function Ee(c,u,d){throw Math.floor(c)!==c?(ne(c,d),new W.ERR_OUT_OF_RANGE("offset","an integer",c)):u<0?new W.ERR_BUFFER_OUT_OF_BOUNDS:new W.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${u}`,c)}let me=/[^+/0-9A-Za-z-_]/g;function x(c){if(c=c.split("=")[0],c=c.trim().replace(me,""),c.length<2)return"";for(;c.length%4!==0;)c=c+"=";return c}function F(c,u){u=u||1/0;let d,_=c.length,P=null,D=[];for(let ce=0;ce<_;++ce){if(d=c.charCodeAt(ce),d>55295&&d<57344){if(!P){if(d>56319){(u-=3)>-1&&D.push(239,191,189);continue}else if(ce+1===_){(u-=3)>-1&&D.push(239,191,189);continue}P=d;continue}if(d<56320){(u-=3)>-1&&D.push(239,191,189),P=d;continue}d=(P-55296<<10|d-56320)+65536}else P&&(u-=3)>-1&&D.push(239,191,189);if(P=null,d<128){if((u-=1)<0)break;D.push(d)}else if(d<2048){if((u-=2)<0)break;D.push(d>>6|192,d&63|128)}else if(d<65536){if((u-=3)<0)break;D.push(d>>12|224,d>>6&63|128,d&63|128)}else if(d<1114112){if((u-=4)<0)break;D.push(d>>18|240,d>>12&63|128,d>>6&63|128,d&63|128)}else throw new Error("Invalid code point")}return D}function $(c){let u=[];for(let d=0;d>8,P=d%256,D.push(P),D.push(_);return D}function ee(c){return e.toByteArray(x(c))}function L(c,u,d,_){let P;for(P=0;P<_&&!(P+d>=u.length||P>=c.length);++P)u[P+d]=c[P];return P}function S(c,u){return c instanceof u||c!=null&&c.constructor!=null&&c.constructor.name!=null&&c.constructor.name===u.name}function j(c){return c!==c}let z=function(){let c="0123456789abcdef",u=new Array(256);for(let d=0;d<16;++d){let _=d*16;for(let P=0;P<16;++P)u[_+P]=c[d]+c[P]}return u}();function Z(c){return typeof BigInt>"u"?oe:c}function oe(){throw new Error("BigInt not supported")}return Nt}var lr,gi,yr,mi,Nt,bi,kt,Wr,Go,Jo,rt=et(()=>{fe(),pe(),de(),lr={},gi=!1,yr={},mi=!1,Nt={},bi=!1,kt=El(),kt.Buffer,kt.SlowBuffer,kt.INSPECT_MAX_BYTES,kt.kMaxLength,Wr=kt.Buffer,Go=kt.INSPECT_MAX_BYTES,Jo=kt.kMaxLength}),pe=et(()=>{rt()}),Sl=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0});var i=class{constructor(t){this.aliasToTopic={},this.max=t}put(t,l){return l===0||l>this.max?!1:(this.aliasToTopic[l]=t,this.length=Object.keys(this.aliasToTopic).length,!0)}getTopicByAlias(t){return this.aliasToTopic[t]}clear(){this.aliasToTopic={}}};e.default=i}),Ye=Se((e,i)=>{fe(),pe(),de(),i.exports={ArrayIsArray(t){return Array.isArray(t)},ArrayPrototypeIncludes(t,l){return t.includes(l)},ArrayPrototypeIndexOf(t,l){return t.indexOf(l)},ArrayPrototypeJoin(t,l){return t.join(l)},ArrayPrototypeMap(t,l){return t.map(l)},ArrayPrototypePop(t,l){return t.pop(l)},ArrayPrototypePush(t,l){return t.push(l)},ArrayPrototypeSlice(t,l,h){return t.slice(l,h)},Error,FunctionPrototypeCall(t,l,...h){return t.call(l,...h)},FunctionPrototypeSymbolHasInstance(t,l){return Function.prototype[Symbol.hasInstance].call(t,l)},MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties(t,l){return Object.defineProperties(t,l)},ObjectDefineProperty(t,l,h){return Object.defineProperty(t,l,h)},ObjectGetOwnPropertyDescriptor(t,l){return Object.getOwnPropertyDescriptor(t,l)},ObjectKeys(t){return Object.keys(t)},ObjectSetPrototypeOf(t,l){return Object.setPrototypeOf(t,l)},Promise,PromisePrototypeCatch(t,l){return t.catch(l)},PromisePrototypeThen(t,l,h){return t.then(l,h)},PromiseReject(t){return Promise.reject(t)},ReflectApply:Reflect.apply,RegExpPrototypeTest(t,l){return t.test(l)},SafeSet:Set,String,StringPrototypeSlice(t,l,h){return t.slice(l,h)},StringPrototypeToLowerCase(t){return t.toLowerCase()},StringPrototypeToUpperCase(t){return t.toUpperCase()},StringPrototypeTrim(t){return t.trim()},Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,TypedArrayPrototypeSet(t,l,h){return t.set(l,h)},Uint8Array}}),Pt=Se((e,i)=>{fe(),pe(),de();var t=(rt(),De(tt)),l=Object.getPrototypeOf(async function(){}).constructor,h=globalThis.Blob||t.Blob,s=typeof h<"u"?function(o){return o instanceof h}:function(o){return!1},r=class extends Error{constructor(o){if(!Array.isArray(o))throw new TypeError(`Expected input to be an Array, got ${typeof o}`);let n="";for(let a=0;a{throw TypeError(e)};var fl=(e,i,t)=>i in e?cl(e,i,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[i]=t;var it=(e,i,t)=>fl(e,typeof i!="symbol"?i+"":i,t),Gr=(e,i,t)=>i.has(e)||Qi("Cannot "+t);var M=(e,i,t)=>(Gr(e,i,"read from private field"),t?t.call(e):i.get(e)),je=(e,i,t)=>i.has(e)?Qi("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(e):i.set(e,t),xe=(e,i,t,l)=>(Gr(e,i,"write to private field"),l?l.call(e,t):i.set(e,t),t),Oe=(e,i,t)=>(Gr(e,i,"access private method"),t);var Ar=(e,i,t,l)=>({set _(h){xe(e,i,h,t)},get _(){return M(e,i,l)}});import{ad as dl,r as Gi,a as be}from"./index-EKspHiQe.js";var Mi=Object.defineProperty,pl=Object.getOwnPropertyDescriptor,gl=Object.getOwnPropertyNames,ml=Object.prototype.hasOwnProperty,et=(e,i)=>()=>(e&&(i=e(e=0)),i),Se=(e,i)=>()=>(i||e((i={exports:{}}).exports,i),i.exports),nr=(e,i)=>{for(var t in i)Mi(e,t,{get:i[t],enumerable:!0})},bl=(e,i,t,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let h of gl(i))!ml.call(e,h)&&h!==t&&Mi(e,h,{get:()=>i[h],enumerable:!(l=pl(i,h))||l.enumerable});return e},De=e=>bl(Mi({},"__esModule",{value:!0}),e),fe=et(()=>{}),Le={};nr(Le,{_debugEnd:()=>Vn,_debugProcess:()=>qn,_events:()=>oi,_eventsCount:()=>si,_exiting:()=>On,_fatalExceptions:()=>Dn,_getActiveHandles:()=>Ho,_getActiveRequests:()=>Vo,_kill:()=>Rn,_linkedBinding:()=>$o,_maxListeners:()=>ii,_preload_modules:()=>ri,_rawDebug:()=>Cn,_startProfilerIdleNotifier:()=>Hn,_stopProfilerIdleNotifier:()=>zn,_tickCallback:()=>$n,abort:()=>Gn,addListener:()=>ai,allowedNodeEnvironmentFlags:()=>Nn,arch:()=>dn,argv:()=>mn,argv0:()=>ti,assert:()=>zo,binding:()=>_n,chdir:()=>An,config:()=>Bn,cpuUsage:()=>br,cwd:()=>Sn,debugPort:()=>ei,default:()=>Ui,dlopen:()=>qo,domain:()=>Tn,emit:()=>fi,emitWarning:()=>wn,env:()=>gn,execArgv:()=>bn,execPath:()=>Xn,exit:()=>Un,features:()=>Wn,hasUncaughtExceptionCaptureCallback:()=>Ko,hrtime:()=>Pr,kill:()=>jn,listeners:()=>Qo,memoryUsage:()=>Mn,moduleLoadList:()=>In,nextTick:()=>Do,off:()=>ui,on:()=>At,once:()=>li,openStdin:()=>Ln,pid:()=>Jn,platform:()=>pn,ppid:()=>Zn,prependListener:()=>di,prependOnceListener:()=>pi,reallyExit:()=>Pn,release:()=>kn,removeAllListeners:()=>ci,removeListener:()=>hi,resourceUsage:()=>xn,setSourceMapsEnabled:()=>ni,setUncaughtExceptionCaptureCallback:()=>Fn,stderr:()=>Yn,stdin:()=>Qn,stdout:()=>Kn,title:()=>fn,umask:()=>En,uptime:()=>Yo,version:()=>yn,versions:()=>vn});function ji(e){throw new Error("Node.js process "+e+" is not supported by JSPM core outside of Node.js")}function yl(){!er||!Zt||(er=!1,Zt.length?_t=Zt.concat(_t):wr=-1,_t.length&&Wo())}function Wo(){if(!er){var e=setTimeout(yl,0);er=!0;for(var i=_t.length;i;){for(Zt=_t,_t=[];++wr1)for(var t=1;t{fe(),pe(),de(),_t=[],er=!1,wr=-1,Fo.prototype.run=function(){this.fun.apply(null,this.array)},fn="browser",dn="x64",pn="browser",gn={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},mn=["/usr/bin/node"],bn=[],yn="v16.8.0",vn={},wn=function(e,i){console.warn((i?i+": ":"")+e)},_n=function(e){ji("binding")},En=function(e){return 0},Sn=function(){return"/"},An=function(e){},kn={name:"node",sourceUrl:"",headersUrl:"",libUrl:""},Cn=ot,In=[],Tn={},On=!1,Bn={},Pn=ot,Rn=ot,br=function(){return{}},xn=br,Mn=br,jn=ot,Un=ot,Ln=ot,Nn={},Wn={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},Dn=ot,Fn=ot,$n=ot,qn=ot,Vn=ot,Hn=ot,zn=ot,Kn=void 0,Yn=void 0,Qn=void 0,Gn=ot,Jn=2,Zn=1,Xn="/bin/usr/node",ei=9229,ti="node",ri=[],ni=ot,Tt={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0},Tt.now===void 0&&(Jr=Date.now(),Tt.timing&&Tt.timing.navigationStart&&(Jr=Tt.timing.navigationStart),Tt.now=()=>Date.now()-Jr),Rr=1e9,Pr.bigint=function(e){var i=Pr(e);return typeof BigInt>"u"?i[0]*Rr+i[1]:BigInt(i[0]*Rr)+BigInt(i[1])},ii=10,oi={},si=0,ai=At,li=At,ui=At,hi=At,ci=At,fi=ot,di=At,pi=At,Ui={version:yn,versions:vn,arch:dn,platform:pn,release:kn,_rawDebug:Cn,moduleLoadList:In,binding:_n,_linkedBinding:$o,_events:oi,_eventsCount:si,_maxListeners:ii,on:At,addListener:ai,once:li,off:ui,removeListener:hi,removeAllListeners:ci,emit:fi,prependListener:di,prependOnceListener:pi,listeners:Qo,domain:Tn,_exiting:On,config:Bn,dlopen:qo,uptime:Yo,_getActiveRequests:Vo,_getActiveHandles:Ho,reallyExit:Pn,_kill:Rn,cpuUsage:br,resourceUsage:xn,memoryUsage:Mn,kill:jn,exit:Un,openStdin:Ln,allowedNodeEnvironmentFlags:Nn,assert:zo,features:Wn,_fatalExceptions:Dn,setUncaughtExceptionCaptureCallback:Fn,hasUncaughtExceptionCaptureCallback:Ko,emitWarning:wn,nextTick:Do,_tickCallback:$n,_debugProcess:qn,_debugEnd:Vn,_startProfilerIdleNotifier:Hn,_stopProfilerIdleNotifier:zn,stdout:Kn,stdin:Qn,stderr:Yn,abort:Gn,umask:En,chdir:An,cwd:Sn,env:gn,title:fn,argv:mn,execArgv:bn,pid:Jn,ppid:Zn,execPath:Xn,debugPort:ei,hrtime:Pr,argv0:ti,_preload_modules:ri,setSourceMapsEnabled:ni}}),de=et(()=>{vl()}),tt={};nr(tt,{Buffer:()=>Wr,INSPECT_MAX_BYTES:()=>Go,default:()=>kt,kMaxLength:()=>Jo});function wl(){if(gi)return lr;gi=!0,lr.byteLength=o,lr.toByteArray=a,lr.fromByteArray=g;for(var e=[],i=[],t=typeof Uint8Array<"u"?Uint8Array:Array,l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,s=l.length;h0)throw new Error("Invalid string. Length must be a multiple of 4");var v=m.indexOf("=");v===-1&&(v=b);var k=v===b?0:4-v%4;return[v,k]}function o(m){var b=r(m),v=b[0],k=b[1];return(v+k)*3/4-k}function n(m,b,v){return(b+v)*3/4-v}function a(m){var b,v=r(m),k=v[0],N=v[1],B=new t(n(m,k,N)),w=0,U=N>0?k-4:k,q;for(q=0;q>16&255,B[w++]=b>>8&255,B[w++]=b&255;return N===2&&(b=i[m.charCodeAt(q)]<<2|i[m.charCodeAt(q+1)]>>4,B[w++]=b&255),N===1&&(b=i[m.charCodeAt(q)]<<10|i[m.charCodeAt(q+1)]<<4|i[m.charCodeAt(q+2)]>>2,B[w++]=b>>8&255,B[w++]=b&255),B}function f(m){return e[m>>18&63]+e[m>>12&63]+e[m>>6&63]+e[m&63]}function p(m,b,v){for(var k,N=[],B=b;BU?U:w+B));return k===1?(b=m[v-1],N.push(e[b>>2]+e[b<<4&63]+"==")):k===2&&(b=(m[v-2]<<8)+m[v-1],N.push(e[b>>10]+e[b>>4&63]+e[b<<2&63]+"=")),N.join("")}return lr}function _l(){return mi?yr:(mi=!0,yr.read=function(e,i,t,l,h){var s,r,o=h*8-l-1,n=(1<>1,f=-7,p=t?h-1:0,g=t?-1:1,m=e[i+p];for(p+=g,s=m&(1<<-f)-1,m>>=-f,f+=o;f>0;s=s*256+e[i+p],p+=g,f-=8);for(r=s&(1<<-f)-1,s>>=-f,f+=l;f>0;r=r*256+e[i+p],p+=g,f-=8);if(s===0)s=1-a;else{if(s===n)return r?NaN:(m?-1:1)*(1/0);r=r+Math.pow(2,l),s=s-a}return(m?-1:1)*r*Math.pow(2,s-l)},yr.write=function(e,i,t,l,h,s){var r,o,n,a=s*8-h-1,f=(1<>1,g=h===23?Math.pow(2,-24)-Math.pow(2,-77):0,m=l?0:s-1,b=l?1:-1,v=i<0||i===0&&1/i<0?1:0;for(i=Math.abs(i),isNaN(i)||i===1/0?(o=isNaN(i)?1:0,r=f):(r=Math.floor(Math.log(i)/Math.LN2),i*(n=Math.pow(2,-r))<1&&(r--,n*=2),r+p>=1?i+=g/n:i+=g*Math.pow(2,1-p),i*n>=2&&(r++,n/=2),r+p>=f?(o=0,r=f):r+p>=1?(o=(i*n-1)*Math.pow(2,h),r=r+p):(o=i*Math.pow(2,p-1)*Math.pow(2,h),r=0));h>=8;e[t+m]=o&255,m+=b,o/=256,h-=8);for(r=r<0;e[t+m]=r&255,m+=b,r/=256,a-=8);e[t+m-b]|=v*128},yr)}function El(){if(bi)return Nt;bi=!0;let e=wl(),i=_l(),t=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Nt.Buffer=r,Nt.SlowBuffer=N,Nt.INSPECT_MAX_BYTES=50;let l=2147483647;Nt.kMaxLength=l,r.TYPED_ARRAY_SUPPORT=h(),!r.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function h(){try{let c=new Uint8Array(1),u={foo:function(){return 42}};return Object.setPrototypeOf(u,Uint8Array.prototype),Object.setPrototypeOf(c,u),c.foo()===42}catch{return!1}}Object.defineProperty(r.prototype,"parent",{enumerable:!0,get:function(){if(r.isBuffer(this))return this.buffer}}),Object.defineProperty(r.prototype,"offset",{enumerable:!0,get:function(){if(r.isBuffer(this))return this.byteOffset}});function s(c){if(c>l)throw new RangeError('The value "'+c+'" is invalid for option "size"');let u=new Uint8Array(c);return Object.setPrototypeOf(u,r.prototype),u}function r(c,u,d){if(typeof c=="number"){if(typeof u=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return f(c)}return o(c,u,d)}r.poolSize=8192;function o(c,u,d){if(typeof c=="string")return p(c,u);if(ArrayBuffer.isView(c))return m(c);if(c==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof c);if(S(c,ArrayBuffer)||c&&S(c.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(S(c,SharedArrayBuffer)||c&&S(c.buffer,SharedArrayBuffer)))return b(c,u,d);if(typeof c=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let _=c.valueOf&&c.valueOf();if(_!=null&&_!==c)return r.from(_,u,d);let P=v(c);if(P)return P;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof c[Symbol.toPrimitive]=="function")return r.from(c[Symbol.toPrimitive]("string"),u,d);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof c)}r.from=function(c,u,d){return o(c,u,d)},Object.setPrototypeOf(r.prototype,Uint8Array.prototype),Object.setPrototypeOf(r,Uint8Array);function n(c){if(typeof c!="number")throw new TypeError('"size" argument must be of type number');if(c<0)throw new RangeError('The value "'+c+'" is invalid for option "size"')}function a(c,u,d){return n(c),c<=0?s(c):u!==void 0?typeof d=="string"?s(c).fill(u,d):s(c).fill(u):s(c)}r.alloc=function(c,u,d){return a(c,u,d)};function f(c){return n(c),s(c<0?0:k(c)|0)}r.allocUnsafe=function(c){return f(c)},r.allocUnsafeSlow=function(c){return f(c)};function p(c,u){if((typeof u!="string"||u==="")&&(u="utf8"),!r.isEncoding(u))throw new TypeError("Unknown encoding: "+u);let d=B(c,u)|0,_=s(d),P=_.write(c,u);return P!==d&&(_=_.slice(0,P)),_}function g(c){let u=c.length<0?0:k(c.length)|0,d=s(u);for(let _=0;_=l)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+l.toString(16)+" bytes");return c|0}function N(c){return+c!=c&&(c=0),r.alloc(+c)}r.isBuffer=function(c){return c!=null&&c._isBuffer===!0&&c!==r.prototype},r.compare=function(c,u){if(S(c,Uint8Array)&&(c=r.from(c,c.offset,c.byteLength)),S(u,Uint8Array)&&(u=r.from(u,u.offset,u.byteLength)),!r.isBuffer(c)||!r.isBuffer(u))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(c===u)return 0;let d=c.length,_=u.length;for(let P=0,D=Math.min(d,_);P_.length?(r.isBuffer(D)||(D=r.from(D)),D.copy(_,P)):Uint8Array.prototype.set.call(_,D,P);else if(r.isBuffer(D))D.copy(_,P);else throw new TypeError('"list" argument must be an Array of Buffers');P+=D.length}return _};function B(c,u){if(r.isBuffer(c))return c.length;if(ArrayBuffer.isView(c)||S(c,ArrayBuffer))return c.byteLength;if(typeof c!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof c);let d=c.length,_=arguments.length>2&&arguments[2]===!0;if(!_&&d===0)return 0;let P=!1;for(;;)switch(u){case"ascii":case"latin1":case"binary":return d;case"utf8":case"utf-8":return F(c).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return d*2;case"hex":return d>>>1;case"base64":return ee(c).length;default:if(P)return _?-1:F(c).length;u=(""+u).toLowerCase(),P=!0}}r.byteLength=B;function w(c,u,d){let _=!1;if((u===void 0||u<0)&&(u=0),u>this.length||((d===void 0||d>this.length)&&(d=this.length),d<=0)||(d>>>=0,u>>>=0,d<=u))return"";for(c||(c="utf8");;)switch(c){case"hex":return V(this,u,d);case"utf8":case"utf-8":return K(this,u,d);case"ascii":return _e(this,u,d);case"latin1":case"binary":return he(this,u,d);case"base64":return T(this,u,d);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ae(this,u,d);default:if(_)throw new TypeError("Unknown encoding: "+c);c=(c+"").toLowerCase(),_=!0}}r.prototype._isBuffer=!0;function U(c,u,d){let _=c[u];c[u]=c[d],c[d]=_}r.prototype.swap16=function(){let c=this.length;if(c%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let u=0;uu&&(c+=" ... "),""},t&&(r.prototype[t]=r.prototype.inspect),r.prototype.compare=function(c,u,d,_,P){if(S(c,Uint8Array)&&(c=r.from(c,c.offset,c.byteLength)),!r.isBuffer(c))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof c);if(u===void 0&&(u=0),d===void 0&&(d=c?c.length:0),_===void 0&&(_=0),P===void 0&&(P=this.length),u<0||d>c.length||_<0||P>this.length)throw new RangeError("out of range index");if(_>=P&&u>=d)return 0;if(_>=P)return-1;if(u>=d)return 1;if(u>>>=0,d>>>=0,_>>>=0,P>>>=0,this===c)return 0;let D=P-_,ce=d-u,Pe=Math.min(D,ce),Me=this.slice(_,P),Ie=c.slice(u,d);for(let Te=0;Te2147483647?d=2147483647:d<-2147483648&&(d=-2147483648),d=+d,j(d)&&(d=P?0:c.length-1),d<0&&(d=c.length+d),d>=c.length){if(P)return-1;d=c.length-1}else if(d<0)if(P)d=0;else return-1;if(typeof u=="string"&&(u=r.from(u,_)),r.isBuffer(u))return u.length===0?-1:I(c,u,d,_,P);if(typeof u=="number")return u=u&255,typeof Uint8Array.prototype.indexOf=="function"?P?Uint8Array.prototype.indexOf.call(c,u,d):Uint8Array.prototype.lastIndexOf.call(c,u,d):I(c,[u],d,_,P);throw new TypeError("val must be string, number or Buffer")}function I(c,u,d,_,P){let D=1,ce=c.length,Pe=u.length;if(_!==void 0&&(_=String(_).toLowerCase(),_==="ucs2"||_==="ucs-2"||_==="utf16le"||_==="utf-16le")){if(c.length<2||u.length<2)return-1;D=2,ce/=2,Pe/=2,d/=2}function Me(Te,Be){return D===1?Te[Be]:Te.readUInt16BE(Be*D)}let Ie;if(P){let Te=-1;for(Ie=d;Iece&&(d=ce-Pe),Ie=d;Ie>=0;Ie--){let Te=!0;for(let Be=0;BeP&&(_=P)):_=P;let D=u.length;_>D/2&&(_=D/2);let ce;for(ce=0;ce<_;++ce){let Pe=parseInt(u.substr(ce*2,2),16);if(j(Pe))return ce;c[d+ce]=Pe}return ce}function R(c,u,d,_){return L(F(u,c.length-d),c,d,_)}function Q(c,u,d,_){return L($(u),c,d,_)}function te(c,u,d,_){return L(ee(u),c,d,_)}function se(c,u,d,_){return L(ue(u,c.length-d),c,d,_)}r.prototype.write=function(c,u,d,_){if(u===void 0)_="utf8",d=this.length,u=0;else if(d===void 0&&typeof u=="string")_=u,d=this.length,u=0;else if(isFinite(u))u=u>>>0,isFinite(d)?(d=d>>>0,_===void 0&&(_="utf8")):(_=d,d=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let P=this.length-u;if((d===void 0||d>P)&&(d=P),c.length>0&&(d<0||u<0)||u>this.length)throw new RangeError("Attempt to write outside buffer bounds");_||(_="utf8");let D=!1;for(;;)switch(_){case"hex":return C(this,c,u,d);case"utf8":case"utf-8":return R(this,c,u,d);case"ascii":case"latin1":case"binary":return Q(this,c,u,d);case"base64":return te(this,c,u,d);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return se(this,c,u,d);default:if(D)throw new TypeError("Unknown encoding: "+_);_=(""+_).toLowerCase(),D=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(c,u,d){return u===0&&d===c.length?e.fromByteArray(c):e.fromByteArray(c.slice(u,d))}function K(c,u,d){d=Math.min(c.length,d);let _=[],P=u;for(;P239?4:D>223?3:D>191?2:1;if(P+Pe<=d){let Me,Ie,Te,Be;switch(Pe){case 1:D<128&&(ce=D);break;case 2:Me=c[P+1],(Me&192)===128&&(Be=(D&31)<<6|Me&63,Be>127&&(ce=Be));break;case 3:Me=c[P+1],Ie=c[P+2],(Me&192)===128&&(Ie&192)===128&&(Be=(D&15)<<12|(Me&63)<<6|Ie&63,Be>2047&&(Be<55296||Be>57343)&&(ce=Be));break;case 4:Me=c[P+1],Ie=c[P+2],Te=c[P+3],(Me&192)===128&&(Ie&192)===128&&(Te&192)===128&&(Be=(D&15)<<18|(Me&63)<<12|(Ie&63)<<6|Te&63,Be>65535&&Be<1114112&&(ce=Be))}}ce===null?(ce=65533,Pe=1):ce>65535&&(ce-=65536,_.push(ce>>>10&1023|55296),ce=56320|ce&1023),_.push(ce),P+=Pe}return J(_)}let re=4096;function J(c){let u=c.length;if(u<=re)return String.fromCharCode.apply(String,c);let d="",_=0;for(;__)&&(d=_);let P="";for(let D=u;Dd&&(c=d),u<0?(u+=d,u<0&&(u=0)):u>d&&(u=d),ud)throw new RangeError("Trying to access beyond buffer length")}r.prototype.readUintLE=r.prototype.readUIntLE=function(c,u,d){c=c>>>0,u=u>>>0,d||ie(c,u,this.length);let _=this[c],P=1,D=0;for(;++D>>0,u=u>>>0,d||ie(c,u,this.length);let _=this[c+--u],P=1;for(;u>0&&(P*=256);)_+=this[c+--u]*P;return _},r.prototype.readUint8=r.prototype.readUInt8=function(c,u){return c=c>>>0,u||ie(c,1,this.length),this[c]},r.prototype.readUint16LE=r.prototype.readUInt16LE=function(c,u){return c=c>>>0,u||ie(c,2,this.length),this[c]|this[c+1]<<8},r.prototype.readUint16BE=r.prototype.readUInt16BE=function(c,u){return c=c>>>0,u||ie(c,2,this.length),this[c]<<8|this[c+1]},r.prototype.readUint32LE=r.prototype.readUInt32LE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),(this[c]|this[c+1]<<8|this[c+2]<<16)+this[c+3]*16777216},r.prototype.readUint32BE=r.prototype.readUInt32BE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),this[c]*16777216+(this[c+1]<<16|this[c+2]<<8|this[c+3])},r.prototype.readBigUInt64LE=Z(function(c){c=c>>>0,ne(c,"offset");let u=this[c],d=this[c+7];(u===void 0||d===void 0)&&Ee(c,this.length-8);let _=u+this[++c]*2**8+this[++c]*2**16+this[++c]*2**24,P=this[++c]+this[++c]*2**8+this[++c]*2**16+d*2**24;return BigInt(_)+(BigInt(P)<>>0,ne(c,"offset");let u=this[c],d=this[c+7];(u===void 0||d===void 0)&&Ee(c,this.length-8);let _=u*2**24+this[++c]*2**16+this[++c]*2**8+this[++c],P=this[++c]*2**24+this[++c]*2**16+this[++c]*2**8+d;return(BigInt(_)<>>0,u=u>>>0,d||ie(c,u,this.length);let _=this[c],P=1,D=0;for(;++D=P&&(_-=Math.pow(2,8*u)),_},r.prototype.readIntBE=function(c,u,d){c=c>>>0,u=u>>>0,d||ie(c,u,this.length);let _=u,P=1,D=this[c+--_];for(;_>0&&(P*=256);)D+=this[c+--_]*P;return P*=128,D>=P&&(D-=Math.pow(2,8*u)),D},r.prototype.readInt8=function(c,u){return c=c>>>0,u||ie(c,1,this.length),this[c]&128?(255-this[c]+1)*-1:this[c]},r.prototype.readInt16LE=function(c,u){c=c>>>0,u||ie(c,2,this.length);let d=this[c]|this[c+1]<<8;return d&32768?d|4294901760:d},r.prototype.readInt16BE=function(c,u){c=c>>>0,u||ie(c,2,this.length);let d=this[c+1]|this[c]<<8;return d&32768?d|4294901760:d},r.prototype.readInt32LE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),this[c]|this[c+1]<<8|this[c+2]<<16|this[c+3]<<24},r.prototype.readInt32BE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),this[c]<<24|this[c+1]<<16|this[c+2]<<8|this[c+3]},r.prototype.readBigInt64LE=Z(function(c){c=c>>>0,ne(c,"offset");let u=this[c],d=this[c+7];(u===void 0||d===void 0)&&Ee(c,this.length-8);let _=this[c+4]+this[c+5]*2**8+this[c+6]*2**16+(d<<24);return(BigInt(_)<>>0,ne(c,"offset");let u=this[c],d=this[c+7];(u===void 0||d===void 0)&&Ee(c,this.length-8);let _=(u<<24)+this[++c]*2**16+this[++c]*2**8+this[++c];return(BigInt(_)<>>0,u||ie(c,4,this.length),i.read(this,c,!0,23,4)},r.prototype.readFloatBE=function(c,u){return c=c>>>0,u||ie(c,4,this.length),i.read(this,c,!1,23,4)},r.prototype.readDoubleLE=function(c,u){return c=c>>>0,u||ie(c,8,this.length),i.read(this,c,!0,52,8)},r.prototype.readDoubleBE=function(c,u){return c=c>>>0,u||ie(c,8,this.length),i.read(this,c,!1,52,8)};function X(c,u,d,_,P,D){if(!r.isBuffer(c))throw new TypeError('"buffer" argument must be a Buffer instance');if(u>P||uc.length)throw new RangeError("Index out of range")}r.prototype.writeUintLE=r.prototype.writeUIntLE=function(c,u,d,_){if(c=+c,u=u>>>0,d=d>>>0,!_){let ce=Math.pow(2,8*d)-1;X(this,c,u,d,ce,0)}let P=1,D=0;for(this[u]=c&255;++D>>0,d=d>>>0,!_){let ce=Math.pow(2,8*d)-1;X(this,c,u,d,ce,0)}let P=d-1,D=1;for(this[u+P]=c&255;--P>=0&&(D*=256);)this[u+P]=c/D&255;return u+d},r.prototype.writeUint8=r.prototype.writeUInt8=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,1,255,0),this[u]=c&255,u+1},r.prototype.writeUint16LE=r.prototype.writeUInt16LE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,2,65535,0),this[u]=c&255,this[u+1]=c>>>8,u+2},r.prototype.writeUint16BE=r.prototype.writeUInt16BE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,2,65535,0),this[u]=c>>>8,this[u+1]=c&255,u+2},r.prototype.writeUint32LE=r.prototype.writeUInt32LE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,4,4294967295,0),this[u+3]=c>>>24,this[u+2]=c>>>16,this[u+1]=c>>>8,this[u]=c&255,u+4},r.prototype.writeUint32BE=r.prototype.writeUInt32BE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,4,4294967295,0),this[u]=c>>>24,this[u+1]=c>>>16,this[u+2]=c>>>8,this[u+3]=c&255,u+4};function O(c,u,d,_,P){ae(u,_,P,c,d,7);let D=Number(u&BigInt(4294967295));c[d++]=D,D=D>>8,c[d++]=D,D=D>>8,c[d++]=D,D=D>>8,c[d++]=D;let ce=Number(u>>BigInt(32)&BigInt(4294967295));return c[d++]=ce,ce=ce>>8,c[d++]=ce,ce=ce>>8,c[d++]=ce,ce=ce>>8,c[d++]=ce,d}function G(c,u,d,_,P){ae(u,_,P,c,d,7);let D=Number(u&BigInt(4294967295));c[d+7]=D,D=D>>8,c[d+6]=D,D=D>>8,c[d+5]=D,D=D>>8,c[d+4]=D;let ce=Number(u>>BigInt(32)&BigInt(4294967295));return c[d+3]=ce,ce=ce>>8,c[d+2]=ce,ce=ce>>8,c[d+1]=ce,ce=ce>>8,c[d]=ce,d+8}r.prototype.writeBigUInt64LE=Z(function(c,u=0){return O(this,c,u,BigInt(0),BigInt("0xffffffffffffffff"))}),r.prototype.writeBigUInt64BE=Z(function(c,u=0){return G(this,c,u,BigInt(0),BigInt("0xffffffffffffffff"))}),r.prototype.writeIntLE=function(c,u,d,_){if(c=+c,u=u>>>0,!_){let Pe=Math.pow(2,8*d-1);X(this,c,u,d,Pe-1,-Pe)}let P=0,D=1,ce=0;for(this[u]=c&255;++P>0)-ce&255;return u+d},r.prototype.writeIntBE=function(c,u,d,_){if(c=+c,u=u>>>0,!_){let Pe=Math.pow(2,8*d-1);X(this,c,u,d,Pe-1,-Pe)}let P=d-1,D=1,ce=0;for(this[u+P]=c&255;--P>=0&&(D*=256);)c<0&&ce===0&&this[u+P+1]!==0&&(ce=1),this[u+P]=(c/D>>0)-ce&255;return u+d},r.prototype.writeInt8=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,1,127,-128),c<0&&(c=255+c+1),this[u]=c&255,u+1},r.prototype.writeInt16LE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,2,32767,-32768),this[u]=c&255,this[u+1]=c>>>8,u+2},r.prototype.writeInt16BE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,2,32767,-32768),this[u]=c>>>8,this[u+1]=c&255,u+2},r.prototype.writeInt32LE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,4,2147483647,-2147483648),this[u]=c&255,this[u+1]=c>>>8,this[u+2]=c>>>16,this[u+3]=c>>>24,u+4},r.prototype.writeInt32BE=function(c,u,d){return c=+c,u=u>>>0,d||X(this,c,u,4,2147483647,-2147483648),c<0&&(c=4294967295+c+1),this[u]=c>>>24,this[u+1]=c>>>16,this[u+2]=c>>>8,this[u+3]=c&255,u+4},r.prototype.writeBigInt64LE=Z(function(c,u=0){return O(this,c,u,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),r.prototype.writeBigInt64BE=Z(function(c,u=0){return G(this,c,u,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function ve(c,u,d,_,P,D){if(d+_>c.length)throw new RangeError("Index out of range");if(d<0)throw new RangeError("Index out of range")}function Ce(c,u,d,_,P){return u=+u,d=d>>>0,P||ve(c,u,d,4),i.write(c,u,d,_,23,4),d+4}r.prototype.writeFloatLE=function(c,u,d){return Ce(this,c,u,!0,d)},r.prototype.writeFloatBE=function(c,u,d){return Ce(this,c,u,!1,d)};function le(c,u,d,_,P){return u=+u,d=d>>>0,P||ve(c,u,d,8),i.write(c,u,d,_,52,8),d+8}r.prototype.writeDoubleLE=function(c,u,d){return le(this,c,u,!0,d)},r.prototype.writeDoubleBE=function(c,u,d){return le(this,c,u,!1,d)},r.prototype.copy=function(c,u,d,_){if(!r.isBuffer(c))throw new TypeError("argument should be a Buffer");if(d||(d=0),!_&&_!==0&&(_=this.length),u>=c.length&&(u=c.length),u||(u=0),_>0&&_=this.length)throw new RangeError("Index out of range");if(_<0)throw new RangeError("sourceEnd out of bounds");_>this.length&&(_=this.length),c.length-u<_-d&&(_=c.length-u+d);let P=_-d;return this===c&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(u,d,_):Uint8Array.prototype.set.call(c,this.subarray(d,_),u),P},r.prototype.fill=function(c,u,d,_){if(typeof c=="string"){if(typeof u=="string"?(_=u,u=0,d=this.length):typeof d=="string"&&(_=d,d=this.length),_!==void 0&&typeof _!="string")throw new TypeError("encoding must be a string");if(typeof _=="string"&&!r.isEncoding(_))throw new TypeError("Unknown encoding: "+_);if(c.length===1){let D=c.charCodeAt(0);(_==="utf8"&&D<128||_==="latin1")&&(c=D)}}else typeof c=="number"?c=c&255:typeof c=="boolean"&&(c=Number(c));if(u<0||this.length>>0,d=d===void 0?this.length:d>>>0,c||(c=0);let P;if(typeof c=="number")for(P=u;P2**32?P=Y(String(d)):typeof d=="bigint"&&(P=String(d),(d>BigInt(2)**BigInt(32)||d<-(BigInt(2)**BigInt(32)))&&(P=Y(P)),P+="n"),_+=` It must be ${u}. Received ${P}`,_},RangeError);function Y(c){let u="",d=c.length,_=c[0]==="-"?1:0;for(;d>=_+4;d-=3)u=`_${c.slice(d-3,d)}${u}`;return`${c.slice(0,d)}${u}`}function ge(c,u,d){ne(u,"offset"),(c[u]===void 0||c[u+d]===void 0)&&Ee(u,c.length-(d+1))}function ae(c,u,d,_,P,D){if(c>d||c= 0${ce} and < 2${ce} ** ${(D+1)*8}${ce}`:Pe=`>= -(2${ce} ** ${(D+1)*8-1}${ce}) and < 2 ** ${(D+1)*8-1}${ce}`,new W.ERR_OUT_OF_RANGE("value",Pe,c)}ge(_,P,D)}function ne(c,u){if(typeof c!="number")throw new W.ERR_INVALID_ARG_TYPE(u,"number",c)}function Ee(c,u,d){throw Math.floor(c)!==c?(ne(c,d),new W.ERR_OUT_OF_RANGE("offset","an integer",c)):u<0?new W.ERR_BUFFER_OUT_OF_BOUNDS:new W.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${u}`,c)}let me=/[^+/0-9A-Za-z-_]/g;function x(c){if(c=c.split("=")[0],c=c.trim().replace(me,""),c.length<2)return"";for(;c.length%4!==0;)c=c+"=";return c}function F(c,u){u=u||1/0;let d,_=c.length,P=null,D=[];for(let ce=0;ce<_;++ce){if(d=c.charCodeAt(ce),d>55295&&d<57344){if(!P){if(d>56319){(u-=3)>-1&&D.push(239,191,189);continue}else if(ce+1===_){(u-=3)>-1&&D.push(239,191,189);continue}P=d;continue}if(d<56320){(u-=3)>-1&&D.push(239,191,189),P=d;continue}d=(P-55296<<10|d-56320)+65536}else P&&(u-=3)>-1&&D.push(239,191,189);if(P=null,d<128){if((u-=1)<0)break;D.push(d)}else if(d<2048){if((u-=2)<0)break;D.push(d>>6|192,d&63|128)}else if(d<65536){if((u-=3)<0)break;D.push(d>>12|224,d>>6&63|128,d&63|128)}else if(d<1114112){if((u-=4)<0)break;D.push(d>>18|240,d>>12&63|128,d>>6&63|128,d&63|128)}else throw new Error("Invalid code point")}return D}function $(c){let u=[];for(let d=0;d>8,P=d%256,D.push(P),D.push(_);return D}function ee(c){return e.toByteArray(x(c))}function L(c,u,d,_){let P;for(P=0;P<_&&!(P+d>=u.length||P>=c.length);++P)u[P+d]=c[P];return P}function S(c,u){return c instanceof u||c!=null&&c.constructor!=null&&c.constructor.name!=null&&c.constructor.name===u.name}function j(c){return c!==c}let z=function(){let c="0123456789abcdef",u=new Array(256);for(let d=0;d<16;++d){let _=d*16;for(let P=0;P<16;++P)u[_+P]=c[d]+c[P]}return u}();function Z(c){return typeof BigInt>"u"?oe:c}function oe(){throw new Error("BigInt not supported")}return Nt}var lr,gi,yr,mi,Nt,bi,kt,Wr,Go,Jo,rt=et(()=>{fe(),pe(),de(),lr={},gi=!1,yr={},mi=!1,Nt={},bi=!1,kt=El(),kt.Buffer,kt.SlowBuffer,kt.INSPECT_MAX_BYTES,kt.kMaxLength,Wr=kt.Buffer,Go=kt.INSPECT_MAX_BYTES,Jo=kt.kMaxLength}),pe=et(()=>{rt()}),Sl=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0});var i=class{constructor(t){this.aliasToTopic={},this.max=t}put(t,l){return l===0||l>this.max?!1:(this.aliasToTopic[l]=t,this.length=Object.keys(this.aliasToTopic).length,!0)}getTopicByAlias(t){return this.aliasToTopic[t]}clear(){this.aliasToTopic={}}};e.default=i}),Ye=Se((e,i)=>{fe(),pe(),de(),i.exports={ArrayIsArray(t){return Array.isArray(t)},ArrayPrototypeIncludes(t,l){return t.includes(l)},ArrayPrototypeIndexOf(t,l){return t.indexOf(l)},ArrayPrototypeJoin(t,l){return t.join(l)},ArrayPrototypeMap(t,l){return t.map(l)},ArrayPrototypePop(t,l){return t.pop(l)},ArrayPrototypePush(t,l){return t.push(l)},ArrayPrototypeSlice(t,l,h){return t.slice(l,h)},Error,FunctionPrototypeCall(t,l,...h){return t.call(l,...h)},FunctionPrototypeSymbolHasInstance(t,l){return Function.prototype[Symbol.hasInstance].call(t,l)},MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties(t,l){return Object.defineProperties(t,l)},ObjectDefineProperty(t,l,h){return Object.defineProperty(t,l,h)},ObjectGetOwnPropertyDescriptor(t,l){return Object.getOwnPropertyDescriptor(t,l)},ObjectKeys(t){return Object.keys(t)},ObjectSetPrototypeOf(t,l){return Object.setPrototypeOf(t,l)},Promise,PromisePrototypeCatch(t,l){return t.catch(l)},PromisePrototypeThen(t,l,h){return t.then(l,h)},PromiseReject(t){return Promise.reject(t)},ReflectApply:Reflect.apply,RegExpPrototypeTest(t,l){return t.test(l)},SafeSet:Set,String,StringPrototypeSlice(t,l,h){return t.slice(l,h)},StringPrototypeToLowerCase(t){return t.toLowerCase()},StringPrototypeToUpperCase(t){return t.toUpperCase()},StringPrototypeTrim(t){return t.trim()},Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,TypedArrayPrototypeSet(t,l,h){return t.set(l,h)},Uint8Array}}),Pt=Se((e,i)=>{fe(),pe(),de();var t=(rt(),De(tt)),l=Object.getPrototypeOf(async function(){}).constructor,h=globalThis.Blob||t.Blob,s=typeof h<"u"?function(o){return o instanceof h}:function(o){return!1},r=class extends Error{constructor(o){if(!Array.isArray(o))throw new TypeError(`Expected input to be an Array, got ${typeof o}`);let n="";for(let a=0;a{o=a,n=f}),resolve:o,reject:n}},promisify(o){return new Promise((n,a)=>{o((f,...p)=>f?a(f):n(...p))})},debuglog(){return function(){}},format(o,...n){return o.replace(/%([sdifj])/g,function(...[a,f]){let p=n.shift();return f==="f"?p.toFixed(6):f==="j"?JSON.stringify(p):f==="s"&&typeof p=="object"?`${p.constructor!==Object?p.constructor.name:""} {}`.trim():p.toString()})},inspect(o){switch(typeof o){case"string":if(o.includes("'"))if(o.includes('"')){if(!o.includes("`")&&!o.includes("${"))return`\`${o}\``}else return`"${o}"`;return`'${o}'`;case"number":return isNaN(o)?"NaN":Object.is(o,-0)?String(o):o;case"bigint":return`${String(o)}n`;case"boolean":case"undefined":return String(o);case"object":return"{}"}},types:{isAsyncFunction(o){return o instanceof l},isArrayBufferView(o){return ArrayBuffer.isView(o)}},isBlob:s},i.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom")}),Li=Se((e,i)=>{fe(),pe(),de();var{AbortController:t,AbortSignal:l}=typeof self<"u"?self:typeof window<"u"?window:void 0;i.exports=t,i.exports.AbortSignal=l,i.exports.default=t}),ht=Se((e,i)=>{fe(),pe(),de();var{format:t,inspect:l,AggregateError:h}=Pt(),s=globalThis.AggregateError||h,r=Symbol("kIsNodeError"),o=["string","function","number","object","Function","Object","boolean","bigint","symbol"],n=/^([A-Z][a-z0-9]*)+$/,a="__node_internal_",f={};function p(B,w){if(!B)throw new f.ERR_INTERNAL_ASSERTION(w)}function g(B){let w="",U=B.length,q=B[0]==="-"?1:0;for(;U>=q+4;U-=3)w=`_${B.slice(U-3,U)}${w}`;return`${B.slice(0,U)}${w}`}function m(B,w,U){if(typeof w=="function")return p(w.length<=U.length,`Code: ${B}; The provided arguments length (${U.length}) does not match the required ones (${w.length}).`),w(...U);let q=(w.match(/%[dfijoOs]/g)||[]).length;return p(q===U.length,`Code: ${B}; The provided arguments length (${U.length}) does not match the required ones (${q}).`),U.length===0?w:t(w,...U)}function b(B,w,U){U||(U=Error);class q extends U{constructor(...C){super(m(B,w,C))}toString(){return`${this.name} [${B}]: ${this.message}`}}Object.defineProperties(q.prototype,{name:{value:U.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return`${this.name} [${B}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),q.prototype.code=B,q.prototype[r]=!0,f[B]=q}function v(B){let w=a+B.name;return Object.defineProperty(B,"name",{value:w}),B}function k(B,w){if(B&&w&&B!==w){if(Array.isArray(w.errors))return w.errors.push(B),w;let U=new s([w,B],w.message);return U.code=w.code,U}return B||w}var N=class extends Error{constructor(B="The operation was aborted",w=void 0){if(w!==void 0&&typeof w!="object")throw new f.ERR_INVALID_ARG_TYPE("options","Object",w);super(B,w),this.code="ABORT_ERR",this.name="AbortError"}};b("ERR_ASSERTION","%s",Error),b("ERR_INVALID_ARG_TYPE",(B,w,U)=>{p(typeof B=="string","'name' must be a string"),Array.isArray(w)||(w=[w]);let q="The ";B.endsWith(" argument")?q+=`${B} `:q+=`"${B}" ${B.includes(".")?"property":"argument"} `,q+="must be ";let I=[],C=[],R=[];for(let te of w)p(typeof te=="string","All expected entries have to be of type string"),o.includes(te)?I.push(te.toLowerCase()):n.test(te)?C.push(te):(p(te!=="object",'The value "object" should be written as "Object"'),R.push(te));if(C.length>0){let te=I.indexOf("object");te!==-1&&(I.splice(I,te,1),C.push("Object"))}if(I.length>0){switch(I.length){case 1:q+=`of type ${I[0]}`;break;case 2:q+=`one of type ${I[0]} or ${I[1]}`;break;default:{let te=I.pop();q+=`one of type ${I.join(", ")}, or ${te}`}}(C.length>0||R.length>0)&&(q+=" or ")}if(C.length>0){switch(C.length){case 1:q+=`an instance of ${C[0]}`;break;case 2:q+=`an instance of ${C[0]} or ${C[1]}`;break;default:{let te=C.pop();q+=`an instance of ${C.join(", ")}, or ${te}`}}R.length>0&&(q+=" or ")}switch(R.length){case 0:break;case 1:R[0].toLowerCase()!==R[0]&&(q+="an "),q+=`${R[0]}`;break;case 2:q+=`one of ${R[0]} or ${R[1]}`;break;default:{let te=R.pop();q+=`one of ${R.join(", ")}, or ${te}`}}if(U==null)q+=`. Received ${U}`;else if(typeof U=="function"&&U.name)q+=`. Received function ${U.name}`;else if(typeof U=="object"){var Q;if((Q=U.constructor)!==null&&Q!==void 0&&Q.name)q+=`. Received an instance of ${U.constructor.name}`;else{let te=l(U,{depth:-1});q+=`. Received ${te}`}}else{let te=l(U,{colors:!1});te.length>25&&(te=`${te.slice(0,25)}...`),q+=`. Received type ${typeof U} (${te})`}return q},TypeError),b("ERR_INVALID_ARG_VALUE",(B,w,U="is invalid")=>{let q=l(w);return q.length>128&&(q=q.slice(0,128)+"..."),`The ${B.includes(".")?"property":"argument"} '${B}' ${U}. Received ${q}`},TypeError),b("ERR_INVALID_RETURN_VALUE",(B,w,U)=>{var q;let I=U!=null&&(q=U.constructor)!==null&&q!==void 0&&q.name?`instance of ${U.constructor.name}`:`type ${typeof U}`;return`Expected ${B} to be returned from the "${w}" function but got ${I}.`},TypeError),b("ERR_MISSING_ARGS",(...B)=>{p(B.length>0,"At least one arg needs to be specified");let w,U=B.length;switch(B=(Array.isArray(B)?B:[B]).map(q=>`"${q}"`).join(" or "),U){case 1:w+=`The ${B[0]} argument`;break;case 2:w+=`The ${B[0]} and ${B[1]} arguments`;break;default:{let q=B.pop();w+=`The ${B.join(", ")}, and ${q} arguments`}break}return`${w} must be specified`},TypeError),b("ERR_OUT_OF_RANGE",(B,w,U)=>{p(w,'Missing "range" argument');let q;return Number.isInteger(U)&&Math.abs(U)>2**32?q=g(String(U)):typeof U=="bigint"?(q=String(U),(U>2n**32n||U<-(2n**32n))&&(q=g(q)),q+="n"):q=l(U),`The value of "${B}" is out of range. It must be ${w}. Received ${q}`},RangeError),b("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error),b("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error),b("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error),b("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error),b("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error),b("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),b("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error),b("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error),b("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error),b("ERR_STREAM_WRITE_AFTER_END","write after end",Error),b("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError),i.exports={AbortError:N,aggregateTwoErrors:v(k),hideStackFrames:v,codes:f}}),Vr=Se((e,i)=>{fe(),pe(),de();var{ArrayIsArray:t,ArrayPrototypeIncludes:l,ArrayPrototypeJoin:h,ArrayPrototypeMap:s,NumberIsInteger:r,NumberIsNaN:o,NumberMAX_SAFE_INTEGER:n,NumberMIN_SAFE_INTEGER:a,NumberParseInt:f,ObjectPrototypeHasOwnProperty:p,RegExpPrototypeExec:g,String:m,StringPrototypeToUpperCase:b,StringPrototypeTrim:v}=Ye(),{hideStackFrames:k,codes:{ERR_SOCKET_BAD_PORT:N,ERR_INVALID_ARG_TYPE:B,ERR_INVALID_ARG_VALUE:w,ERR_OUT_OF_RANGE:U,ERR_UNKNOWN_SIGNAL:q}}=ht(),{normalizeEncoding:I}=Pt(),{isAsyncFunction:C,isArrayBufferView:R}=Pt().types,Q={};function te(L){return L===(L|0)}function se(L){return L===L>>>0}var T=/^[0-7]+$/,K="must be a 32-bit unsigned integer or an octal string";function re(L,S,j){if(typeof L>"u"&&(L=j),typeof L=="string"){if(g(T,L)===null)throw new w(S,L,K);L=f(L,8)}return he(L,S),L}var J=k((L,S,j=a,z=n)=>{if(typeof L!="number")throw new B(S,"number",L);if(!r(L))throw new U(S,"an integer",L);if(Lz)throw new U(S,`>= ${j} && <= ${z}`,L)}),_e=k((L,S,j=-2147483648,z=2147483647)=>{if(typeof L!="number")throw new B(S,"number",L);if(!r(L))throw new U(S,"an integer",L);if(Lz)throw new U(S,`>= ${j} && <= ${z}`,L)}),he=k((L,S,j=!1)=>{if(typeof L!="number")throw new B(S,"number",L);if(!r(L))throw new U(S,"an integer",L);let z=j?1:0,Z=4294967295;if(LZ)throw new U(S,`>= ${z} && <= ${Z}`,L)});function V(L,S){if(typeof L!="string")throw new B(S,"string",L)}function Ae(L,S,j=void 0,z){if(typeof L!="number")throw new B(S,"number",L);if(j!=null&&Lz||(j!=null||z!=null)&&o(L))throw new U(S,`${j!=null?`>= ${j}`:""}${j!=null&&z!=null?" && ":""}${z!=null?`<= ${z}`:""}`,L)}var ie=k((L,S,j)=>{if(!l(j,L)){let z="must be one of: "+h(s(j,Z=>typeof Z=="string"?`'${Z}'`:m(Z)),", ");throw new w(S,L,z)}});function X(L,S){if(typeof L!="boolean")throw new B(S,"boolean",L)}function O(L,S,j){return L==null||!p(L,S)?j:L[S]}var G=k((L,S,j=null)=>{let z=O(j,"allowArray",!1),Z=O(j,"allowFunction",!1);if(!O(j,"nullable",!1)&&L===null||!z&&t(L)||typeof L!="object"&&(!Z||typeof L!="function"))throw new B(S,"Object",L)}),ve=k((L,S)=>{if(L!=null&&typeof L!="object"&&typeof L!="function")throw new B(S,"a dictionary",L)}),Ce=k((L,S,j=0)=>{if(!t(L))throw new B(S,"Array",L);if(L.length{if(!R(L))throw new B(S,["Buffer","TypedArray","DataView"],L)});function ge(L,S){let j=I(S),z=L.length;if(j==="hex"&&z%2!==0)throw new w("encoding",S,`is invalid for data of length ${z}`)}function ae(L,S="Port",j=!0){if(typeof L!="number"&&typeof L!="string"||typeof L=="string"&&v(L).length===0||+L!==+L>>>0||L>65535||L===0&&!j)throw new N(S,L,j);return L|0}var ne=k((L,S)=>{if(L!==void 0&&(L===null||typeof L!="object"||!("aborted"in L)))throw new B(S,"AbortSignal",L)}),Ee=k((L,S)=>{if(typeof L!="function")throw new B(S,"Function",L)}),me=k((L,S)=>{if(typeof L!="function"||C(L))throw new B(S,"Function",L)}),x=k((L,S)=>{if(L!==void 0)throw new B(S,"undefined",L)});function F(L,S,j){if(!l(j,L))throw new B(S,`('${h(j,"|")}')`,L)}var $=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function ue(L,S){if(typeof L>"u"||!g($,L))throw new w(S,L,'must be an array or string of format "; rel=preload; as=style"')}function ee(L){if(typeof L=="string")return ue(L,"hints"),L;if(t(L)){let S=L.length,j="";if(S===0)return j;for(let z=0;z; rel=preload; as=style"')}i.exports={isInt32:te,isUint32:se,parseFileMode:re,validateArray:Ce,validateStringArray:le,validateBooleanArray:W,validateBoolean:X,validateBuffer:Y,validateDictionary:ve,validateEncoding:ge,validateFunction:Ee,validateInt32:_e,validateInteger:J,validateNumber:Ae,validateObject:G,validateOneOf:ie,validatePlainFunction:me,validatePort:ae,validateSignalName:A,validateString:V,validateUint32:he,validateUndefined:x,validateUnion:F,validateAbortSignal:ne,validateLinkHeaderValue:ee}}),ir=Se((e,i)=>{fe(),pe(),de();var t=i.exports={},l,h;function s(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?l=setTimeout:l=s}catch{l=s}try{typeof clearTimeout=="function"?h=clearTimeout:h=r}catch{h=r}})();function o(N){if(l===setTimeout)return setTimeout(N,0);if((l===s||!l)&&setTimeout)return l=setTimeout,setTimeout(N,0);try{return l(N,0)}catch{try{return l.call(null,N,0)}catch{return l.call(this,N,0)}}}function n(N){if(h===clearTimeout)return clearTimeout(N);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(N);try{return h(N)}catch{try{return h.call(null,N)}catch{return h.call(this,N)}}}var a=[],f=!1,p,g=-1;function m(){!f||!p||(f=!1,p.length?a=p.concat(a):g=-1,a.length&&b())}function b(){if(!f){var N=o(m);f=!0;for(var B=a.length;B;){for(p=a,a=[];++g1)for(var w=1;w{fe(),pe(),de();var{Symbol:t,SymbolAsyncIterator:l,SymbolIterator:h,SymbolFor:s}=Ye(),r=t("kDestroyed"),o=t("kIsErrored"),n=t("kIsReadable"),a=t("kIsDisturbed"),f=s("nodejs.webstream.isClosedPromise"),p=s("nodejs.webstream.controllerErrorFunction");function g(O,G=!1){var ve;return!!(O&&typeof O.pipe=="function"&&typeof O.on=="function"&&(!G||typeof O.pause=="function"&&typeof O.resume=="function")&&(!O._writableState||((ve=O._readableState)===null||ve===void 0?void 0:ve.readable)!==!1)&&(!O._writableState||O._readableState))}function m(O){var G;return!!(O&&typeof O.write=="function"&&typeof O.on=="function"&&(!O._readableState||((G=O._writableState)===null||G===void 0?void 0:G.writable)!==!1))}function b(O){return!!(O&&typeof O.pipe=="function"&&O._readableState&&typeof O.on=="function"&&typeof O.write=="function")}function v(O){return O&&(O._readableState||O._writableState||typeof O.write=="function"&&typeof O.on=="function"||typeof O.pipe=="function"&&typeof O.on=="function")}function k(O){return!!(O&&!v(O)&&typeof O.pipeThrough=="function"&&typeof O.getReader=="function"&&typeof O.cancel=="function")}function N(O){return!!(O&&!v(O)&&typeof O.getWriter=="function"&&typeof O.abort=="function")}function B(O){return!!(O&&!v(O)&&typeof O.readable=="object"&&typeof O.writable=="object")}function w(O){return k(O)||N(O)||B(O)}function U(O,G){return O==null?!1:G===!0?typeof O[l]=="function":G===!1?typeof O[h]=="function":typeof O[l]=="function"||typeof O[h]=="function"}function q(O){if(!v(O))return null;let G=O._writableState,ve=O._readableState,Ce=G||ve;return!!(O.destroyed||O[r]||Ce!=null&&Ce.destroyed)}function I(O){if(!m(O))return null;if(O.writableEnded===!0)return!0;let G=O._writableState;return G!=null&&G.errored?!1:typeof G?.ended!="boolean"?null:G.ended}function C(O,G){if(!m(O))return null;if(O.writableFinished===!0)return!0;let ve=O._writableState;return ve!=null&&ve.errored?!1:typeof ve?.finished!="boolean"?null:!!(ve.finished||G===!1&&ve.ended===!0&&ve.length===0)}function R(O){if(!g(O))return null;if(O.readableEnded===!0)return!0;let G=O._readableState;return!G||G.errored?!1:typeof G?.ended!="boolean"?null:G.ended}function Q(O,G){if(!g(O))return null;let ve=O._readableState;return ve!=null&&ve.errored?!1:typeof ve?.endEmitted!="boolean"?null:!!(ve.endEmitted||G===!1&&ve.ended===!0&&ve.length===0)}function te(O){return O&&O[n]!=null?O[n]:typeof O?.readable!="boolean"?null:q(O)?!1:g(O)&&O.readable&&!Q(O)}function se(O){return typeof O?.writable!="boolean"?null:q(O)?!1:m(O)&&O.writable&&!I(O)}function T(O,G){return v(O)?q(O)?!0:!(G?.readable!==!1&&te(O)||G?.writable!==!1&&se(O)):null}function K(O){var G,ve;return v(O)?O.writableErrored?O.writableErrored:(G=(ve=O._writableState)===null||ve===void 0?void 0:ve.errored)!==null&&G!==void 0?G:null:null}function re(O){var G,ve;return v(O)?O.readableErrored?O.readableErrored:(G=(ve=O._readableState)===null||ve===void 0?void 0:ve.errored)!==null&&G!==void 0?G:null:null}function J(O){if(!v(O))return null;if(typeof O.closed=="boolean")return O.closed;let G=O._writableState,ve=O._readableState;return typeof G?.closed=="boolean"||typeof ve?.closed=="boolean"?G?.closed||ve?.closed:typeof O._closed=="boolean"&&_e(O)?O._closed:null}function _e(O){return typeof O._closed=="boolean"&&typeof O._defaultKeepAlive=="boolean"&&typeof O._removedConnection=="boolean"&&typeof O._removedContLen=="boolean"}function he(O){return typeof O._sent100=="boolean"&&_e(O)}function V(O){var G;return typeof O._consuming=="boolean"&&typeof O._dumped=="boolean"&&((G=O.req)===null||G===void 0?void 0:G.upgradeOrConnect)===void 0}function Ae(O){if(!v(O))return null;let G=O._writableState,ve=O._readableState,Ce=G||ve;return!Ce&&he(O)||!!(Ce&&Ce.autoDestroy&&Ce.emitClose&&Ce.closed===!1)}function ie(O){var G;return!!(O&&((G=O[a])!==null&&G!==void 0?G:O.readableDidRead||O.readableAborted))}function X(O){var G,ve,Ce,le,W,A,Y,ge,ae,ne;return!!(O&&((G=(ve=(Ce=(le=(W=(A=O[o])!==null&&A!==void 0?A:O.readableErrored)!==null&&W!==void 0?W:O.writableErrored)!==null&&le!==void 0?le:(Y=O._readableState)===null||Y===void 0?void 0:Y.errorEmitted)!==null&&Ce!==void 0?Ce:(ge=O._writableState)===null||ge===void 0?void 0:ge.errorEmitted)!==null&&ve!==void 0?ve:(ae=O._readableState)===null||ae===void 0?void 0:ae.errored)!==null&&G!==void 0?G:!((ne=O._writableState)===null||ne===void 0)&&ne.errored))}i.exports={kDestroyed:r,isDisturbed:ie,kIsDisturbed:a,isErrored:X,kIsErrored:o,isReadable:te,kIsReadable:n,kIsClosedPromise:f,kControllerErrorFunction:p,isClosed:J,isDestroyed:q,isDuplexNodeStream:b,isFinished:T,isIterable:U,isReadableNodeStream:g,isReadableStream:k,isReadableEnded:R,isReadableFinished:Q,isReadableErrored:re,isNodeStream:v,isWebStream:w,isWritable:se,isWritableNodeStream:m,isWritableStream:N,isWritableEnded:I,isWritableFinished:C,isWritableErrored:K,isServerRequest:V,isServerResponse:he,willEmitClose:Ae,isTransformStream:B}}),$t=Se((e,i)=>{fe(),pe(),de();var t=ir(),{AbortError:l,codes:h}=ht(),{ERR_INVALID_ARG_TYPE:s,ERR_STREAM_PREMATURE_CLOSE:r}=h,{kEmptyObject:o,once:n}=Pt(),{validateAbortSignal:a,validateFunction:f,validateObject:p,validateBoolean:g}=Vr(),{Promise:m,PromisePrototypeThen:b}=Ye(),{isClosed:v,isReadable:k,isReadableNodeStream:N,isReadableStream:B,isReadableFinished:w,isReadableErrored:U,isWritable:q,isWritableNodeStream:I,isWritableStream:C,isWritableFinished:R,isWritableErrored:Q,isNodeStream:te,willEmitClose:se,kIsClosedPromise:T}=Mt();function K(V){return V.setHeader&&typeof V.abort=="function"}var re=()=>{};function J(V,Ae,ie){var X,O;if(arguments.length===2?(ie=Ae,Ae=o):Ae==null?Ae=o:p(Ae,"options"),f(ie,"callback"),a(Ae.signal,"options.signal"),ie=n(ie),B(V)||C(V))return _e(V,Ae,ie);if(!te(V))throw new s("stream",["ReadableStream","WritableStream","Stream"],V);let G=(X=Ae.readable)!==null&&X!==void 0?X:N(V),ve=(O=Ae.writable)!==null&&O!==void 0?O:I(V),Ce=V._writableState,le=V._readableState,W=()=>{V.writable||ge()},A=se(V)&&N(V)===G&&I(V)===ve,Y=R(V,!1),ge=()=>{Y=!0,V.destroyed&&(A=!1),!(A&&(!V.readable||G))&&(!G||ae)&&ie.call(V)},ae=w(V,!1),ne=()=>{ae=!0,V.destroyed&&(A=!1),!(A&&(!V.writable||ve))&&(!ve||Y)&&ie.call(V)},Ee=ee=>{ie.call(V,ee)},me=v(V),x=()=>{me=!0;let ee=Q(V)||U(V);if(ee&&typeof ee!="boolean")return ie.call(V,ee);if(G&&!ae&&N(V,!0)&&!w(V,!1))return ie.call(V,new r);if(ve&&!Y&&!R(V,!1))return ie.call(V,new r);ie.call(V)},F=()=>{me=!0;let ee=Q(V)||U(V);if(ee&&typeof ee!="boolean")return ie.call(V,ee);ie.call(V)},$=()=>{V.req.on("finish",ge)};K(V)?(V.on("complete",ge),A||V.on("abort",x),V.req?$():V.on("request",$)):ve&&!Ce&&(V.on("end",W),V.on("close",W)),!A&&typeof V.aborted=="boolean"&&V.on("aborted",x),V.on("end",ne),V.on("finish",ge),Ae.error!==!1&&V.on("error",Ee),V.on("close",x),me?t.nextTick(x):Ce!=null&&Ce.errorEmitted||le!=null&&le.errorEmitted?A||t.nextTick(F):(!G&&(!A||k(V))&&(Y||q(V)===!1)||!ve&&(!A||q(V))&&(ae||k(V)===!1)||le&&V.req&&V.aborted)&&t.nextTick(F);let ue=()=>{ie=re,V.removeListener("aborted",x),V.removeListener("complete",ge),V.removeListener("abort",x),V.removeListener("request",$),V.req&&V.req.removeListener("finish",ge),V.removeListener("end",W),V.removeListener("close",W),V.removeListener("finish",ge),V.removeListener("end",ne),V.removeListener("error",Ee),V.removeListener("close",x)};if(Ae.signal&&!me){let ee=()=>{let L=ie;ue(),L.call(V,new l(void 0,{cause:Ae.signal.reason}))};if(Ae.signal.aborted)t.nextTick(ee);else{let L=ie;ie=n((...S)=>{Ae.signal.removeEventListener("abort",ee),L.apply(V,S)}),Ae.signal.addEventListener("abort",ee)}}return ue}function _e(V,Ae,ie){let X=!1,O=re;if(Ae.signal)if(O=()=>{X=!0,ie.call(V,new l(void 0,{cause:Ae.signal.reason}))},Ae.signal.aborted)t.nextTick(O);else{let ve=ie;ie=n((...Ce)=>{Ae.signal.removeEventListener("abort",O),ve.apply(V,Ce)}),Ae.signal.addEventListener("abort",O)}let G=(...ve)=>{X||t.nextTick(()=>ie.apply(V,ve))};return b(V[T].promise,G,G),re}function he(V,Ae){var ie;let X=!1;return Ae===null&&(Ae=o),(ie=Ae)!==null&&ie!==void 0&&ie.cleanup&&(g(Ae.cleanup,"cleanup"),X=Ae.cleanup),new m((O,G)=>{let ve=J(V,Ae,Ce=>{X&&ve(),Ce?G(Ce):O()})})}i.exports=J,i.exports.finished=he}),hr=Se((e,i)=>{fe(),pe(),de();var t=ir(),{aggregateTwoErrors:l,codes:{ERR_MULTIPLE_CALLBACK:h},AbortError:s}=ht(),{Symbol:r}=Ye(),{kDestroyed:o,isDestroyed:n,isFinished:a,isServerRequest:f}=Mt(),p=r("kDestroy"),g=r("kConstruct");function m(T,K,re){T&&(T.stack,K&&!K.errored&&(K.errored=T),re&&!re.errored&&(re.errored=T))}function b(T,K){let re=this._readableState,J=this._writableState,_e=J||re;return J!=null&&J.destroyed||re!=null&&re.destroyed?(typeof K=="function"&&K(),this):(m(T,J,re),J&&(J.destroyed=!0),re&&(re.destroyed=!0),_e.constructed?v(this,T,K):this.once(p,function(he){v(this,l(he,T),K)}),this)}function v(T,K,re){let J=!1;function _e(he){if(J)return;J=!0;let V=T._readableState,Ae=T._writableState;m(he,Ae,V),Ae&&(Ae.closed=!0),V&&(V.closed=!0),typeof re=="function"&&re(he),he?t.nextTick(k,T,he):t.nextTick(N,T)}try{T._destroy(K||null,_e)}catch(he){_e(he)}}function k(T,K){B(T,K),N(T)}function N(T){let K=T._readableState,re=T._writableState;re&&(re.closeEmitted=!0),K&&(K.closeEmitted=!0),(re!=null&&re.emitClose||K!=null&&K.emitClose)&&T.emit("close")}function B(T,K){let re=T._readableState,J=T._writableState;J!=null&&J.errorEmitted||re!=null&&re.errorEmitted||(J&&(J.errorEmitted=!0),re&&(re.errorEmitted=!0),T.emit("error",K))}function w(){let T=this._readableState,K=this._writableState;T&&(T.constructed=!0,T.closed=!1,T.closeEmitted=!1,T.destroyed=!1,T.errored=null,T.errorEmitted=!1,T.reading=!1,T.ended=T.readable===!1,T.endEmitted=T.readable===!1),K&&(K.constructed=!0,K.destroyed=!1,K.closed=!1,K.closeEmitted=!1,K.errored=null,K.errorEmitted=!1,K.finalCalled=!1,K.prefinished=!1,K.ended=K.writable===!1,K.ending=K.writable===!1,K.finished=K.writable===!1)}function U(T,K,re){let J=T._readableState,_e=T._writableState;if(_e!=null&&_e.destroyed||J!=null&&J.destroyed)return this;J!=null&&J.autoDestroy||_e!=null&&_e.autoDestroy?T.destroy(K):K&&(K.stack,_e&&!_e.errored&&(_e.errored=K),J&&!J.errored&&(J.errored=K),re?t.nextTick(B,T,K):B(T,K))}function q(T,K){if(typeof T._construct!="function")return;let re=T._readableState,J=T._writableState;re&&(re.constructed=!1),J&&(J.constructed=!1),T.once(g,K),!(T.listenerCount(g)>1)&&t.nextTick(I,T)}function I(T){let K=!1;function re(J){if(K){U(T,J??new h);return}K=!0;let _e=T._readableState,he=T._writableState,V=he||_e;_e&&(_e.constructed=!0),he&&(he.constructed=!0),V.destroyed?T.emit(p,J):J?U(T,J,!0):t.nextTick(C,T)}try{T._construct(J=>{t.nextTick(re,J)})}catch(J){t.nextTick(re,J)}}function C(T){T.emit(g)}function R(T){return T?.setHeader&&typeof T.abort=="function"}function Q(T){T.emit("close")}function te(T,K){T.emit("error",K),t.nextTick(Q,T)}function se(T,K){!T||n(T)||(!K&&!a(T)&&(K=new s),f(T)?(T.socket=null,T.destroy(K)):R(T)?T.abort():R(T.req)?T.req.abort():typeof T.destroy=="function"?T.destroy(K):typeof T.close=="function"?T.close():K?t.nextTick(te,T,K):t.nextTick(Q,T),T.destroyed||(T[o]=!0))}i.exports={construct:q,destroyer:se,destroy:b,undestroy:w,errorOrDestroy:U}});function We(){We.init.call(this)}function xr(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function Zo(e){return e._maxListeners===void 0?We.defaultMaxListeners:e._maxListeners}function Ji(e,i,t,l){var h,s,r,o;if(xr(t),(s=e._events)===void 0?(s=e._events=Object.create(null),e._eventsCount=0):(s.newListener!==void 0&&(e.emit("newListener",i,t.listener?t.listener:t),s=e._events),r=s[i]),r===void 0)r=s[i]=t,++e._eventsCount;else if(typeof r=="function"?r=s[i]=l?[t,r]:[r,t]:l?r.unshift(t):r.push(t),(h=Zo(e))>0&&r.length>h&&!r.warned){r.warned=!0;var n=new Error("Possible EventEmitter memory leak detected. "+r.length+" "+String(i)+" listeners added. Use emitter.setMaxListeners() to increase limit");n.name="MaxListenersExceededWarning",n.emitter=e,n.type=i,n.count=r.length,o=n,console&&console.warn&&console.warn(o)}return e}function Al(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Zi(e,i,t){var l={fired:!1,wrapFn:void 0,target:e,type:i,listener:t},h=Al.bind(l);return h.listener=t,l.wrapFn=h,h}function Xi(e,i,t){var l=e._events;if(l===void 0)return[];var h=l[i];return h===void 0?[]:typeof h=="function"?t?[h.listener||h]:[h]:t?function(s){for(var r=new Array(s.length),o=0;o{fe(),pe(),de(),Vt=typeof Reflect=="object"?Reflect:null,Zr=Vt&&typeof Vt.apply=="function"?Vt.apply:function(e,i,t){return Function.prototype.apply.call(e,i,t)},ro=Vt&&typeof Vt.ownKeys=="function"?Vt.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)},Xr=Number.isNaN||function(e){return e!=e},to=We,We.EventEmitter=We,We.prototype._events=void 0,We.prototype._eventsCount=0,We.prototype._maxListeners=void 0,en=10,Object.defineProperty(We,"defaultMaxListeners",{enumerable:!0,get:function(){return en},set:function(e){if(typeof e!="number"||e<0||Xr(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");en=e}}),We.init=function(){this._events!==void 0&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},We.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Xr(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},We.prototype.getMaxListeners=function(){return Zo(this)},We.prototype.emit=function(e){for(var i=[],t=1;t0&&(s=i[0]),s instanceof Error)throw s;var r=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw r.context=s,r}var o=h[e];if(o===void 0)return!1;if(typeof o=="function")Zr(o,this,i);else{var n=o.length,a=Xo(o,n);for(t=0;t=0;s--)if(t[s]===i||t[s].listener===i){r=t[s].listener,h=s;break}if(h<0)return this;h===0?t.shift():function(o,n){for(;n+1=0;l--)this.removeListener(e,i[l]);return this},We.prototype.listeners=function(e){return Xi(this,e,!0)},We.prototype.rawListeners=function(e){return Xi(this,e,!1)},We.listenerCount=function(e,i){return typeof e.listenerCount=="function"?e.listenerCount(i):eo.call(e,i)},We.prototype.listenerCount=eo,We.prototype.eventNames=function(){return this._eventsCount>0?ro(this._events):[]},ft=to,ft.EventEmitter,ft.defaultMaxListeners,ft.init,ft.listenerCount,ft.EventEmitter,ft.defaultMaxListeners,ft.init,ft.listenerCount}),or={};nr(or,{EventEmitter:()=>es,default:()=>ft,defaultMaxListeners:()=>ts,init:()=>rs,listenerCount:()=>ns,on:()=>is,once:()=>os});var es,ts,rs,ns,is,os,cr=et(()=>{fe(),pe(),de(),no(),no(),ft.once=function(e,i){return new Promise((t,l)=>{function h(...r){s!==void 0&&e.removeListener("error",s),t(r)}let s;i!=="error"&&(s=r=>{e.removeListener(name,h),l(r)},e.once("error",s)),e.once(i,h)})},ft.on=function(e,i){let t=[],l=[],h=null,s=!1,r={async next(){let a=t.shift();if(a)return createIterResult(a,!1);if(h){let f=Promise.reject(h);return h=null,f}return s?createIterResult(void 0,!0):new Promise((f,p)=>l.push({resolve:f,reject:p}))},async return(){e.removeListener(i,o),e.removeListener("error",n),s=!0;for(let a of l)a.resolve(createIterResult(void 0,!0));return createIterResult(void 0,!0)},throw(a){h=a,e.removeListener(i,o),e.removeListener("error",n)},[Symbol.asyncIterator](){return this}};return e.on(i,o),e.on("error",n),r;function o(...a){let f=l.shift();f?f.resolve(createIterResult(a,!1)):t.push(a)}function n(a){s=!0;let f=l.shift();f?f.reject(a):h=a,r.return()}},{EventEmitter:es,defaultMaxListeners:ts,init:rs,listenerCount:ns,on:is,once:os}=ft}),Ni=Se((e,i)=>{fe(),pe(),de();var{ArrayIsArray:t,ObjectSetPrototypeOf:l}=Ye(),{EventEmitter:h}=(cr(),De(or));function s(o){h.call(this,o)}l(s.prototype,h.prototype),l(s,h),s.prototype.pipe=function(o,n){let a=this;function f(N){o.writable&&o.write(N)===!1&&a.pause&&a.pause()}a.on("data",f);function p(){a.readable&&a.resume&&a.resume()}o.on("drain",p),!o._isStdio&&(!n||n.end!==!1)&&(a.on("end",m),a.on("close",b));let g=!1;function m(){g||(g=!0,o.end())}function b(){g||(g=!0,typeof o.destroy=="function"&&o.destroy())}function v(N){k(),h.listenerCount(this,"error")===0&&this.emit("error",N)}r(a,"error",v),r(o,"error",v);function k(){a.removeListener("data",f),o.removeListener("drain",p),a.removeListener("end",m),a.removeListener("close",b),a.removeListener("error",v),o.removeListener("error",v),a.removeListener("end",k),a.removeListener("close",k),o.removeListener("close",k)}return a.on("end",k),a.on("close",k),o.on("close",k),o.emit("pipe",a),o};function r(o,n,a){if(typeof o.prependListener=="function")return o.prependListener(n,a);!o._events||!o._events[n]?o.on(n,a):t(o._events[n])?o._events[n].unshift(a):o._events[n]=[a,o._events[n]]}i.exports={Stream:s,prependListener:r}}),Hr=Se((e,i)=>{fe(),pe(),de();var{AbortError:t,codes:l}=ht(),{isNodeStream:h,isWebStream:s,kControllerErrorFunction:r}=Mt(),o=$t(),{ERR_INVALID_ARG_TYPE:n}=l,a=(f,p)=>{if(typeof f!="object"||!("aborted"in f))throw new n(p,"AbortSignal",f)};i.exports.addAbortSignal=function(f,p){if(a(f,"signal"),!h(p)&&!s(p))throw new n("stream",["ReadableStream","WritableStream","Stream"],p);return i.exports.addAbortSignalNoValidate(f,p)},i.exports.addAbortSignalNoValidate=function(f,p){if(typeof f!="object"||!("aborted"in f))return p;let g=h(p)?()=>{p.destroy(new t(void 0,{cause:f.reason}))}:()=>{p[r](new t(void 0,{cause:f.reason}))};return f.aborted?g():(f.addEventListener("abort",g),o(p,()=>f.removeEventListener("abort",g))),p}}),kl=Se((e,i)=>{fe(),pe(),de();var{StringPrototypeSlice:t,SymbolIterator:l,TypedArrayPrototypeSet:h,Uint8Array:s}=Ye(),{Buffer:r}=(rt(),De(tt)),{inspect:o}=Pt();i.exports=class{constructor(){this.head=null,this.tail=null,this.length=0}push(n){let a={data:n,next:null};this.length>0?this.tail.next=a:this.head=a,this.tail=a,++this.length}unshift(n){let a={data:n,next:this.head};this.length===0&&(this.tail=a),this.head=a,++this.length}shift(){if(this.length===0)return;let n=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,n}clear(){this.head=this.tail=null,this.length=0}join(n){if(this.length===0)return"";let a=this.head,f=""+a.data;for(;(a=a.next)!==null;)f+=n+a.data;return f}concat(n){if(this.length===0)return r.alloc(0);let a=r.allocUnsafe(n>>>0),f=this.head,p=0;for(;f;)h(a,f.data,p),p+=f.data.length,f=f.next;return a}consume(n,a){let f=this.head.data;if(ng.length)a+=g,n-=g.length;else{n===g.length?(a+=g,++p,f.next?this.head=f.next:this.head=this.tail=null):(a+=t(g,0,n),this.head=f,f.data=t(g,n));break}++p}while((f=f.next)!==null);return this.length-=p,a}_getBuffer(n){let a=r.allocUnsafe(n),f=n,p=this.head,g=0;do{let m=p.data;if(n>m.length)h(a,m,f-n),n-=m.length;else{n===m.length?(h(a,m,f-n),++g,p.next?this.head=p.next:this.head=this.tail=null):(h(a,new s(m.buffer,m.byteOffset,n),f-n),this.head=p,p.data=m.slice(n));break}++g}while((p=p.next)!==null);return this.length-=g,a}[Symbol.for("nodejs.util.inspect.custom")](n,a){return o(this,{...a,depth:0,customInspect:!1})}}}),Wi=Se((e,i)=>{fe(),pe(),de();var{MathFloor:t,NumberIsInteger:l}=Ye(),{ERR_INVALID_ARG_VALUE:h}=ht().codes;function s(n,a,f){return n.highWaterMark!=null?n.highWaterMark:a?n[f]:null}function r(n){return n?16:16*1024}function o(n,a,f,p){let g=s(a,p,f);if(g!=null){if(!l(g)||g<0){let m=p?`options.${f}`:"options.highWaterMark";throw new h(m,g)}return t(g)}return r(n.objectMode)}i.exports={getHighWaterMark:o,getDefaultHighWaterMark:r}});function io(e){var i=e.length;if(i%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var t=e.indexOf("=");return t===-1&&(t=i),[t,t===i?0:4-t%4]}function Cl(e,i,t){for(var l,h,s=[],r=i;r>18&63]+yt[h>>12&63]+yt[h>>6&63]+yt[63&h]);return s.join("")}function Ot(e){if(e>2147483647)throw new RangeError('The value "'+e+'" is invalid for option "size"');var i=new Uint8Array(e);return Object.setPrototypeOf(i,ye.prototype),i}function ye(e,i,t){if(typeof e=="number"){if(typeof i=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return yi(e)}return ss(e,i,t)}function ss(e,i,t){if(typeof e=="string")return function(s,r){if(typeof r=="string"&&r!==""||(r="utf8"),!ye.isEncoding(r))throw new TypeError("Unknown encoding: "+r);var o=0|ls(s,r),n=Ot(o),a=n.write(s,r);return a!==o&&(n=n.slice(0,a)),n}(e,i);if(ArrayBuffer.isView(e))return tn(e);if(e==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Bt(e,ArrayBuffer)||e&&Bt(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(Bt(e,SharedArrayBuffer)||e&&Bt(e.buffer,SharedArrayBuffer)))return Il(e,i,t);if(typeof e=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var l=e.valueOf&&e.valueOf();if(l!=null&&l!==e)return ye.from(l,i,t);var h=function(s){if(ye.isBuffer(s)){var r=0|Di(s.length),o=Ot(r);return o.length===0||s.copy(o,0,0,r),o}if(s.length!==void 0)return typeof s.length!="number"||Fi(s.length)?Ot(0):tn(s);if(s.type==="Buffer"&&Array.isArray(s.data))return tn(s.data)}(e);if(h)return h;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]=="function")return ye.from(e[Symbol.toPrimitive]("string"),i,t);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function as(e){if(typeof e!="number")throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function yi(e){return as(e),Ot(e<0?0:0|Di(e))}function tn(e){for(var i=e.length<0?0:0|Di(e.length),t=Ot(i),l=0;l=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x7fffffff bytes");return 0|e}function ls(e,i){if(ye.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Bt(e,ArrayBuffer))return e.byteLength;if(typeof e!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var t=e.length,l=arguments.length>2&&arguments[2]===!0;if(!l&&t===0)return 0;for(var h=!1;;)switch(i){case"ascii":case"latin1":case"binary":return t;case"utf8":case"utf-8":return vi(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*t;case"hex":return t>>>1;case"base64":return fs(e).length;default:if(h)return l?-1:vi(e).length;i=(""+i).toLowerCase(),h=!0}}function Tl(e,i,t){var l=!1;if((i===void 0||i<0)&&(i=0),i>this.length||((t===void 0||t>this.length)&&(t=this.length),t<=0)||(t>>>=0)<=(i>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return Ll(this,i,t);case"utf8":case"utf-8":return hs(this,i,t);case"ascii":return jl(this,i,t);case"latin1":case"binary":return Ul(this,i,t);case"base64":return Ml(this,i,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Nl(this,i,t);default:if(l)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),l=!0}}function Ht(e,i,t){var l=e[i];e[i]=e[t],e[t]=l}function oo(e,i,t,l,h){if(e.length===0)return-1;if(typeof t=="string"?(l=t,t=0):t>2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),Fi(t=+t)&&(t=h?0:e.length-1),t<0&&(t=e.length+t),t>=e.length){if(h)return-1;t=e.length-1}else if(t<0){if(!h)return-1;t=0}if(typeof i=="string"&&(i=ye.from(i,l)),ye.isBuffer(i))return i.length===0?-1:so(e,i,t,l,h);if(typeof i=="number")return i&=255,typeof Uint8Array.prototype.indexOf=="function"?h?Uint8Array.prototype.indexOf.call(e,i,t):Uint8Array.prototype.lastIndexOf.call(e,i,t):so(e,[i],t,l,h);throw new TypeError("val must be string, number or Buffer")}function so(e,i,t,l,h){var s,r=1,o=e.length,n=i.length;if(l!==void 0&&((l=String(l).toLowerCase())==="ucs2"||l==="ucs-2"||l==="utf16le"||l==="utf-16le")){if(e.length<2||i.length<2)return-1;r=2,o/=2,n/=2,t/=2}function a(m,b){return r===1?m[b]:m.readUInt16BE(b*r)}if(h){var f=-1;for(s=t;so&&(t=o-n),s=t;s>=0;s--){for(var p=!0,g=0;gh&&(l=h):l=h;var s=i.length;l>s/2&&(l=s/2);for(var r=0;r>8,n=r%256,a.push(n),a.push(o);return a}(i,e.length-t),e,t,l)}function Ml(e,i,t){return i===0&&t===e.length?Dr.fromByteArray(e):Dr.fromByteArray(e.slice(i,t))}function hs(e,i,t){t=Math.min(e.length,t);for(var l=[],h=i;h239?4:a>223?3:a>191?2:1;if(h+p<=t)switch(p){case 1:a<128&&(f=a);break;case 2:(192&(s=e[h+1]))==128&&(n=(31&a)<<6|63&s)>127&&(f=n);break;case 3:s=e[h+1],r=e[h+2],(192&s)==128&&(192&r)==128&&(n=(15&a)<<12|(63&s)<<6|63&r)>2047&&(n<55296||n>57343)&&(f=n);break;case 4:s=e[h+1],r=e[h+2],o=e[h+3],(192&s)==128&&(192&r)==128&&(192&o)==128&&(n=(15&a)<<18|(63&s)<<12|(63&r)<<6|63&o)>65535&&n<1114112&&(f=n)}f===null?(f=65533,p=1):f>65535&&(f-=65536,l.push(f>>>10&1023|55296),f=56320|1023&f),l.push(f),h+=p}return function(g){var m=g.length;if(m<=4096)return String.fromCharCode.apply(String,g);for(var b="",v=0;vl)&&(t=l);for(var h="",s=i;st)throw new RangeError("Trying to access beyond buffer length")}function ut(e,i,t,l,h,s){if(!ye.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(i>h||ie.length)throw new RangeError("Index out of range")}function cs(e,i,t,l,h,s){if(t+l>e.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function ao(e,i,t,l,h){return i=+i,t>>>=0,h||cs(e,0,t,4),Jt.write(e,i,t,l,23,4),t+4}function lo(e,i,t,l,h){return i=+i,t>>>=0,h||cs(e,0,t,8),Jt.write(e,i,t,l,52,8),t+8}function vi(e,i){var t;i=i||1/0;for(var l=e.length,h=null,s=[],r=0;r55295&&t<57344){if(!h){if(t>56319){(i-=3)>-1&&s.push(239,191,189);continue}if(r+1===l){(i-=3)>-1&&s.push(239,191,189);continue}h=t;continue}if(t<56320){(i-=3)>-1&&s.push(239,191,189),h=t;continue}t=65536+(h-55296<<10|t-56320)}else h&&(i-=3)>-1&&s.push(239,191,189);if(h=null,t<128){if((i-=1)<0)break;s.push(t)}else if(t<2048){if((i-=2)<0)break;s.push(t>>6|192,63&t|128)}else if(t<65536){if((i-=3)<0)break;s.push(t>>12|224,t>>6&63|128,63&t|128)}else{if(!(t<1114112))throw new Error("Invalid code point");if((i-=4)<0)break;s.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}}return s}function fs(e){return Dr.toByteArray(function(i){if((i=(i=i.split("=")[0]).trim().replace(ds,"")).length<2)return"";for(;i.length%4!=0;)i+="=";return i}(e))}function zr(e,i,t,l){for(var h=0;h=i.length||h>=e.length);++h)i[h+t]=e[h];return h}function Bt(e,i){return e instanceof i||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===i.name}function Fi(e){return e!=e}function uo(e,i){for(var t in e)i[t]=e[t]}function zt(e,i,t){return mt(e,i,t)}function dr(e){var i;switch(this.encoding=function(t){var l=function(h){if(!h)return"utf8";for(var s;;)switch(h){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return h;default:if(s)return;h=(""+h).toLowerCase(),s=!0}}(t);if(typeof l!="string"&&(Fr.isEncoding===wi||!wi(t)))throw new Error("Unknown encoding: "+t);return l||t}(e),this.encoding){case"utf16le":this.text=Dl,this.end=Fl,i=4;break;case"utf8":this.fillLast=Wl,i=4;break;case"base64":this.text=$l,this.end=ql,i=3;break;default:return this.write=Vl,this.end=Hl,void 0}this.lastNeed=0,this.lastTotal=0,this.lastChar=Fr.allocUnsafe(i)}function rn(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function Wl(e){var i=this.lastTotal-this.lastNeed,t=function(l,h,s){if((192&h[0])!=128)return l.lastNeed=0,"�";if(l.lastNeed>1&&h.length>1){if((192&h[1])!=128)return l.lastNeed=1,"�";if(l.lastNeed>2&&h.length>2&&(192&h[2])!=128)return l.lastNeed=2,"�"}}(this,e);return t!==void 0?t:this.lastNeed<=e.length?(e.copy(this.lastChar,i,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,i,0,e.length),this.lastNeed-=e.length,void 0)}function Dl(e,i){if((e.length-i)%2==0){var t=e.toString("utf16le",i);if(t){var l=t.charCodeAt(t.length-1);if(l>=55296&&l<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",i,e.length-1)}function Fl(e){var i=e&&e.length?this.write(e):"";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return i+this.lastChar.toString("utf16le",0,t)}return i}function $l(e,i){var t=(e.length-i)%3;return t===0?e.toString("base64",i):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",i,e.length-t))}function ql(e){var i=e&&e.length?this.write(e):"";return this.lastNeed?i+this.lastChar.toString("base64",0,3-this.lastNeed):i}function Vl(e){return e.toString(this.encoding)}function Hl(e){return e&&e.length?this.write(e):""}var ho,yt,ct,co,kr,Kt,fo,po,vt,Dr,Jt,nn,ds,ps,pr,gr,mt,go,ur,Fr,wi,mo=et(()=>{for(fe(),pe(),de(),ho={byteLength:function(e){var i=io(e),t=i[0],l=i[1];return 3*(t+l)/4-l},toByteArray:function(e){var i,t,l=io(e),h=l[0],s=l[1],r=new co(function(a,f,p){return 3*(f+p)/4-p}(0,h,s)),o=0,n=s>0?h-4:h;for(t=0;t>16&255,r[o++]=i>>8&255,r[o++]=255&i;return s===2&&(i=ct[e.charCodeAt(t)]<<2|ct[e.charCodeAt(t+1)]>>4,r[o++]=255&i),s===1&&(i=ct[e.charCodeAt(t)]<<10|ct[e.charCodeAt(t+1)]<<4|ct[e.charCodeAt(t+2)]>>2,r[o++]=i>>8&255,r[o++]=255&i),r},fromByteArray:function(e){for(var i,t=e.length,l=t%3,h=[],s=0,r=t-l;sr?r:s+16383));return l===1?(i=e[t-1],h.push(yt[i>>2]+yt[i<<4&63]+"==")):l===2&&(i=(e[t-2]<<8)+e[t-1],h.push(yt[i>>10]+yt[i>>4&63]+yt[i<<2&63]+"=")),h.join("")}},yt=[],ct=[],co=typeof Uint8Array<"u"?Uint8Array:Array,kr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Kt=0,fo=kr.length;Kt>1,f=-7,p=t?h-1:0,g=t?-1:1,m=e[i+p];for(p+=g,s=m&(1<<-f)-1,m>>=-f,f+=o;f>0;s=256*s+e[i+p],p+=g,f-=8);for(r=s&(1<<-f)-1,s>>=-f,f+=l;f>0;r=256*r+e[i+p],p+=g,f-=8);if(s===0)s=1-a;else{if(s===n)return r?NaN:1/0*(m?-1:1);r+=Math.pow(2,l),s-=a}return(m?-1:1)*r*Math.pow(2,s-l)},write:function(e,i,t,l,h,s){var r,o,n,a=8*s-h-1,f=(1<>1,g=h===23?Math.pow(2,-24)-Math.pow(2,-77):0,m=l?0:s-1,b=l?1:-1,v=i<0||i===0&&1/i<0?1:0;for(i=Math.abs(i),isNaN(i)||i===1/0?(o=isNaN(i)?1:0,r=f):(r=Math.floor(Math.log(i)/Math.LN2),i*(n=Math.pow(2,-r))<1&&(r--,n*=2),(i+=r+p>=1?g/n:g*Math.pow(2,1-p))*n>=2&&(r++,n/=2),r+p>=f?(o=0,r=f):r+p>=1?(o=(i*n-1)*Math.pow(2,h),r+=p):(o=i*Math.pow(2,p-1)*Math.pow(2,h),r=0));h>=8;e[t+m]=255&o,m+=b,o/=256,h-=8);for(r=r<0;e[t+m]=255&r,m+=b,r/=256,a-=8);e[t+m-b]|=128*v}},vt={},Dr=ho,Jt=po,nn=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null,vt.Buffer=ye,vt.SlowBuffer=function(e){return+e!=e&&(e=0),ye.alloc(+e)},vt.INSPECT_MAX_BYTES=50,vt.kMaxLength=2147483647,ye.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1),i={foo:function(){return 42}};return Object.setPrototypeOf(i,Uint8Array.prototype),Object.setPrototypeOf(e,i),e.foo()===42}catch{return!1}}(),ye.TYPED_ARRAY_SUPPORT||typeof console>"u"||typeof console.error!="function"||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(ye.prototype,"parent",{enumerable:!0,get:function(){if(ye.isBuffer(this))return this.buffer}}),Object.defineProperty(ye.prototype,"offset",{enumerable:!0,get:function(){if(ye.isBuffer(this))return this.byteOffset}}),ye.poolSize=8192,ye.from=function(e,i,t){return ss(e,i,t)},Object.setPrototypeOf(ye.prototype,Uint8Array.prototype),Object.setPrototypeOf(ye,Uint8Array),ye.alloc=function(e,i,t){return function(l,h,s){return as(l),l<=0?Ot(l):h!==void 0?typeof s=="string"?Ot(l).fill(h,s):Ot(l).fill(h):Ot(l)}(e,i,t)},ye.allocUnsafe=function(e){return yi(e)},ye.allocUnsafeSlow=function(e){return yi(e)},ye.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==ye.prototype},ye.compare=function(e,i){if(Bt(e,Uint8Array)&&(e=ye.from(e,e.offset,e.byteLength)),Bt(i,Uint8Array)&&(i=ye.from(i,i.offset,i.byteLength)),!ye.isBuffer(e)||!ye.isBuffer(i))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===i)return 0;for(var t=e.length,l=i.length,h=0,s=Math.min(t,l);hi&&(e+=" ... "),""},nn&&(ye.prototype[nn]=ye.prototype.inspect),ye.prototype.compare=function(e,i,t,l,h){if(Bt(e,Uint8Array)&&(e=ye.from(e,e.offset,e.byteLength)),!ye.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(i===void 0&&(i=0),t===void 0&&(t=e?e.length:0),l===void 0&&(l=0),h===void 0&&(h=this.length),i<0||t>e.length||l<0||h>this.length)throw new RangeError("out of range index");if(l>=h&&i>=t)return 0;if(l>=h)return-1;if(i>=t)return 1;if(this===e)return 0;for(var s=(h>>>=0)-(l>>>=0),r=(t>>>=0)-(i>>>=0),o=Math.min(s,r),n=this.slice(l,h),a=e.slice(i,t),f=0;f>>=0,isFinite(t)?(t>>>=0,l===void 0&&(l="utf8")):(l=t,t=void 0)}var h=this.length-i;if((t===void 0||t>h)&&(t=h),e.length>0&&(t<0||i<0)||i>this.length)throw new RangeError("Attempt to write outside buffer bounds");l||(l="utf8");for(var s=!1;;)switch(l){case"hex":return Ol(this,e,i,t);case"utf8":case"utf-8":return Bl(this,e,i,t);case"ascii":return us(this,e,i,t);case"latin1":case"binary":return Pl(this,e,i,t);case"base64":return Rl(this,e,i,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return xl(this,e,i,t);default:if(s)throw new TypeError("Unknown encoding: "+l);l=(""+l).toLowerCase(),s=!0}},ye.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},ye.prototype.slice=function(e,i){var t=this.length;(e=~~e)<0?(e+=t)<0&&(e=0):e>t&&(e=t),(i=i===void 0?t:~~i)<0?(i+=t)<0&&(i=0):i>t&&(i=t),i>>=0,i>>>=0,t||Ge(e,i,this.length);for(var l=this[e],h=1,s=0;++s>>=0,i>>>=0,t||Ge(e,i,this.length);for(var l=this[e+--i],h=1;i>0&&(h*=256);)l+=this[e+--i]*h;return l},ye.prototype.readUInt8=function(e,i){return e>>>=0,i||Ge(e,1,this.length),this[e]},ye.prototype.readUInt16LE=function(e,i){return e>>>=0,i||Ge(e,2,this.length),this[e]|this[e+1]<<8},ye.prototype.readUInt16BE=function(e,i){return e>>>=0,i||Ge(e,2,this.length),this[e]<<8|this[e+1]},ye.prototype.readUInt32LE=function(e,i){return e>>>=0,i||Ge(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},ye.prototype.readUInt32BE=function(e,i){return e>>>=0,i||Ge(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},ye.prototype.readIntLE=function(e,i,t){e>>>=0,i>>>=0,t||Ge(e,i,this.length);for(var l=this[e],h=1,s=0;++s=(h*=128)&&(l-=Math.pow(2,8*i)),l},ye.prototype.readIntBE=function(e,i,t){e>>>=0,i>>>=0,t||Ge(e,i,this.length);for(var l=i,h=1,s=this[e+--l];l>0&&(h*=256);)s+=this[e+--l]*h;return s>=(h*=128)&&(s-=Math.pow(2,8*i)),s},ye.prototype.readInt8=function(e,i){return e>>>=0,i||Ge(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},ye.prototype.readInt16LE=function(e,i){e>>>=0,i||Ge(e,2,this.length);var t=this[e]|this[e+1]<<8;return 32768&t?4294901760|t:t},ye.prototype.readInt16BE=function(e,i){e>>>=0,i||Ge(e,2,this.length);var t=this[e+1]|this[e]<<8;return 32768&t?4294901760|t:t},ye.prototype.readInt32LE=function(e,i){return e>>>=0,i||Ge(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},ye.prototype.readInt32BE=function(e,i){return e>>>=0,i||Ge(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},ye.prototype.readFloatLE=function(e,i){return e>>>=0,i||Ge(e,4,this.length),Jt.read(this,e,!0,23,4)},ye.prototype.readFloatBE=function(e,i){return e>>>=0,i||Ge(e,4,this.length),Jt.read(this,e,!1,23,4)},ye.prototype.readDoubleLE=function(e,i){return e>>>=0,i||Ge(e,8,this.length),Jt.read(this,e,!0,52,8)},ye.prototype.readDoubleBE=function(e,i){return e>>>=0,i||Ge(e,8,this.length),Jt.read(this,e,!1,52,8)},ye.prototype.writeUIntLE=function(e,i,t,l){e=+e,i>>>=0,t>>>=0,l||ut(this,e,i,t,Math.pow(2,8*t)-1,0);var h=1,s=0;for(this[i]=255&e;++s>>=0,t>>>=0,l||ut(this,e,i,t,Math.pow(2,8*t)-1,0);var h=t-1,s=1;for(this[i+h]=255&e;--h>=0&&(s*=256);)this[i+h]=e/s&255;return i+t},ye.prototype.writeUInt8=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,1,255,0),this[i]=255&e,i+1},ye.prototype.writeUInt16LE=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,2,65535,0),this[i]=255&e,this[i+1]=e>>>8,i+2},ye.prototype.writeUInt16BE=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,2,65535,0),this[i]=e>>>8,this[i+1]=255&e,i+2},ye.prototype.writeUInt32LE=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,4,4294967295,0),this[i+3]=e>>>24,this[i+2]=e>>>16,this[i+1]=e>>>8,this[i]=255&e,i+4},ye.prototype.writeUInt32BE=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,4,4294967295,0),this[i]=e>>>24,this[i+1]=e>>>16,this[i+2]=e>>>8,this[i+3]=255&e,i+4},ye.prototype.writeIntLE=function(e,i,t,l){if(e=+e,i>>>=0,!l){var h=Math.pow(2,8*t-1);ut(this,e,i,t,h-1,-h)}var s=0,r=1,o=0;for(this[i]=255&e;++s>0)-o&255;return i+t},ye.prototype.writeIntBE=function(e,i,t,l){if(e=+e,i>>>=0,!l){var h=Math.pow(2,8*t-1);ut(this,e,i,t,h-1,-h)}var s=t-1,r=1,o=0;for(this[i+s]=255&e;--s>=0&&(r*=256);)e<0&&o===0&&this[i+s+1]!==0&&(o=1),this[i+s]=(e/r>>0)-o&255;return i+t},ye.prototype.writeInt8=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,1,127,-128),e<0&&(e=255+e+1),this[i]=255&e,i+1},ye.prototype.writeInt16LE=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,2,32767,-32768),this[i]=255&e,this[i+1]=e>>>8,i+2},ye.prototype.writeInt16BE=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,2,32767,-32768),this[i]=e>>>8,this[i+1]=255&e,i+2},ye.prototype.writeInt32LE=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,4,2147483647,-2147483648),this[i]=255&e,this[i+1]=e>>>8,this[i+2]=e>>>16,this[i+3]=e>>>24,i+4},ye.prototype.writeInt32BE=function(e,i,t){return e=+e,i>>>=0,t||ut(this,e,i,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[i]=e>>>24,this[i+1]=e>>>16,this[i+2]=e>>>8,this[i+3]=255&e,i+4},ye.prototype.writeFloatLE=function(e,i,t){return ao(this,e,i,!0,t)},ye.prototype.writeFloatBE=function(e,i,t){return ao(this,e,i,!1,t)},ye.prototype.writeDoubleLE=function(e,i,t){return lo(this,e,i,!0,t)},ye.prototype.writeDoubleBE=function(e,i,t){return lo(this,e,i,!1,t)},ye.prototype.copy=function(e,i,t,l){if(!ye.isBuffer(e))throw new TypeError("argument should be a Buffer");if(t||(t=0),l||l===0||(l=this.length),i>=e.length&&(i=e.length),i||(i=0),l>0&&l=this.length)throw new RangeError("Index out of range");if(l<0)throw new RangeError("sourceEnd out of bounds");l>this.length&&(l=this.length),e.length-i=0;--s)e[s+i]=this[s+t];else Uint8Array.prototype.set.call(e,this.subarray(t,l),i);return h},ye.prototype.fill=function(e,i,t,l){if(typeof e=="string"){if(typeof i=="string"?(l=i,i=0,t=this.length):typeof t=="string"&&(l=t,t=this.length),l!==void 0&&typeof l!="string")throw new TypeError("encoding must be a string");if(typeof l=="string"&&!ye.isEncoding(l))throw new TypeError("Unknown encoding: "+l);if(e.length===1){var h=e.charCodeAt(0);(l==="utf8"&&h<128||l==="latin1")&&(e=h)}}else typeof e=="number"?e&=255:typeof e=="boolean"&&(e=Number(e));if(i<0||this.length>>=0,t=t===void 0?this.length:t>>>0,e||(e=0),typeof e=="number")for(s=i;s=0?(n>0&&(h.lastNeed=n-1),n):--o=0?(n>0&&(h.lastNeed=n-2),n):--o=0?(n>0&&(n===2?n=0:h.lastNeed=n-3),n):0}(this,e,i);if(!this.lastNeed)return e.toString("utf8",i);this.lastTotal=t;var l=e.length-(t-this.lastNeed);return e.copy(this.lastChar,0,l),e.toString("utf8",i,l)},dr.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length},ur.StringDecoder,ur.StringDecoder}),gs={};nr(gs,{StringDecoder:()=>ms,default:()=>ur});var ms,zl=et(()=>{fe(),pe(),de(),mo(),mo(),ms=ur.StringDecoder}),bs=Se((e,i)=>{fe(),pe(),de();var t=ir(),{PromisePrototypeThen:l,SymbolAsyncIterator:h,SymbolIterator:s}=Ye(),{Buffer:r}=(rt(),De(tt)),{ERR_INVALID_ARG_TYPE:o,ERR_STREAM_NULL_VALUES:n}=ht().codes;function a(f,p,g){let m;if(typeof p=="string"||p instanceof r)return new f({objectMode:!0,...g,read(){this.push(p),this.push(null)}});let b;if(p&&p[h])b=!0,m=p[h]();else if(p&&p[s])b=!1,m=p[s]();else throw new o("iterable",["Iterable"],p);let v=new f({objectMode:!0,highWaterMark:1,...g}),k=!1;v._read=function(){k||(k=!0,B())},v._destroy=function(w,U){l(N(w),()=>t.nextTick(U,w),q=>t.nextTick(U,q||w))};async function N(w){let U=w!=null,q=typeof m.throw=="function";if(U&&q){let{value:I,done:C}=await m.throw(w);if(await I,C)return}if(typeof m.return=="function"){let{value:I}=await m.return();await I}}async function B(){for(;;){try{let{value:w,done:U}=b?await m.next():m.next();if(U)v.push(null);else{let q=w&&typeof w.then=="function"?await w:w;if(q===null)throw k=!1,new n;if(v.push(q))continue;k=!1}}catch(w){v.destroy(w)}break}}return v}i.exports=a}),Kr=Se((e,i)=>{fe(),pe(),de();var t=ir(),{ArrayPrototypeIndexOf:l,NumberIsInteger:h,NumberIsNaN:s,NumberParseInt:r,ObjectDefineProperties:o,ObjectKeys:n,ObjectSetPrototypeOf:a,Promise:f,SafeSet:p,SymbolAsyncIterator:g,Symbol:m}=Ye();i.exports=O,O.ReadableState=X;var{EventEmitter:b}=(cr(),De(or)),{Stream:v,prependListener:k}=Ni(),{Buffer:N}=(rt(),De(tt)),{addAbortSignal:B}=Hr(),w=$t(),U=Pt().debuglog("stream",u=>{U=u}),q=kl(),I=hr(),{getHighWaterMark:C,getDefaultHighWaterMark:R}=Wi(),{aggregateTwoErrors:Q,codes:{ERR_INVALID_ARG_TYPE:te,ERR_METHOD_NOT_IMPLEMENTED:se,ERR_OUT_OF_RANGE:T,ERR_STREAM_PUSH_AFTER_EOF:K,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:re}}=ht(),{validateObject:J}=Vr(),_e=m("kPaused"),{StringDecoder:he}=(zl(),De(gs)),V=bs();a(O.prototype,v.prototype),a(O,v);var Ae=()=>{},{errorOrDestroy:ie}=I;function X(u,d,_){typeof _!="boolean"&&(_=d instanceof Rt()),this.objectMode=!!(u&&u.objectMode),_&&(this.objectMode=this.objectMode||!!(u&&u.readableObjectMode)),this.highWaterMark=u?C(this,u,"readableHighWaterMark",_):R(!1),this.buffer=new q,this.length=0,this.pipes=[],this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.constructed=!0,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this[_e]=null,this.errorEmitted=!1,this.emitClose=!u||u.emitClose!==!1,this.autoDestroy=!u||u.autoDestroy!==!1,this.destroyed=!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this.defaultEncoding=u&&u.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.multiAwaitDrain=!1,this.readingMore=!1,this.dataEmitted=!1,this.decoder=null,this.encoding=null,u&&u.encoding&&(this.decoder=new he(u.encoding),this.encoding=u.encoding)}function O(u){if(!(this instanceof O))return new O(u);let d=this instanceof Rt();this._readableState=new X(u,this,d),u&&(typeof u.read=="function"&&(this._read=u.read),typeof u.destroy=="function"&&(this._destroy=u.destroy),typeof u.construct=="function"&&(this._construct=u.construct),u.signal&&!d&&B(u.signal,this)),v.call(this,u),I.construct(this,()=>{this._readableState.needReadable&&ae(this,this._readableState)})}O.prototype.destroy=I.destroy,O.prototype._undestroy=I.undestroy,O.prototype._destroy=function(u,d){d(u)},O.prototype[b.captureRejectionSymbol]=function(u){this.destroy(u)},O.prototype.push=function(u,d){return G(this,u,d,!1)},O.prototype.unshift=function(u,d){return G(this,u,d,!0)};function G(u,d,_,P){U("readableAddChunk",d);let D=u._readableState,ce;if(D.objectMode||(typeof d=="string"?(_=_||D.defaultEncoding,D.encoding!==_&&(P&&D.encoding?d=N.from(d,_).toString(D.encoding):(d=N.from(d,_),_=""))):d instanceof N?_="":v._isUint8Array(d)?(d=v._uint8ArrayToBuffer(d),_=""):d!=null&&(ce=new te("chunk",["string","Buffer","Uint8Array"],d))),ce)ie(u,ce);else if(d===null)D.reading=!1,A(u,D);else if(D.objectMode||d&&d.length>0)if(P)if(D.endEmitted)ie(u,new re);else{if(D.destroyed||D.errored)return!1;ve(u,D,d,!0)}else if(D.ended)ie(u,new K);else{if(D.destroyed||D.errored)return!1;D.reading=!1,D.decoder&&!_?(d=D.decoder.write(d),D.objectMode||d.length!==0?ve(u,D,d,!1):ae(u,D)):ve(u,D,d,!1)}else P||(D.reading=!1,ae(u,D));return!D.ended&&(D.length0?(d.multiAwaitDrain?d.awaitDrainWriters.clear():d.awaitDrainWriters=null,d.dataEmitted=!0,u.emit("data",_)):(d.length+=d.objectMode?1:_.length,P?d.buffer.unshift(_):d.buffer.push(_),d.needReadable&&Y(u)),ae(u,d)}O.prototype.isPaused=function(){let u=this._readableState;return u[_e]===!0||u.flowing===!1},O.prototype.setEncoding=function(u){let d=new he(u);this._readableState.decoder=d,this._readableState.encoding=this._readableState.decoder.encoding;let _=this._readableState.buffer,P="";for(let D of _)P+=d.write(D);return _.clear(),P!==""&&_.push(P),this._readableState.length=P.length,this};var Ce=1073741824;function le(u){if(u>Ce)throw new T("size","<= 1GiB",u);return u--,u|=u>>>1,u|=u>>>2,u|=u>>>4,u|=u>>>8,u|=u>>>16,u++,u}function W(u,d){return u<=0||d.length===0&&d.ended?0:d.objectMode?1:s(u)?d.flowing&&d.length?d.buffer.first().length:d.length:u<=d.length?u:d.ended?d.length:0}O.prototype.read=function(u){U("read",u),u===void 0?u=NaN:h(u)||(u=r(u,10));let d=this._readableState,_=u;if(u>d.highWaterMark&&(d.highWaterMark=le(u)),u!==0&&(d.emittedReadable=!1),u===0&&d.needReadable&&((d.highWaterMark!==0?d.length>=d.highWaterMark:d.length>0)||d.ended))return U("read: emitReadable",d.length,d.ended),d.length===0&&d.ended?j(this):Y(this),null;if(u=W(u,d),u===0&&d.ended)return d.length===0&&j(this),null;let P=d.needReadable;if(U("need readable",P),(d.length===0||d.length-u0?D=S(u,d):D=null,D===null?(d.needReadable=d.length<=d.highWaterMark,u=0):(d.length-=u,d.multiAwaitDrain?d.awaitDrainWriters.clear():d.awaitDrainWriters=null),d.length===0&&(d.ended||(d.needReadable=!0),_!==u&&d.ended&&j(this)),D!==null&&!d.errorEmitted&&!d.closeEmitted&&(d.dataEmitted=!0,this.emit("data",D)),D};function A(u,d){if(U("onEofChunk"),!d.ended){if(d.decoder){let _=d.decoder.end();_&&_.length&&(d.buffer.push(_),d.length+=d.objectMode?1:_.length)}d.ended=!0,d.sync?Y(u):(d.needReadable=!1,d.emittedReadable=!0,ge(u))}}function Y(u){let d=u._readableState;U("emitReadable",d.needReadable,d.emittedReadable),d.needReadable=!1,d.emittedReadable||(U("emitReadable",d.flowing),d.emittedReadable=!0,t.nextTick(ge,u))}function ge(u){let d=u._readableState;U("emitReadable_",d.destroyed,d.length,d.ended),!d.destroyed&&!d.errored&&(d.length||d.ended)&&(u.emit("readable"),d.emittedReadable=!1),d.needReadable=!d.flowing&&!d.ended&&d.length<=d.highWaterMark,ue(u)}function ae(u,d){!d.readingMore&&d.constructed&&(d.readingMore=!0,t.nextTick(ne,u,d))}function ne(u,d){for(;!d.reading&&!d.ended&&(d.length1&&P.pipes.includes(u)&&(U("false write response, pause",P.awaitDrainWriters.size),P.awaitDrainWriters.add(u)),_.pause()),Me||(Me=Ee(_,u),u.on("drain",Me))}_.on("data",Je);function Je(Qe){U("ondata");let at=u.write(Qe);U("dest.write",at),at===!1&&Be()}function Ke(Qe){if(U("onerror",Qe),st(),u.removeListener("error",Ke),u.listenerCount("error")===0){let at=u._writableState||u._readableState;at&&!at.errorEmitted?ie(u,Qe):u.emit("error",Qe)}}k(u,"error",Ke);function Re(){u.removeListener("finish",Ze),st()}u.once("close",Re);function Ze(){U("onfinish"),u.removeListener("close",Re),st()}u.once("finish",Ze);function st(){U("unpipe"),_.unpipe(u)}return u.emit("pipe",_),u.writableNeedDrain===!0?P.flowing&&Be():P.flowing||(U("pipe resume"),_.resume()),u};function Ee(u,d){return function(){let _=u._readableState;_.awaitDrainWriters===d?(U("pipeOnDrain",1),_.awaitDrainWriters=null):_.multiAwaitDrain&&(U("pipeOnDrain",_.awaitDrainWriters.size),_.awaitDrainWriters.delete(d)),(!_.awaitDrainWriters||_.awaitDrainWriters.size===0)&&u.listenerCount("data")&&u.resume()}}O.prototype.unpipe=function(u){let d=this._readableState,_={hasUnpiped:!1};if(d.pipes.length===0)return this;if(!u){let D=d.pipes;d.pipes=[],this.pause();for(let ce=0;ce0,P.flowing!==!1&&this.resume()):u==="readable"&&!P.endEmitted&&!P.readableListening&&(P.readableListening=P.needReadable=!0,P.flowing=!1,P.emittedReadable=!1,U("on readable",P.length,P.reading),P.length?Y(this):P.reading||t.nextTick(x,this)),_},O.prototype.addListener=O.prototype.on,O.prototype.removeListener=function(u,d){let _=v.prototype.removeListener.call(this,u,d);return u==="readable"&&t.nextTick(me,this),_},O.prototype.off=O.prototype.removeListener,O.prototype.removeAllListeners=function(u){let d=v.prototype.removeAllListeners.apply(this,arguments);return(u==="readable"||u===void 0)&&t.nextTick(me,this),d};function me(u){let d=u._readableState;d.readableListening=u.listenerCount("readable")>0,d.resumeScheduled&&d[_e]===!1?d.flowing=!0:u.listenerCount("data")>0?u.resume():d.readableListening||(d.flowing=null)}function x(u){U("readable nexttick read 0"),u.read(0)}O.prototype.resume=function(){let u=this._readableState;return u.flowing||(U("resume"),u.flowing=!u.readableListening,F(this,u)),u[_e]=!1,this};function F(u,d){d.resumeScheduled||(d.resumeScheduled=!0,t.nextTick($,u,d))}function $(u,d){U("resume",d.reading),d.reading||u.read(0),d.resumeScheduled=!1,u.emit("resume"),ue(u),d.flowing&&!d.reading&&u.read(0)}O.prototype.pause=function(){return U("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(U("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[_e]=!0,this};function ue(u){let d=u._readableState;for(U("flow",d.flowing);d.flowing&&u.read()!==null;);}O.prototype.wrap=function(u){let d=!1;u.on("data",P=>{!this.push(P)&&u.pause&&(d=!0,u.pause())}),u.on("end",()=>{this.push(null)}),u.on("error",P=>{ie(this,P)}),u.on("close",()=>{this.destroy()}),u.on("destroy",()=>{this.destroy()}),this._read=()=>{d&&u.resume&&(d=!1,u.resume())};let _=n(u);for(let P=1;P<_.length;P++){let D=_[P];this[D]===void 0&&typeof u[D]=="function"&&(this[D]=u[D].bind(u))}return this},O.prototype[g]=function(){return ee(this)},O.prototype.iterator=function(u){return u!==void 0&&J(u,"options"),ee(this,u)};function ee(u,d){typeof u.read!="function"&&(u=O.wrap(u,{objectMode:!0}));let _=L(u,d);return _.stream=u,_}async function*L(u,d){let _=Ae;function P(Pe){this===u?(_(),_=Ae):_=Pe}u.on("readable",P);let D,ce=w(u,{writable:!1},Pe=>{D=Pe?Q(D,Pe):null,_(),_=Ae});try{for(;;){let Pe=u.destroyed?null:u.read();if(Pe!==null)yield Pe;else{if(D)throw D;if(D===null)return;await new f(P)}}}catch(Pe){throw D=Q(D,Pe),D}finally{(D||d?.destroyOnReturn!==!1)&&(D===void 0||u._readableState.autoDestroy)?I.destroyer(u,null):(u.off("readable",P),ce())}}o(O.prototype,{readable:{__proto__:null,get(){let u=this._readableState;return!!u&&u.readable!==!1&&!u.destroyed&&!u.errorEmitted&&!u.endEmitted},set(u){this._readableState&&(this._readableState.readable=!!u)}},readableDidRead:{__proto__:null,enumerable:!1,get:function(){return this._readableState.dataEmitted}},readableAborted:{__proto__:null,enumerable:!1,get:function(){return!!(this._readableState.readable!==!1&&(this._readableState.destroyed||this._readableState.errored)&&!this._readableState.endEmitted)}},readableHighWaterMark:{__proto__:null,enumerable:!1,get:function(){return this._readableState.highWaterMark}},readableBuffer:{__proto__:null,enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}},readableFlowing:{__proto__:null,enumerable:!1,get:function(){return this._readableState.flowing},set:function(u){this._readableState&&(this._readableState.flowing=u)}},readableLength:{__proto__:null,enumerable:!1,get(){return this._readableState.length}},readableObjectMode:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.objectMode:!1}},readableEncoding:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.encoding:null}},errored:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.errored:null}},closed:{__proto__:null,get(){return this._readableState?this._readableState.closed:!1}},destroyed:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.destroyed:!1},set(u){this._readableState&&(this._readableState.destroyed=u)}},readableEnded:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.endEmitted:!1}}}),o(X.prototype,{pipesCount:{__proto__:null,get(){return this.pipes.length}},paused:{__proto__:null,get(){return this[_e]!==!1},set(u){this[_e]=!!u}}}),O._fromList=S;function S(u,d){if(d.length===0)return null;let _;return d.objectMode?_=d.buffer.shift():!u||u>=d.length?(d.decoder?_=d.buffer.join(""):d.buffer.length===1?_=d.buffer.first():_=d.buffer.concat(d.length),d.buffer.clear()):_=d.buffer.consume(u,d.decoder),_}function j(u){let d=u._readableState;U("endReadable",d.endEmitted),d.endEmitted||(d.ended=!0,t.nextTick(z,d,u))}function z(u,d){if(U("endReadableNT",u.endEmitted,u.length),!u.errored&&!u.closeEmitted&&!u.endEmitted&&u.length===0){if(u.endEmitted=!0,d.emit("end"),d.writable&&d.allowHalfOpen===!1)t.nextTick(Z,d);else if(u.autoDestroy){let _=d._writableState;(!_||_.autoDestroy&&(_.finished||_.writable===!1))&&d.destroy()}}}function Z(u){u.writable&&!u.writableEnded&&!u.destroyed&&u.end()}O.from=function(u,d){return V(O,u,d)};var oe;function c(){return oe===void 0&&(oe={}),oe}O.fromWeb=function(u,d){return c().newStreamReadableFromReadableStream(u,d)},O.toWeb=function(u,d){return c().newReadableStreamFromStreamReadable(u,d)},O.wrap=function(u,d){var _,P;return new O({objectMode:(_=(P=u.readableObjectMode)!==null&&P!==void 0?P:u.objectMode)!==null&&_!==void 0?_:!0,...d,destroy(D,ce){I.destroyer(u,D),ce(D)}}).wrap(u)}}),ys=Se((e,i)=>{fe(),pe(),de();var t=ir(),{ArrayPrototypeSlice:l,Error:h,FunctionPrototypeSymbolHasInstance:s,ObjectDefineProperty:r,ObjectDefineProperties:o,ObjectSetPrototypeOf:n,StringPrototypeToLowerCase:a,Symbol:f,SymbolHasInstance:p}=Ye();i.exports=he,he.WritableState=J;var{EventEmitter:g}=(cr(),De(or)),m=Ni().Stream,{Buffer:b}=(rt(),De(tt)),v=hr(),{addAbortSignal:k}=Hr(),{getHighWaterMark:N,getDefaultHighWaterMark:B}=Wi(),{ERR_INVALID_ARG_TYPE:w,ERR_METHOD_NOT_IMPLEMENTED:U,ERR_MULTIPLE_CALLBACK:q,ERR_STREAM_CANNOT_PIPE:I,ERR_STREAM_DESTROYED:C,ERR_STREAM_ALREADY_FINISHED:R,ERR_STREAM_NULL_VALUES:Q,ERR_STREAM_WRITE_AFTER_END:te,ERR_UNKNOWN_ENCODING:se}=ht().codes,{errorOrDestroy:T}=v;n(he.prototype,m.prototype),n(he,m);function K(){}var re=f("kOnFinished");function J(x,F,$){typeof $!="boolean"&&($=F instanceof Rt()),this.objectMode=!!(x&&x.objectMode),$&&(this.objectMode=this.objectMode||!!(x&&x.writableObjectMode)),this.highWaterMark=x?N(this,x,"writableHighWaterMark",$):B(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;let ue=!!(x&&x.decodeStrings===!1);this.decodeStrings=!ue,this.defaultEncoding=x&&x.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=O.bind(void 0,F),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,_e(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!x||x.emitClose!==!1,this.autoDestroy=!x||x.autoDestroy!==!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[re]=[]}function _e(x){x.buffered=[],x.bufferedIndex=0,x.allBuffers=!0,x.allNoop=!0}J.prototype.getBuffer=function(){return l(this.buffered,this.bufferedIndex)},r(J.prototype,"bufferedRequestCount",{__proto__:null,get(){return this.buffered.length-this.bufferedIndex}});function he(x){let F=this instanceof Rt();if(!F&&!s(he,this))return new he(x);this._writableState=new J(x,this,F),x&&(typeof x.write=="function"&&(this._write=x.write),typeof x.writev=="function"&&(this._writev=x.writev),typeof x.destroy=="function"&&(this._destroy=x.destroy),typeof x.final=="function"&&(this._final=x.final),typeof x.construct=="function"&&(this._construct=x.construct),x.signal&&k(x.signal,this)),m.call(this,x),v.construct(this,()=>{let $=this._writableState;$.writing||le(this,$),ge(this,$)})}r(he,p,{__proto__:null,value:function(x){return s(this,x)?!0:this!==he?!1:x&&x._writableState instanceof J}}),he.prototype.pipe=function(){T(this,new I)};function V(x,F,$,ue){let ee=x._writableState;if(typeof $=="function")ue=$,$=ee.defaultEncoding;else{if(!$)$=ee.defaultEncoding;else if($!=="buffer"&&!b.isEncoding($))throw new se($);typeof ue!="function"&&(ue=K)}if(F===null)throw new Q;if(!ee.objectMode)if(typeof F=="string")ee.decodeStrings!==!1&&(F=b.from(F,$),$="buffer");else if(F instanceof b)$="buffer";else if(m._isUint8Array(F))F=m._uint8ArrayToBuffer(F),$="buffer";else throw new w("chunk",["string","Buffer","Uint8Array"],F);let L;return ee.ending?L=new te:ee.destroyed&&(L=new C("write")),L?(t.nextTick(ue,L),T(x,L,!0),L):(ee.pendingcb++,Ae(x,ee,F,$,ue))}he.prototype.write=function(x,F,$){return V(this,x,F,$)===!0},he.prototype.cork=function(){this._writableState.corked++},he.prototype.uncork=function(){let x=this._writableState;x.corked&&(x.corked--,x.writing||le(this,x))},he.prototype.setDefaultEncoding=function(x){if(typeof x=="string"&&(x=a(x)),!b.isEncoding(x))throw new se(x);return this._writableState.defaultEncoding=x,this};function Ae(x,F,$,ue,ee){let L=F.objectMode?1:$.length;F.length+=L;let S=F.length$.bufferedIndex&&le(x,$),ue?$.afterWriteTickInfo!==null&&$.afterWriteTickInfo.cb===ee?$.afterWriteTickInfo.count++:($.afterWriteTickInfo={count:1,cb:ee,stream:x,state:$},t.nextTick(G,$.afterWriteTickInfo)):ve(x,$,1,ee))}function G({stream:x,state:F,count:$,cb:ue}){return F.afterWriteTickInfo=null,ve(x,F,$,ue)}function ve(x,F,$,ue){for(!F.ending&&!x.destroyed&&F.length===0&&F.needDrain&&(F.needDrain=!1,x.emit("drain"));$-- >0;)F.pendingcb--,ue();F.destroyed&&Ce(F),ge(x,F)}function Ce(x){if(x.writing)return;for(let ee=x.bufferedIndex;ee1&&x._writev){F.pendingcb-=L-1;let j=F.allNoop?K:Z=>{for(let oe=S;oe<$.length;++oe)$[oe].callback(Z)},z=F.allNoop&&S===0?$:l($,S);z.allBuffers=F.allBuffers,ie(x,F,!0,F.length,z,"",j),_e(F)}else{do{let{chunk:j,encoding:z,callback:Z}=$[S];$[S++]=null;let oe=ee?1:j.length;ie(x,F,!1,oe,j,z,Z)}while(S<$.length&&!F.writing);S===$.length?_e(F):S>256?($.splice(0,S),F.bufferedIndex=0):F.bufferedIndex=S}F.bufferProcessing=!1}he.prototype._write=function(x,F,$){if(this._writev)this._writev([{chunk:x,encoding:F}],$);else throw new U("_write()")},he.prototype._writev=null,he.prototype.end=function(x,F,$){let ue=this._writableState;typeof x=="function"?($=x,x=null,F=null):typeof F=="function"&&($=F,F=null);let ee;if(x!=null){let L=V(this,x,F);L instanceof h&&(ee=L)}return ue.corked&&(ue.corked=1,this.uncork()),ee||(!ue.errored&&!ue.ending?(ue.ending=!0,ge(this,ue,!0),ue.ended=!0):ue.finished?ee=new R("end"):ue.destroyed&&(ee=new C("end"))),typeof $=="function"&&(ee||ue.finished?t.nextTick($,ee):ue[re].push($)),this};function W(x){return x.ending&&!x.destroyed&&x.constructed&&x.length===0&&!x.errored&&x.buffered.length===0&&!x.finished&&!x.writing&&!x.errorEmitted&&!x.closeEmitted}function A(x,F){let $=!1;function ue(ee){if($){T(x,ee??q());return}if($=!0,F.pendingcb--,ee){let L=F[re].splice(0);for(let S=0;S{W(ee)?ae(ue,ee):ee.pendingcb--},x,F)):W(F)&&(F.pendingcb++,ae(x,F))))}function ae(x,F){F.pendingcb--,F.finished=!0;let $=F[re].splice(0);for(let ue=0;ue<$.length;ue++)$[ue]();if(x.emit("finish"),F.autoDestroy){let ue=x._readableState;(!ue||ue.autoDestroy&&(ue.endEmitted||ue.readable===!1))&&x.destroy()}}o(he.prototype,{closed:{__proto__:null,get(){return this._writableState?this._writableState.closed:!1}},destroyed:{__proto__:null,get(){return this._writableState?this._writableState.destroyed:!1},set(x){this._writableState&&(this._writableState.destroyed=x)}},writable:{__proto__:null,get(){let x=this._writableState;return!!x&&x.writable!==!1&&!x.destroyed&&!x.errored&&!x.ending&&!x.ended},set(x){this._writableState&&(this._writableState.writable=!!x)}},writableFinished:{__proto__:null,get(){return this._writableState?this._writableState.finished:!1}},writableObjectMode:{__proto__:null,get(){return this._writableState?this._writableState.objectMode:!1}},writableBuffer:{__proto__:null,get(){return this._writableState&&this._writableState.getBuffer()}},writableEnded:{__proto__:null,get(){return this._writableState?this._writableState.ending:!1}},writableNeedDrain:{__proto__:null,get(){let x=this._writableState;return x?!x.destroyed&&!x.ending&&x.needDrain:!1}},writableHighWaterMark:{__proto__:null,get(){return this._writableState&&this._writableState.highWaterMark}},writableCorked:{__proto__:null,get(){return this._writableState?this._writableState.corked:0}},writableLength:{__proto__:null,get(){return this._writableState&&this._writableState.length}},errored:{__proto__:null,enumerable:!1,get(){return this._writableState?this._writableState.errored:null}},writableAborted:{__proto__:null,enumerable:!1,get:function(){return!!(this._writableState.writable!==!1&&(this._writableState.destroyed||this._writableState.errored)&&!this._writableState.finished)}}});var ne=v.destroy;he.prototype.destroy=function(x,F){let $=this._writableState;return!$.destroyed&&($.bufferedIndex<$.buffered.length||$[re].length)&&t.nextTick(Ce,$),ne.call(this,x,F),this},he.prototype._undestroy=v.undestroy,he.prototype._destroy=function(x,F){F(x)},he.prototype[g.captureRejectionSymbol]=function(x){this.destroy(x)};var Ee;function me(){return Ee===void 0&&(Ee={}),Ee}he.fromWeb=function(x,F){return me().newStreamWritableFromWritableStream(x,F)},he.toWeb=function(x){return me().newWritableStreamFromStreamWritable(x)}}),Kl=Se((e,i)=>{fe(),pe(),de();var t=ir(),l=(rt(),De(tt)),{isReadable:h,isWritable:s,isIterable:r,isNodeStream:o,isReadableNodeStream:n,isWritableNodeStream:a,isDuplexNodeStream:f}=Mt(),p=$t(),{AbortError:g,codes:{ERR_INVALID_ARG_TYPE:m,ERR_INVALID_RETURN_VALUE:b}}=ht(),{destroyer:v}=hr(),k=Rt(),N=Kr(),{createDeferredPromise:B}=Pt(),w=bs(),U=globalThis.Blob||l.Blob,q=typeof U<"u"?function(se){return se instanceof U}:function(se){return!1},I=globalThis.AbortController||Li().AbortController,{FunctionPrototypeCall:C}=Ye(),R=class extends k{constructor(se){super(se),se?.readable===!1&&(this._readableState.readable=!1,this._readableState.ended=!0,this._readableState.endEmitted=!0),se?.writable===!1&&(this._writableState.writable=!1,this._writableState.ending=!0,this._writableState.ended=!0,this._writableState.finished=!0)}};i.exports=function se(T,K){if(f(T))return T;if(n(T))return te({readable:T});if(a(T))return te({writable:T});if(o(T))return te({writable:!1,readable:!1});if(typeof T=="function"){let{value:J,write:_e,final:he,destroy:V}=Q(T);if(r(J))return w(R,J,{objectMode:!0,write:_e,final:he,destroy:V});let Ae=J?.then;if(typeof Ae=="function"){let ie,X=C(Ae,J,O=>{if(O!=null)throw new b("nully","body",O)},O=>{v(ie,O)});return ie=new R({objectMode:!0,readable:!1,write:_e,final(O){he(async()=>{try{await X,t.nextTick(O,null)}catch(G){t.nextTick(O,G)}})},destroy:V})}throw new b("Iterable, AsyncIterable or AsyncFunction",K,J)}if(q(T))return se(T.arrayBuffer());if(r(T))return w(R,T,{objectMode:!0,writable:!1});if(typeof T?.writable=="object"||typeof T?.readable=="object"){let J=T!=null&&T.readable?n(T?.readable)?T?.readable:se(T.readable):void 0,_e=T!=null&&T.writable?a(T?.writable)?T?.writable:se(T.writable):void 0;return te({readable:J,writable:_e})}let re=T?.then;if(typeof re=="function"){let J;return C(re,T,_e=>{_e!=null&&J.push(_e),J.push(null)},_e=>{v(J,_e)}),J=new R({objectMode:!0,writable:!1,read(){}})}throw new m(K,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],T)};function Q(se){let{promise:T,resolve:K}=B(),re=new I,J=re.signal;return{value:se(async function*(){for(;;){let _e=T;T=null;let{chunk:he,done:V,cb:Ae}=await _e;if(t.nextTick(Ae),V)return;if(J.aborted)throw new g(void 0,{cause:J.reason});({promise:T,resolve:K}=B()),yield he}}(),{signal:J}),write(_e,he,V){let Ae=K;K=null,Ae({chunk:_e,done:!1,cb:V})},final(_e){let he=K;K=null,he({done:!0,cb:_e})},destroy(_e,he){re.abort(),he(_e)}}}function te(se){let T=se.readable&&typeof se.readable.read!="function"?N.wrap(se.readable):se.readable,K=se.writable,re=!!h(T),J=!!s(K),_e,he,V,Ae,ie;function X(O){let G=Ae;Ae=null,G?G(O):O&&ie.destroy(O)}return ie=new R({readableObjectMode:!!(T!=null&&T.readableObjectMode),writableObjectMode:!!(K!=null&&K.writableObjectMode),readable:re,writable:J}),J&&(p(K,O=>{J=!1,O&&v(T,O),X(O)}),ie._write=function(O,G,ve){K.write(O,G)?ve():_e=ve},ie._final=function(O){K.end(),he=O},K.on("drain",function(){if(_e){let O=_e;_e=null,O()}}),K.on("finish",function(){if(he){let O=he;he=null,O()}})),re&&(p(T,O=>{re=!1,O&&v(T,O),X(O)}),T.on("readable",function(){if(V){let O=V;V=null,O()}}),T.on("end",function(){ie.push(null)}),ie._read=function(){for(;;){let O=T.read();if(O===null){V=ie._read;return}if(!ie.push(O))return}}),ie._destroy=function(O,G){!O&&Ae!==null&&(O=new g),V=null,_e=null,he=null,Ae===null?G(O):(Ae=G,v(K,O),v(T,O))},ie}}),Rt=Se((e,i)=>{fe(),pe(),de();var{ObjectDefineProperties:t,ObjectGetOwnPropertyDescriptor:l,ObjectKeys:h,ObjectSetPrototypeOf:s}=Ye();i.exports=n;var r=Kr(),o=ys();s(n.prototype,r.prototype),s(n,r);{let g=h(o.prototype);for(let m=0;m{fe(),pe(),de();var{ObjectSetPrototypeOf:t,Symbol:l}=Ye();i.exports=n;var{ERR_METHOD_NOT_IMPLEMENTED:h}=ht().codes,s=Rt(),{getHighWaterMark:r}=Wi();t(n.prototype,s.prototype),t(n,s);var o=l("kCallback");function n(p){if(!(this instanceof n))return new n(p);let g=p?r(this,p,"readableHighWaterMark",!0):null;g===0&&(p={...p,highWaterMark:null,readableHighWaterMark:g,writableHighWaterMark:p.writableHighWaterMark||0}),s.call(this,p),this._readableState.sync=!1,this[o]=null,p&&(typeof p.transform=="function"&&(this._transform=p.transform),typeof p.flush=="function"&&(this._flush=p.flush)),this.on("prefinish",f)}function a(p){typeof this._flush=="function"&&!this.destroyed?this._flush((g,m)=>{if(g){p?p(g):this.destroy(g);return}m!=null&&this.push(m),this.push(null),p&&p()}):(this.push(null),p&&p())}function f(){this._final!==a&&a.call(this)}n.prototype._final=a,n.prototype._transform=function(p,g,m){throw new h("_transform()")},n.prototype._write=function(p,g,m){let b=this._readableState,v=this._writableState,k=b.length;this._transform(p,g,(N,B)=>{if(N){m(N);return}B!=null&&this.push(B),v.ended||k===b.length||b.length{fe(),pe(),de();var{ObjectSetPrototypeOf:t}=Ye();i.exports=h;var l=vs();t(h.prototype,l.prototype),t(h,l);function h(s){if(!(this instanceof h))return new h(s);l.call(this,s)}h.prototype._transform=function(s,r,o){o(null,s)}}),$i=Se((e,i)=>{fe(),pe(),de();var t=ir(),{ArrayIsArray:l,Promise:h,SymbolAsyncIterator:s}=Ye(),r=$t(),{once:o}=Pt(),n=hr(),a=Rt(),{aggregateTwoErrors:f,codes:{ERR_INVALID_ARG_TYPE:p,ERR_INVALID_RETURN_VALUE:g,ERR_MISSING_ARGS:m,ERR_STREAM_DESTROYED:b,ERR_STREAM_PREMATURE_CLOSE:v},AbortError:k}=ht(),{validateFunction:N,validateAbortSignal:B}=Vr(),{isIterable:w,isReadable:U,isReadableNodeStream:q,isNodeStream:I,isTransformStream:C,isWebStream:R,isReadableStream:Q,isReadableEnded:te}=Mt(),se=globalThis.AbortController||Li().AbortController,T,K;function re(G,ve,Ce){let le=!1;G.on("close",()=>{le=!0});let W=r(G,{readable:ve,writable:Ce},A=>{le=!A});return{destroy:A=>{le||(le=!0,n.destroyer(G,A||new b("pipe")))},cleanup:W}}function J(G){return N(G[G.length-1],"streams[stream.length - 1]"),G.pop()}function _e(G){if(w(G))return G;if(q(G))return he(G);throw new p("val",["Readable","Iterable","AsyncIterable"],G)}async function*he(G){K||(K=Kr()),yield*K.prototype[s].call(G)}async function V(G,ve,Ce,{end:le}){let W,A=null,Y=ne=>{if(ne&&(W=ne),A){let Ee=A;A=null,Ee()}},ge=()=>new h((ne,Ee)=>{W?Ee(W):A=()=>{W?Ee(W):ne()}});ve.on("drain",Y);let ae=r(ve,{readable:!1},Y);try{ve.writableNeedDrain&&await ge();for await(let ne of G)ve.write(ne)||await ge();le&&ve.end(),await ge(),Ce()}catch(ne){Ce(W!==ne?f(W,ne):ne)}finally{ae(),ve.off("drain",Y)}}async function Ae(G,ve,Ce,{end:le}){C(ve)&&(ve=ve.writable);let W=ve.getWriter();try{for await(let A of G)await W.ready,W.write(A).catch(()=>{});await W.ready,le&&await W.close(),Ce()}catch(A){try{await W.abort(A),Ce(A)}catch(Y){Ce(Y)}}}function ie(...G){return X(G,o(J(G)))}function X(G,ve,Ce){if(G.length===1&&l(G[0])&&(G=G[0]),G.length<2)throw new m("streams");let le=new se,W=le.signal,A=Ce?.signal,Y=[];B(A,"options.signal");function ge(){F(new k)}A?.addEventListener("abort",ge);let ae,ne,Ee=[],me=0;function x(L){F(L,--me===0)}function F(L,S){if(L&&(!ae||ae.code==="ERR_STREAM_PREMATURE_CLOSE")&&(ae=L),!(!ae&&!S)){for(;Ee.length;)Ee.shift()(ae);A?.removeEventListener("abort",ge),le.abort(),S&&(ae||Y.forEach(j=>j()),t.nextTick(ve,ae,ne))}}let $;for(let L=0;L0,Z=j||Ce?.end!==!1,oe=L===G.length-1;if(I(S)){let c=function(u){u&&u.name!=="AbortError"&&u.code!=="ERR_STREAM_PREMATURE_CLOSE"&&x(u)};if(Z){let{destroy:u,cleanup:d}=re(S,j,z);Ee.push(u),U(S)&&oe&&Y.push(d)}S.on("error",c),U(S)&&oe&&Y.push(()=>{S.removeListener("error",c)})}if(L===0)if(typeof S=="function"){if($=S({signal:W}),!w($))throw new g("Iterable, AsyncIterable or Stream","source",$)}else w(S)||q(S)||C(S)?$=S:$=a.from(S);else if(typeof S=="function"){if(C($)){var ue;$=_e((ue=$)===null||ue===void 0?void 0:ue.readable)}else $=_e($);if($=S($,{signal:W}),j){if(!w($,!0))throw new g("AsyncIterable",`transform[${L-1}]`,$)}else{var ee;T||(T=ws());let c=new T({objectMode:!0}),u=(ee=$)===null||ee===void 0?void 0:ee.then;if(typeof u=="function")me++,u.call($,P=>{ne=P,P!=null&&c.write(P),Z&&c.end(),t.nextTick(x)},P=>{c.destroy(P),t.nextTick(x,P)});else if(w($,!0))me++,V($,c,x,{end:Z});else if(Q($)||C($)){let P=$.readable||$;me++,V(P,c,x,{end:Z})}else throw new g("AsyncIterable or Promise","destination",$);$=c;let{destroy:d,cleanup:_}=re($,!1,!0);Ee.push(d),oe&&Y.push(_)}}else if(I(S)){if(q($)){me+=2;let c=O($,S,x,{end:Z});U(S)&&oe&&Y.push(c)}else if(C($)||Q($)){let c=$.readable||$;me++,V(c,S,x,{end:Z})}else if(w($))me++,V($,S,x,{end:Z});else throw new p("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],$);$=S}else if(R(S)){if(q($))me++,Ae(_e($),S,x,{end:Z});else if(Q($)||w($))me++,Ae($,S,x,{end:Z});else if(C($))me++,Ae($.readable,S,x,{end:Z});else throw new p("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],$);$=S}else $=a.from(S)}return(W!=null&&W.aborted||A!=null&&A.aborted)&&t.nextTick(ge),$}function O(G,ve,Ce,{end:le}){let W=!1;if(ve.on("close",()=>{W||Ce(new v)}),G.pipe(ve,{end:!1}),le){let A=function(){W=!0,ve.end()};te(G)?t.nextTick(A):G.once("end",A)}else Ce();return r(G,{readable:!0,writable:!1},A=>{let Y=G._readableState;A&&A.code==="ERR_STREAM_PREMATURE_CLOSE"&&Y&&Y.ended&&!Y.errored&&!Y.errorEmitted?G.once("end",Ce).once("error",Ce):Ce(A)}),r(ve,{readable:!1,writable:!0},Ce)}i.exports={pipelineImpl:X,pipeline:ie}}),_s=Se((e,i)=>{fe(),pe(),de();var{pipeline:t}=$i(),l=Rt(),{destroyer:h}=hr(),{isNodeStream:s,isReadable:r,isWritable:o,isWebStream:n,isTransformStream:a,isWritableStream:f,isReadableStream:p}=Mt(),{AbortError:g,codes:{ERR_INVALID_ARG_VALUE:m,ERR_MISSING_ARGS:b}}=ht(),v=$t();i.exports=function(...k){if(k.length===0)throw new b("streams");if(k.length===1)return l.from(k[0]);let N=[...k];if(typeof k[0]=="function"&&(k[0]=l.from(k[0])),typeof k[k.length-1]=="function"){let T=k.length-1;k[T]=l.from(k[T])}for(let T=0;T0&&!(o(k[T])||f(k[T])||a(k[T])))throw new m(`streams[${T}]`,N[T],"must be writable")}let B,w,U,q,I;function C(T){let K=q;q=null,K?K(T):T?I.destroy(T):!se&&!te&&I.destroy()}let R=k[0],Q=t(k,C),te=!!(o(R)||f(R)||a(R)),se=!!(r(Q)||p(Q)||a(Q));if(I=new l({writableObjectMode:!!(R!=null&&R.writableObjectMode),readableObjectMode:!!(Q!=null&&Q.writableObjectMode),writable:te,readable:se}),te){if(s(R))I._write=function(K,re,J){R.write(K,re)?J():B=J},I._final=function(K){R.end(),w=K},R.on("drain",function(){if(B){let K=B;B=null,K()}});else if(n(R)){let K=(a(R)?R.writable:R).getWriter();I._write=async function(re,J,_e){try{await K.ready,K.write(re).catch(()=>{}),_e()}catch(he){_e(he)}},I._final=async function(re){try{await K.ready,K.close().catch(()=>{}),w=re}catch(J){re(J)}}}let T=a(Q)?Q.readable:Q;v(T,()=>{if(w){let K=w;w=null,K()}})}if(se){if(s(Q))Q.on("readable",function(){if(U){let T=U;U=null,T()}}),Q.on("end",function(){I.push(null)}),I._read=function(){for(;;){let T=Q.read();if(T===null){U=I._read;return}if(!I.push(T))return}};else if(n(Q)){let T=(a(Q)?Q.readable:Q).getReader();I._read=async function(){for(;;)try{let{value:K,done:re}=await T.read();if(!I.push(K))return;if(re){I.push(null);return}}catch{return}}}}return I._destroy=function(T,K){!T&&q!==null&&(T=new g),U=null,B=null,w=null,q===null?K(T):(q=K,s(Q)&&h(Q,T))},I}}),Yl=Se((e,i)=>{fe(),pe(),de();var t=globalThis.AbortController||Li().AbortController,{codes:{ERR_INVALID_ARG_VALUE:l,ERR_INVALID_ARG_TYPE:h,ERR_MISSING_ARGS:s,ERR_OUT_OF_RANGE:r},AbortError:o}=ht(),{validateAbortSignal:n,validateInteger:a,validateObject:f}=Vr(),p=Ye().Symbol("kWeak"),{finished:g}=$t(),m=_s(),{addAbortSignalNoValidate:b}=Hr(),{isWritable:v,isNodeStream:k}=Mt(),{ArrayPrototypePush:N,MathFloor:B,Number:w,NumberIsNaN:U,Promise:q,PromiseReject:I,PromisePrototypeThen:C,Symbol:R}=Ye(),Q=R("kEmpty"),te=R("kEof");function se(le,W){if(W!=null&&f(W,"options"),W?.signal!=null&&n(W.signal,"options.signal"),k(le)&&!v(le))throw new l("stream",le,"must be writable");let A=m(this,le);return W!=null&&W.signal&&b(W.signal,A),A}function T(le,W){if(typeof le!="function")throw new h("fn",["Function","AsyncFunction"],le);W!=null&&f(W,"options"),W?.signal!=null&&n(W.signal,"options.signal");let A=1;return W?.concurrency!=null&&(A=B(W.concurrency)),a(A,"concurrency",1),(async function*(){var Y,ge;let ae=new t,ne=this,Ee=[],me=ae.signal,x={signal:me},F=()=>ae.abort();W!=null&&(Y=W.signal)!==null&&Y!==void 0&&Y.aborted&&F(),W==null||(ge=W.signal)===null||ge===void 0||ge.addEventListener("abort",F);let $,ue,ee=!1;function L(){ee=!0}async function S(){try{for await(let Z of ne){var j;if(ee)return;if(me.aborted)throw new o;try{Z=le(Z,x)}catch(oe){Z=I(oe)}Z!==Q&&(typeof((j=Z)===null||j===void 0?void 0:j.catch)=="function"&&Z.catch(L),Ee.push(Z),$&&($(),$=null),!ee&&Ee.length&&Ee.length>=A&&await new q(oe=>{ue=oe}))}Ee.push(te)}catch(Z){let oe=I(Z);C(oe,void 0,L),Ee.push(oe)}finally{var z;ee=!0,$&&($(),$=null),W==null||(z=W.signal)===null||z===void 0||z.removeEventListener("abort",F)}}S();try{for(;;){for(;Ee.length>0;){let j=await Ee[0];if(j===te)return;if(me.aborted)throw new o;j!==Q&&(yield j),Ee.shift(),ue&&(ue(),ue=null)}await new q(j=>{$=j})}}finally{ae.abort(),ee=!0,ue&&(ue(),ue=null)}}).call(this)}function K(le=void 0){return le!=null&&f(le,"options"),le?.signal!=null&&n(le.signal,"options.signal"),(async function*(){let W=0;for await(let Y of this){var A;if(le!=null&&(A=le.signal)!==null&&A!==void 0&&A.aborted)throw new o({cause:le.signal.reason});yield[W++,Y]}}).call(this)}async function re(le,W=void 0){for await(let A of V.call(this,le,W))return!0;return!1}async function J(le,W=void 0){if(typeof le!="function")throw new h("fn",["Function","AsyncFunction"],le);return!await re.call(this,async(...A)=>!await le(...A),W)}async function _e(le,W){for await(let A of V.call(this,le,W))return A}async function he(le,W){if(typeof le!="function")throw new h("fn",["Function","AsyncFunction"],le);async function A(Y,ge){return await le(Y,ge),Q}for await(let Y of T.call(this,A,W));}function V(le,W){if(typeof le!="function")throw new h("fn",["Function","AsyncFunction"],le);async function A(Y,ge){return await le(Y,ge)?Y:Q}return T.call(this,A,W)}var Ae=class extends s{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value"}};async function ie(le,W,A){var Y;if(typeof le!="function")throw new h("reducer",["Function","AsyncFunction"],le);A!=null&&f(A,"options"),A?.signal!=null&&n(A.signal,"options.signal");let ge=arguments.length>1;if(A!=null&&(Y=A.signal)!==null&&Y!==void 0&&Y.aborted){let x=new o(void 0,{cause:A.signal.reason});throw this.once("error",()=>{}),await g(this.destroy(x)),x}let ae=new t,ne=ae.signal;if(A!=null&&A.signal){let x={once:!0,[p]:this};A.signal.addEventListener("abort",()=>ae.abort(),x)}let Ee=!1;try{for await(let x of this){var me;if(Ee=!0,A!=null&&(me=A.signal)!==null&&me!==void 0&&me.aborted)throw new o;ge?W=await le(W,x,{signal:ne}):(W=x,ge=!0)}if(!Ee&&!ge)throw new Ae}finally{ae.abort()}return W}async function X(le){le!=null&&f(le,"options"),le?.signal!=null&&n(le.signal,"options.signal");let W=[];for await(let Y of this){var A;if(le!=null&&(A=le.signal)!==null&&A!==void 0&&A.aborted)throw new o(void 0,{cause:le.signal.reason});N(W,Y)}return W}function O(le,W){let A=T.call(this,le,W);return(async function*(){for await(let Y of A)yield*Y}).call(this)}function G(le){if(le=w(le),U(le))return 0;if(le<0)throw new r("number",">= 0",le);return le}function ve(le,W=void 0){return W!=null&&f(W,"options"),W?.signal!=null&&n(W.signal,"options.signal"),le=G(le),(async function*(){var A;if(W!=null&&(A=W.signal)!==null&&A!==void 0&&A.aborted)throw new o;for await(let ge of this){var Y;if(W!=null&&(Y=W.signal)!==null&&Y!==void 0&&Y.aborted)throw new o;le--<=0&&(yield ge)}}).call(this)}function Ce(le,W=void 0){return W!=null&&f(W,"options"),W?.signal!=null&&n(W.signal,"options.signal"),le=G(le),(async function*(){var A;if(W!=null&&(A=W.signal)!==null&&A!==void 0&&A.aborted)throw new o;for await(let ge of this){var Y;if(W!=null&&(Y=W.signal)!==null&&Y!==void 0&&Y.aborted)throw new o;if(le-- >0)yield ge;else return}}).call(this)}i.exports.streamReturningOperators={asIndexedPairs:K,drop:ve,filter:V,flatMap:O,map:T,take:Ce,compose:se},i.exports.promiseReturningOperators={every:J,forEach:he,reduce:ie,toArray:X,some:re,find:_e}}),Es=Se((e,i)=>{fe(),pe(),de();var{ArrayPrototypePop:t,Promise:l}=Ye(),{isIterable:h,isNodeStream:s,isWebStream:r}=Mt(),{pipelineImpl:o}=$i(),{finished:n}=$t();Ss();function a(...f){return new l((p,g)=>{let m,b,v=f[f.length-1];if(v&&typeof v=="object"&&!s(v)&&!h(v)&&!r(v)){let k=t(f);m=k.signal,b=k.end}o(f,(k,N)=>{k?g(k):p(N)},{signal:m,end:b})})}i.exports={finished:n,pipeline:a}}),Ss=Se((e,i)=>{fe(),pe(),de();var{Buffer:t}=(rt(),De(tt)),{ObjectDefineProperty:l,ObjectKeys:h,ReflectApply:s}=Ye(),{promisify:{custom:r}}=Pt(),{streamReturningOperators:o,promiseReturningOperators:n}=Yl(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:a}}=ht(),f=_s(),{pipeline:p}=$i(),{destroyer:g}=hr(),m=$t(),b=Es(),v=Mt(),k=i.exports=Ni().Stream;k.isDisturbed=v.isDisturbed,k.isErrored=v.isErrored,k.isReadable=v.isReadable,k.Readable=Kr();for(let B of h(o)){let w=function(...q){if(new.target)throw a();return k.Readable.from(s(U,this,q))},U=o[B];l(w,"name",{__proto__:null,value:U.name}),l(w,"length",{__proto__:null,value:U.length}),l(k.Readable.prototype,B,{__proto__:null,value:w,enumerable:!1,configurable:!0,writable:!0})}for(let B of h(n)){let w=function(...q){if(new.target)throw a();return s(U,this,q)},U=n[B];l(w,"name",{__proto__:null,value:U.name}),l(w,"length",{__proto__:null,value:U.length}),l(k.Readable.prototype,B,{__proto__:null,value:w,enumerable:!1,configurable:!0,writable:!0})}k.Writable=ys(),k.Duplex=Rt(),k.Transform=vs(),k.PassThrough=ws(),k.pipeline=p;var{addAbortSignal:N}=Hr();k.addAbortSignal=N,k.finished=m,k.destroy=g,k.compose=f,l(k,"promises",{__proto__:null,configurable:!0,enumerable:!0,get(){return b}}),l(p,r,{__proto__:null,enumerable:!0,get(){return b.pipeline}}),l(m,r,{__proto__:null,enumerable:!0,get(){return b.finished}}),k.Stream=k,k._isUint8Array=function(B){return B instanceof Uint8Array},k._uint8ArrayToBuffer=function(B){return t.from(B.buffer,B.byteOffset,B.byteLength)}}),sr=Se((e,i)=>{fe(),pe(),de();var t=Ss(),l=Es(),h=t.Readable.destroy;i.exports=t.Readable,i.exports._uint8ArrayToBuffer=t._uint8ArrayToBuffer,i.exports._isUint8Array=t._isUint8Array,i.exports.isDisturbed=t.isDisturbed,i.exports.isErrored=t.isErrored,i.exports.isReadable=t.isReadable,i.exports.Readable=t.Readable,i.exports.Writable=t.Writable,i.exports.Duplex=t.Duplex,i.exports.Transform=t.Transform,i.exports.PassThrough=t.PassThrough,i.exports.addAbortSignal=t.addAbortSignal,i.exports.finished=t.finished,i.exports.destroy=t.destroy,i.exports.destroy=h,i.exports.pipeline=t.pipeline,i.exports.compose=t.compose,Object.defineProperty(t,"promises",{configurable:!0,enumerable:!0,get(){return l}}),i.exports.Stream=t.Stream,i.exports.default=i.exports}),Ql=Se((e,i)=>{fe(),pe(),de(),typeof Object.create=="function"?i.exports=function(t,l){l&&(t.super_=l,t.prototype=Object.create(l.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:i.exports=function(t,l){if(l){t.super_=l;var h=function(){};h.prototype=l.prototype,t.prototype=new h,t.prototype.constructor=t}}}),Gl=Se((e,i)=>{fe(),pe(),de();var{Buffer:t}=(rt(),De(tt)),l=Symbol.for("BufferList");function h(s){if(!(this instanceof h))return new h(s);h._init.call(this,s)}h._init=function(s){Object.defineProperty(this,l,{value:!0}),this._bufs=[],this.length=0,s&&this.append(s)},h.prototype._new=function(s){return new h(s)},h.prototype._offset=function(s){if(s===0)return[0,0];let r=0;for(let o=0;othis.length||s<0)return;let r=this._offset(s);return this._bufs[r[0]][r[1]]},h.prototype.slice=function(s,r){return typeof s=="number"&&s<0&&(s+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,s,r)},h.prototype.copy=function(s,r,o,n){if((typeof o!="number"||o<0)&&(o=0),(typeof n!="number"||n>this.length)&&(n=this.length),o>=this.length||n<=0)return s||t.alloc(0);let a=!!s,f=this._offset(o),p=n-o,g=p,m=a&&r||0,b=f[1];if(o===0&&n===this.length){if(!a)return this._bufs.length===1?this._bufs[0]:t.concat(this._bufs,this.length);for(let v=0;vk)this._bufs[v].copy(s,m,b),m+=k;else{this._bufs[v].copy(s,m,b,b+g),m+=k;break}g-=k,b&&(b=0)}return s.length>m?s.slice(0,m):s},h.prototype.shallowSlice=function(s,r){if(s=s||0,r=typeof r!="number"?this.length:r,s<0&&(s+=this.length),r<0&&(r+=this.length),s===r)return this._new();let o=this._offset(s),n=this._offset(r),a=this._bufs.slice(o[0],n[0]+1);return n[1]===0?a.pop():a[a.length-1]=a[a.length-1].slice(0,n[1]),o[1]!==0&&(a[0]=a[0].slice(o[1])),this._new(a)},h.prototype.toString=function(s,r,o){return this.slice(r,o).toString(s)},h.prototype.consume=function(s){if(s=Math.trunc(s),Number.isNaN(s)||s<=0)return this;for(;this._bufs.length;)if(s>=this._bufs[0].length)s-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(s),this.length-=s;break}return this},h.prototype.duplicate=function(){let s=this._new();for(let r=0;rthis.length?this.length:r;let n=this._offset(r),a=n[0],f=n[1];for(;a=s.length){let g=p.indexOf(s,f);if(g!==-1)return this._reverseOffset([a,g]);f=p.length-s.length+1}else{let g=this._reverseOffset([a,f]);if(this._match(g,s))return g;f++}f=0}return-1},h.prototype._match=function(s,r){if(this.length-s{fe(),pe(),de();var t=sr().Duplex,l=Ql(),h=Gl();function s(r){if(!(this instanceof s))return new s(r);if(typeof r=="function"){this._callback=r;let o=(function(n){this._callback&&(this._callback(n),this._callback=null)}).bind(this);this.on("pipe",function(n){n.on("error",o)}),this.on("unpipe",function(n){n.removeListener("error",o)}),r=null}h._init.call(this,r),t.call(this)}l(s,t),Object.assign(s.prototype,h.prototype),s.prototype._new=function(r){return new s(r)},s.prototype._write=function(r,o,n){this._appendBuffer(r),typeof n=="function"&&n()},s.prototype._read=function(r){if(!this.length)return this.push(null);r=Math.min(r,this.length),this.push(this.slice(0,r)),this.consume(r)},s.prototype.end=function(r){t.prototype.end.call(this,r),this._callback&&(this._callback(null,this.slice()),this._callback=null)},s.prototype._destroy=function(r,o){this._bufs.length=0,this.length=0,o(r)},s.prototype._isBufferList=function(r){return r instanceof s||r instanceof h||s.isBufferList(r)},s.isBufferList=h.isBufferList,i.exports=s,i.exports.BufferListStream=s,i.exports.BufferList=h}),Zl=Se((e,i)=>{fe(),pe(),de();var t=class{constructor(){this.cmd=null,this.retain=!1,this.qos=0,this.dup=!1,this.length=-1,this.topic=null,this.payload=null}};i.exports=t}),As=Se((e,i)=>{fe(),pe(),de();var t=i.exports,{Buffer:l}=(rt(),De(tt));t.types={0:"reserved",1:"connect",2:"connack",3:"publish",4:"puback",5:"pubrec",6:"pubrel",7:"pubcomp",8:"subscribe",9:"suback",10:"unsubscribe",11:"unsuback",12:"pingreq",13:"pingresp",14:"disconnect",15:"auth"},t.requiredHeaderFlags={1:0,2:0,4:0,5:0,6:2,7:0,8:2,9:0,10:2,11:0,12:0,13:0,14:0,15:0},t.requiredHeaderFlagsErrors={};for(let s in t.requiredHeaderFlags){let r=t.requiredHeaderFlags[s];t.requiredHeaderFlagsErrors[s]="Invalid header flag bits, must be 0x"+r.toString(16)+" for "+t.types[s]+" packet"}t.codes={};for(let s in t.types){let r=t.types[s];t.codes[r]=s}t.CMD_SHIFT=4,t.CMD_MASK=240,t.DUP_MASK=8,t.QOS_MASK=3,t.QOS_SHIFT=1,t.RETAIN_MASK=1,t.VARBYTEINT_MASK=127,t.VARBYTEINT_FIN_MASK=128,t.VARBYTEINT_MAX=268435455,t.SESSIONPRESENT_MASK=1,t.SESSIONPRESENT_HEADER=l.from([t.SESSIONPRESENT_MASK]),t.CONNACK_HEADER=l.from([t.codes.connack<[0,1].map(o=>[0,1].map(n=>{let a=l.alloc(1);return a.writeUInt8(t.codes[s]<l.from([s])),t.EMPTY={pingreq:l.from([t.codes.pingreq<<4,0]),pingresp:l.from([t.codes.pingresp<<4,0]),disconnect:l.from([t.codes.disconnect<<4,0])},t.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"},t.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"},t.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"},t.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"}}),Xl=Se((e,i)=>{fe(),pe(),de();var t=1e3,l=t*60,h=l*60,s=h*24,r=s*7,o=s*365.25;i.exports=function(g,m){m=m||{};var b=typeof g;if(b==="string"&&g.length>0)return n(g);if(b==="number"&&isFinite(g))return m.long?f(g):a(g);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(g))};function n(g){if(g=String(g),!(g.length>100)){var m=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(g);if(m){var b=parseFloat(m[1]),v=(m[2]||"ms").toLowerCase();switch(v){case"years":case"year":case"yrs":case"yr":case"y":return b*o;case"weeks":case"week":case"w":return b*r;case"days":case"day":case"d":return b*s;case"hours":case"hour":case"hrs":case"hr":case"h":return b*h;case"minutes":case"minute":case"mins":case"min":case"m":return b*l;case"seconds":case"second":case"secs":case"sec":case"s":return b*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return b;default:return}}}}function a(g){var m=Math.abs(g);return m>=s?Math.round(g/s)+"d":m>=h?Math.round(g/h)+"h":m>=l?Math.round(g/l)+"m":m>=t?Math.round(g/t)+"s":g+"ms"}function f(g){var m=Math.abs(g);return m>=s?p(g,m,s,"day"):m>=h?p(g,m,h,"hour"):m>=l?p(g,m,l,"minute"):m>=t?p(g,m,t,"second"):g+" ms"}function p(g,m,b,v){var k=m>=b*1.5;return Math.round(g/b)+" "+v+(k?"s":"")}}),eu=Se((e,i)=>{fe(),pe(),de();function t(l){s.debug=s,s.default=s,s.coerce=p,s.disable=n,s.enable=o,s.enabled=a,s.humanize=Xl(),s.destroy=g,Object.keys(l).forEach(m=>{s[m]=l[m]}),s.names=[],s.skips=[],s.formatters={};function h(m){let b=0;for(let v=0;v{if(R==="%%")return"%";C++;let te=s.formatters[Q];if(typeof te=="function"){let se=w[C];R=te.call(U,se),w.splice(C,1),C--}return R}),s.formatArgs.call(U,w),(U.log||s.log).apply(U,w)}return B.namespace=m,B.useColors=s.useColors(),B.color=s.selectColor(m),B.extend=r,B.destroy=s.destroy,Object.defineProperty(B,"enabled",{enumerable:!0,configurable:!1,get:()=>v!==null?v:(k!==s.namespaces&&(k=s.namespaces,N=s.enabled(m)),N),set:w=>{v=w}}),typeof s.init=="function"&&s.init(B),B}function r(m,b){let v=s(this.namespace+(typeof b>"u"?":":b)+m);return v.log=this.log,v}function o(m){s.save(m),s.namespaces=m,s.names=[],s.skips=[];let b,v=(typeof m=="string"?m:"").split(/[\s,]+/),k=v.length;for(b=0;b"-"+b)].join(",");return s.enable(""),m}function a(m){if(m[m.length-1]==="*")return!0;let b,v;for(b=0,v=s.skips.length;b{fe(),pe(),de(),e.formatArgs=l,e.save=h,e.load=s,e.useColors=t,e.storage=r(),e.destroy=(()=>{let n=!1;return()=>{n||(n=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function t(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function l(n){if(n[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+n[0]+(this.useColors?"%c ":" ")+"+"+i.exports.humanize(this.diff),!this.useColors)return;let a="color: "+this.color;n.splice(1,0,a,"color: inherit");let f=0,p=0;n[0].replace(/%[a-zA-Z%]/g,g=>{g!=="%%"&&(f++,g==="%c"&&(p=f))}),n.splice(p,0,a)}e.log=console.debug||console.log||(()=>{});function h(n){try{n?e.storage.setItem("debug",n):e.storage.removeItem("debug")}catch{}}function s(){let n;try{n=e.storage.getItem("debug")}catch{}return!n&&typeof Le<"u"&&"env"in Le&&(n=Le.env.DEBUG),n}function r(){try{return localStorage}catch{}}i.exports=eu()(e);var{formatters:o}=i.exports;o.j=function(n){try{return JSON.stringify(n)}catch(a){return"[UnexpectedJSONParseError]: "+a.message}}}),tu=Se((e,i)=>{fe(),pe(),de();var t=Jl(),{EventEmitter:l}=(cr(),De(or)),h=Zl(),s=As(),r=xt()("mqtt-packet:parser"),o=class _i extends l{constructor(){super(),this.parser=this.constructor.parser}static parser(a){return this instanceof _i?(this.settings=a||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):new _i().parser(a)}_resetState(){r("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new h,this.error=null,this._list=t(),this._stateCounter=0}parse(a){for(this.error&&this._resetState(),this._list.append(a),r("parse: current state: %s",this._states[this._stateCounter]);(this.packet.length!==-1||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,r("parse: state complete. _stateCounter is now: %d",this._stateCounter),r("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return r("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){let a=this._list.readUInt8(0),f=a>>s.CMD_SHIFT;this.packet.cmd=s.types[f];let p=a&15,g=s.requiredHeaderFlags[f];return g!=null&&p!==g?this._emitError(new Error(s.requiredHeaderFlagsErrors[f])):(this.packet.retain=(a&s.RETAIN_MASK)!==0,this.packet.qos=a>>s.QOS_SHIFT&s.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=(a&s.DUP_MASK)!==0,r("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){let a=this._parseVarByteNum(!0);return a&&(this.packet.length=a.value,this._list.consume(a.bytes)),r("_parseLength %d",a.value),!!a}_parsePayload(){r("_parsePayload: payload %O",this._list);let a=!1;if(this.packet.length===0||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"))}a=!0}return r("_parsePayload complete result: %s",a),a}_parseConnect(){r("_parseConnect");let a,f,p,g,m={},b=this.packet,v=this._parseString();if(v===null)return this._emitError(new Error("Cannot parse protocolId"));if(v!=="MQTT"&&v!=="MQIsdp")return this._emitError(new Error("Invalid protocolId"));if(b.protocolId=v,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(b.protocolVersion=this._list.readUInt8(this._pos),b.protocolVersion>=128&&(b.bridgeMode=!0,b.protocolVersion=b.protocolVersion-128),b.protocolVersion!==3&&b.protocolVersion!==4&&b.protocolVersion!==5)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(this._list.readUInt8(this._pos)&1)return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));m.username=this._list.readUInt8(this._pos)&s.USERNAME_MASK,m.password=this._list.readUInt8(this._pos)&s.PASSWORD_MASK,m.will=this._list.readUInt8(this._pos)&s.WILL_FLAG_MASK;let k=!!(this._list.readUInt8(this._pos)&s.WILL_RETAIN_MASK),N=(this._list.readUInt8(this._pos)&s.WILL_QOS_MASK)>>s.WILL_QOS_SHIFT;if(m.will)b.will={},b.will.retain=k,b.will.qos=N;else{if(k)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(N)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(b.clean=(this._list.readUInt8(this._pos)&s.CLEAN_SESSION_MASK)!==0,this._pos++,b.keepalive=this._parseNum(),b.keepalive===-1)return this._emitError(new Error("Packet too short"));if(b.protocolVersion===5){let w=this._parseProperties();Object.getOwnPropertyNames(w).length&&(b.properties=w)}let B=this._parseString();if(B===null)return this._emitError(new Error("Packet too short"));if(b.clientId=B,r("_parseConnect: packet.clientId: %s",b.clientId),m.will){if(b.protocolVersion===5){let w=this._parseProperties();Object.getOwnPropertyNames(w).length&&(b.will.properties=w)}if(a=this._parseString(),a===null)return this._emitError(new Error("Cannot parse will topic"));if(b.will.topic=a,r("_parseConnect: packet.will.topic: %s",b.will.topic),f=this._parseBuffer(),f===null)return this._emitError(new Error("Cannot parse will payload"));b.will.payload=f,r("_parseConnect: packet.will.paylaod: %s",b.will.payload)}if(m.username){if(g=this._parseString(),g===null)return this._emitError(new Error("Cannot parse username"));b.username=g,r("_parseConnect: packet.username: %s",b.username)}if(m.password){if(p=this._parseBuffer(),p===null)return this._emitError(new Error("Cannot parse password"));b.password=p}return this.settings=b,r("_parseConnect: complete"),b}_parseConnack(){r("_parseConnack");let a=this.packet;if(this._list.length<1)return null;let f=this._list.readUInt8(this._pos++);if(f>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(a.sessionPresent=!!(f&s.SESSIONPRESENT_MASK),this.settings.protocolVersion===5)this._list.length>=2?a.reasonCode=this._list.readUInt8(this._pos++):a.reasonCode=0;else{if(this._list.length<2)return null;a.returnCode=this._list.readUInt8(this._pos++)}if(a.returnCode===-1||a.reasonCode===-1)return this._emitError(new Error("Cannot parse return code"));if(this.settings.protocolVersion===5){let p=this._parseProperties();Object.getOwnPropertyNames(p).length&&(a.properties=p)}r("_parseConnack: complete")}_parsePublish(){r("_parsePublish");let a=this.packet;if(a.topic=this._parseString(),a.topic===null)return this._emitError(new Error("Cannot parse topic"));if(!(a.qos>0&&!this._parseMessageId())){if(this.settings.protocolVersion===5){let f=this._parseProperties();Object.getOwnPropertyNames(f).length&&(a.properties=f)}a.payload=this._list.slice(this._pos,a.length),r("_parsePublish: payload from buffer list: %o",a.payload)}}_parseSubscribe(){r("_parseSubscribe");let a=this.packet,f,p,g,m,b,v,k;if(a.subscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let N=this._parseProperties();Object.getOwnPropertyNames(N).length&&(a.properties=N)}if(a.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=a.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(p=this._parseByte(),this.settings.protocolVersion===5){if(p&192)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(p&252)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(g=p&s.SUBSCRIBE_OPTIONS_QOS_MASK,g>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(v=(p>>s.SUBSCRIBE_OPTIONS_NL_SHIFT&s.SUBSCRIBE_OPTIONS_NL_MASK)!==0,b=(p>>s.SUBSCRIBE_OPTIONS_RAP_SHIFT&s.SUBSCRIBE_OPTIONS_RAP_MASK)!==0,m=p>>s.SUBSCRIBE_OPTIONS_RH_SHIFT&s.SUBSCRIBE_OPTIONS_RH_MASK,m>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));k={topic:f,qos:g},this.settings.protocolVersion===5?(k.nl=v,k.rap=b,k.rh=m):this.settings.bridgeMode&&(k.rh=0,k.rap=!0,k.nl=!0),r("_parseSubscribe: push subscription `%s` to subscription",k),a.subscriptions.push(k)}}}_parseSuback(){r("_parseSuback");let a=this.packet;if(this.packet.granted=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let f=this._parseProperties();Object.getOwnPropertyNames(f).length&&(a.properties=f)}if(a.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&f!==128)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(f)}}}_parseUnsubscribe(){r("_parseUnsubscribe");let a=this.packet;if(a.unsubscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let f=this._parseProperties();Object.getOwnPropertyNames(f).length&&(a.properties=f)}if(a.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(a.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!s.MQTT5_PUBACK_PUBREC_CODES[a.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!s.MQTT5_PUBREL_PUBCOMP_CODES[a.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break}r("_parseConfirmation: packet.reasonCode `%d`",a.reasonCode)}else a.reasonCode=0;if(a.length>3){let f=this._parseProperties();Object.getOwnPropertyNames(f).length&&(a.properties=f)}}return!0}_parseDisconnect(){let a=this.packet;if(r("_parseDisconnect"),this.settings.protocolVersion===5){this._list.length>0?(a.reasonCode=this._parseByte(),s.MQTT5_DISCONNECT_CODES[a.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):a.reasonCode=0;let f=this._parseProperties();Object.getOwnPropertyNames(f).length&&(a.properties=f)}return r("_parseDisconnect result: true"),!0}_parseAuth(){r("_parseAuth");let a=this.packet;if(this.settings.protocolVersion!==5)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(a.reasonCode=this._parseByte(),!s.MQTT5_AUTH_CODES[a.reasonCode])return this._emitError(new Error("Invalid auth reason code"));let f=this._parseProperties();return Object.getOwnPropertyNames(f).length&&(a.properties=f),r("_parseAuth: result: true"),!0}_parseMessageId(){let a=this.packet;return a.messageId=this._parseNum(),a.messageId===null?(this._emitError(new Error("Cannot parse messageId")),!1):(r("_parseMessageId: packet.messageId %d",a.messageId),!0)}_parseString(a){let f=this._parseNum(),p=f+this._pos;if(f===-1||p>this._list.length||p>this.packet.length)return null;let g=this._list.toString("utf8",this._pos,p);return this._pos+=f,r("_parseString: result: %s",g),g}_parseStringPair(){return r("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){let a=this._parseNum(),f=a+this._pos;if(a===-1||f>this._list.length||f>this.packet.length)return null;let p=this._list.slice(this._pos,f);return this._pos+=a,r("_parseBuffer: result: %o",p),p}_parseNum(){if(this._list.length-this._pos<2)return-1;let a=this._list.readUInt16BE(this._pos);return this._pos+=2,r("_parseNum: result: %s",a),a}_parse4ByteNum(){if(this._list.length-this._pos<4)return-1;let a=this._list.readUInt32BE(this._pos);return this._pos+=4,r("_parse4ByteNum: result: %s",a),a}_parseVarByteNum(a){r("_parseVarByteNum");let f=4,p=0,g=1,m=0,b=!1,v,k=this._pos?this._pos:0;for(;p=p&&this._emitError(new Error("Invalid variable byte integer")),k&&(this._pos+=p),b?a?b={bytes:p,value:m}:b=m:b=!1,r("_parseVarByteNum: result: %o",b),b}_parseByte(){let a;return this._pos{fe(),pe(),de();var{Buffer:t}=(rt(),De(tt)),l=65536,h={},s=t.isBuffer(t.from([1,2]).subarray(0,1));function r(f){let p=t.allocUnsafe(2);return p.writeUInt8(f>>8,0),p.writeUInt8(f&255,1),p}function o(){for(let f=0;f0&&(p=p|128),m.writeUInt8(p,g++);while(f>0&&g<4);return f>0&&(g=0),s?m.subarray(0,g):m.slice(0,g)}function a(f){let p=t.allocUnsafe(4);return p.writeUInt32BE(f,0),p}i.exports={cache:h,generateCache:o,generateNumber:r,genBufVariableByteInt:n,generate4ByteBuffer:a}}),nu=Se((e,i)=>{fe(),pe(),de(),typeof Le>"u"||!Le.version||Le.version.indexOf("v0.")===0||Le.version.indexOf("v1.")===0&&Le.version.indexOf("v1.8.")!==0?i.exports={nextTick:t}:i.exports=Le;function t(l,h,s,r){if(typeof l!="function")throw new TypeError('"callback" argument must be a function');var o=arguments.length,n,a;switch(o){case 0:case 1:return Le.nextTick(l);case 2:return Le.nextTick(function(){l.call(null,h)});case 3:return Le.nextTick(function(){l.call(null,h,s)});case 4:return Le.nextTick(function(){l.call(null,h,s,r)});default:for(n=new Array(o-1),a=0;a{fe(),pe(),de();var t=As(),{Buffer:l}=(rt(),De(tt)),h=l.allocUnsafe(0),s=l.from([0]),r=ru(),o=nu().nextTick,n=xt()("mqtt-packet:writeToStream"),a=r.cache,f=r.generateNumber,p=r.generateCache,g=r.genBufVariableByteInt,m=r.generate4ByteBuffer,b=he,v=!0;function k(W,A,Y){switch(n("generate called"),A.cork&&(A.cork(),o(N,A)),v&&(v=!1,p()),n("generate: packet.cmd: %s",W.cmd),W.cmd){case"connect":return B(W,A);case"connack":return w(W,A,Y);case"publish":return U(W,A,Y);case"puback":case"pubrec":case"pubrel":case"pubcomp":return q(W,A,Y);case"subscribe":return I(W,A,Y);case"suback":return C(W,A,Y);case"unsubscribe":return R(W,A,Y);case"unsuback":return Q(W,A,Y);case"pingreq":case"pingresp":return te(W,A);case"disconnect":return se(W,A,Y);case"auth":return T(W,A,Y);default:return A.destroy(new Error("Unknown command")),!1}}Object.defineProperty(k,"cacheNumbers",{get(){return b===he},set(W){W?((!a||Object.keys(a).length===0)&&(v=!0),b=he):(v=!1,b=V)}});function N(W){W.uncork()}function B(W,A,Y){let ge=W||{},ae=ge.protocolId||"MQTT",ne=ge.protocolVersion||4,Ee=ge.will,me=ge.clean,x=ge.keepalive||0,F=ge.clientId||"",$=ge.username,ue=ge.password,ee=ge.properties;me===void 0&&(me=!0);let L=0;if(!ae||typeof ae!="string"&&!l.isBuffer(ae))return A.destroy(new Error("Invalid protocolId")),!1;if(L+=ae.length+2,ne!==3&&ne!==4&&ne!==5)return A.destroy(new Error("Invalid protocol version")),!1;if(L+=1,(typeof F=="string"||l.isBuffer(F))&&(F||ne>=4)&&(F||me))L+=l.byteLength(F)+2;else{if(ne<4)return A.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(me*1===0)return A.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if(typeof x!="number"||x<0||x>65535||x%1!==0)return A.destroy(new Error("Invalid keepalive")),!1;L+=2,L+=1;let S,j;if(ne===5){if(S=X(A,ee),!S)return!1;L+=S.length}if(Ee){if(typeof Ee!="object")return A.destroy(new Error("Invalid will")),!1;if(!Ee.topic||typeof Ee.topic!="string")return A.destroy(new Error("Invalid will topic")),!1;if(L+=l.byteLength(Ee.topic)+2,L+=2,Ee.payload)if(Ee.payload.length>=0)typeof Ee.payload=="string"?L+=l.byteLength(Ee.payload):L+=Ee.payload.length;else return A.destroy(new Error("Invalid will payload")),!1;if(j={},ne===5){if(j=X(A,Ee.properties),!j)return!1;L+=j.length}}let z=!1;if($!=null)if(le($))z=!0,L+=l.byteLength($)+2;else return A.destroy(new Error("Invalid username")),!1;if(ue!=null){if(!z)return A.destroy(new Error("Username is required to use password")),!1;if(le(ue))L+=Ce(ue)+2;else return A.destroy(new Error("Invalid password")),!1}A.write(t.CONNECT_HEADER),re(A,L),ie(A,ae),ge.bridgeMode&&(ne+=128),A.write(ne===131?t.VERSION131:ne===132?t.VERSION132:ne===4?t.VERSION4:ne===5?t.VERSION5:t.VERSION3);let Z=0;return Z|=$!=null?t.USERNAME_MASK:0,Z|=ue!=null?t.PASSWORD_MASK:0,Z|=Ee&&Ee.retain?t.WILL_RETAIN_MASK:0,Z|=Ee&&Ee.qos?Ee.qos<0&&b(A,F),ee?.write(),n("publish: payload: %o",x),A.write(x)}function q(W,A,Y){let ge=Y?Y.protocolVersion:4,ae=W||{},ne=ae.cmd||"puback",Ee=ae.messageId,me=ae.dup&&ne==="pubrel"?t.DUP_MASK:0,x=0,F=ae.reasonCode,$=ae.properties,ue=ge===5?3:2;if(ne==="pubrel"&&(x=1),typeof Ee!="number")return A.destroy(new Error("Invalid messageId")),!1;let ee=null;if(ge===5&&typeof $=="object"){if(ee=O(A,$,Y,ue),!ee)return!1;ue+=ee.length}return A.write(t.ACKS[ne][x][me][0]),ue===3&&(ue+=F!==0?1:-1),re(A,ue),b(A,Ee),ge===5&&ue!==2&&A.write(l.from([F])),ee!==null?ee.write():ue===4&&A.write(l.from([0])),!0}function I(W,A,Y){n("subscribe: packet: ");let ge=Y?Y.protocolVersion:4,ae=W||{},ne=ae.dup?t.DUP_MASK:0,Ee=ae.messageId,me=ae.subscriptions,x=ae.properties,F=0;if(typeof Ee!="number")return A.destroy(new Error("Invalid messageId")),!1;F+=2;let $=null;if(ge===5){if($=X(A,x),!$)return!1;F+=$.length}if(typeof me=="object"&&me.length)for(let ee=0;ee2)return A.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}F+=l.byteLength(L)+2+1}else return A.destroy(new Error("Invalid subscriptions")),!1;n("subscribe: writing to stream: %o",t.SUBSCRIBE_HEADER),A.write(t.SUBSCRIBE_HEADER[1][ne?1:0][0]),re(A,F),b(A,Ee),$!==null&&$.write();let ue=!0;for(let ee of me){let L=ee.topic,S=ee.qos,j=+ee.nl,z=+ee.rap,Z=ee.rh,oe;J(A,L),oe=t.SUBSCRIBE_OPTIONS_QOS[S],ge===5&&(oe|=j?t.SUBSCRIBE_OPTIONS_NL:0,oe|=z?t.SUBSCRIBE_OPTIONS_RAP:0,oe|=Z?t.SUBSCRIBE_OPTIONS_RH[Z]:0),ue=A.write(l.from([oe]))}return ue}function C(W,A,Y){let ge=Y?Y.protocolVersion:4,ae=W||{},ne=ae.messageId,Ee=ae.granted,me=ae.properties,x=0;if(typeof ne!="number")return A.destroy(new Error("Invalid messageId")),!1;if(x+=2,typeof Ee=="object"&&Ee.length)for(let $=0;$t.VARBYTEINT_MAX)return W.destroy(new Error(`Invalid variable byte integer: ${A}`)),!1;let Y=K[A];return Y||(Y=g(A),A<16384&&(K[A]=Y)),n("writeVarByteInt: writing to stream: %o",Y),W.write(Y)}function J(W,A){let Y=l.byteLength(A);return b(W,Y),n("writeString: %s",A),W.write(A,"utf8")}function _e(W,A,Y){J(W,A),J(W,Y)}function he(W,A){return n("writeNumberCached: number: %d",A),n("writeNumberCached: %o",a[A]),W.write(a[A])}function V(W,A){let Y=f(A);return n("writeNumberGenerated: %o",Y),W.write(Y)}function Ae(W,A){let Y=m(A);return n("write4ByteNumber: %o",Y),W.write(Y)}function ie(W,A){typeof A=="string"?J(W,A):A?(b(W,A.length),W.write(A)):b(W,0)}function X(W,A){if(typeof A!="object"||A.length!=null)return{length:1,write(){ve(W,{},0)}};let Y=0;function ge(ae,ne){let Ee=t.propertiesTypes[ae],me=0;switch(Ee){case"byte":{if(typeof ne!="boolean")return W.destroy(new Error(`Invalid ${ae}: ${ne}`)),!1;me+=2;break}case"int8":{if(typeof ne!="number"||ne<0||ne>255)return W.destroy(new Error(`Invalid ${ae}: ${ne}`)),!1;me+=2;break}case"binary":{if(ne&&ne===null)return W.destroy(new Error(`Invalid ${ae}: ${ne}`)),!1;me+=1+l.byteLength(ne)+2;break}case"int16":{if(typeof ne!="number"||ne<0||ne>65535)return W.destroy(new Error(`Invalid ${ae}: ${ne}`)),!1;me+=3;break}case"int32":{if(typeof ne!="number"||ne<0||ne>4294967295)return W.destroy(new Error(`Invalid ${ae}: ${ne}`)),!1;me+=5;break}case"var":{if(typeof ne!="number"||ne<0||ne>268435455)return W.destroy(new Error(`Invalid ${ae}: ${ne}`)),!1;me+=1+l.byteLength(g(ne));break}case"string":{if(typeof ne!="string")return W.destroy(new Error(`Invalid ${ae}: ${ne}`)),!1;me+=3+l.byteLength(ne.toString());break}case"pair":{if(typeof ne!="object")return W.destroy(new Error(`Invalid ${ae}: ${ne}`)),!1;me+=Object.getOwnPropertyNames(ne).reduce((x,F)=>{let $=ne[F];return Array.isArray($)?x+=$.reduce((ue,ee)=>(ue+=3+l.byteLength(F.toString())+2+l.byteLength(ee.toString()),ue),0):x+=3+l.byteLength(F.toString())+2+l.byteLength(ne[F].toString()),x},0);break}default:return W.destroy(new Error(`Invalid property ${ae}: ${ne}`)),!1}return me}if(A)for(let ae in A){let ne=0,Ee=0,me=A[ae];if(Array.isArray(me))for(let x=0;xne;){let me=ae.shift();if(me&&A[me])delete A[me],Ee=X(W,A);else return!1}return Ee}function G(W,A,Y){switch(t.propertiesTypes[A]){case"byte":{W.write(l.from([t.properties[A]])),W.write(l.from([+Y]));break}case"int8":{W.write(l.from([t.properties[A]])),W.write(l.from([Y]));break}case"binary":{W.write(l.from([t.properties[A]])),ie(W,Y);break}case"int16":{W.write(l.from([t.properties[A]])),b(W,Y);break}case"int32":{W.write(l.from([t.properties[A]])),Ae(W,Y);break}case"var":{W.write(l.from([t.properties[A]])),re(W,Y);break}case"string":{W.write(l.from([t.properties[A]])),J(W,Y);break}case"pair":{Object.getOwnPropertyNames(Y).forEach(ge=>{let ae=Y[ge];Array.isArray(ae)?ae.forEach(ne=>{W.write(l.from([t.properties[A]])),_e(W,ge.toString(),ne.toString())}):(W.write(l.from([t.properties[A]])),_e(W,ge.toString(),ae.toString()))});break}default:return W.destroy(new Error(`Invalid property ${A} value: ${Y}`)),!1}}function ve(W,A,Y){re(W,Y);for(let ge in A)if(Object.prototype.hasOwnProperty.call(A,ge)&&A[ge]!==null){let ae=A[ge];if(Array.isArray(ae))for(let ne=0;ne{fe(),pe(),de();var t=ks(),{EventEmitter:l}=(cr(),De(or)),{Buffer:h}=(rt(),De(tt));function s(o,n){let a=new r;return t(o,a,n),a.concat()}var r=class extends l{constructor(){super(),this._array=new Array(20),this._i=0}write(o){return this._array[this._i++]=o,!0}concat(){let o=0,n=new Array(this._array.length),a=this._array,f=0,p;for(p=0;p{fe(),pe(),de(),e.parser=tu().parser,e.generate=iu(),e.writeToStream=ks()}),Cs=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0});var i=class{constructor(){this.nextId=Math.max(1,Math.floor(Math.random()*65535))}allocate(){let t=this.nextId++;return this.nextId===65536&&(this.nextId=1),t}getLastAllocated(){return this.nextId===1?65535:this.nextId-1}register(t){return!0}deallocate(t){}clear(){}};e.default=i}),su=Se((e,i)=>{fe(),pe(),de(),i.exports=l;function t(s){return s instanceof Wr?Wr.from(s):new s.constructor(s.buffer.slice(),s.byteOffset,s.length)}function l(s){if(s=s||{},s.circles)return h(s);return s.proto?n:o;function r(a,f){for(var p=Object.keys(a),g=new Array(p.length),m=0;m{fe(),pe(),de(),i.exports=su()()}),lu=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0}),e.validateTopics=e.validateTopic=void 0;function i(l){let h=l.split("/");for(let s=0;s{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0});var i=sr(),t={objectMode:!0},l={clean:!0},h=class{constructor(s){this.options=s||{},this.options=Object.assign(Object.assign({},l),s),this._inflights=new Map}put(s,r){return this._inflights.set(s.messageId,s),r&&r(),this}createStream(){let s=new i.Readable(t),r=[],o=!1,n=0;return this._inflights.forEach((a,f)=>{r.push(a)}),s._read=()=>{!o&&n{if(!o)return o=!0,setTimeout(()=>{s.emit("close")},0),s},s}del(s,r){let o=this._inflights.get(s.messageId);return o?(this._inflights.delete(s.messageId),r(null,o)):r&&r(new Error("missing packet")),this}get(s,r){let o=this._inflights.get(s.messageId);return o?r(null,o):r&&r(new Error("missing packet")),this}close(s){this.options.clean&&(this._inflights=null),s&&s()}};e.default=h}),uu=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0});var i=[0,16,128,131,135,144,145,151,153],t=(l,h,s)=>{l.log("handlePublish: packet %o",h),s=typeof s<"u"?s:l.noop;let r=h.topic.toString(),o=h.payload,{qos:n}=h,{messageId:a}=h,{options:f}=l;if(l.options.protocolVersion===5){let p;if(h.properties&&(p=h.properties.topicAlias),typeof p<"u")if(r.length===0)if(p>0&&p<=65535){let g=l.topicAliasRecv.getTopicByAlias(p);if(g)r=g,l.log("handlePublish :: topic complemented by alias. topic: %s - alias: %d",r,p);else{l.log("handlePublish :: unregistered topic alias. alias: %d",p),l.emit("error",new Error("Received unregistered Topic Alias"));return}}else{l.log("handlePublish :: topic alias out of range. alias: %d",p),l.emit("error",new Error("Received Topic Alias is out of range"));return}else if(l.topicAliasRecv.put(r,p))l.log("handlePublish :: registered topic: %s - alias: %d",r,p);else{l.log("handlePublish :: topic alias out of range. alias: %d",p),l.emit("error",new Error("Received Topic Alias is out of range"));return}}switch(l.log("handlePublish: qos %d",n),n){case 2:{f.customHandleAcks(r,o,h,(p,g)=>{if(typeof p=="number"&&(g=p,p=null),p)return l.emit("error",p);if(i.indexOf(g)===-1)return l.emit("error",new Error("Wrong reason code for pubrec"));g?l._sendPacket({cmd:"pubrec",messageId:a,reasonCode:g},s):l.incomingStore.put(h,()=>{l._sendPacket({cmd:"pubrec",messageId:a},s)})});break}case 1:{f.customHandleAcks(r,o,h,(p,g)=>{if(typeof p=="number"&&(g=p,p=null),p)return l.emit("error",p);if(i.indexOf(g)===-1)return l.emit("error",new Error("Wrong reason code for puback"));g||l.emit("message",r,o,h),l.handleMessage(h,m=>{if(m)return s&&s(m);l._sendPacket({cmd:"puback",messageId:a,reasonCode:g},s)})});break}case 0:l.emit("message",r,o,h),l.handleMessage(h,s);break;default:l.log("handlePublish: unknown QoS. Doing nothing.");break}};e.default=t}),hu=Se((e,i)=>{i.exports={version:"5.10.1"}}),fr=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0}),e.MQTTJS_VERSION=e.nextTick=e.applyMixin=e.ErrorWithReasonCode=void 0;var i=class Ts extends Error{constructor(h,s){super(h),this.code=s,Object.setPrototypeOf(this,Ts.prototype),Object.getPrototypeOf(this).name="ErrorWithReasonCode"}};e.ErrorWithReasonCode=i;function t(l,h,s=!1){var r;let o=[h];for(;;){let n=o[0],a=Object.getPrototypeOf(n);if(a?.prototype)o.unshift(a);else break}for(let n of o)for(let a of Object.getOwnPropertyNames(n.prototype))(s||a!=="constructor")&&Object.defineProperty(l.prototype,a,(r=Object.getOwnPropertyDescriptor(n.prototype,a))!==null&&r!==void 0?r:Object.create(null))}e.applyMixin=t,e.nextTick=typeof Le?.nextTick=="function"?Le.nextTick:l=>{setTimeout(l,0)},e.MQTTJS_VERSION=hu().version}),Yr=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0}),e.ReasonCodes=void 0;var i=fr();e.ReasonCodes={0:"",1:"Unacceptable protocol version",2:"Identifier rejected",3:"Server unavailable",4:"Bad username or password",5:"Not authorized",16:"No matching subscribers",17:"No subscription existed",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",132:"Unsupported Protocol Version",133:"Client Identifier not valid",134:"Bad User Name or Password",135:"Not authorized",136:"Server unavailable",137:"Server busy",138:"Banned",139:"Server shutting down",140:"Bad authentication method",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",145:"Packet identifier in use",146:"Packet Identifier not found",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"};var t=(l,h)=>{let{messageId:s}=h,r=h.cmd,o=null,n=l.outgoing[s]?l.outgoing[s].cb:null,a=null;if(!n){l.log("_handleAck :: Server sent an ack in error. Ignoring.");return}switch(l.log("_handleAck :: packet type",r),r){case"pubcomp":case"puback":{let f=h.reasonCode;f&&f>0&&f!==16?(a=new i.ErrorWithReasonCode(`Publish error: ${e.ReasonCodes[f]}`,f),l._removeOutgoingAndStoreMessage(s,()=>{n(a,h)})):l._removeOutgoingAndStoreMessage(s,n);break}case"pubrec":{o={cmd:"pubrel",qos:2,messageId:s};let f=h.reasonCode;f&&f>0&&f!==16?(a=new i.ErrorWithReasonCode(`Publish error: ${e.ReasonCodes[f]}`,f),l._removeOutgoingAndStoreMessage(s,()=>{n(a,h)})):l._sendPacket(o);break}case"suback":{delete l.outgoing[s],l.messageIdProvider.deallocate(s);let f=h.granted;for(let p=0;p{delete l._resubscribeTopics[b]})}}delete l.messageIdToTopic[s],l._invokeStoreProcessingQueue(),n(a,h);break}case"unsuback":{delete l.outgoing[s],l.messageIdProvider.deallocate(s),l._invokeStoreProcessingQueue(),n(null,h);break}default:l.emit("error",new Error("unrecognized packet type"))}l.disconnecting&&Object.keys(l.outgoing).length===0&&l.emit("outgoingEmpty")};e.default=t}),cu=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0});var i=fr(),t=Yr(),l=(h,s)=>{let{options:r}=h,o=r.protocolVersion,n=o===5?s.reasonCode:s.returnCode;if(o!==5){let a=new i.ErrorWithReasonCode(`Protocol error: Auth packets are only supported in MQTT 5. Your version:${o}`,n);h.emit("error",a);return}h.handleAuth(s,(a,f)=>{if(a){h.emit("error",a);return}if(n===24)h.reconnecting=!1,h._sendPacket(f);else{let p=new i.ErrorWithReasonCode(`Connection refused: ${t.ReasonCodes[n]}`,n);h.emit("error",p)}})};e.default=l}),fu=Se(e=>{var m,b,v,k,N,B,w,U,q,I,C,R,Q,te,se,T,K,re,J,_e,he,V,Ae,ie,X,Ei,G,ve,Ce,le,Os,A,Y,ge,Wt,Dt,Si,Mr,jr,Fe,Ai,vr,ee;fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0}),e.LRUCache=void 0;var i=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,t=new Set,l=typeof Le=="object"&&Le?Le:{},h=(L,S,j,z)=>{typeof l.emitWarning=="function"?l.emitWarning(L,S,j,z):console.error(`[${j}] ${S}: ${L}`)},s=globalThis.AbortController,r=globalThis.AbortSignal;if(typeof s>"u"){r=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(j,z){this._onabort.push(z)}},s=class{constructor(){S()}signal=new r;abort(j){if(!this.signal.aborted){this.signal.reason=j,this.signal.aborted=!0;for(let z of this.signal._onabort)z(j);this.signal.onabort?.(j)}}};let L=l.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",S=()=>{L&&(L=!1,h("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",S))}}var o=L=>!t.has(L),n=L=>L&&L===Math.floor(L)&&L>0&&isFinite(L),a=L=>n(L)?L<=Math.pow(2,8)?Uint8Array:L<=Math.pow(2,16)?Uint16Array:L<=Math.pow(2,32)?Uint32Array:L<=Number.MAX_SAFE_INTEGER?f:null:null,f=class extends Array{constructor(L){super(L),this.fill(0)}},p=(m=class{heap;length;static create(S){let j=a(S);if(!j)return[];xe(m,b,!0);let z=new m(S,j);return xe(m,b,!1),z}constructor(S,j){if(!M(m,b))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new j(S),this.length=0}push(S){this.heap[this.length++]=S}pop(){return this.heap[--this.length]}},b=new WeakMap,je(m,b,!1),m),g=(ee=class{constructor(S){je(this,X);je(this,v);je(this,k);je(this,N);je(this,B);je(this,w);it(this,"ttl");it(this,"ttlResolution");it(this,"ttlAutopurge");it(this,"updateAgeOnGet");it(this,"updateAgeOnHas");it(this,"allowStale");it(this,"noDisposeOnSet");it(this,"noUpdateTTL");it(this,"maxEntrySize");it(this,"sizeCalculation");it(this,"noDeleteOnFetchRejection");it(this,"noDeleteOnStaleGet");it(this,"allowStaleOnFetchAbort");it(this,"allowStaleOnFetchRejection");it(this,"ignoreFetchAbort");je(this,U);je(this,q);je(this,I);je(this,C);je(this,R);je(this,Q);je(this,te);je(this,se);je(this,T);je(this,K);je(this,re);je(this,J);je(this,_e);je(this,he);je(this,V);je(this,Ae);je(this,ie);je(this,G,()=>{});je(this,ve,()=>{});je(this,Ce,()=>{});je(this,le,()=>!1);je(this,A,S=>{});je(this,Y,(S,j,z)=>{});je(this,ge,(S,j,z,Z)=>{if(z||Z)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0});let{max:j=0,ttl:z,ttlResolution:Z=1,ttlAutopurge:oe,updateAgeOnGet:c,updateAgeOnHas:u,allowStale:d,dispose:_,disposeAfter:P,noDisposeOnSet:D,noUpdateTTL:ce,maxSize:Pe=0,maxEntrySize:Me=0,sizeCalculation:Ie,fetchMethod:Te,noDeleteOnFetchRejection:Be,noDeleteOnStaleGet:Je,allowStaleOnFetchRejection:Ke,allowStaleOnFetchAbort:Re,ignoreFetchAbort:Ze}=S;if(j!==0&&!n(j))throw new TypeError("max option must be a nonnegative integer");let st=j?a(j):Array;if(!st)throw new Error("invalid max value: "+j);if(xe(this,v,j),xe(this,k,Pe),this.maxEntrySize=Me||M(this,k),this.sizeCalculation=Ie,this.sizeCalculation){if(!M(this,k)&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(Te!==void 0&&typeof Te!="function")throw new TypeError("fetchMethod must be a function if specified");if(xe(this,w,Te),xe(this,Ae,!!Te),xe(this,I,new Map),xe(this,C,new Array(j).fill(void 0)),xe(this,R,new Array(j).fill(void 0)),xe(this,Q,new st(j)),xe(this,te,new st(j)),xe(this,se,0),xe(this,T,0),xe(this,K,p.create(j)),xe(this,U,0),xe(this,q,0),typeof _=="function"&&xe(this,N,_),typeof P=="function"?(xe(this,B,P),xe(this,re,[])):(xe(this,B,void 0),xe(this,re,void 0)),xe(this,V,!!M(this,N)),xe(this,ie,!!M(this,B)),this.noDisposeOnSet=!!D,this.noUpdateTTL=!!ce,this.noDeleteOnFetchRejection=!!Be,this.allowStaleOnFetchRejection=!!Ke,this.allowStaleOnFetchAbort=!!Re,this.ignoreFetchAbort=!!Ze,this.maxEntrySize!==0){if(M(this,k)!==0&&!n(M(this,k)))throw new TypeError("maxSize must be a positive integer if specified");if(!n(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");Oe(this,X,Os).call(this)}if(this.allowStale=!!d,this.noDeleteOnStaleGet=!!Je,this.updateAgeOnGet=!!c,this.updateAgeOnHas=!!u,this.ttlResolution=n(Z)||Z===0?Z:1,this.ttlAutopurge=!!oe,this.ttl=z||0,this.ttl){if(!n(this.ttl))throw new TypeError("ttl must be a positive integer if specified");Oe(this,X,Ei).call(this)}if(M(this,v)===0&&this.ttl===0&&M(this,k)===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!M(this,v)&&!M(this,k)){let Qe="LRU_CACHE_UNBOUNDED";o(Qe)&&(t.add(Qe),h("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",Qe,ee))}}static unsafeExposeInternals(S){return{starts:M(S,_e),ttls:M(S,he),sizes:M(S,J),keyMap:M(S,I),keyList:M(S,C),valList:M(S,R),next:M(S,Q),prev:M(S,te),get head(){return M(S,se)},get tail(){return M(S,T)},free:M(S,K),isBackgroundFetch:j=>{var z;return Oe(z=S,X,Fe).call(z,j)},backgroundFetch:(j,z,Z,oe)=>{var c;return Oe(c=S,X,jr).call(c,j,z,Z,oe)},moveToTail:j=>{var z;return Oe(z=S,X,vr).call(z,j)},indexes:j=>{var z;return Oe(z=S,X,Wt).call(z,j)},rindexes:j=>{var z;return Oe(z=S,X,Dt).call(z,j)},isStale:j=>{var z;return M(z=S,le).call(z,j)}}}get max(){return M(this,v)}get maxSize(){return M(this,k)}get calculatedSize(){return M(this,q)}get size(){return M(this,U)}get fetchMethod(){return M(this,w)}get dispose(){return M(this,N)}get disposeAfter(){return M(this,B)}getRemainingTTL(S){return M(this,I).has(S)?1/0:0}*entries(){for(let S of Oe(this,X,Wt).call(this))M(this,R)[S]!==void 0&&M(this,C)[S]!==void 0&&!Oe(this,X,Fe).call(this,M(this,R)[S])&&(yield[M(this,C)[S],M(this,R)[S]])}*rentries(){for(let S of Oe(this,X,Dt).call(this))M(this,R)[S]!==void 0&&M(this,C)[S]!==void 0&&!Oe(this,X,Fe).call(this,M(this,R)[S])&&(yield[M(this,C)[S],M(this,R)[S]])}*keys(){for(let S of Oe(this,X,Wt).call(this)){let j=M(this,C)[S];j!==void 0&&!Oe(this,X,Fe).call(this,M(this,R)[S])&&(yield j)}}*rkeys(){for(let S of Oe(this,X,Dt).call(this)){let j=M(this,C)[S];j!==void 0&&!Oe(this,X,Fe).call(this,M(this,R)[S])&&(yield j)}}*values(){for(let S of Oe(this,X,Wt).call(this))M(this,R)[S]!==void 0&&!Oe(this,X,Fe).call(this,M(this,R)[S])&&(yield M(this,R)[S])}*rvalues(){for(let S of Oe(this,X,Dt).call(this))M(this,R)[S]!==void 0&&!Oe(this,X,Fe).call(this,M(this,R)[S])&&(yield M(this,R)[S])}[Symbol.iterator](){return this.entries()}find(S,j={}){for(let z of Oe(this,X,Wt).call(this)){let Z=M(this,R)[z],oe=Oe(this,X,Fe).call(this,Z)?Z.__staleWhileFetching:Z;if(oe!==void 0&&S(oe,M(this,C)[z],this))return this.get(M(this,C)[z],j)}}forEach(S,j=this){for(let z of Oe(this,X,Wt).call(this)){let Z=M(this,R)[z],oe=Oe(this,X,Fe).call(this,Z)?Z.__staleWhileFetching:Z;oe!==void 0&&S.call(j,oe,M(this,C)[z],this)}}rforEach(S,j=this){for(let z of Oe(this,X,Dt).call(this)){let Z=M(this,R)[z],oe=Oe(this,X,Fe).call(this,Z)?Z.__staleWhileFetching:Z;oe!==void 0&&S.call(j,oe,M(this,C)[z],this)}}purgeStale(){let S=!1;for(let j of Oe(this,X,Dt).call(this,{allowStale:!0}))M(this,le).call(this,j)&&(this.delete(M(this,C)[j]),S=!0);return S}dump(){let S=[];for(let j of Oe(this,X,Wt).call(this,{allowStale:!0})){let z=M(this,C)[j],Z=M(this,R)[j],oe=Oe(this,X,Fe).call(this,Z)?Z.__staleWhileFetching:Z;if(oe===void 0||z===void 0)continue;let c={value:oe};if(M(this,he)&&M(this,_e)){c.ttl=M(this,he)[j];let u=i.now()-M(this,_e)[j];c.start=Math.floor(Date.now()-u)}M(this,J)&&(c.size=M(this,J)[j]),S.unshift([z,c])}return S}load(S){this.clear();for(let[j,z]of S){if(z.start){let Z=Date.now()-z.start;z.start=i.now()-Z}this.set(j,z.value,z)}}set(S,j,z={}){var ce,Pe,Me;if(j===void 0)return this.delete(S),this;let{ttl:Z=this.ttl,start:oe,noDisposeOnSet:c=this.noDisposeOnSet,sizeCalculation:u=this.sizeCalculation,status:d}=z,{noUpdateTTL:_=this.noUpdateTTL}=z,P=M(this,ge).call(this,S,j,z.size||0,u);if(this.maxEntrySize&&P>this.maxEntrySize)return d&&(d.set="miss",d.maxEntrySizeExceeded=!0),this.delete(S),this;let D=M(this,U)===0?void 0:M(this,I).get(S);if(D===void 0)D=M(this,U)===0?M(this,T):M(this,K).length!==0?M(this,K).pop():M(this,U)===M(this,v)?Oe(this,X,Mr).call(this,!1):M(this,U),M(this,C)[D]=S,M(this,R)[D]=j,M(this,I).set(S,D),M(this,Q)[M(this,T)]=D,M(this,te)[D]=M(this,T),xe(this,T,D),Ar(this,U)._++,M(this,Y).call(this,D,P,d),d&&(d.set="add"),_=!1;else{Oe(this,X,vr).call(this,D);let Ie=M(this,R)[D];if(j!==Ie){if(M(this,Ae)&&Oe(this,X,Fe).call(this,Ie)){Ie.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:Te}=Ie;Te!==void 0&&!c&&(M(this,V)&&((ce=M(this,N))==null||ce.call(this,Te,S,"set")),M(this,ie)&&M(this,re)?.push([Te,S,"set"]))}else c||(M(this,V)&&((Pe=M(this,N))==null||Pe.call(this,Ie,S,"set")),M(this,ie)&&M(this,re)?.push([Ie,S,"set"]));if(M(this,A).call(this,D),M(this,Y).call(this,D,P,d),M(this,R)[D]=j,d){d.set="replace";let Te=Ie&&Oe(this,X,Fe).call(this,Ie)?Ie.__staleWhileFetching:Ie;Te!==void 0&&(d.oldValue=Te)}}else d&&(d.set="update")}if(Z!==0&&!M(this,he)&&Oe(this,X,Ei).call(this),M(this,he)&&(_||M(this,Ce).call(this,D,Z,oe),d&&M(this,ve).call(this,d,D)),!c&&M(this,ie)&&M(this,re)){let Ie=M(this,re),Te;for(;Te=Ie?.shift();)(Me=M(this,B))==null||Me.call(this,...Te)}return this}pop(){var S;try{for(;M(this,U);){let j=M(this,R)[M(this,se)];if(Oe(this,X,Mr).call(this,!0),Oe(this,X,Fe).call(this,j)){if(j.__staleWhileFetching)return j.__staleWhileFetching}else if(j!==void 0)return j}}finally{if(M(this,ie)&&M(this,re)){let j=M(this,re),z;for(;z=j?.shift();)(S=M(this,B))==null||S.call(this,...z)}}}has(S,j={}){let{updateAgeOnHas:z=this.updateAgeOnHas,status:Z}=j,oe=M(this,I).get(S);if(oe!==void 0){let c=M(this,R)[oe];if(Oe(this,X,Fe).call(this,c)&&c.__staleWhileFetching===void 0)return!1;if(M(this,le).call(this,oe))Z&&(Z.has="stale",M(this,ve).call(this,Z,oe));else return z&&M(this,G).call(this,oe),Z&&(Z.has="hit",M(this,ve).call(this,Z,oe)),!0}else Z&&(Z.has="miss");return!1}peek(S,j={}){let{allowStale:z=this.allowStale}=j,Z=M(this,I).get(S);if(Z!==void 0&&(z||!M(this,le).call(this,Z))){let oe=M(this,R)[Z];return Oe(this,X,Fe).call(this,oe)?oe.__staleWhileFetching:oe}}async fetch(S,j={}){let{allowStale:z=this.allowStale,updateAgeOnGet:Z=this.updateAgeOnGet,noDeleteOnStaleGet:oe=this.noDeleteOnStaleGet,ttl:c=this.ttl,noDisposeOnSet:u=this.noDisposeOnSet,size:d=0,sizeCalculation:_=this.sizeCalculation,noUpdateTTL:P=this.noUpdateTTL,noDeleteOnFetchRejection:D=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:ce=this.allowStaleOnFetchRejection,ignoreFetchAbort:Pe=this.ignoreFetchAbort,allowStaleOnFetchAbort:Me=this.allowStaleOnFetchAbort,context:Ie,forceRefresh:Te=!1,status:Be,signal:Je}=j;if(!M(this,Ae))return Be&&(Be.fetch="get"),this.get(S,{allowStale:z,updateAgeOnGet:Z,noDeleteOnStaleGet:oe,status:Be});let Ke={allowStale:z,updateAgeOnGet:Z,noDeleteOnStaleGet:oe,ttl:c,noDisposeOnSet:u,size:d,sizeCalculation:_,noUpdateTTL:P,noDeleteOnFetchRejection:D,allowStaleOnFetchRejection:ce,allowStaleOnFetchAbort:Me,ignoreFetchAbort:Pe,status:Be,signal:Je},Re=M(this,I).get(S);if(Re===void 0){Be&&(Be.fetch="miss");let Ze=Oe(this,X,jr).call(this,S,Re,Ke,Ie);return Ze.__returned=Ze}else{let Ze=M(this,R)[Re];if(Oe(this,X,Fe).call(this,Ze)){let Er=z&&Ze.__staleWhileFetching!==void 0;return Be&&(Be.fetch="inflight",Er&&(Be.returnedStale=!0)),Er?Ze.__staleWhileFetching:Ze.__returned=Ze}let st=M(this,le).call(this,Re);if(!Te&&!st)return Be&&(Be.fetch="hit"),Oe(this,X,vr).call(this,Re),Z&&M(this,G).call(this,Re),Be&&M(this,ve).call(this,Be,Re),Ze;let Qe=Oe(this,X,jr).call(this,S,Re,Ke,Ie),at=Qe.__staleWhileFetching!==void 0&&z;return Be&&(Be.fetch=st?"stale":"refresh",at&&st&&(Be.returnedStale=!0)),at?Qe.__staleWhileFetching:Qe.__returned=Qe}}get(S,j={}){let{allowStale:z=this.allowStale,updateAgeOnGet:Z=this.updateAgeOnGet,noDeleteOnStaleGet:oe=this.noDeleteOnStaleGet,status:c}=j,u=M(this,I).get(S);if(u!==void 0){let d=M(this,R)[u],_=Oe(this,X,Fe).call(this,d);return c&&M(this,ve).call(this,c,u),M(this,le).call(this,u)?(c&&(c.get="stale"),_?(c&&z&&d.__staleWhileFetching!==void 0&&(c.returnedStale=!0),z?d.__staleWhileFetching:void 0):(oe||this.delete(S),c&&z&&(c.returnedStale=!0),z?d:void 0)):(c&&(c.get="hit"),_?d.__staleWhileFetching:(Oe(this,X,vr).call(this,u),Z&&M(this,G).call(this,u),d))}else c&&(c.get="miss")}delete(S){var z,Z;let j=!1;if(M(this,U)!==0){let oe=M(this,I).get(S);if(oe!==void 0)if(j=!0,M(this,U)===1)this.clear();else{M(this,A).call(this,oe);let c=M(this,R)[oe];Oe(this,X,Fe).call(this,c)?c.__abortController.abort(new Error("deleted")):(M(this,V)||M(this,ie))&&(M(this,V)&&((z=M(this,N))==null||z.call(this,c,S,"delete")),M(this,ie)&&M(this,re)?.push([c,S,"delete"])),M(this,I).delete(S),M(this,C)[oe]=void 0,M(this,R)[oe]=void 0,oe===M(this,T)?xe(this,T,M(this,te)[oe]):oe===M(this,se)?xe(this,se,M(this,Q)[oe]):(M(this,Q)[M(this,te)[oe]]=M(this,Q)[oe],M(this,te)[M(this,Q)[oe]]=M(this,te)[oe]),Ar(this,U)._--,M(this,K).push(oe)}}if(M(this,ie)&&M(this,re)?.length){let oe=M(this,re),c;for(;c=oe?.shift();)(Z=M(this,B))==null||Z.call(this,...c)}return j}clear(){var S,j;for(let z of Oe(this,X,Dt).call(this,{allowStale:!0})){let Z=M(this,R)[z];if(Oe(this,X,Fe).call(this,Z))Z.__abortController.abort(new Error("deleted"));else{let oe=M(this,C)[z];M(this,V)&&((S=M(this,N))==null||S.call(this,Z,oe,"delete")),M(this,ie)&&M(this,re)?.push([Z,oe,"delete"])}}if(M(this,I).clear(),M(this,R).fill(void 0),M(this,C).fill(void 0),M(this,he)&&M(this,_e)&&(M(this,he).fill(0),M(this,_e).fill(0)),M(this,J)&&M(this,J).fill(0),xe(this,se,0),xe(this,T,0),M(this,K).length=0,xe(this,q,0),xe(this,U,0),M(this,ie)&&M(this,re)){let z=M(this,re),Z;for(;Z=z?.shift();)(j=M(this,B))==null||j.call(this,...Z)}}},v=new WeakMap,k=new WeakMap,N=new WeakMap,B=new WeakMap,w=new WeakMap,U=new WeakMap,q=new WeakMap,I=new WeakMap,C=new WeakMap,R=new WeakMap,Q=new WeakMap,te=new WeakMap,se=new WeakMap,T=new WeakMap,K=new WeakMap,re=new WeakMap,J=new WeakMap,_e=new WeakMap,he=new WeakMap,V=new WeakMap,Ae=new WeakMap,ie=new WeakMap,X=new WeakSet,Ei=function(){let S=new f(M(this,v)),j=new f(M(this,v));xe(this,he,S),xe(this,_e,j),xe(this,Ce,(oe,c,u=i.now())=>{if(j[oe]=c!==0?u:0,S[oe]=c,c!==0&&this.ttlAutopurge){let d=setTimeout(()=>{M(this,le).call(this,oe)&&this.delete(M(this,C)[oe])},c+1);d.unref&&d.unref()}}),xe(this,G,oe=>{j[oe]=S[oe]!==0?i.now():0}),xe(this,ve,(oe,c)=>{if(S[c]){let u=S[c],d=j[c];oe.ttl=u,oe.start=d,oe.now=z||Z();let _=oe.now-d;oe.remainingTTL=u-_}});let z=0,Z=()=>{let oe=i.now();if(this.ttlResolution>0){z=oe;let c=setTimeout(()=>z=0,this.ttlResolution);c.unref&&c.unref()}return oe};this.getRemainingTTL=oe=>{let c=M(this,I).get(oe);if(c===void 0)return 0;let u=S[c],d=j[c];if(u===0||d===0)return 1/0;let _=(z||Z())-d;return u-_},xe(this,le,oe=>S[oe]!==0&&j[oe]!==0&&(z||Z())-j[oe]>S[oe])},G=new WeakMap,ve=new WeakMap,Ce=new WeakMap,le=new WeakMap,Os=function(){let S=new f(M(this,v));xe(this,q,0),xe(this,J,S),xe(this,A,j=>{xe(this,q,M(this,q)-S[j]),S[j]=0}),xe(this,ge,(j,z,Z,oe)=>{if(Oe(this,X,Fe).call(this,z))return 0;if(!n(Z))if(oe){if(typeof oe!="function")throw new TypeError("sizeCalculation must be a function");if(Z=oe(z,j),!n(Z))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return Z}),xe(this,Y,(j,z,Z)=>{if(S[j]=z,M(this,k)){let oe=M(this,k)-S[j];for(;M(this,q)>oe;)Oe(this,X,Mr).call(this,!0)}xe(this,q,M(this,q)+S[j]),Z&&(Z.entrySize=z,Z.totalCalculatedSize=M(this,q))})},A=new WeakMap,Y=new WeakMap,ge=new WeakMap,Wt=function*({allowStale:S=this.allowStale}={}){if(M(this,U))for(let j=M(this,T);!(!Oe(this,X,Si).call(this,j)||((S||!M(this,le).call(this,j))&&(yield j),j===M(this,se)));)j=M(this,te)[j]},Dt=function*({allowStale:S=this.allowStale}={}){if(M(this,U))for(let j=M(this,se);!(!Oe(this,X,Si).call(this,j)||((S||!M(this,le).call(this,j))&&(yield j),j===M(this,T)));)j=M(this,Q)[j]},Si=function(S){return S!==void 0&&M(this,I).get(M(this,C)[S])===S},Mr=function(S){var oe;let j=M(this,se),z=M(this,C)[j],Z=M(this,R)[j];return M(this,Ae)&&Oe(this,X,Fe).call(this,Z)?Z.__abortController.abort(new Error("evicted")):(M(this,V)||M(this,ie))&&(M(this,V)&&((oe=M(this,N))==null||oe.call(this,Z,z,"evict")),M(this,ie)&&M(this,re)?.push([Z,z,"evict"])),M(this,A).call(this,j),S&&(M(this,C)[j]=void 0,M(this,R)[j]=void 0,M(this,K).push(j)),M(this,U)===1?(xe(this,se,xe(this,T,0)),M(this,K).length=0):xe(this,se,M(this,Q)[j]),M(this,I).delete(z),Ar(this,U)._--,j},jr=function(S,j,z,Z){let oe=j===void 0?void 0:M(this,R)[j];if(Oe(this,X,Fe).call(this,oe))return oe;let c=new s,{signal:u}=z;u?.addEventListener("abort",()=>c.abort(u.reason),{signal:c.signal});let d={signal:c.signal,options:z,context:Z},_=(Ie,Te=!1)=>{let{aborted:Be}=c.signal,Je=z.ignoreFetchAbort&&Ie!==void 0;if(z.status&&(Be&&!Te?(z.status.fetchAborted=!0,z.status.fetchError=c.signal.reason,Je&&(z.status.fetchAbortIgnored=!0)):z.status.fetchResolved=!0),Be&&!Je&&!Te)return D(c.signal.reason);let Ke=Pe;return M(this,R)[j]===Pe&&(Ie===void 0?Ke.__staleWhileFetching?M(this,R)[j]=Ke.__staleWhileFetching:this.delete(S):(z.status&&(z.status.fetchUpdated=!0),this.set(S,Ie,d.options))),Ie},P=Ie=>(z.status&&(z.status.fetchRejected=!0,z.status.fetchError=Ie),D(Ie)),D=Ie=>{let{aborted:Te}=c.signal,Be=Te&&z.allowStaleOnFetchAbort,Je=Be||z.allowStaleOnFetchRejection,Ke=Je||z.noDeleteOnFetchRejection,Re=Pe;if(M(this,R)[j]===Pe&&(!Ke||Re.__staleWhileFetching===void 0?this.delete(S):Be||(M(this,R)[j]=Re.__staleWhileFetching)),Je)return z.status&&Re.__staleWhileFetching!==void 0&&(z.status.returnedStale=!0),Re.__staleWhileFetching;if(Re.__returned===Re)throw Ie},ce=(Ie,Te)=>{var Je;let Be=(Je=M(this,w))==null?void 0:Je.call(this,S,oe,d);Be&&Be instanceof Promise&&Be.then(Ke=>Ie(Ke===void 0?void 0:Ke),Te),c.signal.addEventListener("abort",()=>{(!z.ignoreFetchAbort||z.allowStaleOnFetchAbort)&&(Ie(void 0),z.allowStaleOnFetchAbort&&(Ie=Ke=>_(Ke,!0)))})};z.status&&(z.status.fetchDispatched=!0);let Pe=new Promise(ce).then(_,P),Me=Object.assign(Pe,{__abortController:c,__staleWhileFetching:oe,__returned:void 0});return j===void 0?(this.set(S,Me,{...d.options,status:void 0}),j=M(this,I).get(S)):M(this,R)[j]=Me,Me},Fe=function(S){if(!M(this,Ae))return!1;let j=S;return!!j&&j instanceof Promise&&j.hasOwnProperty("__staleWhileFetching")&&j.__abortController instanceof s},Ai=function(S,j){M(this,te)[j]=S,M(this,Q)[S]=j},vr=function(S){S!==M(this,T)&&(S===M(this,se)?xe(this,se,M(this,Q)[S]):Oe(this,X,Ai).call(this,M(this,te)[S],M(this,Q)[S]),Oe(this,X,Ai).call(this,M(this,T),S),xe(this,T,S))},ee);e.LRUCache=g}),jt=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.ContainerIterator=e.Container=e.Base=void 0;var i=class{constructor(h=0){this.iteratorType=h}equals(h){return this.o===h.o}};e.ContainerIterator=i;var t=class{constructor(){this.i=0}get length(){return this.i}size(){return this.i}empty(){return this.i===0}};e.Base=t;var l=class extends t{};e.Container=l}),du=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=jt(),t=class extends i.Base{constructor(h=[]){super(),this.S=[];let s=this;h.forEach(function(r){s.push(r)})}clear(){this.i=0,this.S=[]}push(h){return this.S.push(h),this.i+=1,this.i}pop(){if(this.i!==0)return this.i-=1,this.S.pop()}top(){return this.S[this.i-1]}},l=t;e.default=l}),pu=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=jt(),t=class extends i.Base{constructor(h=[]){super(),this.j=0,this.q=[];let s=this;h.forEach(function(r){s.push(r)})}clear(){this.q=[],this.i=this.j=0}push(h){let s=this.q.length;if(this.j/s>.5&&this.j+this.i>=s&&s>4096){let r=this.i;for(let o=0;o{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=jt(),t=class extends i.Base{constructor(h=[],s=function(o,n){return o>n?-1:o>1;for(let n=this.i-1>>1;n>=0;--n)this.k(n,o)}m(h){let s=this.C[h];for(;h>0;){let r=h-1>>1,o=this.C[r];if(this.v(o,s)<=0)break;this.C[h]=o,h=r}this.C[h]=s}k(h,s){let r=this.C[h];for(;h0&&(o=n,a=this.C[n]),this.v(a,r)>=0)break;this.C[h]=a,h=o}this.C[h]=r}clear(){this.i=0,this.C.length=0}push(h){this.C.push(h),this.m(this.i),this.i+=1}pop(){if(this.i===0)return;let h=this.C[0],s=this.C.pop();return this.i-=1,this.i&&(this.C[0]=s,this.k(0,this.i>>1)),h}top(){return this.C[0]}find(h){return this.C.indexOf(h)>=0}remove(h){let s=this.C.indexOf(h);return s<0?!1:(s===0?this.pop():s===this.i-1?(this.C.pop(),this.i-=1):(this.C.splice(s,1,this.C.pop()),this.i-=1,this.m(s),this.k(s,this.i>>1)),!0)}updateItem(h){let s=this.C.indexOf(h);return s<0?!1:(this.m(s),this.k(s,this.i>>1),!0)}toArray(){return[...this.C]}},l=t;e.default=l}),qi=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=jt(),t=class extends i.Container{},l=t;e.default=l}),Ut=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.throwIteratorAccessError=i;function i(){throw new RangeError("Iterator access denied!")}}),Bs=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.RandomIterator=void 0;var i=jt(),t=Ut(),l=class extends i.ContainerIterator{constructor(h,s){super(s),this.o=h,this.iteratorType===0?(this.pre=function(){return this.o===0&&(0,t.throwIteratorAccessError)(),this.o-=1,this},this.next=function(){return this.o===this.container.size()&&(0,t.throwIteratorAccessError)(),this.o+=1,this}):(this.pre=function(){return this.o===this.container.size()-1&&(0,t.throwIteratorAccessError)(),this.o+=1,this},this.next=function(){return this.o===-1&&(0,t.throwIteratorAccessError)(),this.o-=1,this})}get pointer(){return this.container.getElementByPos(this.o)}set pointer(h){this.container.setElementByPos(this.o,h)}};e.RandomIterator=l}),mu=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=l(qi()),t=Bs();function l(o){return o&&o.t?o:{default:o}}var h=class Ps extends t.RandomIterator{constructor(n,a,f){super(n,f),this.container=a}copy(){return new Ps(this.o,this.container,this.iteratorType)}},s=class extends i.default{constructor(o=[],n=!0){if(super(),Array.isArray(o))this.J=n?[...o]:o,this.i=o.length;else{this.J=[];let a=this;o.forEach(function(f){a.pushBack(f)})}}clear(){this.i=0,this.J.length=0}begin(){return new h(0,this)}end(){return new h(this.i,this)}rBegin(){return new h(this.i-1,this,1)}rEnd(){return new h(-1,this,1)}front(){return this.J[0]}back(){return this.J[this.i-1]}getElementByPos(o){if(o<0||o>this.i-1)throw new RangeError;return this.J[o]}eraseElementByPos(o){if(o<0||o>this.i-1)throw new RangeError;return this.J.splice(o,1),this.i-=1,this.i}eraseElementByValue(o){let n=0;for(let a=0;athis.i-1)throw new RangeError;this.J[o]=n}insert(o,n,a=1){if(o<0||o>this.i)throw new RangeError;return this.J.splice(o,0,...new Array(a).fill(n)),this.i+=a,this.i}find(o){for(let n=0;n{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=h(qi()),t=jt(),l=Ut();function h(n){return n&&n.t?n:{default:n}}var s=class Rs extends t.ContainerIterator{constructor(a,f,p,g){super(g),this.o=a,this.h=f,this.container=p,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0,l.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0,l.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0,l.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0,l.throwIteratorAccessError)(),this.o=this.o.L,this})}get pointer(){return this.o===this.h&&(0,l.throwIteratorAccessError)(),this.o.l}set pointer(a){this.o===this.h&&(0,l.throwIteratorAccessError)(),this.o.l=a}copy(){return new Rs(this.o,this.h,this.container,this.iteratorType)}},r=class extends i.default{constructor(n=[]){super(),this.h={},this.p=this._=this.h.L=this.h.B=this.h;let a=this;n.forEach(function(f){a.pushBack(f)})}V(n){let{L:a,B:f}=n;a.B=f,f.L=a,n===this.p&&(this.p=f),n===this._&&(this._=a),this.i-=1}G(n,a){let f=a.B,p={l:n,L:a,B:f};a.B=p,f.L=p,a===this.h&&(this.p=p),f===this.h&&(this._=p),this.i+=1}clear(){this.i=0,this.p=this._=this.h.L=this.h.B=this.h}begin(){return new s(this.p,this.h,this)}end(){return new s(this.h,this.h,this)}rBegin(){return new s(this._,this.h,this,1)}rEnd(){return new s(this.h,this.h,this,1)}front(){return this.p.l}back(){return this._.l}getElementByPos(n){if(n<0||n>this.i-1)throw new RangeError;let a=this.p;for(;n--;)a=a.B;return a.l}eraseElementByPos(n){if(n<0||n>this.i-1)throw new RangeError;let a=this.p;for(;n--;)a=a.B;return this.V(a),this.i}eraseElementByValue(n){let a=this.p;for(;a!==this.h;)a.l===n&&this.V(a),a=a.B;return this.i}eraseElementByIterator(n){let a=n.o;return a===this.h&&(0,l.throwIteratorAccessError)(),n=n.next(),this.V(a),n}pushBack(n){return this.G(n,this._),this.i}popBack(){if(this.i===0)return;let n=this._.l;return this.V(this._),n}pushFront(n){return this.G(n,this.h),this.i}popFront(){if(this.i===0)return;let n=this.p.l;return this.V(this.p),n}setElementByPos(n,a){if(n<0||n>this.i-1)throw new RangeError;let f=this.p;for(;n--;)f=f.B;f.l=a}insert(n,a,f=1){if(n<0||n>this.i)throw new RangeError;if(f<=0)return this.i;if(n===0)for(;f--;)this.pushFront(a);else if(n===this.i)for(;f--;)this.pushBack(a);else{let p=this.p;for(let m=1;m{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=l(qi()),t=Bs();function l(o){return o&&o.t?o:{default:o}}var h=class xs extends t.RandomIterator{constructor(n,a,f){super(n,f),this.container=a}copy(){return new xs(this.o,this.container,this.iteratorType)}},s=class extends i.default{constructor(o=[],n=4096){super(),this.j=0,this.D=0,this.R=0,this.N=0,this.P=0,this.A=[];let a=(()=>{if(typeof o.length=="number")return o.length;if(typeof o.size=="number")return o.size;if(typeof o.size=="function")return o.size();throw new TypeError("Cannot get the length or size of the container")})();this.F=n,this.P=Math.max(Math.ceil(a/this.F),1);for(let g=0;g>1)-(f>>1),this.D=this.N=this.F-a%this.F>>1;let p=this;o.forEach(function(g){p.pushBack(g)})}T(){let o=[],n=Math.max(this.P>>1,1);for(let a=0;a>1}begin(){return new h(0,this)}end(){return new h(this.i,this)}rBegin(){return new h(this.i-1,this,1)}rEnd(){return new h(-1,this,1)}front(){if(this.i!==0)return this.A[this.j][this.D]}back(){if(this.i!==0)return this.A[this.R][this.N]}pushBack(o){return this.i&&(this.N0?this.N-=1:this.R>0?(this.R-=1,this.N=this.F-1):(this.R=this.P-1,this.N=this.F-1)),this.i-=1,o}pushFront(o){return this.i&&(this.D>0?this.D-=1:this.j>0?(this.j-=1,this.D=this.F-1):(this.j=this.P-1,this.D=this.F-1),this.j===this.R&&this.D===this.N&&this.T()),this.i+=1,this.A[this.j][this.D]=o,this.i}popFront(){if(this.i===0)return;let o=this.A[this.j][this.D];return this.i!==1&&(this.Dthis.i-1)throw new RangeError;let{curNodeBucketIndex:n,curNodePointerIndex:a}=this.O(o);return this.A[n][a]}setElementByPos(o,n){if(o<0||o>this.i-1)throw new RangeError;let{curNodeBucketIndex:a,curNodePointerIndex:f}=this.O(o);this.A[a][f]=n}insert(o,n,a=1){if(o<0||o>this.i)throw new RangeError;if(o===0)for(;a--;)this.pushFront(n);else if(o===this.i)for(;a--;)this.pushBack(n);else{let f=[];for(let p=o;pthis.i-1)throw new RangeError;if(o===0)this.popFront();else if(o===this.i-1)this.popBack();else{let n=[];for(let f=o+1;fo;)this.popBack();return this.i}sort(o){let n=[];for(let a=0;a{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.TreeNodeEnableIndex=e.TreeNode=void 0;var i=class{constructor(l,h){this.ee=1,this.u=void 0,this.l=void 0,this.U=void 0,this.W=void 0,this.tt=void 0,this.u=l,this.l=h}L(){let l=this;if(l.ee===1&&l.tt.tt===l)l=l.W;else if(l.U)for(l=l.U;l.W;)l=l.W;else{let h=l.tt;for(;h.U===l;)l=h,h=l.tt;l=h}return l}B(){let l=this;if(l.W){for(l=l.W;l.U;)l=l.U;return l}else{let h=l.tt;for(;h.W===l;)l=h,h=l.tt;return l.W!==h?h:l}}te(){let l=this.tt,h=this.W,s=h.U;return l.tt===this?l.tt=h:l.U===this?l.U=h:l.W=h,h.tt=l,h.U=this,this.tt=h,this.W=s,s&&(s.tt=this),h}se(){let l=this.tt,h=this.U,s=h.W;return l.tt===this?l.tt=h:l.U===this?l.U=h:l.W=h,h.tt=l,h.W=this,this.tt=h,this.U=s,s&&(s.tt=this),h}};e.TreeNode=i;var t=class extends i{constructor(){super(...arguments),this.rt=1}te(){let l=super.te();return this.ie(),l.ie(),l}se(){let l=super.se();return this.ie(),l.ie(),l}ie(){this.rt=1,this.U&&(this.rt+=this.U.rt),this.W&&(this.rt+=this.W.rt)}};e.TreeNodeEnableIndex=t}),Ms=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=vu(),t=jt(),l=Ut(),h=class extends t.Container{constructor(r=function(n,a){return na?1:0},o=!1){super(),this.Y=void 0,this.v=r,o?(this.re=i.TreeNodeEnableIndex,this.M=function(n,a,f){let p=this.ne(n,a,f);if(p){let g=p.tt;for(;g!==this.h;)g.rt+=1,g=g.tt;let m=this.he(p);if(m){let{parentNode:b,grandParent:v,curNode:k}=m;b.ie(),v.ie(),k.ie()}}return this.i},this.V=function(n){let a=this.fe(n);for(;a!==this.h;)a.rt-=1,a=a.tt}):(this.re=i.TreeNode,this.M=function(n,a,f){let p=this.ne(n,a,f);return p&&this.he(p),this.i},this.V=this.fe),this.h=new this.re}X(r,o){let n=this.h;for(;r;){let a=this.v(r.u,o);if(a<0)r=r.W;else if(a>0)n=r,r=r.U;else return r}return n}Z(r,o){let n=this.h;for(;r;)this.v(r.u,o)<=0?r=r.W:(n=r,r=r.U);return n}$(r,o){let n=this.h;for(;r;){let a=this.v(r.u,o);if(a<0)n=r,r=r.W;else if(a>0)r=r.U;else return r}return n}rr(r,o){let n=this.h;for(;r;)this.v(r.u,o)<0?(n=r,r=r.W):r=r.U;return n}ue(r){for(;;){let o=r.tt;if(o===this.h)return;if(r.ee===1){r.ee=0;return}if(r===o.U){let n=o.W;if(n.ee===1)n.ee=0,o.ee=1,o===this.Y?this.Y=o.te():o.te();else if(n.W&&n.W.ee===1){n.ee=o.ee,o.ee=0,n.W.ee=0,o===this.Y?this.Y=o.te():o.te();return}else n.U&&n.U.ee===1?(n.ee=1,n.U.ee=0,n.se()):(n.ee=1,r=o)}else{let n=o.U;if(n.ee===1)n.ee=0,o.ee=1,o===this.Y?this.Y=o.se():o.se();else if(n.U&&n.U.ee===1){n.ee=o.ee,o.ee=0,n.U.ee=0,o===this.Y?this.Y=o.se():o.se();return}else n.W&&n.W.ee===1?(n.ee=1,n.W.ee=0,n.te()):(n.ee=1,r=o)}}}fe(r){if(this.i===1)return this.clear(),this.h;let o=r;for(;o.U||o.W;){if(o.W)for(o=o.W;o.U;)o=o.U;else o=o.U;[r.u,o.u]=[o.u,r.u],[r.l,o.l]=[o.l,r.l],r=o}this.h.U===o?this.h.U=o.tt:this.h.W===o&&(this.h.W=o.tt),this.ue(o);let n=o.tt;return o===n.U?n.U=void 0:n.W=void 0,this.i-=1,this.Y.ee=0,n}oe(r,o){return r===void 0?!1:this.oe(r.U,o)||o(r)?!0:this.oe(r.W,o)}he(r){for(;;){let o=r.tt;if(o.ee===0)return;let n=o.tt;if(o===n.U){let a=n.W;if(a&&a.ee===1){if(a.ee=o.ee=0,n===this.Y)return;n.ee=1,r=n;continue}else if(r===o.W){if(r.ee=0,r.U&&(r.U.tt=o),r.W&&(r.W.tt=n),o.W=r.U,n.U=r.W,r.U=o,r.W=n,n===this.Y)this.Y=r,this.h.tt=r;else{let f=n.tt;f.U===n?f.U=r:f.W=r}return r.tt=n.tt,o.tt=r,n.tt=r,n.ee=1,{parentNode:o,grandParent:n,curNode:r}}else o.ee=0,n===this.Y?this.Y=n.se():n.se(),n.ee=1}else{let a=n.U;if(a&&a.ee===1){if(a.ee=o.ee=0,n===this.Y)return;n.ee=1,r=n;continue}else if(r===o.U){if(r.ee=0,r.U&&(r.U.tt=n),r.W&&(r.W.tt=o),n.W=r.U,o.U=r.W,r.U=n,r.W=o,n===this.Y)this.Y=r,this.h.tt=r;else{let f=n.tt;f.U===n?f.U=r:f.W=r}return r.tt=n.tt,o.tt=r,n.tt=r,n.ee=1,{parentNode:o,grandParent:n,curNode:r}}else o.ee=0,n===this.Y?this.Y=n.te():n.te(),n.ee=1}return}}ne(r,o,n){if(this.Y===void 0){this.i+=1,this.Y=new this.re(r,o),this.Y.ee=0,this.Y.tt=this.h,this.h.tt=this.Y,this.h.U=this.Y,this.h.W=this.Y;return}let a,f=this.h.U,p=this.v(f.u,r);if(p===0){f.l=o;return}else if(p>0)f.U=new this.re(r,o),f.U.tt=f,a=f.U,this.h.U=a;else{let g=this.h.W,m=this.v(g.u,r);if(m===0){g.l=o;return}else if(m<0)g.W=new this.re(r,o),g.W.tt=g,a=g.W,this.h.W=a;else{if(n!==void 0){let b=n.o;if(b!==this.h){let v=this.v(b.u,r);if(v===0){b.l=o;return}else if(v>0){let k=b.L(),N=this.v(k.u,r);if(N===0){k.l=o;return}else N<0&&(a=new this.re(r,o),k.W===void 0?(k.W=a,a.tt=k):(b.U=a,a.tt=b))}}}if(a===void 0)for(a=this.Y;;){let b=this.v(a.u,r);if(b>0){if(a.U===void 0){a.U=new this.re(r,o),a.U.tt=a,a=a.U;break}a=a.U}else if(b<0){if(a.W===void 0){a.W=new this.re(r,o),a.W.tt=a,a=a.W;break}a=a.W}else{a.l=o;return}}}}return this.i+=1,a}I(r,o){for(;r;){let n=this.v(r.u,o);if(n<0)r=r.W;else if(n>0)r=r.U;else return r}return r||this.h}clear(){this.i=0,this.Y=void 0,this.h.tt=void 0,this.h.U=this.h.W=void 0}updateKeyByIterator(r,o){let n=r.o;if(n===this.h&&(0,l.throwIteratorAccessError)(),this.i===1)return n.u=o,!0;if(n===this.h.U)return this.v(n.B().u,o)>0?(n.u=o,!0):!1;if(n===this.h.W)return this.v(n.L().u,o)<0?(n.u=o,!0):!1;let a=n.L().u;if(this.v(a,o)>=0)return!1;let f=n.B().u;return this.v(f,o)<=0?!1:(n.u=o,!0)}eraseElementByPos(r){if(r<0||r>this.i-1)throw new RangeError;let o=0,n=this;return this.oe(this.Y,function(a){return r===o?(n.V(a),!0):(o+=1,!1)}),this.i}eraseElementByKey(r){if(this.i===0)return!1;let o=this.I(this.Y,r);return o===this.h?!1:(this.V(o),!0)}eraseElementByIterator(r){let o=r.o;o===this.h&&(0,l.throwIteratorAccessError)();let n=o.W===void 0;return r.iteratorType===0?n&&r.next():(!n||o.U===void 0)&&r.next(),this.V(o),r}forEach(r){let o=0;for(let n of this)r(n,o++,this)}getElementByPos(r){if(r<0||r>this.i-1)throw new RangeError;let o,n=0;for(let a of this){if(n===r){o=a;break}n+=1}return o}getHeight(){if(this.i===0)return 0;let r=function(o){return o?Math.max(r(o.U),r(o.W))+1:0};return r(this.Y)}},s=h;e.default=s}),js=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=jt(),t=Ut(),l=class extends i.ContainerIterator{constructor(s,r,o){super(o),this.o=s,this.h=r,this.iteratorType===0?(this.pre=function(){return this.o===this.h.U&&(0,t.throwIteratorAccessError)(),this.o=this.o.L(),this},this.next=function(){return this.o===this.h&&(0,t.throwIteratorAccessError)(),this.o=this.o.B(),this}):(this.pre=function(){return this.o===this.h.W&&(0,t.throwIteratorAccessError)(),this.o=this.o.B(),this},this.next=function(){return this.o===this.h&&(0,t.throwIteratorAccessError)(),this.o=this.o.L(),this})}get index(){let s=this.o,r=this.h.tt;if(s===this.h)return r?r.rt-1:0;let o=0;for(s.U&&(o+=s.U.rt);s!==r;){let n=s.tt;s===n.W&&(o+=1,n.U&&(o+=n.U.rt)),s=n}return o}},h=l;e.default=h}),wu=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=h(Ms()),t=h(js()),l=Ut();function h(n){return n&&n.t?n:{default:n}}var s=class Us extends t.default{constructor(a,f,p,g){super(a,f,g),this.container=p}get pointer(){return this.o===this.h&&(0,l.throwIteratorAccessError)(),this.o.u}copy(){return new Us(this.o,this.h,this.container,this.iteratorType)}},r=class extends i.default{constructor(n=[],a,f){super(a,f);let p=this;n.forEach(function(g){p.insert(g)})}*K(n){n!==void 0&&(yield*this.K(n.U),yield n.u,yield*this.K(n.W))}begin(){return new s(this.h.U||this.h,this.h,this)}end(){return new s(this.h,this.h,this)}rBegin(){return new s(this.h.W||this.h,this.h,this,1)}rEnd(){return new s(this.h,this.h,this,1)}front(){return this.h.U?this.h.U.u:void 0}back(){return this.h.W?this.h.W.u:void 0}insert(n,a){return this.M(n,void 0,a)}find(n){let a=this.I(this.Y,n);return new s(a,this.h,this)}lowerBound(n){let a=this.X(this.Y,n);return new s(a,this.h,this)}upperBound(n){let a=this.Z(this.Y,n);return new s(a,this.h,this)}reverseLowerBound(n){let a=this.$(this.Y,n);return new s(a,this.h,this)}reverseUpperBound(n){let a=this.rr(this.Y,n);return new s(a,this.h,this)}union(n){let a=this;return n.forEach(function(f){a.insert(f)}),this.i}[Symbol.iterator](){return this.K(this.Y)}},o=r;e.default=o}),_u=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=h(Ms()),t=h(js()),l=Ut();function h(n){return n&&n.t?n:{default:n}}var s=class Ls extends t.default{constructor(a,f,p,g){super(a,f,g),this.container=p}get pointer(){this.o===this.h&&(0,l.throwIteratorAccessError)();let a=this;return new Proxy([],{get(f,p){if(p==="0")return a.o.u;if(p==="1")return a.o.l},set(f,p,g){if(p!=="1")throw new TypeError("props must be 1");return a.o.l=g,!0}})}copy(){return new Ls(this.o,this.h,this.container,this.iteratorType)}},r=class extends i.default{constructor(n=[],a,f){super(a,f);let p=this;n.forEach(function(g){p.setElement(g[0],g[1])})}*K(n){n!==void 0&&(yield*this.K(n.U),yield[n.u,n.l],yield*this.K(n.W))}begin(){return new s(this.h.U||this.h,this.h,this)}end(){return new s(this.h,this.h,this)}rBegin(){return new s(this.h.W||this.h,this.h,this,1)}rEnd(){return new s(this.h,this.h,this,1)}front(){if(this.i===0)return;let n=this.h.U;return[n.u,n.l]}back(){if(this.i===0)return;let n=this.h.W;return[n.u,n.l]}lowerBound(n){let a=this.X(this.Y,n);return new s(a,this.h,this)}upperBound(n){let a=this.Z(this.Y,n);return new s(a,this.h,this)}reverseLowerBound(n){let a=this.$(this.Y,n);return new s(a,this.h,this)}reverseUpperBound(n){let a=this.rr(this.Y,n);return new s(a,this.h,this)}setElement(n,a,f){return this.M(n,a,f)}find(n){let a=this.I(this.Y,n);return new s(a,this.h,this)}getElementByKey(n){return this.I(this.Y,n).l}union(n){let a=this;return n.forEach(function(f){a.setElement(f[0],f[1])}),this.i}[Symbol.iterator](){return this.K(this.Y)}},o=r;e.default=o}),Ns=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=i;function i(t){let l=typeof t;return l==="object"&&t!==null||l==="function"}}),Ws=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.HashContainerIterator=e.HashContainer=void 0;var i=jt(),t=h(Ns()),l=Ut();function h(o){return o&&o.t?o:{default:o}}var s=class extends i.ContainerIterator{constructor(o,n,a){super(a),this.o=o,this.h=n,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0,l.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0,l.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0,l.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0,l.throwIteratorAccessError)(),this.o=this.o.L,this})}};e.HashContainerIterator=s;var r=class extends i.Container{constructor(){super(),this.H=[],this.g={},this.HASH_TAG=Symbol("@@HASH_TAG"),Object.setPrototypeOf(this.g,null),this.h={},this.h.L=this.h.B=this.p=this._=this.h}V(o){let{L:n,B:a}=o;n.B=a,a.L=n,o===this.p&&(this.p=a),o===this._&&(this._=n),this.i-=1}M(o,n,a){a===void 0&&(a=(0,t.default)(o));let f;if(a){let p=o[this.HASH_TAG];if(p!==void 0)return this.H[p].l=n,this.i;Object.defineProperty(o,this.HASH_TAG,{value:this.H.length,configurable:!0}),f={u:o,l:n,L:this._,B:this.h},this.H.push(f)}else{let p=this.g[o];if(p)return p.l=n,this.i;f={u:o,l:n,L:this._,B:this.h},this.g[o]=f}return this.i===0?(this.p=f,this.h.B=f):this._.B=f,this._=f,this.h.L=f,++this.i}I(o,n){if(n===void 0&&(n=(0,t.default)(o)),n){let a=o[this.HASH_TAG];return a===void 0?this.h:this.H[a]}else return this.g[o]||this.h}clear(){let o=this.HASH_TAG;this.H.forEach(function(n){delete n.u[o]}),this.H=[],this.g={},Object.setPrototypeOf(this.g,null),this.i=0,this.p=this._=this.h.L=this.h.B=this.h}eraseElementByKey(o,n){let a;if(n===void 0&&(n=(0,t.default)(o)),n){let f=o[this.HASH_TAG];if(f===void 0)return!1;delete o[this.HASH_TAG],a=this.H[f],delete this.H[f]}else{if(a=this.g[o],a===void 0)return!1;delete this.g[o]}return this.V(a),!0}eraseElementByIterator(o){let n=o.o;return n===this.h&&(0,l.throwIteratorAccessError)(),this.V(n),o.next()}eraseElementByPos(o){if(o<0||o>this.i-1)throw new RangeError;let n=this.p;for(;o--;)n=n.B;return this.V(n),this.i}};e.HashContainer=r}),Eu=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=Ws(),t=Ut(),l=class Ds extends i.HashContainerIterator{constructor(o,n,a,f){super(o,n,f),this.container=a}get pointer(){return this.o===this.h&&(0,t.throwIteratorAccessError)(),this.o.u}copy(){return new Ds(this.o,this.h,this.container,this.iteratorType)}},h=class extends i.HashContainer{constructor(r=[]){super();let o=this;r.forEach(function(n){o.insert(n)})}begin(){return new l(this.p,this.h,this)}end(){return new l(this.h,this.h,this)}rBegin(){return new l(this._,this.h,this,1)}rEnd(){return new l(this.h,this.h,this,1)}front(){return this.p.u}back(){return this._.u}insert(r,o){return this.M(r,void 0,o)}getElementByPos(r){if(r<0||r>this.i-1)throw new RangeError;let o=this.p;for(;r--;)o=o.B;return o.u}find(r,o){let n=this.I(r,o);return new l(n,this.h,this)}forEach(r){let o=0,n=this.p;for(;n!==this.h;)r(n.u,o++,this),n=n.B}[Symbol.iterator](){return(function*(){let r=this.p;for(;r!==this.h;)yield r.u,r=r.B}).bind(this)()}},s=h;e.default=s}),Su=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var i=Ws(),t=h(Ns()),l=Ut();function h(n){return n&&n.t?n:{default:n}}var s=class Fs extends i.HashContainerIterator{constructor(a,f,p,g){super(a,f,g),this.container=p}get pointer(){this.o===this.h&&(0,l.throwIteratorAccessError)();let a=this;return new Proxy([],{get(f,p){if(p==="0")return a.o.u;if(p==="1")return a.o.l},set(f,p,g){if(p!=="1")throw new TypeError("props must be 1");return a.o.l=g,!0}})}copy(){return new Fs(this.o,this.h,this.container,this.iteratorType)}},r=class extends i.HashContainer{constructor(n=[]){super();let a=this;n.forEach(function(f){a.setElement(f[0],f[1])})}begin(){return new s(this.p,this.h,this)}end(){return new s(this.h,this.h,this)}rBegin(){return new s(this._,this.h,this,1)}rEnd(){return new s(this.h,this.h,this,1)}front(){if(this.i!==0)return[this.p.u,this.p.l]}back(){if(this.i!==0)return[this._.u,this._.l]}setElement(n,a,f){return this.M(n,a,f)}getElementByKey(n,a){if(a===void 0&&(a=(0,t.default)(n)),a){let p=n[this.HASH_TAG];return p!==void 0?this.H[p].l:void 0}let f=this.g[n];return f?f.l:void 0}getElementByPos(n){if(n<0||n>this.i-1)throw new RangeError;let a=this.p;for(;n--;)a=a.B;return[a.u,a.l]}find(n,a){let f=this.I(n,a);return new s(f,this.h,this)}forEach(n){let a=0,f=this.p;for(;f!==this.h;)n([f.u,f.l],a++,this),f=f.B}[Symbol.iterator](){return(function*(){let n=this.p;for(;n!==this.h;)yield[n.u,n.l],n=n.B}).bind(this)()}},o=r;e.default=o}),Au=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"t",{value:!0}),Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"HashMap",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(e,"HashSet",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"LinkList",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"OrderedMap",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"OrderedSet",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"PriorityQueue",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(e,"Queue",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"Stack",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"Vector",{enumerable:!0,get:function(){return h.default}});var i=p(du()),t=p(pu()),l=p(gu()),h=p(mu()),s=p(bu()),r=p(yu()),o=p(wu()),n=p(_u()),a=p(Eu()),f=p(Su());function p(g){return g&&g.t?g:{default:g}}}),ku=Se((e,i)=>{fe(),pe(),de();var t=Au().OrderedSet,l=xt()("number-allocator:trace"),h=xt()("number-allocator:error");function s(o,n){this.low=o,this.high=n}s.prototype.equals=function(o){return this.low===o.low&&this.high===o.high},s.prototype.compare=function(o){return this.lowa.compare(f)),l("Create"),this.clear()}r.prototype.firstVacant=function(){return this.ss.size()===0?null:this.ss.front().low},r.prototype.alloc=function(){if(this.ss.size()===0)return l("alloc():empty"),null;let o=this.ss.begin(),n=o.pointer.low,a=o.pointer.high,f=n;return f+1<=a?this.ss.updateKeyByIterator(o,new s(n+1,a)):this.ss.eraseElementByPos(0),l("alloc():"+f),f},r.prototype.use=function(o){let n=new s(o,o),a=this.ss.lowerBound(n);if(!a.equals(this.ss.end())){let f=a.pointer.low,p=a.pointer.high;return a.pointer.equals(n)?(this.ss.eraseElementByIterator(a),l("use():"+o),!0):f>o?!1:f===o?(this.ss.updateKeyByIterator(a,new s(f+1,p)),l("use():"+o),!0):p===o?(this.ss.updateKeyByIterator(a,new s(f,p-1)),l("use():"+o),!0):(this.ss.updateKeyByIterator(a,new s(o+1,p)),this.ss.insert(new s(f,o-1)),l("use():"+o),!0)}return l("use():failed"),!1},r.prototype.free=function(o){if(othis.max){h("free():"+o+" is out of range");return}let n=new s(o,o),a=this.ss.upperBound(n);if(a.equals(this.ss.end())){if(a.equals(this.ss.begin())){this.ss.insert(n);return}a.pre();let f=a.pointer.high;a.pointer.high+1===o?this.ss.updateKeyByIterator(a,new s(f,o)):this.ss.insert(n)}else if(a.equals(this.ss.begin()))if(o+1===a.pointer.low){let f=a.pointer.high;this.ss.updateKeyByIterator(a,new s(o,f))}else this.ss.insert(n);else{let f=a.pointer.low,p=a.pointer.high;a.pre();let g=a.pointer.low;a.pointer.high+1===o?o+1===f?(this.ss.eraseElementByIterator(a),this.ss.updateKeyByIterator(a,new s(g,p))):this.ss.updateKeyByIterator(a,new s(g,o)):o+1===f?(this.ss.eraseElementByIterator(a.next()),this.ss.insert(new s(o,p))):this.ss.insert(n)}l("free():"+o)},r.prototype.clear=function(){l("clear()"),this.ss.clear(),this.ss.insert(new s(this.min,this.max))},r.prototype.intervalCount=function(){return this.ss.size()},r.prototype.dump=function(){console.log("length:"+this.ss.size());for(let o of this.ss)console.log(o)},i.exports=r}),$s=Se((e,i)=>{fe(),pe(),de();var t=ku();i.exports.NumberAllocator=t}),Cu=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0});var i=fu(),t=$s(),l=class{constructor(h){h>0&&(this.aliasToTopic=new i.LRUCache({max:h}),this.topicToAlias={},this.numberAllocator=new t.NumberAllocator(1,h),this.max=h,this.length=0)}put(h,s){if(s===0||s>this.max)return!1;let r=this.aliasToTopic.get(s);return r&&delete this.topicToAlias[r],this.aliasToTopic.set(s,h),this.topicToAlias[h]=s,this.numberAllocator.use(s),this.length=this.aliasToTopic.size,!0}getTopicByAlias(h){return this.aliasToTopic.get(h)}getAliasByTopic(h){let s=this.topicToAlias[h];return typeof s<"u"&&this.aliasToTopic.get(s),s}clear(){this.aliasToTopic.clear(),this.topicToAlias={},this.numberAllocator.clear(),this.length=0}getLruAlias(){return this.numberAllocator.firstVacant()||[...this.aliasToTopic.keys()][this.aliasToTopic.size-1]}};e.default=l}),Iu=Se(e=>{fe(),pe(),de();var i=e&&e.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(e,"__esModule",{value:!0});var t=Yr(),l=i(Cu()),h=fr(),s=(r,o)=>{r.log("_handleConnack");let{options:n}=r,a=n.protocolVersion===5?o.reasonCode:o.returnCode;if(clearTimeout(r.connackTimer),delete r.topicAliasSend,o.properties){if(o.properties.topicAliasMaximum){if(o.properties.topicAliasMaximum>65535){r.emit("error",new Error("topicAliasMaximum from broker is out of range"));return}o.properties.topicAliasMaximum>0&&(r.topicAliasSend=new l.default(o.properties.topicAliasMaximum))}o.properties.serverKeepAlive&&n.keepalive&&(n.keepalive=o.properties.serverKeepAlive),o.properties.maximumPacketSize&&(n.properties||(n.properties={}),n.properties.maximumPacketSize=o.properties.maximumPacketSize)}if(a===0)r.reconnecting=!1,r._onConnect(o);else if(a>0){let f=new h.ErrorWithReasonCode(`Connection refused: ${t.ReasonCodes[a]}`,a);r.emit("error",f)}};e.default=s}),Tu=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0});var i=(t,l,h)=>{t.log("handling pubrel packet");let s=typeof h<"u"?h:t.noop,{messageId:r}=l,o={cmd:"pubcomp",messageId:r};t.incomingStore.get(l,(n,a)=>{n?t._sendPacket(o,s):(t.emit("message",a.topic,a.payload,a),t.handleMessage(a,f=>{if(f)return s(f);t.incomingStore.del(a,t.noop),t._sendPacket(o,s)}))})};e.default=i}),Ou=Se(e=>{fe(),pe(),de();var i=e&&e.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(e,"__esModule",{value:!0});var t=i(uu()),l=i(cu()),h=i(Iu()),s=i(Yr()),r=i(Tu()),o=(n,a,f)=>{let{options:p}=n;if(p.protocolVersion===5&&p.properties&&p.properties.maximumPacketSize&&p.properties.maximumPacketSize{fe(),pe(),de();var i=e&&e.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(e,"__esModule",{value:!0}),e.TypedEventEmitter=void 0;var t=i((cr(),De(or))),l=fr(),h=class{};e.TypedEventEmitter=h,(0,l.applyMixin)(h,t.default)}),Qr=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0}),e.isReactNativeBrowser=e.isWebWorker=void 0;var i=()=>{var s;return typeof window<"u"?typeof navigator<"u"&&((s=navigator.userAgent)===null||s===void 0?void 0:s.toLowerCase().indexOf(" electron/"))>-1&&Le!=null&&Le.versions?!Object.prototype.hasOwnProperty.call(Le.versions,"electron"):typeof window.document<"u":!1},t=()=>{var s,r;return!!(typeof self=="object"&&!((r=(s=self?.constructor)===null||s===void 0?void 0:s.name)===null||r===void 0)&&r.includes("WorkerGlobalScope"))},l=()=>typeof navigator<"u"&&navigator.product==="ReactNative",h=i()||t()||l();e.isWebWorker=t(),e.isReactNativeBrowser=l(),e.default=h}),Pu=Se((e,i)=>{fe(),pe(),de(),function(t,l){typeof e=="object"&&typeof i<"u"?l(e):typeof define=="function"&&define.amd?define(["exports"],l):(t=typeof globalThis<"u"?globalThis:t||self,l(t.fastUniqueNumbers={}))}(e,function(t){var l=function(m){return function(b){var v=m(b);return b.add(v),v}},h=function(m){return function(b,v){return m.set(b,v),v}},s=Number.MAX_SAFE_INTEGER===void 0?9007199254740991:Number.MAX_SAFE_INTEGER,r=536870912,o=r*2,n=function(m,b){return function(v){var k=b.get(v),N=k===void 0?v.size:ks)throw new Error("Congratulations, you created a collection of unique numbers which uses all available integers!");for(;v.has(N);)N=Math.floor(Math.random()*s);return m(v,N)}},a=new WeakMap,f=h(a),p=n(f,a),g=l(p);t.addUniqueNumber=g,t.generateUniqueNumber=p})}),Ru=Se((e,i)=>{fe(),pe(),de(),function(t,l){typeof e=="object"&&typeof i<"u"?l(e,Pu()):typeof define=="function"&&define.amd?define(["exports","fast-unique-numbers"],l):(t=typeof globalThis<"u"?globalThis:t||self,l(t.workerTimersBroker={},t.fastUniqueNumbers))}(e,function(t,l){var h=function(o){return o.method!==void 0&&o.method==="call"},s=function(o){return o.error===null&&typeof o.id=="number"},r=function(o){var n=new Map([[0,function(){}]]),a=new Map([[0,function(){}]]),f=new Map,p=new Worker(o);p.addEventListener("message",function(k){var N=k.data;if(h(N)){var B=N.params,w=B.timerId,U=B.timerType;if(U==="interval"){var q=n.get(w);if(typeof q=="number"){var I=f.get(q);if(I===void 0||I.timerId!==w||I.timerType!==U)throw new Error("The timer is in an undefined state.")}else if(typeof q<"u")q();else throw new Error("The timer is in an undefined state.")}else if(U==="timeout"){var C=a.get(w);if(typeof C=="number"){var R=f.get(C);if(R===void 0||R.timerId!==w||R.timerType!==U)throw new Error("The timer is in an undefined state.")}else if(typeof C<"u")C(),a.delete(w);else throw new Error("The timer is in an undefined state.")}}else if(s(N)){var Q=N.id,te=f.get(Q);if(te===void 0)throw new Error("The timer is in an undefined state.");var se=te.timerId,T=te.timerType;f.delete(Q),T==="interval"?n.delete(se):a.delete(se)}else{var K=N.error.message;throw new Error(K)}});var g=function(k){var N=l.generateUniqueNumber(f);f.set(N,{timerId:k,timerType:"interval"}),n.set(k,N),p.postMessage({id:N,method:"clear",params:{timerId:k,timerType:"interval"}})},m=function(k){var N=l.generateUniqueNumber(f);f.set(N,{timerId:k,timerType:"timeout"}),a.set(k,N),p.postMessage({id:N,method:"clear",params:{timerId:k,timerType:"timeout"}})},b=function(k){var N=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,B=l.generateUniqueNumber(n);return n.set(B,function(){k(),typeof n.get(B)=="function"&&p.postMessage({id:null,method:"set",params:{delay:N,now:performance.now(),timerId:B,timerType:"interval"}})}),p.postMessage({id:null,method:"set",params:{delay:N,now:performance.now(),timerId:B,timerType:"interval"}}),B},v=function(k){var N=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,B=l.generateUniqueNumber(a);return a.set(B,k),p.postMessage({id:null,method:"set",params:{delay:N,now:performance.now(),timerId:B,timerType:"timeout"}}),B};return{clearInterval:g,clearTimeout:m,setInterval:b,setTimeout:v}};t.load=r})}),xu=Se((e,i)=>{fe(),pe(),de(),function(t,l){typeof e=="object"&&typeof i<"u"?l(e,Ru()):typeof define=="function"&&define.amd?define(["exports","worker-timers-broker"],l):(t=typeof globalThis<"u"?globalThis:t||self,l(t.workerTimers={},t.workerTimersBroker))}(e,function(t,l){var h=function(p,g){var m=null;return function(){if(m!==null)return m;var b=new Blob([g],{type:"application/javascript; charset=utf-8"}),v=URL.createObjectURL(b);return m=p(v),setTimeout(function(){return URL.revokeObjectURL(v)}),m}},s=`(()=>{var e={472:(e,t,r)=>{var o,i;void 0===(i="function"==typeof(o=function(){"use strict";var e=new Map,t=new Map,r=function(t){var r=e.get(t);if(void 0===r)throw new Error('There is no interval scheduled with the given id "'.concat(t,'".'));clearTimeout(r),e.delete(t)},o=function(e){var r=t.get(e);if(void 0===r)throw new Error('There is no timeout scheduled with the given id "'.concat(e,'".'));clearTimeout(r),t.delete(e)},i=function(e,t){var r,o=performance.now();return{expected:o+(r=e-Math.max(0,o-t)),remainingDelay:r}},n=function e(t,r,o,i){var n=performance.now();n>o?postMessage({id:null,method:"call",params:{timerId:r,timerType:i}}):t.set(r,setTimeout(e,o-n,t,r,o,i))},a=function(t,r,o){var a=i(t,o),s=a.expected,d=a.remainingDelay;e.set(r,setTimeout(n,d,e,r,s,"interval"))},s=function(e,r,o){var a=i(e,o),s=a.expected,d=a.remainingDelay;t.set(r,setTimeout(n,d,t,r,s,"timeout"))};addEventListener("message",(function(e){var t=e.data;try{if("clear"===t.method){var i=t.id,n=t.params,d=n.timerId,c=n.timerType;if("interval"===c)r(d),postMessage({error:null,id:i});else{if("timeout"!==c)throw new Error('The given type "'.concat(c,'" is not supported'));o(d),postMessage({error:null,id:i})}}else{if("set"!==t.method)throw new Error('The given method "'.concat(t.method,'" is not supported'));var u=t.params,l=u.delay,p=u.now,m=u.timerId,v=u.timerType;if("interval"===v)a(l,m,p);else{if("timeout"!==v)throw new Error('The given type "'.concat(v,'" is not supported'));s(l,m,p)}}}catch(e){postMessage({error:{message:e.message},id:t.id,result:null})}}))})?o.call(t,r,t,e):o)||(e.exports=i)}},t={};function r(o){var i=t[o];if(void 0!==i)return i.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";r(472)})()})();`,r=h(l.load,s),o=function(p){return r().clearInterval(p)},n=function(p){return r().clearTimeout(p)},a=function(){var p;return(p=r()).setInterval.apply(p,arguments)},f=function(){var p;return(p=r()).setTimeout.apply(p,arguments)};t.clearInterval=o,t.clearTimeout=n,t.setInterval=a,t.setTimeout=f})}),Mu=Se(e=>{fe(),pe(),de();var i=e&&e.__createBinding||(Object.create?function(a,f,p,g){g===void 0&&(g=p);var m=Object.getOwnPropertyDescriptor(f,p);(!m||("get"in m?!f.__esModule:m.writable||m.configurable))&&(m={enumerable:!0,get:function(){return f[p]}}),Object.defineProperty(a,g,m)}:function(a,f,p,g){g===void 0&&(g=p),a[g]=f[p]}),t=e&&e.__setModuleDefault||(Object.create?function(a,f){Object.defineProperty(a,"default",{enumerable:!0,value:f})}:function(a,f){a.default=f}),l=e&&e.__importStar||function(a){if(a&&a.__esModule)return a;var f={};if(a!=null)for(var p in a)p!=="default"&&Object.prototype.hasOwnProperty.call(a,p)&&i(f,a,p);return t(f,a),f};Object.defineProperty(e,"__esModule",{value:!0});var h=l(Qr()),s=xu(),r={set:s.setInterval,clear:s.clearInterval},o={set:(a,f)=>setInterval(a,f),clear:a=>clearInterval(a)},n=a=>{switch(a){case"native":return o;case"worker":return r;case"auto":default:return h.default&&!h.isWebWorker&&!h.isReactNativeBrowser?r:o}};e.default=n}),qs=Se(e=>{fe(),pe(),de();var i=e&&e.__importDefault||function(h){return h&&h.__esModule?h:{default:h}};Object.defineProperty(e,"__esModule",{value:!0});var t=i(Mu()),l=class{get keepaliveTimeoutTimestamp(){return this._keepaliveTimeoutTimestamp}get intervalEvery(){return this._intervalEvery}get keepalive(){return this._keepalive}constructor(h,s){this.destroyed=!1,this.client=h,this.timer=typeof s=="object"&&"set"in s&&"clear"in s?s:(0,t.default)(s),this.setKeepalive(h.options.keepalive)}clear(){this.timerId&&(this.timer.clear(this.timerId),this.timerId=null)}setKeepalive(h){if(h*=1e3,isNaN(h)||h<=0||h>2147483647)throw new Error(`Keepalive value must be an integer between 0 and 2147483647. Provided value is ${h}`);this._keepalive=h,this.reschedule(),this.client.log(`KeepaliveManager: set keepalive to ${h}ms`)}destroy(){this.clear(),this.destroyed=!0}reschedule(){if(this.destroyed)return;this.clear(),this.counter=0;let h=Math.ceil(this._keepalive*1.5);this._keepaliveTimeoutTimestamp=Date.now()+h,this._intervalEvery=Math.ceil(this._keepalive/2),this.timerId=this.timer.set(()=>{this.destroyed||(this.counter+=1,this.counter===2?this.client.sendPing():this.counter>2&&this.client.onKeepaliveTimeout())},this._intervalEvery)}};e.default=l}),ki=Se(e=>{fe(),pe(),de();var i=e&&e.__createBinding||(Object.create?function(q,I,C,R){R===void 0&&(R=C);var Q=Object.getOwnPropertyDescriptor(I,C);(!Q||("get"in Q?!I.__esModule:Q.writable||Q.configurable))&&(Q={enumerable:!0,get:function(){return I[C]}}),Object.defineProperty(q,R,Q)}:function(q,I,C,R){R===void 0&&(R=C),q[R]=I[C]}),t=e&&e.__setModuleDefault||(Object.create?function(q,I){Object.defineProperty(q,"default",{enumerable:!0,value:I})}:function(q,I){q.default=I}),l=e&&e.__importStar||function(q){if(q&&q.__esModule)return q;var I={};if(q!=null)for(var C in q)C!=="default"&&Object.prototype.hasOwnProperty.call(q,C)&&i(I,q,C);return t(I,q),I},h=e&&e.__importDefault||function(q){return q&&q.__esModule?q:{default:q}};Object.defineProperty(e,"__esModule",{value:!0});var s=h(Sl()),r=h(ou()),o=h(Cs()),n=sr(),a=h(au()),f=l(lu()),p=h(xt()),g=h(Is()),m=h(Ou()),b=fr(),v=Bu(),k=h(qs()),N=l(Qr()),B=globalThis.setImmediate||((...q)=>{let I=q.shift();(0,b.nextTick)(()=>{I(...q)})}),w={keepalive:60,reschedulePings:!0,protocolId:"MQTT",protocolVersion:4,reconnectPeriod:1e3,connectTimeout:30*1e3,clean:!0,resubscribe:!0,writeCache:!0,timerVariant:"auto"},U=class Ci extends v.TypedEventEmitter{static defaultId(){return`mqttjs_${Math.random().toString(16).substr(2,8)}`}constructor(I,C){super(),this.options=C||{};for(let R in w)typeof this.options[R]>"u"?this.options[R]=w[R]:this.options[R]=C[R];this.log=this.options.log||(0,p.default)("mqttjs:client"),this.noop=this._noop.bind(this),this.log("MqttClient :: version:",Ci.VERSION),N.isWebWorker?this.log("MqttClient :: environment","webworker"):this.log("MqttClient :: environment",N.default?"browser":"node"),this.log("MqttClient :: options.protocol",C.protocol),this.log("MqttClient :: options.protocolVersion",C.protocolVersion),this.log("MqttClient :: options.username",C.username),this.log("MqttClient :: options.keepalive",C.keepalive),this.log("MqttClient :: options.reconnectPeriod",C.reconnectPeriod),this.log("MqttClient :: options.rejectUnauthorized",C.rejectUnauthorized),this.log("MqttClient :: options.properties.topicAliasMaximum",C.properties?C.properties.topicAliasMaximum:void 0),this.options.clientId=typeof C.clientId=="string"?C.clientId:Ci.defaultId(),this.log("MqttClient :: clientId",this.options.clientId),this.options.customHandleAcks=C.protocolVersion===5&&C.customHandleAcks?C.customHandleAcks:(...R)=>{R[3](null,0)},this.options.writeCache||(r.default.writeToStream.cacheNumbers=!1),this.streamBuilder=I,this.messageIdProvider=typeof this.options.messageIdProvider>"u"?new o.default:this.options.messageIdProvider,this.outgoingStore=C.outgoingStore||new g.default,this.incomingStore=C.incomingStore||new g.default,this.queueQoSZero=C.queueQoSZero===void 0?!0:C.queueQoSZero,this._resubscribeTopics={},this.messageIdToTopic={},this.keepaliveManager=null,this.connected=!1,this.disconnecting=!1,this.reconnecting=!1,this.queue=[],this.connackTimer=null,this.reconnectTimer=null,this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={},this._storeProcessingQueue=[],this.outgoing={},this._firstConnection=!0,C.properties&&C.properties.topicAliasMaximum>0&&(C.properties.topicAliasMaximum>65535?this.log("MqttClient :: options.properties.topicAliasMaximum is out of range"):this.topicAliasRecv=new s.default(C.properties.topicAliasMaximum)),this.on("connect",()=>{let{queue:R}=this,Q=()=>{let te=R.shift();this.log("deliver :: entry %o",te);let se=null;if(!te){this._resubscribe();return}se=te.packet,this.log("deliver :: call _sendPacket for %o",se);let T=!0;se.messageId&&se.messageId!==0&&(this.messageIdProvider.register(se.messageId)||(T=!1)),T?this._sendPacket(se,K=>{te.cb&&te.cb(K),Q()}):(this.log("messageId: %d has already used. The message is skipped and removed.",se.messageId),Q())};this.log("connect :: sending queued packets"),Q()}),this.on("close",()=>{this.log("close :: connected set to `false`"),this.connected=!1,this.log("close :: clearing connackTimer"),clearTimeout(this.connackTimer),this._destroyKeepaliveManager(),this.topicAliasRecv&&this.topicAliasRecv.clear(),this.log("close :: calling _setupReconnect"),this._setupReconnect()}),this.options.manualConnect||(this.log("MqttClient :: setting up stream"),this.connect())}handleAuth(I,C){C()}handleMessage(I,C){C()}_nextId(){return this.messageIdProvider.allocate()}getLastMessageId(){return this.messageIdProvider.getLastAllocated()}connect(){var I;let C=new n.Writable,R=r.default.parser(this.options),Q=null,te=[];this.log("connect :: calling method to clear reconnect"),this._clearReconnect(),this.disconnected&&!this.reconnecting&&(this.incomingStore=this.options.incomingStore||new g.default,this.outgoingStore=this.options.outgoingStore||new g.default,this.disconnecting=!1,this.disconnected=!1),this.log("connect :: using streamBuilder provided to client to create stream"),this.stream=this.streamBuilder(this),R.on("packet",J=>{this.log("parser :: on packet push to packets array."),te.push(J)});let se=()=>{this.log("work :: getting next packet in queue");let J=te.shift();if(J)this.log("work :: packet pulled from queue"),(0,m.default)(this,J,T);else{this.log("work :: no packets in queue");let _e=Q;Q=null,this.log("work :: done flag is %s",!!_e),_e&&_e()}},T=()=>{if(te.length)(0,b.nextTick)(se);else{let J=Q;Q=null,J()}};C._write=(J,_e,he)=>{Q=he,this.log("writable stream :: parsing buffer"),R.parse(J),se()};let K=J=>{this.log("streamErrorHandler :: error",J.message),J.code?(this.log("streamErrorHandler :: emitting error"),this.emit("error",J)):this.noop(J)};this.log("connect :: pipe stream to writable stream"),this.stream.pipe(C),this.stream.on("error",K),this.stream.on("close",()=>{this.log("(%s)stream :: on close",this.options.clientId),this._flushVolatile(),this.log("stream: emit close to MqttClient"),this.emit("close")}),this.log("connect: sending packet `connect`");let re={cmd:"connect",protocolId:this.options.protocolId,protocolVersion:this.options.protocolVersion,clean:this.options.clean,clientId:this.options.clientId,keepalive:this.options.keepalive,username:this.options.username,password:this.options.password,properties:this.options.properties};if(this.options.will&&(re.will=Object.assign(Object.assign({},this.options.will),{payload:(I=this.options.will)===null||I===void 0?void 0:I.payload})),this.topicAliasRecv&&(re.properties||(re.properties={}),this.topicAliasRecv&&(re.properties.topicAliasMaximum=this.topicAliasRecv.max)),this._writePacket(re),R.on("error",this.emit.bind(this,"error")),this.options.properties){if(!this.options.properties.authenticationMethod&&this.options.properties.authenticationData)return this.end(()=>this.emit("error",new Error("Packet has no Authentication Method"))),this;if(this.options.properties.authenticationMethod&&this.options.authPacket&&typeof this.options.authPacket=="object"){let J=Object.assign({cmd:"auth",reasonCode:0},this.options.authPacket);this._writePacket(J)}}return this.stream.setMaxListeners(1e3),clearTimeout(this.connackTimer),this.connackTimer=setTimeout(()=>{this.log("!!connectTimeout hit!! Calling _cleanUp with force `true`"),this.emit("error",new Error("connack timeout")),this._cleanUp(!0)},this.options.connectTimeout),this}publish(I,C,R,Q){this.log("publish :: message `%s` to topic `%s`",C,I);let{options:te}=this;typeof R=="function"&&(Q=R,R=null),R=R||{},R=Object.assign(Object.assign({},{qos:0,retain:!1,dup:!1}),R);let{qos:se,retain:T,dup:K,properties:re,cbStorePut:J}=R;if(this._checkDisconnecting(Q))return this;let _e=()=>{let he=0;if((se===1||se===2)&&(he=this._nextId(),he===null))return this.log("No messageId left"),!1;let V={cmd:"publish",topic:I,payload:C,qos:se,retain:T,messageId:he,dup:K};switch(te.protocolVersion===5&&(V.properties=re),this.log("publish :: qos",se),se){case 1:case 2:this.outgoing[V.messageId]={volatile:!1,cb:Q||this.noop},this.log("MqttClient:publish: packet cmd: %s",V.cmd),this._sendPacket(V,void 0,J);break;default:this.log("MqttClient:publish: packet cmd: %s",V.cmd),this._sendPacket(V,Q,J);break}return!0};return(this._storeProcessing||this._storeProcessingQueue.length>0||!_e())&&this._storeProcessingQueue.push({invoke:_e,cbStorePut:R.cbStorePut,callback:Q}),this}publishAsync(I,C,R){return new Promise((Q,te)=>{this.publish(I,C,R,(se,T)=>{se?te(se):Q(T)})})}subscribe(I,C,R){let Q=this.options.protocolVersion;typeof C=="function"&&(R=C),R=R||this.noop;let te=!1,se=[];typeof I=="string"?(I=[I],se=I):Array.isArray(I)?se=I:typeof I=="object"&&(te=I.resubscribe,delete I.resubscribe,se=Object.keys(I));let T=f.validateTopics(se);if(T!==null)return B(R,new Error(`Invalid topic ${T}`)),this;if(this._checkDisconnecting(R))return this.log("subscribe: discconecting true"),this;let K={qos:0};Q===5&&(K.nl=!1,K.rap=!1,K.rh=0),C=Object.assign(Object.assign({},K),C);let re=C.properties,J=[],_e=(V,Ae)=>{if(Ae=Ae||C,!Object.prototype.hasOwnProperty.call(this._resubscribeTopics,V)||this._resubscribeTopics[V].qos{this.log("subscribe: array topic %s",V),_e(V)}):Object.keys(I).forEach(V=>{this.log("subscribe: object topic %s, %o",V,I[V]),_e(V,I[V])}),!J.length)return R(null,[]),this;let he=()=>{let V=this._nextId();if(V===null)return this.log("No messageId left"),!1;let Ae={cmd:"subscribe",subscriptions:J,messageId:V};if(re&&(Ae.properties=re),this.options.resubscribe){this.log("subscribe :: resubscribe true");let ie=[];J.forEach(X=>{if(this.options.reconnectPeriod>0){let O={qos:X.qos};Q===5&&(O.nl=X.nl||!1,O.rap=X.rap||!1,O.rh=X.rh||0,O.properties=X.properties),this._resubscribeTopics[X.topic]=O,ie.push(X.topic)}}),this.messageIdToTopic[Ae.messageId]=ie}return this.outgoing[Ae.messageId]={volatile:!0,cb(ie,X){if(!ie){let{granted:O}=X;for(let G=0;G0||!he())&&this._storeProcessingQueue.push({invoke:he,callback:R}),this}subscribeAsync(I,C){return new Promise((R,Q)=>{this.subscribe(I,C,(te,se)=>{te?Q(te):R(se)})})}unsubscribe(I,C,R){typeof I=="string"&&(I=[I]),typeof C=="function"&&(R=C),R=R||this.noop;let Q=f.validateTopics(I);if(Q!==null)return B(R,new Error(`Invalid topic ${Q}`)),this;if(this._checkDisconnecting(R))return this;let te=()=>{let se=this._nextId();if(se===null)return this.log("No messageId left"),!1;let T={cmd:"unsubscribe",messageId:se,unsubscriptions:[]};return typeof I=="string"?T.unsubscriptions=[I]:Array.isArray(I)&&(T.unsubscriptions=I),this.options.resubscribe&&T.unsubscriptions.forEach(K=>{delete this._resubscribeTopics[K]}),typeof C=="object"&&C.properties&&(T.properties=C.properties),this.outgoing[T.messageId]={volatile:!0,cb:R},this.log("unsubscribe: call _sendPacket"),this._sendPacket(T),!0};return(this._storeProcessing||this._storeProcessingQueue.length>0||!te())&&this._storeProcessingQueue.push({invoke:te,callback:R}),this}unsubscribeAsync(I,C){return new Promise((R,Q)=>{this.unsubscribe(I,C,(te,se)=>{te?Q(te):R(se)})})}end(I,C,R){this.log("end :: (%s)",this.options.clientId),(I==null||typeof I!="boolean")&&(R=R||C,C=I,I=!1),typeof C!="object"&&(R=R||C,C=null),this.log("end :: cb? %s",!!R),(!R||typeof R!="function")&&(R=this.noop);let Q=()=>{this.log("end :: closeStores: closing incoming and outgoing stores"),this.disconnected=!0,this.incomingStore.close(se=>{this.outgoingStore.close(T=>{if(this.log("end :: closeStores: emitting end"),this.emit("end"),R){let K=se||T;this.log("end :: closeStores: invoking callback with args"),R(K)}})}),this._deferredReconnect?this._deferredReconnect():(this.options.reconnectPeriod===0||this.options.manualConnect)&&(this.disconnecting=!1)},te=()=>{this.log("end :: (%s) :: finish :: calling _cleanUp with force %s",this.options.clientId,I),this._cleanUp(I,()=>{this.log("end :: finish :: calling process.nextTick on closeStores"),(0,b.nextTick)(Q)},C)};return this.disconnecting?(R(),this):(this._clearReconnect(),this.disconnecting=!0,!I&&Object.keys(this.outgoing).length>0?(this.log("end :: (%s) :: calling finish in 10ms once outgoing is empty",this.options.clientId),this.once("outgoingEmpty",setTimeout.bind(null,te,10))):(this.log("end :: (%s) :: immediately calling finish",this.options.clientId),te()),this)}endAsync(I,C){return new Promise((R,Q)=>{this.end(I,C,te=>{te?Q(te):R()})})}removeOutgoingMessage(I){if(this.outgoing[I]){let{cb:C}=this.outgoing[I];this._removeOutgoingAndStoreMessage(I,()=>{C(new Error("Message removed"))})}return this}reconnect(I){this.log("client reconnect");let C=()=>{I?(this.options.incomingStore=I.incomingStore,this.options.outgoingStore=I.outgoingStore):(this.options.incomingStore=null,this.options.outgoingStore=null),this.incomingStore=this.options.incomingStore||new g.default,this.outgoingStore=this.options.outgoingStore||new g.default,this.disconnecting=!1,this.disconnected=!1,this._deferredReconnect=null,this._reconnect()};return this.disconnecting&&!this.disconnected?this._deferredReconnect=C:C(),this}_flushVolatile(){this.outgoing&&(this.log("_flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function"),Object.keys(this.outgoing).forEach(I=>{this.outgoing[I].volatile&&typeof this.outgoing[I].cb=="function"&&(this.outgoing[I].cb(new Error("Connection closed")),delete this.outgoing[I])}))}_flush(){this.outgoing&&(this.log("_flush: queue exists? %b",!!this.outgoing),Object.keys(this.outgoing).forEach(I=>{typeof this.outgoing[I].cb=="function"&&(this.outgoing[I].cb(new Error("Connection closed")),delete this.outgoing[I])}))}_removeTopicAliasAndRecoverTopicName(I){let C;I.properties&&(C=I.properties.topicAlias);let R=I.topic.toString();if(this.log("_removeTopicAliasAndRecoverTopicName :: alias %d, topic %o",C,R),R.length===0){if(typeof C>"u")return new Error("Unregistered Topic Alias");if(R=this.topicAliasSend.getTopicByAlias(C),typeof R>"u")return new Error("Unregistered Topic Alias");I.topic=R}C&&delete I.properties.topicAlias}_checkDisconnecting(I){return this.disconnecting&&(I&&I!==this.noop?I(new Error("client disconnecting")):this.emit("error",new Error("client disconnecting"))),this.disconnecting}_reconnect(){this.log("_reconnect: emitting reconnect to client"),this.emit("reconnect"),this.connected?(this.end(()=>{this.connect()}),this.log("client already connected. disconnecting first.")):(this.log("_reconnect: calling connect"),this.connect())}_setupReconnect(){!this.disconnecting&&!this.reconnectTimer&&this.options.reconnectPeriod>0?(this.reconnecting||(this.log("_setupReconnect :: emit `offline` state"),this.emit("offline"),this.log("_setupReconnect :: set `reconnecting` to `true`"),this.reconnecting=!0),this.log("_setupReconnect :: setting reconnectTimer for %d ms",this.options.reconnectPeriod),this.reconnectTimer=setInterval(()=>{this.log("reconnectTimer :: reconnect triggered!"),this._reconnect()},this.options.reconnectPeriod)):this.log("_setupReconnect :: doing nothing...")}_clearReconnect(){this.log("_clearReconnect : clearing reconnect timer"),this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=null)}_cleanUp(I,C,R={}){if(C&&(this.log("_cleanUp :: done callback provided for on stream close"),this.stream.on("close",C)),this.log("_cleanUp :: forced? %s",I),I)this.options.reconnectPeriod===0&&this.options.clean&&this._flush(),this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),this.stream.destroy();else{let Q=Object.assign({cmd:"disconnect"},R);this.log("_cleanUp :: (%s) :: call _sendPacket with disconnect packet",this.options.clientId),this._sendPacket(Q,()=>{this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),B(()=>{this.stream.end(()=>{this.log("_cleanUp :: (%s) :: stream destroyed",this.options.clientId)})})})}!this.disconnecting&&!this.reconnecting&&(this.log("_cleanUp :: client not disconnecting/reconnecting. Clearing and resetting reconnect."),this._clearReconnect(),this._setupReconnect()),this._destroyKeepaliveManager(),C&&!this.connected&&(this.log("_cleanUp :: (%s) :: removing stream `done` callback `close` listener",this.options.clientId),this.stream.removeListener("close",C),C())}_storeAndSend(I,C,R){this.log("storeAndSend :: store packet with cmd %s to outgoingStore",I.cmd);let Q=I,te;if(Q.cmd==="publish"&&(Q=(0,a.default)(I),te=this._removeTopicAliasAndRecoverTopicName(Q),te))return C&&C(te);this.outgoingStore.put(Q,se=>{if(se)return C&&C(se);R(),this._writePacket(I,C)})}_applyTopicAlias(I){if(this.options.protocolVersion===5&&I.cmd==="publish"){let C;I.properties&&(C=I.properties.topicAlias);let R=I.topic.toString();if(this.topicAliasSend)if(C){if(R.length!==0&&(this.log("applyTopicAlias :: register topic: %s - alias: %d",R,C),!this.topicAliasSend.put(R,C)))return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",R,C),new Error("Sending Topic Alias out of range")}else R.length!==0&&(this.options.autoAssignTopicAlias?(C=this.topicAliasSend.getAliasByTopic(R),C?(I.topic="",I.properties=Object.assign(Object.assign({},I.properties),{topicAlias:C}),this.log("applyTopicAlias :: auto assign(use) topic: %s - alias: %d",R,C)):(C=this.topicAliasSend.getLruAlias(),this.topicAliasSend.put(R,C),I.properties=Object.assign(Object.assign({},I.properties),{topicAlias:C}),this.log("applyTopicAlias :: auto assign topic: %s - alias: %d",R,C))):this.options.autoUseTopicAlias&&(C=this.topicAliasSend.getAliasByTopic(R),C&&(I.topic="",I.properties=Object.assign(Object.assign({},I.properties),{topicAlias:C}),this.log("applyTopicAlias :: auto use topic: %s - alias: %d",R,C))));else if(C)return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",R,C),new Error("Sending Topic Alias out of range")}}_noop(I){this.log("noop ::",I)}_writePacket(I,C){this.log("_writePacket :: packet: %O",I),this.log("_writePacket :: emitting `packetsend`"),this.emit("packetsend",I),this.log("_writePacket :: writing to stream");let R=r.default.writeToStream(I,this.stream,this.options);this.log("_writePacket :: writeToStream result %s",R),!R&&C&&C!==this.noop?(this.log("_writePacket :: handle events on `drain` once through callback."),this.stream.once("drain",C)):C&&(this.log("_writePacket :: invoking cb"),C())}_sendPacket(I,C,R,Q){this.log("_sendPacket :: (%s) :: start",this.options.clientId),R=R||this.noop,C=C||this.noop;let te=this._applyTopicAlias(I);if(te){C(te);return}if(!this.connected){if(I.cmd==="auth"){this._writePacket(I,C);return}this.log("_sendPacket :: client not connected. Storing packet offline."),this._storePacket(I,C,R);return}if(Q){this._writePacket(I,C);return}switch(I.cmd){case"publish":break;case"pubrel":this._storeAndSend(I,C,R);return;default:this._writePacket(I,C);return}switch(I.qos){case 2:case 1:this._storeAndSend(I,C,R);break;case 0:default:this._writePacket(I,C);break}this.log("_sendPacket :: (%s) :: end",this.options.clientId)}_storePacket(I,C,R){this.log("_storePacket :: packet: %o",I),this.log("_storePacket :: cb? %s",!!C),R=R||this.noop;let Q=I;if(Q.cmd==="publish"){Q=(0,a.default)(I);let se=this._removeTopicAliasAndRecoverTopicName(Q);if(se)return C&&C(se)}let te=Q.qos||0;te===0&&this.queueQoSZero||Q.cmd!=="publish"?this.queue.push({packet:Q,cb:C}):te>0?(C=this.outgoing[Q.messageId]?this.outgoing[Q.messageId].cb:null,this.outgoingStore.put(Q,se=>{if(se)return C&&C(se);R()})):C&&C(new Error("No connection to broker"))}_setupKeepaliveManager(){this.log("_setupKeepaliveManager :: keepalive %d (seconds)",this.options.keepalive),!this.keepaliveManager&&this.options.keepalive&&(this.keepaliveManager=new k.default(this,this.options.timerVariant))}_destroyKeepaliveManager(){this.keepaliveManager&&(this.log("_destroyKeepaliveManager :: destroying keepalive manager"),this.keepaliveManager.destroy(),this.keepaliveManager=null)}reschedulePing(I=!1){this.keepaliveManager&&this.options.keepalive&&(I||this.options.reschedulePings)&&this._reschedulePing()}_reschedulePing(){this.log("_reschedulePing :: rescheduling ping"),this.keepaliveManager.reschedule()}sendPing(){this.log("_sendPing :: sending pingreq"),this._sendPacket({cmd:"pingreq"})}onKeepaliveTimeout(){this.emit("error",new Error("Keepalive timeout")),this.log("onKeepaliveTimeout :: calling _cleanUp with force true"),this._cleanUp(!0)}_resubscribe(){this.log("_resubscribe");let I=Object.keys(this._resubscribeTopics);if(!this._firstConnection&&(this.options.clean||this.options.protocolVersion>=4&&!this.connackPacket.sessionPresent)&&I.length>0)if(this.options.resubscribe)if(this.options.protocolVersion===5){this.log("_resubscribe: protocolVersion 5");for(let C=0;C{let R=this.outgoingStore.createStream(),Q=()=>{R.destroy(),R=null,this._flushStoreProcessingQueue(),te()},te=()=>{this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={}};this.once("close",Q),R.on("error",T=>{te(),this._flushStoreProcessingQueue(),this.removeListener("close",Q),this.emit("error",T)});let se=()=>{if(!R)return;let T=R.read(1),K;if(!T){R.once("readable",se);return}if(this._storeProcessing=!0,this._packetIdsDuringStoreProcessing[T.messageId]){se();return}!this.disconnecting&&!this.reconnectTimer?(K=this.outgoing[T.messageId]?this.outgoing[T.messageId].cb:null,this.outgoing[T.messageId]={volatile:!1,cb(re,J){K&&K(re,J),se()}},this._packetIdsDuringStoreProcessing[T.messageId]=!0,this.messageIdProvider.register(T.messageId)?this._sendPacket(T,void 0,void 0,!0):this.log("messageId: %d has already used.",T.messageId)):R.destroy&&R.destroy()};R.on("end",()=>{let T=!0;for(let K in this._packetIdsDuringStoreProcessing)if(!this._packetIdsDuringStoreProcessing[K]){T=!1;break}this.removeListener("close",Q),T?(te(),this._invokeAllStoreProcessingQueue(),this.emit("connect",I)):C()}),se()};C()}_invokeStoreProcessingQueue(){if(!this._storeProcessing&&this._storeProcessingQueue.length>0){let I=this._storeProcessingQueue[0];if(I&&I.invoke())return this._storeProcessingQueue.shift(),!0}return!1}_invokeAllStoreProcessingQueue(){for(;this._invokeStoreProcessingQueue(););}_flushStoreProcessingQueue(){for(let I of this._storeProcessingQueue)I.cbStorePut&&I.cbStorePut(new Error("Connection closed")),I.callback&&I.callback(new Error("Connection closed"));this._storeProcessingQueue.splice(0)}_removeOutgoingAndStoreMessage(I,C){delete this.outgoing[I],this.outgoingStore.del({messageId:I},(R,Q)=>{C(R,Q),this.messageIdProvider.deallocate(I),this._invokeStoreProcessingQueue()})}};U.VERSION=b.MQTTJS_VERSION,e.default=U}),ju=Se(e=>{fe(),pe(),de(),Object.defineProperty(e,"__esModule",{value:!0});var i=$s(),t=class{constructor(){this.numberAllocator=new i.NumberAllocator(1,65535)}allocate(){return this.lastId=this.numberAllocator.alloc(),this.lastId}getLastAllocated(){return this.lastId}register(l){return this.numberAllocator.use(l)}deallocate(l){this.numberAllocator.free(l)}clear(){this.numberAllocator.clear()}};e.default=t});function Yt(e){throw new RangeError(Hs[e])}function bo(e,i){let t=e.split("@"),l="";t.length>1&&(l=t[0]+"@",e=t[1]);let h=function(s,r){let o=[],n=s.length;for(;n--;)o[n]=r(s[n]);return o}((e=e.replace(Vs,".")).split("."),i).join(".");return l+h}function yo(e){let i=[],t=0,l=e.length;for(;t=55296&&h<=56319&&t{fe(),pe(),de(),vo=/^xn--/,wo=/[^\0-\x7E]/,Vs=/[\x2E\u3002\uFF0E\uFF61]/g,Hs={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},gt=Math.floor,Cr=String.fromCharCode,on=function(e,i){return e+22+75*(e<26)-((i!=0)<<5)},sn=function(e,i,t){let l=0;for(e=t?gt(e/700):e>>1,e+=gt(e/i);e>455;l+=36)e=gt(e/35);return gt(l+36*e/(e+38))},an=function(e){let i=[],t=e.length,l=0,h=128,s=72,r=e.lastIndexOf("-");r<0&&(r=0);for(let n=0;n=128&&Yt("not-basic"),i.push(e.charCodeAt(n));for(let n=r>0?r+1:0;n=t&&Yt("invalid-input");let m=(o=e.charCodeAt(n++))-48<10?o-22:o-65<26?o-65:o-97<26?o-97:36;(m>=36||m>gt((2147483647-l)/p))&&Yt("overflow"),l+=m*p;let b=g<=s?1:g>=s+26?26:g-s;if(mgt(2147483647/v)&&Yt("overflow"),p*=v}let f=i.length+1;s=sn(l-a,f,a==0),gt(l/f)>2147483647-h&&Yt("overflow"),h+=gt(l/f),l%=f,i.splice(l++,0,h)}var o;return String.fromCodePoint(...i)},ln=function(e){let i=[],t=(e=yo(e)).length,l=128,h=0,s=72;for(let n of e)n<128&&i.push(Cr(n));let r=i.length,o=r;for(r&&i.push("-");o=l&&fgt((2147483647-h)/a)&&Yt("overflow"),h+=(n-l)*a,l=n;for(let f of e)if(f2147483647&&Yt("overflow"),f==l){let p=h;for(let g=36;;g+=36){let m=g<=s?1:g>=s+26?26:g-s;if(pString.fromCodePoint(...e)},decode:an,encode:ln,toASCII:function(e){return bo(e,function(i){return wo.test(i)?"xn--"+ln(i):i})},toUnicode:function(e){return bo(e,function(i){return vo.test(i)?an(i.slice(4).toLowerCase()):i})}},Ft.decode,Ft.encode,Ft.toASCII,Ft.toUnicode,Ft.ucs2,Ft.version});function Lu(e,i){return Object.prototype.hasOwnProperty.call(e,i)}var _o,ar,Eo,wt,Nu=et(()=>{fe(),pe(),de(),_o=function(e,i,t,l){i=i||"&",t=t||"=";var h={};if(typeof e!="string"||e.length===0)return h;var s=/\+/g;e=e.split(i);var r=1e3;l&&typeof l.maxKeys=="number"&&(r=l.maxKeys);var o=e.length;r>0&&o>r&&(o=r);for(var n=0;n=0?(a=m.substr(0,b),f=m.substr(b+1)):(a=m,f=""),p=decodeURIComponent(a),g=decodeURIComponent(f),Lu(h,p)?Array.isArray(h[p])?h[p].push(g):h[p]=[h[p],g]:h[p]=g}return h},ar=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},Eo=function(e,i,t,l){return i=i||"&",t=t||"=",e===null&&(e=void 0),typeof e=="object"?Object.keys(e).map(function(h){var s=encodeURIComponent(ar(h))+t;return Array.isArray(e[h])?e[h].map(function(r){return s+encodeURIComponent(ar(r))}).join(i):s+encodeURIComponent(ar(e[h]))}).join(i):l?encodeURIComponent(ar(l))+t+encodeURIComponent(ar(e)):""},wt={},wt.decode=wt.parse=_o,wt.encode=wt.stringify=Eo,wt.decode,wt.encode,wt.parse,wt.stringify});function Ii(){throw new Error("setTimeout has not been defined")}function Ti(){throw new Error("clearTimeout has not been defined")}function zs(e){if(Ct===setTimeout)return setTimeout(e,0);if((Ct===Ii||!Ct)&&setTimeout)return Ct=setTimeout,setTimeout(e,0);try{return Ct(e,0)}catch{try{return Ct.call(null,e,0)}catch{return Ct.call(this||tr,e,0)}}}function Wu(){rr&&Xt&&(rr=!1,Xt.length?Et=Xt.concat(Et):_r=-1,Et.length&&Ks())}function Ks(){if(!rr){var e=zs(Wu);rr=!0;for(var i=Et.length;i;){for(Xt=Et,Et=[];++_r{fe(),pe(),de(),tr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:global,ze=Ao={},function(){try{Ct=typeof setTimeout=="function"?setTimeout:Ii}catch{Ct=Ii}try{It=typeof clearTimeout=="function"?clearTimeout:Ti}catch{It=Ti}}(),Et=[],rr=!1,_r=-1,ze.nextTick=function(e){var i=new Array(arguments.length-1);if(arguments.length>1)for(var t=1;t1)for(var N=1;N{fe(),pe(),de(),Ur={},Oi=!1,Gt=typeof globalThis<"u"?globalThis:typeof self<"u"?self:global,$e=Fu(),$e.platform="browser",$e.addListener,$e.argv,$e.binding,$e.browser,$e.chdir,$e.cwd,$e.emit,$e.env,$e.listeners,$e.nextTick,$e.off,$e.on,$e.once,$e.prependListener,$e.prependOnceListener,$e.removeAllListeners,$e.removeListener,$e.title,$e.umask,$e.version,$e.versions});function $u(){if(Bi)return Lr;Bi=!0;var e=$e;function i(s){if(typeof s!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(s))}function t(s,r){for(var o="",n=0,a=-1,f=0,p,g=0;g<=s.length;++g){if(g2){var m=o.lastIndexOf("/");if(m!==o.length-1){m===-1?(o="",n=0):(o=o.slice(0,m),n=o.length-1-o.lastIndexOf("/")),a=g,f=0;continue}}else if(o.length===2||o.length===1){o="",n=0,a=g,f=0;continue}}r&&(o.length>0?o+="/..":o="..",n=2)}else o.length>0?o+="/"+s.slice(a+1,g):o=s.slice(a+1,g),n=g-a-1;a=g,f=0}else p===46&&f!==-1?++f:f=-1}return o}function l(s,r){var o=r.dir||r.root,n=r.base||(r.name||"")+(r.ext||"");return o?o===r.root?o+n:o+s+n:n}var h={resolve:function(){for(var s="",r=!1,o,n=arguments.length-1;n>=-1&&!r;n--){var a;n>=0?a=arguments[n]:(o===void 0&&(o=e.cwd()),a=o),i(a),a.length!==0&&(s=a+"/"+s,r=a.charCodeAt(0)===47)}return s=t(s,!r),r?s.length>0?"/"+s:"/":s.length>0?s:"."},normalize:function(s){if(i(s),s.length===0)return".";var r=s.charCodeAt(0)===47,o=s.charCodeAt(s.length-1)===47;return s=t(s,!r),s.length===0&&!r&&(s="."),s.length>0&&o&&(s+="/"),r?"/"+s:s},isAbsolute:function(s){return i(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var s,r=0;r0&&(s===void 0?s=o:s+="/"+o)}return s===void 0?".":h.normalize(s)},relative:function(s,r){if(i(s),i(r),s===r||(s=h.resolve(s),r=h.resolve(r),s===r))return"";for(var o=1;om){if(r.charCodeAt(f+v)===47)return r.slice(f+v+1);if(v===0)return r.slice(f+v)}else a>m&&(s.charCodeAt(o+v)===47?b=v:v===0&&(b=0));break}var k=s.charCodeAt(o+v),N=r.charCodeAt(f+v);if(k!==N)break;k===47&&(b=v)}var B="";for(v=o+b+1;v<=n;++v)(v===n||s.charCodeAt(v)===47)&&(B.length===0?B+="..":B+="/..");return B.length>0?B+r.slice(f+b):(f+=b,r.charCodeAt(f)===47&&++f,r.slice(f))},_makeLong:function(s){return s},dirname:function(s){if(i(s),s.length===0)return".";for(var r=s.charCodeAt(0),o=r===47,n=-1,a=!0,f=s.length-1;f>=1;--f)if(r=s.charCodeAt(f),r===47){if(!a){n=f;break}}else a=!1;return n===-1?o?"/":".":o&&n===1?"//":s.slice(0,n)},basename:function(s,r){if(r!==void 0&&typeof r!="string")throw new TypeError('"ext" argument must be a string');i(s);var o=0,n=-1,a=!0,f;if(r!==void 0&&r.length>0&&r.length<=s.length){if(r.length===s.length&&r===s)return"";var p=r.length-1,g=-1;for(f=s.length-1;f>=0;--f){var m=s.charCodeAt(f);if(m===47){if(!a){o=f+1;break}}else g===-1&&(a=!1,g=f+1),p>=0&&(m===r.charCodeAt(p)?--p===-1&&(n=f):(p=-1,n=g))}return o===n?n=g:n===-1&&(n=s.length),s.slice(o,n)}else{for(f=s.length-1;f>=0;--f)if(s.charCodeAt(f)===47){if(!a){o=f+1;break}}else n===-1&&(a=!1,n=f+1);return n===-1?"":s.slice(o,n)}},extname:function(s){i(s);for(var r=-1,o=0,n=-1,a=!0,f=0,p=s.length-1;p>=0;--p){var g=s.charCodeAt(p);if(g===47){if(!a){o=p+1;break}continue}n===-1&&(a=!1,n=p+1),g===46?r===-1?r=p:f!==1&&(f=1):r!==-1&&(f=-1)}return r===-1||n===-1||f===0||f===1&&r===n-1&&r===o+1?"":s.slice(r,n)},format:function(s){if(s===null||typeof s!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof s);return l("/",s)},parse:function(s){i(s);var r={root:"",dir:"",base:"",ext:"",name:""};if(s.length===0)return r;var o=s.charCodeAt(0),n=o===47,a;n?(r.root="/",a=1):a=0;for(var f=-1,p=0,g=-1,m=!0,b=s.length-1,v=0;b>=a;--b){if(o=s.charCodeAt(b),o===47){if(!m){p=b+1;break}continue}g===-1&&(m=!1,g=b+1),o===46?f===-1?f=b:v!==1&&(v=1):f!==-1&&(v=-1)}return f===-1||g===-1||v===0||v===1&&f===g-1&&f===p+1?g!==-1&&(p===0&&n?r.base=r.name=s.slice(1,g):r.base=r.name=s.slice(p,g)):(p===0&&n?(r.name=s.slice(1,f),r.base=s.slice(1,g)):(r.name=s.slice(p,f),r.base=s.slice(p,g)),r.ext=s.slice(f,g)),p>0?r.dir=s.slice(0,p-1):n&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};return h.posix=h,Lr=h,Lr}var Lr,Bi,Pi,qu=et(()=>{fe(),pe(),de(),Ys(),Lr={},Bi=!1,Pi=$u()}),Qs={};nr(Qs,{URL:()=>da,Url:()=>la,default:()=>Ne,fileURLToPath:()=>Gs,format:()=>ua,parse:()=>fa,pathToFileURL:()=>Js,resolve:()=>ha,resolveObject:()=>ca});function pt(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function mr(e,i,t){if(e&&bt.isObject(e)&&e instanceof pt)return e;var l=new pt;return l.parse(e,i,t),l}function Vu(){if(Ri)return Nr;Ri=!0;var e=Ve;function i(s){if(typeof s!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(s))}function t(s,r){for(var o="",n=0,a=-1,f=0,p,g=0;g<=s.length;++g){if(g2){var m=o.lastIndexOf("/");if(m!==o.length-1){m===-1?(o="",n=0):(o=o.slice(0,m),n=o.length-1-o.lastIndexOf("/")),a=g,f=0;continue}}else if(o.length===2||o.length===1){o="",n=0,a=g,f=0;continue}}r&&(o.length>0?o+="/..":o="..",n=2)}else o.length>0?o+="/"+s.slice(a+1,g):o=s.slice(a+1,g),n=g-a-1;a=g,f=0}else p===46&&f!==-1?++f:f=-1}return o}function l(s,r){var o=r.dir||r.root,n=r.base||(r.name||"")+(r.ext||"");return o?o===r.root?o+n:o+s+n:n}var h={resolve:function(){for(var s="",r=!1,o,n=arguments.length-1;n>=-1&&!r;n--){var a;n>=0?a=arguments[n]:(o===void 0&&(o=e.cwd()),a=o),i(a),a.length!==0&&(s=a+"/"+s,r=a.charCodeAt(0)===47)}return s=t(s,!r),r?s.length>0?"/"+s:"/":s.length>0?s:"."},normalize:function(s){if(i(s),s.length===0)return".";var r=s.charCodeAt(0)===47,o=s.charCodeAt(s.length-1)===47;return s=t(s,!r),s.length===0&&!r&&(s="."),s.length>0&&o&&(s+="/"),r?"/"+s:s},isAbsolute:function(s){return i(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var s,r=0;r0&&(s===void 0?s=o:s+="/"+o)}return s===void 0?".":h.normalize(s)},relative:function(s,r){if(i(s),i(r),s===r||(s=h.resolve(s),r=h.resolve(r),s===r))return"";for(var o=1;om){if(r.charCodeAt(f+v)===47)return r.slice(f+v+1);if(v===0)return r.slice(f+v)}else a>m&&(s.charCodeAt(o+v)===47?b=v:v===0&&(b=0));break}var k=s.charCodeAt(o+v),N=r.charCodeAt(f+v);if(k!==N)break;k===47&&(b=v)}var B="";for(v=o+b+1;v<=n;++v)(v===n||s.charCodeAt(v)===47)&&(B.length===0?B+="..":B+="/..");return B.length>0?B+r.slice(f+b):(f+=b,r.charCodeAt(f)===47&&++f,r.slice(f))},_makeLong:function(s){return s},dirname:function(s){if(i(s),s.length===0)return".";for(var r=s.charCodeAt(0),o=r===47,n=-1,a=!0,f=s.length-1;f>=1;--f)if(r=s.charCodeAt(f),r===47){if(!a){n=f;break}}else a=!1;return n===-1?o?"/":".":o&&n===1?"//":s.slice(0,n)},basename:function(s,r){if(r!==void 0&&typeof r!="string")throw new TypeError('"ext" argument must be a string');i(s);var o=0,n=-1,a=!0,f;if(r!==void 0&&r.length>0&&r.length<=s.length){if(r.length===s.length&&r===s)return"";var p=r.length-1,g=-1;for(f=s.length-1;f>=0;--f){var m=s.charCodeAt(f);if(m===47){if(!a){o=f+1;break}}else g===-1&&(a=!1,g=f+1),p>=0&&(m===r.charCodeAt(p)?--p===-1&&(n=f):(p=-1,n=g))}return o===n?n=g:n===-1&&(n=s.length),s.slice(o,n)}else{for(f=s.length-1;f>=0;--f)if(s.charCodeAt(f)===47){if(!a){o=f+1;break}}else n===-1&&(a=!1,n=f+1);return n===-1?"":s.slice(o,n)}},extname:function(s){i(s);for(var r=-1,o=0,n=-1,a=!0,f=0,p=s.length-1;p>=0;--p){var g=s.charCodeAt(p);if(g===47){if(!a){o=p+1;break}continue}n===-1&&(a=!1,n=p+1),g===46?r===-1?r=p:f!==1&&(f=1):r!==-1&&(f=-1)}return r===-1||n===-1||f===0||f===1&&r===n-1&&r===o+1?"":s.slice(r,n)},format:function(s){if(s===null||typeof s!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof s);return l("/",s)},parse:function(s){i(s);var r={root:"",dir:"",base:"",ext:"",name:""};if(s.length===0)return r;var o=s.charCodeAt(0),n=o===47,a;n?(r.root="/",a=1):a=0;for(var f=-1,p=0,g=-1,m=!0,b=s.length-1,v=0;b>=a;--b){if(o=s.charCodeAt(b),o===47){if(!m){p=b+1;break}continue}g===-1&&(m=!1,g=b+1),o===46?f===-1?f=b:v!==1&&(v=1):f!==-1&&(v=-1)}return f===-1||g===-1||v===0||v===1&&f===g-1&&f===p+1?g!==-1&&(p===0&&n?r.base=r.name=s.slice(1,g):r.base=r.name=s.slice(p,g)):(p===0&&n?(r.name=s.slice(1,f),r.base=s.slice(1,g)):(r.name=s.slice(p,f),r.base=s.slice(p,g)),r.ext=s.slice(f,g)),p>0?r.dir=s.slice(0,p-1):n&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};return h.posix=h,Nr=h,Nr}function Hu(e){if(typeof e=="string")e=new URL(e);else if(!(e instanceof URL))throw new Deno.errors.InvalidData("invalid argument path , must be a string or URL");if(e.protocol!=="file:")throw new Deno.errors.InvalidData("invalid url scheme");return $r?zu(e):Ku(e)}function zu(e){let i=e.hostname,t=e.pathname;for(let l=0;lta||h!==":")throw new Deno.errors.InvalidData("file url path must be absolute");return t.slice(1)}}function Ku(e){if(e.hostname!=="")throw new Deno.errors.InvalidData("invalid file url hostname");let i=e.pathname;for(let t=0;tba||h!==":")throw new Deno.errors.InvalidData("file url path must be absolute");return t.slice(1)}}function Gu(e){if(e.hostname!=="")throw new Deno.errors.InvalidData("invalid file url hostname");let i=e.pathname;for(let t=0;t{fe(),pe(),de(),Uu(),Nu(),Du(),qu(),Ys(),Ne={},ko=Ft,bt={isString:function(e){return typeof e=="string"},isObject:function(e){return typeof e=="object"&&e!==null},isNull:function(e){return e===null},isNullOrUndefined:function(e){return e==null}},Ne.parse=mr,Ne.resolve=function(e,i){return mr(e,!1,!0).resolve(i)},Ne.resolveObject=function(e,i){return e?mr(e,!1,!0).resolveObject(i):i},Ne.format=function(e){return bt.isString(e)&&(e=mr(e)),e instanceof pt?e.format():pt.prototype.format.call(e)},Ne.Url=pt,Co=/^([a-z0-9.+-]+:)/i,Io=/:[0-9]*$/,To=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Oo=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r",` diff --git a/packages/modules/web_themes/koala/web/assets/store-init-DR3g0YQB.js b/packages/modules/web_themes/koala/web/assets/store-init-DR3g0YQB.js deleted file mode 100644 index ed636f6231..0000000000 --- a/packages/modules/web_themes/koala/web/assets/store-init-DR3g0YQB.js +++ /dev/null @@ -1 +0,0 @@ -import{b as t}from"./index-CMMTdT_8.js";import{u as o}from"./mqtt-store-BO4qCeJ5.js";const s=t(()=>{o().initialize()});export{s as default}; diff --git a/packages/modules/web_themes/koala/web/assets/store-init-DphRCu_b.js b/packages/modules/web_themes/koala/web/assets/store-init-DphRCu_b.js new file mode 100644 index 0000000000..5bc80fff91 --- /dev/null +++ b/packages/modules/web_themes/koala/web/assets/store-init-DphRCu_b.js @@ -0,0 +1 @@ +import{b as t}from"./index-EKspHiQe.js";import{u as o}from"./mqtt-store-DD98gHuI.js";const s=t(()=>{o().initialize()});export{s as default}; diff --git a/packages/modules/web_themes/koala/web/assets/use-quasar-CokCDZeI.js b/packages/modules/web_themes/koala/web/assets/use-quasar-CokCDZeI.js deleted file mode 100644 index 2485473f13..0000000000 --- a/packages/modules/web_themes/koala/web/assets/use-quasar-CokCDZeI.js +++ /dev/null @@ -1 +0,0 @@ -import{r as T,s as zt,j as G,c as k,o as O,N as $e,n as J,h as z,g as A,aq as H,a as m,d as ne,aL as Tt,aM as qt,G as dt,I as ve,f as Et,aH as Ct,an as ue,P as V,w as B,U as K,Y as xt,aN as se,u as Pt,am as Ht,aO as Lt,aP as Mt,aQ as _t,J as Be,aR as ft,aS as kt,aT as Ve,M as _,V as $t,k as je,L as Bt,O as Ot,S as ye,ap as we,T as Le,al as At,K as Wt,v as Dt,$ as Qe,aU as Vt,i as jt,aV as Qt}from"./index-CMMTdT_8.js";function Ft(){const e=T(!zt.value);return e.value===!1&&G(()=>{e.value=!0}),{isHydrated:e}}const vt=typeof ResizeObserver<"u",Fe=vt===!0?{}:{style:"display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;",url:"about:blank"},Ie=k({name:"QResizeObserver",props:{debounce:{type:[String,Number],default:100}},emits:["resize"],setup(e,{emit:t}){let n=null,o,l={width:-1,height:-1};function a(s){s===!0||e.debounce===0||e.debounce==="0"?i():n===null&&(n=setTimeout(i,e.debounce))}function i(){if(n!==null&&(clearTimeout(n),n=null),o){const{offsetWidth:s,offsetHeight:u}=o;(s!==l.width||u!==l.height)&&(l={width:s,height:u},t("resize",l))}}const{proxy:r}=A();if(r.trigger=a,vt===!0){let s;const u=f=>{o=r.$el.parentNode,o?(s=new ResizeObserver(a),s.observe(o),i()):f!==!0&&J(()=>{u(!0)})};return G(()=>{u()}),O(()=>{n!==null&&clearTimeout(n),s!==void 0&&(s.disconnect!==void 0?s.disconnect():o&&s.unobserve(o))}),$e}else{let s=function(){n!==null&&(clearTimeout(n),n=null),g!==void 0&&(g.removeEventListener!==void 0&&g.removeEventListener("resize",a,H.passive),g=void 0)},u=function(){s(),o&&o.contentDocument&&(g=o.contentDocument.defaultView,g.addEventListener("resize",a,H.passive),i())};const{isHydrated:f}=Ft();let g;return G(()=>{J(()=>{o=r.$el,o&&u()})}),O(s),()=>{if(f.value===!0)return z("object",{class:"q--avoid-card-border",style:Fe.style,tabindex:-1,type:"text/html",data:Fe.url,"aria-hidden":"true",onLoad:u})}}}}),Tl=k({name:"QItemSection",props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},setup(e,{slots:t}){const n=m(()=>`q-item__section column q-item__section--${e.avatar===!0||e.side===!0||e.thumbnail===!0?"side":"main"}`+(e.top===!0?" q-item__section--top justify-start":" justify-center")+(e.avatar===!0?" q-item__section--avatar":"")+(e.thumbnail===!0?" q-item__section--thumbnail":"")+(e.noWrap===!0?" q-item__section--nowrap":""));return()=>z("div",{class:n.value},ne(t.default))}}),he={dark:{type:Boolean,default:null}};function me(e,t){return m(()=>e.dark===null?t.dark.isActive:e.dark)}const ql=k({name:"QItem",props:{...he,...Tt,tag:{type:String,default:"div"},active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean},emits:["click","keyup"],setup(e,{slots:t,emit:n}){const{proxy:{$q:o}}=A(),l=me(e,o),{hasLink:a,linkAttrs:i,linkClass:r,linkTag:s,navigateOnClick:u}=qt(),f=T(null),g=T(null),p=m(()=>e.clickable===!0||a.value===!0||e.tag==="label"),c=m(()=>e.disable!==!0&&p.value===!0),v=m(()=>"q-item q-item-type row no-wrap"+(e.dense===!0?" q-item--dense":"")+(l.value===!0?" q-item--dark":"")+(a.value===!0&&e.active===null?r.value:e.active===!0?` q-item--active${e.activeClass!==void 0?` ${e.activeClass}`:""}`:"")+(e.disable===!0?" disabled":"")+(c.value===!0?" q-item--clickable q-link cursor-pointer "+(e.manualFocus===!0?"q-manual-focusable":"q-focusable q-hoverable")+(e.focused===!0?" q-manual-focusable--focused":""):"")),q=m(()=>e.insetLevel===void 0?null:{["padding"+(o.lang.rtl===!0?"Right":"Left")]:16+e.insetLevel*56+"px"});function P(b){c.value===!0&&(g.value!==null&&(b.qKeyEvent!==!0&&document.activeElement===f.value?g.value.focus():document.activeElement===g.value&&f.value.focus()),u(b))}function $(b){if(c.value===!0&&dt(b,[13,32])===!0){ve(b),b.qKeyEvent=!0;const L=new MouseEvent("click",b);L.qKeyEvent=!0,f.value.dispatchEvent(L)}n("keyup",b)}function y(){const b=Et(t.default,[]);return c.value===!0&&b.unshift(z("div",{class:"q-focus-helper",tabindex:-1,ref:g})),b}return()=>{const b={ref:f,class:v.value,style:q.value,role:"listitem",onClick:P,onKeyup:$};return c.value===!0?(b.tabindex=e.tabindex||"0",Object.assign(b,i.value)):p.value===!0&&(b["aria-disabled"]="true"),z(s.value,b,y())}}}),It={true:"inset",item:"item-inset","item-thumbnail":"item-thumbnail-inset"},Se={xs:2,sm:4,md:8,lg:16,xl:24},El=k({name:"QSeparator",props:{...he,spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},setup(e){const t=A(),n=me(e,t.proxy.$q),o=m(()=>e.vertical===!0?"vertical":"horizontal"),l=m(()=>` q-separator--${o.value}`),a=m(()=>e.inset!==!1?`${l.value}-${It[e.inset]}`:""),i=m(()=>`q-separator${l.value}${a.value}`+(e.color!==void 0?` bg-${e.color}`:"")+(n.value===!0?" q-separator--dark":"")),r=m(()=>{const s={};if(e.size!==void 0&&(s[e.vertical===!0?"width":"height"]=e.size),e.spaced!==!1){const u=e.spaced===!0?`${Se.md}px`:e.spaced in Se?`${Se[e.spaced]}px`:e.spaced,f=e.vertical===!0?["Left","Right"]:["Top","Bottom"];s[`margin${f[0]}`]=s[`margin${f[1]}`]=u}return s});return()=>z("hr",{class:i.value,style:r.value,"aria-orientation":o.value})}}),Cl=k({name:"QItemLabel",props:{overline:Boolean,caption:Boolean,header:Boolean,lines:[Number,String]},setup(e,{slots:t}){const n=m(()=>parseInt(e.lines,10)),o=m(()=>"q-item__label"+(e.overline===!0?" q-item__label--overline text-overline":"")+(e.caption===!0?" q-item__label--caption text-caption":"")+(e.header===!0?" q-item__label--header":"")+(n.value===1?" ellipsis":"")),l=m(()=>e.lines!==void 0&&n.value>1?{overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":n.value}:null);return()=>z("div",{style:l.value,class:o.value},ne(t.default))}});function ce(){if(window.getSelection!==void 0){const e=window.getSelection();e.empty!==void 0?e.empty():e.removeAllRanges!==void 0&&(e.removeAllRanges(),Ct.is.mobile!==!0&&e.addRange(document.createRange()))}else document.selection!==void 0&&document.selection.empty()}const ht={target:{type:[Boolean,String,Element],default:!0},noParentEvent:Boolean},xl={...ht,contextMenu:Boolean};function Rt({showing:e,avoidEmit:t,configureAnchorEl:n}){const{props:o,proxy:l,emit:a}=A(),i=T(null);let r=null;function s(c){return i.value===null?!1:c===void 0||c.touches===void 0||c.touches.length<=1}const u={};n===void 0&&(Object.assign(u,{hide(c){l.hide(c)},toggle(c){l.toggle(c),c.qAnchorHandled=!0},toggleKey(c){dt(c,13)===!0&&u.toggle(c)},contextClick(c){l.hide(c),ue(c),J(()=>{l.show(c),c.qAnchorHandled=!0})},prevent:ue,mobileTouch(c){if(u.mobileCleanup(c),s(c)!==!0)return;l.hide(c),i.value.classList.add("non-selectable");const v=c.target;V(u,"anchor",[[v,"touchmove","mobileCleanup","passive"],[v,"touchend","mobileCleanup","passive"],[v,"touchcancel","mobileCleanup","passive"],[i.value,"contextmenu","prevent","notPassive"]]),r=setTimeout(()=>{r=null,l.show(c),c.qAnchorHandled=!0},300)},mobileCleanup(c){i.value.classList.remove("non-selectable"),r!==null&&(clearTimeout(r),r=null),e.value===!0&&c!==void 0&&ce()}}),n=function(c=o.contextMenu){if(o.noParentEvent===!0||i.value===null)return;let v;c===!0?l.$q.platform.is.mobile===!0?v=[[i.value,"touchstart","mobileTouch","passive"]]:v=[[i.value,"mousedown","hide","passive"],[i.value,"contextmenu","contextClick","notPassive"]]:v=[[i.value,"click","toggle","passive"],[i.value,"keyup","toggleKey","passive"]],V(u,"anchor",v)});function f(){K(u,"anchor")}function g(c){for(i.value=c;i.value.classList.contains("q-anchor--skip");)i.value=i.value.parentNode;n()}function p(){if(o.target===!1||o.target===""||l.$el.parentNode===null)i.value=null;else if(o.target===!0)g(l.$el.parentNode);else{let c=o.target;if(typeof o.target=="string")try{c=document.querySelector(o.target)}catch{c=void 0}c!=null?(i.value=c.$el||c,n()):(i.value=null,console.error(`Anchor: target "${o.target}" not found`))}}return B(()=>o.contextMenu,c=>{i.value!==null&&(f(),n(c))}),B(()=>o.target,()=>{i.value!==null&&f(),p()}),B(()=>o.noParentEvent,c=>{i.value!==null&&(c===!0?f():n())}),G(()=>{p(),t!==!0&&o.modelValue===!0&&i.value===null&&a("update:modelValue",!1)}),O(()=>{r!==null&&clearTimeout(r),f()}),{anchorEl:i,canShow:s,anchorEvents:u}}function Nt(e,t){const n=T(null);let o;function l(r,s){const u=`${s!==void 0?"add":"remove"}EventListener`,f=s!==void 0?s:o;r!==window&&r[u]("scroll",f,H.passive),window[u]("scroll",f,H.passive),o=s}function a(){n.value!==null&&(l(n.value),n.value=null)}const i=B(()=>e.noParentEvent,()=>{n.value!==null&&(a(),t())});return O(i),{localScrollTarget:n,unconfigureScrollTarget:a,changeScrollEvent:l}}const Xt={modelValue:{type:Boolean,default:null},"onUpdate:modelValue":[Function,Array]},Yt=["beforeShow","show","beforeHide","hide"];function Kt({showing:e,canShow:t,hideOnRouteChange:n,handleShow:o,handleHide:l,processOnMount:a}){const i=A(),{props:r,emit:s,proxy:u}=i;let f;function g(y){e.value===!0?v(y):p(y)}function p(y){if(r.disable===!0||y!==void 0&&y.qAnchorHandled===!0||t!==void 0&&t(y)!==!0)return;const b=r["onUpdate:modelValue"]!==void 0;b===!0&&(s("update:modelValue",!0),f=y,J(()=>{f===y&&(f=void 0)})),(r.modelValue===null||b===!1)&&c(y)}function c(y){e.value!==!0&&(e.value=!0,s("beforeShow",y),o!==void 0?o(y):s("show",y))}function v(y){if(r.disable===!0)return;const b=r["onUpdate:modelValue"]!==void 0;b===!0&&(s("update:modelValue",!1),f=y,J(()=>{f===y&&(f=void 0)})),(r.modelValue===null||b===!1)&&q(y)}function q(y){e.value!==!1&&(e.value=!1,s("beforeHide",y),l!==void 0?l(y):s("hide",y))}function P(y){r.disable===!0&&y===!0?r["onUpdate:modelValue"]!==void 0&&s("update:modelValue",!1):y===!0!==e.value&&(y===!0?c:q)(f)}B(()=>r.modelValue,P),n!==void 0&&xt(i)===!0&&B(()=>u.$route.fullPath,()=>{n.value===!0&&e.value===!0&&v()}),a===!0&&G(()=>{P(r.modelValue)});const $={show:p,hide:v,toggle:g};return Object.assign(u,$),$}let I=[],le=[];function mt(e){le=le.filter(t=>t!==e)}function Ut(e){mt(e),le.push(e)}function Re(e){mt(e),le.length===0&&I.length!==0&&(I[I.length-1](),I=[])}function Pl(e){le.length===0?e():I.push(e)}function Hl(e){I=I.filter(t=>t!==e)}const U=[];function Ll(e){return U.find(t=>t.contentEl!==null&&t.contentEl.contains(e))}function Gt(e,t){do{if(e.$options.name==="QMenu"){if(e.hide(t),e.$props.separateClosePopup===!0)return se(e)}else if(e.__qPortal===!0){const n=se(e);return n!==void 0&&n.$options.name==="QPopupProxy"?(e.hide(t),n):e}e=se(e)}while(e!=null)}function Ml(e,t,n){for(;n!==0&&e!==void 0&&e!==null;){if(e.__qPortal===!0){if(n--,e.$options.name==="QMenu"){e=Gt(e,t);continue}e.hide(t)}e=se(e)}}const Jt=k({name:"QPortal",setup(e,{slots:t}){return()=>t.default()}});function Zt(e){for(e=e.parent;e!=null;){if(e.type.name==="QGlobalDialog")return!0;if(e.type.name==="QDialog"||e.type.name==="QMenu")return!1;e=e.parent}return!1}function el(e,t,n,o){const l=T(!1),a=T(!1);let i=null;const r={},s=o==="dialog"&&Zt(e);function u(g){if(g===!0){Re(r),a.value=!0;return}a.value=!1,l.value===!1&&(s===!1&&i===null&&(i=Mt(!1,o)),l.value=!0,U.push(e.proxy),Ut(r))}function f(g){if(a.value=!1,g!==!0)return;Re(r),l.value=!1;const p=U.indexOf(e.proxy);p!==-1&&U.splice(p,1),i!==null&&(_t(i),i=null)}return Pt(()=>{f(!0)}),e.proxy.__qPortal=!0,Ht(e.proxy,"contentEl",()=>t.value),{showPortal:u,hidePortal:f,portalIsActive:l,portalIsAccessible:a,renderPortal:()=>s===!0?n():l.value===!0?[z(Lt,{to:i},z(Jt,n))]:void 0}}const ze={transitionShow:{type:String,default:"fade"},transitionHide:{type:String,default:"fade"},transitionDuration:{type:[String,Number],default:300}};function tl(e,t=()=>{},n=()=>{}){return{transitionProps:m(()=>{const o=`q-transition--${e.transitionShow||t()}`,l=`q-transition--${e.transitionHide||n()}`;return{appear:!0,enterFromClass:`${o}-enter-from`,enterActiveClass:`${o}-enter-active`,enterToClass:`${o}-enter-to`,leaveFromClass:`${l}-leave-from`,leaveActiveClass:`${l}-leave-active`,leaveToClass:`${l}-leave-to`}}),transitionStyle:m(()=>`--q-transition-duration: ${e.transitionDuration}ms`)}}function ll(){let e;const t=A();function n(){e=void 0}return Be(n),O(n),{removeTick:n,registerTick(o){e=o,J(()=>{e===o&&(ft(t)===!1&&e(),e=void 0)})}}}function nl(){let e=null;const t=A();function n(){e!==null&&(clearTimeout(e),e=null)}return Be(n),O(n),{removeTimeout:n,registerTimeout(o,l){n(),ft(t)===!1&&(e=setTimeout(()=>{e=null,o()},l))}}}const gt=[Element,String],ol=[null,document,document.body,document.scrollingElement,document.documentElement];function bt(e,t){let n=kt(t);if(n===void 0){if(e==null)return window;n=e.closest(".scroll,.scroll-y,.overflow-auto")}return ol.includes(n)?window:n}function Oe(e){return e===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:e.scrollTop}function Ae(e){return e===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:e.scrollLeft}function pt(e,t,n=0){const o=arguments[3]===void 0?performance.now():arguments[3],l=Oe(e);if(n<=0){l!==t&&Me(e,t);return}requestAnimationFrame(a=>{const i=a-o,r=l+(t-l)/Math.max(i,n)*i;Me(e,r),r!==t&&pt(e,t,n-i,a)})}function yt(e,t,n=0){const o=arguments[3]===void 0?performance.now():arguments[3],l=Ae(e);if(n<=0){l!==t&&_e(e,t);return}requestAnimationFrame(a=>{const i=a-o,r=l+(t-l)/Math.max(i,n)*i;_e(e,r),r!==t&&yt(e,t,n-i,a)})}function Me(e,t){if(e===window){window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,t);return}e.scrollTop=t}function _e(e,t){if(e===window){window.scrollTo(t,window.pageYOffset||window.scrollY||document.body.scrollTop||0);return}e.scrollLeft=t}function Ne(e,t,n){if(n){pt(e,t,n);return}Me(e,t)}function Te(e,t,n){if(n){yt(e,t,n);return}_e(e,t)}let re;function il(){if(re!==void 0)return re;const e=document.createElement("p"),t=document.createElement("div");Ve(e,{width:"100%",height:"200px"}),Ve(t,{position:"absolute",top:"0px",left:"0px",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),t.appendChild(e),document.body.appendChild(t);const n=e.offsetWidth;t.style.overflow="scroll";let o=e.offsetWidth;return n===o&&(o=t.clientWidth),t.remove(),re=n-o,re}function rl(e,t=!0){return!e||e.nodeType!==Node.ELEMENT_NODE?!1:t?e.scrollHeight>e.clientHeight&&(e.classList.contains("scroll")||e.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(e)["overflow-y"])):e.scrollWidth>e.clientWidth&&(e.classList.contains("scroll")||e.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(e)["overflow-x"]))}const{notPassiveCapture:de}=H,R=[];function fe(e){const t=e.target;if(t===void 0||t.nodeType===8||t.classList.contains("no-pointer-events")===!0)return;let n=U.length-1;for(;n>=0;){const o=U[n].$;if(o.type.name==="QTooltip"){n--;continue}if(o.type.name!=="QDialog")break;if(o.props.seamless!==!0)return;n--}for(let o=R.length-1;o>=0;o--){const l=R[o];if((l.anchorEl.value===null||l.anchorEl.value.contains(t)===!1)&&(t===document.body||l.innerRef.value!==null&&l.innerRef.value.contains(t)===!1))e.qClickOutside=!0,l.onClickOutside(e);else return}}function al(e){R.push(e),R.length===1&&(document.addEventListener("mousedown",fe,de),document.addEventListener("touchstart",fe,de))}function Xe(e){const t=R.findIndex(n=>n===e);t!==-1&&(R.splice(t,1),R.length===0&&(document.removeEventListener("mousedown",fe,de),document.removeEventListener("touchstart",fe,de)))}let Ye,Ke;function Ue(e){const t=e.split(" ");return t.length!==2?!1:["top","center","bottom"].includes(t[0])!==!0?(console.error("Anchor/Self position must start with one of top/center/bottom"),!1):["left","middle","right","start","end"].includes(t[1])!==!0?(console.error("Anchor/Self position must end with one of left/middle/right/start/end"),!1):!0}function sl(e){return e?!(e.length!==2||typeof e[0]!="number"||typeof e[1]!="number"):!0}const ke={"start#ltr":"left","start#rtl":"right","end#ltr":"right","end#rtl":"left"};["left","middle","right"].forEach(e=>{ke[`${e}#ltr`]=e,ke[`${e}#rtl`]=e});function Ge(e,t){const n=e.split(" ");return{vertical:n[0],horizontal:ke[`${n[1]}#${t===!0?"rtl":"ltr"}`]}}function ul(e,t){let{top:n,left:o,right:l,bottom:a,width:i,height:r}=e.getBoundingClientRect();return t!==void 0&&(n-=t[1],o-=t[0],a+=t[1],l+=t[0],i+=t[0],r+=t[1]),{top:n,bottom:a,height:r,left:o,right:l,width:i,middle:o+(l-o)/2,center:n+(a-n)/2}}function cl(e,t,n){let{top:o,left:l}=e.getBoundingClientRect();return o+=t.top,l+=t.left,n!==void 0&&(o+=n[1],l+=n[0]),{top:o,bottom:o+1,height:1,left:l,right:l+1,width:1,middle:l,center:o}}function dl(e,t){return{top:0,center:t/2,bottom:t,left:0,middle:e/2,right:e}}function Je(e,t,n,o){return{top:e[n.vertical]-t[o.vertical],left:e[n.horizontal]-t[o.horizontal]}}function wt(e,t=0){if(e.targetEl===null||e.anchorEl===null||t>5)return;if(e.targetEl.offsetHeight===0||e.targetEl.offsetWidth===0){setTimeout(()=>{wt(e,t+1)},10);return}const{targetEl:n,offset:o,anchorEl:l,anchorOrigin:a,selfOrigin:i,absoluteOffset:r,fit:s,cover:u,maxHeight:f,maxWidth:g}=e;if(_.is.ios===!0&&window.visualViewport!==void 0){const W=document.body.style,{offsetLeft:C,offsetTop:M}=window.visualViewport;C!==Ye&&(W.setProperty("--q-pe-left",C+"px"),Ye=C),M!==Ke&&(W.setProperty("--q-pe-top",M+"px"),Ke=M)}const{scrollLeft:p,scrollTop:c}=n,v=r===void 0?ul(l,u===!0?[0,0]:o):cl(l,r,o);Object.assign(n.style,{top:0,left:0,minWidth:null,minHeight:null,maxWidth:g,maxHeight:f,visibility:"visible"});const{offsetWidth:q,offsetHeight:P}=n,{elWidth:$,elHeight:y}=s===!0||u===!0?{elWidth:Math.max(v.width,q),elHeight:u===!0?Math.max(v.height,P):P}:{elWidth:q,elHeight:P};let b={maxWidth:g,maxHeight:f};(s===!0||u===!0)&&(b.minWidth=v.width+"px",u===!0&&(b.minHeight=v.height+"px")),Object.assign(n.style,b);const L=dl($,y);let S=Je(v,L,a,i);if(r===void 0||o===void 0)qe(S,v,L,a,i);else{const{top:W,left:C}=S;qe(S,v,L,a,i);let M=!1;if(S.top!==W){M=!0;const E=2*o[1];v.center=v.top-=E,v.bottom-=E+2}if(S.left!==C){M=!0;const E=2*o[0];v.middle=v.left-=E,v.right-=E+2}M===!0&&(S=Je(v,L,a,i),qe(S,v,L,a,i))}b={top:S.top+"px",left:S.left+"px"},S.maxHeight!==void 0&&(b.maxHeight=S.maxHeight+"px",v.height>S.maxHeight&&(b.minHeight=b.maxHeight)),S.maxWidth!==void 0&&(b.maxWidth=S.maxWidth+"px",v.width>S.maxWidth&&(b.minWidth=b.maxWidth)),Object.assign(n.style,b),n.scrollTop!==c&&(n.scrollTop=c),n.scrollLeft!==p&&(n.scrollLeft=p)}function qe(e,t,n,o,l){const a=n.bottom,i=n.right,r=il(),s=window.innerHeight-r,u=document.body.clientWidth;if(e.top<0||e.top+a>s)if(l.vertical==="center")e.top=t[o.vertical]>s/2?Math.max(0,s-a):0,e.maxHeight=Math.min(a,s);else if(t[o.vertical]>s/2){const f=Math.min(s,o.vertical==="center"?t.center:o.vertical===l.vertical?t.bottom:t.top);e.maxHeight=Math.min(a,f),e.top=Math.max(0,f-a)}else e.top=Math.max(0,o.vertical==="center"?t.center:o.vertical===l.vertical?t.top:t.bottom),e.maxHeight=Math.min(a,s-e.top);if(e.left<0||e.left+i>u)if(e.maxWidth=Math.min(i,u),l.horizontal==="middle")e.left=t[o.horizontal]>u/2?Math.max(0,u-i):0;else if(t[o.horizontal]>u/2){const f=Math.min(u,o.horizontal==="middle"?t.middle:o.horizontal===l.horizontal?t.right:t.left);e.maxWidth=Math.min(i,f),e.left=Math.max(0,f-e.maxWidth)}else e.left=Math.max(0,o.horizontal==="middle"?t.middle:o.horizontal===l.horizontal?t.left:t.right),e.maxWidth=Math.min(i,u-e.left)}const _l=k({name:"QTooltip",inheritAttrs:!1,props:{...ht,...Xt,...ze,maxHeight:{type:String,default:null},maxWidth:{type:String,default:null},transitionShow:{...ze.transitionShow,default:"jump-down"},transitionHide:{...ze.transitionHide,default:"jump-up"},anchor:{type:String,default:"bottom middle",validator:Ue},self:{type:String,default:"top middle",validator:Ue},offset:{type:Array,default:()=>[14,14],validator:sl},scrollTarget:gt,delay:{type:Number,default:0},hideDelay:{type:Number,default:0},persistent:Boolean},emits:[...Yt],setup(e,{slots:t,emit:n,attrs:o}){let l,a;const i=A(),{proxy:{$q:r}}=i,s=T(null),u=T(!1),f=m(()=>Ge(e.anchor,r.lang.rtl)),g=m(()=>Ge(e.self,r.lang.rtl)),p=m(()=>e.persistent!==!0),{registerTick:c,removeTick:v}=ll(),{registerTimeout:q}=nl(),{transitionProps:P,transitionStyle:$}=tl(e),{localScrollTarget:y,changeScrollEvent:b,unconfigureScrollTarget:L}=Nt(e,Y),{anchorEl:S,canShow:W,anchorEvents:C}=Rt({showing:u,configureAnchorEl:X}),{show:M,hide:E}=Kt({showing:u,canShow:W,handleShow:ge,handleHide:d,hideOnRouteChange:p,processOnMount:!0});Object.assign(C,{delayShow:D,delayHide:j});const{showPortal:oe,hidePortal:ie,renderPortal:N}=el(i,s,St,"tooltip");if(r.platform.is.mobile===!0){const x={anchorEl:S,innerRef:s,onClickOutside(Q){return E(Q),Q.target.classList.contains("q-dialog__backdrop")&&ve(Q),!0}},pe=m(()=>e.modelValue===null&&e.persistent!==!0&&u.value===!0);B(pe,Q=>{(Q===!0?al:Xe)(x)}),O(()=>{Xe(x)})}function ge(x){oe(),c(()=>{a=new MutationObserver(()=>w()),a.observe(s.value,{attributes:!1,childList:!0,characterData:!0,subtree:!0}),w(),Y()}),l===void 0&&(l=B(()=>r.screen.width+"|"+r.screen.height+"|"+e.self+"|"+e.anchor+"|"+r.lang.rtl,w)),q(()=>{oe(!0),n("show",x)},e.transitionDuration)}function d(x){v(),ie(),h(),q(()=>{ie(!0),n("hide",x)},e.transitionDuration)}function h(){a!==void 0&&(a.disconnect(),a=void 0),l!==void 0&&(l(),l=void 0),L(),K(C,"tooltipTemp")}function w(){wt({targetEl:s.value,offset:e.offset,anchorEl:S.value,anchorOrigin:f.value,selfOrigin:g.value,maxHeight:e.maxHeight,maxWidth:e.maxWidth})}function D(x){if(r.platform.is.mobile===!0){ce(),document.body.classList.add("non-selectable");const pe=S.value,Q=["touchmove","touchcancel","touchend","click"].map(De=>[pe,De,"delayHide","passiveCapture"]);V(C,"tooltipTemp",Q)}q(()=>{M(x)},e.delay)}function j(x){r.platform.is.mobile===!0&&(K(C,"tooltipTemp"),ce(),setTimeout(()=>{document.body.classList.remove("non-selectable")},10)),q(()=>{E(x)},e.hideDelay)}function X(){if(e.noParentEvent===!0||S.value===null)return;const x=r.platform.is.mobile===!0?[[S.value,"touchstart","delayShow","passive"]]:[[S.value,"mouseenter","delayShow","passive"],[S.value,"mouseleave","delayHide","passive"]];V(C,"anchor",x)}function Y(){if(S.value!==null||e.scrollTarget!==void 0){y.value=bt(S.value,e.scrollTarget);const x=e.noParentEvent===!0?w:E;b(y.value,x)}}function be(){return u.value===!0?z("div",{...o,ref:s,class:["q-tooltip q-tooltip--style q-position-engine no-pointer-events",o.class],style:[o.style,$.value],role:"tooltip"},ne(t.default)):null}function St(){return z($t,P.value,be)}return O(h),Object.assign(i.proxy,{updatePosition:w}),N}}),kl=k({name:"QBtnGroup",props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},setup(e,{slots:t}){const n=m(()=>{const o=["unelevated","outline","flat","rounded","square","push","stretch","glossy"].filter(l=>e[l]===!0).map(l=>`q-btn-group--${l}`).join(" ");return`q-btn-group row no-wrap${o.length!==0?" "+o:""}`+(e.spread===!0?" q-btn-group--spread":" inline")});return()=>z("div",{class:n.value},ne(t.default))}}),fl=["ul","ol"],$l=k({name:"QList",props:{...he,bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean,tag:{type:String,default:"div"}},setup(e,{slots:t}){const n=A(),o=me(e,n.proxy.$q),l=m(()=>fl.includes(e.tag)?null:"list"),a=m(()=>"q-list"+(e.bordered===!0?" q-list--bordered":"")+(e.dense===!0?" q-list--dense":"")+(e.separator===!0?" q-list--separator":"")+(o.value===!0?" q-list--dark":"")+(e.padding===!0?" q-list--padding":""));return()=>z(e.tag,{class:a.value,role:l.value},ne(t.default))}}),vl=k({props:["store","barStyle","verticalBarStyle","horizontalBarStyle"],setup(e){return()=>[z("div",{class:e.store.scroll.vertical.barClass.value,style:[e.barStyle,e.verticalBarStyle],"aria-hidden":"true",onMousedown:e.store.onVerticalMousedown}),z("div",{class:e.store.scroll.horizontal.barClass.value,style:[e.barStyle,e.horizontalBarStyle],"aria-hidden":"true",onMousedown:e.store.onHorizontalMousedown}),je(z("div",{ref:e.store.scroll.vertical.ref,class:e.store.scroll.vertical.thumbClass.value,style:e.store.scroll.vertical.style.value,"aria-hidden":"true"}),e.store.thumbVertDir),je(z("div",{ref:e.store.scroll.horizontal.ref,class:e.store.scroll.horizontal.thumbClass.value,style:e.store.scroll.horizontal.style.value,"aria-hidden":"true"}),e.store.thumbHorizDir)]}}),{passive:Ze}=H,hl=["both","horizontal","vertical"],ml=k({name:"QScrollObserver",props:{axis:{type:String,validator:e=>hl.includes(e),default:"vertical"},debounce:[String,Number],scrollTarget:gt},emits:["scroll"],setup(e,{emit:t}){const n={position:{top:0,left:0},direction:"down",directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}};let o=null,l,a;B(()=>e.scrollTarget,()=>{s(),r()});function i(){o!==null&&o();const g=Math.max(0,Oe(l)),p=Ae(l),c={top:g-n.position.top,left:p-n.position.left};if(e.axis==="vertical"&&c.top===0||e.axis==="horizontal"&&c.left===0)return;const v=Math.abs(c.top)>=Math.abs(c.left)?c.top<0?"up":"down":c.left<0?"left":"right";n.position={top:g,left:p},n.directionChanged=n.direction!==v,n.delta=c,n.directionChanged===!0&&(n.direction=v,n.inflectionPoint=n.position),t("scroll",{...n})}function r(){l=bt(a,e.scrollTarget),l.addEventListener("scroll",u,Ze),u(!0)}function s(){l!==void 0&&(l.removeEventListener("scroll",u,Ze),l=void 0)}function u(g){if(g===!0||e.debounce===0||e.debounce==="0")i();else if(o===null){const[p,c]=e.debounce?[setTimeout(i,e.debounce),clearTimeout]:[requestAnimationFrame(i),cancelAnimationFrame];o=()=>{c(p),o=null}}}const{proxy:f}=A();return B(()=>f.$q.lang.rtl,i),G(()=>{a=f.$el.parentNode,r()}),O(()=>{o!==null&&o(),s()}),Object.assign(f,{trigger:u,getPosition:()=>n}),$e}}),We={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0},gl=Object.keys(We);We.all=!0;function et(e){const t={};for(const n of gl)e[n]===!0&&(t[n]=!0);return Object.keys(t).length===0?We:(t.horizontal===!0?t.left=t.right=!0:t.left===!0&&t.right===!0&&(t.horizontal=!0),t.vertical===!0?t.up=t.down=!0:t.up===!0&&t.down===!0&&(t.vertical=!0),t.horizontal===!0&&t.vertical===!0&&(t.all=!0),t)}const bl=["INPUT","TEXTAREA"];function tt(e,t){return t.event===void 0&&e.target!==void 0&&e.target.draggable!==!0&&typeof t.handler=="function"&&bl.includes(e.target.nodeName.toUpperCase())===!1&&(e.qClonedBy===void 0||e.qClonedBy.indexOf(t.uid)===-1)}function Ee(e,t,n){const o=Le(e);let l,a=o.left-t.event.x,i=o.top-t.event.y,r=Math.abs(a),s=Math.abs(i);const u=t.direction;u.horizontal===!0&&u.vertical!==!0?l=a<0?"left":"right":u.horizontal!==!0&&u.vertical===!0?l=i<0?"up":"down":u.up===!0&&i<0?(l="up",r>s&&(u.left===!0&&a<0?l="left":u.right===!0&&a>0&&(l="right"))):u.down===!0&&i>0?(l="down",r>s&&(u.left===!0&&a<0?l="left":u.right===!0&&a>0&&(l="right"))):u.left===!0&&a<0?(l="left",r0&&(l="down"))):u.right===!0&&a>0&&(l="right",r0&&(l="down")));let f=!1;if(l===void 0&&n===!1){if(t.event.isFirst===!0||t.event.lastDir===void 0)return{};l=t.event.lastDir,f=!0,l==="left"||l==="right"?(o.left-=a,r=0,a=0):(o.top-=i,s=0,i=0)}return{synthetic:f,payload:{evt:e,touch:t.event.mouse!==!0,mouse:t.event.mouse===!0,position:o,direction:l,isFirst:t.event.isFirst,isFinal:n===!0,duration:Date.now()-t.event.time,distance:{x:r,y:s},offset:{x:a,y:i},delta:{x:o.left-t.event.lastX,y:o.top-t.event.lastY}}}}let pl=0;const lt=Bt({name:"touch-pan",beforeMount(e,{value:t,modifiers:n}){if(n.mouse!==!0&&_.has.touch!==!0)return;function o(a,i){n.mouse===!0&&i===!0?ve(a):(n.stop===!0&&we(a),n.prevent===!0&&ue(a))}const l={uid:"qvtp_"+pl++,handler:t,modifiers:n,direction:et(n),noop:$e,mouseStart(a){tt(a,l)&&Ot(a)&&(V(l,"temp",[[document,"mousemove","move","notPassiveCapture"],[document,"mouseup","end","passiveCapture"]]),l.start(a,!0))},touchStart(a){if(tt(a,l)){const i=a.target;V(l,"temp",[[i,"touchmove","move","notPassiveCapture"],[i,"touchcancel","end","passiveCapture"],[i,"touchend","end","passiveCapture"]]),l.start(a)}},start(a,i){if(_.is.firefox===!0&&ye(e,!0),l.lastEvt=a,i===!0||n.stop===!0){if(l.direction.all!==!0&&(i!==!0||l.modifiers.mouseAllDir!==!0&&l.modifiers.mousealldir!==!0)){const u=a.type.indexOf("mouse")!==-1?new MouseEvent(a.type,a):new TouchEvent(a.type,a);a.defaultPrevented===!0&&ue(u),a.cancelBubble===!0&&we(u),Object.assign(u,{qKeyEvent:a.qKeyEvent,qClickOutside:a.qClickOutside,qAnchorHandled:a.qAnchorHandled,qClonedBy:a.qClonedBy===void 0?[l.uid]:a.qClonedBy.concat(l.uid)}),l.initialEvent={target:a.target,event:u}}we(a)}const{left:r,top:s}=Le(a);l.event={x:r,y:s,time:Date.now(),mouse:i===!0,detected:!1,isFirst:!0,isFinal:!1,lastX:r,lastY:s}},move(a){if(l.event===void 0)return;const i=Le(a),r=i.left-l.event.x,s=i.top-l.event.y;if(r===0&&s===0)return;l.lastEvt=a;const u=l.event.mouse===!0,f=()=>{o(a,u);let c;n.preserveCursor!==!0&&n.preservecursor!==!0&&(c=document.documentElement.style.cursor||"",document.documentElement.style.cursor="grabbing"),u===!0&&document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),ce(),l.styleCleanup=v=>{if(l.styleCleanup=void 0,c!==void 0&&(document.documentElement.style.cursor=c),document.body.classList.remove("non-selectable"),u===!0){const q=()=>{document.body.classList.remove("no-pointer-events--children")};v!==void 0?setTimeout(()=>{q(),v()},50):q()}else v!==void 0&&v()}};if(l.event.detected===!0){l.event.isFirst!==!0&&o(a,l.event.mouse);const{payload:c,synthetic:v}=Ee(a,l,!1);c!==void 0&&(l.handler(c)===!1?l.end(a):(l.styleCleanup===void 0&&l.event.isFirst===!0&&f(),l.event.lastX=c.position.left,l.event.lastY=c.position.top,l.event.lastDir=v===!0?void 0:c.direction,l.event.isFirst=!1));return}if(l.direction.all===!0||u===!0&&(l.modifiers.mouseAllDir===!0||l.modifiers.mousealldir===!0)){f(),l.event.detected=!0,l.move(a);return}const g=Math.abs(r),p=Math.abs(s);g!==p&&(l.direction.horizontal===!0&&g>p||l.direction.vertical===!0&&g0||l.direction.left===!0&&g>p&&r<0||l.direction.right===!0&&g>p&&r>0?(l.event.detected=!0,l.move(a)):l.end(a,!0))},end(a,i){if(l.event!==void 0){if(K(l,"temp"),_.is.firefox===!0&&ye(e,!1),i===!0)l.styleCleanup!==void 0&&l.styleCleanup(),l.event.detected!==!0&&l.initialEvent!==void 0&&l.initialEvent.target.dispatchEvent(l.initialEvent.event);else if(l.event.detected===!0){l.event.isFirst===!0&&l.handler(Ee(a===void 0?l.lastEvt:a,l).payload);const{payload:r}=Ee(a===void 0?l.lastEvt:a,l,!0),s=()=>{l.handler(r)};l.styleCleanup!==void 0?l.styleCleanup(s):s()}l.event=void 0,l.initialEvent=void 0,l.lastEvt=void 0}}};if(e.__qtouchpan=l,n.mouse===!0){const a=n.mouseCapture===!0||n.mousecapture===!0?"Capture":"";V(l,"main",[[e,"mousedown","mouseStart",`passive${a}`]])}_.has.touch===!0&&V(l,"main",[[e,"touchstart","touchStart",`passive${n.capture===!0?"Capture":""}`],[e,"touchmove","noop","notPassiveCapture"]])},updated(e,t){const n=e.__qtouchpan;n!==void 0&&(t.oldValue!==t.value&&(typeof value!="function"&&n.end(),n.handler=t.value),n.direction=et(t.modifiers))},beforeUnmount(e){const t=e.__qtouchpan;t!==void 0&&(t.event!==void 0&&t.end(),K(t,"main"),K(t,"temp"),_.is.firefox===!0&&ye(e,!1),t.styleCleanup!==void 0&&t.styleCleanup(),delete e.__qtouchpan)}});function Z(e,t,n){return n<=t?t:Math.min(n,Math.max(t,e))}function Bl(e,t,n){if(n<=t)return t;const o=n-t+1;let l=t+(e-t)%o;return le>=250?50:Math.ceil(e/5),Ol=k({name:"QScrollArea",props:{...he,thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],verticalOffset:{type:Array,default:[0,0]},horizontalOffset:{type:Array,default:[0,0]},contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},tabindex:[String,Number],onScroll:Function},setup(e,{slots:t,emit:n}){const o=T(!1),l=T(!1),a=T(!1),i={vertical:T(0),horizontal:T(0)},r={vertical:{ref:T(null),position:T(0),size:T(0)},horizontal:{ref:T(null),position:T(0),size:T(0)}},{proxy:s}=A(),u=me(e,s.$q);let f=null,g;const p=T(null),c=m(()=>"q-scrollarea"+(u.value===!0?" q-scrollarea--dark":""));Object.assign(i,{verticalInner:m(()=>i.vertical.value-e.verticalOffset[0]-e.verticalOffset[1]),horizontalInner:m(()=>i.horizontal.value-e.horizontalOffset[0]-e.horizontalOffset[1])}),r.vertical.percentage=m(()=>{const d=r.vertical.size.value-i.vertical.value;if(d<=0)return 0;const h=Z(r.vertical.position.value/d,0,1);return Math.round(h*1e4)/1e4}),r.vertical.thumbHidden=m(()=>(e.visible===null?a.value:e.visible)!==!0&&o.value===!1&&l.value===!1||r.vertical.size.value<=i.vertical.value+1),r.vertical.thumbStart=m(()=>e.verticalOffset[0]+r.vertical.percentage.value*(i.verticalInner.value-r.vertical.thumbSize.value)),r.vertical.thumbSize=m(()=>Math.round(Z(i.verticalInner.value*i.verticalInner.value/r.vertical.size.value,it(i.verticalInner.value),i.verticalInner.value))),r.vertical.style=m(()=>({...e.thumbStyle,...e.verticalThumbStyle,top:`${r.vertical.thumbStart.value}px`,height:`${r.vertical.thumbSize.value}px`,right:`${e.horizontalOffset[1]}px`})),r.vertical.thumbClass=m(()=>"q-scrollarea__thumb q-scrollarea__thumb--v absolute-right"+(r.vertical.thumbHidden.value===!0?" q-scrollarea__thumb--invisible":"")),r.vertical.barClass=m(()=>"q-scrollarea__bar q-scrollarea__bar--v absolute-right"+(r.vertical.thumbHidden.value===!0?" q-scrollarea__bar--invisible":"")),r.horizontal.percentage=m(()=>{const d=r.horizontal.size.value-i.horizontal.value;if(d<=0)return 0;const h=Z(Math.abs(r.horizontal.position.value)/d,0,1);return Math.round(h*1e4)/1e4}),r.horizontal.thumbHidden=m(()=>(e.visible===null?a.value:e.visible)!==!0&&o.value===!1&&l.value===!1||r.horizontal.size.value<=i.horizontal.value+1),r.horizontal.thumbStart=m(()=>e.horizontalOffset[0]+r.horizontal.percentage.value*(i.horizontalInner.value-r.horizontal.thumbSize.value)),r.horizontal.thumbSize=m(()=>Math.round(Z(i.horizontalInner.value*i.horizontalInner.value/r.horizontal.size.value,it(i.horizontalInner.value),i.horizontalInner.value))),r.horizontal.style=m(()=>({...e.thumbStyle,...e.horizontalThumbStyle,[s.$q.lang.rtl===!0?"right":"left"]:`${r.horizontal.thumbStart.value}px`,width:`${r.horizontal.thumbSize.value}px`,bottom:`${e.verticalOffset[1]}px`})),r.horizontal.thumbClass=m(()=>"q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom"+(r.horizontal.thumbHidden.value===!0?" q-scrollarea__thumb--invisible":"")),r.horizontal.barClass=m(()=>"q-scrollarea__bar q-scrollarea__bar--h absolute-bottom"+(r.horizontal.thumbHidden.value===!0?" q-scrollarea__bar--invisible":""));const v=m(()=>r.vertical.thumbHidden.value===!0&&r.horizontal.thumbHidden.value===!0?e.contentStyle:e.contentActiveStyle);function q(){const d={};return nt.forEach(h=>{const w=r[h];Object.assign(d,{[h+"Position"]:w.position.value,[h+"Percentage"]:w.percentage.value,[h+"Size"]:w.size.value,[h+"ContainerSize"]:i[h].value,[h+"ContainerInnerSize"]:i[h+"Inner"].value})}),d}const P=At(()=>{const d=q();d.ref=s,n("scroll",d)},0);function $(d,h,w){if(nt.includes(d)===!1){console.error("[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)");return}(d==="vertical"?Ne:Te)(p.value,h,w)}function y({height:d,width:h}){let w=!1;i.vertical.value!==d&&(i.vertical.value=d,w=!0),i.horizontal.value!==h&&(i.horizontal.value=h,w=!0),w===!0&&C()}function b({position:d}){let h=!1;r.vertical.position.value!==d.top&&(r.vertical.position.value=d.top,h=!0),r.horizontal.position.value!==d.left&&(r.horizontal.position.value=d.left,h=!0),h===!0&&C()}function L({height:d,width:h}){r.horizontal.size.value!==h&&(r.horizontal.size.value=h,C()),r.vertical.size.value!==d&&(r.vertical.size.value=d,C())}function S(d,h){const w=r[h];if(d.isFirst===!0){if(w.thumbHidden.value===!0)return;g=w.position.value,l.value=!0}else if(l.value!==!0)return;d.isFinal===!0&&(l.value=!1);const D=Ce[h],j=(w.size.value-i[h].value)/(i[h+"Inner"].value-w.thumbSize.value),X=d.distance[D.dist],Y=g+(d.direction===D.dir?1:-1)*X*j;M(Y,h)}function W(d,h){const w=r[h];if(w.thumbHidden.value!==!0){const D=h==="vertical"?e.verticalOffset[0]:e.horizontalOffset[0],j=d[Ce[h].offset]-D,X=w.thumbStart.value-D;if(jX+w.thumbSize.value){const Y=j-w.thumbSize.value/2,be=Z(Y/(i[h+"Inner"].value-w.thumbSize.value),0,1);M(be*Math.max(0,w.size.value-i[h].value),h)}w.ref.value!==null&&w.ref.value.dispatchEvent(new MouseEvent(d.type,d))}}function C(){o.value=!0,f!==null&&clearTimeout(f),f=setTimeout(()=>{f=null,o.value=!1},e.delay),e.onScroll!==void 0&&P()}function M(d,h){p.value[Ce[h].scroll]=d}let E=null;function oe(){E!==null&&clearTimeout(E),E=setTimeout(()=>{E=null,a.value=!0},s.$q.platform.is.ios?50:0)}function ie(){E!==null&&(clearTimeout(E),E=null),a.value=!1}let N=null;B(()=>s.$q.lang.rtl,d=>{p.value!==null&&Te(p.value,Math.abs(r.horizontal.position.value)*(d===!0?-1:1))}),Be(()=>{N={top:r.vertical.position.value,left:r.horizontal.position.value}}),Wt(()=>{if(N===null)return;const d=p.value;d!==null&&(Te(d,N.left),Ne(d,N.top))}),O(P.cancel),Object.assign(s,{getScrollTarget:()=>p.value,getScroll:q,getScrollPosition:()=>({top:r.vertical.position.value,left:r.horizontal.position.value}),getScrollPercentage:()=>({top:r.vertical.percentage.value,left:r.horizontal.percentage.value}),setScrollPosition:$,setScrollPercentage(d,h,w){$(d,h*(r[d].size.value-i[d].value)*(d==="horizontal"&&s.$q.lang.rtl===!0?-1:1),w)}});const ge={scroll:r,thumbVertDir:[[lt,d=>{S(d,"vertical")},void 0,{vertical:!0,...ot}]],thumbHorizDir:[[lt,d=>{S(d,"horizontal")},void 0,{horizontal:!0,...ot}]],onVerticalMousedown(d){W(d,"vertical")},onHorizontalMousedown(d){W(d,"horizontal")}};return()=>z("div",{class:c.value,onMouseenter:oe,onMouseleave:ie},[z("div",{ref:p,class:"q-scrollarea__container scroll relative-position fit hide-scrollbar",tabindex:e.tabindex!==void 0?e.tabindex:void 0},[z("div",{class:"q-scrollarea__content absolute",style:v.value},Dt(t.default,[z(Ie,{debounce:0,onResize:L})])),z(ml,{axis:"both",onScroll:b})]),z(Ie,{debounce:0,onResize:y}),z(vl,{store:ge,barStyle:e.barStyle,verticalBarStyle:e.verticalBarStyle,horizontalBarStyle:e.horizontalBarStyle})])}});function Al(e,t,n){let o;function l(){o!==void 0&&(Qe.remove(o),o=void 0)}return O(()=>{e.value===!0&&l()}),{removeFromHistory:l,addToHistory(){o={condition:()=>n.value===!0,handler:t},Qe.add(o)}}}let ee=0,xe,Pe,te,He=!1,rt,at,st,F=null;function yl(e){wl(e)&&ve(e)}function wl(e){if(e.target===document.body||e.target.classList.contains("q-layout__backdrop"))return!0;const t=Vt(e),n=e.shiftKey&&!e.deltaX,o=!n&&Math.abs(e.deltaX)<=Math.abs(e.deltaY),l=n||o?e.deltaY:e.deltaX;for(let a=0;a0&&i.scrollTop+i.clientHeight===i.scrollHeight:l<0&&i.scrollLeft===0?!0:l>0&&i.scrollLeft+i.clientWidth===i.scrollWidth}return!0}function ut(e){e.target===document&&(document.scrollingElement.scrollTop=document.scrollingElement.scrollTop)}function ae(e){He!==!0&&(He=!0,requestAnimationFrame(()=>{He=!1;const{height:t}=e.target,{clientHeight:n,scrollTop:o}=document.scrollingElement;(te===void 0||t!==window.innerHeight)&&(te=n-t,document.scrollingElement.scrollTop=o),o>te&&(document.scrollingElement.scrollTop-=Math.ceil((o-te)/8))}))}function ct(e){const t=document.body,n=window.visualViewport!==void 0;if(e==="add"){const{overflowY:o,overflowX:l}=window.getComputedStyle(t);xe=Ae(window),Pe=Oe(window),rt=t.style.left,at=t.style.top,st=window.location.href,t.style.left=`-${xe}px`,t.style.top=`-${Pe}px`,l!=="hidden"&&(l==="scroll"||t.scrollWidth>window.innerWidth)&&t.classList.add("q-body--force-scrollbar-x"),o!=="hidden"&&(o==="scroll"||t.scrollHeight>window.innerHeight)&&t.classList.add("q-body--force-scrollbar-y"),t.classList.add("q-body--prevent-scroll"),document.qScrollPrevented=!0,_.is.ios===!0&&(n===!0?(window.scrollTo(0,0),window.visualViewport.addEventListener("resize",ae,H.passiveCapture),window.visualViewport.addEventListener("scroll",ae,H.passiveCapture),window.scrollTo(0,0)):window.addEventListener("scroll",ut,H.passiveCapture))}_.is.desktop===!0&&_.is.mac===!0&&window[`${e}EventListener`]("wheel",yl,H.notPassive),e==="remove"&&(_.is.ios===!0&&(n===!0?(window.visualViewport.removeEventListener("resize",ae,H.passiveCapture),window.visualViewport.removeEventListener("scroll",ae,H.passiveCapture)):window.removeEventListener("scroll",ut,H.passiveCapture)),t.classList.remove("q-body--prevent-scroll"),t.classList.remove("q-body--force-scrollbar-x"),t.classList.remove("q-body--force-scrollbar-y"),document.qScrollPrevented=!1,t.style.left=rt,t.style.top=at,window.location.href===st&&window.scrollTo(xe,Pe),te=void 0)}function Sl(e){let t="add";if(e===!0){if(ee++,F!==null){clearTimeout(F),F=null;return}if(ee>1)return}else{if(ee===0||(ee--,ee>0))return;if(t="remove",_.is.ios===!0&&_.is.nativeMobile===!0){F!==null&&clearTimeout(F),F=setTimeout(()=>{ct(t),F=null},100);return}}ct(t)}function Wl(){let e;return{preventBodyScroll(t){t!==e&&(e!==void 0||t===!0)&&(e=t,Sl(t))}}}function Dl(){return jt(Qt)}export{el as A,Pl as B,Ll as C,Ml as D,Hl as E,gt as F,bt as G,xl as H,Ue as I,sl as J,Nt as K,Rt as L,Xe as M,wt as N,Ge as O,Gt as P,Ie as Q,al as R,Bl as S,lt as T,he as a,Yt as b,me as c,nl as d,Kt as e,Al as f,Z as g,Wl as h,il as i,ml as j,Dl as k,Ol as l,$l as m,ql as n,Tl as o,El as p,Cl as q,kl as r,_l as s,ll as t,Xt as u,et as v,tt as w,ce as x,ze as y,tl as z}; diff --git a/packages/modules/web_themes/koala/web/assets/use-quasar-uR0IoSjA.js b/packages/modules/web_themes/koala/web/assets/use-quasar-uR0IoSjA.js new file mode 100644 index 0000000000..fe9e14882f --- /dev/null +++ b/packages/modules/web_themes/koala/web/assets/use-quasar-uR0IoSjA.js @@ -0,0 +1 @@ +import{r as T,s as zt,j as G,c as k,o as O,O as $e,n as J,h as z,g as A,aq as H,a as m,d as ne,aL as Tt,aM as qt,H as dt,J as ve,f as Et,aH as Ct,an as ue,S as V,w as B,V as K,Z as xt,aN as se,u as Pt,am as Ht,aO as Lt,aP as Mt,aQ as _t,K as Be,aR as ft,aS as kt,aT as Ve,N as _,W as $t,k as je,M as Bt,P as Ot,T as ye,ap as we,U as Le,al as At,L as Wt,v as Dt,a0 as Qe,aU as Vt,i as jt,aV as Qt}from"./index-EKspHiQe.js";function Ft(){const e=T(!zt.value);return e.value===!1&&G(()=>{e.value=!0}),{isHydrated:e}}const vt=typeof ResizeObserver<"u",Fe=vt===!0?{}:{style:"display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;",url:"about:blank"},Ie=k({name:"QResizeObserver",props:{debounce:{type:[String,Number],default:100}},emits:["resize"],setup(e,{emit:t}){let n=null,o,l={width:-1,height:-1};function a(s){s===!0||e.debounce===0||e.debounce==="0"?i():n===null&&(n=setTimeout(i,e.debounce))}function i(){if(n!==null&&(clearTimeout(n),n=null),o){const{offsetWidth:s,offsetHeight:u}=o;(s!==l.width||u!==l.height)&&(l={width:s,height:u},t("resize",l))}}const{proxy:r}=A();if(r.trigger=a,vt===!0){let s;const u=f=>{o=r.$el.parentNode,o?(s=new ResizeObserver(a),s.observe(o),i()):f!==!0&&J(()=>{u(!0)})};return G(()=>{u()}),O(()=>{n!==null&&clearTimeout(n),s!==void 0&&(s.disconnect!==void 0?s.disconnect():o&&s.unobserve(o))}),$e}else{let s=function(){n!==null&&(clearTimeout(n),n=null),g!==void 0&&(g.removeEventListener!==void 0&&g.removeEventListener("resize",a,H.passive),g=void 0)},u=function(){s(),o&&o.contentDocument&&(g=o.contentDocument.defaultView,g.addEventListener("resize",a,H.passive),i())};const{isHydrated:f}=Ft();let g;return G(()=>{J(()=>{o=r.$el,o&&u()})}),O(s),()=>{if(f.value===!0)return z("object",{class:"q--avoid-card-border",style:Fe.style,tabindex:-1,type:"text/html",data:Fe.url,"aria-hidden":"true",onLoad:u})}}}}),Tl=k({name:"QItemSection",props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},setup(e,{slots:t}){const n=m(()=>`q-item__section column q-item__section--${e.avatar===!0||e.side===!0||e.thumbnail===!0?"side":"main"}`+(e.top===!0?" q-item__section--top justify-start":" justify-center")+(e.avatar===!0?" q-item__section--avatar":"")+(e.thumbnail===!0?" q-item__section--thumbnail":"")+(e.noWrap===!0?" q-item__section--nowrap":""));return()=>z("div",{class:n.value},ne(t.default))}}),he={dark:{type:Boolean,default:null}};function me(e,t){return m(()=>e.dark===null?t.dark.isActive:e.dark)}const ql=k({name:"QItem",props:{...he,...Tt,tag:{type:String,default:"div"},active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean},emits:["click","keyup"],setup(e,{slots:t,emit:n}){const{proxy:{$q:o}}=A(),l=me(e,o),{hasLink:a,linkAttrs:i,linkClass:r,linkTag:s,navigateOnClick:u}=qt(),f=T(null),g=T(null),p=m(()=>e.clickable===!0||a.value===!0||e.tag==="label"),c=m(()=>e.disable!==!0&&p.value===!0),v=m(()=>"q-item q-item-type row no-wrap"+(e.dense===!0?" q-item--dense":"")+(l.value===!0?" q-item--dark":"")+(a.value===!0&&e.active===null?r.value:e.active===!0?` q-item--active${e.activeClass!==void 0?` ${e.activeClass}`:""}`:"")+(e.disable===!0?" disabled":"")+(c.value===!0?" q-item--clickable q-link cursor-pointer "+(e.manualFocus===!0?"q-manual-focusable":"q-focusable q-hoverable")+(e.focused===!0?" q-manual-focusable--focused":""):"")),q=m(()=>e.insetLevel===void 0?null:{["padding"+(o.lang.rtl===!0?"Right":"Left")]:16+e.insetLevel*56+"px"});function P(b){c.value===!0&&(g.value!==null&&(b.qKeyEvent!==!0&&document.activeElement===f.value?g.value.focus():document.activeElement===g.value&&f.value.focus()),u(b))}function $(b){if(c.value===!0&&dt(b,[13,32])===!0){ve(b),b.qKeyEvent=!0;const L=new MouseEvent("click",b);L.qKeyEvent=!0,f.value.dispatchEvent(L)}n("keyup",b)}function y(){const b=Et(t.default,[]);return c.value===!0&&b.unshift(z("div",{class:"q-focus-helper",tabindex:-1,ref:g})),b}return()=>{const b={ref:f,class:v.value,style:q.value,role:"listitem",onClick:P,onKeyup:$};return c.value===!0?(b.tabindex=e.tabindex||"0",Object.assign(b,i.value)):p.value===!0&&(b["aria-disabled"]="true"),z(s.value,b,y())}}}),It={true:"inset",item:"item-inset","item-thumbnail":"item-thumbnail-inset"},Se={xs:2,sm:4,md:8,lg:16,xl:24},El=k({name:"QSeparator",props:{...he,spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},setup(e){const t=A(),n=me(e,t.proxy.$q),o=m(()=>e.vertical===!0?"vertical":"horizontal"),l=m(()=>` q-separator--${o.value}`),a=m(()=>e.inset!==!1?`${l.value}-${It[e.inset]}`:""),i=m(()=>`q-separator${l.value}${a.value}`+(e.color!==void 0?` bg-${e.color}`:"")+(n.value===!0?" q-separator--dark":"")),r=m(()=>{const s={};if(e.size!==void 0&&(s[e.vertical===!0?"width":"height"]=e.size),e.spaced!==!1){const u=e.spaced===!0?`${Se.md}px`:e.spaced in Se?`${Se[e.spaced]}px`:e.spaced,f=e.vertical===!0?["Left","Right"]:["Top","Bottom"];s[`margin${f[0]}`]=s[`margin${f[1]}`]=u}return s});return()=>z("hr",{class:i.value,style:r.value,"aria-orientation":o.value})}}),Cl=k({name:"QItemLabel",props:{overline:Boolean,caption:Boolean,header:Boolean,lines:[Number,String]},setup(e,{slots:t}){const n=m(()=>parseInt(e.lines,10)),o=m(()=>"q-item__label"+(e.overline===!0?" q-item__label--overline text-overline":"")+(e.caption===!0?" q-item__label--caption text-caption":"")+(e.header===!0?" q-item__label--header":"")+(n.value===1?" ellipsis":"")),l=m(()=>e.lines!==void 0&&n.value>1?{overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":n.value}:null);return()=>z("div",{style:l.value,class:o.value},ne(t.default))}});function ce(){if(window.getSelection!==void 0){const e=window.getSelection();e.empty!==void 0?e.empty():e.removeAllRanges!==void 0&&(e.removeAllRanges(),Ct.is.mobile!==!0&&e.addRange(document.createRange()))}else document.selection!==void 0&&document.selection.empty()}const ht={target:{type:[Boolean,String,Element],default:!0},noParentEvent:Boolean},xl={...ht,contextMenu:Boolean};function Rt({showing:e,avoidEmit:t,configureAnchorEl:n}){const{props:o,proxy:l,emit:a}=A(),i=T(null);let r=null;function s(c){return i.value===null?!1:c===void 0||c.touches===void 0||c.touches.length<=1}const u={};n===void 0&&(Object.assign(u,{hide(c){l.hide(c)},toggle(c){l.toggle(c),c.qAnchorHandled=!0},toggleKey(c){dt(c,13)===!0&&u.toggle(c)},contextClick(c){l.hide(c),ue(c),J(()=>{l.show(c),c.qAnchorHandled=!0})},prevent:ue,mobileTouch(c){if(u.mobileCleanup(c),s(c)!==!0)return;l.hide(c),i.value.classList.add("non-selectable");const v=c.target;V(u,"anchor",[[v,"touchmove","mobileCleanup","passive"],[v,"touchend","mobileCleanup","passive"],[v,"touchcancel","mobileCleanup","passive"],[i.value,"contextmenu","prevent","notPassive"]]),r=setTimeout(()=>{r=null,l.show(c),c.qAnchorHandled=!0},300)},mobileCleanup(c){i.value.classList.remove("non-selectable"),r!==null&&(clearTimeout(r),r=null),e.value===!0&&c!==void 0&&ce()}}),n=function(c=o.contextMenu){if(o.noParentEvent===!0||i.value===null)return;let v;c===!0?l.$q.platform.is.mobile===!0?v=[[i.value,"touchstart","mobileTouch","passive"]]:v=[[i.value,"mousedown","hide","passive"],[i.value,"contextmenu","contextClick","notPassive"]]:v=[[i.value,"click","toggle","passive"],[i.value,"keyup","toggleKey","passive"]],V(u,"anchor",v)});function f(){K(u,"anchor")}function g(c){for(i.value=c;i.value.classList.contains("q-anchor--skip");)i.value=i.value.parentNode;n()}function p(){if(o.target===!1||o.target===""||l.$el.parentNode===null)i.value=null;else if(o.target===!0)g(l.$el.parentNode);else{let c=o.target;if(typeof o.target=="string")try{c=document.querySelector(o.target)}catch{c=void 0}c!=null?(i.value=c.$el||c,n()):(i.value=null,console.error(`Anchor: target "${o.target}" not found`))}}return B(()=>o.contextMenu,c=>{i.value!==null&&(f(),n(c))}),B(()=>o.target,()=>{i.value!==null&&f(),p()}),B(()=>o.noParentEvent,c=>{i.value!==null&&(c===!0?f():n())}),G(()=>{p(),t!==!0&&o.modelValue===!0&&i.value===null&&a("update:modelValue",!1)}),O(()=>{r!==null&&clearTimeout(r),f()}),{anchorEl:i,canShow:s,anchorEvents:u}}function Nt(e,t){const n=T(null);let o;function l(r,s){const u=`${s!==void 0?"add":"remove"}EventListener`,f=s!==void 0?s:o;r!==window&&r[u]("scroll",f,H.passive),window[u]("scroll",f,H.passive),o=s}function a(){n.value!==null&&(l(n.value),n.value=null)}const i=B(()=>e.noParentEvent,()=>{n.value!==null&&(a(),t())});return O(i),{localScrollTarget:n,unconfigureScrollTarget:a,changeScrollEvent:l}}const Xt={modelValue:{type:Boolean,default:null},"onUpdate:modelValue":[Function,Array]},Yt=["beforeShow","show","beforeHide","hide"];function Kt({showing:e,canShow:t,hideOnRouteChange:n,handleShow:o,handleHide:l,processOnMount:a}){const i=A(),{props:r,emit:s,proxy:u}=i;let f;function g(y){e.value===!0?v(y):p(y)}function p(y){if(r.disable===!0||y!==void 0&&y.qAnchorHandled===!0||t!==void 0&&t(y)!==!0)return;const b=r["onUpdate:modelValue"]!==void 0;b===!0&&(s("update:modelValue",!0),f=y,J(()=>{f===y&&(f=void 0)})),(r.modelValue===null||b===!1)&&c(y)}function c(y){e.value!==!0&&(e.value=!0,s("beforeShow",y),o!==void 0?o(y):s("show",y))}function v(y){if(r.disable===!0)return;const b=r["onUpdate:modelValue"]!==void 0;b===!0&&(s("update:modelValue",!1),f=y,J(()=>{f===y&&(f=void 0)})),(r.modelValue===null||b===!1)&&q(y)}function q(y){e.value!==!1&&(e.value=!1,s("beforeHide",y),l!==void 0?l(y):s("hide",y))}function P(y){r.disable===!0&&y===!0?r["onUpdate:modelValue"]!==void 0&&s("update:modelValue",!1):y===!0!==e.value&&(y===!0?c:q)(f)}B(()=>r.modelValue,P),n!==void 0&&xt(i)===!0&&B(()=>u.$route.fullPath,()=>{n.value===!0&&e.value===!0&&v()}),a===!0&&G(()=>{P(r.modelValue)});const $={show:p,hide:v,toggle:g};return Object.assign(u,$),$}let I=[],le=[];function mt(e){le=le.filter(t=>t!==e)}function Ut(e){mt(e),le.push(e)}function Re(e){mt(e),le.length===0&&I.length!==0&&(I[I.length-1](),I=[])}function Pl(e){le.length===0?e():I.push(e)}function Hl(e){I=I.filter(t=>t!==e)}const U=[];function Ll(e){return U.find(t=>t.contentEl!==null&&t.contentEl.contains(e))}function Gt(e,t){do{if(e.$options.name==="QMenu"){if(e.hide(t),e.$props.separateClosePopup===!0)return se(e)}else if(e.__qPortal===!0){const n=se(e);return n!==void 0&&n.$options.name==="QPopupProxy"?(e.hide(t),n):e}e=se(e)}while(e!=null)}function Ml(e,t,n){for(;n!==0&&e!==void 0&&e!==null;){if(e.__qPortal===!0){if(n--,e.$options.name==="QMenu"){e=Gt(e,t);continue}e.hide(t)}e=se(e)}}const Jt=k({name:"QPortal",setup(e,{slots:t}){return()=>t.default()}});function Zt(e){for(e=e.parent;e!=null;){if(e.type.name==="QGlobalDialog")return!0;if(e.type.name==="QDialog"||e.type.name==="QMenu")return!1;e=e.parent}return!1}function el(e,t,n,o){const l=T(!1),a=T(!1);let i=null;const r={},s=o==="dialog"&&Zt(e);function u(g){if(g===!0){Re(r),a.value=!0;return}a.value=!1,l.value===!1&&(s===!1&&i===null&&(i=Mt(!1,o)),l.value=!0,U.push(e.proxy),Ut(r))}function f(g){if(a.value=!1,g!==!0)return;Re(r),l.value=!1;const p=U.indexOf(e.proxy);p!==-1&&U.splice(p,1),i!==null&&(_t(i),i=null)}return Pt(()=>{f(!0)}),e.proxy.__qPortal=!0,Ht(e.proxy,"contentEl",()=>t.value),{showPortal:u,hidePortal:f,portalIsActive:l,portalIsAccessible:a,renderPortal:()=>s===!0?n():l.value===!0?[z(Lt,{to:i},z(Jt,n))]:void 0}}const ze={transitionShow:{type:String,default:"fade"},transitionHide:{type:String,default:"fade"},transitionDuration:{type:[String,Number],default:300}};function tl(e,t=()=>{},n=()=>{}){return{transitionProps:m(()=>{const o=`q-transition--${e.transitionShow||t()}`,l=`q-transition--${e.transitionHide||n()}`;return{appear:!0,enterFromClass:`${o}-enter-from`,enterActiveClass:`${o}-enter-active`,enterToClass:`${o}-enter-to`,leaveFromClass:`${l}-leave-from`,leaveActiveClass:`${l}-leave-active`,leaveToClass:`${l}-leave-to`}}),transitionStyle:m(()=>`--q-transition-duration: ${e.transitionDuration}ms`)}}function ll(){let e;const t=A();function n(){e=void 0}return Be(n),O(n),{removeTick:n,registerTick(o){e=o,J(()=>{e===o&&(ft(t)===!1&&e(),e=void 0)})}}}function nl(){let e=null;const t=A();function n(){e!==null&&(clearTimeout(e),e=null)}return Be(n),O(n),{removeTimeout:n,registerTimeout(o,l){n(),ft(t)===!1&&(e=setTimeout(()=>{e=null,o()},l))}}}const gt=[Element,String],ol=[null,document,document.body,document.scrollingElement,document.documentElement];function bt(e,t){let n=kt(t);if(n===void 0){if(e==null)return window;n=e.closest(".scroll,.scroll-y,.overflow-auto")}return ol.includes(n)?window:n}function Oe(e){return e===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:e.scrollTop}function Ae(e){return e===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:e.scrollLeft}function pt(e,t,n=0){const o=arguments[3]===void 0?performance.now():arguments[3],l=Oe(e);if(n<=0){l!==t&&Me(e,t);return}requestAnimationFrame(a=>{const i=a-o,r=l+(t-l)/Math.max(i,n)*i;Me(e,r),r!==t&&pt(e,t,n-i,a)})}function yt(e,t,n=0){const o=arguments[3]===void 0?performance.now():arguments[3],l=Ae(e);if(n<=0){l!==t&&_e(e,t);return}requestAnimationFrame(a=>{const i=a-o,r=l+(t-l)/Math.max(i,n)*i;_e(e,r),r!==t&&yt(e,t,n-i,a)})}function Me(e,t){if(e===window){window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,t);return}e.scrollTop=t}function _e(e,t){if(e===window){window.scrollTo(t,window.pageYOffset||window.scrollY||document.body.scrollTop||0);return}e.scrollLeft=t}function Ne(e,t,n){if(n){pt(e,t,n);return}Me(e,t)}function Te(e,t,n){if(n){yt(e,t,n);return}_e(e,t)}let re;function il(){if(re!==void 0)return re;const e=document.createElement("p"),t=document.createElement("div");Ve(e,{width:"100%",height:"200px"}),Ve(t,{position:"absolute",top:"0px",left:"0px",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),t.appendChild(e),document.body.appendChild(t);const n=e.offsetWidth;t.style.overflow="scroll";let o=e.offsetWidth;return n===o&&(o=t.clientWidth),t.remove(),re=n-o,re}function rl(e,t=!0){return!e||e.nodeType!==Node.ELEMENT_NODE?!1:t?e.scrollHeight>e.clientHeight&&(e.classList.contains("scroll")||e.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(e)["overflow-y"])):e.scrollWidth>e.clientWidth&&(e.classList.contains("scroll")||e.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(e)["overflow-x"]))}const{notPassiveCapture:de}=H,R=[];function fe(e){const t=e.target;if(t===void 0||t.nodeType===8||t.classList.contains("no-pointer-events")===!0)return;let n=U.length-1;for(;n>=0;){const o=U[n].$;if(o.type.name==="QTooltip"){n--;continue}if(o.type.name!=="QDialog")break;if(o.props.seamless!==!0)return;n--}for(let o=R.length-1;o>=0;o--){const l=R[o];if((l.anchorEl.value===null||l.anchorEl.value.contains(t)===!1)&&(t===document.body||l.innerRef.value!==null&&l.innerRef.value.contains(t)===!1))e.qClickOutside=!0,l.onClickOutside(e);else return}}function al(e){R.push(e),R.length===1&&(document.addEventListener("mousedown",fe,de),document.addEventListener("touchstart",fe,de))}function Xe(e){const t=R.findIndex(n=>n===e);t!==-1&&(R.splice(t,1),R.length===0&&(document.removeEventListener("mousedown",fe,de),document.removeEventListener("touchstart",fe,de)))}let Ye,Ke;function Ue(e){const t=e.split(" ");return t.length!==2?!1:["top","center","bottom"].includes(t[0])!==!0?(console.error("Anchor/Self position must start with one of top/center/bottom"),!1):["left","middle","right","start","end"].includes(t[1])!==!0?(console.error("Anchor/Self position must end with one of left/middle/right/start/end"),!1):!0}function sl(e){return e?!(e.length!==2||typeof e[0]!="number"||typeof e[1]!="number"):!0}const ke={"start#ltr":"left","start#rtl":"right","end#ltr":"right","end#rtl":"left"};["left","middle","right"].forEach(e=>{ke[`${e}#ltr`]=e,ke[`${e}#rtl`]=e});function Ge(e,t){const n=e.split(" ");return{vertical:n[0],horizontal:ke[`${n[1]}#${t===!0?"rtl":"ltr"}`]}}function ul(e,t){let{top:n,left:o,right:l,bottom:a,width:i,height:r}=e.getBoundingClientRect();return t!==void 0&&(n-=t[1],o-=t[0],a+=t[1],l+=t[0],i+=t[0],r+=t[1]),{top:n,bottom:a,height:r,left:o,right:l,width:i,middle:o+(l-o)/2,center:n+(a-n)/2}}function cl(e,t,n){let{top:o,left:l}=e.getBoundingClientRect();return o+=t.top,l+=t.left,n!==void 0&&(o+=n[1],l+=n[0]),{top:o,bottom:o+1,height:1,left:l,right:l+1,width:1,middle:l,center:o}}function dl(e,t){return{top:0,center:t/2,bottom:t,left:0,middle:e/2,right:e}}function Je(e,t,n,o){return{top:e[n.vertical]-t[o.vertical],left:e[n.horizontal]-t[o.horizontal]}}function wt(e,t=0){if(e.targetEl===null||e.anchorEl===null||t>5)return;if(e.targetEl.offsetHeight===0||e.targetEl.offsetWidth===0){setTimeout(()=>{wt(e,t+1)},10);return}const{targetEl:n,offset:o,anchorEl:l,anchorOrigin:a,selfOrigin:i,absoluteOffset:r,fit:s,cover:u,maxHeight:f,maxWidth:g}=e;if(_.is.ios===!0&&window.visualViewport!==void 0){const W=document.body.style,{offsetLeft:C,offsetTop:M}=window.visualViewport;C!==Ye&&(W.setProperty("--q-pe-left",C+"px"),Ye=C),M!==Ke&&(W.setProperty("--q-pe-top",M+"px"),Ke=M)}const{scrollLeft:p,scrollTop:c}=n,v=r===void 0?ul(l,u===!0?[0,0]:o):cl(l,r,o);Object.assign(n.style,{top:0,left:0,minWidth:null,minHeight:null,maxWidth:g,maxHeight:f,visibility:"visible"});const{offsetWidth:q,offsetHeight:P}=n,{elWidth:$,elHeight:y}=s===!0||u===!0?{elWidth:Math.max(v.width,q),elHeight:u===!0?Math.max(v.height,P):P}:{elWidth:q,elHeight:P};let b={maxWidth:g,maxHeight:f};(s===!0||u===!0)&&(b.minWidth=v.width+"px",u===!0&&(b.minHeight=v.height+"px")),Object.assign(n.style,b);const L=dl($,y);let S=Je(v,L,a,i);if(r===void 0||o===void 0)qe(S,v,L,a,i);else{const{top:W,left:C}=S;qe(S,v,L,a,i);let M=!1;if(S.top!==W){M=!0;const E=2*o[1];v.center=v.top-=E,v.bottom-=E+2}if(S.left!==C){M=!0;const E=2*o[0];v.middle=v.left-=E,v.right-=E+2}M===!0&&(S=Je(v,L,a,i),qe(S,v,L,a,i))}b={top:S.top+"px",left:S.left+"px"},S.maxHeight!==void 0&&(b.maxHeight=S.maxHeight+"px",v.height>S.maxHeight&&(b.minHeight=b.maxHeight)),S.maxWidth!==void 0&&(b.maxWidth=S.maxWidth+"px",v.width>S.maxWidth&&(b.minWidth=b.maxWidth)),Object.assign(n.style,b),n.scrollTop!==c&&(n.scrollTop=c),n.scrollLeft!==p&&(n.scrollLeft=p)}function qe(e,t,n,o,l){const a=n.bottom,i=n.right,r=il(),s=window.innerHeight-r,u=document.body.clientWidth;if(e.top<0||e.top+a>s)if(l.vertical==="center")e.top=t[o.vertical]>s/2?Math.max(0,s-a):0,e.maxHeight=Math.min(a,s);else if(t[o.vertical]>s/2){const f=Math.min(s,o.vertical==="center"?t.center:o.vertical===l.vertical?t.bottom:t.top);e.maxHeight=Math.min(a,f),e.top=Math.max(0,f-a)}else e.top=Math.max(0,o.vertical==="center"?t.center:o.vertical===l.vertical?t.top:t.bottom),e.maxHeight=Math.min(a,s-e.top);if(e.left<0||e.left+i>u)if(e.maxWidth=Math.min(i,u),l.horizontal==="middle")e.left=t[o.horizontal]>u/2?Math.max(0,u-i):0;else if(t[o.horizontal]>u/2){const f=Math.min(u,o.horizontal==="middle"?t.middle:o.horizontal===l.horizontal?t.right:t.left);e.maxWidth=Math.min(i,f),e.left=Math.max(0,f-e.maxWidth)}else e.left=Math.max(0,o.horizontal==="middle"?t.middle:o.horizontal===l.horizontal?t.left:t.right),e.maxWidth=Math.min(i,u-e.left)}const _l=k({name:"QTooltip",inheritAttrs:!1,props:{...ht,...Xt,...ze,maxHeight:{type:String,default:null},maxWidth:{type:String,default:null},transitionShow:{...ze.transitionShow,default:"jump-down"},transitionHide:{...ze.transitionHide,default:"jump-up"},anchor:{type:String,default:"bottom middle",validator:Ue},self:{type:String,default:"top middle",validator:Ue},offset:{type:Array,default:()=>[14,14],validator:sl},scrollTarget:gt,delay:{type:Number,default:0},hideDelay:{type:Number,default:0},persistent:Boolean},emits:[...Yt],setup(e,{slots:t,emit:n,attrs:o}){let l,a;const i=A(),{proxy:{$q:r}}=i,s=T(null),u=T(!1),f=m(()=>Ge(e.anchor,r.lang.rtl)),g=m(()=>Ge(e.self,r.lang.rtl)),p=m(()=>e.persistent!==!0),{registerTick:c,removeTick:v}=ll(),{registerTimeout:q}=nl(),{transitionProps:P,transitionStyle:$}=tl(e),{localScrollTarget:y,changeScrollEvent:b,unconfigureScrollTarget:L}=Nt(e,Y),{anchorEl:S,canShow:W,anchorEvents:C}=Rt({showing:u,configureAnchorEl:X}),{show:M,hide:E}=Kt({showing:u,canShow:W,handleShow:ge,handleHide:d,hideOnRouteChange:p,processOnMount:!0});Object.assign(C,{delayShow:D,delayHide:j});const{showPortal:oe,hidePortal:ie,renderPortal:N}=el(i,s,St,"tooltip");if(r.platform.is.mobile===!0){const x={anchorEl:S,innerRef:s,onClickOutside(Q){return E(Q),Q.target.classList.contains("q-dialog__backdrop")&&ve(Q),!0}},pe=m(()=>e.modelValue===null&&e.persistent!==!0&&u.value===!0);B(pe,Q=>{(Q===!0?al:Xe)(x)}),O(()=>{Xe(x)})}function ge(x){oe(),c(()=>{a=new MutationObserver(()=>w()),a.observe(s.value,{attributes:!1,childList:!0,characterData:!0,subtree:!0}),w(),Y()}),l===void 0&&(l=B(()=>r.screen.width+"|"+r.screen.height+"|"+e.self+"|"+e.anchor+"|"+r.lang.rtl,w)),q(()=>{oe(!0),n("show",x)},e.transitionDuration)}function d(x){v(),ie(),h(),q(()=>{ie(!0),n("hide",x)},e.transitionDuration)}function h(){a!==void 0&&(a.disconnect(),a=void 0),l!==void 0&&(l(),l=void 0),L(),K(C,"tooltipTemp")}function w(){wt({targetEl:s.value,offset:e.offset,anchorEl:S.value,anchorOrigin:f.value,selfOrigin:g.value,maxHeight:e.maxHeight,maxWidth:e.maxWidth})}function D(x){if(r.platform.is.mobile===!0){ce(),document.body.classList.add("non-selectable");const pe=S.value,Q=["touchmove","touchcancel","touchend","click"].map(De=>[pe,De,"delayHide","passiveCapture"]);V(C,"tooltipTemp",Q)}q(()=>{M(x)},e.delay)}function j(x){r.platform.is.mobile===!0&&(K(C,"tooltipTemp"),ce(),setTimeout(()=>{document.body.classList.remove("non-selectable")},10)),q(()=>{E(x)},e.hideDelay)}function X(){if(e.noParentEvent===!0||S.value===null)return;const x=r.platform.is.mobile===!0?[[S.value,"touchstart","delayShow","passive"]]:[[S.value,"mouseenter","delayShow","passive"],[S.value,"mouseleave","delayHide","passive"]];V(C,"anchor",x)}function Y(){if(S.value!==null||e.scrollTarget!==void 0){y.value=bt(S.value,e.scrollTarget);const x=e.noParentEvent===!0?w:E;b(y.value,x)}}function be(){return u.value===!0?z("div",{...o,ref:s,class:["q-tooltip q-tooltip--style q-position-engine no-pointer-events",o.class],style:[o.style,$.value],role:"tooltip"},ne(t.default)):null}function St(){return z($t,P.value,be)}return O(h),Object.assign(i.proxy,{updatePosition:w}),N}}),kl=k({name:"QBtnGroup",props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},setup(e,{slots:t}){const n=m(()=>{const o=["unelevated","outline","flat","rounded","square","push","stretch","glossy"].filter(l=>e[l]===!0).map(l=>`q-btn-group--${l}`).join(" ");return`q-btn-group row no-wrap${o.length!==0?" "+o:""}`+(e.spread===!0?" q-btn-group--spread":" inline")});return()=>z("div",{class:n.value},ne(t.default))}}),fl=["ul","ol"],$l=k({name:"QList",props:{...he,bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean,tag:{type:String,default:"div"}},setup(e,{slots:t}){const n=A(),o=me(e,n.proxy.$q),l=m(()=>fl.includes(e.tag)?null:"list"),a=m(()=>"q-list"+(e.bordered===!0?" q-list--bordered":"")+(e.dense===!0?" q-list--dense":"")+(e.separator===!0?" q-list--separator":"")+(o.value===!0?" q-list--dark":"")+(e.padding===!0?" q-list--padding":""));return()=>z(e.tag,{class:a.value,role:l.value},ne(t.default))}}),vl=k({props:["store","barStyle","verticalBarStyle","horizontalBarStyle"],setup(e){return()=>[z("div",{class:e.store.scroll.vertical.barClass.value,style:[e.barStyle,e.verticalBarStyle],"aria-hidden":"true",onMousedown:e.store.onVerticalMousedown}),z("div",{class:e.store.scroll.horizontal.barClass.value,style:[e.barStyle,e.horizontalBarStyle],"aria-hidden":"true",onMousedown:e.store.onHorizontalMousedown}),je(z("div",{ref:e.store.scroll.vertical.ref,class:e.store.scroll.vertical.thumbClass.value,style:e.store.scroll.vertical.style.value,"aria-hidden":"true"}),e.store.thumbVertDir),je(z("div",{ref:e.store.scroll.horizontal.ref,class:e.store.scroll.horizontal.thumbClass.value,style:e.store.scroll.horizontal.style.value,"aria-hidden":"true"}),e.store.thumbHorizDir)]}}),{passive:Ze}=H,hl=["both","horizontal","vertical"],ml=k({name:"QScrollObserver",props:{axis:{type:String,validator:e=>hl.includes(e),default:"vertical"},debounce:[String,Number],scrollTarget:gt},emits:["scroll"],setup(e,{emit:t}){const n={position:{top:0,left:0},direction:"down",directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}};let o=null,l,a;B(()=>e.scrollTarget,()=>{s(),r()});function i(){o!==null&&o();const g=Math.max(0,Oe(l)),p=Ae(l),c={top:g-n.position.top,left:p-n.position.left};if(e.axis==="vertical"&&c.top===0||e.axis==="horizontal"&&c.left===0)return;const v=Math.abs(c.top)>=Math.abs(c.left)?c.top<0?"up":"down":c.left<0?"left":"right";n.position={top:g,left:p},n.directionChanged=n.direction!==v,n.delta=c,n.directionChanged===!0&&(n.direction=v,n.inflectionPoint=n.position),t("scroll",{...n})}function r(){l=bt(a,e.scrollTarget),l.addEventListener("scroll",u,Ze),u(!0)}function s(){l!==void 0&&(l.removeEventListener("scroll",u,Ze),l=void 0)}function u(g){if(g===!0||e.debounce===0||e.debounce==="0")i();else if(o===null){const[p,c]=e.debounce?[setTimeout(i,e.debounce),clearTimeout]:[requestAnimationFrame(i),cancelAnimationFrame];o=()=>{c(p),o=null}}}const{proxy:f}=A();return B(()=>f.$q.lang.rtl,i),G(()=>{a=f.$el.parentNode,r()}),O(()=>{o!==null&&o(),s()}),Object.assign(f,{trigger:u,getPosition:()=>n}),$e}}),We={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0},gl=Object.keys(We);We.all=!0;function et(e){const t={};for(const n of gl)e[n]===!0&&(t[n]=!0);return Object.keys(t).length===0?We:(t.horizontal===!0?t.left=t.right=!0:t.left===!0&&t.right===!0&&(t.horizontal=!0),t.vertical===!0?t.up=t.down=!0:t.up===!0&&t.down===!0&&(t.vertical=!0),t.horizontal===!0&&t.vertical===!0&&(t.all=!0),t)}const bl=["INPUT","TEXTAREA"];function tt(e,t){return t.event===void 0&&e.target!==void 0&&e.target.draggable!==!0&&typeof t.handler=="function"&&bl.includes(e.target.nodeName.toUpperCase())===!1&&(e.qClonedBy===void 0||e.qClonedBy.indexOf(t.uid)===-1)}function Ee(e,t,n){const o=Le(e);let l,a=o.left-t.event.x,i=o.top-t.event.y,r=Math.abs(a),s=Math.abs(i);const u=t.direction;u.horizontal===!0&&u.vertical!==!0?l=a<0?"left":"right":u.horizontal!==!0&&u.vertical===!0?l=i<0?"up":"down":u.up===!0&&i<0?(l="up",r>s&&(u.left===!0&&a<0?l="left":u.right===!0&&a>0&&(l="right"))):u.down===!0&&i>0?(l="down",r>s&&(u.left===!0&&a<0?l="left":u.right===!0&&a>0&&(l="right"))):u.left===!0&&a<0?(l="left",r0&&(l="down"))):u.right===!0&&a>0&&(l="right",r0&&(l="down")));let f=!1;if(l===void 0&&n===!1){if(t.event.isFirst===!0||t.event.lastDir===void 0)return{};l=t.event.lastDir,f=!0,l==="left"||l==="right"?(o.left-=a,r=0,a=0):(o.top-=i,s=0,i=0)}return{synthetic:f,payload:{evt:e,touch:t.event.mouse!==!0,mouse:t.event.mouse===!0,position:o,direction:l,isFirst:t.event.isFirst,isFinal:n===!0,duration:Date.now()-t.event.time,distance:{x:r,y:s},offset:{x:a,y:i},delta:{x:o.left-t.event.lastX,y:o.top-t.event.lastY}}}}let pl=0;const lt=Bt({name:"touch-pan",beforeMount(e,{value:t,modifiers:n}){if(n.mouse!==!0&&_.has.touch!==!0)return;function o(a,i){n.mouse===!0&&i===!0?ve(a):(n.stop===!0&&we(a),n.prevent===!0&&ue(a))}const l={uid:"qvtp_"+pl++,handler:t,modifiers:n,direction:et(n),noop:$e,mouseStart(a){tt(a,l)&&Ot(a)&&(V(l,"temp",[[document,"mousemove","move","notPassiveCapture"],[document,"mouseup","end","passiveCapture"]]),l.start(a,!0))},touchStart(a){if(tt(a,l)){const i=a.target;V(l,"temp",[[i,"touchmove","move","notPassiveCapture"],[i,"touchcancel","end","passiveCapture"],[i,"touchend","end","passiveCapture"]]),l.start(a)}},start(a,i){if(_.is.firefox===!0&&ye(e,!0),l.lastEvt=a,i===!0||n.stop===!0){if(l.direction.all!==!0&&(i!==!0||l.modifiers.mouseAllDir!==!0&&l.modifiers.mousealldir!==!0)){const u=a.type.indexOf("mouse")!==-1?new MouseEvent(a.type,a):new TouchEvent(a.type,a);a.defaultPrevented===!0&&ue(u),a.cancelBubble===!0&&we(u),Object.assign(u,{qKeyEvent:a.qKeyEvent,qClickOutside:a.qClickOutside,qAnchorHandled:a.qAnchorHandled,qClonedBy:a.qClonedBy===void 0?[l.uid]:a.qClonedBy.concat(l.uid)}),l.initialEvent={target:a.target,event:u}}we(a)}const{left:r,top:s}=Le(a);l.event={x:r,y:s,time:Date.now(),mouse:i===!0,detected:!1,isFirst:!0,isFinal:!1,lastX:r,lastY:s}},move(a){if(l.event===void 0)return;const i=Le(a),r=i.left-l.event.x,s=i.top-l.event.y;if(r===0&&s===0)return;l.lastEvt=a;const u=l.event.mouse===!0,f=()=>{o(a,u);let c;n.preserveCursor!==!0&&n.preservecursor!==!0&&(c=document.documentElement.style.cursor||"",document.documentElement.style.cursor="grabbing"),u===!0&&document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),ce(),l.styleCleanup=v=>{if(l.styleCleanup=void 0,c!==void 0&&(document.documentElement.style.cursor=c),document.body.classList.remove("non-selectable"),u===!0){const q=()=>{document.body.classList.remove("no-pointer-events--children")};v!==void 0?setTimeout(()=>{q(),v()},50):q()}else v!==void 0&&v()}};if(l.event.detected===!0){l.event.isFirst!==!0&&o(a,l.event.mouse);const{payload:c,synthetic:v}=Ee(a,l,!1);c!==void 0&&(l.handler(c)===!1?l.end(a):(l.styleCleanup===void 0&&l.event.isFirst===!0&&f(),l.event.lastX=c.position.left,l.event.lastY=c.position.top,l.event.lastDir=v===!0?void 0:c.direction,l.event.isFirst=!1));return}if(l.direction.all===!0||u===!0&&(l.modifiers.mouseAllDir===!0||l.modifiers.mousealldir===!0)){f(),l.event.detected=!0,l.move(a);return}const g=Math.abs(r),p=Math.abs(s);g!==p&&(l.direction.horizontal===!0&&g>p||l.direction.vertical===!0&&g0||l.direction.left===!0&&g>p&&r<0||l.direction.right===!0&&g>p&&r>0?(l.event.detected=!0,l.move(a)):l.end(a,!0))},end(a,i){if(l.event!==void 0){if(K(l,"temp"),_.is.firefox===!0&&ye(e,!1),i===!0)l.styleCleanup!==void 0&&l.styleCleanup(),l.event.detected!==!0&&l.initialEvent!==void 0&&l.initialEvent.target.dispatchEvent(l.initialEvent.event);else if(l.event.detected===!0){l.event.isFirst===!0&&l.handler(Ee(a===void 0?l.lastEvt:a,l).payload);const{payload:r}=Ee(a===void 0?l.lastEvt:a,l,!0),s=()=>{l.handler(r)};l.styleCleanup!==void 0?l.styleCleanup(s):s()}l.event=void 0,l.initialEvent=void 0,l.lastEvt=void 0}}};if(e.__qtouchpan=l,n.mouse===!0){const a=n.mouseCapture===!0||n.mousecapture===!0?"Capture":"";V(l,"main",[[e,"mousedown","mouseStart",`passive${a}`]])}_.has.touch===!0&&V(l,"main",[[e,"touchstart","touchStart",`passive${n.capture===!0?"Capture":""}`],[e,"touchmove","noop","notPassiveCapture"]])},updated(e,t){const n=e.__qtouchpan;n!==void 0&&(t.oldValue!==t.value&&(typeof value!="function"&&n.end(),n.handler=t.value),n.direction=et(t.modifiers))},beforeUnmount(e){const t=e.__qtouchpan;t!==void 0&&(t.event!==void 0&&t.end(),K(t,"main"),K(t,"temp"),_.is.firefox===!0&&ye(e,!1),t.styleCleanup!==void 0&&t.styleCleanup(),delete e.__qtouchpan)}});function Z(e,t,n){return n<=t?t:Math.min(n,Math.max(t,e))}function Bl(e,t,n){if(n<=t)return t;const o=n-t+1;let l=t+(e-t)%o;return le>=250?50:Math.ceil(e/5),Ol=k({name:"QScrollArea",props:{...he,thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],verticalOffset:{type:Array,default:[0,0]},horizontalOffset:{type:Array,default:[0,0]},contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},tabindex:[String,Number],onScroll:Function},setup(e,{slots:t,emit:n}){const o=T(!1),l=T(!1),a=T(!1),i={vertical:T(0),horizontal:T(0)},r={vertical:{ref:T(null),position:T(0),size:T(0)},horizontal:{ref:T(null),position:T(0),size:T(0)}},{proxy:s}=A(),u=me(e,s.$q);let f=null,g;const p=T(null),c=m(()=>"q-scrollarea"+(u.value===!0?" q-scrollarea--dark":""));Object.assign(i,{verticalInner:m(()=>i.vertical.value-e.verticalOffset[0]-e.verticalOffset[1]),horizontalInner:m(()=>i.horizontal.value-e.horizontalOffset[0]-e.horizontalOffset[1])}),r.vertical.percentage=m(()=>{const d=r.vertical.size.value-i.vertical.value;if(d<=0)return 0;const h=Z(r.vertical.position.value/d,0,1);return Math.round(h*1e4)/1e4}),r.vertical.thumbHidden=m(()=>(e.visible===null?a.value:e.visible)!==!0&&o.value===!1&&l.value===!1||r.vertical.size.value<=i.vertical.value+1),r.vertical.thumbStart=m(()=>e.verticalOffset[0]+r.vertical.percentage.value*(i.verticalInner.value-r.vertical.thumbSize.value)),r.vertical.thumbSize=m(()=>Math.round(Z(i.verticalInner.value*i.verticalInner.value/r.vertical.size.value,it(i.verticalInner.value),i.verticalInner.value))),r.vertical.style=m(()=>({...e.thumbStyle,...e.verticalThumbStyle,top:`${r.vertical.thumbStart.value}px`,height:`${r.vertical.thumbSize.value}px`,right:`${e.horizontalOffset[1]}px`})),r.vertical.thumbClass=m(()=>"q-scrollarea__thumb q-scrollarea__thumb--v absolute-right"+(r.vertical.thumbHidden.value===!0?" q-scrollarea__thumb--invisible":"")),r.vertical.barClass=m(()=>"q-scrollarea__bar q-scrollarea__bar--v absolute-right"+(r.vertical.thumbHidden.value===!0?" q-scrollarea__bar--invisible":"")),r.horizontal.percentage=m(()=>{const d=r.horizontal.size.value-i.horizontal.value;if(d<=0)return 0;const h=Z(Math.abs(r.horizontal.position.value)/d,0,1);return Math.round(h*1e4)/1e4}),r.horizontal.thumbHidden=m(()=>(e.visible===null?a.value:e.visible)!==!0&&o.value===!1&&l.value===!1||r.horizontal.size.value<=i.horizontal.value+1),r.horizontal.thumbStart=m(()=>e.horizontalOffset[0]+r.horizontal.percentage.value*(i.horizontalInner.value-r.horizontal.thumbSize.value)),r.horizontal.thumbSize=m(()=>Math.round(Z(i.horizontalInner.value*i.horizontalInner.value/r.horizontal.size.value,it(i.horizontalInner.value),i.horizontalInner.value))),r.horizontal.style=m(()=>({...e.thumbStyle,...e.horizontalThumbStyle,[s.$q.lang.rtl===!0?"right":"left"]:`${r.horizontal.thumbStart.value}px`,width:`${r.horizontal.thumbSize.value}px`,bottom:`${e.verticalOffset[1]}px`})),r.horizontal.thumbClass=m(()=>"q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom"+(r.horizontal.thumbHidden.value===!0?" q-scrollarea__thumb--invisible":"")),r.horizontal.barClass=m(()=>"q-scrollarea__bar q-scrollarea__bar--h absolute-bottom"+(r.horizontal.thumbHidden.value===!0?" q-scrollarea__bar--invisible":""));const v=m(()=>r.vertical.thumbHidden.value===!0&&r.horizontal.thumbHidden.value===!0?e.contentStyle:e.contentActiveStyle);function q(){const d={};return nt.forEach(h=>{const w=r[h];Object.assign(d,{[h+"Position"]:w.position.value,[h+"Percentage"]:w.percentage.value,[h+"Size"]:w.size.value,[h+"ContainerSize"]:i[h].value,[h+"ContainerInnerSize"]:i[h+"Inner"].value})}),d}const P=At(()=>{const d=q();d.ref=s,n("scroll",d)},0);function $(d,h,w){if(nt.includes(d)===!1){console.error("[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)");return}(d==="vertical"?Ne:Te)(p.value,h,w)}function y({height:d,width:h}){let w=!1;i.vertical.value!==d&&(i.vertical.value=d,w=!0),i.horizontal.value!==h&&(i.horizontal.value=h,w=!0),w===!0&&C()}function b({position:d}){let h=!1;r.vertical.position.value!==d.top&&(r.vertical.position.value=d.top,h=!0),r.horizontal.position.value!==d.left&&(r.horizontal.position.value=d.left,h=!0),h===!0&&C()}function L({height:d,width:h}){r.horizontal.size.value!==h&&(r.horizontal.size.value=h,C()),r.vertical.size.value!==d&&(r.vertical.size.value=d,C())}function S(d,h){const w=r[h];if(d.isFirst===!0){if(w.thumbHidden.value===!0)return;g=w.position.value,l.value=!0}else if(l.value!==!0)return;d.isFinal===!0&&(l.value=!1);const D=Ce[h],j=(w.size.value-i[h].value)/(i[h+"Inner"].value-w.thumbSize.value),X=d.distance[D.dist],Y=g+(d.direction===D.dir?1:-1)*X*j;M(Y,h)}function W(d,h){const w=r[h];if(w.thumbHidden.value!==!0){const D=h==="vertical"?e.verticalOffset[0]:e.horizontalOffset[0],j=d[Ce[h].offset]-D,X=w.thumbStart.value-D;if(jX+w.thumbSize.value){const Y=j-w.thumbSize.value/2,be=Z(Y/(i[h+"Inner"].value-w.thumbSize.value),0,1);M(be*Math.max(0,w.size.value-i[h].value),h)}w.ref.value!==null&&w.ref.value.dispatchEvent(new MouseEvent(d.type,d))}}function C(){o.value=!0,f!==null&&clearTimeout(f),f=setTimeout(()=>{f=null,o.value=!1},e.delay),e.onScroll!==void 0&&P()}function M(d,h){p.value[Ce[h].scroll]=d}let E=null;function oe(){E!==null&&clearTimeout(E),E=setTimeout(()=>{E=null,a.value=!0},s.$q.platform.is.ios?50:0)}function ie(){E!==null&&(clearTimeout(E),E=null),a.value=!1}let N=null;B(()=>s.$q.lang.rtl,d=>{p.value!==null&&Te(p.value,Math.abs(r.horizontal.position.value)*(d===!0?-1:1))}),Be(()=>{N={top:r.vertical.position.value,left:r.horizontal.position.value}}),Wt(()=>{if(N===null)return;const d=p.value;d!==null&&(Te(d,N.left),Ne(d,N.top))}),O(P.cancel),Object.assign(s,{getScrollTarget:()=>p.value,getScroll:q,getScrollPosition:()=>({top:r.vertical.position.value,left:r.horizontal.position.value}),getScrollPercentage:()=>({top:r.vertical.percentage.value,left:r.horizontal.percentage.value}),setScrollPosition:$,setScrollPercentage(d,h,w){$(d,h*(r[d].size.value-i[d].value)*(d==="horizontal"&&s.$q.lang.rtl===!0?-1:1),w)}});const ge={scroll:r,thumbVertDir:[[lt,d=>{S(d,"vertical")},void 0,{vertical:!0,...ot}]],thumbHorizDir:[[lt,d=>{S(d,"horizontal")},void 0,{horizontal:!0,...ot}]],onVerticalMousedown(d){W(d,"vertical")},onHorizontalMousedown(d){W(d,"horizontal")}};return()=>z("div",{class:c.value,onMouseenter:oe,onMouseleave:ie},[z("div",{ref:p,class:"q-scrollarea__container scroll relative-position fit hide-scrollbar",tabindex:e.tabindex!==void 0?e.tabindex:void 0},[z("div",{class:"q-scrollarea__content absolute",style:v.value},Dt(t.default,[z(Ie,{debounce:0,onResize:L})])),z(ml,{axis:"both",onScroll:b})]),z(Ie,{debounce:0,onResize:y}),z(vl,{store:ge,barStyle:e.barStyle,verticalBarStyle:e.verticalBarStyle,horizontalBarStyle:e.horizontalBarStyle})])}});function Al(e,t,n){let o;function l(){o!==void 0&&(Qe.remove(o),o=void 0)}return O(()=>{e.value===!0&&l()}),{removeFromHistory:l,addToHistory(){o={condition:()=>n.value===!0,handler:t},Qe.add(o)}}}let ee=0,xe,Pe,te,He=!1,rt,at,st,F=null;function yl(e){wl(e)&&ve(e)}function wl(e){if(e.target===document.body||e.target.classList.contains("q-layout__backdrop"))return!0;const t=Vt(e),n=e.shiftKey&&!e.deltaX,o=!n&&Math.abs(e.deltaX)<=Math.abs(e.deltaY),l=n||o?e.deltaY:e.deltaX;for(let a=0;a0&&i.scrollTop+i.clientHeight===i.scrollHeight:l<0&&i.scrollLeft===0?!0:l>0&&i.scrollLeft+i.clientWidth===i.scrollWidth}return!0}function ut(e){e.target===document&&(document.scrollingElement.scrollTop=document.scrollingElement.scrollTop)}function ae(e){He!==!0&&(He=!0,requestAnimationFrame(()=>{He=!1;const{height:t}=e.target,{clientHeight:n,scrollTop:o}=document.scrollingElement;(te===void 0||t!==window.innerHeight)&&(te=n-t,document.scrollingElement.scrollTop=o),o>te&&(document.scrollingElement.scrollTop-=Math.ceil((o-te)/8))}))}function ct(e){const t=document.body,n=window.visualViewport!==void 0;if(e==="add"){const{overflowY:o,overflowX:l}=window.getComputedStyle(t);xe=Ae(window),Pe=Oe(window),rt=t.style.left,at=t.style.top,st=window.location.href,t.style.left=`-${xe}px`,t.style.top=`-${Pe}px`,l!=="hidden"&&(l==="scroll"||t.scrollWidth>window.innerWidth)&&t.classList.add("q-body--force-scrollbar-x"),o!=="hidden"&&(o==="scroll"||t.scrollHeight>window.innerHeight)&&t.classList.add("q-body--force-scrollbar-y"),t.classList.add("q-body--prevent-scroll"),document.qScrollPrevented=!0,_.is.ios===!0&&(n===!0?(window.scrollTo(0,0),window.visualViewport.addEventListener("resize",ae,H.passiveCapture),window.visualViewport.addEventListener("scroll",ae,H.passiveCapture),window.scrollTo(0,0)):window.addEventListener("scroll",ut,H.passiveCapture))}_.is.desktop===!0&&_.is.mac===!0&&window[`${e}EventListener`]("wheel",yl,H.notPassive),e==="remove"&&(_.is.ios===!0&&(n===!0?(window.visualViewport.removeEventListener("resize",ae,H.passiveCapture),window.visualViewport.removeEventListener("scroll",ae,H.passiveCapture)):window.removeEventListener("scroll",ut,H.passiveCapture)),t.classList.remove("q-body--prevent-scroll"),t.classList.remove("q-body--force-scrollbar-x"),t.classList.remove("q-body--force-scrollbar-y"),document.qScrollPrevented=!1,t.style.left=rt,t.style.top=at,window.location.href===st&&window.scrollTo(xe,Pe),te=void 0)}function Sl(e){let t="add";if(e===!0){if(ee++,F!==null){clearTimeout(F),F=null;return}if(ee>1)return}else{if(ee===0||(ee--,ee>0))return;if(t="remove",_.is.ios===!0&&_.is.nativeMobile===!0){F!==null&&clearTimeout(F),F=setTimeout(()=>{ct(t),F=null},100);return}}ct(t)}function Wl(){let e;return{preventBodyScroll(t){t!==e&&(e!==void 0||t===!0)&&(e=t,Sl(t))}}}function Dl(){return jt(Qt)}export{el as A,Pl as B,Ll as C,Ml as D,Hl as E,gt as F,bt as G,xl as H,Ue as I,sl as J,Nt as K,Rt as L,Xe as M,wt as N,Ge as O,Gt as P,Ie as Q,al as R,Bl as S,lt as T,he as a,Yt as b,me as c,nl as d,Kt as e,Al as f,Z as g,Wl as h,il as i,ml as j,Dl as k,Ol as l,$l as m,ql as n,Tl as o,El as p,Cl as q,kl as r,_l as s,ll as t,Xt as u,et as v,tt as w,ce as x,ze as y,tl as z}; diff --git a/packages/modules/web_themes/koala/web/index.html b/packages/modules/web_themes/koala/web/index.html index a4a8b689ac..42522f2bb3 100644 --- a/packages/modules/web_themes/koala/web/index.html +++ b/packages/modules/web_themes/koala/web/index.html @@ -1,3 +1,3 @@ -openWB +openWB
\ No newline at end of file From ff6afdf81d6e9b15ff9989b15bcad2b282f40d6e Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Fri, 11 Jul 2025 15:18:51 +0200 Subject: [PATCH 51/73] =?UTF-8?q?Revert=20"Widen=20the=20main=20layout=20a?= =?UTF-8?q?rea=20and=20display=203=20cards=20on=20screen=20>=201400px=20(#?= =?UTF-8?q?2=E2=80=A6"=20(#2550)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 28197272f282b64b65fdb0dd611e4854b73df75b. --- .../source/src/components/BaseCarousel.vue | 2 +- .../koala/source/src/layouts/MainLayout.vue | 20 ++----------------- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/packages/modules/web_themes/koala/source/src/components/BaseCarousel.vue b/packages/modules/web_themes/koala/source/src/components/BaseCarousel.vue index f25207bfdd..720d823255 100644 --- a/packages/modules/web_themes/koala/source/src/components/BaseCarousel.vue +++ b/packages/modules/web_themes/koala/source/src/components/BaseCarousel.vue @@ -48,7 +48,7 @@ const animated = ref(true); * Group the items in chunks of 2 for large screens and 1 for small screens. */ const groupedItems = computed(() => { - const groupSize = $q.screen.width > 1400 ? 3 : $q.screen.width > 800 ? 2 : 1; + const groupSize = $q.screen.width > 800 ? 2 : 1; return props.items.reduce((resultArray, item, index) => { const chunkIndex = Math.floor(index / groupSize); if (!resultArray[chunkIndex]) { diff --git a/packages/modules/web_themes/koala/source/src/layouts/MainLayout.vue b/packages/modules/web_themes/koala/source/src/layouts/MainLayout.vue index 366622ea92..fee95d6b71 100644 --- a/packages/modules/web_themes/koala/source/src/layouts/MainLayout.vue +++ b/packages/modules/web_themes/koala/source/src/layouts/MainLayout.vue @@ -116,23 +116,14 @@ - + +openWB
\ No newline at end of file From 14c4e969c7872038ac840784758261e2562a1d1a Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Mon, 14 Jul 2025 11:25:39 +0200 Subject: [PATCH 53/73] fix power limit init (#2555) --- packages/control/bat_all.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 7001a3ad1d..df310ef9cc 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -20,7 +20,7 @@ from dataclasses import dataclass, field from enum import Enum import logging -from typing import List +from typing import List, Optional from control import data from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT @@ -75,9 +75,8 @@ def get_factory() -> Get: @dataclass class Set: - charging_power_left: float = field( - default=0, metadata={"topic": "set/charging_power_left"}) - power_limit: float = field(default=0, metadata={"topic": "set/power_limit"}) + charging_power_left: float = field(default=0, metadata={"topic": "set/charging_power_left"}) + power_limit: Optional[float] = field(default=None, metadata={"topic": "set/power_limit"}) regulate_up: bool = field(default=False, metadata={"topic": "set/regulate_up"}) From d36bddbc879856651bae40049dcd3a9f855f01c9 Mon Sep 17 00:00:00 2001 From: vuffiraa72 Date: Mon, 14 Jul 2025 14:05:04 +0200 Subject: [PATCH 54/73] new SoC module Cupra (#2553) * add cupra connect soc * add docu --- docs/SoC-Cupra-settings-1.png | Bin 0 -> 140891 bytes docs/SoC-Cupra-settings-2.png | Bin 0 -> 134044 bytes docs/SoC-Cupra.md | 82 ++++++ docs/_Sidebar.md | 1 + packages/modules/vehicles/cupra/__init__.py | 0 packages/modules/vehicles/cupra/api.py | 33 +++ packages/modules/vehicles/cupra/config.py | 28 +++ packages/modules/vehicles/cupra/libcupra.py | 265 ++++++++++++++++++++ packages/modules/vehicles/cupra/soc.py | 43 ++++ 9 files changed, 452 insertions(+) create mode 100644 docs/SoC-Cupra-settings-1.png create mode 100644 docs/SoC-Cupra-settings-2.png create mode 100644 docs/SoC-Cupra.md create mode 100755 packages/modules/vehicles/cupra/__init__.py create mode 100755 packages/modules/vehicles/cupra/api.py create mode 100755 packages/modules/vehicles/cupra/config.py create mode 100755 packages/modules/vehicles/cupra/libcupra.py create mode 100755 packages/modules/vehicles/cupra/soc.py diff --git a/docs/SoC-Cupra-settings-1.png b/docs/SoC-Cupra-settings-1.png new file mode 100644 index 0000000000000000000000000000000000000000..50641082273125e95d21a83474690583db4e4a52 GIT binary patch literal 140891 zcmeFYWmucr);5Y23KVFew8h=ExI3jd#oZyeyHh9>XmNLUcb6i?-2(*okm3#}ti8Xz z)_%|G_pU$Z-yv6$nfXi~V~%kTAw)q=0u2Qh1qKENP4c6dA`HxPRTvn!mFI}in$SHY zMi`hEvgV?q3X-Ct#0n0!rsh^AFfboO;?$7Tl?L9VYblZ-JQov^+Le77g()QUoZ&2- zn3e?jrPMcM;ofli^3_FggrU%K#n(WTenU|mXOmBd-c^~|rC|q#YAb;-&4+ZL6i5p1 z1+3VDu8V@jea&OX8-}cp(B*~%ap_RM-4wnfgK;Ynq8&o=qyEx*UFubYSrMQv zfk+V8_#uQ1Z$tgS9Ss zvc$FWl89~-DNxwzxqT2hCyQ5qKD8)*Zms{dC|%EWtJ~Le;__Dm@Ebu^;X|f9=wqG? zqJ3L0j^(ebg^6NsGO)Rk@#6&Y(6XdFwvR3bsAeo6H~q!iXZmye3ks-Los zISh~6icG18)~L!)oiZBXw&bkpJsD`_yYK03a?)lh7wSPkt5sF63)eJ-~KG_TX&gU+9mN^(u>6_-5enf zPk7sd7QxUT9Hx{Pk?`>}XG6tjJ#OJ{+$>J;O5i1WBQZ>+AKa`HGrTdpy@ah2Q>)TB z0<1u!zYH-Py6Et)uen`>$gO?;BENXWNQsGXb_D0?;GRW3vW2QRtiO_Tc80+b^_Ggm z|MhO2?>e+Jr}I|b}y zVzeR>y+j}(VGH!%C8PXGVHm+hX4Qj)EcPQxog7C}l;st2w$L_-bR>&0nqr8Rs72I$ zzriMg1Nxqr4e4bR;imj1e`wZzA-YANX4b|hjzQt>aW^O0uRNJpLN0-b98 zMd}ycPHgVsb9Y;!%rNCB1tXOWx39L|iD5qLlhE9bPr1YD)-6wTtm@!c-m^;(BfI0zelo1@QswL?1;>WD8mQY()y2OBGws;8g;i8 zkm87WC7F zlV;P6xyPU7va}|-&&$r97cStKMGTyG-KkwB&)-SE<9%0vv&;9-Hbe!PyB32MgN~@GPnA*AW;qj*Il4yqRT=j6$2=Q3ef*R!u!yj#26$qOD96;B>Cx#D zRJwS2_gUH5(B7*g+OUF|@AXZs*o&3xo1+X(+%23TSr>Qe)N$3FiaP3>t&D* zr2w)FIRtFs3~{Q?s!FO#mnD~`YaVEvmZFv<Jdlt-P#F7nOn9RTPWW){a)3K;2qV zur|2*u=tR1KIg*b!ti$FB5mXO24A0KpGri_QRY#nJ+)n-Ya^uJ>4hu3gO!8V`xQg4 z!K;~#v2TxuoBOc`wcUFc2w>zatWe5YnX9RVQH@pYEiV&NYs2xLFIXv5?M_v$ubQmv zo7M*HzT4^SFK*uqj4aD;&#umH*sP^*w-4O&Xay6D=#B~;2><$ZslGe0e>^%h!U{U| z+ac0L*X7oA)|IEykjIo=e7~2~ki-e{OmR)X7@`{4@yuYvG%0~_dPDW_Q_OTs%Xyz~?Cn;+#ynA6{T zekhpM)g%Qc?{Pcc4-04{S{2|&$;WZ-9CQ-hyL|b+j@Nq+m+`syb3+X#fFQMuU5ll~ zJA66S#4-IfBK8CG+YGuyAjg=~%DVgIj^nnimLL5`z47{SFN5PBN8(*!7H^c^?$AHf z^%t4RPUuNT$Jf5b!)BuOxsv_Gc}{^#Q5}6C-4<_i|K?Hk&iZF{$PfqPtu`(Feco_U zY3t#JL)VF3d&)1JURQWJ7FDNGC#@zEZ2LIlnYx+w63bb$G8*kuJL{gsKIc;Byn_c# zLGSw}hlGv63a zfHx1G$CsS-&ulGA>x&sda!b0E_s8Kq1OOlXM}?LteZaz~d<%I?vxT9h+)VS_>@3b~ zS*gSU_BnrxlB?blR%Jm`SC#=#cYCGUTR+1PRC8~BTS4%gcibh?yK+rph=`NG5TDjs z40ng^g58AOnVpK$l@OhOX?A_aVVCM>hD%*?y(+;3fAtCVx!LiAztNYUHxbeim+Ad{ z$CcI|KyXZqye>DkWATR5{9cV9(!JNoi=E-BniYW7n0q?!9qMgD{;ACl9#98}ale0a zkcHk5-iLbhHkrvo+iEX$+WjmVl82Q5&-m!|#dYg$roSX@4zql@G2Nr>Am~@$R7w-4 z-U@Bw`PxM`Zy;};D?20}#M-KMp8~e^Y*}g!U&3evJrEytfrCE>j}Z+Jc^@+R$arc$ z^lVCkm39is_=Wl3X2`nF-fQ37iP{c8G&^iP3{Ka73f?`KK~k3H?iDW_R>!s~&h)@H zLt7Q~54#VZ6{otsZb~<*kJcl+7cH!im=(cm<^!@lqh2bYJVQpe00^fa?_K1H$z7Ko z>>zXjhQ2Qd@L|xKURu+a9T7C}m3>Fgx9$JEhzF=T+VV?a_hJlfS#rscL5tjPj zZQx*Fg3VzN{@q3s`u+4534KF*|N9$0ItT^{`U?~K4$Or6KdqmuX2SoUGTaLE8H})! zsH7zHTgk}5#KgwY%+^VQy1x%vfo%6t!x0AN4aL(NR#K7t7t}bKH&<47QkRwCF|xI0 zG%&U`G+}hJwtE@}hR=-$TC_HCG9Y%dwz6^LapNcbqXiGN{8Y_EO8iF?Crf@(by)>s zQCkNSVh%=TMrKk06k=jxJ_ln{9!0Sa|LzX`#ZPMHYy)EblnVz07y=P=*`nzsU=BB^t_Vnam-Tv6uzoz4R8jMH5+|9&F zUCi7XdeqRR39!6pW#ju}p8waQKUey%t}2cu4x+Z!(4I~Le-i88o&Wmqe|G$1PK`h3 z|z^`#*cgJD5Yy!Qg3W0`LDl!(Z$E-JXx>iS~ctg?};HAGJ_U6F}i(`VZF%pn%|P zhhSiYU?jzamEB+umyuItx9~cTf9lh-8Z!asm8fH_#Pi6dTXe$m_)Qq3NqDid#KZE$ zqw=z;W1~49;zZu@iq=P(Fn1?D-nMRh^Mow%Is%3rm^vE9oX7ZwJXcQn0j4%P-lM0c zyf|2ROs^4M3cT7*nNdNoNpLVyJ3geHxL!T(}PxcCnu!Qiu)NW%H{(oQf(_-!9 z{5nG&-^h^slWoGl*}x&FHroG!{RgKGZNfz*q~FVpn*Yzp1j`9M#3in)f3}k6sZa{7 zr#@5qUy1VvP5e@zhiHTE^$+Pk3Z;3_jPBKl{C=8Xhxy(s{70WDDAUb8Cd+k$1bzf1a5fRaqd9Bq@brGmu~ZI5E{o zX$2>CqS(?7i~cEvIx%4HCp+8^(7DNwUrhtn*U5XlP)3rv+Z~cVT7GXtM>aqZ5aiN$ z_V=vFi0RJ?82xBvRoas{-0{AuU~_tpD=HEn(=yz5N6>S`d)AFcEk8CeCPu(BBK9AP^vWGPkHVa+*!4Yg_$wp zmByiWViZ9XH;%tR?&!0oZtCUNfd8z8SHAulNvc7c{1%J_Avf?{)Tj{Ux z4u$;XD4g}5;^;Xo?1(~@Ysa;Nt<>Rw8S9~h%RoGXR&_-tj}UIye~tR5m@&@utGF%V zISWSb^17Qh7)XI&dJ=Ka+e&&u*x^%R3}+Bjb3gW={Ds(!sQBEt3{?eklBw69iAYTk z1qW;HXxqR*#Q#mg6>vr$wrB8wZG;jQ|H3r8< zU;SqrpFgekSD671r>dxAESjxc7S#glSOwoj#Qc^VI3%k}oaYziw?j#+1wHtJl-!Io z)EVV=a!-ANw%2|`&LI8gR|IMR;yh!K(cz<6T=_<8ofh>|WUA;i#CUO?@;zi0l>l0pG=m{PN#2#QM5 z#B%(_&_6f&+ft`Eu^nS2=>Z1xa7qP{YX7{6|F@F%6CUW&$Nc++{3#>;ReG)r%c6>~ zpOmHZ8)o?L)kSW>aaXrKWBbbj{E4y0m7UU=_+O8?`^Q!@ek?NQ_{+)sWms(?xb#bf z^KrhNXOrG4aCD5BVG*Lj{~4-Z+yCmy?byp4m2YPcfb#ca5c>&z_S@lCPCMXciaaX8 zRPT!W3+aS#pLvNZ+$LxAEmz|FW&k^3WVaR3nSj&Of(-b)Km;jKGo;@%{SVXp>vp^} zgX&s@MVu`DzijHS7w5mv>LoMWi)Wb31)qcdXp<{W%)_G@|4=Ct&!k5Z6%~b9=a_)c z>oTm0O-RU?Cmk0%7)K|a##6V|7lcMmPfyR#Vt@w~fSo0NF`=Vcp*&;mx^()Kzgeo? zD-^dC!SlOPavmlH6n|`g2g-kKOQ;yZ<#3)PhEhK68ud+o2o_bFjpyz-$;4dojHU7H zA$K&Dyp8!vX%gR3UW}NSnA>tt5_Ee)76|Jb8{qw$^hrAQ^J>Q5O-q7$Ak3 zT)U_^Anr+`sKHVhF0v*s0s(X2#1H>ri~q=)KNyzL6xQ}qL1(AvyAOJ-h`xAcD)Qo5 zLg)5~7C8rp>R@b0WUKq>O`WWTT4-n}OZRgz>ErbTNq@L!iY@NRvt!>jq?Ecpn~{O7 zK-DHCoBdIuv?|5##25;SieAkd_z1K(AJ9bMaWq=1)?48;<$WS6(yJ)HUtrLzE!1iE zee_vq^NhH=8>%<~M^jW=16_Fa;8`f;-Q|7mjsZA=KBZ!@j9^uwC+y}gg!MHnEQU-X zVsNcnf`Sbo*OV*dgFKW85%G69tVR0!>-kwiDA z$F>0noia@v!;{?&`Q*{r4C7y6@Odgjw=Bj)>2aog_U=cgBDbwBU>@^@=CarH>Iy!Z z7x!OW-0&k_sdoq{61pGS-+Io#7HQUnp6xH_?9Uc$3`bY|0MREL(QssS9Kzv#C6Ot zafwAGHxEBSPfQ^d`*iUnQ&h`xg#++d1{oJTtr=9!*%TBAmn$g{0$A8#zdTiz;Hh=9A}Ixs|D83MFZSTF%4}69UOd&Lp7$p$V4u^GFV{2`kxvi}5G?NjKCAfTlu7oZ};(KKmcKPir-fEsyT($hJs~Jc) z2px}6&x;#`7_eJO!jR1AsKY-qb%W3l-tB!j|6Z#CoqgSQLWY>fDEOpfEv^{^u$E6o}lua?m%OwBsTX@sElfFPUmkP zXo0lGkr)1`L0elhV6oV=bN}UkYqB5fI>uWlaxlk}w)$<4Rp5BZq&lOH%;E9D*V^=Z z{N-}WVKcoLQ~95@`?c3%b&o(es_MSbI;^TvubfYPW}&$q0)p50Pe{+QCy z6hYa{h{Jl3-d4_QsQzHZ^C&8~#i@Sk;Vy@>^PFbyj2;ZEi(7CMi0ki1JNY>%xRspD zepl>sa~3G{P0QAr9I6`5E%8*JTz4#*#EaiL*nNdXsB(^^1NQk?<#zABpuQal#eSR` zFdmX1lI4{51JT9NHVKZDIa@5JweVRq%z0n9m%BEjO~hK|s6)-nw}E~Sg!Z}~LZh`i zEfoPXBpZ~n_X=`9)8Z>z-Sf`9T|Mu;cPu@(e|LK{D44DL=(+7ra>tg(9xb8>+8f1= zhn8lKTYZZ&>KaE~fy7~g2(tRUT>(f8Dw(;+6ZVGbM9d0MeZp{kvK4c*oH4MjMC0%U zCnG-}IbYrUGcB9t7eRk)T>O&`kWYj4T<14yz|XVMlYlH(sC#h&mHyr!DU~bgS8$`% z0*hjU96<%8cf^P z_bxDgW)nejt1_5lp# zr!i$*F>euN^~JY_m=eH1*Zx7l$JoTgcLQ;BYR#Vrn1%74(0(+77_C}4Jx}UKsV$5t z?go!@+!oEbg7nBAUr_RDCG+X$R-dDls@IxDjeLz#Y%%qUjx5VI>_vG(aONnbp$?S%ykfsaO8y9G-y|_{ zaO_A5r?ljh|EDUEXTYLE2rLor8|yw>kOeOVDXCO}ho|qQqribV(zRfVEAZfWIEibj zNl{fQo<0d0-n{4lPS@B^QQn@G5$r&*(nn{0i3kE#91D&G5=Uqog9_<_hch=pkYh5T zwO!f9)$vC4igEk(CCGPc(y%vIv#z-4AxSRc!0LK|B(v7Kfz4ubQLJHav95x(n^u

Kt2C=P!r+?)=S4@}ol`wP zhtmEI-u{f_oE0|KikrlluMMFYNE52RI~VfiE+x_rZGyx?V-h~Rh|Z=o8=(QZ9>%^6 z{vLlvxoUKm80Bzxg`C8CiF&=avxRB>V9M3I31$X?P=**d*<*pWExkJ+AQZJrHR#?` zc!nRc?2XuOdk(m``!0U#S;Z`aG!e=Vsmx#onTLi8FtYA=F?QS^7wp!TQ?wxeFk9NC zY`P6MrJPdGofH3!N`pE!%rfqSiKx!l3u;r&qwuyQ90flG3%i6Kv?&2J6S${t2tQJo z!O<0~mXU_N@g?&dj!cc1|tT>sT>8va82H8=+Ctwa+^{nh`B;yTAq1kGX=CXJ6nE$=!a08j=Rtk)vhB zoc$@Bwv@~1K0FJ43Fil7d9p1RrfDK4_tCvOw7*#L2nw)tJ#{n_PdU7HUou(dj+LHq zG0w%C!HoAuUYob6)aN7YGvgeXwk*8ZM}~7y13THOWiEZ zl#kbSU9NMvoy?Qwt*P0(4>lP(9Lq!eZpQI$PO->P-2JFY*TMV#ro6^m&UU`>(}!>m zNp0R8=dB;xI~!jfyz?YufUP#XUYpcO+>Y^l%TN)%RFu=Cx)O;YkV;84md{-5b3Vgz zzk!kGoZ^DnWDqdN!w0Ch1kN6e3+_0|wKzj)KukKc_qXS99A#SWN0VU3vPI|bJ2Xj; zTYNMoaLQhBOdY9Aw(aNPR-h`K^|91j;TN18mcV**iU`4r!cBIXeM@c6G!35*?Yh76 zUNh+~l{KHWj!}@RHeBDFa{4~N;hgTfVTskwF-{3~Iv;q9d1TS; z3Z!lR}n=*GvuS+H}QFP|cTM}(v z+t$xqYt9L_T=w@T=*2yv6IBVjnhd)Jf1RY*N<{Vz3?WS}hI{wYrHTh&R_VqVnzuCZ(vjd5s`i z>rB1XO0`P6?p>L;ZbZ?@DYZe;#o?8d)d zZX7|??B^pOV}yM#sA1@HMSDER=TY?L(p%1^ZRT>yuD#Ot-nprj*)H<#bj$|pm{hS| z2B%1IODg5V1EkK0jhlBq2~Xnoq^hDps!P5 ztSSQ}u3^PT&2%)G0>gE0^Az#4m8t!;HykrPz06T-&KFSGl;5`mT^zC+(~)}473W*r znG$IzC~M+wA3@Z-tFwsXo3DzgwFLGdsGptTWM*qHru!O1a%UiSM->9%=qh4GzMw7) zW8=y0Tn#7H$RdXKvY1S^2mlLl&}+$bc_Wl)?d_2d`jSQizR~VEYs=lnCtBKfW_CG1 z{W8cS*tCmHdPR!j3jh{RvE&y-xP0T)<T)4RS6cgyUOLKTC@c+n1b-L><9zq6AgT zV;S;A4Hv32a-D$}Ckq8NTh-D`&MqnD5Q&kg0(iuBvw#Apf`r8IydgRjmNZ(E5vEP} zlbsCTg;Fdinh$JcKXx{sC%&e#Nl03aDQLNjoKI9Q^44LXF=A0Mi;t+YoLk7uA#6*J zYwtViLOPOn_?GOWU6IG-D0{wl*$Pgbi$i(c*n>zhU8DrGiRr#8{StIDnu>*oXLK+T z*FA#Op1$QZR+KM0>9Sv!p*WF&idVS4pycAx-5rcEl=(K8{AOn)<)`V^c!oKe!^9!> zldGy1ZJjn3t$AYhi9^ezNE4NAtO!yFHfl~4nq@#QCJjo_I=}T(1Fg8=N zU+ZS|RpU{&Gf0l0^$85EAZX`68(!46jZP6iW5B)3cg_XaTTEGDKFosggQw5|Es68$ z?&gP<^=)YTb9EZbY^$SnrMfk$E9rObXinqK5@-a8#)atjjD}$$Yo5M~PTbZH>CPUR zZOG}RWKFW2g_aW#gk+M9#pIc-E_CY=$nod$uq{a4fyrSYr^&`P!^upxZJxLi#6QLc z@Ax+%)KO{u+i+@)vk}*#Vo@Ue3<1Y*z6(2vmNZ8qmb^=4Fgd&$dU7WUxRprIrj&2t z+N4x*n|aK2+B+m{&DyY*_d2k~TRN^<2+m(4 zVsTT5PG;jD&WR8-&#;+ZQwu`(`Gm{fykN}_F7$T)hG;(=B|+%e`nh@`JN}}bxdrX#40BLIWDf>&aJIjiJRg!M2%*d&0NGYqyzA~P2R=2s=uNC74 zdU&W)riJfreq&aZ)i+gMzxN8cVj#8%!rgLyO-T60rbd8^ZgrKkeTsAT>Cj^XA5L zu`bQUmjUx^AvTnm5R?YzRE)S0&~btUI)`Y?YZud|wgVT2WcDcT3||u5X<=v>8sqQ7 z(ETs{rI{EgvHHS?Bb(vtCL@Kc6B}I2k@gZ!1vvM1iK^sl4|tG9(6qpneG%VNI2OdgQ2pl{hVBoQ0-9`&on#oU zlF_e3e>NZ8OvjuoUa5gSYIeM61s_ks(p>HVtvKPLN*^p0dI656RLI5S&fVSJ#=kQC zPbLdraZGhaks-@FHP2$1P3^gB0$KhCSqlt+|P;s-_xW0aN>Pbm!Q9y9uy;Nc(7HnxR<&maT z(0=MY_d*C)Im_f5Hxj?6lPhZR__f7kjwdG$r^`31<>nDJZE-_p(GPln#r)0C{8Cq` zus0*dT?u-*P@B4R?8%aj#D?RcPl)dZu&No0ipJ-*g&Dodr^!fb4zGM#O+Ch$-$FYI`)1%+BsW4AscX*HI_yt640b7x+*Y z?ssw;(9W11afxbKeOeH_-mWb#syDmhC97TM>2}d+eSMAHTDEw;QMu&${!L(;z{DM- z0|^rvc?v{N%QnCDeYgfJ7}&5#h{d{CuAJ4tzD-`}JeBlnz~&eD#+-JcSzA->)8;`a zy)0;v{|#tkX%&3@?!7}TTB!Z(e3NCuK=rSz`$B^H-cX81HV^30nLyV&G>7_@TLod$ z(}O4hv1->@XVzH7ebm_DV>zFlFVgjDw|TYsl<9;FMfrjtTfpZxfPU;T4@I7Y^n=@* zr3nPLE2V^~q;<`Re9TK3s-tE;y>>6fG7D_1+|!a$tq$EMJU-WJGo_Q^K`I%K19x4d8_mKuqnM_%tPm3EImF;RF`e1{2Q=%&slDnmOlc6 zse@(KX8G)b(xzjhRb^rRMO!Y@&K2LBB;H%)Tt<1&iP`ws3!e7%mYlslkwsI+eRpi2jqMGPB=S*bEo;RW7Z&(ZQi|EC4b=NXpvr>5%Z z3caTg4%PMPn2JqWxH!t&=r+&G!JzNR8bqny2!oy?onqVzhBn4yiQH3VO1i=CHEOT$ zfXZl{zZ%Tq(Y;ahq<6vzz@Ac%PDfXfXr<#WWme;_`;mkSXTPUd7273mK6lzz!@LZgR5OZ0(jJ`FXGmk2lXoiPh^me0 zrm`7J#arGE5PnzbjP`qQ%pfkzulg__4Q%RSYFD& z$=VBvOi{;F0dGx4XB?KEjGI{r$}4juAEI?ch~XV^pjPe z1rwP-Lnqgb`j)xm3v>>}>TZ;nuG#-i?nLZqXV$(R}_5~A`l-&AV z1vVNJAsWTpuVoxZwU=^)I_l-x8mASHTjN=exzN}TcucjcAX3Y1V2bEHtoQCf{`Gj$*oW=dP6R#86YUGNj`PZ6O9OO^QpIp6O7 zkOy4SjyqEko#CTn@K|6FFuQ1a$W`%!aiFRVy9c?wWThj3hB1sJ~eeFa+QsPzC!{t}3w+1m<%8qyc5Dzn{ zMJBdOzX7&;2kX=+4=9dO(zGYgCPmh}0T-;(&}>?(vPPn_KC$@TRVnVzmTl1UR9v!K zKGb)|T@`Oq*68^T>A0@YRD|Q%{ya#x4U(DY#IlAAYt&d{TWdDFMvMN{z~#de`?ZS~Q>@g7z25D<+)8r=#mNh%Sk?sZj(u%kdDKsyF4YiC2QMpG zC|4XcYvjuvF!MtZ7PXwhS5wxBH36vvMiW+*O_UK6o;hF1irGR2n3a z>zZ)*TzUA*y*a&$!v(tQ5jVw+zV>z2?vGHp0RTO;rfj=2w75d*PobfM-I}&^y!~Tn zwiO$!NdezmNvHrxc9(#+uJvj$4uM7(_y+{qM#f2Obv@j_>6|UqwB^p$&3R}s4E(84 zh-(na+lz|>lSrzvW%Kj*GQ4O-kGOVL|EeE>Q{Ign{*_v1F+UD;9`PvO#d{F{ zp5UfD&wnA{z;#-eiJ zS913GN-@($)LcheKPYM9GJ0i-~ET{c$poyJ82*45LgYzwOOLlr{_(#t$F zNLA(vUvxJ#ofb0;gllbJ;-%C^cRApnEDlTQyzv@5M$}NE+zA~7}Zax8QBap*-4T^ek7w^ zylYcyX~al-;)?ZpL!9|79Zuh5;NfxS|OU~FucX!!O1{2jN=-}v9JZ=f_ls`=xf4yF9qY(&*g@#gM7!mh0 z1{_#dZY^zF%}Wj^n__ZfRVdp=&CwkR>+t#9`rB`BsG1IRfKMiG-Q1emllia49&$QY zu9d)*wj}1E4KOe;m~7R6ik`6AZ#cZ8h>}3_uF9cOTp?)UhLJj6|~3e}b%l=#fP82LWGqLx7Ab=s!YVcdCUQGpQ8M?$W| z!^<+zaHWx){ewi`c@69RLhJQp2~cTNA_GF_b1Rzq4I7&-_O#6w%WiFmauC7ZY@##f z=6wH3+cpI!d5k9A+I9Oh{BO(_sO_>xrBE*u$Y#FOkG^(bTejG-l4VVoad~}LMpZI< z>Wlxi)FNxh=Mn;foD5uU4hmw~yhxx^o6XO6ot+*vW)Qrqq(2@o1|&6He#he+kQaP3 ze9H}NE_azi6fRv0Km}j~S1#pRLoS2iV9Vdh8 z*IRRX;BBx>r?`dmn#dP1-u5~#{h)|n1+AAWNG^5NCPRxah(+;NzD0ed6XR*_9(9)EuoQ_;J_F9=1X`z2T`v0fc#NXI)jbD0U#@h4k@ zl4FF+VAIxySs$(LI#)@roh(5`J;q%GDhtF}P{IYp{F4E8bivtt%4HF7MjzBug_QkpQ<5` z_m>%bHlJzZlZhj4i4M(J-s8)=+@ER`YS7i*K^j2T7hmayu_EWDOQZ5>Z_nLlZ8%+5 z_%x0?9x1ebRzt%yYI;(-!a`PV7 zeBi>Sj%5DU1@)wVOoeb~?XWF6shUj`Oi#7sUfS=mYvm2bWhZe#L(9|)9JVX1;x@Lk zKP)ptOa~X(+U{;vV-S5^S2FoV1aog87So-v@3P%q)X@loq zQ7|Q1$^@eyt2(J?2s5F-7d8jBGSr{4tn*C05X0bi^IaE^`0k?-U-9w5H3G2-nzeB= zxwjcQo9E0Uez}!=-v2KHClUwl3kr7Z%5sa;1gW@{T@SC4K;+ztml{V>$MMbbbd8xp zmwX3(0^k-Sn&1;J7?dT^!bdJA^ts&EdSu__ii6Bgv zyY>oKgjUV0@HM@HP_0f(z7O?HLsw0y4iU}0?mJSX;c=HQC~w$6mztjC>z6xFFMj2L z1y5HIkymQ2PVn&MUP7N-L}$!DqGWP(6FE{h%0$Nnxp;N3ww#!GIf&5MoD zDJA^=^+#pp*w%}i6ihr%DazK1pgl1@MvNtpFjV5~f4J(dHhFTpI1GOyDN73<9VYC9f<-M8{SnJ!P-9GGt-d!u-_HND4Arc;K-rq^q_&!7>B zI8MC`;`?;pu5fOC{nfCOngNI7Rrt#=MCRRRTTuOW_2WyJ@w9YB;_C+_>$dJ7^f%rP zd^v+<4J(FaPNjGZa+%_q7X_lv*lcH&x0$Y_2;I-@Q}%=+RLH_ovk68a$)ihiphPpk zviDrtWM&uI=z7m3;c^Bvhwo9>B^mF=6$F&}@D4C`UK`{34f%PZ05l;@z~ROz6^-R% zX^%m&<-#KzSr@p^V|iU|JYPgn4vD6?5Lgui z=)yCh<3={hs41WVsKb)kExsPH)<}<7T6{%6XYuZndCEAoujb(bkNZ&&6QFv)Of@*G`@?*O<;c=FIH_E*?SpfS)Pv%!r)&+( zcWBmG(h3Fi{=|!iy`e%s-oOWZ&;>xfO_SP>f?-FZytmEJc<9E@?{PeJ6^(NR!Q)G-Kpe@!|4TYT?)6sbagf z290X%SF`-k4%uHOW}^ywQwKOW{HC9K(nITfnY25AA>>|TQ;@p*i~|x;iFQ)yc*Yna z-v<@aVb`OtUneoW={4(`KfQWW;!K=uIpEOXCU_0aqq+Ju+rxQSiF330 zut}o?mbP8jg#vLPO}_BU-`T8v z3Y4k!R!pCb`}uXumB*EBhgg9F>2>c|fJJ3AhcR?@!wPtgf+=Ll?go8S8T0gL$wk7v z3eLVNCCX8U+|@(vZMQPBUqM#-UuRtxOcDnB*Sd4%2rh?l2f%a;L$w5Dn)R`qE2-2^ zxj=75Qu6YWd#n-B@b%&4*ghK6BENLMO>>2cb~Py+M|kg{*|Kc;GTtO4&AL|k8@@SS zd#yQS@RjdQSqKO5>R5;BfRQ|($;eEJ!kP%CIS=Zr#D~RBSnEq(TlrW*e$U$%rEdEJ zR8~JLk8Y0(nv)O7Rm6iukO!bLk}G~uC?1-B8<}jn8(_ad<>oy&S?6t@CI{J=gh@lr z$I_@+z<#`yO>SsZddjkarZ9W~?>^i|#La#Lmi*-1OKVt$qpGcG6uqs_hNU`fznav} z&dj9+&Bcd@3FfMJFOU-OdL2&Zqn2vQyRpc9o}12kI*PKejUE|l3VB5 z@sz8}UhfTqx(G3n=mj8yoTiNtl(Jg$-}oq`<7zul)e_~nz%Wyww1|`p2DDCl9uOv; zgG;s!kR!jQJhqj~xDd^5Z-Q>kjjd9q0}cZ8CPEf z5gmaH^O8S25*YFp?Qq|cW!DV2%=@^MymcO6dNjT!$fooKOZn6M-ROk38)CP6ncp9o z{)niXqiNDS{PQaakvep&ral%ds#e$|iqr&tvY)Qj&#nTbUd{U9Hs-X6NO-~Ta8AgI`A6~yO==IeG_u2 zI%7(`RUH%H{s*OWZ&||O?1#W?aP~#x3^eLfXIAo(bRA0mM5X6c zUmkMGt!o}lTzd;a)^-&R39+8x6A(ntO9aW3XID=dN8wTMOx~hN#FPxda$emgZh#y{ z)VZzG!9vQG-yByEAV{g!q>L`l%ctBA1t_c|z6fRa2=&zV&yz%f5{1u(CQ>`nS|pZo zQhloYILQS+Wu?`^ixcSTT({^rEqki=!s2OC0H%Sb{$yK{qPsu4!sD->2iSq6sWI*f zuVOdIp4Bq+44ih?Go2dv$Z4sRvZ;A0cvJvKcdEq0>fg&kBR?I?7l$2-v-ANV z*wErqEkhDJf&aw7^T(2wLRvd}h8WuEplWw09s+(|;EFu_iTR{dTOtk5K5AT^TXFEYUBPv#K zcYJ}TM*RB2H+a-csZe1puY(OXU_38jZPtqb{4j;k^9of0*fIb={3k-F3YsHVES#$I zIZRfvo6+b&9Hj@GCcX0iw0yMd#aZ9>K;T^8elJCf^ZDJT4USy(Qtx0ii^(uOd;3Sc zJfGPi3TeoXLXb@!@=X2V;e`*?M%3#Hbqz2&hVm)v=JnQ;`w>A~4&VUhePkLIPu!D( zz_XK?lU63|gq~^l#if8MR1t~d(&3bSB*35F1^QH3G6P>!M>pgHK*<~y!zz|h9zd(* zA6Wbyl73&Z!>jDNAZBX-p==_5wzdAO*TN9_!fRH(55^qdR~ei2p#wL4>&<(k z6l46u{@HYFFFs-n;~xQB7)Zm*!Ln4*@n-_Iymqs;_U_UNzVH2wx;3 zHiJxdUw>n!y6;w@%GXRtBeS9(&03S)I*(pBzNO=c#>mF;cWY}kFWYFt_AI-BoK26d zY3nyqiCF;E?%n|ZRRaQTN8RbG~ErH$;H zb9jNf*|JaXQF2}kR)XDBV~>SZ?fGt3R;FjhQ`$~n3&FEf-f64+3%hUZ_O0PHTkM~T z%Bhx*6sqloHcM!V&V~?${GkdcFE_ho3QMb4)Y;LLF)QBrU~{q^gIzs%K!GAL*FOzM zi#VI`s^R5EQO!``zE-n2Hzq0#wYF^9b56+_Y60>KL<$NEKju79Y~#IFz`QVx_3qZxJWbNkN2FLoOEis&_UJ4PVepukPQE0I zwKM1t=@bgn&R8njrj+w%Jb+5PddRJZssiw=&X#gs-y%y;{3J$k#oMQvZ6oWXt+eY` z>I=GGZ&W9IV3vm-tqP+amA-b>F~ctCa6kPjMW{XC(R`aiduJ!>X#$WPX|3W`C=qvhv!u1Y@ z506Bp)c}i_js};6JUi#GN`CB7!n|E}=Q$>BcZ~rf%0}s?LLu9nN**?u2-ah2Tlw#{ZtjLbXW&K zBbjo$zuGT6;l^p2j`i#onV<}i%IN(e+t~`7sz`)S}ZTHy` zB4uG#VAF{@q`DswCmkM@I?+_8u5;K2@8*2+Enu)zacK;b?{rMlS@Pal|dIBtfAFusnF`zj0eBF^ojx?{lD~SY~ z3>u>|f7X$)@NpEqe8=bX>sRWz7Vmo%RR8?Lq07)@LGpTcMXfphqWJtdoXwb^v`eDf z1@zU}^{{%?Z^m}QoByV%?A4=LtOuw4F=>B3Jew*Sqs`==0iXVgL8c((zX*D1<}{l3 zE^^l`$E=GfEL#-NL1ouc41Q~^|A(Jj)bZxyyE2Z+jJm%i-?v|(7ex*+Dc&&Nv%d2$ z!4g4_&NQR!7Ax-^%f${?f@?>tG&3b{6r>O>r z6!V|F!GF3IDeM(M%}#Nbi#jnYaI|{)Z-TnNT>5IVqpQ6NCHC_)v?BiV%ZT2-S@TR8 z>|!7SQM%DG-!J*k`?@HN8ipV;l|R*O<>wBLjs4+GKmNbG_rK%?H2oMI+Jsh?uMd9@ zKZf6{XL9W@DJ9sm=a3|P|A35l|MWe9zlmnwdKK$YV(PFqUtH;Z z|G213mgvXn+6|JN1=ZRI`TwS4xp_=KH|^`T)qYy}9IH^WE%=symhN93ON++$Wjtkw zFq_lP#5p;>Bs~`d^Iwc8Zr8+Ps&;D5Ct_+Nn`{QIo~lDTa>Vi#>i5ktQbaGjU))LL z%%Q@eTOKBBnk>F-75%rxgiX_Lc$#+PtjJ4R1KGNU8ZThO&@?+BGrs&i%3_RZ&xhhj zSZ$}MT=)%@QiK;gmV?s-w8=w%N9f;PWd^(g^8_zuANb_YdW>Woy>OfPr^_S zyNtta7anKIs4Tz#Zahs8pZxvbuJxBl2!1td`JU%U@8C~s3TF&)TC2a>2emv>sZ)1) zH(4nimKyrR=+KmYSv`5NCt7}YnWwnEmOkfQru)O0r!9ar1u#n0BerGzYvWp=WDw!yFHc1JssfrsZW7Du9VbaaxPAJ`s91L%Dt>IVJc zFcY8iMh$fSFQy#-?{szJl%7ZKwe{PocDWv)@)<$%lo{X6}$sI zf1MoqE+(3x?DVy#2vk>X^!b08uD}0TkA0;KcTRdBvb)$xU+WSi7hl_#H^G8lc>BN2 ztgKf)69i+|Lav2m;>#)g`?yDl%3P}q%>MmL{Ex5D=tYgCL{sp||MklQ8_)0H@}mRZ zPLqN+`TyBu|M<-RUH#t%|Nlnj|3(J=f7xt`piR@2F#Wwc-M%UA7p+$fk2H$y+EGke z{My#zd^*=cBZ!mum%Rkww0z=U+VwRby-F?r_%scspMNc`T&@37Prkpt)-FF2R8|s4 z&uq&C9mFw~^s_Sh&#D4=wOE>%nj_DK77?CC!O46sXjEiD|F*oCeQZvT4qEKrLM##N zow{zaSnK8{ROF3nikAmj7}7>f5cv_q=Su!c;50(t$x-gA@(ZB%IzT*pVDY-ac0%&| z0<^H#``6O~&&~G8FI?BhS&WL{#_yFdq7pqwi887%sH!8c!58kK*A#XQ$PC?Eho_IUL->T!gwpAgd5DuB6ciGwMETMtu=IG5fG`j=b%Wq?JSaqf1jsT46e z0j;MA9V}jQhQQssQEq2ro!#7==;CjigI_(x3{wI&2iN{dd8h>!+aVgU77M>7b@7h%pz5e?-02i<3X?DBV zVB3lE8+t?5?0;GD|9Z*W+vvnN8WGQy93nZFn*u4CI(H9&{dFnl71rOCm+=IyC%SREvm0C$`$bJ_oMy&6=|MmSOn!^fA7~+_^t$9$-^#X zG`zn);=kM%cy>`@nv#bqeYZCMl2`ow;r@CZKNeEp?f-Z6-vRgQ)&I7U=^*@!_vx2G z)$Mxpfq?;l@M>P>eS-5YH1ro7bNK2@YikxjDp##_HqTYdshS=y@p~N@h>2_&bpAC{ z{~;V|(tx_WCQX_BM$pgvNOT!zW4u&?LGdH=9w|!%U=-subCNC*Bx#hdSsbZTz9REq zAS*Wti{J76_h9}xO?Bv-RcLhR`+WX0=W1SIn3$NDb&qRheM>p&*x*YAR1@3o9ptal zr&gH_p6@Q9%ynTmBIToh>glSMt$4JK_;z_~l;q2QHV zOVw7PSN-uy2&?C2-W40EN6sAu5TkUF8B!sWOJ_&OxEVlG+Shc>j9}Aw2oR2|_moqG zS)+668AUFR%R{L}G#|>vx#x%fk4CDZnl~|^ZNbp9!>-eVD?#>7!M416>ZDi&;Qyin zb5F5SX^o_njxrGWL@Kll2k1 z;E`Tc0T3V)aZ2lg2HESYb#?F6xI`t^hwJ{fcl<5Y27XadO3nn7QM*35q z?_aUO@vKQQ@9xlNIWNf#W@~_~`{&-UlnQz7W>T?Vz>smB4oxUFa{YN-fNe|9%VYbf zP_Oa>K(MG`>m0PU%Mo_cZ`7}4vAZGANABkrfR)4lRJL4B@Nkt@XUO;vFpEQbkmk#K z<;Mh&gwyQ8Es}pst>{>fRlPSG66yAdt#e!J=q97?+9ylx09rd!O)0uLqo{!jf)4%p z9NPT?ge(US9=@b+)8yCLjD=;#@GKce^eioyxe>E?%X3q{gJwCqNYu3Fslyn)v7#aLU=O|5G$S| zC)RaNmZ#|7tuO*r-R=@@Tx(ExN09++0}OPX09AGyhu7jwfIzRP&-;myE8_bJ+I4zn z8_VxS6-K$De*Sl$g1RQACYxo})KC^`<iH}{WYFoyaZiXr4{17SySSB=jps%%@}T4)w{by8GbTe?>k&ZdQBsk*I6pBzuPIf{ zIdrq;SH=5kg(xai|EwYg&>F1E1+8c5!pVkmWQ+7`2i4hs8F4oA`JwX;$5Ec_PLT11 z+>Pxpgi3W^5}fMo#=oG)o$>yZJYL5taUFy+Gp*8j1nC8wg5pL9gjjNVE|EqzvqVvK zcLoleTpmrBO?4G_67H4U{0&RcJjURmo_^FMiDGfG{0@MFp=#n+;Gy3uB48YY=V_nO zV`*5;Ndnpuz@!Frg$7y_9L|*4jM$Kg%)3ogL19;7#?Ba4P@iDRju`rHi=cjpD&RE| zTVwKNVn?F=!cR^b~($e_mf>v|b9Ja{BRC#y}R|x2Y3zzkB;L>j!c@mRR>% z9B8*&#-SpSJQ~TjBp4g{<=*ADcelf`@yKX2J8L81$+{p|?y{$~sQ$~>`)1J_7WYa8 z2??ED4-)qgvJ7L|tJ!Z7M}6Bt$m=Hqyv1y#2}OjGmcc^D<5IV&W)Ke5g-BL@S_rN?>M7Y zkhiVGzno`P`v&yn&2~Q=DX1(~m$|GIeLdj5{V9qJKVPFOb}(BppRV=IF9#r=I`*F3 zyD#`Pf6=%cFVGXw9=6k;WGzY@bwwhyI(ObD^)?N<7Q8@i^wC-Rq2DQo^kI^zM~11Z z|93y?1iIT?e#A{|MlWQ!C?tV(54vj=(JVbQOG@>SjrIJr zz3o{=D=4V&>^&tLCN9YbJ^NanBH%e)ViYb5s5DROR5}-w1+OBpa!kC3oSW@K>-VQW zL-uw&muFrNL;CwGw>Ur?&marq+AbL@hnjs0zNFX5mVgxMQ8P&>M9jz9>1FvMgk?tu z_(jgVi_Y!PN!_3`D-kULQ3dU{{#a>b8k)DlEjqGTk&*o-Qd#xzjFLmRk&PLl6|v=BP5%(RKAT46nD%o$p$D#t2h7p&cCzMoA>+xZ>y&-x6`BmpHxfHxfDK^ zX8?J!{}!*4?(R|-;|xrM==Np?;eYA?v&`l}>R33S1>0onjAf;DTOZ!3g8}UrI*V{G z&wZH_$U*A6Vua@T!!aYHK6_FJepjE%1%hHXtC>0i*1taWp!D3TQNDRNnX`m^seoPw zePy|Dw8<%@j`47mzRI^2q|eRJXM@3)-*DhI@aF0FzHmz7@GH@C?Ah2i7m_j$x9*2jwDhI3Wr zYn_+6?^5xZPDx&zf@=Yb2A})A8ICoP9=Xm{BUCi1Y}8Z z@^Nf(>hLIw*@jo1*X)pD&>srnKnBJa~)Q1q@}2>)kiC_)q+&QK!0;+T3l zb5z!M?v!bo!!}q6wuHxWgOhdkzbr(gx0=tMpJ+P1It$xP66qNBOsnGZ%}+4vjvs)= zfG1Ez6G7|3i+SPu{)Vne9BzpU$@{srB{i)J$Y(lbX0bu{y;Kr;!6abO)+9wll#$Pg zRGs@4OSs6z=XUG;ts$*!)1~^Aa>NN7o*C^tM!tK6 z+=`u5c2k0<>NSoJaxW!?JU2(Q#2cU5QyY&J8SHj~i<3%A`s!Zt+brH(_djFh22Us! zC_Fq}3?wz;X+L3?LWQskvIBfO$4Xp_dB7iw!>U8&}vIOuUvPUsXN#m=IkTCoGx>0@hI}j!EA7RYI}S$7u==>@KL-IDTTeYpEZi;TJ&6e z!C@<-SiRS<)3%b(4*aq!ypp5^a`ov}=`c9RvciPf`fhMOLq zt!?iIa~yobLuw|U0$bg({*>(IKunBKpX4Qp%N%e^Wc3QZa^5~KF3Tp99l0DDI zm8JFKWtrzhY2S;z4@SmzFIEZ6&cZgAk#L4Db8>JSVNj}1USs`^7cD%QuUs8=@vQtJ zsvEToVp9JcF~gGCeq28~FL-pa*A)HSRQPd=6NTWZ(J)4h;Mkmw=S3}+)5Q%%Z;|%z zL)FKjg-Bm*nnHw6JBA@~9D7qdy%Ut(^HrVDfT$#F+N-PQFk@liJ+D6Ud2v&DM;~hUmi62KGCr3_xYh?2ow5!<9c4CC=f>eWev|0y zPX0a;(cXDFH~I8!Agcv6d()&0;DGfAQ=#oGL3>y%AZB=n)tRY$X+%OKMBU(G!0Dc; z1jsE`xU9t~cFDVkK3O_|(!`I5h&5EXAaZRAWI!!kSmwMWq8R}Ptk=v3zlIBiW!)Hg zlI8C8T(HV{$3$T&gw)&UdXH*)3teI)9rV=Id4;MvsWeXOLbq{xtsNknJX97&6?7-^ z(V7j7pAvVUMl&kQt+34$%rV-f(n`D6X4~ozZL6x{Cy2Z$(%z|#ar<8R?7jK^XF_L4 z;ibQE^5JDUwz}15MwVo1NNkdQy_j6Q0&yatNl#*B1{wpaUK8!6f<-LpN8et{J>xbo z^PX;9IB9B1JWh{l8ogS!!syeok2NRyLYUy3FG+w$exL>%e z*~SQ=z{^{;K&QWM4s{lJb5^idYQ@@(wp| zq|KB|8a+Q&!t@&0kRHqGi5*F7%yb~q6w-gKRp6RB0%rib4_@P4H zu#?R#6s%-0SPtQ>J==l_)@6_`+^9eL=zTb`vOBr{KA^4!SsDOR9!!EED_J;Prr3=d zzv$N&ScHv@;8@iRem&?fbs;^O527v{%K`}4!c0@uwlmBr-GM52SkD)fh3_LLd8#mb zF49^sy&ecK=VfB&-J`|CZPN$TL)*Sabzdt(V8{kUr#(k6hM{_~W{(E-nz&&!)%+ry zsO?Y*boL4=2oWLA{4^n~dETJP;Jsg3zw0ak(a@%DSB^IZyjfhyQ@!`orDOd7luFGI zio#nz(4bApper(8Et%)=`669v|B+i>Gn|F~^ddAYtjgbR))Q6<;4hbghv}xJE@MR; z4znJE>87L!B1d45i@)?IkTRFd@+Qw_rellvD8w*;c*7YmiM1Xmt7JJt5r81=v;<=Z z*tR(C^}sZQTplg}?EWk*r10pFy#c>Y3-KX8bog39wL%*V)5$VxzpHdmsgbkKrE^pacn^ASHq+kQC$EII9j?9zc z!MlT9#itFN{r1$WPm+t>(iXl}DRC~luFtmG9BP&`X!77gD1;E245k4-B!vbrO*X^& zdxPqac2JZd%7`yds<`gSbOH6l!hvC#Py_W0;I`Kl*9WOYtQd8l4AOoU&nd70(2^6X ztz>B1Y~2SN^6~aI2@$c*<4s9%Or#;1}LOFA$*_ue=Oh@~^k54zBu5FTNzG}nV zn}N2UnJ#vOhX@`9rc7Urrs#0ByiKA;c3CqZGjl(Y+G244u)?a=( zDi?GK%(7SFe{yadV{V$sCF%4U@v{T-D;i7VWAv2#><=dk%ih$;Qs1!HESOL96W`FN z7PmLDZ56!}{X#s8*jKF<(Xu--Dal^>q}ol1oKyOuke)hP!?PkaPKA#giXW}F>jf{q zMsuLb$?gx))ug5xZfqE{t*zH@@gJRiP-YDFPzkIW3&j}9QLIuu0bdI+G#lDq+FAk} z5J!hTe~ub8&Aj9tRv;^dp5cRo!*x>owgE$;3$va?sXC9%hp4kg@XS)N2YY)~raY-j zTm+WJw8>zlFPBfUsY;-QM?Y=?|7No~CwE7H+x=}m{oK!w$j(}<0Q1u(V*T_9X@90f zvhUyC6l;qS$1rPrkWKa8z{$I5aaL1RyH&Tg+oNUF`SyhbRd~*ibtCAKIru2V_k_KK zwy1rtddA3?wOUi?v`JdfpSfZeE86A~Mc8WAyOE&Dfa`m9Gux2U&vv$+ev}$7!ihbx z$8_$M&+b8-3xEbyq=bFDKU1eWl(h|10E~j4v8sm6tTNR{qIqNgLi-la;aR z54?lQ!awF~DuOZ)Lc$jDAOI14hJLDvGCQ>o;23#pnAk? zrhVF_8%Kzqed^+bZbC)_KdQtmTGcF>$S-IFZe6V01qb{+vf?q(IZ8UPsvPK!a4#Sv zc^HU$V=L!~N2$+im3pUU3s9$O+eUH^I%s~!(0s{$stys}iA+iq~2Q9cw} zkB+%3k4JPb%RK1hQ-McmyQS^I2t)u{)FNHj%|+|g(&&8x?s1i9^yuq3*#&WC^>{Jq zlx0>tnczc@SxE&OqrbrE%vMZV$^o?y_)WH(&%E*rDCk)eRGF&p1K*hb2DMnDL%nmr zUI9~$H74_u?S1SYlM@+h2)Qu)eAXYJ84-3=C)(G#!$&gKNdI*_7|3^0qp|uXmgZUl z4owQe352z!xgIO!1bOASfjFhqm$j=0u(sMAMch>=hJLlt{Yl==`ZgzCi1T)sG~$xl zY`gYPP2z<#*q41uC^KEW$5-u{GS^`J#_<_Ac%9dddH^$5jS2jFY9^$bO|?7o?ns%<0lDX>SxNsj zjH8SpZmU|<;S?n&TTS)I61XcSTF;^3Tb`lQ5&?&M5^zS7UI+z`eOdm)!{a`Y{BCLp zo1Tuqn$U%|O8ZC%*oie)kt>@db4M>U=_Qg*DC;I}^H)p=5bs`5kY!=HFqh*%GNb2VSWW~Y)T*Qen*(nLC5=L4LF9po{ML`i=uuTNW zR9Je8%cE#QjB?g)V}(2(P}k`4*iKt%1#LPtoh%$(pw0?Wm;!k3u^@Dk@7Av(NFT61 z9bI{Ej{pjj6Zb7aFn?mrmU1=j*owCPS?q07kT8X9nLy1C#~ZSN+I29A z#%k}IZW!wc>uAq~K~sxOG~Byd*}RdrJ&V$yo^H-!rMu~Qr8Wv@oWo+N6cGy_^|>B^ z4+PD_o9c;wHbAvXnC!D;4%xXAL?K|a+Mc>Pphkvd|pol}8r)~|L zwHHJOi#zT2W2!d!-)6TVthdal1z&!y=PhYkzq<)rEN0Rh)gYbnSHjI8J!&W?{J^Xs zr&+860>G~lw&g6Kl&mrcv}>4&D>LuJg7Q|)8l(bUQ9hSth2%3rVvRv$)q2tSa~6ry zTZ8#yFrTRjP)47$UI;&HR~VH*&&(zLhDMQeL+j-j!l%6KhSjxqSbeL3YhNFMyTPcD zF{3UyqT!4#%i`{JirhvnuTAa~__?1;687i#?Sb}DQ2n`WMIfjWD*?eE~(zU(lQ?f|OJ zG=t-U|AY?7Rw;4OQ53H_ACc?l)Ii_>d~?uS(71?se;YICYE1hKd5 z%ZTbe&*wh~B542{$`3re$jL1suR#@CMaB!bR2xi;8oISpRd>Z1LG8@-`g6to8v+os z!ouN2dyX*h(<+p;sJN30WB(}#?RIIUhi>Sihzf1l2x-`-D}lD>Zfz}w9_Z> z1~X;Bn3`4=Z+#UH18nV?RwekJ=}&zW@K6FUH@PH`}!O7_flt)0oJC~ zBcc(2U#p(7k@q}b?a@crriO61KvAe$51X;&y>077mGlYv@4DTJzG3Fb*?56%=cP_! z@Zl}U4X*(a0J~tI*{C-l-ZiZ;TsOwwKu)_&t&j_X8>kV~+--^Yk~z4iTW8b-sV`ck zWm@A5qv9wUtuSLST?!n1!oFoW%-`3W_hR>)8hP9TA{WhC3c|$Abjv51RisQ^SAT}O z@l}C#csXU%x%FU7plYvZ*mPVfT=5U=-|sbXjpO%BTZ*TWosCni7=m|WzrUw|SBXiO z3Vjxud1k{|Xz>xU632^n?drhhBv@_hK>3-`7^^)C)#}DDegcbl&{kAcHQ~&r< zxFQ70%c?4bR-_HXaQr~(hhwD;QI3=1&Ggag zcOA~4JbS3WTJ$6n4%)lilg@GelyLDKeyS|9z|d2GJ6>ErDI-iN&{hYU$%Tp!b3^k3 z0fE~ccocp4>RlZ6hGYMOIvBM)dwe^Iwo?nn@mEcy_*_YJV!R@&sbwlpm>Wo^(x&pf z(!19CvK3vY(L3;9&o+RxpgE(CK3h zXfuvWpRWJ@078j?n(tvD!rD}E;mVfMC9)=~DO;YdBH zTm-V8-4!EW_+VC(-jM&QWjU5q4=0n*)dewoU=gu$_GLPot**jr;lP=@LW4xlr z2`m*gmMy?OcklV+pZlDw-rNSJz*IF7k;6-=%PvIX&RzY?kf-JDm|O$SL6*ry{Eyz5 zKAY)OQ{Z5}8!yO!0-~l9L)FN9#WY1}=leHC#-7(!RAop<{`Bqi(LPB8* zT>O4w)V?@@XtEk?Dr8V?-=J{GQelh^5pnXYILr8fqv52IYl%FcF5 zA_%|hhwo*KAcLK4iHQ3%!W>!~h6uveAeqx!KMHYy!MJ(4IO%1)Xwt zyT?7}RoLxdsxX(MEn^@rU-X--%mT+L?GA+_B%!>F1&{D zScimMF=tG{?H`Iy)DYG%t^`haplQ4RMJ=TyjaPF3W4|0;Q9sMwxSl48jSMtm42^N} z-)oCjcr$!8dKA9cu?pFnEU4rxObhnb*_F=`sN)A5o!f$xsT;jSpZ-TwL+xiqtex&b zcS9|6;PIC`gP|<%>|I~ zPwdaSsy^uzGUI*RW)o1}D9PJmbxX}uTJqM}{Js>zpeLmufZX)_={e@;cJt{amW=-j zkJDg|v(YAhhKKwO<|H1wScj$*OYU5!=oS49f-z`EUHRqt3GQJ25lnN<*Y}LyVcBGJ zAio;y^$Gxfk>dc9k1cA%toW&Yw$sb+0C!?9p`3EcQ_IG8oG|n<;>CfFc=>Yl-YiswS6&jO~;~cf`Qt{^|hjA)B~Q_Xnov%J+>t7iEe- zPF=bnybp8ev5n%iRCv9f%#K2E7n^PxMgNcpQ6st25CH9;dyqj!k{m4L!;vJ=T4vd| zJWMCH&S6wK_=EI3#(GGE)9+@`d12T~lu7h^v;7;Ug$s=XtK7AP%Y|YGVj|Ma>W|nH z12au6qc2!R_j`epAs78_tn*`u5`#2{`DgtxMd}P8NPH{Dv8UBLORfa~^Cj4@08wh1 zM%6AI|s~0f!~_J5V5r z=Z`5vz*n(W-^cXeBiQ0IsnN^c%JoJRR>z=u6YQe^>$D^4V053FAM-8S4dy!bnH+9&ZqxmgPzsTHv{TMt{6OT+U?$H|+U5b-97%kT9P{ZQj zwINS<3;7gxA|EJXfnmO%OfTLbE21&=8skhY!}$v{exh1)%!D$)3BLdZ;ln)bY~1SV z9*6C*42b*K?|S0|hy-XAb9sF#P3G7uUkij)Cvxw+Oi;~HVg-7C6>PoiCkMQqhqa`V zN1IRKR!zUW01UYHzN+2(jFl^in-~(g5S?Zz}2!(^<8HHRLX6~V=yP06%mN*i&H0G zJ(fo=fkjZZrLPHl!|-^agwHoeHP7{fM#D>|ZuR@_6uuMJHx9PKNAfi)Kd$izK^j1( zleMH&0mZ!bChz4_K1zgyp&?aQ{NiDi!WU*yee0QiWD;-i<8;a!BLqEnwUfN4EgRsw zX$wx%K}4BA+AiGQ-<&wVj9wnQHj?*lhBW`7_+`G20r$F$TDB5tiugB}Rdb}0T9k;d zFnFZarBP{iif(Zax~x=JwK=J03iJV!GT}+@1B8=L57!1}oDFTuLRX&-J8c^7yN#sf zk{a4P0xVcd{T=Gt+h#mwtf7socZD_uTz9dH21A(~cBe&I`Ics_6z0uUxx}dqrwyUn^fPRN}YSR$EUQauN0A zFPASDH^rVM_f}Y^!cPy@3r{KRZ+a6VpbLM3r&}x05nYN&^-KV1r;YzLRy3Ex0Q2Zv zu<_|9z~`S`AWbnmy*=ZPBeZ$sEpc0-wi^zZf(Y5eb$?^H9A;93$dQpVdS30Y1b-XC{?Z_y!&a7 zdO3PSw*Sd5h?E8sN1a{WV59kM-&prHw$He;S-JPImclE?O8=28v)(9SxuxCM^0me( zK_g)HESCGsk79CoF6BglOuP3zR}`^s{p|BMk1$5?@FlC3ntU_6a^T?7y8=dB3~HiEsY4*Ws?bnMVFiAVP5YT2`YY+unXb92 zqg1Pjc*X~b+yLit0D3ZL4saRL+|V>~bZ@HfXUve63s<8H1GORpqBq47wJOCSWcUq- zm`-t$%h~u6?F1Dr(mnIz$pjNlqR69zA2ag%U+h2Ao3@4SwyZv17KbqEyzqazkKS~s z6&@p?Y_HQ~A5g$aN_>D`jHT}V*y2Nl?Ln1W9Q1QLP8Jlfcr0iRa%fBem-+8U610Uy z1H@#xE&W=v31m}}Xly*67k9_f<|ymZPCGT8`H?f=RoM|Cc0DVQFAg|^0UpBMz(W0= zn$dG_`Cz=yjvL(RkBKW)PPZ`uYp)yfoT}PXt&k!7F_{%Dt>+7zuYj&7RE&lP^p#Y( zTE%+w93p`R{#%PX{iPYCb?xt|SRJ?>=o1U)hjV=k54O&RLk_)K^v0S7GIQaHs?R$= zFxh3@Ivc=r>Dw zm(1vs(i@s}UG48h^%LsZ4<6$IN6)1ex_D-{xHtoZ4>_PpFR+$%&HDfx;3lIOO(1%n!>Wf$mH%Gt~~#YyB}=1o?4O5gV!KYxBKS9>_=%wgL>v+e>6 zm~V%K8+9a5Ps^Twi@E)7!IqR=(v1)h-Tlh@M=kdTjtU@Gtd;un!4L-AKJAlPg`?*% zB?HhWB|@UdS*hk--QUc6B-2x&4)I6TTgXs}xv;Ihgq+kU6NYHT>ia_GQ-_;_Wd{PI z>0FN$+TR##HLTeGIJ0+10O(PP|Zqc6-{}AhlOr5ONGi0V>NbR##Fjm`NUn;|{>xPa| zsn+Y5GVO1u?G|H)HW_D^b!%3Zfu2en!N40Y`M5k9hwP)wQiz{^C$3MW6OhaK&G*$u z|Djm*POI2~jy4W2P9lduZoQT@OU^GZid8}rBxBNEy6HS|9w(r7-?OUIrD$`S^nUU7 zYZe4dUnyCD&4AQ33g?7bCUQe+X|XoCY;#<5!o#MxvX2=vzcaH*B$AWVqzJ7R8DM_3 zTKFxpN3fuSKAhC8jVvY=uXIE_XkCOMeM{Kptkxi?(hx&Q+wE@7!PQDFz$pqJHo5XV zC+2uJM2F$FNlAB-2%=83nDobH#sn463DDE6vf6TqoVH&;eI{e%_gFKY!4rPD{aELu zPYz5@h-NjqMlSQIY z(~`>}+)Uu+aXUo9W!d@z%~-7b^zX1r0ZQ+)JoQ{#bb(!MQ|Bi59hEdupYR#r*e!XB z-gpKB*wF_g1;;l^2FA)p5nUL`R)>*VhW3w!M3P?Ed3?bj@FZ<0F#><9D!EXf-Kl&LNml35eZX*P&aOI`Q2~Q6++Ak(4gqO3V|MH3@ z1>m|#q3IZiC26HHQ!rs9v#!ayxJ=$M<99kWn5F5M5oQ3hQV9f5j9)(XeqV{7g3Ho2 zDLIwoxE#pA(rk&wd#uRAY7VWt*2n&4Tz;)vI!tWw)=!iRbr>NGO0h#)_F-?`a=3nT zi$!VfqgRtODYEI;(F|!SR&r>vOret6XFHdf7+LMD>G?QMXAAQ2_AGiCsqB#~sYU0K z7ZXjYqm=q~sMR|C1m`Y^F+mn(O)uSxaiTrmoz|QbPCGE<=N>7#ODyAdsP8&$ucx%= zGCF()?#7I-WUvzBRR6$46ip@`@KBu9E7GGOL4c>SHZj*D1!j~+;AZ3wNy!jrXF*O? zBkGJ30qEXEtSrLn@#|S3sLDLLLqI@8kFGf?M2mJ3_v0UO}ESeqx-h8VDOBZah zHzvcwLhSUab&4aEXw_<+vm%Z@k&Yj@jUEC14<~fYd1hbHEzwhw8kEi|M=4}UDGz)xR+FcF4^AjfgqPi~Zl zQ(5R1E;G1r?t9D%c_3J;XPwJqG?-FPx(BaLg9qJvma{bY3e@vx(U40m+#(O? z+!+KeWio8{Nu-<4$l0KBM6Rd|nHZ``zPOfb#PmP9n?^2YYIHJ+6?8~*7hEWRu6(bF zKA#_Kyq@BNT+!$6h|-*zR1{2Ce=&<6XUyqKjr^?tToq{h!K3+<`=terk!TYx&f&zL z)2Eg@?{cD~`vuY-{G?2DpyOExn%nLDAQ}>%<)Ne)PTEbWOfsX;Cd9`${CPG!m!EI< zFe6|e)Qlr@b`TeTi;St~)t=%#G`v&tC%aJauv zuCIN5Ca|yB{vUg985VWc|BnkIhzckvAfc3izzRs0gn*=UgHqCxLzjVcgR~$ajdX*H zbaxEhFu>3?#P7`Ry{qmn`@Nt1uj~Kde&RL2ICDNH-shb6`xOPo-Q*_F+D~>H1CR6Q zH94lSW#hT-&e6G=mpIjaEkc17;(C=|1GbM^&USDH3m`iz$aJh8#jI_V&Z5D>3&7Ee z$XYfi9A)D(YJ7`z&jv^R`5>s7B*Y(q!7$Fn(8FMH|xRnL8G#Uvx^u=vlm~??#n~T$+&fxY4`C`EM z^iJQHC9Prn!LIp-uevF50|k{4S0q6nnL~emQzC(<1USV!i)A-sjtvy10LqVd2eVWo z!Tm-O$T0!DBvaw@h9}5ViOt41H$9MPzCpnwYNz=JWcJVW>G!ex{na;Spk=Z4q!`(V zu$=n6VO=^~qwWY$YiJ>|t&ITkPnv>7#@$;hwh0)fQsC@LZM)bZ0Q>w;jsEF(#^3?s zwLgm?KQ~YaaKTblyEpnO6fw*+LiS*sEtPvPWSTmRSJjeUqxk)}(-Ijtw}u+n%G%-o zThIJ9D?pnSoM@IYz;wGQ=XHaaRU*xgAUDZz!>{v?%lSp0G3_U0O8x!7^Y5?X0ax{v zLo(q-ANI%8`2ACEqB7n_`)ddPbI*HHfbKb|m%m6j<}d&2rrOurKlSb(x2>NWfPBlz z)thQF81GCke#eiG>{)-U=|3_h|5wAO#lf2ee^L4_+w+%3{`@1F$}i|Ye$(Gu`sZH- zQPETmy^=}(yI!U&@P7DLj_3uCaCnQd;8&a*gFiglA%R4A6P!Wi=f?i5+*c-z%sAcph&7549>Y2=56 zoLt#H$Oq01~N zWZx&1ge5AmKT&jbu)qVGm9W&dkh>N3NoU_nct3x#q>3K&OD^mDu$Rr&wpgZZrwD*< z_lm;J#zf&ieyR{9@ilzcEhp|G>+lmqw<)8`Tdmp$LvpNqM3q0tXZ+M?>h$_vHgQ8( zFH@n-`PBB@5XJnjY1b75bgwuS_VxRYG7W!GOyDQ7I75~Gk;3F9e}!30y!|Ygt~Hrk zSACRGcp`EChYq1u^{T~c9got|BP(?%j{= zzhF&(l`XLaR(a~--Ag}>^@ZPbhzFK#(v7|E-}W!BLS{jnme>-xbm@n#ytpZwbV7P> z1&LSxudU*@kVV;e{ia&ztk0!O|I&c(eLgJ*qNE4wA9SvNe^?!Z-W2Swf~#o|FBm7H^KiNHvYej;2}d(*M1D(5+` z%FW12y8S&g6)m!SI%DJ|{r5P06T?ftIjFT@hH3$nj^}|-vGquUM;u6`$pS#`hw8x` z-}#Q1ojQUCe-e8Cx+76bf$-+-I12pWB1Of;5yd%L6=A7zNs}3g*UnLq9P9oJeTA1* zWemD!8c1@d3qku;YE3U74buv28C;KbfjkGjR(XLOKY=e}y|L@;G2OwZ9e25nd_C#& zx+90Y-PH+k_VQnK!7V-Fd*?lQaY)Q@xxT>Drhu`+(HpG`s6RUN< zUMFIffI|>%#Vbii@$cQ?Ho&GyGBD0E;zgsMBuKIHjcM1qsw0JbfTb1l&XNaR z-C3#9F7F$N(`xH+-xm>HNx%j^U`V|1;zNBIg|}cf3&9AV)s1Qa$y|ONZ=2zWlC%38 z&sxK&89%BEKM8QvHR?>HqLWLAKwjF7ZHJ9B71D51yF&$ZyyMY$#VA9s5VD+!btUo= zMd=Jw=B68f%*g}93py~!o@Jiya^}6O7V5>z#=*)aeW_p4w;cBdqk#w8J#tue(#wxx z0NRwBbSyUzu3ZIbFSnk{T@eMOqh-@PFH#p7j!$=Aqd#p5AlBY{@Z+xk=j21~u+%JG z*$f3QKrUhXm^83)Ty*)F=}@(DQxNgOv*z$r#vTBNj^Q>d&3+B|_2Emp=J%1A0#Jc1 zUu`J4xia@Qduk2CE0wyZ#097MhM@HdmAcn#N)rdTqX&2zWxcwV)sxu@EE4YyM==t0 zSh|kAq62swY~|m&i0+B!QjiX{qn7pQ?@pb*%5#s*~*Vd~TJVw=SAdKLpC34~Su<^~w(k-s`+c;xl|IWP(-sVe6>F(?Tug z5Y-v7#K=-N-yeEU>{>gUoZx~Y#b26m^QyMq$Y!WY$m<$IfZjvzFi4*w6-2Drn(Q{k zDU=*zDI_Z>2PXmUqVA;Wq=HJmjy}9^>se9S%9phiFTydR3zK0&+qmTntSTqvuaeg$ zYv@#t0G6RmiltW1Q1pGtLo8gGkD$DlDxWOOYPL^g1N5hmq%I@~3m`(Jym#sQnx#U* z^)jwfKl7@zr-%S(y>|musS)b;Q-k_%gJ73h4_F4ssIKMKzcPee0z8I3b$x)Q8N&;y zts5+~nsSF3&&UZ%He;_ZfKm}}>7f4dmsP=|0JCGx^>$dGP9)f0xGY6z{@5-4I{ZR? zc;yVJjI^>R?Dt3cUH01!rp_r3raW}z*G(e0P(iE-%K+9=$G)OC_uQ%_;_;e=C^N4P zWT`8X11zb+3ic^Ttl{6^%*4#$_c*JDb-=)$qotV_534x%6~A9V9;^=p2&YeheRB?F z4*>p`=i4yBzU+QLmYfDnbc^M3HP|5~&r$yQC=G=6O|DZTGKGe$Mkw3eK6$kARQ zdUIQG0169U$Lt!XQ?|G8!Q{hRBX@AuU&KADBe8vrZ~@*r2$NG!-|<>7@s@X zcUDdD$lP=Q%4`w5<74xHK2!{m>h|g4@P^}Mko4t6UutVmAE328L-JO;D}hE0v)NEi zN(P&pZ&|}*e~o*%5bp2wo{!I_~i;Po`8;@44^ zjcbVZ9$&P^4lJIVh?E zL*&Qs285gY_Piv}BC9BzZl>sT+9+vqdK}JNi$v_&1nwwyiQBmby7Lwy5E^~7|Vae&D>g?@R1jAsV>`dXIX`RedQtGNI`XX z623*&u(Q}14XRq@jqu#sgYg4TM!Y7|9qwD7mmltp)IB&FG);Hwt2OCC|AWBs z_g!P<`k{`Y?6I4}o;*vs$I+e#bF3v$`Y%P6zG)pvrM}Bd(cChoqQmdrNyrmhn zkrK1$YC!m2L_L3&G_gYF*WiN{3ig38!Sj=L;~GdKI4Ra-r|NdalY0@sgGrcN4mNg7 zkn|`nbd@_CUe^HYf765l&~dEvkdj!2_4NnyFss_VQCY^_Lz0$)<)uc}?bF`A(oU%R z(rw7NS5g~LVG&h{nQOc-C+_zIWYfjJDZ`H~#3?<&j6kv<6PnI-pV{ zgVbHAYIDA^;7CpyOXqR2m9e|Fmq(y9Q)4-tH-RjZ=dOZNR-320+hrXg%-z@x_POj{ zSRimbZy@&>HSp$M!+q(Jp%*9L^rpY|IswD|VE$u4Vu4w=BfT}X3fIvM$&NX&a^@j( zY`tiLf$kn}Ue=448#YdPv}<;19>-_YMjh)U?kuP(q)I$r8T?c=@Yy*b5kAMt zQLEUdFd3?Ti|NNR-+PLbQk-q9Q?q}KjuW||&FhkbvnQ!QB9*+)udq&a6qD-ZbQuFH zsy&(y!{L{?v6a)5C&x#3I$WF@{p!e?9qxBcbU5C?SG$$DML5+>eqbB)ZAnD9ZmQwY zJ35&}+)_B+MiVAKGw$rcJD2l>sAy)*#b;z4cCV}+nK1x^zeu~4K6Ml~a^CW7(bwwC zRj0H4di^7QDoAmn6(ND-T2fF zp4UAlm?Z1xb*?&CrjeO4W$x{*&G&^MUhxeJ`8CPJw(hR50eW%#em+rCl>_XqzQAo* zF;6NF*3*~$c{SCWeeK}GCwT$vCz{>ytdWZh(KFMq-Ig8b>Wx($9D2JO1BcisAskvl zlVtg_pw}Nu*LM&51So5@`#1ITI(~EUA?exN&dyhVOgIVq_4EXU`6wciT0p3saf@$Q zd}KOVSaM?S9U#mUkT%kI?=*(pZ2u0P5=RT&=U;0wz6O~cScLuR!W}l(c{)B|UkRCt#( z^3TFk^0T!q9}&mCV4Q5;-_SIN7G0R5qTE6YvuL^|qs(vUx8ph_$G25ZbF7zukt#QJ zCZK2(FX-_&T^1-8)sAvaZXaXp8(Ed$*Z7ZSRvRr2xR0fV%F2pmu=Vn84ss0?>U|Z4 zc^}~Iz0i3rUxt$gDCr5J84j3f5ex(iv9Db|1zTuu)428`-7CY4ytoBm6n z8QhI}--Wwxt`l)Gcg%;IgoAnN9=v-SyOAes?p}Nyr#HX&0o*u-)zELa*zh{h8TBbf zH666n>VV4?D1YV9_wq52B`!ypjQM~gsG8XXVzDQl;i8nE7d3T=`DMmMkAs>!ui|va zIcfmHOW}*~6{%8z_|(7Fuel)>KB+qz630YFT14j^*9ePZxeA zNCA`WYNiNR%2cRO^|4paxD<0R0SQ73)T%t}mt9t(iQ}+xNDzr(O*8!U&|0A1murJs zC@uX6axJR`l#s`554074nhUqX+J^@xCZWJfc+^<#b;ke=WXe7RT;IMLCn&x}*wMIxryIs5P@kgQ9VV)|4zg@XukaFFg#Gc z3l2Cvd5b)eN?LVsYW*$T(wR~H(t{lC;~2D*IqzXyXN0>WV;G1kFPEtki;I({LVY(S zO1%j1=-gKCFDK9^*T!Ifqc0FvJn-0A*K*qR2v88y(2v^YX()2*hf%P}yClTFo+FxqVPz{5nvidnMhkTWBB| z!-lX0*K(tmum~2U77v|Ve8d(-P~>=pZDTfLY^Yub#+>WEHQ>CpyIe*{0wRkR3@Iu$ z;k+9GaKo<#SG;u$hOV>c$J8gvKlMVrlB!X{U?VeH2tdK^+~!SvnTm8Gqhj90C6}Kv zsN_&0W#6s{p4|u1O!j<3oKxK2vW^WQsGNENqNL70qzLO#3BDxEI%V*I2=| z+5TgZ|9Xw9Z6HZsz8qYrDuj*pdVo0 zNfJ5Mp&@V<_?P)JeyL#6Vb-~w7=gH<>OI00!1-T>1nc>`P>dr8*Y=AqL^nv>@iHJ* z`(nChs{UoxisE7CrH{l6<5J*~6?=nl0hx)}7#!M8m7{CsE_gAt#$qtAjN`hWNnqF> z5em$kq$=%J_=bk7_f&$H+z>dgZsdG+J3mEUE`v*bx8_5AU{6DTecRc1k`+cPL(*WDkG@Spw&vi>$0;KZA85vFsX~3j`9i{Wt?uB z^Yq;mWx45QQ0S@j3;bc#@-Aoapo>D#ogIunu18J^7kE;hIRO>+G`HR z*PqpOqdhM+n|c<-gqZjwpe4sHeWxj?_G0j-tjU%Gyq#ExSadq1iIqCwmh5_KowS`N=*qz6M4SDvvxa)e(H1W9 zxjppI_5A>1Lg3(4;BO-t@Y_g2x$ly*=p3?0fo5{2c30KRckx=vy%+f+cX0r{AHsvV zPd~&g6TcjvJ9~!Mh%{fswt;WIY1Nof8v3B;k32J)DA!l&dT26eSM9wr{}hAP6yT&= z*f^Ib(M(3CumF%BOV_fv%r-)XGVic!eha2Gs|SnHFz=|hqOrzb=TNEz7n~)n4*)`% zE`bLU*;w}=6zFtj2cm1d0g5%PioS*E%gQW$l|7Ncj{q~ znMVRnvkOvD4=DCw84Q{(O&5mIJZ%|hP4Yu07^C^p1PE*80#ANlN${QEZ@2da())M5 zkq}|-o!Rh+=eCC})ZNhAYIRVm+CR+`0a}2H*4SCE;ICb#w0Mm#zT-+>qpk`daK5Xz zQSB7;0bIk%m_NJZcbIHEVDHyxUud5+`xYDan8oIeLS@_vS^OeqcNmR-05N}GzcJA}>a_NI}Djhbfb1QpZ8pvBJEr@%}5q|_JY z$D~=tW9jS@GnSr0EO+*lVdw5n6D%-C8ue^!WRKqD!O8%=NgvvI_7k$pkrJ-7jSwva z%)@o6o#dCH!a*o)e{WroPmhW1J8buEx{wE82=wVhJ_mq9H1#BWGUJZ#!!5`;fO~TgS(%EN{G8#A;V-4##2IctQA90ECHIAjc9cfh1fVJn@$i@Ke`Vh2 z_ZhYS&I$Z$;*eU#YdYV7CiF}$;VcH6)V_YD69fVMLf z@sP)&14F-Aa&L7o)%YM!AxnwgBMvP`aG6d`G{dVWNxmJ(TX+K=vwxao$uewOX?wnF zU5N=KgLgkq6`O=N+akdKRbCgX3m)u%#oRR9FyZF_!K7axTnD~?D}lTr6Ijf5$2zx|jHQ1gv64N#k;V)TZlR8K z(4{-A56vmqdh}le`oD4ZIN}`!X)6t{MlFY}v+ z1V+RVPkuyK{FK#^AV-zl;cygmSn5t9swv0sN{P8FkihpSReRDY!`8uDy~wy7T(#a5 z=fC3IhxB&RH@vIUKR;`x=v&_7oV}xzjIfupUx#yTp>*qE%4Iw9b$j|dcl63@>W6<^&S1$x=BaoBPspFyCTlr?^F|4CMq`; z2I!Y~;YH{VBV~nU%510W-4B>6qY~1qt#hjjLx909oS}KC)&2o@qBI% z3^zO_8w51*z8Yf|z@kk^N!Nx#QeB3b^GxEZgOk+em}-;wkumxkLR&XjBKSG{;q)%w zmnJdcn!5O|XD|lk-46Ct6lP!L>frT>vTv(I%}BJ{->&}1-@VtSR5#2y1Y#oGu3RTE zH;r5c6xkbX)1_lx5V0{$S`G^D%8qGQIk*%Ln>ATLArYf&f<+2)E;%=L!i!B3bSsOD z6WHkD`DSA1>vbWZV!|jBSF#yLAexcalXC~iBZmPH+|$@%lX-BLB7{e*PZITbI+*R}g$^pVmeT zF-qFskl=Y?Z*V3!Kj`NkK|D}yb8-d(u)||ACjuam-36~a%()NJRdb7gi2W)Dl7AyT zuvBhUzx6a8*M<9`K=>?g-f7GggidLhpv!(vF(5S6oDR-a-Qr^l2>pwY~l02nbJu=%UJA(q@ z%s0V;Uxqkcx2|L=E}_&}oaXlER}sN$EAsV`eD9xg&j0z5(gc%BH$hIr&2G>C4men8AyMOkE(ID zhf?`S8rQUEBy3DZ#;q6jVk$b86=)Jo0vkas#05apYY&N3=(u>q%90T-^{SIT87l$-0qp-=wxXBpw z66#i1t2u#xL3x>pa3Ci9?9GnTD68QeNZG5Id%cuzacNF6%+8nFt}r)~ef!k6a{8%C zv(hf+QD{l$tgd&vTKGV7SfZ2yed{_KeTZfO+;F1#F56yD9Jt|U4VvA7WPY{y z^du;x@UgUDc+VVDvVhCIt)rX12QDvyW`w5baGkZdu*XF|=O|^S;NO=Q+J^_XKG}s? zNf{1rOd!FUA6>v=L&4*Mem%i{ALAz;onLpx12oY*dJsMOt6$brKvL{tfNz+O(0JYn z-LDl)x?hA<@_kR4_sbnD0CP|#Kt_dxi=KNK7!-3(5Xie`ndAU2M`O`|Ve+lAY8{yqGu;?CC*9K+sjf3o4mvO;N- zCB0yPoR#{hhn+BH2)2gTJgy29QjZfv-;mHWgA+>Mvhgb5X>O7#Jpco&chKr2{D84)O3OJo_6Lw0;GNgYv!{OsT+UT6JxnLwpi%FPysEJ(mE^?=Gt3!AY`-pmGM$Ug1}D zlNIzL0KVr@Aid+S^I-^NuAd=gOHYoLbcc3E&dNp&Y&Mylecbm<2dlGlmq?Tf^qXay z?L$A0*SG}pZB93UWbo2qk3RvDC@MDuaj(H4=euolu)CLqkS9x8XD|4q41?sDqfavK z+4rwJPqf(d-gPbu1_f>xPE6%qIG8Qr5uJzMC&jj3^Xnd9pJ~E_}dzxl&BDo^&iWv`Nk}p&B+yv-=OUt`S ztm@N$4u3EIX?{NjA3MsLA}G4X<$!x5%W?u^;S(l>##gN%tUC;N&eb#n#&XmG6!*5= z!9g;p{lNDPIT5zV!`>_szMWzu5yt+c+qkRHJ-?jcg?jniz6PykugBD=ojS~$>6lkK z*o0`^f8X~)$UulIns=N&WoWlJ%V+n4Q=Fih&pY*(!4^)~Y%d!rCwP=9og~m;66yMa zxobGfK5mXDqfJQBTdUSieXQ7mh0WNN)_JBWGlE%rEY(GDt!Ncmv14%h4od-f+ZOgb zdwh0;-W|)!467V7y=Lm6exCKCRiW}(2SNV zs}$gsCucra`qIoG2kE!81wgIUK2%%L?qCI~dv-VnSa@>|wh#vbUjYvt4)c+hO`Qip zZVU<|+>}jUzGxa|M={MC<9QbKn~@O8z)$O%S0(3$NhOcA7Z!42x)z3YJ&Kxg*SVdx zm5yNf3)_?RXSm9RsZgDUq7U-=_xNgd>Y`=Icw6-MRuO18D}>_GO@2Bxh{Gu^uOYyk zYKndL)#Tv#C|M9>f5Oa13){e^<%XIZ5A<)O+Voqi@_mo^xZP-JiWRd4GCSCxXr_I& zW%=g(8QLi}Wh4_``xicNObQ8@>{juIt@p6Cw6P+293o%51k@fqw~w!9s;s zb3OpI^k$0G2`8A~v+h%qoc3WIO<90Yc)+N7HrMX}ij9SaFcq^l^rT34hBf-f0;hI< za{iYwu%A|8lNok=4mGO0JavQ(@Dh}uhP#8z^Uubd9Wvq!)assfPrB8MKdZ*NGWwM~@px_SnzLHad}kYuO|79--RfRni1$ zg~{8e=^#NV8OvTPEgSdo3f9R;3FGtXZEAv|#Ev^UJ1X?b4nbvY$JAWBFenzd5yOpQgY zHvHrZycIg&S@Vb-+c!;ws)EoX(dz7Eqty?N;c;GV+{hi@TSs@|q*I>g;q}X@TGAwK zRZlRI1q4m-IM-$b3E7aDhIftwHD>uWPj(k9dM%bq)rZImv(WhZcZvGXcb#!L9|% zEsQPOAG>D8zLOrM~Esq###!1VM-)edS!H$xH;@J6COU~6S(Zevsr;6sWC9quj95JNWJ5F z^cXs1QBJu2djIW(A@HUaDhh?#L;b}EJ9aa7%d)^p*@0KECWfpN&qvG;-&%7WO3Ws9 z`D!(NR|sY1#7l~uMK$%aZbACkfq*N{Y;>Ot=Qp3*w9*h|R8?ZDZyv+)9V0d>U-qW3 z?&m&CLCi~n1JyhCtGE(YP=4oeOG{}-h`#n~HFoHmGIiPUy#>o~bl24k3aL|P`w1oo zUKXp`>b`cgo7L>5qO&0kmW)O((gnMGrR|#Ml=ocYxXv!GoOdXu$gV^pg~K=2tbL%S zM|^5i>wc|9QJ{8Kd+J=dj3p)Khpt?GzQLQQB%?ql-q2sP$tUA3=7%D5GXml%6^K0Eh4ya2ofRO+xCety`+a?#7)>&moe}FMdRd75gZ{e;$@7=_ z;^XAm?2vl@w`V+b)yu-~vR7Ym^TXHf_IFyZPOht%7@!7gU3T>&WV*)`%ULAILM479 zyvRrm4U(qN=(k~H{4&vqgP85up7@bXIe*iJJ9%*z6^`Kjq!^*NzBDQ0m%Lt%%!V(; zPl^?Oaiu#l89wdH5$xjh@HjANJa{eWFkQM&pG92u6nZ_Grsjnl1ph_>!H0< zm!Guup}4_m`2%dBEwVjA z(tHhNw7~i`KtfqSk(PYRSoa`aw=o8QB{}?gGcz*^ z57jSq_Mc+3bi@=X=A@%wpWQYU<4hI7%bhBCJd_s*Oqq<+3W;AV%|0PII$65g)0Kwb zGRj2-VnktR3rq%a?Ao3MC-?9WJcKRrGj`2%obb=Y3)Kp+#5-J`Ih}6}?<<=+H%KHN z>nM4-sTJMD*?xL36*mhBGUJEzL-k)6jF)3>FYM-vUN+VCM^_GTKUGGGF~iK$F9aWX z3w>^U<~3AjJjKiR#|?EQYtNngSI1yHt^4Z_TZvjz-tLGh!W98% zW$EhXX^3r*;m0*!^q_#-M=7ox>pS?`eN!TxagQRi^C}f$IZPe^&1c-s*jbIP1YYCU z&!ZolinyO_(Ww_Z`eK#a=6>quIq@;d>M_^Fzuwq^5II!{)fIG5 zL1lBlL4HyVFgk3VZg&Kqhe1DHBV&H^(T{ya?Y)rvwawF;5k5>Gd2_w6U+dhyA4sZ8 z+aMl*+gUt|-}$a^^FVArZO2ZHp;IVrw4fMiK=9&)!+WFlr@8oyD$?izob?$ZA!(&d zix=V=4|M^T;heMx$RA6H>vfGgZFiQjndjz}*+nNp_CvBe!+$L?9gJ{2+NQ~K1N#p# zh`KR678uUH z9(Wi%Y;=XNvG0Uo(`|!&Hsve9#T^xY7uY*;&v6wJT}8|FM3=Iw+%g)ig6R6W^=xfq ztLD?v_z^`f1GEjG%3CVt!u*a!w{l{pBq|CG6^k2y_tRBblv)b!o$@O{%?3WnMB%}s zY}E0AhG$)d-pu{LZq+Vf+*%XTYjQDKtm~%U{g8O;JEPapymj=D#~&ax7KHSSN=X@V zDh|fsKfLsqfL!t!rq}eXX~bQ}AZ6L*Omxv*7@~aFEhiWVTWCZ*&}IMzmk%41EFRWn z?6(2&uysp91|@lL<7ZONQVIn=kWc$*Wm4Twox?yFh_9~~xG=Dn-_pB(lkk2})#{&$6B@(LH)}dZx*wmp8{64bmAhZu2NNccL(RO1mvxJ65 z_T|cf$#+!;IbsJRy?s^NXQgWMK{#t?XIH`bk_oP zy!(-is!5hc5@BhYScMgq8UZCL8Rz2|$QTC7oJ z^~5&rlo_wxya=!Na~Dlh0pPYPnk3uBo%chphU@^&ON&!;1pj~Kyo*ACq_I#*#9o-s z{oZr{0*nXjD6uZy^tD_6Rof3GK#-t#+;`)@diOjZcuh-n@{5N^k5c{1 zMETyD%}_991iVv;|EqVmIDrS9uhwrPzYyI2!vyg33`Vk^Zc%ss_{$5QS*Qz;>FzC& zDenKFW&ZEo=}Hawalw=(=ojTue;NUsMDU>8@DGLJ|JCIE-&FtS&IeQdxqzw9k2C$M zx|d?c?0n0YIh*ZydhX}xb8~YdL*8T;@&Bp`u3o<$j(W8H6wvMGy@jvPB*kE-3hRkc zl3^Wxzgyi@LIrzcI6negV(n`~`qYwl7ToS4iu+Z36gRc?_q83D&0P*CB5)i1Bw`dA zX;kyHPB0PShI{GZ^?dYO{-AAh@=X%a?DiG)3U!@t3O3I5Xg;Ug*4;$S zY(~T6Q0Y(3kKB6iSp3uEeeDPv%ex6I%*R{W|%O78P zQR4Ub3~tZ28k6g^)4lBwF(*+=Mj>?Rv>#zjduo6n-@30|N`cDrJuKWbN6na(m0I&^ z2x~u49ZyZA0yY&vl&Ak(_yHE_J+NHo3FZ8{4bI``d(P$#M5v5~h^qx|-`o5Vuji#n zs4W1{y0?;&liQtUG+eNdgeb2s+pE@`Weq>a%WF2WvH~9VIv%CJ$yol@#G7wWn}ZSx zYK9{0E<8Y?OkL+1)=hwYsh#p(V!~CMsUUdt!;!fFb!*Fb%|%U(T=bvkDOmd_l+#)s z_Ib_6&+*7PCH3AmD=GbuZ>D@a9WN=Eft(_kY=;-{s%{F^XP|cNsV+I^$dMitK15}# zM*GC`Uu_|8f*w#i^nEn{{wkRYY<|mk%=Z5e4T}GK zV>Le5L8N}ky6_17;}jQK2GR_-c$#DR|9Q6j^(j~Ysd*DOVD*C8@N>Ao$pbc!H(g(h z}1WA=!l<$28&X)v8!&zcZ_mqxUeoY`Lv*J*ObBBxaSmTRLr0ZE@v;xrHs>st9 zuQ;!Dp=M?6Tj%NcVZ#5k8~(Ov_y~H0u3>%dNrB70dfO#OZZLzU!1b7*%O)Xz=l)f+ zDlmb+x}&WKqF$Z94MMzZ>qyyDXe)(m=;5Jb{=U@ZUyyki*VE228`W;|?U!&JBy}-= z>?133fe3A4ev757GD(t)E`bfTetnI>R&u$~k05*uNCD=S*+t0oW8tEvutw>Uot`=*IrV-CB#bYK_r0EUdUW?Ff`iT!JCP_UfAC#?Ugsf zZn9iWv+7476hvOqqaNYmULJfjZ)FfX1j)IvaF?CUAoP}rhnid-K@?>Xwz2N12cHVv zTmqyM*>y;C9b%>+=HQ0h=TUFlm%3%hYBK9sXT^fg>1ll|?zTR5-)TD8$MF1YgAWV%gd`L~R|rI{9jC(~|uMKS+4*eEES!pST^b==br2$hd|`dw!(ujjk1 zJt~m1b^{R_FG6v~2e7N!bQ~NiNIDyUsh2z^B+*J0ADJ(_LCm8CkZAV; zNwlf?H_9idhCR;I?^4JdjSN`;BBG@6_~56##m*#_DR6ZF=o;D*EDSJVvnk3;i3W^|R^)D~qpI#Ztg)*t*y3S@yd>q|Djm`Y^(Pv>r z{XLIG`ifi^&iu3To=X8Hih`kX8SbYjcHyaWBbjD0@SuwjPHQe5OVp7-64(# zfk)|jz5pU+q6V?w{;d`BoMJ}OWmv}+xTSv$`G>8LlJ4ru>DNZdJ(n;$<*n-tqzBjV zjz4D5q17*kNHd(Kk(DZo=M2YB3d*U#6(;6hPC68 zCq}>6X1KEHtISsBYL-Me+ry~c9cbA}TN3$QEEa8z$>Fs`R}bs2kv*9P!iFJrXJ^nk zK+R(_Zd-%bmT6=U=WKBmyg1&?UuaHpkMbj+!hOxK51(RD)wWFtY^elR5(^%30?(m? zc*S#joFhsnWIV;;WlaJ5r@hHyXyaE;c6YjI```t|=A+*A*Ej{fvP-=#0v$r9C;gKkfNu(^&CZKgLetay@+CpJZeYR`9ftO^ZQD15UA^3>VH^xl#e5xu(+{eg@(wcnmBt-X_z zcF6eGGGuL_H(kbzRPBq|uw`%Zqb%jBU$ng{b{6S|Mk^m_>?&8-7|ilP@JQTBUT)!5 zNtCTb*aLas^oriXlO&J$QQBWk%doNvcB1no;=9qn(@ba9gOL11#Nnme>FaxJj|uXi z1NAp7U|tv$rO(oM9=x}NwYp<^J0aMKRwMeEvLsprv_+=L-Am^xVLUHMv(L2JLw+R@@2Dmt*zU zunMk5rr^N36YAtG%WFTWR=EQ7iY?sPx)KJI94E_$3ZKt4*})X=&LO+O+9_Klj1j`j z4cU+H&@G?@vTsb*Mfr%#89$AQ1D6%F`C}c`Hc{j1NrW8pNr`srxM^`bzvopQMu+M3tk^ z{2&}2_~vn+ zIo?Vn00%=EfLDxcktx_o#NhrftDHTkl%8VZDdC#EQ$%trwWhX6T7gh!b5-rD-g~_9 z65wV;Q`UNBed2o0a~?}ezPw;}&ARHO$R^Eh)zMu!`D{hgT*vI}6?edJ3(+0VqXsU~VNVboJcvI62B#{vcpN5O~T+VjNL*2a{C1Q}AMSx`;|VjsCUyx5W3hr#x7A}HJspG8#$ zBt(`A7y1IGnbJ_cZjyQ42xv~mGDkmx*=}|Fw^RB}SJb#N^VU}xY(BuR zW{@gMmn@p$BBcju+!q?3Rdq;cvQ?SoT$wa0B{WLSEwfiCC_T>h%0T@U0>m(r#r`Y} z%}aY__Sc34ph+zAR5FXr2eivmCbJLGHU9%ENgjo+T-YZ`BDWk}87MJ`t`21CXQvZs zg@U7EuX%DZuF}k*{mZE?*}Nl2?%G%lG$vuO3h&LcDitQ*&+>OWD<5?5czwM6EnTHE zRv}MIeYC`^3`7ih=DO-g&AXjE$$}v~t`e`&_tvpmn*vGwv3DLCcWG6mh`5x&m^7-@ zx)S(}6E_G=5}raUXG1>$y{@6$Lfa)~dezb#$qa=-QF8(tsF4O6B=+j3JyMPjTd!=O zq=^I_IBz)hSGn9q^~Of3AW5R4N+HhnczvgIQ+WajXZc5u`3WFTSBEmqEW(Dj=8K+$ z1fK$DttjrsxTmeF?DW&FfBM?uypM>pQH4>>0&@%GCacOw}j; z`FwlmO;Jpm7D=md$s|BvJF1u2(3D>{zQ2~EYXG| zQ5SK7#Jqa!NI&-aga?bsTL5=z|Asl&F;GD*g1^El6GuP<(V(-anD!oM_8hhV(1zZj zehWzTe(a9f);nap3JFI`>6qdbc^BL!SrxH>z=iYRUnOQN98bdf+ciaKA9MMX+|A^P z@4$v8IAXCrRD6rB?0PukQ`!J3Z4nJVICRXUj~EsnG1QdJ8f5pZzj>OenNb?SqAKgK zF-B7tJHu}YcQ=cza_^x=JKV{CBZ^8kRwh$q`Gjb7b4&BnCtz?WqLAWfZ3{1pC(feT z(~AwTq|3-9!uKNZ%M)<{wJck8J)nrhXuH%^U~($JD9HZS)I_UJNJvOqHZ`Q}%)cG794+o_m>@YQ zxY`)qxR;)lrwD)o#E0e{700XD;~WoP4EVEluDK+MyC9hsOn{79>U!9V&+WuI<9pyw z!Vv+`O!r$Wi;O(z;3rd6i;Jg(MN{WYS-=K;9PA%_ug={v-RT`F(&AqBG<^=GnkVVc zz-bEPgd)^{eE84a2@up#|BfzR4iQM(&^1*!HTyiRe%djWy`l*u+hYI-?89?LW|B z=21zJaO3U>a7p4F>~jtF^Lwf_`RfhA2o)38(KJaySa*MpdeK4&XH(0@PH5n9O**l& z0%Ii>UBR#R(9A(&f!|ML$qXMKk7?}AdY!osew;l;;2^g@>OzG^X$;kOS&WE3W$^w? zQ+%Zg(dce_kXkg^IW1hA@|ZAkPAk$p`$~5)n+BLGt;dMQ2i-(DAOD zupL)8?c%o_bA=r%Xz7HJ7gFhmZ);w$Z_2=W*~u6uH!*eju!|?YmAELl`-WrJq|)Fu zaQ}| zw%ZQ7J4jY^h1Y9?(Ik(t#<&J;8)_Zx`&a)Oby9(|MTrOD30^ zNk2^$d(n}cC^USrkFjgyp46NelBdnno(8Ptj1Vz<11wMY9Y~}L0nfi; zX%ZpxvDw-s57>aq%u3US3={^Yj()kpygSIf&ZvJ{p-j=q9IC@@OPic$=4WY4rkhyA z!`=fxmFwMgrMd-rC@ul_sHhC*ngTgo8q2rv7BZ4NLUHJ13fzVRI46O;tUhiwtow6@ z7!?ME+nV)JyWt4V>03U>o*ff(t_sTrduXC%wDWJ*`LB27vyHG;+|5*>>SSXgY-%sJ z9BQ@cMbE9zx_YM84+M5Uw-%OiKD#%5qD`!x8FrL3MGB1Ya<2QytX;zUdq%)B=?eSi zWB5clqpXA9JfI_~UVfnUnh_w^7|Xl}GE3GiUARqj7}<&uME!Myonf^t2834OZC9^3 zvvd&m)mX%}cZvv9@W1Hsc{|(vElxjr+g(|}HeVsygb*=2>8Pj@=aMESO}MMV6f0Ft zObBt24sc_7h?AW^Rq*TyHpRW8&H|>02-L@TYQ5upfw}tdcpm#Uqugbq#M=-iMwL8v zVgl^3j25k=vwXELDO!%tl}WEY92PwU8TA_Lx%6)twc!{l5v(!PVCQ(S4lR2`OoKkc zem@VYRqg1z>%99A0HChLaG4a2L*V>*{&*RCKJy-O2hrCS+S)(#=1T>V4B|zT@j1#L z3v8u6cti(-!mAlM?J5Nt3vN1fCsiZ066$0q8ybl?!=8(v$DCIF@`cQJwqi*)MA!XD zhW+O3C`xy##8I8ejuA1}<`vTA&E5XX^9`+d@yd8pd$c7{2ZFbaeMp>&AuL5!5KWJa zFo90N&9{$-WRuUi@I0tuM_`aU zfBQtbCP^Z(KhwUVJDNkuqgiCJjI}gBD(bFVERpE(yucN>3WYyi$~R!5KK-EH?RtcJ zuWOem6n*7eV`J;bC5)#TvcqX40b#`$wWss`wqwIhwId?B2}NVkDBai*+_VUpyzz?p zT9=Ke=3_on)}WIE<;=&F`cv-WO))!XmU#EWsjv9^@Y)WXY}-8De!$)33V~0#@=}4* zI(7!z$8)xQEr{w=%u*%Rumx|s({Htz7GhKqrDr8i398t5)^A*&T|bFW4*gQobKW}e z0#|qJqaUgf-!m-v$vQz5**JV(($1+qmKu&H;E|M$cirW$#jGj+Q_>>i>hkG>;b@rq zgws;OHX!V^d!k(KxZGKyfTp+1*ZDHJ!E@ZMUxq#k_Bv(E;XbtrqqNmu4Pwzo52h|NqC{TZU!1t^cA*sfdJt2uMpKASqqaDcvC59TG1g zA|)l=-Q8VEcXxMp=NUNXT63;FUH^0T`FQsE_Fi82@G_n;?s3O2lF!DqRzL@c6nI^nVE#73*(;CFyJ}Tc;&d2FdUm>y!kIVkB*;H)2~-6pm^aafB*WiGFWT zk$HeHu--mlIJvz!n=w{UD%`gplM4|uc5`=8x}Iax4uO#~NYf(m?-Hd6D8@u!Sn<^> z7gCQ!RRK=NjXHy0EX}|N>?RtLOkOXFNTaWC8=rOKE;Ej$MG zYd*L-e42)LgQ|tI=4~2QW8tJnc6+l#G9gyc`?cjW>xQTd_6k% zyg8M*8Ls+$8!AR=6A)YvXYcBWu+UQZgmeTuwpn(JwKXu`^+s{%pRDoR+ozv)iVp7i z)C&W6X1&>#Pkmt5`j`ePhimuT10~R_zM>I1zT9G)+#`L4|1a+zH*=U{*KKUIVQx6~ zlP}Kf2at=!p$1ONBn%>Wugv$SOeB=HA*#e5<_|kiJ z%u4-W^&=|8c5_&`H4u+xBuAklA?_l7uUc%&Kuy1XD4?Egs{c%ia%ZZnsHT>fbuxf% z-t5kmkq1MWn*J=)5B<$%zVF!4;g^-7EdwcjFFVr}fuo=XYmFX5u{|y}pQj8da4mJ* zW&mtzogeZ+%ZDZL^5?p8Y~quQfUROC5;@-&bwzbtOry5J?;fJ$sem#RN%%!HQisOBmfoVjmb>5H0+@rR2)j8B* zXVEjFFs1ow%v7h%Mz7aU1N+MHj^4W0NJHJ>#C9spSUfczx1h8$Ou+^jqMK^4A0l%a zT{Ok<28T_Z@?>kQghx}7W1^3pXG_T~V2eq$VrRoH>sLbv`4trFbsK27ZHs2aE$%q$ z*GW0=Y2H4vZ=QE2LD!;Z+m6=`n$yXz%=`$!yxA10+VnlOJEgH+?U*C6#`%rxOglN0 z#JmTp>H>_Q&Z!#Mb>a|DEh*1AAS-0i}bj+H%N7 zGQV#-F!D*8l=oZh*{186&gT0rB@GXwpxJT}N(wlc5ulIBW@&y*epzOmvaL_b#=po* zZ@EDnF;0bub)EXt@Et$B@O6<%)XlmXM@IZs&23{_D{fF^B+k7^J===_YAzt$=Q|HI zc9LJa2tO7`o=(XxUwmY@Jsqs2WEQf+3*6#YmgSrZXR$Nukp-&&cHw0 z9IGf{Hk}ML>Ws59of?;=-yI!u2qtmk@pHl41rkOQY^h8FpNbR=Gm-n`uLoItWOq>0a9m|-d*4-NM(6!{&dkpFbT#%g zt%&QCk$x@LB@k$WP1#YFeS~~JyXeKWf1R*0uqFa}wOboBB9fv&vPgGwSW;(FKf!xz zA9o{f@BS*tsKD*|HHia&Z=)GUwrelMhsi?{AZ000C#yFOuPPPUovvD0xY`RpT-(xy=Inq(8=|((}dfzq<$zKRdK)_e_-tt389`%C zRQ~IAY9gy zEtiv8ZDKmiT0^BV>rCf--Y&bv@^n$6ZK9*Ha_AnG3V06NR3gp=Qc2E>r8Pd!iAB8O ztPCD_x)4;qAoURR-(;NDgR;!q5>o)f5}R*HsH76_O4wb-wC_0)Dh+x)(YOT)1?p-S zw_bQM!)IO@^s5fO{<=TEeY>yuPutA&H)H)p9`_FJd4M67(=dnR7O}Zl8|Kg+>YD}{ zWvZS&!G|OTYdL+@&ob7_$^Xn3gDfB75Ed*kDs-F+<3(-b4`7;m|9xEk=Y-Y$0f2Af zmPh7h-jZEP`I!;PcBScg2ZEE-ne@|3XZG6DYNkv<1zsF(|0!#1h;u$98v^1=orspnCOnDwZ&_kh7Bx7y<63$}1HgU$ZMz1`M)NwoT4ecJH zfQf~Z_LF|SG`x$tZa8(ACe-8^3Wv{}%i5jJkLC_0R#E8JgyMQW_ezro&s);mgr7Kf z!svVIn~7Jps}?P~O0H&%gi{Zl4l{2$2MIZzs7095^JN;id4>C; z#G4PzxEN#K?svy9tH$(>evi6Ox@LJ}Lylbs^j2eMs;o11q=8(e42~J8LxQc7qbehJ zM+_*PP%p0iXm%(Xt}k=gCkhG#bBt-ny9#Rcwm5HwLr!bDLeOooB?e3ZEEkMit2x?aGxs%^8P7dc{um2nkn&&cxfi;=S=d)BguhEd1Pij1{KV zRbYUVUe}O^v}aJ*k=!D>Qt7Z?o9OVMj=v<`WnzXGb_iEp{VJHv9v4+M_^`e}gB9(I zKb(f9=aZoGd5?qDRi{v#TV8V$Ah+2(n86q;xYb2dF@X-O?n&<3d<=lI{vsAB*I+2U zY>Mw}T^nM$&!5B#%P(^~2T_m|c3G15LK31W$H&J~FYPKH#YlpiuR1J5uKxidsgpo=z{`Pc;&?RD z2d^E}TtAV_3D`OJcHgHTV>e@(8ONO;>8B+ei9t+5EKAYti?7o&NZ`|Z8I!zW+Kbq* zWGdy!l+B|F3%|@fp(K_L2C=#a--!ov4KEwW7&Em-vPa4_So3~`iq0{39BM85sV8#`#qh2{W!d5xsnYUi=rNrs(lzvH!#&DtgHLHHWPIW+G z;)L{#bmf;Y!_ma2x%~$kpv7mDfH2hf7>Ae7E1=!HSdigu)AOvb=OjPhdt9FAw)lq8 z+3%_zc_Nbod)(5IsdB>*Eylbxozj>6cbFT_N8;q0>)!ycq$)09gnnx{%apkas4}vc zeHM&ubj#iKDyf?+L%l3<`3V;@*cO64%Np8tur!MVojf&6@SZ|Yo{2fAq8+FQqI&sQ zUWQE8Ao?ui!$fD)a5}Qll&qB&_?O)|{5Tw+d1tjOq(u@neA?AP7Cd>_-8-he3$u35 zmIQ328k-o^qk^j=(mHfTzFu1#woVKUi3&LlCrIhD@B7PZuj|UyB8&^am+zp>q}Ob- z_gc;V3HNBEcL(NxQ@&|p@GZliLph9nl>fQsxlf<2-#l4Mdx#vZ#KW~^qvy42VX81? z&AH`77JfhNAO^J_mst3rhHDH_v@qeM&MLDYH*2Xew(o16lD;aB^o%vOY%YsD<+9R* z7m*9xtG%Kx;Zmc7{l2Ti1RkZH##SAzoO$}0V9SX$hlQv$jqrM54_Gz9Vt{d}t&Li! z4r>atd*8LhE;G*lc8?=) zGfiID!>rW#utSyw!g`a0Ia)A>&jtKZr&ghQhD=H8VmClt7tuO-1CM^&MOCcb)+>7^ zT)7({1ujd6NV(c`T!7R`aB_GBRG2=SNVJAeGSL%3zbz!rq zZ#X*U$$BjaI>8_d8={;{2Z7j&YtU5skBF1+hIm&r0TZ?P?-b2x%nzmuC`elOoQH3O zv8-*q;{(SdVdXbVPy6^C4-$Zb%&P3Sh(a@}dQg0B`jG(H?yt`?bxG@xzP&gu*tStS zdSFpyrMts$2b0d-4=YcW67q2oAR}~oW2@vxpF|7!O<+>IFTrwVwaw0(EYG|8$bG!w z{H84suR?Ng>i&Yj&cXYJonT^i3UR*7x|{HqjARhLy>xPj#=&ISB(A!ey&`5h<&Hj~ zt1bl6e1l7;Q#+fN&DTJnbjW1$3eP17C-P18-9{Qy ziRXRFWOz?)vhg(&t@y(>y1feO1Br12;$0F=oSkpQQQQgd4y0MMpd;~P%JRs7_DUba zZFv0Kt4E;yA##P*Bp#Rll#%50pExwDOgA{WcMs9A9xv3!f}#8>XD{SzMqdDCJjkff zlX{3%c}%I#u+709ipq*CMX*M$Mqb>976~tb5$W>X*g>r3(?G2DbP>luv$fvFmpue* zk3Z8DCd+lbIQ3F0A!u&iE;KWptV9a3;2)8_1GMqt68Qu?s2@+tE%GvkFqo@B0g{XO z^J}13@WYQF79aK#)e%$gmhSk;kH+LpDCO5Cd#Kv3pj+*3vpCE*d98#spBAN zou!RGJRnW}iSy2#{C52e6@mvWM2W=q1#+i{FJ43eB|6_81Gk_1!70lfcN}k`F9qno z=#+*6;@Rz)4p&XJUc;yKyArEogC9Mg#+dFD%f-xUtNe25BoDWOXtTn&kHlvC0AQpe zf2L*#vQd@Yg7GVUX#hZle|^U?Qby`KL55F;$B`BHY7@cVNk+HCt-btbMz33j>B%PxtUSs9# zT+2RNp;6t09&aKHs+BjUGJare$Nwj0-F+CgdfLY0S$KaDpN6w;sq@_ujqv9nr09ma z)>m>4!%)=;(I}Ltp*s2&D83MO%r}hav1?gQO{3mghhLu$^+|WVhm3%sx7JykFXGH10?R#F@V!?M=Kgl0Yz2l; zdkCzU$hxf zUDEg34QAV4ww6=U!p~+E*xFVi>(|%V@_kf~n`B(^X~PY! zn03$yh?$?OxZQ(b8+>SiS;VDR+CJSDe=INOXJ<+sQL|V322F8X@E^12$8R6jd9CLk zZ%@d;A-vSw(_KII!gC=5jg}(0JI1p)oA}wS0jr}P=BcygyVOy;L&v23DxmjscoCs7 zaizY~{rIW7Sqc)KU_wJ*t<{NpNxj39Jvm?FN$;G-py&CfCbU#v4wLTeP+H#|xn{i5XsNPCpK618{xSFhd@3TmE~ z$vqulE!UyV{IMablO}T5ycc4d5P^%tf65zTAC%p*mKq*8t#o) zlX7DVD7Xew)zAI}L173{X7Zk?LsORqAfhL?l+|xJ*U-Md+t7?h%LF1QPZ%zwZxv4~ zgxfyJGsS#dEj8%ZUuhSyy5q2qCVh6P-HbY==5_PkSg-X&Fhx`xeyZEfeu?sd$7n2D7cbg;GS#vjRxZ=&o*hbe znrUl?Q)V)rk9bhj`%R`!dkv9(R{Tqk3oOY7!$c$;)l3 zXn(@aWBs#u4m(A#4Y0gjEYEWcDAoWMw0QOv7l$4Ic%VN!Z8vzr(D!ZEi>A*|18a|Y zg1p>hR;v%Ghj%EE2jVnMSDkRHelIOKm@LPeovtg2A>8yCmcF(F@a&c?LvBcnW~yJC zu3tVdLSOp|%Kdxa-bEaL%(SlEOrtVeQ{s6-jt2tRh2e-tN2;_uWK)m?rTsphm@ zjy)p!l9iH@&1$}pXTpr|;6%+MgAxczUx=5J|Ax62Gz7yyR6e^murPj)>;-gLQO2Bd zy}U?Hj*m7EAlw{;guD#e03VwDl96H|DSla?+8-1H6JACq@o{VK8ZpouK!j za>kZwFhE#ru;5HHCZVL})q;6-%0_n&rQ&l)%?&$^Ei9z1%F#!R6N>Ro12-3U zIt1OBT|9X#qfw z&BJF%D}y1|+80d66QJR5SNfnXB8dkbAYL46Gl-GNfE@=LnvilO)xAn&G4K4@9L7YC zY=Qa=X-t=X{AWn<9IBP*7&V>Q_4_DBr}7KFrBp#v46-1N{H^g1K)xK;=i9eq100H9 z9W0m%Zs6PgzJ!#8xKn4{s`$gZqd`Z>oceO{-*M0$<2-z3)lc<2TAUXTMx3(nM~BFQ zPQDOLCNFwfPj0s?3aelMM-K&nA{UE9?|@}#dug0k*U z@&MT!%#=q{fs#6F=JyA5xQS9~3gN2s(}r}zw%dRC($5|OWbHTf%Xpx}?nLwBA~xC$ zPJzK}dYpQ+(YMsMJniSV^}1)IqMk?bqmER3_(6cO^*A+!M+2~mr(kTh3k4ldf&nt7 zeFu=m3u=#(OO3}yOAAsFPpefWFqATXeZE{>Pv0mzFJMevTO-QU@8s8Q zW)T6yj&) zeqS~D6##(K@_+xTx$PmOfjDsQ=?(6Qn*bCMNe*L5#K}3Um(yR~Asb9CA>S+Du1YG| z64%wbQ(_3NVf;iGU~xfdUe73Be_{7E7R;na>eZZj0Ayo*UhIx1coR}V)PTRm9F2QJp0<8__&Ae0{|!@ z*s9aZ8K}U*qZRHLXnKa{BIGO9JI2kBj2%$%N!>1~66MOI7?mG4+*8hXz84XyoKKKJ zJ%-8VzLyg|FC;j;Zq(l?#Q*SNOUG0;^cAa3JA0i9FNOTKATZh&YVr2wo`Jpe{3itR zugvz-o5Y7m0IjW5Z@Z3&Q+y2!6P{yZ8`CQ-_a$f?uJ*(jX@1GiIXOuKHBM*}CXK4s zgO1Kb_=1Ou58WBSW)y<<;s@R=)qpUza*t7%P*|rZyf?S~Z@&~-Fp z4fFaBpSkq|EcPypph1u)s?-7k=J#4`Wep81&7?i$?+v6HUVZ;N4+P9*EaU|kh4t0r z64cj82_cUZDygmG>_$iI;h~zS0NIBYkK^+Ho*Q(|)5ysEgRz~Ld8N90CVfa{*9>Qs z0J$BIZeR`vlFa{yzv++VA?$3XNx_2FZz(H&C z^nduFzy5bI;OzTubHN?|PtW}8$NxX}bbJd~D`9G&OTX3&Yeu?(`Cm31a`PYDGZVXA zcz5)PtiJL;yJ%q1K1<_MQ3dYUJ6}g7Zga)`j#zQueuh$Oth(J)4eaT?1rD!qmnPW% zem(ePu%O`6yn<{u`~1Iuga{g?(Pf-y03H{)WrpOV70&+qDEGU!iZ2CwT%DutILY*WKCSXWIJ%LaW|u`}z5gppC})`0O+Ff1|CrlO~R-oZLV2 zjbZ-J&6DwM>W>pM56k~%4#`amA4;yI3TPw5Z9sdwuIN#!ru+4GE)Df3zu2DM8i=jh zA_;%3>)*dSz7q_PiKon1lI-e`u{@350xxWvacppv)dW9OHC=lRDv9X$Zz8+*yi%^+ zvu!r~A`(Ysv15kc%sc;B8vGJ4MioRMm&vYN?hKm%tX{bH`x8AM$E~OsiAIa*4r**t3^WR| zi*6fybU=jNFzCnl_X~1QMC<1|gx*2AN&J#}Ph0w3NacP2PkV0t02i(L{~2A~odAR@ z%~y{ce*=vF&2M-}27dhil&2%VcsY}Z@wbJBDQL`+v9wwqw*(?`p|P|>2L}gDHT1`? z{(VgU^C-1zxq}RxJcy;%%V6Z+>vgg)}%WiTB zq0YRN(Et4|f8frI0_ep7>s{=P<@R?xaUaHzZSEIZbcA@JoH<*vYuoJ<^)O^B3}N&P!2Kq)aeF_Z(x~g* zwR{f{s^x1<6*c<3v0+0887rwBk8{UVwUKb?hB98$C9877C;%#|^BNk*U-9kn19y%q zq;anOpNGqD2Zs2G*<-o#pyvzwfda>0-}0|dk9h$z{EcM1^XfvGvvfOqbGkb^mS)kI zs@EHt?Dyq+D1n2zR|JXBf2~~;i3P=OX*2FSs;X|+7I6{Q&lI0`9uNK(1(L_I59?;L z$J9dmKFLU;6d zl@F+Y+fbCqc&@GWUY;vFFn{~k|5(08q(5oTcuWhHAu#fv#Q6FD_5;shdZUi5mBAJX zqxEq8FZ=2tj5Ecb4D3=%8f>EfpMw0i75rnb{-4A8{+LvfvrT><4Y-v7`yVF+(B8U$ zI4Cg%g-E$+AYf($PRapf8_=i{5CScX!Ss_A=}f7l(rE4fmLlEXSj))nCHj4x z;Bsc4j8Uz!65gF=pW8!u5%yUCB$1U>SmVp(#q&Yfx2_jzS(Oy>myCkn${1UE5*@ zIXgAD)e7-=F7I;@9jSRx^w6E|*y|j6$-D;jVU9e*gC)>&?;4wPrnEoVCI~#;B?k4) zQT8*6U)he1I{qk3o%kOWsRU48j?9AdL#HGuGad~E&2K889@QtSlKZukWZe!c%hde*Yu?Pu^EaZ-X^FHUb8_T3jpAE z%np(hK-`AB>6yT*FrCsHyv4hxK>MgGB83;5-8d@MU*q|JDH$*)3Ng;FSI$-_ctJHI zS(X4~jK5b_zROZ&k-o2kjW}MsMh6_s!utW!PuceZ@*>qil0Hxat7`xRbR`^Gg|eo6 zuNex^ToC~LIkEQ{ur{VzfH_zgpvraZ`Mv0(0UiVQN^eIeNLdG{Bpsh&8@eLj7KrK) zcdK#yA~ar;C-R`vAmCC91`;Dog-)3M?~<&YGX4w6nn0|sK<p@B%D-Z9lm%>z zdwf~QVvDaR=vUXdd{#Esv#%?wL1UKOcoWM-su*be^^(J+natYSCJ6!a`ZHjKh<=@H z?+iQkbE@1pIxeWE+xU7rW#s|)%<8>n3sD_j7$7F<9Ht%&o)>rBPVuA!CI z^wL1d)U4ic;DJ9IaFjusby6@I%U`Lc_#@YIdEPIEUJsvbv6K97iZ-94azcH(NvDWL zDazm@_qe|UT5 z|3TMoItgCZaz-R^PejU9EYeC7=jYPjRRw%5`{zy}mI9k2d6cG8<&5P1HIdwY(!$|K z1eLIyFS&T?V{gN5p!R@VV%7eSY$n)Kz;%Q<3xHMJ(|F0yeEVY?s6IlmLv4@iq_X|V z&9?kEH{0x`;e*!Ftc3Oq8Lkiv4ab)B+d=MUrdLbkc;BlCi5_{`-Uniuzq7N8)ouWm zy*`c@^gMJ$ZA!NTIq+Ay!ony>LdIJ#7(;UkOw1FSh0J4O#J^_rWw;V;jhY7m{H|zx zA-iW)f2A7IZAo z35_oe(`DQ7dL|xw9URMm1iyjXip;zF-Ax7k*u!pLwJGA4YzEoQ(J z1Xx*o0s#681VWfQ4$tWip4XYyKn$^I0$x%v zS~nuw3EO=~`YV0<^AmC?6d0(($gkhP)UDn-HN~uO5wWG7A>YFdJ?M{>L*UfbrSL&O zKZ*}7hla#)-Ca)UM04oXR8jS5SUKdpU>a|pa`}t-J@Pl^H}hDYolwRWt4KtQxma%B z7jsyvtMaN`L(>gB*LHtq`(ScBQW&{X(;?;APdn&J*H_LLSAA)8uDb8LPHVjyEto6(hL}j*u?H|RY2?LlYtN`1 zbeE-~j&G;vocFB<^NjU7u;Ue&OeU#-31zTaO^9B%HNx06HnDjFTd#|W=GQ4Ky26HU zu4m#7XL)152=-Fwz2~771+~Q2Ku3P9o)Em>0jZE-VolI5-AeQ#`^8YB-bj?go669C zTxa6VG9YxTI>KjJ?zl;01i-^RmPyh~v<8Lxahb1BZ?2J0@9Zx zCt?rpB~fdSPF1W31L7!vR zgHLnnbf-K8aGjn8AP$Mb6f5CRroK(MUI=YgU*E^urIQ0TSsLmtD~wf}(E-vGxBNZ@ zU;U}Ws8?&OH-`1z$j!-AV%Qw(w!vADC2iZc+0@LUnCB0EwQ_{!`Bs@++?OB(; zU0x#k(pWg2>G6(h&RiK$pqHrYwYTmd$n3Dzqp)LvOWJKgP~h*v*3#m3uLjW`p%F2( z%FE-IF23Bd;IUjRN)v8Hf?p}!^4M^yI_w){NjFO~e!QPR0IcyyfD%@>-SIy;)mC5K z^tj$ZE=wU{)M~6VanYQR>UGMxWK))%O(x#7(06!|0A6;DHWoBUuUKgij3e>d_4Zo2 zklS50M?+JGR*a}b4)xEgqjsZtuCZ8R9C=&bLf&~2tgs9_LG7{^SOzsM_? zO8uj0fJ_BdQh)aWF|st2HFrKF@Qi8CbK0)XxvKc^eS$iWxvFTrHdDRr>wJBp*L_W0 z6sL|f6QL7zL|{H!J9swWWs3b_i@ALJk14xyRQQK4OuM0(q7gLj+!ZgJE__S9rKtcCqsmUbYqe(($5E}~NO4ba zn+%a0OY3VN3|Kj>=1dI!g!Ep3Fr9sM^A+f)Oi+5?i?LpE-bSjewc)uwhuo{JyT?)| zZj^z%G_Eq{4;FgzpDgr|-?Pwdr+%FKo_Oke zpVA>!rc4b5U|*}VwN;3pubYJ_@xCjrV#a7t_k}e8xmByrOb#Zg8M8@x;V1p3Gc!S+ z=#I!L<^{*K?m=pZ{w&j?M>c7Ql_oFQ)MylbMt}@PE|b6GIq`e?6r+oi3YOEE5Z6(G zypYH^Hq(*Qoykwd@V3R=_y$mvHje|N=uyoOW^ENDeZGlR25sa8bAC`O5qMTJDHT$- znCL*^f3F*`taGo1;TO=7#t%IReDF5y>_x*Ubcsl97bt1`zmHHxkk*I4QG5MHg{fj| z1CRY4w>rgCYD&5;{%>-+j(_8@p@xtE)N30YHRj>2^d1$eCQn>Aa}C8Z-@FFHp%+*A zcYtWFQr^-$-WQ=hNM`9`gc=cz=C2%nQ^u}CO_r+HMKsR*X=-LG_4J%B4cV+0u{X!fH?1=D0PO4O|i|B;mrIgg#g5^aJoH1 zxgrL?kS&*;9OzH1NCTvnxwUiVtHA?K3_dA2B}^Z^~VZykVKF0M0ySwbWC znvn2^aY*-Z)0FLrpW{^dPO;^ZfDi4Gib8?>8@`*95leQ<#V@%k73y|-6F}xQU!fwu zqxJjP)J*XSq|6+1vJ!(52V}qHW-}B(>9u(2n?l~^O`qGYad!Yt@$9&#msd=wfLu>i z#7%>&v#t6oFcM>UZaG&E(YrpSlWuU~=m=T6o2WsmBnzNHoR{QB{(z<;i&iu?Ui0>J z{7CYfnzm2f*{pwE%WO^SOH{_9vvDUs94V>oXR=f_w@0hvUABn3Zfw`$oXfj*`uche z3SVL>%%z)ol^Qld?KgsLJd&GLU*MGCd|_3pcOp{6;@cVaCZ{ZB$j0;Q*Q|;(@fdlC z#u?%nFc8G5in=nBYKS*OXaD*D2LFNkC*=L-cT5tI42-zSx9rhkBrbhxKN{AeWe`Sc zEH<*)8RE{R-6Ifuve2k9;m=*JcH_=fmf{~j=))Ky7)N^enEL?~vfKTW{{3;0-)&9f z+^gY;mgy0zZYP>;Iy_>wVuL!P>r}oPnVhbwv2>FmpZEcu>IlC4%-Qku2f#yO4G_@6{Er>C21 zZRLw({SGvvD^Ej)14{fFeb4r|`d8L-QjABk3C8A&mVM@*@FDhpqRuB{Bcb~k37@}jof*c zCtD+F!O1uhu&6QeyTda*1F{WJz1>)l9iJO?(T@g=nF#&pN}qZ!w-H#PRx%};=o zi#vh@5PTdnqH?WwX0Tbu&jv%XkE`y964_)~%qsu83Y`PqY*k@fxw_&5TkZ$qajbCx3GamW zTAJ&n-_hmkbUa^lc*WyzwEBU`ct-ikVcC_+W$K#Ebo`w1!Vih6XKkQ`n32(B-0kvY zL))(K8}VAYZSujn+Z{n1y*(}ttIc~jdPBRF`FU=jmXr#d{!s3qO|sb?kG<2q&lZ6w z`AK*L(8Iz9v&c9x*k=|~;q`D~2TE7AO*^}jWic;k)TnO>oVY&(-_NFADzS2%1YX-MwK-G353tSGwf#XrupiEu|@?ZvFBDd z{L?H+(f`yD89Gz0_o6 zLOJT5R=QdKktNo)j4mJZMjs|DK-WCZ1m)k? z$>P;99(NK!lB{}dq?J!;W9)%jiA1f-O*9+=7Vl5~a(6qf@)5S_i3uebxG!DYzSL?p zLs2Db&B{HP>os=}N@zG|=iTRzOt)t$5~ww*L~87BiAlvzu%2Uo(sI21l3+M@3vFdz zZlaW>IFP)&xX63v4A}tEd<^EdysWmH2tAQ+<@BIvhXaVG&U+a3wm-32><5{UsIe+k zrTS*H%N~d*s@7c=bgvJj86zoI>kvTH%Cgn%KQ6N9pz*)sMK5UJVj)(N(F%_x6 z&f_J*Y2oV8`ThbQ7Ng@UwOSit#J4i(-w2n4K6VDZ_2^bzAW}zCd5^UVT3myhVU!G# zKj$H$eLb2f^0Vy)5k6d!;SbSY%|xwEGHYmXRom@UKMtQDGbsAP)xTxBM+vbf!% zPWyYTs#-N_xW|~cG_JGLHpQzl_c&hW%+GCI4_`z#p-)wqGrv^)n7h-= zzV>DPin3_lwpU#D$GacTSaW?y`nl{_E8_qV-_K(QwyZpQkY_DVw3fsAOT4?{N4v z8mXZu-x1eKAFe5+b;;qjorFU(+)pvp8xy=Ebmo1edw$StH}QGNoaRm#%ucgd(Wy_| zt@dDVa%m#RVbB!v`$Y^^_+x)?L}5%-3Ox-kP!y)os861)bCk|VU`5s!mV(zv;&j}8 zhdJM*V1KqTBRY|0%VyNA$m)EKhZ*_Ss+qQ~^s?T?g~9Pyk>w*`LOxb*Fe@8982!}9 z^C~GRX_0+s09bObU+vvyj8N&LW73yf@}`?$yO~ zu<+9koia2dj4~Y4WMwr^WmrL{V;*S(P*M8Hg2{uO&mC4f z`O)7yMYkyTX$uKGw%wVPq4HRuDfw{C{*iqoSBbBLGFW^Gx+j(+=Js5h(spB%Pa@G+ zuK$y!zx9v-_3WUFFFU7yw9c9qG z4^BDlh_@bIG$e){eE3WhE1t`jJuGJyHb*(@!>xz*AKUrQ zv?M4J>Xl;BMG8wep6hk+?d28?)?2MFmFH!N>JQ+|m%hEIMQFF5gJe`B&`dL+S0+s; zNZ0hu-O1+5y5FK4@!WZ@aDRi9x8QZ-ev8zD5uDdcogmFL6$BVLs5{wmNWRS#MA79`nOlI1J!a*tA^bVf5>ez z0o1Q^VI~xsosaC*S9pzsJ|6ViSBGi}?(;08~Kh2)6A567O@>y!@c(V7P=(u%f%08Fli(*+@uu|+t4-eAGQbYcR?)Wrx z*(U!37TfLq0J!5V%BgsE+vsoWgWK)OeM_~lPe*t_Ot{U$kZpn#FMP4oHf${=rz3*b zr+6!yYiss(vi!6h^s@)z)z}Odt{to(Br~TDEIz$)F5hD$<5}~-{f<+YxIwSiv7=UP zlgv`0zX>b1FQI;`+omz4L-LfX;i}lh`L<8F;HgW2l@x5m#NrL31-ENnBK&MGb%xfOih4;xXeg<^E51B$x(H@6E7lEdhAqHrLj$t?F(>2DI>g^ zAR5lWo)n=pq-W%YZqMYp$@0h7C~N)0%v&BkjUbhb-xS|GI>n@y3+YS|K+Jf>aw|&T zeZ}w;8)R~7X3ABamzb253t(1b46)3e;F^=99Bf6SRDN$(|0bMNxEr)vsjJw(WKc$bxmqa#+nWppszv8HEy zVZ3c^-)B}FB|^v>_>{&lMP-#nm5k1zHUoeFr3!Gf$12QlR^B!|B9V;F#E4AX4h&Qg zRmWhDk1APh|2TpX?0&L2%E;2pT4s!L*PLdd87{3}@0>O5e^AcjaVeXt_@U~!KZpmq z<&f_y7o{!s;5J{0`HbTygkLx3DEj;g*Y)mP1edc0dC^S%t235ac`}Xg)^9Hf#|oF{ zc$jX>JzK@21?nClq>kt?ZQrOug_T-y}MQz@sNlwT1+U#TA}fNqXGamAR$;+UtOUeH8Z>kf$!IjC|{ zpz-)pOv6;c$!V`^E0OlSSEyMsZn8|ADQbv_)Y2%FR5IaZo&u0=kIHXRghhJ$vD=eN zO1<_I0m*quR*u#FqerUy&mUHI31m_lPJ=-7_M&}kOu>cLQsC=3b*&D(MpRo@7K|56 zPQ=|jvzk`8Yk^wGj6%U}nfh?pZsmBE#R6|Lp5iPgCtThe2iyXU2A&UE;za6PS6(D@ zTXyFAZy%j(Pq{YEa~dbaG)XL465XX-toEo}L@$gzYxr7O3%Qc0M>^-o3e8ct3$q9O zPVoS(XPJ>A1i^aQc6rePJ6f!q4rS|xn2JR<( zVRYUY#E&HQo7o;I7=*K_&mJa)q@apNGw@qSG+iZqOtNw^FnD?4SC+uRVU3xq-yu++ zyc@_>0itxoM)c#CpQwu8j%yuMrxe#%T~Iv3=A>&SxSTx-vE7|HVpJSUUVF=04GP$6 zI1S^ktjj*;>gGPsNH%_Dec}~2=bxN`AL(0`B9(f*^LjdW&1{-{>$@gsr8I7LsPt^3 z9ZHJg^p{UX2C@x2AHArfuB}~uES+vc%cdx1uS94q=|0A|bVeC5q~9x@ww}pn9T;fJ z@wZpW-8c(#9ylrg#-$(oG}ggSN2&#b5L&5APyG0l(iOp#VV^BleP#U_Ub2T+SR#V< zNg>Yv+Kjk=Rm~M{&yOuMbol)Pe^?h!x2-96dJ}UFR;8y@?9C1ypk@Hc4mqZypdjS8 zuGRv@WTIacr-bN(-IL1I_yzoy7cYF4=dpBhY2UxMLs1L{cGW1a=Y_9H>MahEn^1jv z1bSgCHF86`)0E4y;gD=?#j%%OS89t0dbAmtEn_5Q{XkJhB=jbtk`9wrEZGH`fh&CR znzL2L6|4C#_qZ@7XmW8BEq5kuu^9EJ$eSL;x+jT64O&IPsgrzx<~|qSL&rgWzJxC> zTX;-A!ZjIC!bXOPD`t~1+oA-6fG!%}_6X@(H-tsYa)q;jn*F^18ejM*Co|ugah~Zl zQWK!d8=OSj()|dA4nMCwT=LzwRBd!HQ z3n^_Yr@Lw{gruaTb*vjhIivN*ezz)o1)qE25VJoWEQU>QzJTOPptFDZXZ;Q?W+6f- zc1d})Zt=T1YYZF?yI8E@D}i3Y1Qw_GbKbb&#pJC{bjs$giE8gERT=&;rPrQ7M<}6$ z$##0Jv=0;-=T8iW3m?8wEsdnss3(+J7|T+l>;>9=6AkS)^|9p1JP_>-n(r-DkRIq~ zx+u<7bfDi|5Epc4s~v zw?svNgEk289Q#No_fC{g%vKDi?~45k4h^I+qzOp0`({-;x{5sdY5qhsUJ&v1{PUP? z+*f%SFr%4|Fd%J{Yw1(;3gO8*oGxw0=pA@QCj}6j!mk z97ayhl*BMH5C^r$u0*P9tk&PZ!sWgQNyLK|zX&bN&R4puJm}8OWd%9D z2xM70%2tRJY)-qctm9Fs7$pUt=Tip-IbLVIE8CF%b42G(qYH;Rt zEr(w|EOOoAlv)rR(c55}AYc>x)ieB8M0IoXgks-o`eh4?(S2xzAFdZUe|r8|>-OO6 zEb!om-BZb?RipyyRdKtWSy38(!Uw%fy`p`%pgS8-BeEg_N3&YgDXgTwIYq%&G$!zk zCRIyYf4E9UuoJcJb^Eudl4iMG0!yrgup9;cQ!ll{aXYQ#3aO;emPVumh!m=oLEEb% zIb+8MKOa?vKP%AJ?hW(+HbIpEP8-E5beTWYbPyFA?8=%F;mxi*fj}dOQB3r4dg07N!>SVH`NtkCbFzXieTiZy{j+sDiDdr{oo+wmJWY9=}lY= z`Ga1IA3W%)0tk2lkgMZSkfB5RzSZh|A`ex?&0aC7O)02cxqOSRZq%$O+&-3A^paJr3^W=Tsni(|v$i2DKiw7u*tiz2VmXrF;@(URTqp)C-Y5ASM>%Jzf&F2ljE zhY59qCw}~yo^l_lk6C$1&@d3t_pW>kj*3?7W~K*aHl&GHkOQx+Lw9HE1aFb>f*%_u zDKlnI9rklw6-|h1dZwfhiQhUT$9g+opFin|WmFLmX<5ZwesTk-K|W9Tg9o^EP}avP zBux+{_p5=%h-zBHN?@Me2_6c{NBO#Od1;bzm2v|TqD};yK8TZ(6ZRx=g>GMd=ex#< zM`B?fUUw=2jj|jvSH6Dh)YP#8YhdD;p4|yKSZVdgxGRoyo~d^@3I}X^!Ef3N@O}|g z^vZqVy*=yrEr{lLa+j9sG_mx(FDcVM!vcqKYNV-BLwZlomfCC2z{<^|`6Ry9>f|rZ z&#-XbA0w)BX4qs&9}XZKIJ}T4e7Se0yL%lO%~+k_F%;^S6T@siU>@VjtgJB6gn6%h zLE(DtBIY@@TwZ0NF-`hsrV{&r=5E3MuKs%AO2lW!Zspx{HjMMl?$Bw2T-RZl;Y28% zpNUl~yeo@Tdg&(8l6b?N;o)8wGokiK@645s%u36l@(l(rf&Zy1t{ ztMO&@(T-p&uBulQ}`^xGlnCPzmQLy_@sRf?{ z;P{qh9~HB}1K~c7YxT#H4kq*@CnNI~@W<3Y+`M)=bIwxt5YT(Xv3`m^wDgL_N@{8} zPnWSi`VQ!IkswV}xN_~x*0mYnsIW4pc%ZSpTY`xQ)Y`Go7B#mhY=rk;Q^8FePMz&ZDh(CHr^^tEO!C@DL|OAQ0u@%hrhK`{Ok_|BXHJ-N#t5jpe<&AOXKI@&u2h z=dWIgEwxIbiJD9^mrmuH;^N{i9+l)(@0M=RZ%ki2-E8~18~R2@fcmaU)NLOk<2kj+ z6!rsRnegZBX91*0D{FAX|&EQl4ap@~*$)FnXXw;a{waXU8tsW5Xhmh~wAb&hz$es+F?qZlbV)k7<5kwA z_kwXcij~F;ez3o4P!LgP*1eyem!v7a@Ul|tE)@?0FDBU3`-Q5iW(%mg7-Q6G!f~0hVbazX4NvCvo=eN;w zJf3sU``-KW^Wn#SV7vF)E9RPO&N0SRs4m-#tKu}jF|W{y zXwB>nU(ed>(q`=?1_zjZhUeeof}2kcY6jH<SgL#GrV2$x*3fL4;H)HGQo&a(u+wom^gcRh3TS-0xrQdusxyn3bPRKR-g> zFu+LP0;)rQYj$@%IXRKDRK7T6S?sn)qgKnR(Ke2rqJR)Xb37NuYG~(2 zUG3;YAnfq_THzVw>Ti$5S)>Bn{aUHYJgqz`3ONjiQA~o)gV6USZb=S439Oo`HCO}HYw=(&6V?t6Xryf(IHO)lQRXic3C7) z;8F}o{cYX(L7&MKHnjWk)OPd3t9 zTUk5A*}0sSr2(pZPD#h`8D<5Hl*j4miG09CrQHk^2T|I@QsThd!3OZ6h74;Ycb!HjzAsDmUmC6AD2AaFL7=aVpxkAFm(-hU1@8 z#L}t@Jcodb#bkxy77DVqU^E;ec?ilox*ASqCy!fL&c;_NR(s=lI4ug46Gl_kQ$oTd z(+FgYns2lhhfpunD2u+iz#^+iZ}fcRKbYFfbgsx@Xz#uA3wgg;ykNJy{Q8&+4WH$O z6Ar$%r*sNeOu*gYT$e(bF8E3-&Ku%%ZD0Scw1y%;7$sU>pBa<)*l1+{`#A*cCq=dw z^zi7`bg_~BTaG#BCw5}K1l!ihqjzrtyAkKK4X^NI z0c!`S?(?H!cJ9XCE;q~k@a^#5fkUD7NK+@W62r|iDmcX>XrT!P`6%z$Y7XxEf4s-8 zX>z)boP5kz<0z0S+EK`|;;+C|V=*Oo(7en=&K(-b$fh*jzmbe?=Wc)@b3ZvF_xq6l z5Oz3HT-5`Wt@dhQuS*v3Uk`to&xToFQ2^y)G7$-dd+NZOTY!qKfU8$p=%PM=dcs0{ z3KTB(wEXgtJM}p^t@#EWxmOCSj z*U($dS8_l>laKk*e$U0kVyUE>T+R^ibo{=}6*-eOh`g;ZoPeS)1IU>{1-oo7d^~IQ zdn5fgg1v$s?r%oE6TV$z88XrNat7oqAesk~nBUR_wP6z0T3Nl44h(-qpL7!J1)Jiw ziSL`{$nT#(@2U>_iCE95H&S=S5dsI%khMci=&s$5k+&4R!KU>skh>bRV5LC?!U9i8 zulMa;+UxL;&)?_te_swcYOG)wt& z3cBr7%KaHXRalp}FBx&g)k1Fk3x5lhM=S$mi+??^NJ29ij|pnkHUjanqGc%DN<$g& zsonA1aLLpVYM76k;4Mh#M5h|YRr%U8Un3+wwrOfGDTrva4xtC1a@}vDDYUWm`o!*5 zWB#cH@J4_-F`H2|iH?(ykZ^m+bgDm~9Fn}OY9%kZ zzQ11EMlLgqZWv%eoZ>_CXyHA&B*h!WtpSwxELPHDreiytV7nYb>(7@Oo!`W?$YuN2 zJ3YW;qnVa>S6%VCiQEh3APgO3s!o>!B`p+G1;uQXP#>_@PvkVJ`n~yp8;T1W4Z`a~mP13kwUK6reThdT{xlITY<> z0d=YQZh(c+BdNc(d5tp^iZ~}RTW_9ldbJ}t!6l;W5pFcZwx2!3X)W7WU^)wiQ+$H+ z?)zOGa;0{51)c{d*&#_#E7W?H6*Lg7#wUl?XtDNHt2BGFJytgsFQ0El8=FLHo$x>Bw zPR`s6K+;5JQwpcIy}i9qPv+&1_7qY^Xz9OSH4_#)Mw&^AHbd!Sk*~?wv7P(Z!^|_# z)bMAJ>{e(mhe+Dc4HKXWWy6^K0kwr?#0Cr5rLHAYn5vjA;GBP9uZUS@@@|R^`^OhhA&?Qp%5l0rG=fuO z@J7!Gd;gnjj&Q{V#`eXBQR%2CGcz*@O9mGUd3iY);Ewe!V5_{#w^DB$crnaOrb-d5 zF5mqQ56nyyAmUe_ndwj=c(oc4wwlJAZ_Na_9V})~ntNo$kLSt)3>DavmXcIFSS%JF z;2)VX4SYUO6{F21)?)3O79hSG#T#4gxBA0U;Xi;Uu$l_6S}bN<;wkW3P43W#iN9K@ zmi-lN`CF@bXhGl{mJK-AD!{al;sF$G)H8Z;1u{rm_4%A~u)uPh8iZ0(5HO|b@e02( zfoGti!d~OXfLj;ra=uOK$^Kn^SflQXejbuSzP>21w;*5N+(g!h?0NtWNIU_hLPSIqrrwz<5a*S~wmhb#6XtA%`;kEojA=E;<5gYaHjP!m3Fs?Bb^`1PSDL;o zl_U};`?nvkxnE$nKf1CEeVLfE_Q(w!@{N@Ym{Giyy?vOw-pUIg-f7Ox$=UC~R_Y@z z0HLhWv`u~6ap@G^FR>u5xxZ{`kp{fDB~zo{;3HR-c+g#<5{VsBcDeJ z*URy>v=;5U`$HC+-6@OFhWOZRYUKgE1zA7?XV1S6<*(oJHNLcJeGaK?HEFI@?;D2z z|MF$Jm)EoSUIM@mUIU71GST^juixCY1DKfTHcVQkxM!k0X~9mu0_~~U&p;`8`g3te zVL@I@CwKuqJSwG{!o&3JG#&20rP}|B=JCLT5FdG4ve)|fQn85;043uMOJ6`iW%Trj zV0xvKe?70GG0I-%gG#wvzD?-&Br`X~4Y)-p1tb8Kru!NFtbxh(ZUL_x*t1=5KzYU(j+rBcl5Ks_TG@$G@H?J!O=f5R`{tkltfvg;Xi5P(? zUoK|4#N6S?x%dCr#`0pi9B7c)^-SCJuR;1Bt@sU7Nd(+ZjCB2y?=pxcf@}1x7szja z{NFCIP=N-A@z7(S{a+gVV@?Or0?fe$^+=rt&|b25Yz+m4=zTaOLf`-RFr9ADzRQxn%d#M63gFEW?q|T#`E!tT;y~fx z$k%Gy+X?qio%Pamhx5Pr z`=a>mLrd*J)^C;9Z>Kx3X@Sm`$8-Pf-sx;U|Fi9m+Nja)@HUiJXohi{UjOY`iXab* zF)g0!hwl`Zx=9X1fIL|3!`5%vwpKXsBy4#(2v+4_q(|^(=eIyjCI=@p42Hj&{?Bfk zLtZ{qzjjrAcwo-F!i{YSm)u*4n10Up`1>>}ed|qyxj@Fo_JPL(Dkl!aJ9?HKHQUA} zD;kcRTnMUzc5c-+nEtmf`?I@$TB9IB1Vltp0A`4SjYQF68x|ZKxm0I}w$wf=AW8y( zW&r)X4deHDr(+3v*MA?P?2Uq-kt-@Fo%#32{oXP!uWZo9y8udq-Zf!>^HxzwAM)|> zdyVgjlYU`oAR^>%ZE_m|y%WDjk7tx|nPNgY`<^+Vb1W*T5D=he95H-t?``|9k-evv z>5?u3VB8@BLaTfQspv^!X7-@lY6W15iVs6{f&OiB-HA6B-Dgce1E=T#i{y(o(9V}q2mWFMD zWd1gV|NCVt#M4^!m4@;M`>P}VYrDL>%wGU#V3rifP|*Lw4)gQ%SSWxIh2E*9 z`S<<;W=!?#WgV>czjv5U3uv1MfHsV`Jv%)?o%tx5@x1ki3#%ExPPAQoaDRI~% z2o9BSAq`~w7wGdJRwLpWsCSz;%GDW?CK~UY#XbM|DQlWxr&^>QR5#cb_XZ6hLQ#Qe z^7|s-lg6juN;(Kn=EEyqA`+ufnih`@C8H24!DadVHhglZyV&6VJa)Jz&hTyb>$0VurN*IihcZNWLWrVkR+;?8nu-?++VfdHtakD$(f` z-HX2(1>%bI;^Hz_*>gWSo+3j)V9$69gYrL*bt2l4L~7!V@+%4QNcIt}!-cc0g-k)b zCmVZD-umpfHtk6+pD#7&#|G<@%T3RX&};qn&VO98&_=Mn(aMj{MH32sytv(yJbNecN6vd;3+*>tAb&euHQV1|8A}L zGNAGQ$0Ydek^gq7{^ar%@i1bb|K}O}kNyv$0bIWSPX`849S7rAhw+V}1GxX^IGi3n zPdP~~Ev>VoQ9YN(hbFFLAO2TyqvTQq@(6XcwM6bHNw5EVN3akB7333L zIOs5bc1!E#>*d2k=_kbgg6qXdu5=rOGzT4B#MS2PIo4Tss(SAXJ1Vo;h!=b&H5~w%#Iy{NJYPS9P|MtO>z=~3lABUK$cN~sOV6han zu&}V(>5#?3P6vwI?eD*#RiFRnc|KcWKx-ej#7IGJ5k zYPAm#uzS*|lnOGIc}x*`|3a6I00Kv@J)8Z6_-lUhAN@8SzE71~sz{o%0$iqxvpfSCQg zGQGbmwpW?KDanob=^>N(jl{~ZE!?-|YR`pQTp)IJ)Nb*!54|>9o1?iDDPA7GpHPEx ze;`mI+b&SZfSJgb+v-<7d*8XEf`c{J_fgx8ACdo%Y-Kff8aMcFn_pm6Ynv-%&+deI zU*c=tiQy&u$?nykHdf>Yw0D0S1s<0}(DmXViWd+k&*|yuQGtCd?pbW@PUUi@Q0h*% z8AA*V4$dHvOq9>;S{en?6h#iYcl9?pTJHI>yI4>#ZhBP?qX)VpbNE;_wyO2Mt2f}+_NhdoRF-qo^c61gP%EQT`JR*iDFze=IE z1M7v$Z*i9qv* z!3A3c!sy|tT5DF@*sAu{59{sQSJFN9E%u0Djc7u#nsr8@5zX zQ^@k33GjwHMDfYpNxHyvw(D+gZ^!G;u_hLdPVoGFD70EUsC|g1#(=6v+oPG?J2%)& zpLn&kOlHp@O=dFcwEUqhLgtc~ob$Q-Z%s&cT!=os#9#(H_+!f~q(XSONFD(DzSvCN z)L`ewb2DFM10TzLc{jWt&EW0=<$M$BQ@m7KNRP#q;7efxk0;S9msRRLs`KKP?fPri z>JVzBVN|j^oQ!$0LBN5L$?ob!*2BksM!XO`KwejDFrg+Rl~nR$r);%)4Cw;eK%%%d z8l_0?~ADaW7@=zZypxv0I zPY_5S{`pAyVD0^l7uaII-f1#}FK&ryYAd&T3+EetRN0lwR8lM!)fUFe7ymZGFQ*N3 zgr1-h0LLks%9#N$*O~DZhTT{Qul}6U_!ppfJZ@>ge)9z$8vs>mb-i4y^Lzy1@O<#8 zPbuSUdAPy4zPj4lmm-<;->e1zCV#^600#mCJrLnh>1GhY^KHmEjJ)$&7PclQW=SZw zH5wh7!gp48v?gx!(?eeC0}RN239RYZgEYVt0_n{4KG^_=eWIS6C68R7c9$9sBpni!dU@> zf7xA-v|C>v2OwM`p6$*hK4BpjSD+?k^}5EE=4w7As^8SIVuZiFS!j_4@<(aWlt_xhK*O$lZyNuhec-W|vrcJ_Z1O&YNbP z@r+@k!Ku&bx3M4PjTwoE1Px7BrX;<6z{vuxBq}>?4(6TDO95$_|G@>HNE!KVhLWEC zZs*Ndj${Eq6%V*osZy(gd2zXr=E1!{@ds7nDRJ_Qw(3){nX%2#zG#Z?&G=w3H~HN@ zXR=x>x5TH}c)5_4>_~QwvA4&LAFAe*g*QJFGqQ)Ypp#QX`rvWrL>LVl2*Vk83M>+Q zA$VOi`j-J`OzW-_tr>g!GR886#>{6abs&I%0951ViC!mt<^K0iyy!ubl)#x2B)yhSX(m< zB`6IDg@AY<_mz4F%v4yQ~&6 zb9i&|X!QJUR*zam?g{W(A)A&v-?r^E^i`Z`ee|PO*46}x#bYDPHwP2n&J@~X#ZAQ$ z-{Ww&0j?7+fsYv1`^}{}gJAisr=+>G5h=o$QAOQPdwE4`N{xQ zW#3eI#*_NYbz}vS-Ld~CF8T`$v_PbmH@8xWLPBVR+0g*J-j+|hp3@`pdtcdnLb@<> z--Dj17_mnU(qlwHI2@|?F74%BW^Ri){i~~G0-v|ggUO=rRxB$_%{}Gt`W@#5Sqiu^ z1LTiZN$o0Z;W1HGMk^?@Q9Y%NV@q3E*IKMzg5&b$)v+%g5`H0A3>pRbb-oc{@-C1r z8Hr6y+&*r2i-McSZTYF4nY4;}^kef~hEqluJkF1xB;OqrTZiT8@sdj$DEJr8mS!f~ zN$e-~>y7O$i^6&6W!qCQ9_gVj1-22dUEvRJw-ncP;1|1dm{j6_!T~B$yJ~A+qb07Dk@GGe*PbV_j@PiqA#2> zLPDzUfK=!Ef$8Ip%|T*K4rL&r%j+CW8LkyXJ5j84uWTp|01hFkHOnKKi`5h-Lk1te zwqHA=4X5^arK_`v3+2)*^vun@O)?eB*V;E-VLAuU`kxj7&7};Wp6mF9xo2PK>%Ld@p8*NFter9{J=uN+s?_vmzc^^$kI`5tmD z2S6VN4}b~v3MH*_YilE7*ad71YLkIl42^_h%2%bRXTzqHZqQrd3&j;LY!A%XM)QOD zxLvkbc3#k(9M@6$N&|KJXtijSjW35<^hZ9~a4nI1$Qw&#UKF2XGcw?^Tx!m?UM0<6 zn#=2q3At14@#ajb^Q%xU)Tr`@!{w0JohpvaN$^G&(wcTv?ylhBkD1*c`wiJ6GQ6(#mc5YS zW>;Ytp1{FWQP%Mr4-APXffB+SD5mZYSi8IFRtiupn*-E<`<}h%ev8!*}axK5>W2fVl9ftmYxidkjGJS zmf9cQ2VAmeNfO4<_HtUF5TknroQ{zs<$Wc0RkA^Bq0B~^p*sDD$qye_n6^3hFlO34 z0x>m4+-rOEtc+3&%z!GJHFx+`zM&nK4@Kyh4&<-ZT59SY{toYbXQzSP!!f%vt}*tw zjFd8bUjhqO6Rd|g56B`ASbUSTUw_7$DsJlkx` zBYqe*b1dB691f}SAPe(hiB^R$gyNA6AuyN5>g66XoZRgXCN-t5Z2aN0f;;EG^0T<# z!bcwfiX7>(g#P_ru)+4xnF3&f5m0T zW-y!(wlSDY=*u5%-Q;}ge*=#pxJj!Kt;)kjN5IlQe*|U?C^l^czYt`zK8bE?g-Vgw z$bRO;1(f+gLOz8I^7XQVHUjznbyzc90KCfKRE{6psnZ*Q@GZ=^Izj8yaJX=Y=tW2z zO^_KG;rn|IMF{jkVU+N7N~JOJ<8{kJE$&X&oaffnh}l-cARZ-0s26VQZmEk+(V8bp z#)LeQF>po4T5?^cz3h~$nDjQ4FfbyqT$uJd)8021+tduVcbC!#khxR<5lIQE295w< zk}^AROymq$W{1nmI*9KXWveG^q-o=c-)#GI)63|ae4pyypQ|A!AP|61>{w?U9kZs; zTe)1iK1C0#*sxLxj-^hZY*?eFeL0q?jCVa#rPob!Zd9X090qyk9EFhjn4szm;K&N; zLB|~*7t7=+zYy4NNHFPM(Z!Q@ef#u7d}0S<@6TK(AMw#1aKtOtbrw^<6F=D+RfHh_ zz~ziYnlkTu+y5-g>bS<|am4`TD4c>#!I(;M2%Ev_^?qC@*=6ACHD;^N<^6?oFOD0q z<4}OJ>~LUuhd0(GiA0XH?zUt$TWwBuquyKDStRYgLd+7OBa7Or29lhW#k}Y2!Asn= zYdD;dcR7O@UYWD2ah$Ms@cgI{GNnJEL_b2lh#*D*-%!vng@Gj`m$+iSZ92T8W^_Tm zhg?)!89l_!A>L0zldiopoT~trSGlwNbH|)+;j_8r1&>sHl_M2TRKoK}R;-1|;+B;J zBOYoi9xrDv1S{ROfYASjO1=EETHx75(ku^6w%xW|rO}j>8k;BXHiV*;YZ6+MZEmXm zIB6&9;|5BK!m6kgfLx)%h$4|1fy$@L4ZF&3UyWzBt*@Q+4A7DRzl>fiAt?|^l z>OiR~V)*ats?#Dhd*MS2^l2@9hAk@1Z8GfEaubgGYRr`mwin1LM4QVy?nWFXd!3o>Qv!=46> zvbvgL*-R$i_#Uu&`VW8NJ%LCLLOAHk*Jmx5wqz@rJ=J98gd3PVfsvixFY#;g74>C= zKJ;)nHXPzNr9tudE(e777BdkFiDYxgb}87xFh7|Efq6k$B#XIPS*WiGd(50+Qbm~qj5)l^qn5=+ul<{B8=wwb z6;NZi%$(EV07+cZ=~HelDJ-fgn?wxWTs2};mg@Gwf~y@B$9{{UyDeaF_oTNQ{!kn^ zk=eZnp)HpI0tag>p2x(-W+6x~+O{7p=WFxq*^Is{OQ0pSWj%q)Nu@2y&f4rRT>Qc(rfc#UJJsnGeYzw8S?+P~Z@QQxN>m$V3+3)+xHpHMGaFTrGlu z={UnA1A9ZzfL_KGt(x#_=_*g7DYMYHQ>XHGQS;G?8i5E?Cr%5(P-x=duPCr<5$(@;6BLwa^uVVqgb{Z1EN3;>$vcbZ;g^=cJMeo zlCJF4GllKzu-jSfP5LDulKccJtd79ZwRSQU@*;OMOSGB@;H;Jl?oB7Z4e6&BXIXFd z>*fcUYHMrz&M?-RgzZeMsW8Ef*YCcT!?OJz3QnulI5L}ijn5;=d^_5N7k3#+ym_bL z#y>2cX+`gtM*v61@HAIwn60{!8A1Lxj!2td|b7;TDJkl zjvmtLDX$Tnqy3|_q(tEtN};7*f>_v@a%W`oYjC3Vwahu)AcD+A`FBH0w z$LTX@cmYG3f$4$(gbGGUQ4^^F1gi}S|I{7yZQ{65mE$X?v$lS93wtzAaUx_-$j)rA z6fX0VQiS80XXxxSQOt^*OG(_)9^*#wI2zt*P>eFNf8hd%-gz${=|BPL^x;Kb;>VhY zHI$~i?zv@0(W^phlP62WqYV;}<*>8b{V@lqyf-5Lsn~Nm@KfdfF!he;)d!xbd4f0I zReeS3HJxLi4ckC^tK-r)b1H_p#=TjtPW>{)?%}JDSlm#IQi(=-N-Jwk*oVUI)%(@q zBD?J|1Lq+i6(SXJ(BQBw(A|L^bScEwnNYR6CJo>+^O95`vVb$enPN;|8E(K7&IG!@ zGLX6M|JL!%>yTTKX}8I>S-2p<#ay+4R}1R3c3+m|KB2?LAA6={*dQ;w2Ur7{v~&%W!aOfx)2+uePEQa{5{Ux2$|E z>Cnl!H~pv_3pnh_`x~50DsY=NHfw5X8h4bYGa2mIoz%I;0pS#}q~mm5zmpDrbXcJ- zu%WScqGerdG0PMlO&I+cdP5k4RMGlBu(3MB>7&TviVey1X^o%zCY$zklT0)JKn8RtJrfEd!>gAoU?K#5*zv z&r_iwzKv20(EWDM=LVN$s*^;^J@n2J2k(3*K=8yipcWCW&T8kw)1Z329)IPsy@$o{ zxfqfjjyWY9wHDJ|y&bpLAy?5S-IeIrRG(&RY7k!}bfHKp4>v%~C9p^32jimWu%Csw z0jO66Jjt>s21>3UKavmT8|5Qu8#KN@MpA1sOm6f^A)V&xK;;JLRm7~;LJ<`rs(469 zVu_why7`#wGkZwMvD_kAZ7rn5J<1G(pSkF89lF*W|I|6~2FHH!H7c21h~$~ptQTpo zbSnEBt6n7)LH5rjXRJyRP1S`9sQ|_vBTmptV*9<>7en*Sbxt5cB|K$0p9WCCY{)S@ z_VLj9X_7Rv<%A||Snm?-9UakU-anwKB4{DdzCogyRN=9`NZJD|*FFpteC9qoLQq^w zkfbwBxg-Wu;j*Z+yx((9?2cO|iMvSiLZT1km*z!3tjk&64h26eYYhftHJR2tUP~8y zt5A)~?)e}l{#8Y^w&PyMq5aTCJMSqvRn|uwjuB~`xu}YYiUWiJ7qc*Hp5PRX&;{oNfZWZS_36T@OBmdQRx~U=H=V zzr+@RY(R%3{+%YmLMn6IiF7;}C~kSw+wfvL&!I*PEcw_uk%KisOw-OJYN?90=y--M zj#7e^d&qd4Hx)Pwx3UB}yfmHqRzeJlAq+k{W>hGxL9o!fpA~kUYDoyYnz1MHgp_qVBAa5cmiTgPY+4`Vkez)oV}mw4ZwzF z18i6dZs&@qCKKi0_tn>q09S(Z7zqXlhqgsk(#JUJ_J)0+0Cb^q<#VO_nK#(EJpwNF zMI0leNI&ZV1K<@}XKN_CYuo5?_`2CZlA#e2|e#r%`W_|R4 zmJGd%oThD>UbkdmTr1RpuP>!PERKLLpfwNFY#1~61hNirstAz#6tBnYB{>u5-6@z& zrul3|gb!TGph|q*vt?ww_9DVn73s)#igKCu#?&uG->LqIa zve3LQZBU_FvmFX1LnLkp3vXKa?uM!G`pFobZuXNx_K9BuiaAR91ENMQ%eu6*OS)uV zeBdiLc5ip{6@xqh0VL5l8tok0O`0A9{>3I&(&w{q*lZ%64`nlZUI>H86VE0;3syN>`y%kr?+Iu9*0 zlKl7TI(V9S(#x?|9o z%P4z$N8v`#l7`;UZhE&rD9!^x`!FcCo(k_~XIk zZ4A037l)LF4HmHvIn*e;P=f3zRlY$s^RUHww!w?S5wJG*Cu1clvD}h$ExOmiR^XMJ zo6AL+^1<_bC#IKC;(J>C*oP9ekK}B8b)a+lzDm=*%CfeAf*4|ZfGi+ccMhD4mH?v8 z6-ig5T$V~Qt0SCZk(v;MVkic)n!dpmW!LIJo(^?Oc7JSt8dQpmMvDV8CXg*W=3+ig z8pLcU4K|oqaSIpZPjcpaFhP zPB_8UR}I%<^eIs@b~3E1)S||?EB57V+1jHqo{eZgeiExFhbwo|jn`l(DIO>tA->un zC)fSJE(k;_kX6-0Xpm1XKPC%z>zV{Gcd6pLY@LuG&$NR%R zK=UPX8x^bAEZiXD&y&;?p&Ufr{-Uw8GI+o3SC&0$e_M_?4C3B7hHpWFb?2m975#cj z97qFwU23GiCG87^#+GovmF5J1{uMHULc;m3%U)1`Ha5G}6A9-hQj7@GJ8cBtnPyvV zTN|VL{(=Ql;nNH;bXYOVkd6#E-rddWF43wt^3UA5yEhS*$|o_ZPr&(Af2G%2OU)}T z7J-rD26R-tJOm|I?0Z3W7^+sva!0RxmxH=}Lrr+N8LjzjB}oP0=Y$X6a1f-qXg{;Y z0UIyXbBwM~oVS3OVUGIXvYtG$?&Qhog;KIDAWFM-LhKKL^jfaa@+p4!%swlH7+QWeOpqP zds#QEv?$)_CcQ0}y_PrpnOU7m6Gb=D`|^>&v3Zo^`2J>N3Y!*Lj>2WY@nD{w15F-? zp<)q5Oexx^>+v|l5Bv|WbtPQyx+y13QGUefeS@M85JG891->7lO($Nb`7 z9Mu6prXA+@f}ZzHZ%S}%S&8gCH$GD4xMYjPWWf+1_{2%7R=W|q-(3ae2OGFYUwYec z(TdA9C`n>sobBce67+Pv)z23pkF^_tYn9o7$H@?zXmHtAD=X|*G^l8sBbU#W4@l*Z z_Y%=IJ0vb!5>N0zCJl|^XLxvkH?DMoKSHAQhl2d}RK$sD+iGdVqHge2iRI9tH^Sm?N1gx;dmR!^>iqYZlMY(eHT#zr?CoOKl-fK97DG^yePnWe>*V z<^L+u9#mwQQ4JZx5{*3Rxtav}kH{?F;eJV|n2Hbi(n zc+fdh) zlJ`TC*|U4SJ7@&2biZAS1`?ii>;MUA28XuhN!(%o1oezpIzgcRz6s!i)t_$(0jY5Y zMo8t2AW>T=?U*K~QBVLx*a%bnnawzIlrrOVqn9x8?DUjy&_ISjh(qB)HkkQNEQW?W z@z(qlZ6#aAt{=#v2E~0}4h7c`5E$UpUT}cnzCco?Q>!$2^8_UX^bWREn*pU}w7^~! z8lVvhiC8A$wpd1z@l4h}g`RTyoZDn12YB2bg{neYot}GFFHNS>2?6bBL5Tj(w;CqQ zM7Y3|tH19)w+3oimR4Ud;ES%_{U+<4Uhu6zCEaKA+v7Y0EgljorjTa6 zLtKgN!ZMl%kJDGr)snteH`n1tyPdIqaTcxm!s+&a+jTo2hdMCM#Tm_A zh_GeDaewhm*yGd(hrM|r`%d(WMwEbb-LR?4k#~gek0TAfsW##QdRZA$u#gGP&d$C2 z2K_tIdx<}0-pMnM_b1#jK(BTJ zKZqMr3#DvxpGQL(Qjpc)G&*`6K+I3fd44;5VP1bhS(hzGor+Gvpz{agd<@x2#3eV& zU6@Oi(|rfUWUR7ov>+>n&;=-WMtaYtE^w*U^rWyIO{=XHKf8@bKl%y*fp4O@m_oi| zIGI)3az)d)Tdk(C5h9mqGw7kkaW7h&NFh%{R0{w0YCb!$#-djz1dtP!1Ki-C?m=bh z#D;1v>0)ZcHq-?ntFCKkbmOtLybgYB-fHtqdniB-KD}_Izr<)bMIM-^fRcU!3eqcq z&7tJnFsw=0N!sR!^P=xl1#cZW9QHm`T1@0n11N-#CqWO+Gq74GYi-Xx>q2{#b;+Zi zWLr-sUKN7FJINJG?#6a_Gjr87I4<#E@_nN941q2N192jFO`l3T(HD^r_$nU)Gjua`Si4LeYjp2~VD3E&qX)oS(vgvn3rwHX%jRC;uGr~W_q?%#d(7+P}MHD}kDI0RB^dAIbkp<}3v=#KLq1xfA~ z@!vE018wsP#kIU>8q)&470SNBb>6d9Ew{^?cezdGP#M(~vTtITYJJtqD9ugY{`PKd zx0!r#^ENi|QCfPhouf}EPJ=|TKnW;nuWp*1l{cQ#n<1oX_~>$8FQZo717MJ7|I`AI zvtqn%XW8PUUvwj&R(bE-JX~?&Wixk{XcKk1{3e`iJ!mQ>L*RMLVLpT2hQzga9i{h* z3{G~djZGX)Emg*}$76svg7NwOZN^#s7Sc@ZvE_mifA4lm!yyV6I+-35XeU|iqgOUm zrh+U$b54dB%ZPaP^5@Squ@xWrIIYKqv+-C>$hK=+uW9_XJ5aj&ax}>t&Hp_mlR+3x>0Tx1mB*yBN+BcURcwJuXo8eTRbn} z;@SZ*mdguLpp}19y*EoB&O#l_tggJvmZ)s}`uW41jKkhwx!XP_CVb?NkI<*`<|5J?itamBFB|r{S=vgd~e)=cQ*>kmzQ6B9kn#yrXdlHY%mkNR*=K1k}+RxZeHe z1GK518$IuD~hQ$2FR6TZxn#%Vi<4iN*O&QItmhlDlrE)5QC$J=ScXY3jc zQ}3$UA$ZB68ZU>`$2RLWV+h)vuHO`ibm3(IEO83$xISvuB_hJNVPo9`!H)OsUp*a{ z>~mLUG{`F&3p6G8zJqxpNYuBVfS`z!g7T_ur$vJ`E5_2KI9G>`E_R3{LFII#M(BrH9w-DB5-BKsDG9E=MzCR#f~PFFazWt&R~;}K5ug?t4eQxK(V;JUO7EP)6fvzsH^mgq zlE-OGYw|Flnow1aLUqU&RHQoIp6%Y?;6tbOwRWKG+9~Bwt;(b?!V;n%y6#JZ<8Hm z@t|q5xHZ_mc5>r(X|2;zy}(dX(f`5bylTpL9g0klFaEHgq~+6`WrNU^dy8puw`VFH zzn0T6@%`QBRhfLgc@bX$P$Iq`KM@$9oH2f7>z0kwRhG^4x}dkw<&PP;H}CsVCumy) zgQvdW>c;3E=17*?Utp`AkCK+Vw|xyfrvG!H{9G;_;%S;idIpCNO$_fha%Xir@hIPD z?y!6r5wT$3U?Ep;EHsis6<3P9{pcyflk$*0pu(wXSdyCkh)}B$bTU@-ecQ%k99n-Y zzpySeZ0_+QGyqc63rxfdj3JTFJGsFDuV;^dh~yG0#y*%hB(7)Hez#J{-*7NNEq?DK zbBz@=y>!uuYL!cjLWz=QDbj4$nk&<_w~*hH16^IDp6y+};x#b}XelCL-7TlQD^p{K zLno6=WEr%6{2rr4@G-s7Hb(m0S|*SZlB=;u#%85E&Iv%BqEsr3sM|@=m3urQ2_ybQ zSrnD5)#!%geh*ZFH27FwBco(8R$Hb}qD4I_n#1&URyE2$7>N;0#UT*cBU_T-6U8cWW zuEYM9BA(B+J{FnO1=@}Mv9xiCF@D6gS~gi-#F1hSxHMVm@MuN z)zU3`BeRG4D?<=f+SBBOUZ6dQAbDdhFf7%}M#|7*BH??xNu}uoA<30%X_9A94Vfpl z$T)DK2%fUPLQDP8(v^3(bQVNVszn;%mO0n1xU`)mZ=!|fn#njr8r-xlKI z2)#@hfmB3e($lL%T4_LPYqqTUX}yX4k6Xg3u-Ns)*+IyR8&7sjXZItm*AdNgfTFO4 zRKXfVtczCe0x@G5gXry>w4e%wJ=&Lv*~B17_<#QNNO}dM*2N#a_|4RMxr1(JsC+lK zX!UT$B>dwKU<7nhbs#?9lw%3WoWq|Lp3ZyB6`d?Zl&sC$4#gr72Sd^jeO-B_5yFOK zyiIDAgAwtgu|MYFQ>*{y5B@MRS<59m*mn-$#()IVH1a6OEJ#H*El#qu73g%%J) zjCEYP{;5IIip2ySm$A&b2stJ%g_wc%yH#>&o3a#b)v~r1;@D zw(#@v?#fwBzKH2`t#I!{!dE?-}c2* zbvqYr&nN&c%I9)Xuae?=fw?{MU2qtbO07}lp!rs7rraRpTd}4%hvUH-=10g=G!Qbe zBo{H|`?wmhuCZTF{!bTcs88cU=@_~GG$`IoL^1#o$$6{ocHKYG0!<~ewOVR_cC1_x z+IXTo`$@4J5KLmS!Jt2;mvgI>vV`;&)s`IoHeD`WS^ zDyclk$&{w?v;Vewf6Os2-~|r7sz`>#uZ7q;%grliKNmKc2A_*&WZIcG?|J z^nC`uA5Nxc=CD*x#!})Ju~e_foEWTZ{6F3Lhlc$(|L-Y6*mln+Bt_^KD-VjnLaLsr z6wrippLf1}sG|8_hHy`LLHHfCkv5VO_rFc+kID5)LEe0Jwl(*^yyI`bfxHZd{`_>z zWa?iC!v8NCfBj~YT(~d%_V?*jWTcJ!Zi-Jf3`LZbWaZngQ}-v7URIKzPOh1a7S z$3Lio|GF~5L{tzG`MsR9-u)>WZxJ9WP0*+H>%YJa-!%0P z!~D+^`(wf+7O>aHYq>LYnj}}2D8&;Z)0OO`zpZMeShjR9(kHSH48M{3|4k@Bck{Ra!8|#-A=(pMh_eIo5{V)Zzfgaoz7{$D^`aQrvI9 z`;90+SO&~nvjL&%+bjt-@1ra>k2C2XExr}+%4fyL?L7SZ)IY?ObdKw_%ptG@|2_vbKG_kkNBRI^|E+cblz9GX?b1_L@;TL4Ra#ZqS z9l~+cvqLwJ+5T~(g;f!-D|DnzrGB$R{*R)D!alS#BQpOWeTIpUF8?x<)0JPh$_Cj) zs{)3x5gRWezx=*l|4tA5<@+zvojf;LGP1Z9rJ5VCmKTClboy!T#=8HRKYn`}YYS^l zC&mprw&_npFtsSu+z7(U>zw+GhDqJ?+k*Z#H5h~$`pHMIs5>Z(%lvjym-6YoHZ1^O zb0eIPB698OO!okfI_AH+9)EwMun#GE)Onz1wBU3d0x_*T9d}{yhhTyN0`XSR%Gnv$ ze-f_0kMal6!k4gQV{2*nZP*m)3mzE*bySgS?pVHT4YcpeSd?3lj$D}*xAYw@@c+!9 zetOW7q}>7)cF}3GqwY5jAomU@D*5VqT8%Q6?B(Dq-ebYtr=v*nWgau`<3BO+7l^$| zoirkDV+&j97mbJ!>SGQd)_8*S3troCYO6H1J|vg{J!Q!I><&+s8w{RSYTkc3Twz|i zIgW4J$Nwj3`;XisP11&d4M4)7M8^Aq8H_yKC4nS&2C3f737Uejr&Cx@xoDsbTXS#{ ze7%%F1HhL)hUSfFxw)YShjH+I8v3l~xt#nb_u(ss-?yN#Vf$`Vj2rYCLDfUWL} z{hRRq7l*+AlC08T?B+zx*E5kaSnuK5LJWy7AvxS5U#=5gIyxAsa5KnBNKZE2xeuuj zI@o`m-}E|TX-?J&P8LTwkEVDu(C~lrEB|U=qz#~168t*I;3UH7xJZ@~uaHK;6|3!X zB}p`2;~g4b_(%IWz-=yb`L{-=I)$y498xPqRtK?5fLLozmXFmJ>H5J^L*42n_SIX0 ze}X5Cp`mP~MaJ&LvSD86y(qMO5uLVn?EUzed%}!RX8c)3qs$&}NXxwDWc5uxQsXlX ztQ7s9TgOOpKOWyvuvjFMpN>@Lqa;2^(5F!LOMxavdFO7rQ-t@UjfSZ(i3BngV`*_S zo_zA3&}HZEpc-NQh4DIn!g0I6*^fW=x9fCgIEB<*@tG_l`2@QV4LoIn;hnWCfZg+q zX8gZtvH#Ed|MoQY4YWNXv_FJsp-y_KaTa}0yaR(tI8K56OX&Jz?~A3NouofOsWgcl zI*SLiBo|}__C~9mX)IK+>6hV9Z)S&K{^m-nga--a+SBJ`g2C?4QRd8Dq%BA)pVNWYLCNMlgpK|}H@g%YQ=KZG7 zPU)q&SD-trtcjIUKfobmKz7-SxQk>xH!$CW?lr0He;MR=<$I0})nMy4696}!A3>o}MJC;)fM274r#uS( zXXg3K>Tq>h_w*4_$TuE*6i8O@LyDK_=>EEO3~Y+l`BPldD$)rgF!X7W1Gz2}GO2W6 zm1trpY%CkCbYQ{xo&AAG{Ew`h_t{T}s}szpTb_eRz?3Ns!i0>)W%Kb1JA@a>II>d?%r~e8u7q65Qw; zl9;ami%}AV&O9s17M2-&p-OP4&0m|Cf;T|T8%?qWn_eRq+ z;ay*NW$>k6B9ts`k{w(w`F|$_DkDNbd1$RwDupVtBri|sNJ=vO zKef5B09ZB&Y7!t0{q%k`8~fh~{a-%ZMgKxYRv69v{}g`*U`o^Xg{$9+A|i!v{7VV= zcVA*kk?6U+oEEJjQ+q6+I6gBR{a?uZ+iyr>ZFymX-E}af441A6&%4%1*&O=iGX|%| zz7FS`WsyRX^QZF8Jwj>fw|2(6t#J2VGoP3>u$x0p1Q zP7B9Dw4U5!&MDp?+=ttx4qxAL#^?>Zp>~GcHzpA{SB&DknZm0l?#Gm=Ep9T>*Kg*4 z8M2-Wl!RrjZeAOmL)%$E!hrYx$CjAzpTO$@R!s>mUT&O+W# zt47A~;QFZAc56*FN7La-zu27JvVTXU^O_r@qe*}Sp5OREA67o8>yOPp$M9EZ`E)Qn zPg`p+k@4~AtuGuB_F!Ef>!ZlB4v3Yo^V}Eo>g~6W440jOXo4Sjj*D`g=ycXUi-6dP}Q8X`&UFt!+Eee4Wbhn#cI zU%_A$8%^NZdn7yNQ1C~}`D*`6c$o-w|+e=IC}c(CI*t5&(Dm3Y{ch}cyvn($TE z{D3J<%JJiG6!6Xz7Rw$UrD1@}cEM!UKT@Z|3Q`^wB?bwD3N{q59T%Y&9I3xd~z}KZb3@=@6jo)_RwW zg5DV}hxPk28a?SFEGXLYliQ%h))V=*;Wb(Xf}Q(;!3VnEbvg&ut#iL$(Qt5@*5G979VB>^T$)^iH4 zXLRISE>cS*yiA{PbywOD2|`5XK~3mmP(h&w(eiMB2r|gpPBxK-sm=2W!GpHv4*hn` zlXx#Ng-dT*EhMEBFz3y;k7x0tG0xd`Z5~8-(xdr<=W*eT&EZ}?HUDMIjj5}n!q1XK zy5TqlwD<8iM@`xj!iY5)r=VA_`5eNX%{^;3=fy+3P9iEywhDZA?jt;;hc^3qbTby! zl*_b$4D55t;CA^h@?)-4tfu-ByNvpDx&2DY@isNaJwnexB(&O%q3>*Fg`+Lzba{(q zQbdPk-%y^QcMh9qrZA}Rv*H5JQH!?|j3Koe=gT@LL#8HhweGo}r<*0%ZEOy+F;~kq z?Ijg1Z*Yr-Xc6vd`63_ zMJZNt#){rRv_`;!&|_ZN`_h+7_2x`B*X_d}O5DlmXw0KB-tp{rr+aKVK#+HpJzN}=v zCacwx=-$o7fCt-3UH~WYu?M8YiL&M9cnZ``0FHPCb}w^Qp%*!O+S&f{EzuJ>Ut>Aq zvy0^p4M0AVLx;X*pEsev1E-S2bp*@X_{aX7;}b2lT*dK^q!v^sRi4 zTtGVw%}Ts4Tsqb*6OvL>`i0>K*q&g7aLq3sIN>oP%0Rt2;szxZpd5^(gsozwLq3~t zxf&2}-)vl=&6V<}8$GX7YoxX5G+Wl`#|4Y@p3OYX?xKHdTFcdWk4nem?;x}RyAHyZ z#X&C{<*Zgwpb{;Hh88Nq_JxK|WS|9QVCv4?#)jiOl5eGYNf}*RD}X9~^ZX(_3;7PO6*R{p8uFyg@e+&o7@U5V&$2jNSxN~DjY#PK^JtQ~X_ z$Z5tYi%fb|vMel$JK^uzyI75FBF>d!M6?DCkZa^u`_L7pnTKY*s0p#LBEvf6^Mh7T zdi<+RdtQ2jA-)2g)jMFm#Mb8k9~|RC?K=+7F0wm^QM>bpteLstLzi>Sjwi>5#N^>B zsk&*STZ3K9PFKOjA;>{XbGW7+g129rf``a?44NJ5n1&F6F*&Ni!Jhk9Q3!Hz2hUGZ zfRdXZ{2K6v9OsEpFeX4pUuTt@8Gbd6wM|GLx4C1@5{>e_o{c3!7X+|uFWiCU9t{oo zxqg+k7M(`k7RrZAXbk%WGY0W)GRnx*u5;XW(B%8n`-QiAP75}wg_3o`XKd(*;&LPv zzPToj&!^wXW0a3m#TZ2%Rtz+ozx{G+gnfQxgkV>|0hXH^8)+UR@PQ%b`7jiLPz`d4 zCh+M_Bl(tz)bh19DyH-q&@(xI+ik98x}XaIB;sy-LtoHE#jM|hc2~(<7PWkW*-3LE z)po!OQ%G~wue2A#)OA9VhWeM?Gm1lDSi9n$>5CeM9)zXls*EfO5n+RvmKtfVI;W1ykMxHO0h0|FOhyt=hu#7xM7xj*h+ACv^;hw4n{1z1LtiwI4m1d|QSkd3 zb3$p-HkE_i+1&fBdAN`$Th)_!)h;qDZRLg7{MQNVdf5b`+RKETx3)q4W75zwQ9YZyv}+MEYvH?-&`QMxJOiHE?rUR zy)RKOqmklzKH7x zI@0;xlbzfe{K~T9 z@;vRohBCKn(_p*CG|_q%&F?#LbQm;%oU#B<_JT5(fVq8=-Fkvu5$7>KP`E31O)9G> zkvqgJTF)&kX3hi|M#~U61SRREiyZMjm#;MG*dhr`l?+f?SoaguQo9_@mO+rb(%3 zsrBy6tTyLL(`0B=t|~{RjdvP!yyOT4R4vZo|1^Tq6kWIkb)kzxpVW|9>by1jm=`U) z(H)$3aCT(UpjzSvim0gNV4_i+I#Sp_meE(@ndZ`dcckBZRTprHc5x3jx%=f2lL(_0#vrd4&a(SeolOJX{={Vle?=nf!6C04x_BJo_lk5`C!BwH-5AvX|e~8%TUgL zQr2r4TlEY17k-28<}`^nyx(gI#CMpedoMdTi~|GOhq%CSe<0a|^sp@cvn4Vg?_AEY zwQ4^|=+okkh(O)^hq4 zy%yNG;~W%?`cUF>0QWGLxQX~U`?;n6^}@ajf$`C26xm$uymoCUfc70!1LfK77(j57 zmYiy2-3nI_6pl?xR#*By9?1kPn#T(i7}{rzC3fM;IjCd!)I9)&V*Hw9xRt)^eG z{tmi->b*JK0<%t?wor&06+OLBn@HA>`Aj%A(T#o7`9U)zy42trmK!V4fIU{4*05fI zxxLeEWRPP8erR&s*9S!J>6fbyo0ZNQ811wyT=PNSkYwx!9o-XMz7BMR#isXxxH0AY z&kQ_`&U=-~Pb|Cdz1snEC6K#bs%QX*OAShZGOg16{+Aq88d^fc!5_--_*{?XPX;@< z!1Oz)OynVSa1ys3^^xbg(FGH<#MB+{vfu0?#Yw1Pcp5b(UFYvA5{(C2cGGDTK2mwLW) zt+5qTsc5BG+0O#j50sXL@!~3FnY5_BG-xu-uwJf}DWQu$oVsSUuJaek!qeG3OZk^;9F1RAh%OjWTDZWa7(* zb>NfdNp#$LB$x|q4&z_4Ug%*(a2%g^O|e-OInNwrq1W&ZfrS3F7DLAXuwbj%|^;fo%PXV>X^&@d*9#(v7zmRSc9#}TlT@oIz99c*X3+>8VW0E^0e%})F zXZ;BCyhu0ghg(|N<&yHY(us&>l`}c`aKgcnk6df9>O0{dhO_pX^pw6V2tKKMZ$B|Q zB|?WK3;h^kHyiP*=!iG5tj4D|&QNX9=4jenX3sZ??@134yB;V;Y@PW0RP>VI{pYs> z+bUcpz^%(@>Rx^fBBj+#_btLyZto=BUpLTd-O;?F##{C(JXDDvs1Wez00|58n>?Cb zn7VsT8m96-Fdv=FrlM)SYdSnUUhEzO3B5{I>L8#ZjIm(k(slM{*BpFG35z$0Wy6T+ zx`EM-qC9ZkIp3+9xN=hBp~XAF=m0Z;h3@1D@!UasQr^`2nR^u}#W;RfmUFQney<8L zO0NV1j|Ff5V#m9$o7Ja50R})`QKu5)c_3n}GkV(1i}d!l*YRF_`(}4s zOK)Omw;ZGhN#B!1Cc5i5FzMu48^Yv} z!4S`8SqH6>B=P#c!(%p}b>+VZpz9GiKW2{!9_wExmKq)qYfr{ndYg~4^9a3Ee&Vxt zOK7)HlHaO!PjB;v@QTRBFKa!};qq4K(&97o_FH73WM6K+42#w-(K9u5{L zY)4TOA@S@!vC6asMx}qhr>U_ru`1Pb9$=TyI=VL=R8H-9Cr8?ATp#3-%vtVRRNmqP z6CkpN2dsV|tzUI0Ot&vvpP-F-G_V6r6y3zn%?sWwrj-bMC2#Z0WVXlIN@#fLP21D| zNTpmZaF7>$KGY!QveY1VXYu)63BkV3iX?aj1OAp-x82VBoCo;m0P%J9t_70nsfBT! z(QhsYj(IztNbh+j+OFE`znl*D+*kxxYCbTeaoVYXJBW=FJcv&g<6W|1sV}$EIEyMC z@HG;0g0p%TUy`+(XW{8$S$Ry&yX5UqD~tMLlIBG@euT@f6GvDaikaoYY==2z{E1Do zlFK|>>dEC@kq#Ptg1t(=RGA3dGh5f$tBZjj5;c)8*%iL5q69gD!T5@{{GLq#=jAD>ZCy~^g?YzQKoty4KfmwE zk-i8SQO$~3WSuQp?(xHGxfY@z*WBj1onk)Q=)wNio%61m{HW<>hBZJ_zig0-}0T!n(3TqNPQwZ?qAa9#p?W! z*C6zu3h}i`%ug~@D(GH1B0L&N0V$BJW-o7c!{vQYLx*xc|g; z7n+~JvLIO#1$v^aG1z8M<9GkmkL4`1>bY?hg7T+t*z$^3)Drh5!77(d|mf0*HVFmC*w&u`y z#8WdXN>{#R&$LTwRk(pJx;&K8hhe5dqgq9<2r`9`<(IcGL~3)!qhU5NoQ00{lLeoz zaO{QKD|ug(&MmWfZitHLlK|7W#vsiKhO?%9*UhxQK?nAxh?lChHNUZDA{&`Q!tLcT z-ZpRZ){D#K;aJ5D1Yq7r~f4n9NS}Edb{t5`_x-+a`X64Go^E$Lrtw>pf zR-59019>NQ#q;JsM8oN@V?+$tEPw0txwT{;5gR!imnnxjKifVC>YCEh?`=47gV0rL zCU<0B=Y_$Wupc$1nv-i9B3uTuk_GZf({Uzao^cI-+Z;fyy?>x+LXP24Kb_W({u7Alem z%)<9}yq_D8{?Hu|k@dao#K%IMH+qg=FPcx1z6D%F1!?CrJ=9Ph_2iw?&Rj_`)3uec zo{TFvzN+@5@2ftak`3#BfTo5dsWCUqZC=i--!8hl@47VN7_R!g@$it{i#kKO!T?~i zRc7r)vGOzU@+h29bKVs2&d*my=P5R8i+B zhdt9(@L9HF2}9`R^tY7v`dS1-&Az3zqKoo#)SVs3ht>8Otar z!~U+nm-`$g!m+Ae0OQL9&ykmp6YBlp?G@VDs+iA|K~&*H0AgUsLwmvgh^)=Z?oU$% zmldfj@234F1prcpD?d2k();u{)`zf~z>Xl4JI7srQ-S$wb98HPJe(yap*JEz*%pOp zI?@f?EEjpgnGq@Knlo}T;|%U-y9!wQ63ZwR9gwxGD%$k5*D1i~C4)Nu^)SKWwC<9% z3A(0mk00|rnibb0BXbd=hbG_Q!_$j7Av!WfRI9xEhaKmoaQhBLfH(7%wJ^r=%8lq^ zUm_do^b&CTVXcLD?>JbKTCgs+e8-q||y}@K|Rar@f-DMUQ-< zjBATq^69PYo%gDTQn`8(!}!nTF1>eFM`6I`n1>IVeC!8@pxoo!HE6iW0J!Ia6FfRi z>Fic`IW3wSr7a({Qq3xrs&r1zXdienQbF9RA7+sawq(!aHy`+qJSbKxweh09-=jt( zyOyoRO(k$-R^sd6pDnq)zFdj9UkN?)M^@ycq>u#(pz>^-^;8_Oi<}X;U*#&z1w^La zqu={NLYcV}`qt7@Ah-2s1)JxSXw$g!86fe#Xa+qpWX_dVRwAAmQqokweO8M_ z6)mkpaKoGmCQBHQ%p`Yk$ZBw4Zf&0mXmzbQS0yo)XVx_s$#B)NY30)g*+Hy)H$_X< z@#uTDYn#@zTnjauEA}sXcJU6(DK8-r`X-|IO=9Zpqp>y8S`<Fb#W8dIM+jvk-s+t)+UT;=N}}ort6{sz0jK-*n5#*D z>)m3rR0yXOe5PBgG|+8;c$>QJO9uqK`g#BSb8G>WceL6C_78yHS9&1V9-6aEB%$Jq z5=MMkY9{!!>*;nA5HNS0Aj4eXkIHrv=9G z5z%X-;q&^!`$0>NvuGKAr`ez~oy}sbApR&g^Ct<8Wr75HgAR5|Mi*28^QM z8N|}lrJ(eOD>V|+I!%gr)G@6RD|Y2=Js9}pCUE=A!~;{_4IMzcqM(CXnDs^;+xBO& zkGh6!G_`qUY0r4zkUSx9q^KkvT}JYTrd^_m>|L zs2-+vxddx7%XMrcNcRBG;l+qXgLplXz021>5x!hz4KZWWZ|>E2ad_ncN`$laW#;U9 zD4OH6EJgP*@}2!}R>|@Q_taA)@Cj@TCqaFZ9wHAf3m!M>Q)by!*;I=LhdFFQ< z)f1=DCvko>>W_ox&ET+_k>t{o5+xHz9>L}LvVHY^Fb!q*Im!K$Jx<`<^6j;w+|;4RyVE7&1kZPK zF{*1s1H|6O(V_&aL-rrT1fQ3Nn^6)5zSTZ(G5n)=JZn0dc5ssy`ti-T?a z9y~=~CFNV+ytZjYmcQGySjgS6nZ8_Fyhp9+;!8S_?r`k$@T$2-eS%~{gLP3O*xdlE z7!fC~2xY4KM_@y}uN8EH^*+EeW8V~Q?GBY|z@ zWmY*IXib-8$D|+OrcPrDfK^i!wP#*?qGr!#xq{T^ZTqA2*EV&@p~y*VhLH3PvO=3@ zv4lO7T;WVYp9%vi!P64=&b<3K)PtKWl%%Q4_{Z}Nmu0;y)^b?5L6?$aYh_u&OtH5o5&?pQwBp*$V<^#?CUDN*Dj}5e!so9%-477~J z9~NEuWc{9=2fTF_A@tKh9(601@aD7@m3mNbL6;~;-QUg71!kBUFDo^_@@&4)z>+d2 z+rlll2T8un@YQ*P$x?kR4FuN{M}muCSYXr>OQ5qy4IIp<#;NKzuK3*VKwk8Wp3)>q z=y6+ckXPzBu%%wYVg#;d_PwnFlyruddd|vHmn}PoNAYe%GG}@(T?u5iu4~J;8@bRK z|78AnH4i2R#2T?7U`7$3%fApQhCa`(Hg=A7NLWRvMD|HlXfJ8T8OW0M0|~{(eU0aRAzzv)BsEH4Djgnd|EnLRa1R$F_|AM!1nRo!yQxU0EFIifC<-hwe64=`D||T4X#97EQmu z_5xtG3M&}B)fXk!zoAUjfGrdzMF~enr(sKA_N-KOZln?~h6b&BjMEf|+;z*z3y2cm zb4x^fd@MI^*(JG)5yLsmACVFPdUq7eciMm6t^7Datpd2LYkP~YBTeGy&9&siS0 z37deO?pw(j_QXGKG`gDtVBDshE3|bLmm`qz=!XhsU~ug8+#Xu89nM$xkC@Cfii0o9 zlvFM03_6!PL7SAt3B4$Y@cc}p;buxUDsr)k0zn>^Dr*109X%=*t(lDwf3`8VPrKqq zNM*~fL%2q!(Q~ixUZT?2|0Xf(`v;56LTNBXhu1Bk>w;NhbV_mm>3p$-KfZ4O$3|wM z>x{QB^FrxgP|1}9%GXChzz4H^QMP-D`g3b;_#aeT`mjS%wMN!;XHx|SsCN4*)%SbH zm*il{HSWR2({PRh(VXf#Th2%bMoF3)x+TSSVDt9Jc0MG*Vj&4RrI%!jFq;0R%P%GC z9RRBfy|B86(g>SXo?ky4QxoGSwF1H11kcW>&UhE>akfaXDlBZEg>9F(*=r81BWiqx zfDbQV3vSW_aCXq0Mb~$`7?tQxJ^_K!Fjf5RjO;&L8yyh{I@TV zg}Q>OUT?rc5Px;#GCji(Cil5=l%zha=jQo9li-X8t0+VJC_Rgu|SgN`H7)rib z-{t8?y96shY2M~>KrIz^LU8+guC_(~o3&7W#aDM0wVV-AYFv7b-#)=@p_=9@Hf}{; zH9+uwE5Y=I*CvQ5C7+ax$(JXst#B$UH}!{(BL~{-02m@oFJW{xV3XJu&Cm`%n3Sni zR*&Dxwu>t?eGSRcS?8otH?`8a6C&BxRy`(jmA!5LF7)j9o2^tC2L`P+F*WH!i!p^0&~h)) zw@`;N%v#ObGTn7-3}ZoX?$sIk4Bjx*X_&Hm$~vCxpyj1ZGiNp1a@iKNgSDes<01^2oNkTaWW#CffVp-2glnuz z888C{L_#T15bnX$bO(0&0d~pcsCH#aK)^8}7UQ1s%?48MB~a>FuuBbtaP3_3HBtFO z4$hLdq>jr>LJy$Db~D1o>VR*Q^F(vx<5n{ybA@z2x{KybPmbq&KnJ7mrrmN2$%5qY zq{kk?2iDv>=tWx<>ZZ?ME5K|?>z5m6;C1q%GF%I5!IpmbCcoC?tz#COa;>n0n+H6z z{Fo8;nV_Q*B9i43VLrb^Qt0)0o9gxwsm9!eRew$TO;=M^e&dQ-!_4^BxVH|&SPgc$ z!I3=I&-NCYmHUpugp4Y$K#Haxfzu%&+_f@Q_R&F zX7M-nOUBC)_Im>!;{XC;t9$(g%9^a>#P)?Mc0Siv@0cR%XJ|Rs#zGfb?I7|v?$z6p z73o1>N8~O5iGuFYX;K8Wh7QvWgH_O3sa!IKQ5AYP`e;IZ zfDL4DDS5vjv{AD}8$V}>SJrF|96kM5cgHGKJ1H1CKr8oJ(f=F{HvU;7%!9P_f1+Pw3^vQ zkX}R&kSW*tXMsq3<6Z{D`jp*dyId3)F^;8(@R>7hd2is>h@OAX%}INe)nZ=db*eG% zr`LcLgID&_IRePL5zRHf#(Cgb=5B8QAB;#N-IdJk^_CCrv0rJdTKXe4OF9UAt&%)d zAiRFV9h#m>hK`>GnGDRWecL@oUa zpX=ntu5pJ>243HNyYSnp_O0~2rDY`vorBSiGgj0HC3|=f<(}^Irj2LoaN5t0XO~)E zIYw36Kl6z+3TQWRI`_rBU$v?C7sCu~gGAV14ZE+;Ls&bW&tAXhGDMv0AX=6hB2MyL%RV+c$LKfQ(^(Ho zUArx>@7P_alQ=na@5nOboZF%j1ScSge`8#zXO*Z?I;ml&h{R(jJhRlnkW^72R#~Vi zIzBgA*_6iC>92c(fopVL6$jRDbxN?wBX3iO`(*t$I_QXlE%R~8T+1|eK>-MWBK=}O zZI3T+89V>Ywdb(0wM-pvoBz9F-=gcigSWS@FbnzQ%iNs?unr*l3qcM(R?Nyo>jB}5 z&(Z!|t(JnTCQXAd%jsQzVOEP0=)TQNDd_`7rj@31(I@GhbQYUL&lk76!2!L&g_&K2(-4fIgjB6?90*7|vZuQvp4kRtFg6(*+@W$v&`0FT-Lb~f zrL$^6^@Fh9`ufiM;YsbSLrB=o&4-i!gt1#Ogs=?2X zt)7YS!yIlWMviY`lzmiJ&K~cASqC<(YA19~=;^s15{SK_$({eT%$9vct4}Fu&t6?A~0P&iIS5P=f)h{?i|p08`0uWROBer+0-4 zN6May{Bh1$Pyl?n-B*FIM(!nORmQ6-bHQ1%9jFP_vz$IhFKH>HtYT2tr><&~;pssS zU>Ux#J*$REFkfkQfIrlrq=^ra%gTs0VDct7%2jvLYXFn!wT(@lSMbNw@v8~I5>{9Y z@Z#)RYg`~dLSEGt7f`N8ZxDrF{EQ0JQ2WYR#0*SuWO_Nh{3Vo=W%=UE;pOtq)xF-# z2AxH!3FW(w8YtlNY*ne?jGTldg%wAGkVO5B_AuFGI>`CJ*UJ+;>)-u3gc=Ql>N@Sc znQKordNp6Og=6^`Z3LiUj`MzAtD7QHN^V{grL9+o0Qj_kvIQ{pjNQ~*^=Ie9-l1l5 zy=WUe8w?k>H1B@#S%sw|5Bb?}va zYT-a9;QC!rcE{zxHf>V?b%4pF8SQ&hOfM4M_EFE-{)Uzs{4iT;OowO86=qrS%#2a+ zHI_H?<8;(bqdVu8&DPdfNR!|Xuyed^PJR9A*zseq=UQXW;%&xH4=eJR$UsPP+Z)n2 zp?kWGTN_xLSt{QsDtN!I({^=__Ed5zf}a!0x?q6O)4P#R^y|nszZ-E3~i|=Q56=T`{5Mz>-5ai*Le2Ejp!HJbCpD=dpA9` zKXh-)352ec!0=8!nn15z8A1(RiIrr@M?$+*GAeY;b>Tr~P>kkqqe$w{-~?u!{?{7c zy;HKTFkc;toOU6yr%oYwX?&&w)K1=5`fD@VQq@;#8&|)X9gvN~{ZRmBt#p7iGqBuQ z`M`mAUD0XH;uZP?Ni`_8+mtSs%4AQnp0<2DpF36Ys3wGA(x88jUG|grHaoDE4?FKF z(CVtSg`b7sjYST}YpkgLF@#mhUGL5D(gnLy*~IV7@Pi$%op0!ok1-fr4r8*HF)#JI zY%s7jD>0EQde9*L26~!HcZJvS)?n7J{KG|Jm<98KES1ge2Q)guXba#nlUFHYZ)66y z1aF;HF7*eWw|t6H{u-%`AtEMo&1H$Rnpy;x?VBrTGa&ra;2giyY(EJKgjIGCxQVx` zw7X*bKV6RPH;(i9tm%A+=PvER3EGqU3IvV18 z7qWMTJdZpf*i`fMlDJ^`(FNe`Ezdc?yy}8m-b+#$q)oGQ^pU~hTjuLzMf+zzIHWM; zGHK_I>D`OO(EIeCHzmMp%n6)!Pm%%wlyhATp}a3clE-4aHXY`aJs7Ae@c-It?6Qq_+=&^Red=P`L znc@cr(||||=`)>6XhdCYn2G57OyhgH&Z0+K_{eJ!ZoSg3=etc#%)IJactTOku4K9f zSVcFWD1G^>6sfd9VNrj{d?Zw3F>Titqo$;XUh$?X(W-S!=;IuAUOF4v+D%u>N^&sx z=qaVVbXgwvsYwGRSr*9K#lNgyas=CGc^^uY|g{#ADlq)Pw3ThzJN$3BS7 zjgjS7f9xMEIK;K-#8DhHmsx3RKeB`8d7r@5SFc5l4q8PRCPmnC{^-A^Sf#b*neI`o z>an;VDQGN|&b$@tw-29?zs^VKVhe$1>OS;|&ru1x!_n*K>e*N{_FN&CA>Prpb6-FO zSNb+sPlaS-8}%MmAe)mSE{KqJdj+MrEibv97Gr-n8Fp>$g6ShYp)g z?aoNHguZ)UG2)1VMd95T#HLEwqQ~A5XbWuL3ZQx;)+kZ#fG_Ld@hnB?Ye}(w*X19J`lfM%|uFQbL!!zm7)G7 zyM0myw%!Xu)A$B<-@RJj>!A$e?OVj*t6j;X%(@A^hR;V_{c2`W1jD|wIb;mYp;s+< zOq<8;yGZWM5U|*Ch5@LHM$b=OFTh)DzIF6|(W@O(C5zC>A92HS-=g)%#Dqi8gu!T& zhjT(JPyT_HohryAZ!~Yiy{GG!rE-HY>uzwRfq1 zAS3P&0rS!A`>^S{+p9IVwK0DzXSm41EDTHy{T5cz;4L)B>8~Z&0A_-^3`e2}G%QS4 zU6*3RJ}>Uqxyv}h*@rLk;X_pdCWXA7*p1S|F{zlc0yPCc=X(@Ac&>%mhmSzjMq25$sovSis)^^X3bze8 zKq6hi-s~=TV5$*y_$-wyxu|-XQdo%*dW4-B%2@T7!C& z51KxRl^b7i-c0A)8Pdm^_8u~cfsc!~PhHUR?;Q8T1`gJd6DT9^EW2%sw8vhGfKkno zbm1MrW{o`!59b_Rx~mL2b&@SmBI+)d#%&{&1`U!)O$I6UXqF<-fo6Q4j=Fc6dgt3l zaU76P6VwH371B_!dLTtYri^%>7zncaxD2)b~z`)I| z!t)u0kM;DS-*W?YJOd^c=(wA5#qkK!H8~f>@e7bdn%vlicG+Yh?r*;khLymrLzwgv zOv-vu6f?1PT4x5@bGy{3iBvghK*v1&U!Ga0zZ};)MTwB=#?O9jd1fs%AG#1DKILUL zZ|pkyaE#e|a1x9W7f?6(2h<}+`W#~(j-I_<6dgEX0@Ftn37|qmi9+fO#zSA?j(&yBowJs;%DfK2GN6=dbc|NqV=cjEV1bTxRcYPjlVFj) zvVN5b9AU!U_fjCGK|?Kz@4oDv4xVdTixfehLGyPIJdZvM>@M=R8r!tRFTF52ckOy* zE$iZ$3Mb}cJxv~S+YH$AvtV`4>P5@fQ^pG#W;v1Df2JO`dDT|uxQ|PfV(l@k06y2g z&uhCyu@@Z0smgCGlPPw~ljpVg;LBFUm9*3FuS3SB=3HpGIBY8)v3-1{db}I4!RnG< zwbbx6vjE{79!f{4hfJi}j;*!SA7^B}u7heAcmrkh;>+L6HqM1DYZaPlWaQ2fxMI7D z7yFvZrcW;FuTpx3g+o1WJDdq4)`)Ofr;=aE5v`Aof+7vn#B%0lQc?aVS*GiH zXx8urQo5+Gwm@SHj{DOzc z>$eAUtmrIu{XV>s*sZ&V7lkl>&?3x^3pU)Q4UQLiqb*XPS8ErlUH-z>CAs=WwtB`b;itAm$FU5t(K2tcV_K zS@3J5R=MnC+}ql|uqZtJjqIN&ckMOrGWj%Z8g$No7mwS31S$EeASHAcpqgWKGC!#y2d8@6HA#cSNVaCcXD{R&A&|1~O4$ zRPM&w{UcdZcPW2i@uP9NQZv7FyjrHiu$1z4b>0w=+%-vb8^^72-Ez#?`OW;9WdXRE zSYlUS`Av|Che^z!c7?5eyyY1_f<$2Xq-l%<^+AY32wdy;DK6Rp9RM8h?CUuwpM?|O zAdXN>ET8sUxkisY%Tln#^4osvj4yarwUud&!y#e|DW+G;dwz4G43ao~IBd^9S6!e{ z9#Qs5qcW^%H%sr0JIWq%9c9G)Xi|ohvdV;^q?N=ft+gvWLW;1!T6$vdn}9Mg;k&=>n@O0PieHvL2Ok|->%MBF#L3OW(F&0OAV4>i4v2_hQ6V(Onu4xEx*E%Er>6q|E0^?fGwR;=Z^c*IhrfNUiS@6s%Y4Mq_Lk^Y)|cn>E(0!U>ZJnJB)1&1n3R;?AR zb`q(Bw_6KiWM})?9TLS|EcswIUa0&`_`8sOXGH!r$x5@r9*`n!IdDJykD#@uQMKdr zNB4=nVD(D*iRkswu4SoHsz*UKi$N&jiXqQ$rd(%;J1E#ODyX7kB?EJs*ogT0wk{ep-iivt0s>~@k1ISWq&N;&KVzGA)%=6X!|RdX={sJENNp+-j|zRS+BI0f;zgz?DIIxt z^w4?SJ2j+ou+UeAj?+9{(VDh*ckyi7EQCMAcDHW@p*$ZzJ*5=rw=i|P)(t-(wdag_ zNtU^3xztI4vVi;zn$4uer?j`EI?Nv7eOBQ9Ee_@oKVM74=_cJ?#rJt5pWUwBksk#j zJAR9-G7J#kAI#s~TGlu1y(lV-VOrvT%T%1-qNU*RuKy57R7-vtu+e5MczTjHfBI!k z;&ma3Epcn{Oo?gtL&#tgi)XHjtnayN+Or{P^=5M$hF9rt)mJ^9~yMxb1(|8UvPdE}@Aq zv@=E{7GGx*mt5O%Zah7-|K@ar;v_M{7HB47qrcJ6jC9Ln}#-4O>%hLyB}1B~B)_(JGx)mg3}P+>(2O znO8JbIYuoa5*fT6QF`eF`v}xjx@{F69T13W!FNctj|O?pKQI)hlHEl$ol{$unv8AD z0Lib=AA7Iv+_c0?QLO$oak?1x(r!Lo*;GbkI6slQR)wSI?5MYDfcx=KVHSAnY3W9m z95lvs0#uc}9Dy2>q|X3<^C~1hT0<)4(Wy<`d$8^KPfzcLKRIJ6AkmCn6*u1l68*M> z1q9|WTA_59ZA4)hme-`Df8QebNg|G2iKQwXxshuMZ2;^{_ggzJ160KcB1}p~FGu*9_P^f4|44BfDA&pA>MU8*Yg+H(y znEq#y3P6JH?>}T)RE$)-vd%{BZ*cZErPI}?_W$L5*O>_2G=#Z}QJ;PwEJBnEuz8Swqk%Q_m#s$0Wz;+`Q3|BQn zUBaeLorGOq%8EsNJ>nsERqAMLh7eC~-M0vb#q>O)H&uIjbKFBXpo8{2w$M}d__fPF z`fWAbBs-M+nZ9$^M5Vrp{?<+)-g462=QmsFSQCzuO=ZfZPOEJ{HN8+PbFmezUVmwJ z0LCliCE@l6v(i1t;AO4cayyi<9Ig0RnO7$BhTpsCDSL1;*ZdvD+mX(&<5x}___`5+ zK0oi7gVw(~qZ2g6h!PwYo zl^sfSrrM#5Q9pMxD1GY#Rxgh7&m_17qX4PBrf=AJYsn88OPMK?SDX`NN#TEb^*0=| zHHhG7>kN&&h(UR2y)5&>UX`HosVI4W9@EVOW(epuO0(05N8q()vxnlSjeU& zZMnSj$0kLJt#@5z$0#HV$w`O>n6d&t+!(4i&r8 zWDYJ&E69l=jqC0#4AGT63>5P}8f%a33g1Lq%~h7d1J=8M$#7kOh1(I%{$tx4PS zrb6o?4b4h!Ex%@4uT9|7SGi%n1x!Sun>@4{IRyToK-*hb=)M{(FoJQxJ5ukHC~!MX z1>b1J!9V{MT2SSt^n2>wk#oA5UYqoMsP3ChL8P^?{-`{$ideTnx~@ZqGY|{^J5$F=Cy6hWHjZYmBdyrzi!uJ`(IXFrH#-7GM=VLAa8e5@+)?y1#P#S;_Vz4> z=|n%tP2;Wsj<^E&snWZrTXiYR@)%}q)9Z#cS2i#$SLkj~Oaf<57NGh>V3MVRLut(2 zgr>BW1eBHh$+P)vO#flAr=ZFbhqGKGgWJ=7XP^UwKbZA-lT)T0@l`)#5A1XXdL?f7 zr}8)M19s}A_VNof&yMr*WEyE~kG`zow<8D#(OMTV6 z$ch{7`B1eUA#xGa>=9dWUZ~+1+OK{DtM-CEme7Q9sht>#&dyg9z3rli;Ww~F0n+fZ z^oB`(?;OpllaUb#;p42{b9vCYXI|8m^&IPkK(o{9qY6N!QtoV+&Gj$N_9QLU*P}qc z5Vz+AsZid7L#wyp)r>p1M27kLrkInmH&EZQFKkIYhh^Qin-%hOu>fufEp<7TNBis+mdwTfq9FD3=I79r^q}0E0mBPZKF5h{{88#I*FiyA*8N@c39!KbzxgC6WBC;u1e=q2o&? zLaDpiDK_n?+&@KybJXRD59iWJd>#7hh}mkELi4$!59KPNu0DfBMw^dzF$@_m=zMCK zmqk3_XQkvTC09zw59_}R4_tpK;t|dS)x%NLWTy*0wrr^4^oB^)YQ;PAXq07m6nbd* z3bEc~j8kd*a1gzm{BV0c^rqb{t2P|@>p~|n1ROdw;Z9;Z8;K}0P2rMBoR;U2Q)VyM zDHMVFZ&akSBmmQ*-!`PJAx8E6U*&-(KSWjcw*QK;Zf~4@*u1~M%I5|1D)UzfvyIqZnhiOne zgV7xX(Q`f1evj*T*D8A3BKD#BB<zl`b(wbewhOB~aMz_( z-Zn$kd0WO*D>;l)h6j!s>8uQp+?V!PPi! zaxJ~fxojwi)f#`QK=oRtw`;Kn|APAnUUCkGTqRTx;zi0Z$zIdk_CYtOBjo3A9qrGn zM?WBS$u!y1sx3Wfwv}I+RmA->AMBHE(?u|_=&q@%9O_124|ENRT|F00X-Lp=F$WA#5!~=x{-WLgLySLGFH-jvPKK5w@ zYWr1GR=+T+w55ma%lAHh28w<1|deC42T&L9F(@jXlp}w)n@7ErEOd1-5&e&smX8uNOq` z9Wj~I2P`uuz+ws?A;n{-{qL3>Sltd0It7G0csqBS>!O%^fmKC1zM(h42m#^VV(w^= zVB*L0K0MsPgC1@DtHT&+1<+wEL`-UxwuMf)DO|vIt(Pr|FQw_o>F9SbmZ-c&%QX1q z;tew+N^qhqC{Ce;fLo!%&@LNX$tenYkQUN?4=IZ@V1gW=56WH@zT!;1kyrYP1VJD$I@ZY5p=9QA>?_TWtMh`}$5;$Su&-P*UHNk(Ny^WpH< zAll<-!=n@l1UdZaL{UNMaFL#dvd(9L`Cw<}6ghy;DEhHEyhzdz1}x>H=>125~iw9{RighY73xZ zoi;(0qbt4z1F!f|Mis6>!s3WWhFdt6ws?{L@E{6x6xME%mOE;_wXrS9v~!62qAc@O zsdW}OPvqe9yj>a`bEmJ>>OkRFG69Hng>*dT6dhXLGe8F|L@$R5Cwq0O6I;X*qSW@+ zRl@p-1Ndbg`0*Rl&sknew!J=~?Bw=j_d{!H(~atvD&P~jgUATYiglG20VhW$H3=f$ zNrExH&Rhkt@ZG`>a|rV(hdj9_<8z6WeK(>EOWxllAoJXXm)x0re@`d&!0WW7*|I?2 zqm(wRs*g&3M!^xNR+KM;wE@KuyL305i&Sn07$rO0opPjD{A@0wrQIq*i1vDdNndSd zi9bW6_Qn3bD-U@zmStw1-}pRPztXDFQ{S*uDTFiH(1`<|BK`;eoumGxYO&qe0#uVi zgI8CteHuz8+^J8zd|(XrV_wjYp;_O^NWOwx11QnHfLGnpF0w4j?LFm zO~Dz^#{k~qVNLEqI`M{1_HpD>qSxeB=s3X-K3UzeeV-8DMARjR*J!bF9s1df}(C|DGSnWqoE)Wk>YbYE6(s zCntPgJUy|}qqNV2$SC#84>1zf8-Wo3p{ZJS`2UB_K>yK_7eEFq#XEk^yDwOL9z9Ix zzA4AR(xi~|Ao64Hw{DcDG|-!aIbb9oM6@>i4QSfYRi=@DQCd@GGhxS}m72P*=Ig{( zA;}*-@o^F$1s{n4B*?Oe+L1=+|^jqnSBAf(2n1131Zcl5qhsaDk zal)U#zkf5lu|8XArby{v)7{!RyWV;>qiNA$EZ1HsS^c1J$(LbWIJ*wLsjiE5O)cN8 z{B|#rjr`dJDPzAh;ocLyWx4YT9olQ2pf1mlhtYBLmLw%O1>VVLRKol37$ zErkS;QsuK3v=x(H#?#Z-Mx+^%c}Ms|@aUcGqmjpbtH8%!iro-o!c ztppw(9wMPtRaFf-$ZR|GOYH-gPOLN4Z~abe%`W*B5IC5(;5UA7W%Cn^1kYffVHi&k zW?AAJ_NR6YJC}7wf%+JL>Gz z5fMO7+pQ^nM_U<6;l3p8y9{S_9DIX1QneA{jHY*^1!m*fvqfzZQEj z-tamu=n=Tr75A-39qp^&9z;85~?C^FJu5{#p9oIc}wr%W+}zfq98-- z3BvFC6wbvA?Ymrs$J`rwmQdym61GS3|D*y5V?P0ofKyJIc|%Ym`7gu z2dzoQb#PDJA@;7{wtWBjhktTmUf#e#@|P&=*382{M*jKV|Df9+^OVFB;Dar)h(|5& z{K3M1FZh4|(nd*AKn44L=YsBkjQ`tTe0p9>m%JB%lvoA*$BF+KNCopYfd7Rh|LM^d zSva4_6IXp5wg0k%KOXewH8pPoT=lm$!TlHG{_`pf1c3f<;|dG~Q%ryNpuY_C=V8?1 z^LWO5+4isEB<2E}`iM4|`8VtS@}NHxkk{jCOWA-wgfKac<8 zzklBT6`$XP4!6AUnQv+S`hA_ya0Y!)I=`{`9<)zw$tFXE76}}|96lj!u24?xZ0~F?C9*=*$F#6a4~85MUo2w*HW9`9w(z)J9W);y6SUV|H;=@;-P}#Elem@8YH{}x zyyP$&zylxi7OF@<@*mDa*cv3QY8DS&X7cq02x0}(#hC)zrbcMp z?S*q(hd6Kkcg&<3;o^ecE~yT~!ZjNf;1QmWIyaStXYOX7uS~ma2^@aq@z}rSXl-l% zD93#WQ09MO_WveWD$516Sm=F&{_EHNL8`Z^(j{r+&_MIc(f{^obGCHCHWj$|4Gpm* zzf=sjHoZV~3cdRVzc8y)FxS~9xcvKpZ!81JGkqyyeIcgWmJ^@F%zHS%g?gk%65>Fz zvo>YDF~yMZ;QPhAk)8h2>pRE0C=J z6jV)XKkUtO*0j4RFxN4)6?_EU_IEjXf=BUef6L2jUVr{mchMKX5DjX_64-z23Dj)b z_$7iad6rgKSg1TDjkm04_eRG7Uc74+&~)tWvGqRK>#WzS-BEa!0_8ftvxD#@HWL|6 zltg!F#rj=`o%wl%ZW>!A9!adv$oXWaY`WJF3du<4he=Y%8({IR(xBct*qE-l;vGdX_>%se7KkVZDgZI$wx{ zZ!TbBVZTmxwtl*;n+~Ce#V!Gg&k{a9IQY|Et6Xe*)7kcP&E}T-?trmUA2|01SZUmC z61*c_We4{SD6keJ+RrqtXV_nw=nD7aNn)bY}UivUQp$b;_Y6x}MZvmc3aW zW(?T&f**Q6XYIyjN_n*#=cKqBMD)*o(RI?POBTL6ai=^tKHVQ{>cL#>bAGe4F-w{1 zdwID)Q%W!On7V`wfkuWok2NW4MQ6s>XsP;&r)`r5x+ljnGyX7|R>qK9YFIYSqTr$4 zT1HRjwvdz6DWfNW66G3C)Vz(5t$q`0mnp+wJf0 z=)=ddn<-qBTV$j{KxH;EZn=7Nk}E^Cy-(i0{H<*ag;v8Bg^ELk zX-^Qy6poVZ5P>EJuZGp78q{~!fq1{`YBs3@G2n5L&1u42^H*oc^GUqrM zyLr_sIrPh^;-WLdBy_s{UVkg4B-$s0nkU&|?alJiQNpL2Y>mHq&S|` za<&wTNF!-CUipAfBcmSq9ualitc|3C{s1d$9kvI0!2Q0PO`kPCb7f37d@6VT6z1V6 z*ZKLly&f4;*t>oB!pG0&Dfwz7?d)mGglkS(W1)nk$K1{IyLs&T^Dm;YHuH+EIq$o3 z)%TPgUk7jwigVEJoP>EWRweT>>&pP|<>drvM-|_X&wS{|c{pQ?I^OM+N`h)`MIxAm zX4_LvVz~9`<>=jP8g@p!X4zgxEInTEc`*Wu(m;+ti@4s(mc0}icm*q?=gPLZr(z%&x3Lqxh)7CSz zM@PDTb^%kN)y{#1V-N`IpsTPJM}^%-I(KvvKP~}}#S~zW%I5-2Mb1q-$K#Ti4|0u` zYf)W0S?TAJ*0AG1{e$&UzVCMnUbK9xSd+O^k+UVDwnskS8}~>e5mhr+GJD>C?Wk{^ zLh8^3w)>*#Hs>YA$>25M#K?vV7cvcu%#aUNjobDA{w&OJmKRd@$#|>MJ%dDgQVF}` zw^P54y}LeI%rL06TFwH*R^oR8nx>JA#(xXeJm#GzA6FxFA9$F}Y5Vy0cQ>2Bz7q+OXX#Z2%S4K8RkIw`6O<(z@F zE$*NY;KzWThPM0eEq4mTFlXa-YZN=ci@pPmw`%2R8?c^yhUkhq!$Q;sP@nAPHoaS2 zzsLB4QtG^A9I`dEc4!Uv$6M;@<1wFW4?XU6rM&I(b$wLh6B~zj+4cZSso_Wc#>{0^ zYnqUgswtQ+Rs47xye2BQlrJ?* z0L}=PZL}0zlD`@+tL>(=xw$zoGU4nOBD-wD{NHt?PXuWWmcn&miAtC`)BE`(0J-s0 zRBe5|n7+ijezw<+)2KIn!TWoFPhpFZIO^zeo=JvKEOfX4Z@xa>>EjNXojo2CIq`z< zKYq-*FKYkvu0f zFcm)H?T-Q1YE^zTfnLoOTKZX--Fa~o#)_^Ubi&EUbZBN9f6bi=+;2LYht7YAZOEB5 z<*?XMM!9Qx98{n>h^lAkvy&W^9Go2Czj-86^=H%GKXqqGEuH(y7L=EOVF{DcEBAZ= za)#EcOHR*&!0mY>=I@oN+&WFHdQz+fQSkA|ve|MSNnWsTXpG zg)}NHU!ohEf7}GTk|ZPGG(F{V(0#jCP8@Kt-cJOwQHOeN5_x^iFRF*VgSv$zPZ&S) z^jI~rJ-S9bx_&pmT!VJ-k@-?^9YpOJf#&HRW|j`KRqpIyj6E5hScWfZ>TB;MiB3pl zZT1Pzd@H`Iny>!0bUv-yYh>y*j|iXXV0%MfARA4w=YW_>NUNB>vxOc;zv)zQ+7<;7 za(vq7o5@w6-r+wPso_oNhK$@hz2f}Apxo5n8zi^0N$iX7i>Hw+6DE&m8F zV@vrG=DBKa+g4b8l=$u-q0+X)RqCsC(ur>zYy@1oIQ$TOa4%aSi#b``sa01B znnJBI09BV?Fz(NTSQnmo(h{#k@B!Kl>P{NGL=`R2{s*&lr8=+?&+khHRDD zSs5gP-hTNc*zH~Lnyub`17sfF=WYd?>{u2Ea_AXZ=6<`Y1-skX=jpC7?bO$3JJVAQ zCKgzk|JWzo@27j=>kej1QKC+Vv7w15^px~WCFy^60h&p!KlUHjKe~#`s+>Ru#cX5d zqRM-}ilOSIV8^KJPNyjg(u)vKRZ5ixy_1Up@>Hwb%91|k_%vXaL0@VQvooCcy-;L( z)G#zqyNq(RyL^OR^2`es-?y`ojUvDBCzFqm48%M-ar&#OJYo+Hk&x=EMRkMXrgQD$ zIy;$OSfvYf=FZTk#27T zJMJGqeilE4Mri86kn-hxn7>B;*mJq6_j2f@ppgH5pf2PtDOk?O1ERQyS@Z0p=~cEy zwjyM9-Q1b&f#i&_sxbAD$7z^XJTXX%kGiho!Cxu!H)h3*z{0F05Mf6mWG%yTiGKo6 z+`xkn(Cw&Y)Yc`A84xDD0fYsKYy>ZXH?ZG%Z6GS?A?4+)d`XxH7hjMB2vm8efBo-N z0`^HY3(P)`IjMKQBy_|mo$BLlAajjY@o%W}SBubmOaTO1XZvPnE>VTR>WBcLrT%4d zdHANI8gTlKJ8eggI}BB>Z)!f3p;y zorl0l7zS;sXS)$mJDriZbWi=#Kt$|nDC?!{{Qn7}5APJ1 z(9HHV|33gq0;e$MzR6bunVqqL(NQyTcr?O*;AnB$BXS{dTbr7{DVP>I}CN{zLkaEH4 zl40J>AGuWoXjGV=sqhN^q$f+3b(yU&kg=V4R@Zey3+{4wDY~0k*?B)JG>4bnU{)B| zH-M)WH+|#+>b%!43rOSQSJXALh7*}|8OX3imEByaL^GtWUvd(6T$h{SCAG9gqWsJE!m)UiICopNZF(~pR`=QYl zHHy^nz+mZ8<%31L0qcUp5$HqHNyi7Dw^FRL1-XpRK2|uw6SfYuNG*5TCms1*pSn9# zRCj(ZC~WkLy=F?C_4P81CmnRt!6@FFEJtfLx^WM6g8O4(rB~p}z$lVUT=llvFeq$f zGsLVUjW&*I>t%QZNwet5E0XDfSHXyvBi%f3eC7gw1S7g>+ms{4}5 z7^DsKkV6m{F28|t+!xvk2v{Y5X+5Z}Ec2y>-0Z2V=A zAfalIHrn(h%2!y(Ou2q%(Ea@NPtR;zne!B>k;-b#Rt%KWqsh(Xk@fYY9!62P&{lHSGk<+ocLFU7cCvDc<*bg~ zQ2~S6SC=j(*xkoxwwMxi07C5!xt}2FPd1#-kuci4ADp{~`;twAJSdIa?t-By3=+*m z+mF*{008%9MjzXgyL$fL#tx#&(}})l*sNY91A!OL25VQJEUat3ZdO;MuULUoWUOSW zTqfj2zOS9y~ zN_59zLBGbDCU=(PNg%~)(gq{3=ECpzxzn`=iYFFEm&42khX#i@`siep4pNord=UMV zJ}T$7R)+JrjP9tYlyRHwX1x2}waUaqHLC15cFC)Qpn(*KJBvJ+ z?04Y4^q?6Thl*-Ev)Bt_CjHDb7lVn3lW*j?qnAstMS-++22*1RYJwAvuyw=gpKz32 ziJljK9nrWq+n;iP+MKF}f&EkKiqJJRF$3daZYA$igOr4|Z|h~8e--m%L_e#Lt8g~P z#!8}8PjdGQJh(IPH5Wjd`{Hd4MZ08swnN8{E+>Tx<kUvE69z=hQ-#L`!Ta?RkEL z;h2e)*+|?C(B0>E^4QZCz6UDh{dF1U_=8M0_J#-Mb%M zc(-6hl&ZZq;OPyY48luHfW;vW-2KSMx?(pF#-E(CuH6Nt#TJ!@Ms2Dfi{XjccDB|R#@k!9+_rM1IzGL_agq1qomyZzq;4_(L z4ia%NqS9z-8XdUNUh!DwPCNUdX@gxYzvm<61kMBH`d68=m#Zu$4^nre3;y_`+6 zJP1?$)w=sHB9sv8>e`3u7K?VOv4;n1-4NOOX~0*gn|S*q5GM`)85w4cMmY)cp6aH^ zbuPD#hrAdlRPyGxgH2a@iTbtQbeH>5zGOKcn9wjE9^_Q^zjk`hbaqd@*t)Tsy(522 zlKMcA5YSe~4s9~yY3yT@+4kKa#o^5%(uyC;2t+iatQ%wHM@_j)o#I<^srawR3^R^S z;NU3pP4kh=y+HJu9p94HMj~~=iz_nWX*Cmex~fH$JZMVHKKpKojOow0h6ZJD({EdH zv`Iz(t>Q_KnG=_4~<8z9w+xiU=C3^};_ug0@s5%T>n+qrb(pA~~ zwp)vJY2u78KJ|h#bLh)G^bW*bm-F-&&ovZpU*^GGoB}J6wXy4F(Lr_Zq5j2y`r@vp zbnKZFmH-S}$K9uQKIdrA*#vYaER z)$Yz`4}}x5<1Gz=OA#%ZFKHg-i)b9dgM1BcsAg36GNt3$p%A@8kJJ}Ww!BN#GcM3| zA9dKhIpVkoG|f#`hv)>W7sE^#HqYV!*;UM>VPMx$-IvGMHK&c*=E-X}+JXu_FUJt` z!+!Qtl^HN3sVEbyn~sivoy*RLyeUb$l0#YaVso*I|Gndnw3?PQuUhMYkCz{ZgNvja zj}D#{Dr>$$B@HzCo~MTa9-B8i&Yh81O-7As$^#i}T4No|r26thTLK$zKL+!=N*JZY z)FG}FVO4bngmZV~ii~?+@ksWx9>nUTX0&$E>2gbx3Trl)?Hi+h$GdzxOS!OAuDpol z6FHoSHPxq;c;w5q1D*~g%$j|-<)u9K24cy#4(QHQFk#ctkLYtVKasDh5$3eqU=2JE zv9^Djo*I1mKS7-XP5=M^ literal 0 HcmV?d00001 diff --git a/docs/SoC-Cupra-settings-2.png b/docs/SoC-Cupra-settings-2.png new file mode 100644 index 0000000000000000000000000000000000000000..219e090f754d0708f59760fcbfe47bc32496ef64 GIT binary patch literal 134044 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 literal 0 HcmV?d00001 diff --git a/docs/SoC-Cupra.md b/docs/SoC-Cupra.md new file mode 100644 index 0000000000..fbea412a55 --- /dev/null +++ b/docs/SoC-Cupra.md @@ -0,0 +1,82 @@ +# SoC-Modul Cupra + +Das SoC-Modul Cupra gibt es in openWB 2.x. + +## Konfiguration + +Die Konfiguration erfolgt im Bereich Einstellungen - Konfiguration - Fahrzeuge: + +![Allgemeine Konfiguration](SoC-Cupra-settings-1.png) + +![Spezielle Konfiguration](SoC-Cupra-settings-2.png) + +## Hinweise + +Für nicht-Cupra Fahrzeuge (Audi, Skoda, VW, etc.) funktioniert das Modul nicht. + +Erfolgreich getestet u.a. für folgende Fahrzeuge: Cupra Born. + +**Wichtig für alle Fahrzeuge:** +Es muss ein aktives Konto im Seat ID Portal vorhanden sein und die "My SEAT App" muss eingerichtet sein. Es muss explizit die "My SEAT App" eingerichtet werden und nicht die "My CUPRA App". + +**WICHTIG:** +Seat/Cupra ändert gelegentlich die Bedingungen für die Nutzung der Online-Services. + +Diese müssen bestätigt werden. Wenn der SOC-Abruf plötzlich nicht mehr funktioniert, VOR dem Posten bitte Schritt 1 ausführen. + +Bei Problemen zunächst bitte diese Schritte durchführen: + +1. sicherstellen, dass auf dieser Seat-Seite alle Einverständnisse gegeben wurden. + + + + In einigen Fällen wurden die Einverständnisse gegeben und trotzdem funktionierte die Abfrage nicht. + Hier hat folgendes Vorgehen geholfen: Im Seat Konto das Land temporär umstellen, d.h. + - auf ein anderes Land als das eigene ändern + - sichern + - zurück auf das eigene Land ändern + - sichern. + +2. Nach einem manuellen SOC-Abruf (Kreispfeil hinter dem SOC klicken) auf der Status - Seite EV-SOC Log und Debug log auf Fehler kontrollieren + +3. Falls im Ev-Soc Log Fehler 303 (unknown redirect) gemeldet wird: + - Ursache 1: Bestimmte Sonderzeichen im Passwort funktionieren nicht mit dem Modul. Bitte das Passwort auf eines ohne Sonderzeichen ändern und testen. + - Ursache 2: Falsche Email, Passwort oder VIN eingegeben. Alle 3 löschen, speichern, neu eingeben, speichern und testen. + +4. Falls eine Firewall im Spiel ist: Es gab einzelne Probleme beim Internet-Zugriff der openWB auf Python Archive und Fahrzeug-Server wenn IPV6 aktiv ist. + +5. Nach Neustart bzw. Änderung der LP-Konfiguration werden im EV-Soc-Log Fehler ausgegeben (permission oder fehlende Datei). + + Diese Fehler sind normal und können ignoriert werden. Leider wird im Debug Mode 0 keine Positiv-Meldung ausgegeben. + Empfehlung: + - In Einstellungen - System - Fehlersuche dies einstellen: Debug Level/Details + - dann einen manuellen SOC-Abruf durchführen (im Dashboard auf Kreispfeil klicken). + - danach sollte im EV-SOC-Log eine Zeile ähnlich dieser kommen: + + `2023-02-12 11:57:14 INFO:soc_skoda:Lp1 SOC: 61%@2023-02-12T11:53:20` + + Diese Zeile zeigt folgende Information: + + `2023-02-12 11:57:14` *- Timestamp des SOC-Abrufs* + + `INFO` *- Debug Level INFO* + + `soc_skoda` *- SOC-Modul* + + `Lp1` *- Ladepunkt* + + `SOC: 61%` *- SOC Stand* + + `@2025-02-12T11:53:20` *- Timestamp des Updates vom EV zum Seat Cloud-Server* + +6. Falls diese Schritte nicht zum Erfolg führen, das Problem im [Support Thema](https://forum.openwb.de/viewforum.php?f=12) mit Angabe relevanter Daten posten + - oWB SW Version + - oWB gekauft oder selbst installiert + - wenn selbst installiert: welches OS(Stretch/Buster) + - welches Fahrzeug + - falls vorhanden Angaben über Firewall, VPN, etc., also Appliances, die den Internetzugang limitieren könnten + - relevante Abschnitte der Logs, vor allem Fehlermeldungen, als CODE-blocks (). + +Das SoC-Log mit evtl. Fehlermeldungen kann wie folgt eingesehen werden: + +- Einstellungen - System - Fehlersuche diff --git a/docs/_Sidebar.md b/docs/_Sidebar.md index 0c9da7ff8d..11676906b0 100644 --- a/docs/_Sidebar.md +++ b/docs/_Sidebar.md @@ -6,6 +6,7 @@ * [Fahrzeuge](https://github.com/openWB/core/wiki/Fahrzeuge) * [Manueller SoC](https://github.com/openWB/core/wiki/Manueller-SoC) * [SoC BMW & Mini](https://github.com/openWB/core/wiki/SoC-BMW-Mini) + * [SoC Cupra](https://github.com/openWB/core/wiki/SoC-Cupra) * [SoC OVMS](https://github.com/openWB/core/wiki/SoC-OVMS) * [SoC VWId](https://github.com/openWB/core/wiki/SoC-VWId) * [WiCAN OBD2-Dongle mit manuellem SoC](https://github.com/openWB/core/wiki/WiCAN) diff --git a/packages/modules/vehicles/cupra/__init__.py b/packages/modules/vehicles/cupra/__init__.py new file mode 100755 index 0000000000..e69de29bb2 diff --git a/packages/modules/vehicles/cupra/api.py b/packages/modules/vehicles/cupra/api.py new file mode 100755 index 0000000000..cb877b8e2b --- /dev/null +++ b/packages/modules/vehicles/cupra/api.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 + +import aiohttp +from asyncio import new_event_loop, set_event_loop +from typing import Union +from modules.vehicles.cupra import libcupra +from modules.vehicles.cupra.config import Cupra +from modules.vehicles.vwgroup.vwgroup import VwGroup + + +class api(VwGroup): + + def __init__(self, conf: Cupra, vehicle: int): + super().__init__(conf, vehicle) + + # async method, called from sync fetch_soc, required because libvwid/libskoda/libcupra expect async environment + async def _fetch_soc(self) -> Union[int, float, str]: + async with aiohttp.ClientSession() as self.session: + cupra = libcupra.cupra(self.session) + return await super().request_data(cupra) + + +def fetch_soc(conf: Cupra, vehicle: int) -> Union[int, float, str]: + + # prepare and call async method + loop = new_event_loop() + set_event_loop(loop) + + # get soc, range from server + a = api(conf, vehicle) + soc, range, soc_ts, soc_tsX = loop.run_until_complete(a._fetch_soc()) + + return soc, range, soc_ts, soc_tsX diff --git a/packages/modules/vehicles/cupra/config.py b/packages/modules/vehicles/cupra/config.py new file mode 100755 index 0000000000..edcc535a33 --- /dev/null +++ b/packages/modules/vehicles/cupra/config.py @@ -0,0 +1,28 @@ +from typing import Optional + + +class CupraConfiguration: + def __init__(self, + user_id: Optional[str] = None, # show in UI + password: Optional[str] = None, # show in UI + vin: Optional[str] = None, # show in UI + refreshToken: Optional[str] = None, # DON'T show in UI! + calculate_soc: bool = False # show in UI + ): + self.user_id = user_id + self.password = password + self.vin = vin + self.refreshToken = refreshToken + self.calculate_soc = calculate_soc + + +class Cupra: + def __init__(self, + name: str = "Cupra", + type: str = "cupra", + official: bool = False, + configuration: CupraConfiguration = None) -> None: + self.name = name + self.type = type + self.official = official + self.configuration = configuration or CupraConfiguration() diff --git a/packages/modules/vehicles/cupra/libcupra.py b/packages/modules/vehicles/cupra/libcupra.py new file mode 100755 index 0000000000..ab5a7fa89c --- /dev/null +++ b/packages/modules/vehicles/cupra/libcupra.py @@ -0,0 +1,265 @@ +# A Python class to communicate with the "Cupra Connect" API. +# Adapted the libvwid.py module to cupra interface + +import secrets +import logging +import json +import uuid +import base64 +import hashlib + +from helpermodules.utils.error_handling import ImportErrorContext +with ImportErrorContext(): + import lxml.html + +# Constants +LOGIN_BASE = "https://identity.vwgroup.io/oidc/v1" +LOGIN_HANDLER_BASE = "https://identity.vwgroup.io" +API_BASE = "https://ola.prod.code.seat.cloud.vwgroup.com" +CLIENT_ID = "99a5b77d-bd88-4d53-b4e5-a539c60694a3@apps_vw-dilab_com" + + +class cupra: + def __init__(self, session): + self.session = session + self.headers = {} + self.log = logging.getLogger(__name__) + self.jobs_string = 'all' + + def form_from_response(self, text): + page = lxml.html.fromstring(text) + elements = page.xpath('//form//input[@type="hidden"]') + form = {x.attrib['name']: x.attrib['value'] for x in elements} + return (form, page.forms[0].action) + + def password_form(self, text): + page = lxml.html.fromstring(text) + elements = page.xpath('//script') + + # Todo: Find more elegant way parse this... + objects = {} + for a in elements: + if (a.text) and (a.text.find('window._IDK') != -1): + text = a.text.strip() + text = text[text.find('\n'):text.rfind('\n')].strip() + for line in text.split('\n'): + try: + (name, val) = line.strip().split(':', 1) + except ValueError: + continue + val = val.strip('\', ') + objects[name] = val + + json_model = json.loads(objects['templateModel']) + + if ('errorCode' in json_model): + self.log.error("Login error: %s", json_model['errorCode']) + return False + + try: + # Generate form + form = {} + form['relayState'] = json_model['relayState'] + form['hmac'] = json_model['hmac'] + form['email'] = json_model['emailPasswordForm']['email'] + form['_csrf'] = objects['csrf_token'] + + # Generate URL action + action = '/signin-service/v1/%s/%s'\ + % (json_model['clientLegalEntityModel']['clientId'], json_model['postAction']) + + return (form, action) + + except KeyError: + self.log.exception("Missing fields in response from Cupra API") + return False + + def set_vin(self, vin): + self.vin = vin + + def set_credentials(self, username, password): + self.username = username + self.password = password + + def set_jobs(self, jobs): + self.jobs_string = ','.join(jobs) + + def get_code_challenge(self): + code_verifier = secrets.token_urlsafe(64).replace('+', '-').replace('/', '_').replace('=', '') + code_challenge = base64.b64encode(hashlib.sha256(code_verifier.encode('utf-8')).digest()) + code_challenge = code_challenge.decode('utf-8').replace('+', '-').replace('/', '_').replace('=', '') + return (code_verifier, code_challenge) + + def convert_to_camel_case(self, json): + def to_camel_case(s): + parts = s.split('_') + return parts[0] + ''.join(word.capitalize() for word in parts[1:]) + + return {to_camel_case(k): v for k, v in json.items()} + + async def connect(self, username, password): + self.set_credentials(username, password) + return (await self.reconnect()) + + async def reconnect(self): + # Get code challenge and verifier + code_verifier, code_challenge = self.get_code_challenge() + + # Get authorize page + _scope = 'openid profile nickname birthdate phone' + payload = { + 'client_id': CLIENT_ID, + 'scope': _scope, + 'response_type': 'code', + 'nonce': secrets.token_urlsafe(12), + 'redirect_uri': 'seat://oauth-callback', + 'state': str(uuid.uuid4()), + 'code_challenge': code_challenge, + 'code_challenge_method': 'S256' + } + + response = await self.session.get(LOGIN_BASE + '/authorize', params=payload) + if response.status >= 400: + self.log.error(f"Authorize: Non-2xx response ({response.status})") + # Non 2xx response, failed + return False + + # Fill form with email (username) + (form, action) = self.form_from_response(await response.read()) + form['email'] = self.username + response = await self.session.post(LOGIN_HANDLER_BASE+action, data=form) + if response.status >= 400: + self.log.error("Email: Non-2xx response") + return False + + # Fill form with password + (form, action) = self.password_form(await response.read()) + form['password'] = self.password + url = LOGIN_HANDLER_BASE + action + response = await self.session.post(url, data=form, allow_redirects=False) + + # Can get a 303 redirect for a "terms and conditions" page + if (response.status == 303): + url = response.headers['Location'] + if ("terms-and-conditions" in url): + # Get terms and conditions page + url = LOGIN_HANDLER_BASE + url + response = await self.session.get(url, data=form, allow_redirects=False) + (form, action) = self.form_from_response(await response.read()) + + url = LOGIN_HANDLER_BASE + action + response = await self.session.post(url, data=form, allow_redirects=False) + + self.log.warning("Agreed to terms and conditions") + else: + self.log.error("Got unknown 303 redirect") + return False + + # Handle every single redirect and stop if the redirect + # URL uses the seat adapter. + while (True): + url = response.headers['Location'] + if (url.split(':')[0] == "seat"): + if not ('code' in url): + self.log.error("Missing authorization code") + return False + # Parse query string + query_string = url.split('?')[1] + query = {x[0]: x[1] for x in [x.split("=") for x in query_string.split("&")]} + break + + if (response.status != 302): + self.log.error("Not redirected, status %u" % response.status) + return False + + response = await self.session.get(url, data=form, allow_redirects=False) + + # Get final token + form = {} + form['code'] = query['code'] + form['client_id'] = CLIENT_ID + form['redirect_uri'] = "seat://oauth-callback" + form['grant_type'] = 'authorization_code' + form['code_verifier'] = code_verifier + headers = {} + headers['Content-Type'] = 'application/x-www-form-urlencoded' + headers['Authorization'] = 'BASIC OTlhNWI3N2QtYmQ4OC00ZDUzLWI0ZTUtYTUzOWM2MDY5NGEzQGFwcHNfdnctZGlsYWJfY29tOg==' + headers['User-Agent'] = ( + 'SEATApp/2.5.0 (com.seat.myseat.ola; build:202410171614; ' + 'iOS 15.8.3) Alamofire/5.7.0 Mobile' + ) + + response = await self.session.post(API_BASE + '/authorization/api/v1/token', + headers=headers, data=form) + if response.status >= 400: + self.log.error("Login: Non-2xx response") + # Non 2xx response, failed + return False + self.tokens = self.convert_to_camel_case(await response.json()) + + # Update header with final token + self.headers['Authorization'] = 'Bearer %s' % self.tokens["accessToken"] + + # Success + return True + + async def refresh_tokens(self): + if not self.headers: + return False + + # Use the refresh token + form = {} + form['client_id'] = CLIENT_ID + form['grant_type'] = 'refresh_token' + form['refresh_token'] = self.tokens["refreshToken"] + headers = {} + headers['Content-Type'] = 'application/x-www-form-urlencoded' + headers['User-Agent'] = ( + 'SEATApp/2.5.0 (com.seat.myseat.ola; build:202410171614; ' + 'iOS 15.8.3) Alamofire/5.7.0 Mobile' + ) + + response = await self.session.post(API_BASE + '/authorization/api/v1/token', + headers=headers, data=form) + if response.status >= 400: + return False + self.tokens = self.convert_to_camel_case(await response.json()) + + # Use the newly received access token + self.headers['Authorization'] = 'Bearer %s' % self.tokens["accessToken"] + + return True + + async def get_status(self): + status_url = f"{API_BASE}/vehicles/{self.vin}/charging/status" + response = await self.session.get(status_url, headers=self.headers) + + # If first attempt fails, try to refresh tokens + if response.status >= 400: + self.log.debug("Refreshing tokens") + if await self.refresh_tokens(): + response = await self.session.get(status_url, headers=self.headers) + + # If refreshing tokens failed, try a full reconnect + if response.status >= 400: + self.log.info("Reconnecting") + if await self.reconnect(): + response = await self.session.get(status_url, headers=self.headers) + else: + self.log.error("Reconnect failed") + return {} + + if response.status >= 400: + self.log.error("Get status failed") + return {} + + status_data = await response.json() + self.log.debug(f"Status data from Cupra API: {status_data}") + + return { + 'charging': { + 'batteryStatus': { + 'value': status_data['status']['battery'] + } + } + } diff --git a/packages/modules/vehicles/cupra/soc.py b/packages/modules/vehicles/cupra/soc.py new file mode 100755 index 0000000000..b5326c192b --- /dev/null +++ b/packages/modules/vehicles/cupra/soc.py @@ -0,0 +1,43 @@ +from typing import List + +import logging + +from helpermodules.cli import run_using_positional_cli_args +from modules.common import store +from modules.common.abstract_device import DeviceDescriptor +from modules.common.abstract_vehicle import VehicleUpdateData +from modules.common.component_state import CarState +from modules.common.configurable_vehicle import ConfigurableVehicle +from modules.vehicles.cupra import api +from modules.vehicles.cupra.config import Cupra, CupraConfiguration + + +log = logging.getLogger(__name__) + + +def fetch(vehicle_update_data: VehicleUpdateData, config: Cupra, vehicle: int) -> CarState: + soc, range, soc_ts, soc_tsX = api.fetch_soc(config, vehicle) + log.info("Result: soc=" + str(soc)+", range=" + str(range) + "@" + soc_ts) + return CarState(soc=soc, range=range, soc_timestamp=soc_tsX) + + +def create_vehicle(vehicle_config: Cupra, vehicle: int): + def updater(vehicle_update_data: VehicleUpdateData) -> CarState: + return fetch(vehicle_update_data, vehicle_config, vehicle) + return ConfigurableVehicle(vehicle_config=vehicle_config, + component_updater=updater, + vehicle=vehicle, + calc_while_charging=vehicle_config.configuration.calculate_soc) + + +def cupra_update(user_id: str, password: str, vin: str, refreshToken: str, charge_point: int): + log.debug("cupra: user_id="+user_id+"vin="+vin+"charge_point="+str(charge_point)) + store.get_car_value_store(charge_point).store.set( + fetch(None, Cupra(configuration=CupraConfiguration(user_id, password, vin, refreshToken)), charge_point)) + + +def main(argv: List[str]): + run_using_positional_cli_args(cupra_update, argv) + + +device_descriptor = DeviceDescriptor(configuration_factory=Cupra) From 0c099907adb187b91b493d30013b32738b8d8643 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Tue, 15 Jul 2025 11:21:13 +0200 Subject: [PATCH 55/73] fix manual soc (#2560) --- packages/modules/common/configurable_vehicle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/common/configurable_vehicle.py b/packages/modules/common/configurable_vehicle.py index 53ee878cd9..5f95ef1a13 100644 --- a/packages/modules/common/configurable_vehicle.py +++ b/packages/modules/common/configurable_vehicle.py @@ -138,7 +138,7 @@ def _get_carstate_by_source(self, vehicle_update_data: VehicleUpdateData, source if self.calculated_soc_state.manual_soc is not None: soc = self.calculated_soc_state.manual_soc else: - self.calculated_soc_state.soc_start + soc = self.calculated_soc_state.soc_start self.calculated_soc_state.manual_soc = None return CarState(soc) From 6e873a84005b11e48ce76041cb54dca18a5ffdf9 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Tue, 15 Jul 2025 14:00:06 +0200 Subject: [PATCH 56/73] reset fault state at init for tariffs, backup clouds and vehicles (#2562) --- packages/modules/common/configurable_backup_cloud.py | 3 +++ packages/modules/common/configurable_tariff.py | 3 +++ packages/modules/common/configurable_vehicle.py | 3 +++ 3 files changed, 9 insertions(+) diff --git a/packages/modules/common/configurable_backup_cloud.py b/packages/modules/common/configurable_backup_cloud.py index ce126d5d31..f1ea316965 100644 --- a/packages/modules/common/configurable_backup_cloud.py +++ b/packages/modules/common/configurable_backup_cloud.py @@ -15,6 +15,9 @@ def __init__(self, self.config = config self.fault_state = FaultState(ComponentInfo(None, self.config.name, ComponentType.BACKUP_CLOUD.value)) + # nach Init auf NO_ERROR setzen, damit der Fehlerstatus beim Modulwechsel gelöscht wird + self.fault_state.no_error() + self.fault_state.store_error() with SingleComponentUpdateContext(self.fault_state): self._component_updater = component_initializer(config) diff --git a/packages/modules/common/configurable_tariff.py b/packages/modules/common/configurable_tariff.py index 0b92b45b11..afb933eacd 100644 --- a/packages/modules/common/configurable_tariff.py +++ b/packages/modules/common/configurable_tariff.py @@ -18,6 +18,9 @@ def __init__(self, self.config = config self.store = store.get_electricity_tariff_value_store() self.fault_state = FaultState(ComponentInfo(None, self.config.name, ComponentType.ELECTRICITY_TARIFF.value)) + # nach Init auf NO_ERROR setzen, damit der Fehlerstatus beim Modulwechsel gelöscht wird + self.fault_state.no_error() + self.fault_state.store_error() with SingleComponentUpdateContext(self.fault_state): self._component_updater = component_initializer(config) diff --git a/packages/modules/common/configurable_vehicle.py b/packages/modules/common/configurable_vehicle.py index 5f95ef1a13..00024e1579 100644 --- a/packages/modules/common/configurable_vehicle.py +++ b/packages/modules/common/configurable_vehicle.py @@ -53,6 +53,9 @@ def __init__(self, self.vehicle = vehicle self.store = store.get_car_value_store(self.vehicle) self.fault_state = FaultState(ComponentInfo(self.vehicle, self.vehicle_config.name, "vehicle")) + # nach Init auf NO_ERROR setzen, damit der Fehlerstatus beim Modulwechsel gelöscht wird + self.fault_state.no_error() + self.fault_state.store_error() try: self.__initializer() From 91b310c154b3bd167629a83080d7d5111d752a25 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Wed, 16 Jul 2025 15:19:18 +0200 Subject: [PATCH 57/73] fix template id must be int not str (#2566) * fix template id must be int not str * flake8 --- packages/helpermodules/update_config.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index bf611651c9..1d6793292e 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2133,16 +2133,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 80) - def upgrade_datastore_80(self) -> None: - def upgrade(topic: str, payload) -> None: - if (re.search("openWB/vehicle/template/charge_template/[0-9]+", topic) is not None or - re.search("openWB/vehicle/template/ev_template/[0-9]+", topic) is not None): - payload = decode_payload(payload) - index = get_index(topic) - payload.update({"id": index}) - Pub().pub(topic, payload) - self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 81) + # moved and corrected to 87 def upgrade_datastore_81(self) -> None: def upgrade(topic: str, payload) -> None: @@ -2353,4 +2344,15 @@ def upgrade_datastore_87(self) -> None: "rechtlichen Hinweise " "für die Speichersteuerung. Die Speichersteuerung war bisher bereits verfügbar, ist" " jedoch bis zum Akzeptieren standardmäßig deaktiviert.", MessageType.WARNING) + self.__update_topic("openWB/system/datastore_version", 87) + + def upgrade_datastore_87(self) -> None: + def upgrade(topic: str, payload) -> None: + if (re.search("openWB/vehicle/template/charge_template/[0-9]+", topic) is not None or + re.search("openWB/vehicle/template/ev_template/[0-9]+", topic) is not None): + payload = decode_payload(payload) + index = int(get_index(topic)) + payload.update({"id": index}) + Pub().pub(topic, payload) + self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 88) From ebb304f6cdbc0a157c24b853aa32e74657efaa04 Mon Sep 17 00:00:00 2001 From: ndrsnhs <156670705+ndrsnhs@users.noreply.github.com> Date: Wed, 16 Jul 2025 15:20:48 +0200 Subject: [PATCH 58/73] adjust factors of phase values (#2564) --- .../modules/devices/huawei/huawei_smartlogger/counter.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/modules/devices/huawei/huawei_smartlogger/counter.py b/packages/modules/devices/huawei/huawei_smartlogger/counter.py index 60ee45a7b7..733d61759f 100644 --- a/packages/modules/devices/huawei/huawei_smartlogger/counter.py +++ b/packages/modules/devices/huawei/huawei_smartlogger/counter.py @@ -31,12 +31,11 @@ def initialize(self) -> None: def update(self) -> None: modbus_id = self.component_config.configuration.modbus_id power = self.client.read_holding_registers(32278, ModbusDataType.INT_32, unit=modbus_id) - currents = [val / 100 for val in self.client.read_holding_registers( + currents = [val / 10 for val in self.client.read_holding_registers( 32272, [ModbusDataType.INT_32] * 3, unit=modbus_id)] voltages = [val / 100 for val in self.client.read_holding_registers( 32260, [ModbusDataType.INT_32] * 3, unit=modbus_id)] - powers = [val / 1000 for val in self.client.read_holding_registers( - 32335, [ModbusDataType.INT_32] * 3, unit=modbus_id)] + powers = self.client.read_holding_registers(32335, [ModbusDataType.INT_32] * 3, unit=modbus_id) imported, exported = self.sim_counter.sim_count(power) counter_state = CounterState( currents=currents, From 781b607a784675113dc98dffb95979633b5101ba Mon Sep 17 00:00:00 2001 From: ndrsnhs <156670705+ndrsnhs@users.noreply.github.com> Date: Wed, 16 Jul 2025 15:21:55 +0200 Subject: [PATCH 59/73] fix Meter_Power Nonetype (#2563) --- packages/helpermodules/create_debug.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/helpermodules/create_debug.py b/packages/helpermodules/create_debug.py index 6a40d840c6..9c7682be2e 100644 --- a/packages/helpermodules/create_debug.py +++ b/packages/helpermodules/create_debug.py @@ -290,7 +290,7 @@ def get_parsed_cp_data(cp: Chargepoint) -> str: f"CP_Control_Pilot_HW: {cp.data.config.control_pilot_interruption_hw}\n" f"CP_IP: {ip}\n" f"CP_Set_Current: {cp.data.set.current} A\n" - f"Meter_Power: {cp.data.get.power/1000} kW\n" + f"Meter_Power: {cp.data.get.power} W\n" f"Meter_Voltages: {cp.data.get.voltages} V\n" f"Meter_Currents: {cp.data.get.currents} A\n" f"Meter_Frequency: {frequency} Hz\n" From 1505bd29096796c37764216854c5d1b554541394 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Wed, 16 Jul 2025 15:32:27 +0200 Subject: [PATCH 60/73] evu kit: clean up code (#2559) * evu kit: clean up code * flake8 --- packages/modules/devices/openwb/openwb_evu_kit/device.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/modules/devices/openwb/openwb_evu_kit/device.py b/packages/modules/devices/openwb/openwb_evu_kit/device.py index 877a9fa6c9..439500b7fb 100644 --- a/packages/modules/devices/openwb/openwb_evu_kit/device.py +++ b/packages/modules/devices/openwb/openwb_evu_kit/device.py @@ -1,6 +1,5 @@ import logging from pathlib import Path -import time from typing import Iterable, Union from helpermodules.utils.run_command import run_command @@ -36,7 +35,6 @@ def update_components(components: Iterable[Union[BatKit, EvuKit, PvKit]]): with client: for component in components: component.update() - time.sleep(0.2) def initializer(): nonlocal client From 2c77dd852d601b103deb3f79fc04b14d090dd380 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Wed, 16 Jul 2025 15:39:33 +0200 Subject: [PATCH 61/73] component-wise error handling (#2557) --- docs/samples/sample_modbus/sample_modbus/device.py | 4 +++- .../sample_request_by_device/device.py | 4 +++- packages/modules/devices/algodue/algodue/device.py | 2 +- packages/modules/devices/alpha_ess/alpha_ess/device.py | 4 +++- packages/modules/devices/ampere/ampere/device.py | 4 +++- packages/modules/devices/avm/avm/device.py | 4 +++- .../modules/devices/azzurro_zcs/azzurro_zcs/device.py | 4 +++- packages/modules/devices/batterx/batterx/device.py | 5 +++-- .../devices/carlo_gavazzi/carlo_gavazzi/device.py | 4 +++- packages/modules/devices/deye/deye/device.py | 4 +++- packages/modules/devices/e3dc/e3dc/device.py | 4 +++- packages/modules/devices/enphase/enphase/device.py | 4 +++- packages/modules/devices/fox_ess/fox_ess/device.py | 4 +++- packages/modules/devices/generic/json/device.py | 4 +++- packages/modules/devices/generic/mqtt/bat.py | 5 +++-- packages/modules/devices/generic/mqtt/counter.py | 3 ++- packages/modules/devices/generic/mqtt/device.py | 10 +++++++++- packages/modules/devices/generic/mqtt/inverter.py | 3 ++- packages/modules/devices/good_we/good_we/device.py | 5 +++-- packages/modules/devices/growatt/growatt/device.py | 4 +++- packages/modules/devices/huawei/huawei/device.py | 4 +++- .../devices/huawei/huawei_smartlogger/device.py | 4 +++- packages/modules/devices/janitza/janitza/device.py | 4 +++- packages/modules/devices/kaco/kaco_tx/device.py | 4 +++- .../modules/devices/kostal/kostal_piko_old/device.py | 4 +++- packages/modules/devices/lg/lg/device.py | 4 +++- packages/modules/devices/mtec/mtec/device.py | 4 +++- packages/modules/devices/nibe/nibe/device.py | 4 +++- .../modules/devices/openwb/openwb_bat_kit/device.py | 4 +++- .../modules/devices/openwb/openwb_evu_kit/device.py | 4 +++- packages/modules/devices/openwb/openwb_flex/device.py | 5 +++-- .../modules/devices/openwb/openwb_pv_kit/device.py | 4 +++- packages/modules/devices/orno/orno/device.py | 4 +++- packages/modules/devices/qcells/qcells/device.py | 4 +++- packages/modules/devices/saxpower/saxpower/device.py | 4 +++- packages/modules/devices/siemens/siemens/device.py | 4 +++- .../modules/devices/siemens/siemens_sentron/device.py | 4 +++- packages/modules/devices/sigenergy/sigenergy/device.py | 4 +++- packages/modules/devices/sma/sma_sunny_boy/device.py | 4 +++- .../modules/devices/sma/sma_sunny_island/device.py | 4 +++- packages/modules/devices/sofar/sofar/device.py | 4 +++- packages/modules/devices/solar_log/solar_log/device.py | 3 ++- .../modules/devices/solar_world/solar_world/device.py | 4 +++- packages/modules/devices/solaredge/solaredge/device.py | 4 +++- packages/modules/devices/solarmax/solarmax/device.py | 4 +++- packages/modules/devices/solax/solax/device.py | 4 +++- packages/modules/devices/solis/solis/device.py | 4 +++- packages/modules/devices/studer/studer/device.py | 4 +++- packages/modules/devices/tesla/tesla/device.py | 4 +++- packages/modules/devices/thermia/thermia/device.py | 4 +++- packages/modules/devices/upower/upower/device.py | 2 +- packages/modules/devices/varta/varta/device.py | 6 ++++-- packages/modules/devices/victron/victron/device.py | 4 +++- packages/modules/devices/vzlogger/vzlogger/device.py | 4 +++- packages/modules/devices/youless/youless/device.py | 4 +++- 55 files changed, 165 insertions(+), 60 deletions(-) diff --git a/docs/samples/sample_modbus/sample_modbus/device.py b/docs/samples/sample_modbus/sample_modbus/device.py index e16fa7335b..013cd34159 100644 --- a/docs/samples/sample_modbus/sample_modbus/device.py +++ b/docs/samples/sample_modbus/sample_modbus/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.sample_modbus.sample_modbus.bat import SampleBat @@ -31,7 +32,8 @@ def create_inverter_component(component_config: SampleInverterSetup): def update_components(components: Iterable[Union[SampleBat, SampleCounter, SampleInverter]]): with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/docs/samples/sample_request_by_device/sample_request_by_device/device.py b/docs/samples/sample_request_by_device/sample_request_by_device/device.py index c08525efaf..db9cd40f2a 100644 --- a/docs/samples/sample_request_by_device/sample_request_by_device/device.py +++ b/docs/samples/sample_request_by_device/sample_request_by_device/device.py @@ -4,6 +4,7 @@ from modules.common import req from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.devices.sample_request_by_device.sample_request_by_device.bat import SampleBat from modules.devices.sample_request_by_device.sample_request_by_device.config import Sample, SampleBatSetup, SampleCounterSetup, SampleInverterSetup @@ -26,7 +27,8 @@ def create_inverter_component(component_config: SampleInverterSetup): def update_components(components: Iterable[Union[SampleBat, SampleCounter, SampleInverter]]): response = req.get_http_session().get(device_config.configuration.ip_address, timeout=5).json() for component in components: - component.update(response) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(response) return ConfigurableDevice( device_config=device_config, diff --git a/packages/modules/devices/algodue/algodue/device.py b/packages/modules/devices/algodue/algodue/device.py index 8b3ff704b6..d8358719bc 100644 --- a/packages/modules/devices/algodue/algodue/device.py +++ b/packages/modules/devices/algodue/algodue/device.py @@ -23,7 +23,7 @@ def create_counter_component(component_config: AlgodueCounterSetup): def update_components(components: Iterable[counter.AlgodueCounter]): with client: for component in components: - with SingleComponentUpdateContext(component.fault_state): + with SingleComponentUpdateContext(component.fault_state, update_always=False): component.update() def initializer(): diff --git a/packages/modules/devices/alpha_ess/alpha_ess/device.py b/packages/modules/devices/alpha_ess/alpha_ess/device.py index de391e7f1f..705e0cbf06 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/device.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/device.py @@ -4,6 +4,7 @@ from typing import Iterable, Union from helpermodules.utils.run_command import run_command +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.alpha_ess.alpha_ess.config import ( AlphaEss, AlphaEssBatSetup, AlphaEssCounterSetup, AlphaEssInverterSetup) @@ -48,7 +49,8 @@ def update_components(components: Iterable[Union[alpha_ess_component_classes]]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/ampere/ampere/device.py b/packages/modules/devices/ampere/ampere/device.py index d6dfc393f0..fda58066b1 100644 --- a/packages/modules/devices/ampere/ampere/device.py +++ b/packages/modules/devices/ampere/ampere/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.ampere.ampere.bat import AmpereBat @@ -40,7 +41,8 @@ def create_inverter_component(component_config: AmpereInverterSetup): def update_components(components: Iterable[Union[AmpereBat, AmpereCounter, AmpereInverter]]): with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/avm/avm/device.py b/packages/modules/devices/avm/avm/device.py index 4db3eca9d2..8dc89fbce6 100644 --- a/packages/modules/devices/avm/avm/device.py +++ b/packages/modules/devices/avm/avm/device.py @@ -9,6 +9,7 @@ from helpermodules.pub import Pub from modules.common import req from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.devices.avm.avm.config import Avm, AvmCounterSetup from modules.devices.avm.avm.counter import AvmCounter @@ -36,7 +37,8 @@ def update_components(components: Iterable[AvmCounter]): deviceListElementTree = ET.fromstring(response.text.strip()) for component in components: - component.update(deviceListElementTree) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(deviceListElementTree) def get_session_id(): # checking existing sessionID diff --git a/packages/modules/devices/azzurro_zcs/azzurro_zcs/device.py b/packages/modules/devices/azzurro_zcs/azzurro_zcs/device.py index 4551329419..92530a8716 100644 --- a/packages/modules/devices/azzurro_zcs/azzurro_zcs/device.py +++ b/packages/modules/devices/azzurro_zcs/azzurro_zcs/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.azzurro_zcs.azzurro_zcs.bat import ZCSBat @@ -36,7 +37,8 @@ def update_components(components: Iterable[Union[ZCSBat, ZCSCounter, ZCSInverter nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/batterx/batterx/device.py b/packages/modules/devices/batterx/batterx/device.py index a505bc06eb..1a33689836 100644 --- a/packages/modules/devices/batterx/batterx/device.py +++ b/packages/modules/devices/batterx/batterx/device.py @@ -4,7 +4,7 @@ from helpermodules.cli import run_using_positional_cli_args from modules.common.abstract_device import DeviceDescriptor -from modules.common.component_context import MultiComponentUpdateContext +from modules.common.component_context import MultiComponentUpdateContext, SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common.store import get_inverter_value_store from modules.devices.batterx.batterx import bat, external_inverter @@ -39,7 +39,8 @@ def update_components(components: Iterable[batterx_component_classes]): 'http://' + device_config.configuration.ip_address + '/api.php?get=currentstate', timeout=5).json() for component in components: - component.update(resp_json) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(resp_json) return ConfigurableDevice( device_config=device_config, diff --git a/packages/modules/devices/carlo_gavazzi/carlo_gavazzi/device.py b/packages/modules/devices/carlo_gavazzi/carlo_gavazzi/device.py index 37d752412b..e7ee9fcdf6 100644 --- a/packages/modules/devices/carlo_gavazzi/carlo_gavazzi/device.py +++ b/packages/modules/devices/carlo_gavazzi/carlo_gavazzi/device.py @@ -2,6 +2,7 @@ import logging from typing import Iterable +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.carlo_gavazzi.carlo_gavazzi import counter from modules.devices.carlo_gavazzi.carlo_gavazzi.config import CarloGavazzi, CarloGavazziCounterSetup @@ -23,7 +24,8 @@ def update_components(components: Iterable[counter.CarloGavazziCounter]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/deye/deye/device.py b/packages/modules/devices/deye/deye/device.py index e25e8952f1..f746726d47 100644 --- a/packages/modules/devices/deye/deye/device.py +++ b/packages/modules/devices/deye/deye/device.py @@ -4,6 +4,7 @@ from helpermodules.cli import run_using_positional_cli_args from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.deye.deye.bat import DeyeBat @@ -34,7 +35,8 @@ def update_components(components: Iterable[Union[DeyeBat, DeyeCounter, DeyeInver nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/e3dc/e3dc/device.py b/packages/modules/devices/e3dc/e3dc/device.py index 06eac88a92..5e0b63ca2b 100644 --- a/packages/modules/devices/e3dc/e3dc/device.py +++ b/packages/modules/devices/e3dc/e3dc/device.py @@ -4,6 +4,7 @@ from helpermodules.cli import run_using_positional_cli_args from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common import modbus from modules.devices.e3dc.e3dc.bat import E3dcBat, read_bat @@ -59,7 +60,8 @@ def update_components(components: Iterable[Union[E3dcBat, E3dcCounter, E3dcInver nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/enphase/enphase/device.py b/packages/modules/devices/enphase/enphase/device.py index 3d821df3c3..ad0dab03bf 100644 --- a/packages/modules/devices/enphase/enphase/device.py +++ b/packages/modules/devices/enphase/enphase/device.py @@ -8,6 +8,7 @@ from helpermodules.pub import Pub from modules.common import req from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.enphase.enphase.bat import EnphaseBat from modules.devices.enphase.enphase.config import (EnphaseVersion, @@ -143,7 +144,8 @@ def update_components(components: Iterable[Union[EnphaseBat, EnphaseCounter, Enp log.error(f"unknown version: {device_config.configuration.version}") return for component in components: - component.update(json_response, json_live_data) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(json_response, json_live_data) read_live_data = False token_tries = 0 diff --git a/packages/modules/devices/fox_ess/fox_ess/device.py b/packages/modules/devices/fox_ess/fox_ess/device.py index 73f2452f7c..96d9985e95 100644 --- a/packages/modules/devices/fox_ess/fox_ess/device.py +++ b/packages/modules/devices/fox_ess/fox_ess/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.fox_ess.fox_ess.bat import FoxEssBat @@ -32,7 +33,8 @@ def update_components(components: Iterable[Union[FoxEssBat, FoxEssCounter, FoxEs nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/generic/json/device.py b/packages/modules/devices/generic/json/device.py index a7a74c1fee..554d559fd0 100644 --- a/packages/modules/devices/generic/json/device.py +++ b/packages/modules/devices/generic/json/device.py @@ -5,6 +5,7 @@ from helpermodules.cli import run_using_positional_cli_args from modules.common import req from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.devices.generic.json import bat, counter, inverter from modules.devices.generic.json.bat import JsonBat @@ -36,7 +37,8 @@ def create_inverter(component_config: JsonInverterSetup) -> JsonInverter: def update_components(components: Iterable[JsonComponent]): response = req.get_http_session().get(device_config.configuration.url, timeout=5).json() for component in components: - component.update(response) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(response) return ConfigurableDevice( device_config, diff --git a/packages/modules/devices/generic/mqtt/bat.py b/packages/modules/devices/generic/mqtt/bat.py index 45e08a83fd..0e3470c292 100644 --- a/packages/modules/devices/generic/mqtt/bat.py +++ b/packages/modules/devices/generic/mqtt/bat.py @@ -26,9 +26,10 @@ def initialize(self) -> None: self.store = get_bat_value_store(self.component_config.id) def update(self, received_topics: Dict) -> None: + # [] für erforderliche Topics, .get() für optionale Topics currents = received_topics.get(f"openWB/mqtt/bat/{self.component_config.id}/get/currents") - power = received_topics.get(f"openWB/mqtt/bat/{self.component_config.id}/get/power") - soc = received_topics.get(f"openWB/mqtt/bat/{self.component_config.id}/get/soc") + power = received_topics[f"openWB/mqtt/bat/{self.component_config.id}/get/power"] + soc = received_topics[f"openWB/mqtt/bat/{self.component_config.id}/get/soc"] if (received_topics.get(f"openWB/mqtt/bat/{self.component_config.id}/get/imported") and received_topics.get(f"openWB/mqtt/bat/{self.component_config.id}/get/exported")): imported = received_topics.get(f"openWB/mqtt/bat/{self.component_config.id}/get/imported") diff --git a/packages/modules/devices/generic/mqtt/counter.py b/packages/modules/devices/generic/mqtt/counter.py index abde9bf9a5..d34dbb1b64 100644 --- a/packages/modules/devices/generic/mqtt/counter.py +++ b/packages/modules/devices/generic/mqtt/counter.py @@ -25,8 +25,9 @@ def initialize(self) -> None: self.store = get_counter_value_store(self.component_config.id) def update(self, received_topics: Dict) -> None: + # [] für erforderliche Topics, .get() für optionale Topics currents = received_topics.get(f"openWB/mqtt/counter/{self.component_config.id}/get/currents") - power = received_topics.get(f"openWB/mqtt/counter/{self.component_config.id}/get/power") + power = received_topics[f"openWB/mqtt/counter/{self.component_config.id}/get/power"] frequency = received_topics.get(f"openWB/mqtt/counter/{self.component_config.id}/get/frequency") power_factors = received_topics.get(f"openWB/mqtt/counter/{self.component_config.id}/get/power_factors") powers = received_topics.get(f"openWB/mqtt/counter/{self.component_config.id}/get/powers") diff --git a/packages/modules/devices/generic/mqtt/device.py b/packages/modules/devices/generic/mqtt/device.py index 93ab4d5d42..001aed7e25 100644 --- a/packages/modules/devices/generic/mqtt/device.py +++ b/packages/modules/devices/generic/mqtt/device.py @@ -5,6 +5,7 @@ from helpermodules.broker import BrokerClient from helpermodules.utils.topic_parser import decode_payload from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.component_type import type_to_topic_mapping from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.generic.mqtt import bat, counter, inverter @@ -38,7 +39,14 @@ def on_message(client, userdata, message): if received_topics: log.debug(f"Empfange MQTT Daten für Gerät {device_config.id}: {received_topics}") for component in components: - component.update(received_topics) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + try: + component.update(received_topics) + except KeyError: + raise KeyError( + "Fehlende MQTT-Daten: Stelle sicher, dass Du Werte an die erforderlichen Topics " + "(beschrieben in den Komponenten-Einstellungen) veröffentlichst (Publish)." + ) else: for component in components: component.fault_state.warning( diff --git a/packages/modules/devices/generic/mqtt/inverter.py b/packages/modules/devices/generic/mqtt/inverter.py index 0eb1f7088b..cd334449ad 100644 --- a/packages/modules/devices/generic/mqtt/inverter.py +++ b/packages/modules/devices/generic/mqtt/inverter.py @@ -25,7 +25,8 @@ def initialize(self) -> None: self.store = get_inverter_value_store(self.component_config.id) def update(self, received_topics: Dict) -> None: - power = received_topics.get(f"openWB/mqtt/pv/{self.component_config.id}/get/power") + # [] für erforderliche Topics, .get() für optionale Topics + power = received_topics[f"openWB/mqtt/pv/{self.component_config.id}/get/power"] if received_topics.get(f"openWB/mqtt/pv/{self.component_config.id}/get/exported"): exported = received_topics.get(f"openWB/mqtt/pv/{self.component_config.id}/get/exported") else: diff --git a/packages/modules/devices/good_we/good_we/device.py b/packages/modules/devices/good_we/good_we/device.py index 266b0fb046..861759abd2 100644 --- a/packages/modules/devices/good_we/good_we/device.py +++ b/packages/modules/devices/good_we/good_we/device.py @@ -4,6 +4,7 @@ from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.good_we.good_we import bat from modules.devices.good_we.good_we import counter @@ -49,8 +50,8 @@ def update_components(components: Iterable[good_we_component_classes]): nonlocal client with client: for component in components: - - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/growatt/growatt/device.py b/packages/modules/devices/growatt/growatt/device.py index d72a054344..475cc3f452 100644 --- a/packages/modules/devices/growatt/growatt/device.py +++ b/packages/modules/devices/growatt/growatt/device.py @@ -5,6 +5,7 @@ from helpermodules.utils.run_command import run_command from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.growatt.growatt.bat import GrowattBat @@ -44,7 +45,8 @@ def update_components(components: Iterable[Union[GrowattBat, GrowattCounter, Gro nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/huawei/huawei/device.py b/packages/modules/devices/huawei/huawei/device.py index c857ded96c..c22533e457 100644 --- a/packages/modules/devices/huawei/huawei/device.py +++ b/packages/modules/devices/huawei/huawei/device.py @@ -5,6 +5,7 @@ from helpermodules.utils.run_command import run_command from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.huawei.huawei.bat import HuaweiBat @@ -47,7 +48,8 @@ def update_components(components: Iterable[Union[HuaweiBat, HuaweiCounter, Huawe nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/huawei/huawei_smartlogger/device.py b/packages/modules/devices/huawei/huawei_smartlogger/device.py index dcd8b0a031..aac2c9a2d8 100644 --- a/packages/modules/devices/huawei/huawei_smartlogger/device.py +++ b/packages/modules/devices/huawei/huawei_smartlogger/device.py @@ -4,6 +4,7 @@ from modules.common.abstract_device import DeviceDescriptor from modules.common import modbus +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.huawei.huawei_smartlogger import counter from modules.devices.huawei.huawei_smartlogger import inverter @@ -40,7 +41,8 @@ def update_components(components: Iterable[huawei_smartlogger_component_classes] nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/janitza/janitza/device.py b/packages/modules/devices/janitza/janitza/device.py index 8e538a9926..b5182e273f 100644 --- a/packages/modules/devices/janitza/janitza/device.py +++ b/packages/modules/devices/janitza/janitza/device.py @@ -2,6 +2,7 @@ import logging from typing import Iterable, Union +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor @@ -34,7 +35,8 @@ def update_components(components: Iterable[Union[counter.JanitzaCounter, inverte nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/kaco/kaco_tx/device.py b/packages/modules/devices/kaco/kaco_tx/device.py index 6a5b2f3f01..1744f5b25d 100644 --- a/packages/modules/devices/kaco/kaco_tx/device.py +++ b/packages/modules/devices/kaco/kaco_tx/device.py @@ -4,6 +4,7 @@ from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.kaco.kaco_tx.inverter import KacoInverter from modules.devices.kaco.kaco_tx.config import (Kaco, KacoInverterSetup) @@ -24,7 +25,8 @@ def update_components(components: Iterable[KacoInverter]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/kostal/kostal_piko_old/device.py b/packages/modules/devices/kostal/kostal_piko_old/device.py index 8c604bffde..7e77a92724 100644 --- a/packages/modules/devices/kostal/kostal_piko_old/device.py +++ b/packages/modules/devices/kostal/kostal_piko_old/device.py @@ -6,6 +6,7 @@ from helpermodules.cli import run_using_positional_cli_args from modules.common import req from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.devices.kostal.kostal_piko_old import inverter from modules.devices.kostal.kostal_piko_old.config import (KostalPikoOld, @@ -24,7 +25,8 @@ def update_components(components: Iterable[KostalPikoOldInverter]): response = req.get_http_session().get(device_config.configuration.url, verify=False, auth=( device_config.configuration.user, device_config.configuration.password), timeout=5).text for component in components: - component.update(response) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(response) return ConfigurableDevice( device_config=device_config, diff --git a/packages/modules/devices/lg/lg/device.py b/packages/modules/devices/lg/lg/device.py index 4cb8d40341..41f650b158 100644 --- a/packages/modules/devices/lg/lg/device.py +++ b/packages/modules/devices/lg/lg/device.py @@ -6,6 +6,7 @@ from modules.common import req from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.lg.lg.bat import LgBat from modules.devices.lg.lg.config import LG, LgBatSetup, LgCounterSetup, LgInverterSetup @@ -58,7 +59,8 @@ def update_components(components: Iterable[Union[LgBat, LgCounter, LgInverter]]) response = _request_data(session, session_key, device_config.configuration.ip_address) for component in components: - component.update(response) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(response) session_key = " " return ConfigurableDevice( diff --git a/packages/modules/devices/mtec/mtec/device.py b/packages/modules/devices/mtec/mtec/device.py index 4611fcbc70..4afc17d4ff 100644 --- a/packages/modules/devices/mtec/mtec/device.py +++ b/packages/modules/devices/mtec/mtec/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.mtec.mtec.bat import MTecBat @@ -32,7 +33,8 @@ def update_components(components: Iterable[Union[MTecBat, MTecCounter, MTecInver nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/nibe/nibe/device.py b/packages/modules/devices/nibe/nibe/device.py index 67d955a882..5fcd534046 100644 --- a/packages/modules/devices/nibe/nibe/device.py +++ b/packages/modules/devices/nibe/nibe/device.py @@ -3,6 +3,7 @@ from typing import Iterable from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.nibe.nibe.config import Nibe, NibeCounterSetup @@ -21,7 +22,8 @@ def create_counter_component(component_config: NibeCounterSetup): def update_components(components: Iterable[NibeCounter]): with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/openwb/openwb_bat_kit/device.py b/packages/modules/devices/openwb/openwb_bat_kit/device.py index 8bd46922b3..e1c93b8152 100644 --- a/packages/modules/devices/openwb/openwb_bat_kit/device.py +++ b/packages/modules/devices/openwb/openwb_bat_kit/device.py @@ -5,6 +5,7 @@ from helpermodules.utils.run_command import run_command from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.openwb.openwb_bat_kit.config import BatKitSetup, BatKitBatSetup from modules.devices.openwb.openwb_bat_kit.bat import BatKit @@ -23,7 +24,8 @@ def update_components(components: Iterable[BatKit]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/openwb/openwb_evu_kit/device.py b/packages/modules/devices/openwb/openwb_evu_kit/device.py index 439500b7fb..3f34139d4b 100644 --- a/packages/modules/devices/openwb/openwb_evu_kit/device.py +++ b/packages/modules/devices/openwb/openwb_evu_kit/device.py @@ -5,6 +5,7 @@ from helpermodules.utils.run_command import run_command from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.openwb.openwb_bat_kit.bat import BatKit from modules.devices.openwb.openwb_evu_kit.counter import EvuKit @@ -34,7 +35,8 @@ def update_components(components: Iterable[Union[BatKit, EvuKit, PvKit]]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/openwb/openwb_flex/device.py b/packages/modules/devices/openwb/openwb_flex/device.py index 699d90a86a..8c77a08dd6 100644 --- a/packages/modules/devices/openwb/openwb_flex/device.py +++ b/packages/modules/devices/openwb/openwb_flex/device.py @@ -5,6 +5,7 @@ from helpermodules.utils.run_command import run_command from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.openwb.openwb_flex.bat import BatKitFlex @@ -41,8 +42,8 @@ def create_inverter_component(component_config: PvKitFlexSetup): def update_components(components: Iterable[Union[BatKitFlex, ConsumptionCounterFlex, EvuKitFlex, PvKitFlex]]): for component in components: - - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/openwb/openwb_pv_kit/device.py b/packages/modules/devices/openwb/openwb_pv_kit/device.py index 177815fa39..a81b493abf 100644 --- a/packages/modules/devices/openwb/openwb_pv_kit/device.py +++ b/packages/modules/devices/openwb/openwb_pv_kit/device.py @@ -5,6 +5,7 @@ from helpermodules.utils.run_command import run_command from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.openwb.openwb_pv_kit import inverter from modules.devices.openwb.openwb_pv_kit.config import PvKitSetup, PvKitInverterSetup @@ -23,7 +24,8 @@ def update_components(components: Iterable[inverter.PvKit]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/orno/orno/device.py b/packages/modules/devices/orno/orno/device.py index 4884bd0e43..5de83aff00 100644 --- a/packages/modules/devices/orno/orno/device.py +++ b/packages/modules/devices/orno/orno/device.py @@ -4,6 +4,7 @@ from typing import Iterable from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.orno.orno.config import Orno, OrnoCounterSetup @@ -22,7 +23,8 @@ def create_counter_component(component_config: OrnoCounterSetup): def update_components(components: Iterable[OrnoCounter]): with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/qcells/qcells/device.py b/packages/modules/devices/qcells/qcells/device.py index da11f67057..f0329315a4 100644 --- a/packages/modules/devices/qcells/qcells/device.py +++ b/packages/modules/devices/qcells/qcells/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.qcells.qcells.bat import QCellsBat @@ -32,7 +33,8 @@ def update_components(components: Iterable[Union[QCellsBat, QCellsCounter, QCell nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/saxpower/saxpower/device.py b/packages/modules/devices/saxpower/saxpower/device.py index 55305dff36..f34a5653ea 100644 --- a/packages/modules/devices/saxpower/saxpower/device.py +++ b/packages/modules/devices/saxpower/saxpower/device.py @@ -4,6 +4,7 @@ from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.saxpower.saxpower.bat import SaxpowerBat from modules.devices.saxpower.saxpower.config import Saxpower, SaxpowerBatSetup @@ -25,7 +26,8 @@ def update_components(components: Iterable[SaxpowerBat]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/siemens/siemens/device.py b/packages/modules/devices/siemens/siemens/device.py index 7463172fb4..329df3b2dc 100644 --- a/packages/modules/devices/siemens/siemens/device.py +++ b/packages/modules/devices/siemens/siemens/device.py @@ -4,6 +4,7 @@ from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.siemens.siemens.bat import SiemensBat from modules.devices.siemens.siemens.config import Siemens, SiemensBatSetup, SiemensCounterSetup, SiemensInverterSetup @@ -44,7 +45,8 @@ def update_components(components: Iterable[siemens_component_classes]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/siemens/siemens_sentron/device.py b/packages/modules/devices/siemens/siemens_sentron/device.py index dfad7169fc..7282051ecd 100644 --- a/packages/modules/devices/siemens/siemens_sentron/device.py +++ b/packages/modules/devices/siemens/siemens_sentron/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.siemens.siemens_sentron.config import (SiemensSentron, SiemensSentronCounterSetup, @@ -35,7 +36,8 @@ def update_components(components: Iterable[Union[counter.SiemensSentronCounter, nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/sigenergy/sigenergy/device.py b/packages/modules/devices/sigenergy/sigenergy/device.py index 8fc7d700f9..5b4402fc4c 100644 --- a/packages/modules/devices/sigenergy/sigenergy/device.py +++ b/packages/modules/devices/sigenergy/sigenergy/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.sigenergy.sigenergy.bat import SigenergyBat @@ -37,7 +38,8 @@ def update_components(components: Iterable[Union[SigenergyBat, SigenergyCounter, nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/sma/sma_sunny_boy/device.py b/packages/modules/devices/sma/sma_sunny_boy/device.py index 54778fcf61..232991715d 100644 --- a/packages/modules/devices/sma/sma_sunny_boy/device.py +++ b/packages/modules/devices/sma/sma_sunny_boy/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.sma.sma_sunny_boy.bat import SunnyBoyBat @@ -52,7 +53,8 @@ def update_components(components: Iterable[sma_modbus_tcp_component_classes]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/sma/sma_sunny_island/device.py b/packages/modules/devices/sma/sma_sunny_island/device.py index 6b89ae8b39..346ff52346 100644 --- a/packages/modules/devices/sma/sma_sunny_island/device.py +++ b/packages/modules/devices/sma/sma_sunny_island/device.py @@ -4,6 +4,7 @@ from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.sma.sma_sunny_island.bat import SunnyIslandBat from modules.devices.sma.sma_sunny_island.config import SmaSunnyIsland, SmaSunnyIslandBatSetup @@ -22,7 +23,8 @@ def update_components(components: Iterable[SunnyIslandBat]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/sofar/sofar/device.py b/packages/modules/devices/sofar/sofar/device.py index 2c91f0e8e6..ef5937810b 100644 --- a/packages/modules/devices/sofar/sofar/device.py +++ b/packages/modules/devices/sofar/sofar/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.sofar.sofar.bat import SofarBat @@ -32,7 +33,8 @@ def update_components(components: Iterable[Union[SofarBat, SofarCounter, SofarIn nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/solar_log/solar_log/device.py b/packages/modules/devices/solar_log/solar_log/device.py index c71bb20bd2..81ae7c2f45 100644 --- a/packages/modules/devices/solar_log/solar_log/device.py +++ b/packages/modules/devices/solar_log/solar_log/device.py @@ -25,7 +25,8 @@ def update_components(components: Iterable[Union[SolarLogCounter, SolarLogInvert response = req.get_http_session().post('http://'+device_config.configuration.ip_address+'/getjp', data=json.dumps({"801": {"170": None}}), timeout=5).json() for component in components: - component.update(response) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(response) return ConfigurableDevice( device_config=device_config, diff --git a/packages/modules/devices/solar_world/solar_world/device.py b/packages/modules/devices/solar_world/solar_world/device.py index 00501cb325..dd21d9b87f 100644 --- a/packages/modules/devices/solar_world/solar_world/device.py +++ b/packages/modules/devices/solar_world/solar_world/device.py @@ -5,6 +5,7 @@ from helpermodules.cli import run_using_positional_cli_args from modules.common import req from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.devices.solar_world.solar_world import counter, inverter from modules.devices.solar_world.solar_world.config import ( @@ -26,7 +27,8 @@ def update_components(components: Iterable[Union[SolarWorldCounter, SolarWorldIn response = req.get_http_session().get("http://"+str(device_config.configuration.ip_address) + "/rest/solarworld/lpvm/powerAndBatteryData", timeout=5).json() for component in components: - component.update(response) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(response) return ConfigurableDevice( device_config=device_config, diff --git a/packages/modules/devices/solaredge/solaredge/device.py b/packages/modules/devices/solaredge/solaredge/device.py index e74a0d4875..91821b29b8 100644 --- a/packages/modules/devices/solaredge/solaredge/device.py +++ b/packages/modules/devices/solaredge/solaredge/device.py @@ -4,6 +4,7 @@ from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.solaredge.solaredge.bat import SolaredgeBat from modules.devices.solaredge.solaredge.counter import SolaredgeCounter @@ -41,7 +42,8 @@ def update_components(components: Iterable[Union[SolaredgeBat, SolaredgeCounter, nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/solarmax/solarmax/device.py b/packages/modules/devices/solarmax/solarmax/device.py index a30db146f4..c3cb235ab6 100644 --- a/packages/modules/devices/solarmax/solarmax/device.py +++ b/packages/modules/devices/solarmax/solarmax/device.py @@ -5,6 +5,7 @@ from helpermodules.cli import run_using_positional_cli_args from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.solarmax.solarmax import inverter from modules.devices.solarmax.solarmax.bat import SolarmaxBat @@ -29,7 +30,8 @@ def update_components(components: Iterable[Union[SolarmaxBat, inverter.SolarmaxI nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/solax/solax/device.py b/packages/modules/devices/solax/solax/device.py index 081d64d90c..73539fdadd 100644 --- a/packages/modules/devices/solax/solax/device.py +++ b/packages/modules/devices/solax/solax/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.solax.solax.bat import SolaxBat @@ -29,7 +30,8 @@ def update_components(components: Iterable[Union[SolaxBat, SolaxCounter, SolaxIn nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/solis/solis/device.py b/packages/modules/devices/solis/solis/device.py index ad8f676a5b..9e8fcf8dc1 100644 --- a/packages/modules/devices/solis/solis/device.py +++ b/packages/modules/devices/solis/solis/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.solis.solis.bat import SolisBat @@ -35,7 +36,8 @@ def update_components(components: Iterable[Union[SolisBat, SolisCounter, SolisIn nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/studer/studer/device.py b/packages/modules/devices/studer/studer/device.py index 13e0a35c58..de887b0dc5 100644 --- a/packages/modules/devices/studer/studer/device.py +++ b/packages/modules/devices/studer/studer/device.py @@ -4,6 +4,7 @@ from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.devices.studer.studer.bat import StuderBat from modules.devices.studer.studer.config import Studer, StuderBatSetup, StuderInverterSetup @@ -27,7 +28,8 @@ def update_components(components: Iterable[Union[StuderBat, StuderInverter]]): nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/tesla/tesla/device.py b/packages/modules/devices/tesla/tesla/device.py index 2494e0b0fa..c7f5e8be88 100644 --- a/packages/modules/devices/tesla/tesla/device.py +++ b/packages/modules/devices/tesla/tesla/device.py @@ -5,6 +5,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common.req import get_http_session from modules.devices.tesla.tesla.bat import TeslaBat @@ -20,7 +21,8 @@ def __update_components(client: PowerwallHttpClient, components: Iterable[Union[TeslaBat, TeslaCounter, TeslaInverter]]): aggregate = client.get_json("/api/meters/aggregates") for component in components: - component.update(client, aggregate) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(client, aggregate) def _authenticate(session: requests.Session, url: str, email: str, password: str): diff --git a/packages/modules/devices/thermia/thermia/device.py b/packages/modules/devices/thermia/thermia/device.py index 0f85723c84..20f94c3c2e 100644 --- a/packages/modules/devices/thermia/thermia/device.py +++ b/packages/modules/devices/thermia/thermia/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.thermia.thermia.config import Thermia, ThermiaCounterSetup @@ -22,7 +23,8 @@ def create_counter_component(component_config: ThermiaCounterSetup): def update_components(components: Iterable[Union[ThermiaCounter]]): with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/upower/upower/device.py b/packages/modules/devices/upower/upower/device.py index 4637d1922d..f4242b0722 100644 --- a/packages/modules/devices/upower/upower/device.py +++ b/packages/modules/devices/upower/upower/device.py @@ -39,7 +39,7 @@ def create_inverter_component(component_config: UPowerInverterSetup): def update_components(components: Iterable[Union[UPowerBat, UPowerCounter, UPowerInverter]]): with client: for component in components: - with SingleComponentUpdateContext(component.fault_state): + with SingleComponentUpdateContext(component.fault_state, update_always=False): component.update() def initializer(): diff --git a/packages/modules/devices/varta/varta/device.py b/packages/modules/devices/varta/varta/device.py index 19892093e6..b991ac3935 100644 --- a/packages/modules/devices/varta/varta/device.py +++ b/packages/modules/devices/varta/varta/device.py @@ -54,10 +54,12 @@ def update_components(components: Iterable[Union[VartaBatApi, VartaBatModbus, Va with client: for component in components: if isinstance(component, (VartaBatModbus, VartaCounter, VartaInverter)): - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() for component in components: if isinstance(component, (VartaBatApi)): - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/victron/victron/device.py b/packages/modules/devices/victron/victron/device.py index e821a76412..6c4f1e84a0 100644 --- a/packages/modules/devices/victron/victron/device.py +++ b/packages/modules/devices/victron/victron/device.py @@ -3,6 +3,7 @@ from typing import Iterable, Union from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common.modbus import ModbusTcpClient_ from modules.devices.victron.victron.bat import VictronBat @@ -32,7 +33,8 @@ def update_components(components: Iterable[Union[VictronBat, VictronCounter, Vic nonlocal client with client: for component in components: - component.update() + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update() def initializer(): nonlocal client diff --git a/packages/modules/devices/vzlogger/vzlogger/device.py b/packages/modules/devices/vzlogger/vzlogger/device.py index fadfdcafc5..66f82fbca5 100644 --- a/packages/modules/devices/vzlogger/vzlogger/device.py +++ b/packages/modules/devices/vzlogger/vzlogger/device.py @@ -4,6 +4,7 @@ from modules.common import req from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.devices.vzlogger.vzlogger.config import VZLogger, VZLoggerCounterSetup, VZLoggerInverterSetup from modules.devices.vzlogger.vzlogger.counter import VZLoggerCounter @@ -22,7 +23,8 @@ def create_inverter_component(component_config: VZLoggerInverterSetup): def update_components(components: Iterable[Union[VZLoggerCounter, VZLoggerInverter]]): response = req.get_http_session().get(device_config.configuration.ip_address, timeout=5).json() for component in components: - component.update(response) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(response) return ConfigurableDevice( device_config=device_config, diff --git a/packages/modules/devices/youless/youless/device.py b/packages/modules/devices/youless/youless/device.py index 684ff14c42..3cf064a7cf 100644 --- a/packages/modules/devices/youless/youless/device.py +++ b/packages/modules/devices/youless/youless/device.py @@ -5,6 +5,7 @@ from helpermodules.cli import run_using_positional_cli_args from modules.common import req from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater from modules.devices.youless.youless import inverter from modules.devices.youless.youless.config import Youless, YoulessConfiguration, YoulessInverterSetup @@ -22,7 +23,8 @@ def update_components(components: Iterable[YoulessInverter]): params=(('f', 'j'),), timeout=5).json() for component in components: - component.update(response) + with SingleComponentUpdateContext(component.fault_state, update_always=False): + component.update(response) return ConfigurableDevice( device_config=device_config, From fc373c25b140e1f477f8fa38035c39022c60cef8 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Wed, 16 Jul 2025 16:06:21 +0200 Subject: [PATCH 62/73] info-box for new features (#2515) * info-box for new features * flake8 --- packages/helpermodules/update_config.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 1d6793292e..d8dd005398 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -56,7 +56,7 @@ class UpdateConfig: - DATASTORE_VERSION = 88 + DATASTORE_VERSION = 89 valid_topic = [ "^openWB/bat/config/bat_control_permitted$", @@ -2356,3 +2356,11 @@ def upgrade(topic: str, payload) -> None: Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 88) + + def upgrade_datastore_88(self) -> None: + pub_system_message({}, "Änderungen, die du auf der Hauptseite vornimmst, gelten nur vorübergehend, bis das " + "Fahrzeug abgesteckt wird. \nDie dauerhaften Einstellungen aus dem Einstellungsmenü werden " + "danach automatisch wieder aktiviert.", MessageType.INFO) + pub_system_message({}, "Es gibt ein neues Theme: das Koala-Theme! Smarthpone-optimiert und mit " + "Energiefluss-Diagramm & Karten-Ansicht der Ladepunkte", MessageType.INFO) + self.__update_topic("openWB/system/datastore_version", 89) From 3697cd942e38347c297c504cdb7b891e63d9e279 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Thu, 17 Jul 2025 08:20:04 +0200 Subject: [PATCH 63/73] fix component-wise error handling (#2568) --- docs/samples/sample_modbus/sample_modbus/device.py | 2 +- .../sample_request_by_device/device.py | 2 +- packages/modules/devices/algodue/algodue/device.py | 2 +- packages/modules/devices/alpha_ess/alpha_ess/device.py | 2 +- packages/modules/devices/ampere/ampere/device.py | 2 +- packages/modules/devices/avm/avm/device.py | 2 +- packages/modules/devices/azzurro_zcs/azzurro_zcs/device.py | 2 +- packages/modules/devices/batterx/batterx/device.py | 2 +- .../modules/devices/carlo_gavazzi/carlo_gavazzi/device.py | 2 +- packages/modules/devices/deye/deye/device.py | 2 +- packages/modules/devices/e3dc/e3dc/device.py | 2 +- packages/modules/devices/enphase/enphase/device.py | 2 +- packages/modules/devices/fox_ess/fox_ess/device.py | 2 +- packages/modules/devices/generic/json/device.py | 2 +- packages/modules/devices/generic/mqtt/device.py | 2 +- packages/modules/devices/good_we/good_we/device.py | 2 +- packages/modules/devices/growatt/growatt/device.py | 2 +- packages/modules/devices/huawei/huawei/device.py | 2 +- packages/modules/devices/huawei/huawei_smartlogger/device.py | 2 +- packages/modules/devices/janitza/janitza/device.py | 2 +- packages/modules/devices/kaco/kaco_tx/device.py | 2 +- packages/modules/devices/kostal/kostal_piko_old/device.py | 2 +- packages/modules/devices/lg/lg/device.py | 2 +- packages/modules/devices/mtec/mtec/device.py | 2 +- packages/modules/devices/nibe/nibe/device.py | 2 +- packages/modules/devices/openwb/openwb_bat_kit/device.py | 2 +- packages/modules/devices/openwb/openwb_evu_kit/device.py | 2 +- packages/modules/devices/openwb/openwb_flex/device.py | 2 +- packages/modules/devices/openwb/openwb_pv_kit/device.py | 2 +- packages/modules/devices/orno/orno/device.py | 2 +- packages/modules/devices/qcells/qcells/device.py | 2 +- packages/modules/devices/saxpower/saxpower/device.py | 2 +- packages/modules/devices/siemens/siemens/device.py | 2 +- packages/modules/devices/siemens/siemens_sentron/device.py | 2 +- packages/modules/devices/sigenergy/sigenergy/device.py | 2 +- packages/modules/devices/sma/sma_sunny_boy/device.py | 2 +- packages/modules/devices/sma/sma_sunny_island/device.py | 2 +- packages/modules/devices/sofar/sofar/device.py | 2 +- packages/modules/devices/solar_log/solar_log/device.py | 2 +- packages/modules/devices/solar_world/solar_world/device.py | 2 +- packages/modules/devices/solaredge/solaredge/device.py | 2 +- packages/modules/devices/solarmax/solarmax/device.py | 2 +- packages/modules/devices/solax/solax/device.py | 2 +- packages/modules/devices/solis/solis/device.py | 2 +- packages/modules/devices/studer/studer/device.py | 2 +- packages/modules/devices/tesla/tesla/device.py | 2 +- packages/modules/devices/thermia/thermia/device.py | 2 +- packages/modules/devices/upower/upower/device.py | 2 +- packages/modules/devices/varta/varta/device.py | 4 ++-- packages/modules/devices/victron/victron/device.py | 2 +- packages/modules/devices/vzlogger/vzlogger/device.py | 2 +- packages/modules/devices/youless/youless/device.py | 2 +- 52 files changed, 53 insertions(+), 53 deletions(-) diff --git a/docs/samples/sample_modbus/sample_modbus/device.py b/docs/samples/sample_modbus/sample_modbus/device.py index 013cd34159..f78bc2f76a 100644 --- a/docs/samples/sample_modbus/sample_modbus/device.py +++ b/docs/samples/sample_modbus/sample_modbus/device.py @@ -32,7 +32,7 @@ def create_inverter_component(component_config: SampleInverterSetup): def update_components(components: Iterable[Union[SampleBat, SampleCounter, SampleInverter]]): with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/docs/samples/sample_request_by_device/sample_request_by_device/device.py b/docs/samples/sample_request_by_device/sample_request_by_device/device.py index db9cd40f2a..0a0f912dde 100644 --- a/docs/samples/sample_request_by_device/sample_request_by_device/device.py +++ b/docs/samples/sample_request_by_device/sample_request_by_device/device.py @@ -27,7 +27,7 @@ def create_inverter_component(component_config: SampleInverterSetup): def update_components(components: Iterable[Union[SampleBat, SampleCounter, SampleInverter]]): response = req.get_http_session().get(device_config.configuration.ip_address, timeout=5).json() for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(response) return ConfigurableDevice( diff --git a/packages/modules/devices/algodue/algodue/device.py b/packages/modules/devices/algodue/algodue/device.py index d8358719bc..8b3ff704b6 100644 --- a/packages/modules/devices/algodue/algodue/device.py +++ b/packages/modules/devices/algodue/algodue/device.py @@ -23,7 +23,7 @@ def create_counter_component(component_config: AlgodueCounterSetup): def update_components(components: Iterable[counter.AlgodueCounter]): with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/alpha_ess/alpha_ess/device.py b/packages/modules/devices/alpha_ess/alpha_ess/device.py index 705e0cbf06..693a2edc12 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/device.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/device.py @@ -49,7 +49,7 @@ def update_components(components: Iterable[Union[alpha_ess_component_classes]]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/ampere/ampere/device.py b/packages/modules/devices/ampere/ampere/device.py index fda58066b1..42310bc708 100644 --- a/packages/modules/devices/ampere/ampere/device.py +++ b/packages/modules/devices/ampere/ampere/device.py @@ -41,7 +41,7 @@ def create_inverter_component(component_config: AmpereInverterSetup): def update_components(components: Iterable[Union[AmpereBat, AmpereCounter, AmpereInverter]]): with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/avm/avm/device.py b/packages/modules/devices/avm/avm/device.py index 8dc89fbce6..942c39e5da 100644 --- a/packages/modules/devices/avm/avm/device.py +++ b/packages/modules/devices/avm/avm/device.py @@ -37,7 +37,7 @@ def update_components(components: Iterable[AvmCounter]): deviceListElementTree = ET.fromstring(response.text.strip()) for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(deviceListElementTree) def get_session_id(): diff --git a/packages/modules/devices/azzurro_zcs/azzurro_zcs/device.py b/packages/modules/devices/azzurro_zcs/azzurro_zcs/device.py index 92530a8716..126d40f774 100644 --- a/packages/modules/devices/azzurro_zcs/azzurro_zcs/device.py +++ b/packages/modules/devices/azzurro_zcs/azzurro_zcs/device.py @@ -37,7 +37,7 @@ def update_components(components: Iterable[Union[ZCSBat, ZCSCounter, ZCSInverter nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/batterx/batterx/device.py b/packages/modules/devices/batterx/batterx/device.py index 1a33689836..d015deb74b 100644 --- a/packages/modules/devices/batterx/batterx/device.py +++ b/packages/modules/devices/batterx/batterx/device.py @@ -39,7 +39,7 @@ def update_components(components: Iterable[batterx_component_classes]): 'http://' + device_config.configuration.ip_address + '/api.php?get=currentstate', timeout=5).json() for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(resp_json) return ConfigurableDevice( diff --git a/packages/modules/devices/carlo_gavazzi/carlo_gavazzi/device.py b/packages/modules/devices/carlo_gavazzi/carlo_gavazzi/device.py index e7ee9fcdf6..341b49772f 100644 --- a/packages/modules/devices/carlo_gavazzi/carlo_gavazzi/device.py +++ b/packages/modules/devices/carlo_gavazzi/carlo_gavazzi/device.py @@ -24,7 +24,7 @@ def update_components(components: Iterable[counter.CarloGavazziCounter]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/deye/deye/device.py b/packages/modules/devices/deye/deye/device.py index f746726d47..cf401a4aca 100644 --- a/packages/modules/devices/deye/deye/device.py +++ b/packages/modules/devices/deye/deye/device.py @@ -35,7 +35,7 @@ def update_components(components: Iterable[Union[DeyeBat, DeyeCounter, DeyeInver nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/e3dc/e3dc/device.py b/packages/modules/devices/e3dc/e3dc/device.py index 5e0b63ca2b..1e1992e658 100644 --- a/packages/modules/devices/e3dc/e3dc/device.py +++ b/packages/modules/devices/e3dc/e3dc/device.py @@ -60,7 +60,7 @@ def update_components(components: Iterable[Union[E3dcBat, E3dcCounter, E3dcInver nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/enphase/enphase/device.py b/packages/modules/devices/enphase/enphase/device.py index ad0dab03bf..2928afe599 100644 --- a/packages/modules/devices/enphase/enphase/device.py +++ b/packages/modules/devices/enphase/enphase/device.py @@ -144,7 +144,7 @@ def update_components(components: Iterable[Union[EnphaseBat, EnphaseCounter, Enp log.error(f"unknown version: {device_config.configuration.version}") return for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(json_response, json_live_data) read_live_data = False diff --git a/packages/modules/devices/fox_ess/fox_ess/device.py b/packages/modules/devices/fox_ess/fox_ess/device.py index 96d9985e95..8505073342 100644 --- a/packages/modules/devices/fox_ess/fox_ess/device.py +++ b/packages/modules/devices/fox_ess/fox_ess/device.py @@ -33,7 +33,7 @@ def update_components(components: Iterable[Union[FoxEssBat, FoxEssCounter, FoxEs nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/generic/json/device.py b/packages/modules/devices/generic/json/device.py index 554d559fd0..a02c5c8012 100644 --- a/packages/modules/devices/generic/json/device.py +++ b/packages/modules/devices/generic/json/device.py @@ -37,7 +37,7 @@ def create_inverter(component_config: JsonInverterSetup) -> JsonInverter: def update_components(components: Iterable[JsonComponent]): response = req.get_http_session().get(device_config.configuration.url, timeout=5).json() for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(response) return ConfigurableDevice( diff --git a/packages/modules/devices/generic/mqtt/device.py b/packages/modules/devices/generic/mqtt/device.py index 001aed7e25..af862f342f 100644 --- a/packages/modules/devices/generic/mqtt/device.py +++ b/packages/modules/devices/generic/mqtt/device.py @@ -39,7 +39,7 @@ def on_message(client, userdata, message): if received_topics: log.debug(f"Empfange MQTT Daten für Gerät {device_config.id}: {received_topics}") for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): try: component.update(received_topics) except KeyError: diff --git a/packages/modules/devices/good_we/good_we/device.py b/packages/modules/devices/good_we/good_we/device.py index 861759abd2..3c7e9b4e63 100644 --- a/packages/modules/devices/good_we/good_we/device.py +++ b/packages/modules/devices/good_we/good_we/device.py @@ -50,7 +50,7 @@ def update_components(components: Iterable[good_we_component_classes]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/growatt/growatt/device.py b/packages/modules/devices/growatt/growatt/device.py index 475cc3f452..139c168b4b 100644 --- a/packages/modules/devices/growatt/growatt/device.py +++ b/packages/modules/devices/growatt/growatt/device.py @@ -45,7 +45,7 @@ def update_components(components: Iterable[Union[GrowattBat, GrowattCounter, Gro nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/huawei/huawei/device.py b/packages/modules/devices/huawei/huawei/device.py index c22533e457..df77e1702a 100644 --- a/packages/modules/devices/huawei/huawei/device.py +++ b/packages/modules/devices/huawei/huawei/device.py @@ -48,7 +48,7 @@ def update_components(components: Iterable[Union[HuaweiBat, HuaweiCounter, Huawe nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/huawei/huawei_smartlogger/device.py b/packages/modules/devices/huawei/huawei_smartlogger/device.py index aac2c9a2d8..92ad36aff2 100644 --- a/packages/modules/devices/huawei/huawei_smartlogger/device.py +++ b/packages/modules/devices/huawei/huawei_smartlogger/device.py @@ -41,7 +41,7 @@ def update_components(components: Iterable[huawei_smartlogger_component_classes] nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/janitza/janitza/device.py b/packages/modules/devices/janitza/janitza/device.py index b5182e273f..0a0cda0501 100644 --- a/packages/modules/devices/janitza/janitza/device.py +++ b/packages/modules/devices/janitza/janitza/device.py @@ -35,7 +35,7 @@ def update_components(components: Iterable[Union[counter.JanitzaCounter, inverte nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/kaco/kaco_tx/device.py b/packages/modules/devices/kaco/kaco_tx/device.py index 1744f5b25d..60e917b3b9 100644 --- a/packages/modules/devices/kaco/kaco_tx/device.py +++ b/packages/modules/devices/kaco/kaco_tx/device.py @@ -25,7 +25,7 @@ def update_components(components: Iterable[KacoInverter]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/kostal/kostal_piko_old/device.py b/packages/modules/devices/kostal/kostal_piko_old/device.py index 7e77a92724..79c92daa0a 100644 --- a/packages/modules/devices/kostal/kostal_piko_old/device.py +++ b/packages/modules/devices/kostal/kostal_piko_old/device.py @@ -25,7 +25,7 @@ def update_components(components: Iterable[KostalPikoOldInverter]): response = req.get_http_session().get(device_config.configuration.url, verify=False, auth=( device_config.configuration.user, device_config.configuration.password), timeout=5).text for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(response) return ConfigurableDevice( diff --git a/packages/modules/devices/lg/lg/device.py b/packages/modules/devices/lg/lg/device.py index 41f650b158..9ebed79b6b 100644 --- a/packages/modules/devices/lg/lg/device.py +++ b/packages/modules/devices/lg/lg/device.py @@ -59,7 +59,7 @@ def update_components(components: Iterable[Union[LgBat, LgCounter, LgInverter]]) response = _request_data(session, session_key, device_config.configuration.ip_address) for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(response) session_key = " " diff --git a/packages/modules/devices/mtec/mtec/device.py b/packages/modules/devices/mtec/mtec/device.py index 4afc17d4ff..47581ff939 100644 --- a/packages/modules/devices/mtec/mtec/device.py +++ b/packages/modules/devices/mtec/mtec/device.py @@ -33,7 +33,7 @@ def update_components(components: Iterable[Union[MTecBat, MTecCounter, MTecInver nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/nibe/nibe/device.py b/packages/modules/devices/nibe/nibe/device.py index 5fcd534046..6a03378060 100644 --- a/packages/modules/devices/nibe/nibe/device.py +++ b/packages/modules/devices/nibe/nibe/device.py @@ -22,7 +22,7 @@ def create_counter_component(component_config: NibeCounterSetup): def update_components(components: Iterable[NibeCounter]): with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/openwb/openwb_bat_kit/device.py b/packages/modules/devices/openwb/openwb_bat_kit/device.py index e1c93b8152..f1cf0f1f4f 100644 --- a/packages/modules/devices/openwb/openwb_bat_kit/device.py +++ b/packages/modules/devices/openwb/openwb_bat_kit/device.py @@ -24,7 +24,7 @@ def update_components(components: Iterable[BatKit]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/openwb/openwb_evu_kit/device.py b/packages/modules/devices/openwb/openwb_evu_kit/device.py index 3f34139d4b..5e99c22d33 100644 --- a/packages/modules/devices/openwb/openwb_evu_kit/device.py +++ b/packages/modules/devices/openwb/openwb_evu_kit/device.py @@ -35,7 +35,7 @@ def update_components(components: Iterable[Union[BatKit, EvuKit, PvKit]]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/openwb/openwb_flex/device.py b/packages/modules/devices/openwb/openwb_flex/device.py index 8c77a08dd6..351b019a14 100644 --- a/packages/modules/devices/openwb/openwb_flex/device.py +++ b/packages/modules/devices/openwb/openwb_flex/device.py @@ -42,7 +42,7 @@ def create_inverter_component(component_config: PvKitFlexSetup): def update_components(components: Iterable[Union[BatKitFlex, ConsumptionCounterFlex, EvuKitFlex, PvKitFlex]]): for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/openwb/openwb_pv_kit/device.py b/packages/modules/devices/openwb/openwb_pv_kit/device.py index a81b493abf..f2cd8cf71b 100644 --- a/packages/modules/devices/openwb/openwb_pv_kit/device.py +++ b/packages/modules/devices/openwb/openwb_pv_kit/device.py @@ -24,7 +24,7 @@ def update_components(components: Iterable[inverter.PvKit]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/orno/orno/device.py b/packages/modules/devices/orno/orno/device.py index 5de83aff00..169bc971fd 100644 --- a/packages/modules/devices/orno/orno/device.py +++ b/packages/modules/devices/orno/orno/device.py @@ -23,7 +23,7 @@ def create_counter_component(component_config: OrnoCounterSetup): def update_components(components: Iterable[OrnoCounter]): with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/qcells/qcells/device.py b/packages/modules/devices/qcells/qcells/device.py index f0329315a4..a5c9b8eb18 100644 --- a/packages/modules/devices/qcells/qcells/device.py +++ b/packages/modules/devices/qcells/qcells/device.py @@ -33,7 +33,7 @@ def update_components(components: Iterable[Union[QCellsBat, QCellsCounter, QCell nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/saxpower/saxpower/device.py b/packages/modules/devices/saxpower/saxpower/device.py index f34a5653ea..6914ac931a 100644 --- a/packages/modules/devices/saxpower/saxpower/device.py +++ b/packages/modules/devices/saxpower/saxpower/device.py @@ -26,7 +26,7 @@ def update_components(components: Iterable[SaxpowerBat]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/siemens/siemens/device.py b/packages/modules/devices/siemens/siemens/device.py index 329df3b2dc..667af3607e 100644 --- a/packages/modules/devices/siemens/siemens/device.py +++ b/packages/modules/devices/siemens/siemens/device.py @@ -45,7 +45,7 @@ def update_components(components: Iterable[siemens_component_classes]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/siemens/siemens_sentron/device.py b/packages/modules/devices/siemens/siemens_sentron/device.py index 7282051ecd..354ccbe274 100644 --- a/packages/modules/devices/siemens/siemens_sentron/device.py +++ b/packages/modules/devices/siemens/siemens_sentron/device.py @@ -36,7 +36,7 @@ def update_components(components: Iterable[Union[counter.SiemensSentronCounter, nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/sigenergy/sigenergy/device.py b/packages/modules/devices/sigenergy/sigenergy/device.py index 5b4402fc4c..4667401cec 100644 --- a/packages/modules/devices/sigenergy/sigenergy/device.py +++ b/packages/modules/devices/sigenergy/sigenergy/device.py @@ -38,7 +38,7 @@ def update_components(components: Iterable[Union[SigenergyBat, SigenergyCounter, nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/sma/sma_sunny_boy/device.py b/packages/modules/devices/sma/sma_sunny_boy/device.py index 232991715d..f793b3f229 100644 --- a/packages/modules/devices/sma/sma_sunny_boy/device.py +++ b/packages/modules/devices/sma/sma_sunny_boy/device.py @@ -53,7 +53,7 @@ def update_components(components: Iterable[sma_modbus_tcp_component_classes]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/sma/sma_sunny_island/device.py b/packages/modules/devices/sma/sma_sunny_island/device.py index 346ff52346..6629eadcfa 100644 --- a/packages/modules/devices/sma/sma_sunny_island/device.py +++ b/packages/modules/devices/sma/sma_sunny_island/device.py @@ -23,7 +23,7 @@ def update_components(components: Iterable[SunnyIslandBat]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/sofar/sofar/device.py b/packages/modules/devices/sofar/sofar/device.py index ef5937810b..3ab2b80c69 100644 --- a/packages/modules/devices/sofar/sofar/device.py +++ b/packages/modules/devices/sofar/sofar/device.py @@ -33,7 +33,7 @@ def update_components(components: Iterable[Union[SofarBat, SofarCounter, SofarIn nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/solar_log/solar_log/device.py b/packages/modules/devices/solar_log/solar_log/device.py index 81ae7c2f45..ab84095125 100644 --- a/packages/modules/devices/solar_log/solar_log/device.py +++ b/packages/modules/devices/solar_log/solar_log/device.py @@ -25,7 +25,7 @@ def update_components(components: Iterable[Union[SolarLogCounter, SolarLogInvert response = req.get_http_session().post('http://'+device_config.configuration.ip_address+'/getjp', data=json.dumps({"801": {"170": None}}), timeout=5).json() for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(response) return ConfigurableDevice( diff --git a/packages/modules/devices/solar_world/solar_world/device.py b/packages/modules/devices/solar_world/solar_world/device.py index dd21d9b87f..0dc7f812d2 100644 --- a/packages/modules/devices/solar_world/solar_world/device.py +++ b/packages/modules/devices/solar_world/solar_world/device.py @@ -27,7 +27,7 @@ def update_components(components: Iterable[Union[SolarWorldCounter, SolarWorldIn response = req.get_http_session().get("http://"+str(device_config.configuration.ip_address) + "/rest/solarworld/lpvm/powerAndBatteryData", timeout=5).json() for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(response) return ConfigurableDevice( diff --git a/packages/modules/devices/solaredge/solaredge/device.py b/packages/modules/devices/solaredge/solaredge/device.py index 91821b29b8..6b4bb205e4 100644 --- a/packages/modules/devices/solaredge/solaredge/device.py +++ b/packages/modules/devices/solaredge/solaredge/device.py @@ -42,7 +42,7 @@ def update_components(components: Iterable[Union[SolaredgeBat, SolaredgeCounter, nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/solarmax/solarmax/device.py b/packages/modules/devices/solarmax/solarmax/device.py index c3cb235ab6..3fb514d09d 100644 --- a/packages/modules/devices/solarmax/solarmax/device.py +++ b/packages/modules/devices/solarmax/solarmax/device.py @@ -30,7 +30,7 @@ def update_components(components: Iterable[Union[SolarmaxBat, inverter.SolarmaxI nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/solax/solax/device.py b/packages/modules/devices/solax/solax/device.py index 73539fdadd..09a0d76940 100644 --- a/packages/modules/devices/solax/solax/device.py +++ b/packages/modules/devices/solax/solax/device.py @@ -30,7 +30,7 @@ def update_components(components: Iterable[Union[SolaxBat, SolaxCounter, SolaxIn nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/solis/solis/device.py b/packages/modules/devices/solis/solis/device.py index 9e8fcf8dc1..6b52c6a3cc 100644 --- a/packages/modules/devices/solis/solis/device.py +++ b/packages/modules/devices/solis/solis/device.py @@ -36,7 +36,7 @@ def update_components(components: Iterable[Union[SolisBat, SolisCounter, SolisIn nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/studer/studer/device.py b/packages/modules/devices/studer/studer/device.py index de887b0dc5..ae0d85fb4b 100644 --- a/packages/modules/devices/studer/studer/device.py +++ b/packages/modules/devices/studer/studer/device.py @@ -28,7 +28,7 @@ def update_components(components: Iterable[Union[StuderBat, StuderInverter]]): nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/tesla/tesla/device.py b/packages/modules/devices/tesla/tesla/device.py index c7f5e8be88..1bc1703084 100644 --- a/packages/modules/devices/tesla/tesla/device.py +++ b/packages/modules/devices/tesla/tesla/device.py @@ -21,7 +21,7 @@ def __update_components(client: PowerwallHttpClient, components: Iterable[Union[TeslaBat, TeslaCounter, TeslaInverter]]): aggregate = client.get_json("/api/meters/aggregates") for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(client, aggregate) diff --git a/packages/modules/devices/thermia/thermia/device.py b/packages/modules/devices/thermia/thermia/device.py index 20f94c3c2e..019d2966ab 100644 --- a/packages/modules/devices/thermia/thermia/device.py +++ b/packages/modules/devices/thermia/thermia/device.py @@ -23,7 +23,7 @@ def create_counter_component(component_config: ThermiaCounterSetup): def update_components(components: Iterable[Union[ThermiaCounter]]): with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/upower/upower/device.py b/packages/modules/devices/upower/upower/device.py index f4242b0722..4637d1922d 100644 --- a/packages/modules/devices/upower/upower/device.py +++ b/packages/modules/devices/upower/upower/device.py @@ -39,7 +39,7 @@ def create_inverter_component(component_config: UPowerInverterSetup): def update_components(components: Iterable[Union[UPowerBat, UPowerCounter, UPowerInverter]]): with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/varta/varta/device.py b/packages/modules/devices/varta/varta/device.py index b991ac3935..e22d64ac72 100644 --- a/packages/modules/devices/varta/varta/device.py +++ b/packages/modules/devices/varta/varta/device.py @@ -54,11 +54,11 @@ def update_components(components: Iterable[Union[VartaBatApi, VartaBatModbus, Va with client: for component in components: if isinstance(component, (VartaBatModbus, VartaCounter, VartaInverter)): - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() for component in components: if isinstance(component, (VartaBatApi)): - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/victron/victron/device.py b/packages/modules/devices/victron/victron/device.py index 6c4f1e84a0..5f346f400e 100644 --- a/packages/modules/devices/victron/victron/device.py +++ b/packages/modules/devices/victron/victron/device.py @@ -33,7 +33,7 @@ def update_components(components: Iterable[Union[VictronBat, VictronCounter, Vic nonlocal client with client: for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update() def initializer(): diff --git a/packages/modules/devices/vzlogger/vzlogger/device.py b/packages/modules/devices/vzlogger/vzlogger/device.py index 66f82fbca5..b292fac278 100644 --- a/packages/modules/devices/vzlogger/vzlogger/device.py +++ b/packages/modules/devices/vzlogger/vzlogger/device.py @@ -23,7 +23,7 @@ def create_inverter_component(component_config: VZLoggerInverterSetup): def update_components(components: Iterable[Union[VZLoggerCounter, VZLoggerInverter]]): response = req.get_http_session().get(device_config.configuration.ip_address, timeout=5).json() for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(response) return ConfigurableDevice( diff --git a/packages/modules/devices/youless/youless/device.py b/packages/modules/devices/youless/youless/device.py index 3cf064a7cf..026b4c8026 100644 --- a/packages/modules/devices/youless/youless/device.py +++ b/packages/modules/devices/youless/youless/device.py @@ -23,7 +23,7 @@ def update_components(components: Iterable[YoulessInverter]): params=(('f', 'j'),), timeout=5).json() for component in components: - with SingleComponentUpdateContext(component.fault_state, update_always=False): + with SingleComponentUpdateContext(component.fault_state): component.update(response) return ConfigurableDevice( From 2edc22e9c33a4c6022cda57f03400045b7026b40 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 29 Jul 2025 06:57:43 +0200 Subject: [PATCH 64/73] fix merge --- packages/helpermodules/update_config.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index d8dd005398..38c70126b6 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -56,7 +56,7 @@ class UpdateConfig: - DATASTORE_VERSION = 89 + DATASTORE_VERSION = 90 valid_topic = [ "^openWB/bat/config/bat_control_permitted$", @@ -2346,7 +2346,7 @@ def upgrade_datastore_87(self) -> None: " jedoch bis zum Akzeptieren standardmäßig deaktiviert.", MessageType.WARNING) self.__update_topic("openWB/system/datastore_version", 87) - def upgrade_datastore_87(self) -> None: + def upgrade_datastore_88(self) -> None: def upgrade(topic: str, payload) -> None: if (re.search("openWB/vehicle/template/charge_template/[0-9]+", topic) is not None or re.search("openWB/vehicle/template/ev_template/[0-9]+", topic) is not None): @@ -2355,12 +2355,12 @@ def upgrade(topic: str, payload) -> None: payload.update({"id": index}) Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 88) + self.__update_topic("openWB/system/datastore_version", 89) - def upgrade_datastore_88(self) -> None: + def upgrade_datastore_89(self) -> None: pub_system_message({}, "Änderungen, die du auf der Hauptseite vornimmst, gelten nur vorübergehend, bis das " "Fahrzeug abgesteckt wird. \nDie dauerhaften Einstellungen aus dem Einstellungsmenü werden " "danach automatisch wieder aktiviert.", MessageType.INFO) pub_system_message({}, "Es gibt ein neues Theme: das Koala-Theme! Smarthpone-optimiert und mit " "Energiefluss-Diagramm & Karten-Ansicht der Ladepunkte", MessageType.INFO) - self.__update_topic("openWB/system/datastore_version", 89) + self.__update_topic("openWB/system/datastore_version", 90) From 5c40d344977c6d4ad9dcf64504caaf2f63acc223 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 29 Jul 2025 08:05:06 +0200 Subject: [PATCH 65/73] add max dis/charge power --- packages/control/chargepoint/chargepoint.py | 14 +++++++------- packages/control/chargepoint/chargepoint_data.py | 1 + packages/control/ev/ev.py | 13 ++++--------- packages/helpermodules/setdata.py | 1 + .../chargepoints/mqtt/chargepoint_module.py | 1 + .../chargepoints/openwb_pro/chargepoint_module.py | 5 ++--- packages/modules/common/component_state.py | 2 ++ packages/modules/common/store/_chargepoint.py | 1 + .../update_values_test.py | 2 +- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 5e28df3b9a..b7d1b91280 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -591,21 +591,21 @@ def check_cp_min_max_current(self, required_current: float, phases: int) -> floa required_current = min(required_current, self.template.data.dc_max_current) return required_current - def check_min_max_current(self, required_current: float, phases: int, pv: bool = False) -> float: + def check_min_max_current(self, required_current: float, phases: int) -> float: required_current_prev = required_current msg = None if (self.data.control_parameter.chargemode == Chargemode.BIDI_CHARGING and - self.data.control_parameter.submode == Chargemode.BIDI_CHARGING and required_current < 0): - required_current = max(self.data.get.max_discharge_power / phases / 230, required_current) - # CDP prüft für Ladeströme, aber Entladeströme dürfen auch nicht höher sein. + self.data.control_parameter.submode == Chargemode.BIDI_CHARGING): + if required_current < 0: + required_current = max(self.data.get.max_discharge_power / phases / 230, required_current) + else: + required_current = max(self.data.get.max_charge_power / phases / 230, required_current) required_current = self.check_cp_min_max_current(abs(required_current), phases) * -1 else: required_current, msg = self.data.set.charging_ev_data.check_min_max_current( - self.data.control_parameter, required_current, phases, - self.template.data.charging_type, - pv) + self.template.data.charging_type) required_current = self.check_cp_min_max_current(required_current, phases) if required_current != required_current_prev and msg is None: msg = ("Die Einstellungen in dem Ladepunkt-Profil beschränken den Strom auf " diff --git a/packages/control/chargepoint/chargepoint_data.py b/packages/control/chargepoint/chargepoint_data.py index 3950f8658b..4d433a8205 100644 --- a/packages/control/chargepoint/chargepoint_data.py +++ b/packages/control/chargepoint/chargepoint_data.py @@ -109,6 +109,7 @@ class Get: fault_str: str = NO_ERROR fault_state: int = 0 imported: float = 0 + max_charge_power: Optional[float] = None max_discharge_power: Optional[float] = None max_evse_current: Optional[int] = None phases_in_use: int = 0 diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index aee1808620..5000690506 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -232,11 +232,9 @@ def get_required_current(self, control_parameter.phases) def check_min_max_current(self, - control_parameter: ControlParameter, required_current: float, phases: int, - charging_type: str, - pv: bool = False,) -> Tuple[float, Optional[str]]: + charging_type: str) -> Tuple[float, Optional[str]]: """ prüft, ob der gesetzte Ladestrom über dem Mindest-Ladestrom und unter dem Maximal-Ladestrom des EVs liegt. Falls nicht, wird der Ladestrom auf den Mindest-Ladestrom bzw. den Maximal-Ladestrom des EV gesetzt. Wenn PV-Laden aktiv ist, darf die Stromstärke nicht unter den PV-Mindeststrom gesetzt werden. @@ -247,13 +245,10 @@ def check_min_max_current(self, if phases != 0: # EV soll/darf nicht laden if required_current != 0: - if not pv: - if charging_type == ChargingType.AC.value: - min_current = self.ev_template.data.min_current - else: - min_current = self.ev_template.data.dc_min_current + if charging_type == ChargingType.AC.value: + min_current = self.ev_template.data.min_current else: - min_current = control_parameter.required_current + min_current = self.ev_template.data.dc_min_current if required_current < min_current: required_current = min_current msg = ("Die Einstellungen in dem Fahrzeug-Profil beschränken den Strom auf " diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 8d3e9054f0..2a454351fc 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -531,6 +531,7 @@ def process_chargepoint_get_topics(self, msg): "/get/charging_current" in msg.topic or "/get/charging_power" in msg.topic or "/get/charging_voltage" in msg.topic or + "/get/max_charge_power" in msg.topic or "/get/max_discharge_power" in msg.topic or "/get/imported" in msg.topic or "/get/exported" in msg.topic or diff --git a/packages/modules/chargepoints/mqtt/chargepoint_module.py b/packages/modules/chargepoints/mqtt/chargepoint_module.py index 05bcf2dff5..85c154909c 100644 --- a/packages/modules/chargepoints/mqtt/chargepoint_module.py +++ b/packages/modules/chargepoints/mqtt/chargepoint_module.py @@ -79,6 +79,7 @@ def on_message(client, userdata, message): vehicle_id=received_topics.get(f"{topic_prefix}vehicle_id"), evse_current=received_topics.get(f"{topic_prefix}evse_current"), max_evse_current=received_topics.get(f"{topic_prefix}max_evse_current"), + max_charge_power=received_topics.get(f"{topic_prefix}max_charge_power"), max_discharge_power=received_topics.get(f"{topic_prefix}max_discharge_power"), evse_signaling=received_topics.get(f"{topic_prefix}evse_signaling"), ) diff --git a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py index 72a9cb7418..5cdd0f5ed1 100644 --- a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py +++ b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py @@ -108,9 +108,8 @@ def request_values(self) -> ChargepointState: chargepoint_state.rfid_timestamp = json_rsp["rfid_timestamp"] if json_rsp.get("max_discharge_power"): chargepoint_state.max_discharge_power = json_rsp["max_discharge_power"] - else: - # TODO REMOVE - chargepoint_state.max_discharge_power = 4000 + if json_rsp.get("max_charge_power"): + chargepoint_state.max_charge_power = json_rsp["max_charge_power"] self.validate_values(chargepoint_state) self.client_error_context.reset_error_counter() diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index 77d44cd849..6b3719bf58 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -171,6 +171,7 @@ def __init__(self, charging_voltage: Optional[float] = 0, charging_power: Optional[float] = 0, evse_signaling: Optional[str] = None, + max_charge_power: Optional[float] = None, max_discharge_power: Optional[float] = None, powers: Optional[List[Optional[float]]] = None, voltages: Optional[List[Optional[float]]] = None, @@ -215,6 +216,7 @@ def __init__(self, self.current_commit = current_commit self.version = version self.evse_signaling = evse_signaling + self.max_charge_power = max_charge_power self.max_discharge_power = max_discharge_power diff --git a/packages/modules/common/store/_chargepoint.py b/packages/modules/common/store/_chargepoint.py index 6123060f31..8743646f41 100644 --- a/packages/modules/common/store/_chargepoint.py +++ b/packages/modules/common/store/_chargepoint.py @@ -56,6 +56,7 @@ def update(self): pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/evse_current", self.state.evse_current) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/vehicle_id", self.state.vehicle_id) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current) + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_charge_power", self.state.max_charge_power) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_discharge_power", self.state.max_discharge_power) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/version", self.state.version) diff --git a/packages/modules/internal_chargepoint_handler/update_values_test.py b/packages/modules/internal_chargepoint_handler/update_values_test.py index 5b9fd6075a..f3d9eea443 100644 --- a/packages/modules/internal_chargepoint_handler/update_values_test.py +++ b/packages/modules/internal_chargepoint_handler/update_values_test.py @@ -24,7 +24,7 @@ @pytest.mark.parametrize( "old_chargepoint_state, published_topics", - [(None, 54), + [(None, 56), (OLD_CHARGEPOINT_STATE, 2)] ) From 6dd36e3216cf633be83afd462bef0c49d32bc536 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Mon, 11 Aug 2025 08:22:02 +0200 Subject: [PATCH 66/73] test charge_template --- packages/control/ev/charge_template.py | 2 +- packages/control/ev/charge_template_test.py | 33 +++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index 5552f2005f..978a580566 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -381,7 +381,7 @@ def bidi_charging(self, bidi_power_plan.current = self.data.chargemode.bidi_charging.power / phases_in_use / 230 bidi_power_plan.phases_to_use = phases_in_use bidi_power_plan.phases_to_use_pv = phases_in_use - plan_end_time = timecheck.check_end_time(bidi_power_plan, chargemode_switch_timestamp, False) + plan_end_time = timecheck.check_end_time(bidi_power_plan, chargemode_switch_timestamp) if plan_end_time is None: plan_data = None else: diff --git a/packages/control/ev/charge_template_test.py b/packages/control/ev/charge_template_test.py index 6e3e12b133..bd4f151386 100644 --- a/packages/control/ev/charge_template_test.py +++ b/packages/control/ev/charge_template_test.py @@ -12,6 +12,7 @@ from control.ev.charge_template import ChargeTemplate from control.ev.ev_template import EvTemplate, EvTemplateData from control.general import General +from control.text import BidiState from helpermodules import timecheck from helpermodules.abstract_plans import Limit, ScheduledChargingPlan, TimeChargingPlan @@ -305,3 +306,35 @@ def test_scheduled_charging_calc_current_electricity_tariff(loading_hour, expect # evaluation assert ret == expected + + +@pytest.mark.parametrize( + "bidi,soc,soc_scheduled,expected_submode,expected_current", + [ + (BidiState.EV_NOT_BIDI_CAPABLE, 50.0, 80.0, "instant_charging", 16), + (BidiState.BIDI_CAPABLE, 100.0, 80.0, "bidi_charging", 6), + (BidiState.BIDI_CAPABLE, 50.0, 80.0, "instant_charging", 16), + ] +) +def test_bidi_charging_cases(bidi, soc, soc_scheduled, expected_submode, expected_current): + ct = ChargeTemplate() + ev_template = EvTemplate() + phases = 3 + used_amount = 0.0 + max_hw_phases = 3 + phase_switch_supported = True + charging_type = "AC" + chargemode_switch_timestamp = 0.0 + control_parameter = ControlParameter() + imported_since_plugged = 0.0 + soc_request_interval_offset = 0.0 + phases_in_use = 3 + ct.data.chargemode.bidi_charging.plan.limit.soc_scheduled = soc_scheduled + + current, submode, message, phases_out = ct.bidi_charging( + soc, ev_template, phases, used_amount, max_hw_phases, phase_switch_supported, + charging_type, chargemode_switch_timestamp, control_parameter, imported_since_plugged, + soc_request_interval_offset, bidi, phases_in_use + ) + assert submode == expected_submode + assert current == expected_current From 17bd0d1887b1e005e04eb9dcd6db7d3b1d12d74f Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Mon, 11 Aug 2025 10:45:23 +0200 Subject: [PATCH 67/73] integration test bidi charging --- packages/control/algorithm/chargemodes.py | 2 +- .../integration_test/bidi_charging_test.py | 54 +++++++++++++++++++ .../algorithm/integration_test/conftest.py | 2 + packages/control/chargepoint/chargepoint.py | 2 +- 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 packages/control/algorithm/integration_test/bidi_charging_test.py diff --git a/packages/control/algorithm/chargemodes.py b/packages/control/algorithm/chargemodes.py index b9dcf32b6e..1699ab988b 100644 --- a/packages/control/algorithm/chargemodes.py +++ b/packages/control/algorithm/chargemodes.py @@ -31,6 +31,6 @@ CONSIDERED_CHARGE_MODES_SURPLUS = CHARGEMODES[0:4] + CHARGEMODES[8:20] CONSIDERED_CHARGE_MODES_PV_ONLY = CHARGEMODES[12:20] CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:12] -CONSIDERED_CHARGE_MODES_MIN_CURRENT = CHARGEMODES[0:-1] +CONSIDERED_CHARGE_MODES_MIN_CURRENT = CHARGEMODES[0:-4] CONSIDERED_CHARGE_MODES_NO_CURRENT = CHARGEMODES[22:24] CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE = CHARGEMODES[20:22] diff --git a/packages/control/algorithm/integration_test/bidi_charging_test.py b/packages/control/algorithm/integration_test/bidi_charging_test.py new file mode 100644 index 0000000000..251be286a8 --- /dev/null +++ b/packages/control/algorithm/integration_test/bidi_charging_test.py @@ -0,0 +1,54 @@ +import pytest +from control import data +from control.algorithm.algorithm import Algorithm +from control.chargemode import Chargemode + + +@pytest.fixture() +def bidi_cps(): + def _setup(*cps): + for cp in cps: + data.data.cp_data[cp].data.get.max_discharge_power = -11000 + data.data.cp_data[cp].data.get.max_charge_power = 11000 + data.data.cp_data[cp].data.get.phases_in_use = 3 + control_parameter = data.data.cp_data[cp].data.control_parameter + control_parameter.min_current = data.data.cp_data[cp].data.set.charging_ev_data.ev_template.data.min_current + control_parameter.phases = 3 + control_parameter.required_currents = [16]*3 + control_parameter.required_current = 16 + control_parameter.chargemode = Chargemode.BIDI_CHARGING + control_parameter.submode = Chargemode.BIDI_CHARGING + return _setup + + +@pytest.mark.parametrize("grid_power, expected_current", + [pytest.param(-2000, 2.898550724637681, id="bidi charge"), + pytest.param(2000, -2.898550724637681, id="bidi discharge")]) +def test_cp3_bidi(grid_power: float, expected_current: float, bidi_cps, all_cp_not_charging, monkeypatch): + # setup + bidi_cps("cp3") + data.data.counter_data["counter0"].data.get.power = grid_power + + # execution + Algorithm().calc_current() + + # evaluation + assert data.data.cp_data["cp3"].data.set.current == expected_current + assert data.data.cp_data["cp4"].data.set.current == 0 + assert data.data.cp_data["cp5"].data.set.current == 0 + assert data.data.counter_data["counter0"].data.set.surplus_power_left == 0 + + +def test_cp3_cp4_bidi_discharge(bidi_cps, all_cp_not_charging, monkeypatch): + # setup + bidi_cps("cp3", "cp4") + data.data.counter_data["counter0"].data.get.power = 4000 + + # execution + Algorithm().calc_current() + + # evaluation + assert data.data.cp_data["cp3"].data.set.current == -2.898550724637681 + assert data.data.cp_data["cp4"].data.set.current == -2.898550724637681 + assert data.data.cp_data["cp5"].data.set.current == 0 + assert data.data.counter_data["counter0"].data.set.surplus_power_left == 0 diff --git a/packages/control/algorithm/integration_test/conftest.py b/packages/control/algorithm/integration_test/conftest.py index 0f9d86433c..22eac7fd59 100644 --- a/packages/control/algorithm/integration_test/conftest.py +++ b/packages/control/algorithm/integration_test/conftest.py @@ -7,6 +7,7 @@ from control.bat import Bat from control.bat_all import BatAll from control.chargepoint.chargepoint import Chargepoint +from control.chargepoint.chargepoint_template import CpTemplate from control.counter_all import CounterAll from control.counter import Counter from control.ev.ev import Ev @@ -24,6 +25,7 @@ def data_() -> None: "cp4": Chargepoint(4, None), "cp5": Chargepoint(5, None)} for i in range(3, 6): + data.data.cp_data[f"cp{i}"].template = CpTemplate() data.data.cp_data[f"cp{i}"].data.config.phase_1 = i-2 data.data.cp_data[f"cp{i}"].data.set.charging_ev = i data.data.cp_data[f"cp{i}"].data.set.charging_ev_data = Ev(i) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index bbf119cbb8..aac7b441c4 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -600,7 +600,7 @@ def check_min_max_current(self, required_current: float, phases: int) -> float: if required_current < 0: required_current = max(self.data.get.max_discharge_power / phases / 230, required_current) else: - required_current = max(self.data.get.max_charge_power / phases / 230, required_current) + required_current = min(self.data.get.max_charge_power / phases / 230, required_current) required_current = self.check_cp_min_max_current(abs(required_current), phases) * -1 else: required_current, msg = self.data.set.charging_ev_data.check_min_max_current( From ccd5b11dcc393aa5235b5eb50455a2fe846ea4b0 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 14 Aug 2025 08:17:47 +0200 Subject: [PATCH 68/73] draft --- packages/control/algorithm/bidi_charging.py | 11 +- packages/control/algorithm/chargemodes.py | 8 +- packages/control/ev/charge_template.py | 157 +++++++------------- packages/control/ev/ev.py | 23 +-- packages/helpermodules/abstract_plans.py | 2 + 5 files changed, 67 insertions(+), 134 deletions(-) diff --git a/packages/control/algorithm/bidi_charging.py b/packages/control/algorithm/bidi_charging.py index 17ee211c34..b30e3a65f7 100644 --- a/packages/control/algorithm/bidi_charging.py +++ b/packages/control/algorithm/bidi_charging.py @@ -27,9 +27,14 @@ def set_bidi(self): 230 for i in range(0, cp.data.get.phases_in_use)] missing_currents += [0] * (3 - len(missing_currents)) if zero_point_adjustment > 0: - for index in range(0, 3): - missing_currents[index] = min(cp.data.control_parameter.required_current, - missing_currents[index]) + if cp.data.set.charging_ev_data.charge_template.bidi_charging_allowed( + cp.data.control_parameter.current_plan, cp.data.set.charging_ev_data.data.get.soc): + for index in range(0, 3): + missing_currents[index] = min(cp.data.control_parameter.required_current, + missing_currents[index]) + else: + log.info(f"LP{cp.num}: Nur bidirektional entladen erlaubt, da SoC-Limit erreicht.") + missing_currents = [0, 0, 0] else: for index in range(0, 3): missing_currents[index] = cp.check_min_max_current(missing_currents[index], diff --git a/packages/control/algorithm/chargemodes.py b/packages/control/algorithm/chargemodes.py index 6b65f9cd10..4628180f2d 100644 --- a/packages/control/algorithm/chargemodes.py +++ b/packages/control/algorithm/chargemodes.py @@ -4,8 +4,6 @@ # Tupel-Inhalt:(eingestellter Modus, tatsächlich genutzter Modus, Priorität) CHARGEMODES = ((Chargemode.SCHEDULED_CHARGING, Chargemode.INSTANT_CHARGING, True), (Chargemode.SCHEDULED_CHARGING, Chargemode.INSTANT_CHARGING, False), - (Chargemode.BIDI_CHARGING, Chargemode.INSTANT_CHARGING, True), - (Chargemode.BIDI_CHARGING, Chargemode.INSTANT_CHARGING, False), (None, Chargemode.TIME_CHARGING, True), (None, Chargemode.TIME_CHARGING, False), (Chargemode.INSTANT_CHARGING, Chargemode.INSTANT_CHARGING, True), @@ -16,15 +14,13 @@ (Chargemode.PV_CHARGING, Chargemode.INSTANT_CHARGING, False), (Chargemode.SCHEDULED_CHARGING, Chargemode.PV_CHARGING, True), (Chargemode.SCHEDULED_CHARGING, Chargemode.PV_CHARGING, False), - (Chargemode.BIDI_CHARGING, Chargemode.PV_CHARGING, True), - (Chargemode.BIDI_CHARGING, Chargemode.PV_CHARGING, False), (Chargemode.ECO_CHARGING, Chargemode.PV_CHARGING, True), (Chargemode.ECO_CHARGING, Chargemode.PV_CHARGING, False), (Chargemode.PV_CHARGING, Chargemode.PV_CHARGING, True), (Chargemode.PV_CHARGING, Chargemode.PV_CHARGING, False), # niedrigere Priorität soll nachrangig geladen, aber zuerst entladen werden - (Chargemode.BIDI_CHARGING, Chargemode.BIDI_CHARGING, False), - (Chargemode.BIDI_CHARGING, Chargemode.BIDI_CHARGING, True), + (Chargemode.SCHEDULED_CHARGING, Chargemode.BIDI_CHARGING, False), + (Chargemode.SCHEDULED_CHARGING, Chargemode.BIDI_CHARGING, True), (None, Chargemode.STOP, True), (None, Chargemode.STOP, False)) diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index 978a580566..df04317bd4 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -325,97 +325,18 @@ def eco_charging(self, log.exception("Fehler im ev-Modul "+str(self.data.id)) return 0, "stop", "Keine Ladung, da ein interner Fehler aufgetreten ist: "+traceback.format_exc(), 0 - def bidi_charging(self, - soc: float, - ev_template: EvTemplate, - phases: int, - used_amount: float, - max_hw_phases: int, - phase_switch_supported: bool, - charging_type: str, - chargemode_switch_timestamp: float, - control_parameter: ControlParameter, - imported_since_plugged: float, - soc_request_interval_offset: float, - bidi: BidiState, - phases_in_use: int) -> Tuple[float, str, str, int]: - if bidi != BidiState.BIDI_CAPABLE: - # normales Zielladen, da Hardware kein bidirektionales Laden unterstützt - plan_data = self._find_recent_plan([self.data.chargemode.bidi_charging.plan], - soc, - ev_template, - phases, - used_amount, - max_hw_phases, - phase_switch_supported, - charging_type, - chargemode_switch_timestamp, - control_parameter, - soc_request_interval_offset) - if plan_data: - control_parameter.current_plan = plan_data.plan.id - else: - control_parameter.current_plan = None - required_current, submode, message, phases = self.scheduled_charging_calc_current( - plan_data, - soc, - imported_since_plugged, - control_parameter.phases, - control_parameter.min_current, - soc_request_interval_offset, - charging_type, - ev_template) - # Hinweis an Zielladen-Message anhängen, dass Bidi nicht möglich ist - message = bidi.value + message - return required_current, submode, message, phases - elif soc > self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: - return control_parameter.min_current, "bidi_charging", None, phases_in_use - elif soc < self.data.chargemode.bidi_charging.plan.limit.soc_scheduled: - # kein bidirektionales Laden, da SoC noch nicht erreicht - missing_amount = ((self.data.chargemode.bidi_charging.plan.limit.soc_scheduled - - soc) / 100) * ev_template.data.battery_capacity - duration = missing_amount/self.data.chargemode.bidi_charging.power * 3600 - - # es muss ein Plan übergeben werden, damit die Soll-Ströme ausgerechnet werden können - bidi_power_plan = copy.deepcopy(self.data.chargemode.bidi_charging.plan) - bidi_power_plan.current = self.data.chargemode.bidi_charging.power / phases_in_use / 230 - bidi_power_plan.phases_to_use = phases_in_use - bidi_power_plan.phases_to_use_pv = phases_in_use - plan_end_time = timecheck.check_end_time(bidi_power_plan, chargemode_switch_timestamp) - if plan_end_time is None: - plan_data = None - else: - plan_data = SelectedPlan(remaining_time=plan_end_time - duration, - duration=duration, - missing_amount=missing_amount, - phases=phases, - plan=bidi_power_plan) - if plan_data: - control_parameter.current_plan = plan_data.plan.id - else: - control_parameter.current_plan = None - return self.scheduled_charging_calc_current( - plan_data, - soc, - imported_since_plugged, - control_parameter.phases, - control_parameter.min_current, - data.data.general_data.data.control_interval, - charging_type, - ev_template) - def _find_recent_plan(self, plans: List[ScheduledChargingPlan], soc: float, ev_template: EvTemplate, - phases: int, used_amount: float, max_hw_phases: int, phase_switch_supported: bool, charging_type: str, chargemode_switch_timestamp: float, control_parameter: ControlParameter, - soc_request_interval_offset: int): + soc_request_interval_offset: int, + hw_bidi: bool): plans_diff_end_date = [] for p in plans: if p.active: @@ -453,7 +374,7 @@ def _find_recent_plan(self, remaining_time, missing_amount, phases, duration = self._calc_remaining_time( plan, plan_end_time, soc, ev_template, used_amount, max_hw_phases, phase_switch_supported, - charging_type, control_parameter.phases, soc_request_interval_offset) + charging_type, control_parameter.phases, soc_request_interval_offset, hw_bidi) return SelectedPlan(remaining_time=remaining_time, duration=duration, @@ -466,25 +387,29 @@ def _find_recent_plan(self, def scheduled_charging(self, soc: float, ev_template: EvTemplate, - phases: int, used_amount: float, max_hw_phases: int, phase_switch_supported: bool, charging_type: str, chargemode_switch_timestamp: float, control_parameter: ControlParameter, - soc_request_interval_offset: int) -> Optional[SelectedPlan]: + soc_request_interval_offset: int, + hw_bidi: bool) -> Optional[SelectedPlan]: + if hw_bidi and soc is None: + raise Exception("Für den Lademodis Bidi ist zwingend ein SoC-Modul erforderlich. Soll der " + "SoC ausschließlich aus dem Fahrzeug ausgelesen werden, bitte auf " + "manuellen SoC mit Auslesung aus dem Fahrzeug umstellen.") plan_data = self._find_recent_plan(self.data.chargemode.scheduled_charging.plans, soc, ev_template, - phases, used_amount, max_hw_phases, phase_switch_supported, charging_type, chargemode_switch_timestamp, control_parameter, - soc_request_interval_offset) + soc_request_interval_offset, + hw_bidi) if plan_data: control_parameter.current_plan = plan_data.plan.id else: @@ -509,25 +434,30 @@ def _calc_remaining_time(self, phase_switch_supported: bool, charging_type: str, control_parameter_phases: int, - soc_request_interval_offset: int) -> SelectedPlan: - if plan.phases_to_use == 0: + soc_request_interval_offset: int, + hw_bidi: bool) -> SelectedPlan: + if hw_bidi: + duration, missing_amount = self._calculate_duration( + plan, soc, ev_template.data.battery_capacity, + used_amount, control_parameter_phases, charging_type, ev_template, hw_bidi) + elif plan.phases_to_use == 0: if max_hw_phases == 1: duration, missing_amount = self._calculate_duration( - plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template) + plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template, hw_bidi) remaining_time = plan_end_time - duration phases = 1 elif phase_switch_supported is False: duration, missing_amount = self._calculate_duration( plan, soc, ev_template.data.battery_capacity, used_amount, control_parameter_phases, - charging_type, ev_template) + charging_type, ev_template, hw_bidi) phases = control_parameter_phases remaining_time = plan_end_time - duration else: duration_3p, missing_amount = self._calculate_duration( - plan, soc, ev_template.data.battery_capacity, used_amount, 3, charging_type, ev_template) + plan, soc, ev_template.data.battery_capacity, used_amount, 3, charging_type, ev_template, hw_bidi) remaining_time_3p = plan_end_time - duration_3p duration_1p, missing_amount = self._calculate_duration( - plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template) + plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template, hw_bidi) remaining_time_1p = plan_end_time - duration_1p # Kurz vor dem nächsten Abfragen des SoC, wenn noch der alte SoC da ist, kann es sein, dass die Zeit # für 1p nicht mehr reicht, weil die Regelung den neuen SoC noch nicht kennt. @@ -544,7 +474,7 @@ def _calc_remaining_time(self, elif plan.phases_to_use == 3 or plan.phases_to_use == 1: duration, missing_amount = self._calculate_duration( plan, soc, ev_template.data.battery_capacity, - used_amount, plan.phases_to_use, charging_type, ev_template) + used_amount, plan.phases_to_use, charging_type, ev_template, hw_bidi) remaining_time = plan_end_time - duration phases = plan.phases_to_use @@ -558,7 +488,8 @@ def _calculate_duration(self, used_amount: float, phases: int, charging_type: str, - ev_template: EvTemplate) -> Tuple[float, float]: + ev_template: EvTemplate, + hw_bidi: bool) -> Tuple[float, float]: if plan.limit.selected == "soc": if soc is not None: @@ -567,10 +498,13 @@ def _calculate_duration(self, raise ValueError("Um Zielladen mit SoC-Ziel nutzen zu können, bitte ein SoC-Modul konfigurieren.") else: missing_amount = plan.limit.amount - used_amount - current = plan.current if charging_type == ChargingType.AC.value else plan.dc_current - current = max(current, ev_template.data.min_current if charging_type == - ChargingType.AC.value else ev_template.data.dc_min_current) - duration = missing_amount/(current * phases*230) * 3600 + if hw_bidi: + duration = missing_amount/plan.bidi_power * 3600 + else: + current = plan.current if charging_type == ChargingType.AC.value else plan.dc_current + current = max(current, ev_template.data.min_current if charging_type == + ChargingType.AC.value else ev_template.data.dc_min_current) + duration = missing_amount/(current * phases*230) * 3600 return duration, missing_amount SCHEDULED_REACHED_LIMIT_SOC = ("Kein Zielladen, da noch Zeit bis zum Zieltermin ist. " @@ -581,6 +515,9 @@ def _calculate_duration(self, SCHEDULED_CHARGING_REACHED_AMOUNT = "Kein Zielladen, da die Energiemenge bereits erreicht wurde." SCHEDULED_CHARGING_REACHED_SCHEDULED_SOC = ("Falls vorhanden wird mit EVU-Überschuss geladen, da der Ziel-Soc " "für Zielladen bereits erreicht wurde.") + SCHEDULED_CHARGING_BIDI = ("Der Ziel-Soc für Zielladen wurde bereits erreicht. Das Auto wird " + "bidirektional ge-/entladen, sodass möglichst weder Bezug noch " + "Einspeisung erfolgt.") SCHEDULED_CHARGING_NO_PLANS_CONFIGURED = "Keine Ladung, da keine Ziel-Termine konfiguriert sind." SCHEDULED_CHARGING_NO_DATE_PENDING = "Kein Zielladen, da kein Ziel-Termin ansteht." SCHEDULED_CHARGING_USE_PV = ("Laden startet {}. Falls vorhanden, " @@ -625,12 +562,18 @@ def scheduled_charging_calc_current(self, if limit.selected == "soc" and soc >= limit.soc_limit and soc >= limit.soc_scheduled: message = self.SCHEDULED_CHARGING_REACHED_LIMIT_SOC elif limit.selected == "soc" and limit.soc_scheduled <= soc < limit.soc_limit: - message = self.SCHEDULED_CHARGING_REACHED_SCHEDULED_SOC - current = min_current - submode = "pv_charging" - # bei Überschuss-Laden mit der Phasenzahl aus den control_parameter laden, - # um die Umschaltung zu berücksichtigen. - phases = plan.phases_to_use_pv + if plan.bidi: + message = self.SCHEDULED_CHARGING_BIDI + current = min_current + submode = "bidi_charging" + phases = control_parameter_phases + else: + message = self.SCHEDULED_CHARGING_REACHED_SCHEDULED_SOC + current = min_current + submode = "pv_charging" + # bei Überschuss-Laden mit der Phasenzahl aus den control_parameter laden, + # um die Umschaltung zu berücksichtigen. + phases = plan.phases_to_use_pv elif limit.selected == "amount" and used_amount >= limit.amount: message = self.SCHEDULED_CHARGING_REACHED_AMOUNT elif 0 - soc_request_interval_offset < selected_plan.remaining_time < 300 + soc_request_interval_offset: @@ -696,3 +639,9 @@ def scheduled_charging_calc_current(self, def stop(self) -> Tuple[int, str, str]: return 0, "stop", "Keine Ladung, da der Lademodus Stop aktiv ist." + + def bidi_charging_allowed(self, selected_plan: int, soc: float): + # Wenn zu über den Limit-SoC geladen wurde, darf nur noch bidirektional entladen werden. + for plan in self.data.chargemode.scheduled_charging.plans: + if plan.id == selected_plan: + return soc <= plan.limit.soc_limit diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index 5ee242bed6..dea82c133c 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -162,14 +162,14 @@ def get_required_current(self, required_current, submode, tmp_message, phases = charge_template.scheduled_charging( self.data.get.soc, self.ev_template, - control_parameter.phases, imported_since_plugged, max_phases_hw, phase_switch_supported, charging_type, chargemode_switch_timestamp, control_parameter, - soc_request_interval_offset) + soc_request_interval_offset, + bidi != BidiState.BIDI_CAPABLE) message = f"{tmp_message or ''}".strip() # Wenn Zielladen auf Überschuss wartet, prüfen, ob Zeitladen aktiv ist. @@ -199,25 +199,6 @@ def get_required_current(self, elif charge_template.data.chargemode.selected == "eco_charging": required_current, submode, tmp_message, phases = charge_template.eco_charging( self.data.get.soc, control_parameter, charging_type, imported_since_plugged, max_phases_hw) - elif charge_template.data.chargemode.selected == "bidi_charging": - if self.soc_module is None: - raise Exception("Für den Lademodis Bidi ist zwingend ein SoC-Modul erforderlich. Soll der " - "SoC ausschließlich aus dem Fahrzeug ausgelesen werden, bitte auf " - "manuellen SoC mit Auslesung aus dem Fahrzeug umstellen.") - required_current, submode, tmp_message, phases = charge_template.bidi_charging( - self.data.get.soc, - self.ev_template, - control_parameter.phases, - imported_since_plugged, - max_phases_hw, - phase_switch_supported, - charging_type, - chargemode_switch_timestamp, - control_parameter, - imported_since_plugged, - self.soc_module.general_config.request_interval_charging, - bidi, - phases_in_use) else: tmp_message = None message = f"{message or ''} {tmp_message or ''}".strip() diff --git a/packages/helpermodules/abstract_plans.py b/packages/helpermodules/abstract_plans.py index a2dbc4a4fb..8052189401 100644 --- a/packages/helpermodules/abstract_plans.py +++ b/packages/helpermodules/abstract_plans.py @@ -77,6 +77,8 @@ class TimeframePlan(PlanBase): @dataclass class ScheduledChargingPlan(PlanBase): + bidi: bool = False + bidi_power: int = 1000 current: int = 14 dc_current: float = 145 et_active: bool = False From d405164dabf03bd8bfb1506b78debe362330b39f Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 14 Aug 2025 11:06:42 +0200 Subject: [PATCH 69/73] bidi in scheduled charging --- packages/control/algorithm/chargemodes.py | 10 ++--- packages/control/chargepoint/chargepoint.py | 42 ++++++++++++--------- packages/helpermodules/setdata.py | 3 +- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/packages/control/algorithm/chargemodes.py b/packages/control/algorithm/chargemodes.py index 4628180f2d..0ebfa07cf3 100644 --- a/packages/control/algorithm/chargemodes.py +++ b/packages/control/algorithm/chargemodes.py @@ -24,10 +24,10 @@ (None, Chargemode.STOP, True), (None, Chargemode.STOP, False)) -CONSIDERED_CHARGE_MODES_SURPLUS = CHARGEMODES[0:4] + CHARGEMODES[8:20] -CONSIDERED_CHARGE_MODES_PV_ONLY = CHARGEMODES[12:20] -CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:12] +CONSIDERED_CHARGE_MODES_SURPLUS = CHARGEMODES[0:2] + CHARGEMODES[6:16] +CONSIDERED_CHARGE_MODES_PV_ONLY = CHARGEMODES[10:16] +CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:10] CONSIDERED_CHARGE_MODES_MIN_CURRENT = CHARGEMODES[0:-4] -CONSIDERED_CHARGE_MODES_NO_CURRENT = CHARGEMODES[22:24] -CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE = CHARGEMODES[20:22] +CONSIDERED_CHARGE_MODES_NO_CURRENT = CHARGEMODES[18:20] +CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE = CHARGEMODES[16:18] CONSIDERED_CHARGE_MODES_CHARGING = CHARGEMODES[0:16] diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index aac7b441c4..385ae5033c 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -248,7 +248,7 @@ def setup_values_at_start(self): self._reset_values_at_start() self._set_values_at_start() - def set_control_parameter(self, submode: str, required_current: float): + def set_control_parameter(self, submode: str): """ setzt die Regel-Parameter, die der Algorithmus verwendet. Parameter @@ -264,7 +264,6 @@ def set_control_parameter(self, submode: str, required_current: float): self.data.control_parameter.chargemode = Chargemode( self.data.set.charge_template.data.chargemode.selected) self.data.control_parameter.prio = self.data.set.charge_template.data.prio - self.data.control_parameter.required_current = required_current if self.template.data.charging_type == ChargingType.AC.value: self.data.control_parameter.min_current = self.data.set.charging_ev_data.ev_template.data.min_current else: @@ -582,32 +581,39 @@ def set_phases(self, phases: int) -> int: self.data.control_parameter.phases = phases return phases - def check_cp_min_max_current(self, required_current: float, phases: int) -> float: + def check_cp_max_current(self, required_current: float, phases: int) -> float: + sign = 1 if required_current >= 0 else -1 + abs_current = abs(required_current) if self.template.data.charging_type == ChargingType.AC.value: if phases == 1: - required_current = min(required_current, self.template.data.max_current_single_phase) + abs_current = min(abs_current, self.template.data.max_current_single_phase) else: - required_current = min(required_current, self.template.data.max_current_multi_phases) + abs_current = min(abs_current, self.template.data.max_current_multi_phases) else: - required_current = min(required_current, self.template.data.dc_max_current) - return required_current + abs_current = min(abs_current, self.template.data.dc_max_current) + return sign * abs_current def check_min_max_current(self, required_current: float, phases: int) -> float: required_current_prev = required_current msg = None - if (self.data.control_parameter.chargemode == Chargemode.BIDI_CHARGING and - self.data.control_parameter.submode == Chargemode.BIDI_CHARGING): + if self.data.control_parameter.submode == Chargemode.BIDI_CHARGING: if required_current < 0: - required_current = max(self.data.get.max_discharge_power / phases / 230, required_current) + if self.data.get.max_discharge_power / phases / 230 > required_current: + required_current = self.data.get.max_discharge_power / phases / 230 + msg = f"Die vom Auto übertragene Entladeleistung begrenzt den Strom auf " \ + f"maximal {round(required_current, 2)} A." else: - required_current = min(self.data.get.max_charge_power / phases / 230, required_current) - required_current = self.check_cp_min_max_current(abs(required_current), phases) * -1 + if self.data.get.max_charge_power / phases / 230 < required_current: + required_current = self.data.get.max_charge_power / phases / 230 + msg = f"Die vom Auto übertragene Ladeleistung begrenzt den Strom auf " \ + f"maximal {round(required_current, 2)} A." + required_current = self.check_cp_max_current(required_current, phases) else: required_current, msg = self.data.set.charging_ev_data.check_min_max_current( required_current, phases, self.template.data.charging_type) - required_current = self.check_cp_min_max_current(required_current, phases) + required_current = self.check_cp_max_current(required_current, phases) if required_current != required_current_prev and msg is None: msg = ("Die Einstellungen in dem Ladepunkt-Profil beschränken den Strom auf " f"maximal {round(required_current, 2)} A.") @@ -615,6 +621,7 @@ def check_min_max_current(self, required_current: float, phases: int) -> float: return required_current def set_required_currents(self, required_current: float) -> None: + self.data.control_parameter.required_current = required_current control_parameter = self.data.control_parameter try: for i in range(0, control_parameter.phases): @@ -694,13 +701,12 @@ def update(self, ev_list: Dict[str, Ev]) -> None: phases = self.set_phases(phases) self._pub_connected_vehicle(charging_ev) required_current = self.chargepoint_module.add_conversion_loss_to_current(required_current) - # Einhaltung des Minimal- und Maximalstroms prüfen - required_current = self.check_min_max_current( - required_current, self.data.control_parameter.phases) - required_current = self.chargepoint_module.add_conversion_loss_to_current(required_current) self.set_chargemode_changed(submode) self.set_submode_changed(submode) - self.set_control_parameter(submode, required_current) + self.set_control_parameter(submode) + # Einhaltung des Minimal- und Maximalstroms prüfen + required_current = self.check_min_max_current(required_current, self.data.control_parameter.phases) + required_current = self.chargepoint_module.add_conversion_loss_to_current(required_current) self.set_required_currents(required_current) self.check_phase_switch_completed() diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 2a454351fc..10dc200d4e 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -532,11 +532,12 @@ def process_chargepoint_get_topics(self, msg): "/get/charging_power" in msg.topic or "/get/charging_voltage" in msg.topic or "/get/max_charge_power" in msg.topic or - "/get/max_discharge_power" in msg.topic or "/get/imported" in msg.topic or "/get/exported" in msg.topic or "/get/soc_timestamp" in msg.topic): self._validate_value(msg, float, [(0, float("inf"))]) + elif "/get/max_discharge_power" in msg.topic: + self._validate_value(msg, float, [(float("-inf"), 0)]) elif "/get/power" in msg.topic: self._validate_value(msg, float) elif "/get/phases_in_use" in msg.topic: From 3dbb0b157c0f0f2596f327812fc5f2a78cf0bc11 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 14 Aug 2025 12:30:17 +0200 Subject: [PATCH 70/73] fixes --- .../integration_test/bidi_charging_test.py | 7 +- packages/control/counter.py | 8 +- packages/control/ev/charge_template.py | 19 +---- packages/control/ev/charge_template_test.py | 83 +++++++------------ packages/helpermodules/abstract_plans.py | 2 +- packages/helpermodules/update_config.py | 52 ++++++------ 6 files changed, 73 insertions(+), 98 deletions(-) diff --git a/packages/control/algorithm/integration_test/bidi_charging_test.py b/packages/control/algorithm/integration_test/bidi_charging_test.py index 251be286a8..0a065ac734 100644 --- a/packages/control/algorithm/integration_test/bidi_charging_test.py +++ b/packages/control/algorithm/integration_test/bidi_charging_test.py @@ -1,4 +1,6 @@ import pytest +from unittest.mock import Mock + from control import data from control.algorithm.algorithm import Algorithm from control.chargemode import Chargemode @@ -16,7 +18,7 @@ def _setup(*cps): control_parameter.phases = 3 control_parameter.required_currents = [16]*3 control_parameter.required_current = 16 - control_parameter.chargemode = Chargemode.BIDI_CHARGING + control_parameter.chargemode = Chargemode.SCHEDULED_CHARGING control_parameter.submode = Chargemode.BIDI_CHARGING return _setup @@ -28,6 +30,9 @@ def test_cp3_bidi(grid_power: float, expected_current: float, bidi_cps, all_cp_n # setup bidi_cps("cp3") data.data.counter_data["counter0"].data.get.power = grid_power + return_mock = Mock(reurn_value=True) + monkeypatch.setattr( + data.data.cp_data["cp3"].data.set.charging_ev_data.charge_template, "bidi_charging_allowed", return_mock) # execution Algorithm().calc_current() diff --git a/packages/control/counter.py b/packages/control/counter.py index 7348d572ce..d82b106be1 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -7,6 +7,8 @@ from typing import List, Optional, Tuple from control import data +from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE +from control.algorithm.filter_chargepoints import get_chargepoints_by_chargemodes from control.algorithm.utils import get_medium_charging_current from control.chargemode import Chargemode from control.ev.ev import Ev @@ -523,5 +525,9 @@ def set_raw_surplus_power_left() -> None: beim Bidi-Laden den Regelmodus rausrechnen, da sonst zum Regelmodus und nicht zum Nullpunkt geregelt wird. """ grid_counter = data.data.counter_all_data.get_evu_counter() - grid_counter.data.set.surplus_power_left = grid_counter.data.get.power * -1 + bidi_power = 0 + chargepoint_by_chargemodes = get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE) + for cp in chargepoint_by_chargemodes: + bidi_power += cp.data.get.power + grid_counter.data.set.surplus_power_left = grid_counter.data.get.power * -1 + bidi_power log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index df04317bd4..e8ad432daf 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -1,4 +1,3 @@ -import copy from dataclasses import asdict, dataclass, field import datetime import logging @@ -10,9 +9,8 @@ from control.chargepoint.charging_type import ChargingType from control.chargepoint.control_parameter import ControlParameter from control.ev.ev_template import EvTemplate -from control.text import BidiState from dataclass_utils.factories import empty_list_factory -from helpermodules.abstract_plans import Limit, ScheduledLimit, limit_factory, ScheduledChargingPlan, TimeChargingPlan +from helpermodules.abstract_plans import Limit, limit_factory, ScheduledChargingPlan, TimeChargingPlan from helpermodules import timecheck log = logging.getLogger(__name__) @@ -44,16 +42,6 @@ def scheduled_charging_plan_factory() -> ScheduledChargingPlan: return ScheduledChargingPlan() -def bidi_charging_plan_factory() -> ScheduledChargingPlan: - return ScheduledChargingPlan(name="Bidi-Plan", limit=ScheduledLimit(selected="soc")) - - -@dataclass -class BidiCharging: - plan: ScheduledChargingPlan = field(default_factory=bidi_charging_plan_factory) - power: int = 9000 - - @dataclass class EcoCharging: current: int = 6 @@ -100,14 +88,9 @@ def instant_charging_factory() -> InstantCharging: return InstantCharging() -def bidi_charging_factory() -> BidiCharging: - return BidiCharging() - - @dataclass class Chargemode: selected: str = "instant_charging" - bidi_charging: BidiCharging = field(default_factory=bidi_charging_factory) eco_charging: EcoCharging = field(default_factory=eco_charging_factory) pv_charging: PvCharging = field(default_factory=pv_charging_factory) scheduled_charging: ScheduledCharging = field(default_factory=scheduled_charging_factory) diff --git a/packages/control/ev/charge_template_test.py b/packages/control/ev/charge_template_test.py index bd4f151386..a019094058 100644 --- a/packages/control/ev/charge_template_test.py +++ b/packages/control/ev/charge_template_test.py @@ -12,7 +12,6 @@ from control.ev.charge_template import ChargeTemplate from control.ev.ev_template import EvTemplate, EvTemplateData from control.general import General -from control.text import BidiState from helpermodules import timecheck from helpermodules.abstract_plans import Limit, ScheduledChargingPlan, TimeChargingPlan @@ -111,7 +110,11 @@ def test_instant_charging(selected: str, current_soc: float, used_amount: float, id="min current configured"), pytest.param(15, 0, None, 15, 900, (6, "pv_charging", None, 0), id="bare pv charging"), ]) -def test_pv_charging(min_soc: int, min_current: int, limit_selected: str, current_soc: float, used_amount: float, +def test_pv_charging(min_soc: int, + min_current: int, + limit_selected: str, + current_soc: float, + used_amount: float, expected: Tuple[int, str, Optional[str], int]): # setup ct = ChargeTemplate() @@ -154,7 +157,7 @@ def test_calc_remaining_time(phases_to_use, # execution remaining_time, missing_amount, phases, duration = ct._calc_remaining_time( - plan, 6000, 50, evt, 3000, max_hw_phases, phase_switch_supported, ChargingType.AC.value, 2, 0) + plan, 6000, 50, evt, 3000, max_hw_phases, phase_switch_supported, ChargingType.AC.value, 2, 0, False) # end time 16.5.22 10:00 # evaluation @@ -162,18 +165,24 @@ def test_calc_remaining_time(phases_to_use, @pytest.mark.parametrize( - "selected, phases, expected_duration, expected_missing_amount", + "selected, phases, hw_bidi, expected_duration, expected_missing_amount", [ - pytest.param("soc", 1, 10062.111801242236, 9000, id="soc, one phase"), - pytest.param("amount", 2, 447.2049689440994, 800, id="amount, two phases"), + pytest.param("soc", 1, False, 10062.111801242236, 9000, id="soc, one phase"), + pytest.param("amount", 2, False, 447.2049689440994, 800, id="amount, two phases"), + pytest.param("soc", 2, True, 32400, 9000, id="bidi"), ]) -def test_calculate_duration(selected: str, phases: int, expected_duration: float, expected_missing_amount: float): +def test_calculate_duration(selected: str, + phases: int, + hw_bidi: bool, + expected_duration: float, + expected_missing_amount: float): # setup ct = ChargeTemplate() plan = ScheduledChargingPlan() plan.limit.selected = selected # execution - duration, missing_amount = ct._calculate_duration(plan, 60, 45000, 200, phases, ChargingType.AC.value, EvTemplate()) + duration, missing_amount = ct._calculate_duration( + plan, 60, 45000, 200, phases, ChargingType.AC.value, EvTemplate(), hw_bidi) # evaluation assert duration == expected_duration @@ -206,7 +215,7 @@ def test_scheduled_charging_recent_plan(end_time_mock, # execution selected_plan = ct._find_recent_plan( - plans, 60, EvTemplate(), 3, 200, 3, True, ChargingType.AC.value, 1652688000, control_parameter, 0) + plans, 60, EvTemplate(), 200, 3, True, ChargingType.AC.value, 1652688000, control_parameter, 0, False) # evaluation if selected_plan: @@ -216,45 +225,49 @@ def test_scheduled_charging_recent_plan(end_time_mock, @pytest.mark.parametrize( - "plan_data, soc, used_amount, selected, expected", + "plan_data, soc, used_amount, selected, hw_bidi, expected", [ - pytest.param(None, 0, 0, "none", (0, "stop", + pytest.param(None, 0, 0, "none", False, (0, "stop", ChargeTemplate.SCHEDULED_CHARGING_NO_DATE_PENDING, 3), id="no date pending"), - pytest.param(SelectedPlan(duration=3600), 90, 0, "soc", (0, "stop", + pytest.param(SelectedPlan(duration=3600), 90, 0, "soc", False, (0, "stop", ChargeTemplate.SCHEDULED_CHARGING_REACHED_LIMIT_SOC, 1), id="reached limit soc"), - pytest.param(SelectedPlan(duration=3600), 80, 0, "soc", (6, "pv_charging", + pytest.param(SelectedPlan(duration=3600), 80, 0, "soc", False, (6, "pv_charging", ChargeTemplate.SCHEDULED_CHARGING_REACHED_SCHEDULED_SOC, 0), id="reached scheduled soc"), - pytest.param(SelectedPlan(phases=3, duration=3600), 0, 1000, "amount", (0, "stop", + pytest.param(SelectedPlan(duration=3600), 80, 0, "soc", True, (6, "bidi_charging", + ChargeTemplate.SCHEDULED_CHARGING_BIDI, 3), id="reached scheduled soc, bidi"), + pytest.param(SelectedPlan(phases=3, duration=3600), 0, 1000, "amount", False, (0, "stop", ChargeTemplate.SCHEDULED_CHARGING_REACHED_AMOUNT, 3), id="reached amount"), pytest.param(SelectedPlan(remaining_time=299, duration=3600), 0, 999, "amount", - (14, "instant_charging", ChargeTemplate.SCHEDULED_CHARGING_IN_TIME.format( + False, (14, "instant_charging", ChargeTemplate.SCHEDULED_CHARGING_IN_TIME.format( 14, ChargeTemplate.SCHEDULED_CHARGING_LIMITED_BY_AMOUNT.format(1.0), "07:00"), 1), id="in time, limited by amount"), pytest.param(SelectedPlan(remaining_time=299, duration=3600), 79, 0, "soc", - (14, "instant_charging", ChargeTemplate.SCHEDULED_CHARGING_IN_TIME.format( + False, (14, "instant_charging", ChargeTemplate.SCHEDULED_CHARGING_IN_TIME.format( 14, ChargeTemplate.SCHEDULED_CHARGING_LIMITED_BY_SOC.format(80), "07:00"), 1), id="in time, limited by soc"), pytest.param(SelectedPlan(remaining_time=-500, duration=3600, missing_amount=9000, phases=3), 79, 0, "soc", - (15.147265077138847, "instant_charging", + False, (15.147265077138847, "instant_charging", ChargeTemplate.SCHEDULED_CHARGING_MAX_CURRENT.format(15.15), 3), id="too late, but didn't miss for today"), pytest.param(SelectedPlan(remaining_time=-800, duration=780, missing_amount=4600, phases=3), 79, 0, "soc", - (16, "instant_charging", + False, (16, "instant_charging", ChargeTemplate.SCHEDULED_CHARGING_MAX_CURRENT.format(16), 3), id="few minutes too late, but didn't miss for today"), pytest.param(SelectedPlan(remaining_time=301, duration=3600), 79, 0, "soc", - (6, "pv_charging", ChargeTemplate.SCHEDULED_CHARGING_USE_PV.format("um 8:45 Uhr"), 0), + False, (6, "pv_charging", ChargeTemplate.SCHEDULED_CHARGING_USE_PV.format("um 8:45 Uhr"), 0), id="too early, use pv"), ]) def test_scheduled_charging_calc_current(plan_data: SelectedPlan, soc: int, used_amount: float, selected: str, + hw_bidi: bool, expected: Tuple[float, str, str, int]): # setup ct = ChargeTemplate() plan = ScheduledChargingPlan(active=True, id=0) plan.limit.selected = selected + plan.bidi = hw_bidi # json verwandelt Keys in strings ct.data.chargemode.scheduled_charging.plans = [plan] if plan_data: @@ -306,35 +319,3 @@ def test_scheduled_charging_calc_current_electricity_tariff(loading_hour, expect # evaluation assert ret == expected - - -@pytest.mark.parametrize( - "bidi,soc,soc_scheduled,expected_submode,expected_current", - [ - (BidiState.EV_NOT_BIDI_CAPABLE, 50.0, 80.0, "instant_charging", 16), - (BidiState.BIDI_CAPABLE, 100.0, 80.0, "bidi_charging", 6), - (BidiState.BIDI_CAPABLE, 50.0, 80.0, "instant_charging", 16), - ] -) -def test_bidi_charging_cases(bidi, soc, soc_scheduled, expected_submode, expected_current): - ct = ChargeTemplate() - ev_template = EvTemplate() - phases = 3 - used_amount = 0.0 - max_hw_phases = 3 - phase_switch_supported = True - charging_type = "AC" - chargemode_switch_timestamp = 0.0 - control_parameter = ControlParameter() - imported_since_plugged = 0.0 - soc_request_interval_offset = 0.0 - phases_in_use = 3 - ct.data.chargemode.bidi_charging.plan.limit.soc_scheduled = soc_scheduled - - current, submode, message, phases_out = ct.bidi_charging( - soc, ev_template, phases, used_amount, max_hw_phases, phase_switch_supported, - charging_type, chargemode_switch_timestamp, control_parameter, imported_since_plugged, - soc_request_interval_offset, bidi, phases_in_use - ) - assert submode == expected_submode - assert current == expected_current diff --git a/packages/helpermodules/abstract_plans.py b/packages/helpermodules/abstract_plans.py index 8052189401..f56763ae03 100644 --- a/packages/helpermodules/abstract_plans.py +++ b/packages/helpermodules/abstract_plans.py @@ -78,7 +78,7 @@ class TimeframePlan(PlanBase): @dataclass class ScheduledChargingPlan(PlanBase): bidi: bool = False - bidi_power: int = 1000 + bidi_power: int = 10000 current: int = 14 dc_current: float = 145 et_active: bool = False diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index e4d9b84aa6..2a16fd7612 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -37,7 +37,7 @@ from control.bat_all import BatConsiderationMode from control.chargepoint.charging_type import ChargingType from control.counter import get_counter_default_config -from control.ev.charge_template import EcoCharging, get_charge_template_default, BidiCharging +from control.ev.charge_template import EcoCharging, get_charge_template_default from control.ev import ev from control.ev.ev_template import EvTemplateData from control.general import ChargemodeConfig, Prices @@ -2303,22 +2303,6 @@ def cp_upgrade(topic: str, payload) -> Optional[dict]: self.__update_topic("openWB/system/datastore_version", 85) def upgrade_datastore_85(self) -> None: - def upgrade(topic: str, payload) -> Optional[dict]: - if re.search("openWB/vehicle/template/ev_template/[0-9]+$", topic) is not None: - payload = decode_payload(payload) - if "bidi" not in payload: - payload.update({"bidi": False}) - return {topic: payload} - elif re.search("openWB/vehicle/template/charge_template/[0-9]+$", topic) is not None: - payload = decode_payload(payload) - if "bidi_charging" not in payload["chargemode"]: - payload.pop("bidi_charging") - payload["chargemode"].update({"bidi_charging": asdict(BidiCharging())}) - return {topic: payload} - self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 86) - - def upgrade_datastore_86(self) -> None: def upgrade(topic: str, payload) -> None: if re.search("openWB/system/device/[0-9]+", topic) is not None: payload = decode_payload(payload) @@ -2335,9 +2319,9 @@ def upgrade(topic: str, payload) -> None: }) return {component_topic: config_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 87) + self.__update_topic("openWB/system/datastore_version", 86) - def upgrade_datastore_87(self) -> None: + def upgrade_datastore_86(self) -> None: if "openWB/bat/config/bat_control_permitted" not in self.all_received_topics.keys(): self.__update_topic("openWB/bat/config/bat_control_permitted", False) if decode_payload(self.all_received_topics["openWB/bat/get/power_limit_controllable"]) is True: @@ -2347,7 +2331,7 @@ def upgrade_datastore_87(self) -> None: " jedoch bis zum Akzeptieren standardmäßig deaktiviert.", MessageType.WARNING) self.__update_topic("openWB/system/datastore_version", 87) - def upgrade_datastore_88(self) -> None: + def upgrade_datastore_87(self) -> None: def upgrade(topic: str, payload) -> None: if (re.search("openWB/vehicle/template/charge_template/[0-9]+", topic) is not None or re.search("openWB/vehicle/template/ev_template/[0-9]+", topic) is not None): @@ -2356,9 +2340,9 @@ def upgrade(topic: str, payload) -> None: payload.update({"id": index}) Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 89) + self.__update_topic("openWB/system/datastore_version", 88) - def upgrade_datastore_89(self) -> None: + def upgrade_datastore_88(self) -> None: pub_system_message({}, "Änderungen, die du auf der Hauptseite vornimmst, gelten nur vorübergehend, bis das " "Fahrzeug abgesteckt wird. \nDie dauerhaften Einstellungen aus dem Einstellungsmenü werden " "danach automatisch wieder aktiviert.", MessageType.INFO) @@ -2366,7 +2350,7 @@ def upgrade_datastore_89(self) -> None: "Energiefluss-Diagramm & Karten-Ansicht der Ladepunkte", MessageType.INFO) self.__update_topic("openWB/system/datastore_version", 89) - def upgrade_datastore_90(self) -> None: + def upgrade_datastore_89(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: if re.search("^openWB/io/action/[0-9]+/config$", topic) is not None: payload = decode_payload(payload) @@ -2386,9 +2370,9 @@ def upgrade(topic: str, payload) -> Optional[dict]: log.debug(f"Updated IO action configuration: {topic}: {payload}") return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 91) + self.__update_topic("openWB/system/datastore_version", 90) - def upgrade_datastore_91(self) -> None: + def upgrade_datastore_90(self) -> None: def upgrade(topic: str, payload) -> None: if re.search("openWB/chargepoint/[0-9]+/config", topic) is not None: config = decode_payload(payload) @@ -2411,4 +2395,20 @@ def upgrade(topic: str, payload) -> None: no_json=True) time.sleep(2) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 92) + self.__update_topic("openWB/system/datastore_version", 91) + + def upgrade_datastore_91(self) -> None: + def upgrade(topic: str, payload) -> Optional[dict]: + if re.search("openWB/vehicle/template/ev_template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + if "bidi" not in payload: + payload.update({"bidi": False}) + return {topic: payload} + elif re.search("openWB/vehicle/template/charge_template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + for plan in payload["chargemode"]["scheduled_charging"]["plans"]: + if "bidi" not in plan: + plan.update({"bidi": False, "bidi_power": 10000}) + return {topic: payload} + self._loop_all_received_topics(upgrade) + # self.__update_topic("openWB/system/datastore_version", 92) From 49cc440b30cb9ab9732061c523e7422a3a43ce30 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 14 Aug 2025 12:52:31 +0200 Subject: [PATCH 71/73] fixes --- packages/control/ev/charge_template.py | 63 ++++++++++++++----------- packages/control/ev/ev.py | 2 +- packages/control/text.py | 2 +- packages/helpermodules/update_config.py | 2 +- 4 files changed, 39 insertions(+), 30 deletions(-) diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index e8ad432daf..135f0f961a 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -9,6 +9,7 @@ from control.chargepoint.charging_type import ChargingType from control.chargepoint.control_parameter import ControlParameter from control.ev.ev_template import EvTemplate +from control.text import BidiState from dataclass_utils.factories import empty_list_factory from helpermodules.abstract_plans import Limit, limit_factory, ScheduledChargingPlan, TimeChargingPlan from helpermodules import timecheck @@ -377,8 +378,8 @@ def scheduled_charging(self, chargemode_switch_timestamp: float, control_parameter: ControlParameter, soc_request_interval_offset: int, - hw_bidi: bool) -> Optional[SelectedPlan]: - if hw_bidi and soc is None: + bidi_state: BidiState) -> Optional[SelectedPlan]: + if bidi_state == BidiState.BIDI_CAPABLE and soc is None: raise Exception("Für den Lademodis Bidi ist zwingend ein SoC-Modul erforderlich. Soll der " "SoC ausschließlich aus dem Fahrzeug ausgelesen werden, bitte auf " "manuellen SoC mit Auslesung aus dem Fahrzeug umstellen.") @@ -392,7 +393,7 @@ def scheduled_charging(self, chargemode_switch_timestamp, control_parameter, soc_request_interval_offset, - hw_bidi) + bidi_state) if plan_data: control_parameter.current_plan = plan_data.plan.id else: @@ -405,7 +406,8 @@ def scheduled_charging(self, control_parameter.min_current, soc_request_interval_offset, charging_type, - ev_template) + ev_template, + bidi_state) def _calc_remaining_time(self, plan: ScheduledChargingPlan, @@ -418,29 +420,31 @@ def _calc_remaining_time(self, charging_type: str, control_parameter_phases: int, soc_request_interval_offset: int, - hw_bidi: bool) -> SelectedPlan: - if hw_bidi: + bidi_state: BidiState) -> SelectedPlan: + if bidi_state: duration, missing_amount = self._calculate_duration( plan, soc, ev_template.data.battery_capacity, - used_amount, control_parameter_phases, charging_type, ev_template, hw_bidi) + used_amount, control_parameter_phases, charging_type, ev_template, bidi_state) + remaining_time = plan_end_time - duration + phases = control_parameter_phases elif plan.phases_to_use == 0: if max_hw_phases == 1: duration, missing_amount = self._calculate_duration( - plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template, hw_bidi) + plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template, bidi_state) remaining_time = plan_end_time - duration phases = 1 elif phase_switch_supported is False: duration, missing_amount = self._calculate_duration( plan, soc, ev_template.data.battery_capacity, used_amount, control_parameter_phases, - charging_type, ev_template, hw_bidi) + charging_type, ev_template, bidi_state) phases = control_parameter_phases remaining_time = plan_end_time - duration else: duration_3p, missing_amount = self._calculate_duration( - plan, soc, ev_template.data.battery_capacity, used_amount, 3, charging_type, ev_template, hw_bidi) + plan, soc, ev_template.data.battery_capacity, used_amount, 3, charging_type, ev_template, bidi_state) remaining_time_3p = plan_end_time - duration_3p duration_1p, missing_amount = self._calculate_duration( - plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template, hw_bidi) + plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template, bidi_state) remaining_time_1p = plan_end_time - duration_1p # Kurz vor dem nächsten Abfragen des SoC, wenn noch der alte SoC da ist, kann es sein, dass die Zeit # für 1p nicht mehr reicht, weil die Regelung den neuen SoC noch nicht kennt. @@ -457,7 +461,7 @@ def _calc_remaining_time(self, elif plan.phases_to_use == 3 or plan.phases_to_use == 1: duration, missing_amount = self._calculate_duration( plan, soc, ev_template.data.battery_capacity, - used_amount, plan.phases_to_use, charging_type, ev_template, hw_bidi) + used_amount, plan.phases_to_use, charging_type, ev_template, bidi_state) remaining_time = plan_end_time - duration phases = plan.phases_to_use @@ -472,7 +476,7 @@ def _calculate_duration(self, phases: int, charging_type: str, ev_template: EvTemplate, - hw_bidi: bool) -> Tuple[float, float]: + bidi_state: BidiState) -> Tuple[float, float]: if plan.limit.selected == "soc": if soc is not None: @@ -481,8 +485,11 @@ def _calculate_duration(self, raise ValueError("Um Zielladen mit SoC-Ziel nutzen zu können, bitte ein SoC-Modul konfigurieren.") else: missing_amount = plan.limit.amount - used_amount - if hw_bidi: + if bidi_state == BidiState.BIDI_CAPABLE: duration = missing_amount/plan.bidi_power * 3600 + if phases == 0: + # nehme an, dass bei Bidi immer 3 Phasen geladen werden, bis die Phasenzahl ermittelt wurde + phases = 3 else: current = plan.current if charging_type == ChargingType.AC.value else plan.dc_current current = max(current, ev_template.data.min_current if charging_type == @@ -492,27 +499,26 @@ def _calculate_duration(self, SCHEDULED_REACHED_LIMIT_SOC = ("Kein Zielladen, da noch Zeit bis zum Zieltermin ist. " "Kein Zielladen mit Überschuss, da das SoC-Limit für Überschuss-Laden " + - "erreicht wurde.") + "erreicht wurde. ") SCHEDULED_CHARGING_REACHED_LIMIT_SOC = ("Kein Zielladen, da das Limit für Fahrzeug Laden mit Überschuss (SoC-Limit)" - " sowie der Fahrzeug-SoC (Ziel-SoC) bereits erreicht wurde.") - SCHEDULED_CHARGING_REACHED_AMOUNT = "Kein Zielladen, da die Energiemenge bereits erreicht wurde." + " sowie der Fahrzeug-SoC (Ziel-SoC) bereits erreicht wurde. ") + SCHEDULED_CHARGING_REACHED_AMOUNT = "Kein Zielladen, da die Energiemenge bereits erreicht wurde. " SCHEDULED_CHARGING_REACHED_SCHEDULED_SOC = ("Falls vorhanden wird mit EVU-Überschuss geladen, da der Ziel-Soc " - "für Zielladen bereits erreicht wurde.") + "für Zielladen bereits erreicht wurde. ") SCHEDULED_CHARGING_BIDI = ("Der Ziel-Soc für Zielladen wurde bereits erreicht. Das Auto wird " "bidirektional ge-/entladen, sodass möglichst weder Bezug noch " - "Einspeisung erfolgt.") + "Einspeisung erfolgt. ") SCHEDULED_CHARGING_NO_PLANS_CONFIGURED = "Keine Ladung, da keine Ziel-Termine konfiguriert sind." - SCHEDULED_CHARGING_NO_DATE_PENDING = "Kein Zielladen, da kein Ziel-Termin ansteht." - SCHEDULED_CHARGING_USE_PV = ("Laden startet {}. Falls vorhanden, " - "wird mit Überschuss geladen.") - SCHEDULED_CHARGING_MAX_CURRENT = "Zielladen mit {}A. Der Ladestrom wurde erhöht, um das Ziel zu erreichen." + SCHEDULED_CHARGING_NO_DATE_PENDING = "Kein Zielladen, da kein Ziel-Termin ansteht. " + SCHEDULED_CHARGING_USE_PV = "Laden startet {}. Falls vorhanden, wird mit Überschuss geladen. " + SCHEDULED_CHARGING_MAX_CURRENT = "Zielladen mit {}A. Der Ladestrom wurde erhöht, um das Ziel zu erreichen. " SCHEDULED_CHARGING_LIMITED_BY_SOC = 'einen SoC von {}%' SCHEDULED_CHARGING_LIMITED_BY_AMOUNT = '{}kWh geladene Energie' SCHEDULED_CHARGING_IN_TIME = ('Zielladen mit mindestens {}A, um {} um {} zu erreichen. Falls vorhanden wird ' - 'zusätzlich EVU-Überschuss geladen.') + 'zusätzlich EVU-Überschuss geladen. ') SCHEDULED_CHARGING_CHEAP_HOUR = "Zielladen, da ein günstiger Zeitpunkt zum preisbasierten Laden ist. {}" SCHEDULED_CHARGING_EXPENSIVE_HOUR = ("Zielladen ausstehend, da jetzt kein günstiger Zeitpunkt zum preisbasierten " - "Laden ist. {} Falls vorhanden, wird mit Überschuss geladen.") + "Laden ist. {} Falls vorhanden, wird mit Überschuss geladen. ") def scheduled_charging_calc_current(self, selected_plan: Optional[SelectedPlan], @@ -522,7 +528,8 @@ def scheduled_charging_calc_current(self, min_current: int, soc_request_interval_offset: int, charging_type: str, - ev_template: EvTemplate) -> Tuple[float, str, str, int]: + ev_template: EvTemplate, + bidi_state: BidiState) -> Tuple[float, str, str, int]: current = 0 submode = "stop" if selected_plan is None: @@ -545,13 +552,15 @@ def scheduled_charging_calc_current(self, if limit.selected == "soc" and soc >= limit.soc_limit and soc >= limit.soc_scheduled: message = self.SCHEDULED_CHARGING_REACHED_LIMIT_SOC elif limit.selected == "soc" and limit.soc_scheduled <= soc < limit.soc_limit: - if plan.bidi: + if plan.bidi and bidi_state == BidiState.BIDI_CAPABLE: message = self.SCHEDULED_CHARGING_BIDI current = min_current submode = "bidi_charging" phases = control_parameter_phases else: message = self.SCHEDULED_CHARGING_REACHED_SCHEDULED_SOC + if plan.bidi and bidi_state != BidiState.BIDI_CAPABLE: + message += bidi_state.value current = min_current submode = "pv_charging" # bei Überschuss-Laden mit der Phasenzahl aus den control_parameter laden, diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index dea82c133c..989179b51c 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -169,7 +169,7 @@ def get_required_current(self, chargemode_switch_timestamp, control_parameter, soc_request_interval_offset, - bidi != BidiState.BIDI_CAPABLE) + bidi) message = f"{tmp_message or ''}".strip() # Wenn Zielladen auf Überschuss wartet, prüfen, ob Zeitladen aktiv ist. diff --git a/packages/control/text.py b/packages/control/text.py index a83341a1c4..290893882f 100644 --- a/packages/control/text.py +++ b/packages/control/text.py @@ -4,5 +4,5 @@ class BidiState(Enum): BIDI_CAPABLE = "" CP_NOT_BIDI_CAPABLE = "Bidirektionales Laden ist nur mit einer openWB Pro oder Pro+ möglich. " - CP_WRONG_PROTOCOL = "Bitte in den Einstellungen der openWB Pro/Pro+ die Charging Version auf 'Bidi' stellen. " + CP_WRONG_PROTOCOL = "Bitte in den Einstellungen der openWB Pro/Pro+ die Charging Version auf 'HLC' stellen. " EV_NOT_BIDI_CAPABLE = "Das Fahrzeug unterstützt kein bidirektionales Laden. " diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 2a16fd7612..7d07a43281 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2411,4 +2411,4 @@ def upgrade(topic: str, payload) -> Optional[dict]: plan.update({"bidi": False, "bidi_power": 10000}) return {topic: payload} self._loop_all_received_topics(upgrade) - # self.__update_topic("openWB/system/datastore_version", 92) + self.__update_topic("openWB/system/datastore_version", 92) From 659ca7f3fa26f3f48d4915e6e1175ff3d725f42a Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 14 Aug 2025 13:10:43 +0200 Subject: [PATCH 72/73] fix test --- packages/control/ev/charge_template.py | 25 ++++++++++---------- packages/control/ev/charge_template_test.py | 26 ++++++++++++--------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index 135f0f961a..9d84697072 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -421,30 +421,34 @@ def _calc_remaining_time(self, control_parameter_phases: int, soc_request_interval_offset: int, bidi_state: BidiState) -> SelectedPlan: - if bidi_state: + bidi = BidiState.BIDI_CAPABLE and plan.bidi + if bidi: duration, missing_amount = self._calculate_duration( plan, soc, ev_template.data.battery_capacity, - used_amount, control_parameter_phases, charging_type, ev_template, bidi_state) + used_amount, control_parameter_phases, charging_type, ev_template, bidi) remaining_time = plan_end_time - duration phases = control_parameter_phases elif plan.phases_to_use == 0: if max_hw_phases == 1: duration, missing_amount = self._calculate_duration( - plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template, bidi_state) + plan, soc, ev_template.data.battery_capacity, + used_amount, 1, charging_type, ev_template, bidi) remaining_time = plan_end_time - duration phases = 1 elif phase_switch_supported is False: duration, missing_amount = self._calculate_duration( plan, soc, ev_template.data.battery_capacity, used_amount, control_parameter_phases, - charging_type, ev_template, bidi_state) + charging_type, ev_template, bidi) phases = control_parameter_phases remaining_time = plan_end_time - duration else: duration_3p, missing_amount = self._calculate_duration( - plan, soc, ev_template.data.battery_capacity, used_amount, 3, charging_type, ev_template, bidi_state) + plan, soc, ev_template.data.battery_capacity, used_amount, 3, + charging_type, ev_template, bidi) remaining_time_3p = plan_end_time - duration_3p duration_1p, missing_amount = self._calculate_duration( - plan, soc, ev_template.data.battery_capacity, used_amount, 1, charging_type, ev_template, bidi_state) + plan, soc, ev_template.data.battery_capacity, used_amount, 1, + charging_type, ev_template, bidi) remaining_time_1p = plan_end_time - duration_1p # Kurz vor dem nächsten Abfragen des SoC, wenn noch der alte SoC da ist, kann es sein, dass die Zeit # für 1p nicht mehr reicht, weil die Regelung den neuen SoC noch nicht kennt. @@ -461,7 +465,7 @@ def _calc_remaining_time(self, elif plan.phases_to_use == 3 or plan.phases_to_use == 1: duration, missing_amount = self._calculate_duration( plan, soc, ev_template.data.battery_capacity, - used_amount, plan.phases_to_use, charging_type, ev_template, bidi_state) + used_amount, plan.phases_to_use, charging_type, ev_template, bidi) remaining_time = plan_end_time - duration phases = plan.phases_to_use @@ -476,7 +480,7 @@ def _calculate_duration(self, phases: int, charging_type: str, ev_template: EvTemplate, - bidi_state: BidiState) -> Tuple[float, float]: + bidi: bool) -> Tuple[float, float]: if plan.limit.selected == "soc": if soc is not None: @@ -485,11 +489,8 @@ def _calculate_duration(self, raise ValueError("Um Zielladen mit SoC-Ziel nutzen zu können, bitte ein SoC-Modul konfigurieren.") else: missing_amount = plan.limit.amount - used_amount - if bidi_state == BidiState.BIDI_CAPABLE: + if bidi: duration = missing_amount/plan.bidi_power * 3600 - if phases == 0: - # nehme an, dass bei Bidi immer 3 Phasen geladen werden, bis die Phasenzahl ermittelt wurde - phases = 3 else: current = plan.current if charging_type == ChargingType.AC.value else plan.dc_current current = max(current, ev_template.data.min_current if charging_type == diff --git a/packages/control/ev/charge_template_test.py b/packages/control/ev/charge_template_test.py index a019094058..a3a2998682 100644 --- a/packages/control/ev/charge_template_test.py +++ b/packages/control/ev/charge_template_test.py @@ -12,6 +12,7 @@ from control.ev.charge_template import ChargeTemplate from control.ev.ev_template import EvTemplate, EvTemplateData from control.general import General +from control.text import BidiState from helpermodules import timecheck from helpermodules.abstract_plans import Limit, ScheduledChargingPlan, TimeChargingPlan @@ -165,24 +166,24 @@ def test_calc_remaining_time(phases_to_use, @pytest.mark.parametrize( - "selected, phases, hw_bidi, expected_duration, expected_missing_amount", + "selected, phases, bidi, expected_duration, expected_missing_amount", [ pytest.param("soc", 1, False, 10062.111801242236, 9000, id="soc, one phase"), pytest.param("amount", 2, False, 447.2049689440994, 800, id="amount, two phases"), - pytest.param("soc", 2, True, 32400, 9000, id="bidi"), + pytest.param("soc", 2, True, 3240.0, 9000, id="bidi"), ]) def test_calculate_duration(selected: str, phases: int, - hw_bidi: bool, + bidi: bool, expected_duration: float, expected_missing_amount: float): # setup ct = ChargeTemplate() - plan = ScheduledChargingPlan() + plan = ScheduledChargingPlan(bidi=bidi) plan.limit.selected = selected # execution duration, missing_amount = ct._calculate_duration( - plan, 60, 45000, 200, phases, ChargingType.AC.value, EvTemplate(), hw_bidi) + plan, 60, 45000, 200, phases, ChargingType.AC.value, EvTemplate(), bidi) # evaluation assert duration == expected_duration @@ -225,7 +226,7 @@ def test_scheduled_charging_recent_plan(end_time_mock, @pytest.mark.parametrize( - "plan_data, soc, used_amount, selected, hw_bidi, expected", + "plan_data, soc, used_amount, selected, bidi, expected", [ pytest.param(None, 0, 0, "none", False, (0, "stop", ChargeTemplate.SCHEDULED_CHARGING_NO_DATE_PENDING, 3), id="no date pending"), @@ -261,20 +262,21 @@ def test_scheduled_charging_calc_current(plan_data: SelectedPlan, soc: int, used_amount: float, selected: str, - hw_bidi: bool, + bidi: bool, expected: Tuple[float, str, str, int]): # setup ct = ChargeTemplate() plan = ScheduledChargingPlan(active=True, id=0) plan.limit.selected = selected - plan.bidi = hw_bidi + plan.bidi = bidi # json verwandelt Keys in strings ct.data.chargemode.scheduled_charging.plans = [plan] if plan_data: plan_data.plan = plan # execution - ret = ct.scheduled_charging_calc_current(plan_data, soc, used_amount, 3, 6, 0, ChargingType.AC.value, EvTemplate()) + ret = ct.scheduled_charging_calc_current(plan_data, soc, used_amount, 3, 6, + 0, ChargingType.AC.value, EvTemplate(), BidiState.BIDI_CAPABLE) # evaluation assert ret == expected @@ -285,7 +287,8 @@ def test_scheduled_charging_calc_current_no_plans(): ct = ChargeTemplate() # execution - ret = ct.scheduled_charging_calc_current(None, 63, 5, 3, 6, 0, ChargingType.AC.value, EvTemplate()) + ret = ct.scheduled_charging_calc_current( + None, 63, 5, 3, 6, 0, ChargingType.AC.value, EvTemplate(), BidiState.BIDI_CAPABLE) # evaluation assert ret == (0, "stop", ChargeTemplate.SCHEDULED_CHARGING_NO_PLANS_CONFIGURED, 3) @@ -315,7 +318,8 @@ def test_scheduled_charging_calc_current_electricity_tariff(loading_hour, expect # execution ret = ct.scheduled_charging_calc_current(SelectedPlan( - plan=plan, remaining_time=301, phases=3, duration=3600), 79, 0, 3, 6, 0, ChargingType.AC.value, EvTemplate()) + plan=plan, remaining_time=301, phases=3, duration=3600), + 79, 0, 3, 6, 0, ChargingType.AC.value, EvTemplate(), BidiState.BIDI_CAPABLE) # evaluation assert ret == expected From 654f50eaac66064a7d0bbaf78907979361869e69 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 14 Aug 2025 13:16:38 +0200 Subject: [PATCH 73/73] unused code --- packages/modules/web_themes/standard_legacy/web/index.html | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/modules/web_themes/standard_legacy/web/index.html b/packages/modules/web_themes/standard_legacy/web/index.html index 04f7b2d621..b85e13f554 100644 --- a/packages/modules/web_themes/standard_legacy/web/index.html +++ b/packages/modules/web_themes/standard_legacy/web/index.html @@ -522,9 +522,6 @@ -