diff --git a/MANIFEST.in b/MANIFEST.in index 2a697a19..89c259b3 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -5,6 +5,7 @@ include requirements-pi.txt graft prusa/link/data graft prusa/link/templates graft prusa/link/static +graft prusa/link/static_cam graft image_builder global-exclude *~ global-exclude *.swp diff --git a/Prusa-Link-Web b/Prusa-Link-Web index f7fa76d8..68fb6d0a 160000 --- a/Prusa-Link-Web +++ b/Prusa-Link-Web @@ -1 +1 @@ -Subproject commit f7fa76d8aca68d78e68151b4ed4fe38de28ff2ca +Subproject commit 68fb6d0aca7fd56bb1f5390e253c8df287a320b1 diff --git a/image_builder/image_builder.py b/image_builder/image_builder.py index d4d5611c..736927a0 100644 --- a/image_builder/image_builder.py +++ b/image_builder/image_builder.py @@ -411,7 +411,7 @@ def build_image(): run_over_ssh("sudo apt-get install -y uuid") run_over_ssh("sudo apt-get install -y git python3-pip pigpio libcap-dev " "libmagic1 libturbojpeg0 libatlas-base-dev libffi-dev " - "cmake iptables python3-libcamera") + "cmake iptables python3-libcamera python3-gi") print("Installing PrusaLink") # Caution: not tied to requirements-pi.txt diff --git a/prusa/link/__main__.py b/prusa/link/__main__.py index 33a2dc0b..56e7f963 100644 --- a/prusa/link/__main__.py +++ b/prusa/link/__main__.py @@ -112,7 +112,8 @@ def main(): nargs='?', default="start", type=str, - help="daemon action (start|stop|restart|status) (default: start)") + help="daemon action (start|stop|restart|status|start_camera) " + "(default: start)") parser.add_argument("-f", "--foreground", action="store_true", @@ -217,13 +218,14 @@ def main(): print("Restarting service with pid", pid) stop(pid) - elif args.command == "start": + elif args.command in ("start", "start_camera"): pass elif not args.foreground: parser.error("Unknown command %s") return 1 - daemon = Daemon(config, argv) + daemon = Daemon(config, argv, + is_camera=args.command == "start_camera") if args.foreground: log.info("Starting service on foreground.") return daemon.run(False) diff --git a/prusa/link/config.py b/prusa/link/config.py index ff1dbc49..0c1135b8 100644 --- a/prusa/link/config.py +++ b/prusa/link/config.py @@ -309,7 +309,8 @@ def __init__(self, settings_file): self.service_local = Model( self.get_section('service::local', (('enable', int, 1), ('username', str, ''), - ('digest', str, ''), ('api_key', str, '')))) + ('digest', str, ''), ('api_key', str, ''), + ('auth', bool, True)))) Settings.instance = self @@ -333,14 +334,19 @@ def update_sections(self, connect_skip=False): self.set_section('service::connect', self.service_connect) self.set_section('service::local', self.service_local) - def is_wizard_needed(self): + def is_wizard_needed(self, camera_mode=False): """ Is there a reason for the wizard to be shown? """ - interested_in = [ - self.printer["type"], self.service_local["username"], - self.service_local["digest"], - ] + interested_in = [] + + if self.service_local["auth"]: + interested_in.extend([ + self.service_local["username"], + self.service_local["digest"], + ]) + if not camera_mode: + interested_in.append(self.printer["type"]) return not all(interested_in) def use_connect(self): diff --git a/prusa/link/daemon.py b/prusa/link/daemon.py index 036072d7..3e6c2294 100644 --- a/prusa/link/daemon.py +++ b/prusa/link/daemon.py @@ -8,6 +8,7 @@ from .config import Settings from .printer_adapter import prusa_link +from .printer_adapter.prusa_cam import PrusaCam from .printer_adapter.prusa_link import PrusaLink from .web import WebServer, init_web_app from .web.lib.core import app @@ -20,13 +21,14 @@ class Daemon: instance = None # pylint: disable=too-few-public-methods - def __init__(self, config, argv: List): + def __init__(self, config, argv: List, is_camera=False): if Daemon.instance: raise RuntimeError("Daemon can be only one.") self.cfg = config self.argv = argv self.settings = None + self.is_camera = is_camera self.http = None self.prusa_link = None @@ -48,7 +50,10 @@ def run(self, daemon=True): # Log daemon stuff as printer_adapter adapter_logger = logging.getLogger(prusa_link.__name__) try: - self.prusa_link = PrusaLink(self.cfg, self.settings) + if self.is_camera: + self.prusa_link = PrusaCam(self.cfg, self.settings) + else: + self.prusa_link = PrusaLink(self.cfg, self.settings) except Exception: # pylint: disable=broad-except adapter_logger.exception("Adapter was not start") self.http.stop() diff --git a/prusa/link/data/add-ap0.service-template b/prusa/link/data/add-ap0.service-template new file mode 100644 index 00000000..48b0bec0 --- /dev/null +++ b/prusa/link/data/add-ap0.service-template @@ -0,0 +1,15 @@ +[Unit] +Description=Add ap0 interface +Requires=sys-subsystem-net-devices-wlan0.device +Before=dhcpcd.service +Before=wpa_supplicant.service +Restart=on-failure +StartLimitIntervalSec=1 +StartLimitBurst=5 + +[Service] +Type=oneshot +ExecStart=/usr/sbin/iw dev {device} interface add ap0 type __ap + +[Install] +WantedBy=multi-user.target diff --git a/prusa/link/network_manager.py b/prusa/link/network_manager.py new file mode 100644 index 00000000..c2f97e09 --- /dev/null +++ b/prusa/link/network_manager.py @@ -0,0 +1,602 @@ +import uuid +from enum import Enum, IntEnum +from importlib.resources import files +from threading import Thread +from time import monotonic, sleep +from xml.etree import ElementTree + +import dasbus.error +from dasbus.connection import SystemMessageBus +from dasbus.typing import Variant +from pydantic import BaseModel, root_validator + + +class AP(BaseModel): + """Access point data""" + + class Icons(Enum): + NONE = "wifi_none.svg" + WEAK = "wifi_weak.svg" + FAIR = "wifi_fair.svg" + GOOD = "wifi_good.svg" + EXCELLENT = "wifi_excellent.svg" + + class States(IntEnum): + UNKNOWN = 0 + CONNECTING = 1 + CONNECTED = 2 + DISCONNECTING = 3 + DELETING = 4 + + + @root_validator + def set_strength_icon(cls, values): + strength = values.get('strength') + values["strength_icon"] = cls._get_strength_icon(strength) + return values + + @classmethod + def _get_strength_icon(cls, strength): + if strength is None: + return cls.Icons.NONE.value + if strength < 20: + return cls.Icons.NONE.value + if strength < 40: + return cls.Icons.WEAK.value + if strength < 60: + return cls.Icons.FAIR.value + if strength < 80: + return AP.Icons.GOOD.value + return cls.Icons.EXCELLENT.value + + ssid: str + strength: int + strength_icon: str = "wifi_none.svg" + frequency: int + flags: int + last_seen: float + saved: bool = False + state: States = States.UNKNOWN + + def __hash__(self): + return hash((self.ssid, self.frequency, self.flags)) + + def __gt__(self, other): + return self.strength > other.strength + + def __eq__(self, other): + return self.strength == other.strength + + +class ActiveConnection(BaseModel): + """Active connection data""" + + ssid: str + state: int + interface: str + active_connection_path: str + connection_path: str + device_path: str + +class ConnectionDetails(BaseModel): + """Connection details data""" + + ip: str + interface: str + device_path: str + +class NMAdapter: + """NetworkManager adapter, has methods for easy interaction with + NetworkManager over D-Bus""" + + BUS_NAME = "org.freedesktop.NetworkManager" + HOTSPOT_ID = "PrusaLink Hotspot" + ACCEPTABLE_INTERFACES = { + "org.freedesktop.NetworkManager.Device.Wireless", + "org.freedesktop.NetworkManager.Device.Wired", + } + + class Paths: + """D-Bus object paths""" + ROOT = "/org/freedesktop/NetworkManager" + SETTINGS = "/org/freedesktop/NetworkManager/Settings" + + class ApDeviceNotFound(Exception): + """Raised when ap0 device is not found""" + + class NoWirelessDeviceFound(Exception): + """Raised when no wireless device is found""" + + class NoSsidInConnection(Exception): + """Raised when no ssid is found in connection""" + + def __init__(self): + self.hotspot_uuid = None + self.bus = SystemMessageBus() + self.nm_proxy = self._get_proxy(self.Paths.ROOT) + + def _get_proxy(self, obj_path): + """Gets a d-bus proxy for a given object path""" + return self.bus.get_proxy(self.BUS_NAME, obj_path) + + def _get_wireless_devices(self): + """Gets a list of wireless device paths""" + devices = [] + for device in self.nm_proxy.GetDevices(): + device_proxy = self._get_proxy(device) + if not hasattr(device_proxy, "GetAllAccessPoints"): + continue + devices.append(device) + if not devices: + raise self.NoWirelessDeviceFound( + "No wireless device found. Please make sure you have a wifi " + "adapter. If you are not planning to use wifi, " + "you can ignore this message.") + return devices + + def _ap0_exists(self): + """Checks if ap0 device exists""" + device_names = [] + for device in self._get_wireless_devices(): + device_proxy = self._get_proxy(device) + device_name = device_proxy.Interface + device_names.append(device_name) + if device_name == "ap0": + return device_proxy + + service_file = str(files("prusa.link") / + "data" / "add-ap0.service-template") + with open(service_file, "r", encoding="utf-8") as file: + service_string = file.read().format(device=device_names[0]) + exception_string = ( + "No ap0 device found, please create a service file at " + "/etc/systemd/system/add-ap0.service with the following " + f"content:\n{service_string}\n" + f"and run 'systemctl enable --now add-ap0.service'.\n\n") + if len(device_names) > 1: + exception_string += ( + f"If that does not work, try replacing \"{device_names[0]}\" " + f"with any of these: {', '.join(device_names[1:])}") + raise self.ApDeviceNotFound(exception_string) + + def _get_ap_paths(self): + """Gets a list of access point d-bus paths""" + aps = list() + for wireless_device in self._get_wireless_devices(): + device_proxy = self._get_proxy(wireless_device) + aps.extend(device_proxy.GetAllAccessPoints()) + return aps + + def _get_connection_ssid(self, connection_proxy): + settings = connection_proxy.GetSettings() + if "802-11-wireless" not in settings: + raise self.NoSsidInConnection("No ssid in connection") + if "ssid" not in settings["802-11-wireless"]: + raise self.NoSsidInConnection("No ssid in connection") + ssid_variant = settings["802-11-wireless"]["ssid"] + ssid = ssid_variant.get_data_as_bytes().get_data().decode("UTF-8") + return ssid + + def get_saved_ssids(self): + """Gets a list of connection d-bus paths""" + known_ssids = set() + settings_proxy = self._get_proxy(self.Paths.SETTINGS) + for connection in settings_proxy.ListConnections(): + connection_proxy = self._get_proxy(connection) + try: + ssid = self._get_connection_ssid(connection_proxy) + except self.NoSsidInConnection: + continue + known_ssids.add(ssid) + return known_ssids + + def get_active_connections(self): + active_connections = [] + for device in self.nm_proxy.GetDevices(): + device_proxy = self._get_proxy(device) + active_connection = device_proxy.ActiveConnection + if active_connection == "/": + continue + active_connection_proxy = self._get_proxy(active_connection) + connection = active_connection_proxy.Connection + connection_proxy = self._get_proxy(connection) + try: + ssid = self._get_connection_ssid(connection_proxy) + except self.NoSsidInConnection: + continue + interface = device_proxy.Interface + active_connection = ActiveConnection( + ssid=ssid, + state=active_connection_proxy.State, + interface=interface, + active_connection_path=active_connection, + connection_path=connection, + device_path=device, + ) + active_connections.append(active_connection) + return active_connections + + def _get_active_connections_by_ssid(self): + """Gets a list of active connections""" + active_connections = self.get_active_connections() + acs_by_ssid = {} + for active_connection in active_connections: + acs_by_ssid[active_connection.ssid] = active_connection + return acs_by_ssid + + def get_aps(self): + """Gets a list of AP objects representing available access points""" + aps: set[AP] = set() + saved_ssids = self.get_saved_ssids() + active_ssids = self._get_active_connections_by_ssid() + for ap in self._get_ap_paths(): + try: + ap_proxy = self._get_proxy(ap) + if not hasattr(ap_proxy, "Ssid"): + continue + ssid = bytes(ap_proxy.Ssid).decode("UTF-8") + if ssid == "PrusaLink": + continue + state = 0 + if ssid in active_ssids: + state = active_ssids[ssid].state + ap = AP( + ssid=ssid, + strength=ap_proxy.Strength, + frequency=ap_proxy.Frequency, + last_seen=monotonic(), + flags=ap_proxy.Flags, + saved=ssid in saved_ssids, + state=state, + ) + aps.add(ap) + except dasbus.error.DBusError: + continue + return aps + + def forget(self, connection_id): + """Forgets every connection with given ID""" + settings_proxy = self._get_proxy(self.Paths.SETTINGS) + for connection in settings_proxy.ListConnections(): + connection_proxy = self._get_proxy(connection) + settings = connection_proxy.GetSettings() + if "connection" not in settings: + continue + if "id" not in settings["connection"]: + continue + if settings["connection"]["id"].get_string() == connection_id: + connection_proxy.Delete() + + def scan(self): + """Scans for available access points""" + for device in self._get_wireless_devices(): + device_proxy = self._get_proxy(device) + device_proxy.RequestScan({}) + + def create_hotspot(self): + """Creates a hotspot connection on ap0""" + # Make sure there is no hotspot running + self.disable_hotspot() + self.hotspot_uuid = str(uuid.uuid4()) + connection = { + 'connection': { + 'id': Variant('s', self.HOTSPOT_ID), + 'uuid': Variant('s', self.hotspot_uuid), + 'type': Variant('s', '802-11-wireless'), + 'autoconnect': Variant('b', True), + 'interface-name': Variant('s', 'ap0'), + }, + '802-11-wireless': { + 'mode': Variant('s', 'ap'), + 'ssid': Variant('ay', bytearray('PrusaLink', 'utf-8')), + }, + 'ipv4': { + 'method': Variant('s', 'shared'), + 'address-data': Variant('aa{sv}', [ + { + 'prefix': Variant('u', 24), + 'address': Variant('s', '192.168.0.1'), + } + ]), + }, + 'ipv6': {'method': Variant('s', 'ignore')}, + } + settings_proxy = self._get_proxy(self.Paths.SETTINGS) + settings_proxy.AddConnectionUnsaved(connection) + + def disable_hotspot(self): + """Disables the hotspot connection""" + settings_proxy = self._get_proxy(self.Paths.SETTINGS) + if self.hotspot_uuid is not None: + connection = settings_proxy.GetConnectionByUuid(self.hotspot_uuid) + connection_proxy = self._get_proxy(connection) + connection_proxy.Delete() + self.hotspot_uuid = None + # Make sure all of them are gone + self.forget(self.HOTSPOT_ID) + + def get_connected_devices(self): + devices = [] + for device in self.nm_proxy.GetDevices(): + device_proxy = self._get_proxy(device) + if device_proxy.Interface == "ap0": + # Connection to ap0 does not count + continue + xml = device_proxy.Introspect() + element_tree: ElementTree = ElementTree.fromstring(xml) + interfaces = element_tree.findall("interface") + for interface in interfaces: + # If the NIC is of an acceptable type + if interface.attrib["name"] in self.ACCEPTABLE_INTERFACES: + # If the interface is connected + if device_proxy.State == 100: + # We are connected + devices.append(device) + return devices + + def is_connected(self): + """Checks if we are connected to a network that isn't ap0""" + return bool(self.get_connected_devices()) + + def get_connection_details(self): + """Gets a list of connection details""" + connection_details = [] + for device in self.get_connected_devices(): + device_proxy = self._get_proxy(device) + active_connection = device_proxy.ActiveConnection + ac_proxy = self._get_proxy(active_connection) + ip4_config = ac_proxy.Ip4Config + ip4_config_proxy = self._get_proxy(ip4_config) + + interface = device_proxy.Interface + address_data = ip4_config_proxy.AddressData + ip4_address = address_data[0]["address"].get_string() + details = ConnectionDetails( + ip=ip4_address, + interface=interface, + device_path=device, + ) + connection_details.append(details) + return connection_details + + def connect_to(self, ssid, password): + """Connects to a given wireless network""" + connection = { + 'connection': { + 'id': Variant('s', ssid), + 'uuid': Variant('s', str(uuid.uuid4())), + 'type': Variant('s', '802-11-wireless'), + 'autoconnect': Variant('b', True), + }, + '802-11-wireless': { + 'ssid': Variant('ay', bytearray(ssid, 'utf-8')), + }, + "802-11-wireless-security": { + "key-mgmt": Variant("s", "wpa-psk"), + "psk": Variant("s", password), + }, + 'ipv4': {'method': Variant('s', 'auto')}, + 'ipv6': {'method': Variant('s', 'auto')}, + } + self.nm_proxy.AddAndActivateConnection(connection, "/", "/") + + def disconnect(self, ssid): + """Disconnects from a given wireless network""" + active_connections = self.get_active_connections() + for active_connection in active_connections: + if active_connection.ssid == ssid: + self.nm_proxy.DeactivateConnection( + active_connection.active_connection_path) + + def connect(self, ssid): + """Connects to a given wireless network""" + settings_proxy = self._get_proxy(self.Paths.SETTINGS) + for connection in settings_proxy.ListConnections(): + connection_proxy = self._get_proxy(connection) + try: + connection_ssid = self._get_connection_ssid(connection_proxy) + except self.NoSsidInConnection: + continue + if connection_ssid == ssid: + self.nm_proxy.ActivateConnection(connection, "/", "/") + + +class APList: + """List of remembered access points + Aggregates the list so the APs are not flickering and are sorted by their + strength""" + + AP_TIMEOUT = 10 + + def __init__(self): + self._aps: dict[str, AP] = {} + + def put_aps(self, aps): + for ap in aps: + if ap.ssid in self._aps: + self._aps[ap.ssid].last_seen = monotonic() + # This need to be updated every time + self._aps[ap.ssid].state = ap.state + self._aps[ap.ssid].saved = ap.saved + if ap.strength > self._aps[ap.ssid].strength: + self._aps[ap.ssid] = ap + else: + self._aps[ap.ssid] = ap + + to_delete = [] + for remembered_ap in self._aps.values(): + if monotonic() - remembered_ap.last_seen > self.AP_TIMEOUT: + to_delete.append(remembered_ap) + + for ap in to_delete: + del self._aps[ap.ssid] + + @property + def aps(self): + """Returns the list of APs sorted by their strength""" + return reversed(sorted(self._aps.values())) + + def json_serializable(self): + """Returns the list of APs sorted by their strength""" + aps = reversed(sorted(self._aps.values())) + serializable_aps = [] + for ap in aps: + serializable_aps.append(ap.dict()) + return serializable_aps + + def __str__(self): + ap_strings = [] + for ap in self.aps: + ap_strings.append( + f"AP {ap.ssid}\n" + f"strength: {ap.strength}\n" + f"frequency: {ap.frequency}\n" + f"flags: {ap.flags}\n" + f"saved: {ap.saved}\n" + f"connected: {ap.States(ap.state).name}\n", + ) + return "AP list:\n" + "\n".join(ap_strings) + + +class NetworkComponent: + """Keeps our network state, tells NetworkManager what to do""" + + class States(Enum): + DORMANT = "DORMANT" + HOTSPOT_ON = "HOTSPOT_ON" + CONNECTING = "CONNECTING" + CONNECTED = "CONNECTED" + + SCAN_INTERVAL = 10 + CONNECT_TIMEOUT = 10 # 120 for prod + DORMANT_RETRY_INTERVAL = 10 + HOTSPOT_TIMEOUT = 30 + + def __init__(self): + self.nm_adapter = NMAdapter() + self._state = self.States.DORMANT + self.aps = APList() + self.new_state_at = monotonic() + self.rescan_at = monotonic() + self.running = False + self.hotspot_on = False + self.thread = Thread(target=self._run, + daemon=True, + name="NetworkComponent") + self.thread.start() + + def _state_timeout(self, timeout): + return monotonic() - self.new_state_at > timeout + + def _update_ap_info(self): + # Scan for APs + self.aps.put_aps(self.nm_adapter.get_aps()) + + def _turn_on_hotspot(self): + if self.hotspot_on: + return + try: + self.nm_adapter.create_hotspot() + self.hotspot_on = True + except NMAdapter.ApDeviceNotFound: + self.state = self.States.DORMANT + + def _turn_off_hotspot(self): + if not self.hotspot_on: + return + self.nm_adapter.disable_hotspot() + self.hotspot_on = False + + def _run(self): + """Main loop of the component, runs in a separate thread + depending on the state, it either scans for APs, turns on or off the + hotspot or switches the appropriate state""" + self.running = True + while self.running: + # If we are connected, switch to CONNECTED + if (self.state != self.States.CONNECTED and + self.nm_adapter.is_connected()): + self.state = self.States.CONNECTED + + if self.state == self.States.DORMANT: + # Switch to HOTSPOT_ON if a wi-fi device becomes available + sleep(self.DORMANT_RETRY_INTERVAL) + self.state = self.States.HOTSPOT_ON + elif self.state == self.States.CONNECTING: + # Switch to HOTSPOT_ON if we are not connected after timeout + if self._state_timeout(self.CONNECT_TIMEOUT): + self.state = self.States.HOTSPOT_ON + elif self.state == self.States.HOTSPOT_ON: + self._turn_on_hotspot() + elif self.state == self.States.CONNECTED: + # Switch to CONNECTING if we are not connected anymore + if not self.nm_adapter.is_connected(): + self.state = self.States.CONNECTING + # Automatically disable hotspot after timeout + if self._state_timeout(self.HOTSPOT_TIMEOUT): + self._turn_off_hotspot() + sleep(1) + + @property + def state(self): + """Returns the current state""" + return self._state + + @state.setter + def state(self, new_state): + """Sets the state and if an action is needed, performs it""" + self._state = new_state + self.new_state_at = monotonic() + + def get_info(self): + """Returns the current state""" + serializable_active_connections = [] + serializable_connection_details = [] + for active_connection in self.nm_adapter.get_active_connections(): + serializable_ac = active_connection.dict() + del serializable_ac["active_connection_path"] + del serializable_ac["connection_path"] + del serializable_ac["device_path"] + serializable_active_connections.append(serializable_ac) + for detail in self.nm_adapter.get_connection_details(): + serializable_detail = detail.dict() + del serializable_detail["device_path"] + serializable_connection_details.append(serializable_detail) + return { + "saved_ssids": list(self.nm_adapter.get_saved_ssids()), + "active_connections": serializable_active_connections, + "connection_details": serializable_connection_details, + "hotspot_on": self.hotspot_on, + } + + def rescan(self): + if monotonic() > self.rescan_at: + self.rescan_at = monotonic() + self.SCAN_INTERVAL + self.nm_adapter.scan() + self._update_ap_info() + + def connect_to(self, ssid, password): + """Connects to a given wireless network""" + self.nm_adapter.connect_to(ssid, password) + self.state = self.States.CONNECTING + + def forget(self, ssid): + """Forgets a given wireless network""" + self.nm_adapter.forget(ssid) + + def disconnect(self, ssid): + """Disconnects from a given wireless network""" + self.nm_adapter.disconnect(ssid) + + def connect(self, ssid): + """Connects to a given wireless network""" + self.nm_adapter.connect(ssid) + + def stop(self): + """Stops the component""" + self.nm_adapter.disable_hotspot() + self.running = False + + def wait_stooped(self): + """Waits for the component to stop""" + self.thread.join() diff --git a/prusa/link/printer_adapter/prusa_cam.py b/prusa/link/printer_adapter/prusa_cam.py new file mode 100644 index 00000000..20c4ca34 --- /dev/null +++ b/prusa/link/printer_adapter/prusa_cam.py @@ -0,0 +1,138 @@ +"""Implements the PrusaLink class""" +# pylint: disable=duplicate-code + +import logging +from threading import Event +from threading import enumerate as enumerate_threads +from typing import Any, List, Type + +from prusa.connect.printer.camera_configurator import CameraConfigurator +from prusa.connect.printer.camera_driver import CameraDriver +from prusa.connect.printer.conditions import CondState + +from ..camera_governor import CameraGovernor +from ..cameras.picamera_driver import PiCameraDriver +from ..cameras.v4l2_driver import V4L2Driver +from ..conditions import HW, use_connect_errors +from ..config import Config, Settings +from ..network_manager import NetworkComponent +from ..sdk_augmentation.printer import CameraOnly +from ..service_discovery import ServiceDiscovery +from .command_queue import CommandQueue +from .model import Model +from .updatable import Thread + +log = logging.getLogger(__name__) + + +class PrusaCam: + """ + This class is the controller for PrusaLink, more specifically the part + that communicates with the printer. + + It connects signals with their handlers + """ + + def __init__(self, cfg: Config, settings: Settings) -> None: + # pylint: disable=too-many-statements + self.cfg: Config = cfg + log.info('Starting adapter for port %s', self.cfg.printer.port) + self.settings: Settings = settings + self.network_component = NetworkComponent() + + use_connect_errors(self.settings.use_connect()) + + self.quit_evt = Event() + self.stopped_event = Event() + HW.state = CondState.OK + self.model = Model() + + # These start by themselves + self.service_discovery = ServiceDiscovery(self.cfg.http.port) + + self.printer = CameraOnly() + + drivers: List[Type[CameraDriver]] = [V4L2Driver] + if PiCameraDriver.supported: + drivers.append(PiCameraDriver) + + self.camera_configurator = CameraConfigurator( + config=self.settings, + config_file_path=self.cfg.printer.settings, + camera_controller=self.printer.camera_controller, + drivers=drivers, + auto_detect=self.cfg.cameras.auto_detect, + ) + self.camera_governor = CameraGovernor(self.camera_configurator, + self.printer.camera_controller) + + self.printer.connection_from_settings(settings) + + self.command_queue = CommandQueue() + + self.printer.command.stop_cb = self.command_queue.clear_queue + + self.camera_governor.start() + + self.command_queue.start() + self.printer.start() + + log.debug("Initialization done") + + debug = True + if debug: + Thread(target=self.debug_shell, name="debug_shell", + daemon=True).start() + + # pylint: disable=too-many-branches + def debug_shell(self) -> None: + """ + Calling this in a thread that receives stdin enables th user to + give PrusaLink commands through the terminal + """ + print("Debug shell") + while not self.quit_evt.is_set(): + try: + command = input("[PrusaLink]: ") + result: Any = "" + if command == "test": + result = "test ok" + if command.startswith("register_camera"): + _, camera_id, token = command.split(" ") + camera = self.printer.camera_controller.get_camera( + camera_id) + camera.set_token(token) + if result: + print(result) + # pylint: disable=bare-except + except: # noqa: E722 + log.exception("Debug console errored out") + + def stop(self, fast: bool = False) -> None: + """ + Calls stop on every module containing a thread, for debugging prints + out all threads which are still running and sets an event to signalize + that PrusaLink has stopped. + """ + + log.debug("Stop start%s", ' fast' if fast else '') + + self.quit_evt.set() + self.camera_governor.stop() + self.command_queue.stop() + self.printer.indicate_stop() + self.network_component.stop() + + log.debug("Stop signalled") + + if not fast: + self.service_discovery.unregister() + self.printer.wait_stopped() + self.camera_governor.wait_stopped() + self.network_component.wait_stooped() + + log.debug("Remaining threads, that might prevent stopping:") + for thread in enumerate_threads(): + log.debug(thread) + self.stopped_event.set() + log.info("Stop completed%s", ' fast!' if fast else '') diff --git a/prusa/link/printer_adapter/prusa_link.py b/prusa/link/printer_adapter/prusa_link.py index ae310c80..badd5450 100644 --- a/prusa/link/printer_adapter/prusa_link.py +++ b/prusa/link/printer_adapter/prusa_link.py @@ -34,6 +34,7 @@ SD_STORAGE_NAME, ) from ..interesting_logger import InterestingLogRotator +from ..network_manager import NetworkComponent from ..sdk_augmentation.printer import MyPrinter from ..serial.helpers import enqueue_instruction, enqueue_matchable from ..serial.serial import SerialException @@ -134,6 +135,7 @@ def __init__(self, cfg: Config, settings: Settings) -> None: self.cfg: Config = cfg log.info('Starting adapter for port %s', self.cfg.printer.port) self.settings: Settings = settings + self.network_component = NetworkComponent() use_connect_errors(self.settings.use_connect()) @@ -448,6 +450,7 @@ def stop(self, fast: bool = False) -> None: self.storage_controller.stop() self.keepalive.stop() self.lcd_printer.stop(fast) + self.network_component.stop() # This is for pylint to stop complaining, I'd like stop(fast) more if fast: self.ip_updater.stop() @@ -486,6 +489,7 @@ def stop(self, fast: bool = False) -> None: self.serial_queue.wait_stopped() self.serial_parser.wait_stopped() self.serial.wait_stopped() + self.network_component.wait_stooped() log.debug("Remaining threads, that might prevent stopping:") for thread in enumerate_threads(): diff --git a/prusa/link/sdk_augmentation/printer.py b/prusa/link/sdk_augmentation/printer.py index 7d28fb2a..49b8fae3 100644 --- a/prusa/link/sdk_augmentation/printer.py +++ b/prusa/link/sdk_augmentation/printer.py @@ -1,6 +1,7 @@ """Contains implementation of the augmented Printer class from the SDK""" from logging import getLogger from pathlib import Path +from threading import Event from time import sleep from typing import Any, Dict @@ -27,7 +28,89 @@ log = getLogger("connect-printer") -class MyPrinter(SDKPrinter, metaclass=MCSingleton): +class Base(SDKPrinter): + """An SDK Printer class, but only the base that sends snapshots to connect + This is further forked to a fully fledged Printer, or just a camera + triggering class""" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.command_handler = CommandHandler(self.command) + self.snapshot_thread = Thread(target=self.snapshot_loop, + name="snapshot_sender", + daemon=True) + + def start(self): + """Start SDK related threads. + + * loop + """ + self.snapshot_thread.start() + + def indicate_stop(self): + """Passes the stop request to all SDK related threads. + + * command handler + * loop + """ + self.command_handler.stop() + self.camera_controller.stop() + + def wait_stopped(self): + """Waits for the SDK threads to join + + * loop + * snapshot_loop + """ + self.snapshot_thread.join() + + def connection_from_settings(self, settings): + """Loads connection details from the Settings class.""" + self.api_key = settings.service_local.api_key + server = SDKPrinter.connect_url(settings.service_connect.hostname, + settings.service_connect.tls, + settings.service_connect.port) + token = settings.service_connect.token + + self.set_connection(server, token) + use_connect_errors(settings.use_connect()) + + def snapshot_loop(self): + """Gives snapshot loop a consistent name with the rest of the app""" + prctl_name() + self.camera_controller.snapshot_loop() + + +class CameraOnly(Base): + """An SDK Printer class but only for cameras, will probably need renaming + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._quit_evt = Event() + self.trigger_thread = Thread(target=self.trigger_loop, daemon=True) + + def start(self): + """Start SDK related threads. + """ + super().start() + self.trigger_thread.start() + + def trigger_loop(self): + """Gives trigger loop a consistent name with the rest of the app""" + while not self._quit_evt.is_set(): + self.camera_controller.tick() + self._quit_evt.wait(0.2) + + def wait_stopped(self): + """Waits for the SDK threads to join + Waits for the additional trigger thread + """ + super().wait_stopped() + self.trigger_thread.join() + + +class MyPrinter(Base, metaclass=MCSingleton): """ Overrides some methods of the SDK Printer to provide better support for PrusaLink @@ -37,17 +120,13 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.lcd_printer = LCDPrinter.get_instance() self.keepalive = Keepalive.get_instance() + self.loop_thread = Thread(target=self.loop, name="loop") self.download_thread = Thread(target=self.download_loop, name="download") self.model = Model.get_instance() self.nozzle_diameter = None - self.command_handler = CommandHandler(self.command) - self.loop_thread = Thread(target=self.loop, name="loop") self.__inotify_running = False self.inotify_thread = Thread(target=self.inotify_loop, name="inotify") - self.snapshot_thread = Thread(target=self.snapshot_loop, - name="snapshot_sender", - daemon=True) def parse_command(self, res): """Parse telemetry response. @@ -74,19 +153,6 @@ def get_info(self) -> Dict[str, Any]: info["prusalink"] = __version__ return info - def connection_from_settings(self, settings): - """Loads connection details from the Settings class.""" - self.api_key = settings.service_local.api_key - server = SDKPrinter.connect_url(settings.service_connect.hostname, - settings.service_connect.tls, - settings.service_connect.port) - token = settings.service_connect.token - - self.set_connection(server, token) - use_connect = settings.use_connect() - self.keepalive.set_use_connect(use_connect) - use_connect_errors(use_connect) - def get_file_info(self, caller: Command) -> Dict[str, Any]: """Return file info for a given file sometimes only when it exists""" @@ -133,10 +199,10 @@ def start(self): * inotify """ self.__inotify_running = True + super().start() self.loop_thread.start() self.inotify_thread.start() self.download_thread.start() - self.snapshot_thread.start() def indicate_stop(self): """Passes the stop request to all SDK related threads. @@ -144,13 +210,13 @@ def indicate_stop(self): * command handler * loop * inotify + * snapshot_loop """ self.__inotify_running = False - self.download_mgr.stop_loop() + super().indicate_stop() self.stop_loop() self.queue.put(None) # Trick the SDK into quitting fast - self.command_handler.stop() - self.camera_controller.stop() + self.download_mgr.stop_loop() def wait_stopped(self): """Waits for the SDK threads to join @@ -158,11 +224,12 @@ def wait_stopped(self): * command handler * loop * inotify + * snapshot_loop """ - self.inotify_thread.join() + super().wait_stopped() self.loop_thread.join() + self.inotify_thread.join() self.download_thread.join() - self.snapshot_thread.join() def loop(self): """SDKPrinter.loop with thread name.""" @@ -184,11 +251,6 @@ def download_loop(self): prctl_name() self.download_mgr.loop() - def snapshot_loop(self): - """Gives snapshot loop a consistent name with the rest of the app""" - prctl_name() - self.camera_controller.snapshot_loop() - @property def type_string(self): """Gets the string version of the printer type""" diff --git a/prusa/link/static/img/camera.svg b/prusa/link/static/img/camera.svg new file mode 100644 index 00000000..47686a6e --- /dev/null +++ b/prusa/link/static/img/camera.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static/img/wifi-icon-dark.svg b/prusa/link/static/img/wifi-icon-dark.svg new file mode 100644 index 00000000..50e2d6ae --- /dev/null +++ b/prusa/link/static/img/wifi-icon-dark.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static/img/wifi-icon-white.svg b/prusa/link/static/img/wifi-icon-white.svg new file mode 100644 index 00000000..84c5d9f3 --- /dev/null +++ b/prusa/link/static/img/wifi-icon-white.svg @@ -0,0 +1,53 @@ + + + + + + + + diff --git a/prusa/link/static/img/wifi_excellent.svg b/prusa/link/static/img/wifi_excellent.svg new file mode 100644 index 00000000..60946b3f --- /dev/null +++ b/prusa/link/static/img/wifi_excellent.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/prusa/link/static/img/wifi_fair.svg b/prusa/link/static/img/wifi_fair.svg new file mode 100644 index 00000000..884675ad --- /dev/null +++ b/prusa/link/static/img/wifi_fair.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/prusa/link/static/img/wifi_good.svg b/prusa/link/static/img/wifi_good.svg new file mode 100644 index 00000000..1c9cb332 --- /dev/null +++ b/prusa/link/static/img/wifi_good.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/prusa/link/static/img/wifi_none.svg b/prusa/link/static/img/wifi_none.svg new file mode 100644 index 00000000..83a503ee --- /dev/null +++ b/prusa/link/static/img/wifi_none.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/prusa/link/static/img/wifi_weak.svg b/prusa/link/static/img/wifi_weak.svg new file mode 100644 index 00000000..151a6802 --- /dev/null +++ b/prusa/link/static/img/wifi_weak.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/prusa/link/static/main.3544455f508e4ea2212a.js b/prusa/link/static/main.3544455f508e4ea2212a.js new file mode 100644 index 00000000..6e735131 --- /dev/null +++ b/prusa/link/static/main.3544455f508e4ea2212a.js @@ -0,0 +1 @@ +(()=>{var e={5862:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f844a0a85dde310826fce450c3e149d3.svg"},340:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"d0ce7d704590cb0b868ae92249ee86e8.svg"},3246:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"e6e0734bc2dad609a3e92f1873412f11.svg"},6730:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"557f3616d5a1b407b59795b8328bb51f.svg"},8065:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"2e842fcb7b83af8e1e0d26afd80f8fd9.svg"},8920:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24c2502c54c43441d0bb4bbc17e10a83.svg"},2456:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f6a7f34a841f532dd1e3e4d610d164f6.svg"},9819:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"53df9c11e268c2390b147239f9ee8796.svg"},7038:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"9332c323b291ba7226ddcdabb0c8e7c4.svg"},1656:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"79e90794ba3b36a64a12414decda0932.svg"},9594:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"a443dadfc7e114c74dae6cd64a74db9d.svg"},931:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"926f52aea63cfd597b30096bfe4077c6.svg"},7336:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"44b654f4ca724e154a9bc60335e98847.svg"},9387:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"8657650f85be23655543d28f58941616.svg"},5300:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ea93bcffb8771234f8c641f3b7e9f848.svg"},3482:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ccd215a92d0427a21339a8c38e2a40f3.svg"},5515:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"997c391425907810b4a6e42663d11fd4.svg"},4578:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24e2e49c87df140cf16aa18b4e261f12.svg"},2e3:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"58151992d28dfb34ee417e0ebf6a66b6.svg"},2290:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"c8a0ca767f73685bbe06863f81e9d3cb.svg"},3174:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"39e93870e6b8fd4ef2d9ed668f8c1545.svg"},8796:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"1218694688ee15ee97bcded9e1a75cc8.svg"},1373:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"dfb811cc28f8e3d7c14bcedbe7ef35b8.svg"},4622:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"b891ace1622f34bac5a2b4edb7adc733.svg"},5464:(e,t,a)=>{var i=a(7091),s=a(8065),n=a(4622),o=a(6730),r='

';e.exports=r},3478:(e,t,a)=>{var i=a(7091),s=a(340),n=a(5862),o=a(1656),r=i(s),l=i(n),d=i(o),c='

printer coordinates

X axis

0 mm

Y axis

0 mm

Z axis

0 mm

stepper motors

heated bed X and Y move

move step [mm]

nozzle Z move

extruder

extrude/retract step [mm]

nozzle temperature

0°C

speed

100%

heated bed temperature

0°C

flow

100%

';e.exports=c},2373:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(3174),b=a(8796),f=i(s),y=i(n),k=i(o),w=i(r),x=i(l),z=i(d),S=i(c),E=i(u),P=i(p),L=i(m),N=i(v),I=i(g),_='

Upload file

Add file from

 

Click to choose a *.sl1 file or drag it here

Source URL

Type URL of G-CODE file

File name

Type or edit file name

Progress

NA

Size

NA

Download Started

NA

Remaining Time

NA

Autostart

NA

Temperatures

Cameras

';e.exports=_},7189:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(931),b=a(5515),f=a(3174),y=a(8796),k=a(9594),w=a(8065),x=a(8920),z=i(s),S=i(n),E=i(o),P=i(r),L=i(l),N=i(d),I=i(c),_=i(u),T=i(p),j=i(m),C=i(v),A=i(g),D=i(h),B=i(b),O=i(f),q=i(y),M=i(k),R=i(w),H=i(x),U='

Local

0%

0 GB of 0 GB free

Add file from

 

Click to choose a *.sl1 file or drag it here

Source URL

Type URL of G-CODE file

File name

Type or edit file name

Progress

NA

Size

NA

Download Started

NA

Remaining Time

NA

Autostart

NA

';e.exports=U},5198:(e,t,a)=>{var i=a(7091),s=a(4622),n=a(6730),o='

';e.exports=o},2936:(e,t,a)=>{var i=a(7091),s=a(7038),n=a(7336),o=a(1373),r=a(4622),l=a(6730),d=i(s),c=i(n),u=i(o),p='

version

api

hostname

firmware

server

text

sdk

frontend

3.12.0

system version

updates

connection

PRUSA CONNECT

connection status

Successfully connected

3D printer connection status

Successfully connected

printer

printer name

printer location

network error chime

user

username

new password

repeat password

current password

serial number

serial number

api key

api key

logs

select file

';e.exports=p},7091:e=>{"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(t.hash&&(e+=t.hash),t.maybeNeedQuotes&&/[\t\n\f\r "'=<>`]/.test(e)?'"'.concat(e,'"'):e)}},6648:(e,t,a)=>{"use strict";a.d(t,{LK:()=>d,O2:()=>n,Z5:()=>g,gJ:()=>m,iT:()=>c,wU:()=>r});var i=a(8236),s=a(1351);const n=window.location.pathname.endsWith("/")?window.location.pathname.slice(0,-1):window.location.pathname,o=()=>new Promise(((e,t)=>{(0,i.o)((e=>t=>{const a=document.getElementById("modal-apiKey"),i=document.importNode(a.content,!0);return i.getElementById("apiKey").addEventListener("keydown",(a=>{"Enter"==a.key&&(t(),e(a.target.value))})),i.getElementById("login").addEventListener("click",(a=>{a.preventDefault();let i=document.getElementById("apiKey").value;t(),e(i)})),i})(e),{timeout:0,closeOutside:!1})})).then((e=>sessionStorage.setItem("apiKey",e))),r=(e="application/json")=>"ApiKey"==sessionStorage.getItem("authType")?{"X-Api-Key":sessionStorage.getItem("apiKey"),Accept:e}:{Accept:e},l=()=>new Promise(((e,t)=>(sessionStorage.setItem("auth","pending"),fetch(`${n}/api/v1/info`,{headers:r()}).then((t=>{if(401==t.status){const a=t.headers.get("WWW-Authenticate").split(" ")[0];return sessionStorage.setItem("authType",a),sessionStorage.removeItem("apiKey"),"ApiKey"==a?o().then((()=>l().then((t=>e(t))))):l().then((t=>e(t)))}{const e=t.json();return 200!=t.status&&e.then((e=>(0,s.S)({data:e}))),e}})).then((t=>{sessionStorage.setItem("auth","true"),e(t)}))))),d=(e,t={})=>u(e,t,"application/json","json"),c=(e,t={})=>u(e,t,"text/plain","text");async function u(e,t={},a,i){if("true"!=sessionStorage.getItem("auth"))throw{code:401};{t.headers={...t.headers,...r(a)};const s=await fetch(`${n}${e}`,t),o=s.status,l={code:o,eTag:s.headers.get("etag")};switch(o){case 401:throw sessionStorage.setItem("auth","false"),l;case 204:case 304:return l;default:const e=await s.text();if(!s.ok){if(e.length>0)try{l.data=JSON.parse(e)}catch{}throw l.data=l.data||{title:`Error ${o}`,message:s.statusText},l}return l.data="json"===i?0===e.length?{}:JSON.parse(e):e,l}}}const p=(e,t,a)=>new Promise(((i,s)=>{"true"==sessionStorage.getItem("auth")?(t.headers={...r(),...t.headers},fetch(a?`${n}${e}?ct=${a}`:e,t).then((e=>{401==e.status&&(sessionStorage.setItem("auth","false"),s(e)),e.ok?e.blob().then((t=>i({url:URL.createObjectURL(t),headers:e.headers}))):s(e)})).catch((e=>s(e)))):s()})),m=(e,t,a={})=>p(`${n}${e}`,{...a,headers:{...a.headers,Accept:"image/*"}},t),v=e=>{const t=document.getElementById("modal-welcome"),a=document.importNode(t.content,!0);return a.querySelector(".close-button").addEventListener("click",e),a},g=()=>null==localStorage.getItem("showWelcome")?new Promise(((e,t)=>{(0,i.o)(v,{closeCallback:()=>{localStorage.setItem("showWelcome",!0),e()}})})).then((()=>l())):l()},1972:(e,t,a)=>{"use strict";a.d(t,{Z:()=>s});var i=a(6648);const s=function(e,t){let a=document.createElement("a");a.href=`${i.O2}${e}`,a.download=t||"",a.click(),a.remove()}},646:(e,t,a)=>{"use strict";function i(e,t=!0){e&&(t&&!e.hasAttribute("hidden")&&e.setAttribute("hidden",!0),!t&&e.hasAttribute("hidden")&&e.removeAttribute("hidden"))}function s(e,t=!0){i(e,!t)}function n(e,t=!0){e&&(t&&!e.hasAttribute("disabled")&&e.setAttribute("disabled",!0),!t&&e.hasAttribute("disabled")&&e.removeAttribute("disabled"))}function o(e,t=!0){return n(e,!t)}function r(){s(document.querySelector("#job .loading-overlay"))}function l(){i(document.querySelector("#job .loading-overlay"))}function d(e,...t){const a=i=>{if(t)for(const e of t)if(e&&e.contains(i.target))return;e&&e(),window.removeEventListener("pointerup",a)};window.addEventListener("pointerup",a)}a.d(t,{H:()=>n,QH:()=>i,QP:()=>r,Ti:()=>d,Zk:()=>l,gL:()=>o,yx:()=>s})},5537:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=function(e){return"string"==typeof e?document.getElementById(e):e||document.body}},9741:e=>{e.exports=function(e,t){let a=t.split("."),i=e;for(const e of a)if(i=i[e],!i)break;return i}},7780:(e,t,a)=>{"use strict";a.d(t,{G3:()=>v,Iu:()=>h,Vb:()=>g,m0:()=>m,ot:()=>f});var i=a(5537),s=a(9741),n=a.n(s);const o=a(4977),r=o.langs,l=o.texts,d=r.indexOf("en");let c,u;function p(){return navigator.language||navigator.userLanguage||""}function m(e){const t=r.indexOf(e);return-1!==t&&(u=t,c=e,localStorage.setItem("lang",c),!0)}function v(){return c}function g(){return[...r]}function h(e,t){let a=n()(l,`${e}.${u}`);if(!a)return a=n()(l,`${e}.${d}`),a||(a=e),b(a,t),a;let i=null;if(t&&(i=Object.assign({},t),delete i.query,delete i.ref),i&&Object.keys(i).length>0){let e,i=a,s=/{{(.*?)}}/g;for(;e=s.exec(a);){let s=a.substr(e.index+2,e[0].length-4);if("query"!==s&&"ref"!==s)if(s in t){let a=t[s];i=i.replace(e[0],a)}else 0}a=i}return b(a,t),a}function b(e,t){if(t)if(t.ref){t.ref.innerHTML=e}else if(t.query){let a=document.querySelector(t.query);a?a.innerHTML=e:console.warn(`cannot find element with "${t.query}" query`)}}function f(e){(0,i.Z)(e).querySelectorAll('[data-label]:not([data-label=""])').forEach((e=>{const t=h(e.getAttribute("data-label")),a=e.getAttribute("data-label-target");a?e.setAttribute(a,t):e.innerHTML=t}))}m(localStorage.getItem("lang"))||m(p().toLowerCase())||m(p().toLowerCase().split("-")[0])||m("en")},2451:(e,t,a)=>{"use strict";a.d(t,{Z:()=>L});var i=a(6648),s=a(646),n=a(7780),o=a(3707),r=a(8236),l=a(5412),d=a(1351);let c,u=!1,p=[];const m={TEN_SEC:"TEN_SEC",THIRTY_SEC:"THIRTY_SEC",SIXTY_SEC:"SIXTY_SEC",EACH_LAYER:"EACH_LAYER",FIFTH_LAYER:"FIFTH_LAYER",MANUAL:"MANUAL"},v=e=>{switch(e){case m.TEN_SEC:return(0,n.Iu)("cameras.trigger-scheme.ten-sec");case m.THIRTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.thirty-sec");case m.SIXTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.sixty-sec");case m.EACH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.each-layer");case m.FIFTH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.fifth-layer");case m.MANUAL:return(0,n.Iu)("cameras.trigger-scheme.manual");default:return`${e}`}},g=()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-suc")),h=(e,t=E)=>{void 0===c&&(c=e.camera?.id),u=e.link.connect.ok,(0,i.LK)("/api/v1/cameras").then((e=>{const a=(e?.data?.camera_list||[]).map((e=>{let t=p.find((t=>t.id===e.camera_id))||{};return e.camera_id===c&&(e.connected||(c=null)),{id:e.camera_id,config:e.config,connected:e.connected,detected:e.detected,stored:e.stored,registered:e.registered,nextSnapshotAt:t?.nextSnapshotAt,lastSnapshotAt:t?.lastSnapshotAt,lastSnapshotUrl:t?.lastSnapshotUrl}})),i=p.filter((e=>!a.find((t=>e.id===t.id))));t&&t(a,i),p=a})).catch(d.S),p.filter((e=>e.connected)).forEach((e=>y(e.id)))},b=e=>`camera_${e}`,f=e=>document.getElementById(b(e)),y=e=>{const t=p.find((t=>t.id===e));if(!t)return;const a=new Date;t.lastSnapshotAt&&t.nextSnapshotAt&&a{const n=p.find((t=>t.id===e)),o=b(e),r=document.querySelector(`#${o} .camera__no-snapshot`),l=document.querySelector(`#${o} .camera__snapshot`);if(r&&(0,s.yx)(r,!1),l&&((0,s.yx)(l,!0),l.src=t),n){const e=`${i.get("cache-control")}`.match(/max-age=(\d+)/);let s;e&&(s=parseInt(e[1],10)),s||(s=11);const o=i.get("expires"),r=i.get("last-modified"),l=e=>{const t=new Date;return new Date(t.getTime()+1e3*e)};n.nextSnapshotAt=o?new Date(o):l(s),n.nextSnapshotAt{e||(e=c);const t=e?p.find((t=>t.id===e)):null,a=document.getElementById("camera-snapshot-picture"),i=document.getElementById("camera-snapshot-time"),s=document.getElementById("camera-snapshot-name"),[n,o,r,l]=t?.lastSnapshotAt?[t.id,t.config.name,t.lastSnapshotAt.toLocaleString(),t.lastSnapshotUrl]:[null,"-","-",""];c=n,a&&(a.src=l),i&&(i.innerText=r),s&&(s.innerText=o)},w=(e,t,a=!1)=>{e.querySelector(".camera__name").innerText=t.config.name,e.querySelector(".camera__path").innerText=t.config.path||"-",e.querySelector(".camera__driver").innerText=t.config.driver||"-",e.querySelector(".camera__cloud").innerText=t.registered?(0,n.Iu)("camera.cloud.linked"):(0,n.Iu)("camera.cloud.not-linked");const i=e.querySelector(".camera__register"),o=e.querySelector(".camera__unregister"),r=e.querySelector(".camera__add"),l=e.querySelector(".camera__remove"),d=e.querySelector(".camera__settings");(0,s.yx)(i,u&&t.connected&&!t.registered),(0,s.yx)(o,u&&t.connected&&t.registered),(0,s.yx)(r,!1),(0,s.yx)(l,!t.connected),(0,s.yx)(d,t.connected),a&&(r.title=(0,n.Iu)("camera.btn.connect"),d.title=(0,n.Iu)("camera.btn.settings"),i.title=(0,n.Iu)("camera.btn.link"),o.title=(0,n.Iu)("camera.btn.unlink"),r.addEventListener("click",(e=>{e.stopPropagation(),z(t.id)}),!1),l.addEventListener("click",(e=>{e.stopPropagation(),S(t.id)}),!1),d.addEventListener("click",(e=>{e.stopPropagation(),P(t.id)}),!1),i.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"POST")}),!1),o.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"DELETE")}),!1))},x=(e,t)=>{(0,i.LK)(`/api/v1/cameras/${e}/connection`,{method:t}).then((()=>g())).catch(d.S)},z=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:t.config})}).then((()=>g())).catch(d.S)},S=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"DELETE"}).then((()=>g())).catch(d.S)},E=(e,t)=>{const a=document.getElementById("cameras-list");t.forEach((e=>{const t=f(e.id);t&&a.removeChild(t)})),e.sort(((e,t)=>t.connected-e.connected)).forEach((e=>{const t=f(e.id);if(t)w(t,e);else{const t=(e=>{const t=document.getElementById("camera-list-item")?.content;if(!t)return null;const a=document.importNode(t,!0),i=a.querySelector("li"),o=e.id;return i.addEventListener("click",(e=>{const t=p.find((e=>e.id===o));t&&t.connected&&k(t.id),e.preventDefault()}),!1),i.id=b(e.id),a.querySelector(".camera__path__label").innerText=(0,n.Iu)("camera.path"),a.querySelector(".camera__driver__label").innerText=(0,n.Iu)("camera.driver"),a.querySelector(".camera__cloud__label").innerText=(0,n.Iu)("camera.cloud.label"),(0,s.yx)(a.querySelector(".camera__snapshot"),!1),w(a,e,!0),a})(e);t&&a.appendChild(t)}}))},P=e=>new Promise(((t,a)=>{(0,r.o)(((e,t)=>t=>{const a=`/api/v1/cameras/${e}`,r=document.getElementById("modal-camera-settings"),c=document.importNode(r.content,!0),u=c.getElementById("camera-settings__name"),p=c.getElementById("camera-settings__focus"),g=l.L.init(c.getElementById("camera-settings__resolution"),"camera-settings__resolution"),h=l.L.init(c.getElementById("camera-settings__trigger-scheme"),"camera-settings__trigger-scheme"),b=c.getElementById("yes");return(0,i.LK)(a).then((e=>{const r=e.data,l=r.available_resolutions.sort(((e,t)=>e.width===t.width?t.height-e.height:t.width-e.width)).map(((e,t)=>`${e.width}x${e.height}`)),c=Object.keys(m),f=c.map((e=>v(e))),y=r.capabilities.includes("FOCUS");u.value=r.name,g.setOptions(l),g.value=`${r.resolution.width}x${r.resolution.height}`,h.setOptions(f),h.value=v(r.trigger_scheme),(0,s.yx)(p.parentNode,y),console.log(`DEBUG: has focus (${y})`,r),y&&(p.value=Math.round(100*r.focus)),b.addEventListener("click",(()=>{const[e,s]=g.value.split("x").map((e=>parseInt(e))),r=c[f.indexOf(h.value)],l=y?{focus:p.value/100}:{};(0,i.LK)(`${a}/config`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u.value,resolution:{width:e,height:s},trigger_scheme:r,...l})}).then((()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-config-success")))).catch(d.S).finally(t)}))})).catch(d.S),c.getElementById("no").addEventListener("click",(()=>t())),c})(e),{timeout:0,closeOutside:!1})})).then((()=>{lastUpdated=null,h()})),L={load:e=>{p=[],(0,n.Iu)("cameras.link",{query:"#title-status-label"}),h(e)},update:h,getCameraNode:f,getCameraNodeId:b,updateCurrentCamera:k}},732:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(646),n=a(5489),o=a(6648);var r=a(1351),l=a(4800);a(7838);let d=1,c=1;const u=e=>{(0,n.ZP)("control",e),function(e){const t=e.state,a=document.querySelectorAll("#control button"),i=["extrude","retract"],n=["flowrate","bed","nozzle","speed"],o=[...n,...i,"move-step","extrude-retract-step","heated-bed-xy-move"];if([l.PT.PRINTING||l.PT.BUSY||l.PT.PAUSED].includes(t)){const e=t===l.PT.PAUSED?o:n;a.forEach((t=>{const a=t.id||t.parentNode.id||t.parentNode.parentNode.id;(0,s.H)(t,!e.includes(a))}))}const r=e.telemetry.temperature.nozzle.current||0,d=e.printer.minExtrusionTemp||0,c=r&&d&&r>=d;i.forEach((e=>(0,s.H)(document.getElementById(e),!c)))}(e)};function p(e,t){if("move"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"jog",...e})}))(function(e){const t=e.includes("-"),a=e.replace(RegExp("[+-]"),"");return a?{[a]:t?-d:d}:(console.error(`"${e}" is not valid direction`),{})}(t)).catch((e=>(0,r.S)(e)))}else if("home"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"home",axes:e})}))(t.split(",")).catch((e=>(0,r.S)(e)))}}function m(e,t,a){function i(e){return Number.parseFloat(e.getAttribute("data-step"))}if(e){const n=e.querySelectorAll("button[data-step]"),o=e=>{n.forEach((t=>{i(t)===e?((0,s.H)(t),t.setAttribute("selected",!0)):((0,s.gL)(t),t.hasAttribute("selected")&&t.removeAttribute("selected"))}))};n.forEach((e=>{const t=i(e);isNaN(t)||(e.onclick=()=>{o(t),a(t)})})),o(t)}}const v={load:e=>{(0,i.Iu)("control.title",{query:"#title-status-label"}),function(e){function t(e,t){switch(e){case"bed":return i=t,(0,o.LK)("/api/printer/bed",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",target:i})});case"flowrate":return a=t,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"flowrate",factor:a})});case"nozzle":return(e=>(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",targets:{tool0:e}})}))(t);case"speed":return(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"speed",factor:e})}))(t);default:throw Error("Unknown property!")}var a,i}e&&e.querySelectorAll(".input-wrapper").forEach((e=>{const a=e.querySelector("input"),i=e.querySelector("button");if(a){const e=()=>{const e=a.getAttribute("data-action"),i=Number.parseFloat(a.value);isNaN(i)||t(e,i).then((e=>{a.value=""})).catch((e=>(0,r.S)(e)))};a.onkeyup=t=>{"Enter"===t.key&&(e(),a.blur())},i&&(i.onclick=e)}}))}(document.querySelector("#control")),m(document.querySelector("#control #move-step"),d,(e=>d=e)),m(document.querySelector("#control #extrude-retract-step"),c,(e=>c=e)),function(){const e=document.querySelector("#control #disable-steppers");e&&(e.onclick=()=>{(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"disable_steppers"})}).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #extrude");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #retract");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:-e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #heated-bed-xy-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),function(){const e=document.querySelector("#control #nozzle-z-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),u(e)},update:u}},5502:(e,t,a)=>{"use strict";a.d(t,{Z:()=>S});var i=a(7780);const s=(0,i.Iu)("prop.at"),n=(0,i.Iu)("unit.h"),o=(0,i.Iu)("prop.less-than"),r=(0,i.Iu)("unit.min"),l=((0,i.Iu)("unit.ml"),(0,i.Iu)("unit.rpm")),d=(0,i.Iu)("prop.today-at"),c=(0,i.Iu)("prop.tmw-at"),u=(0,i.Iu)("unit.b"),p=(0,i.Iu)("unit.kb"),m=(0,i.Iu)("unit.mb"),v=(0,i.Iu)("unit.gb"),g=(0,i.Iu)("prop.true"),h=(0,i.Iu)("prop.false");function b(e,t=!0,a=1){return e>0?t?e.toFixed(a):e:0}function f(e){const t=new Date(1e3*e);var a=localStorage.getItem("lang");return(t.toLocaleDateString(a,{year:"numeric",month:"numeric",day:"numeric"})+" "+t.toLocaleTimeString(a,{hour:"numeric",minute:"numeric"})).substring(0,25)}function y(e){let t="00:00";if(e){let a=new Date,i=new Date(a.getTime()+1e3*e),n=new Date(a);n.setDate(n.getDate()+1);let o="";if(i.getDate()==a.getDate()&&i.getMonth()==a.getMonth())o=`${d} `;else if(i.getDate()==n.getDate()&&i.getMonth()==n.getMonth())o=`${c} `;else{let e={month:"numeric",day:"numeric"};o=`${i.toLocaleString(window.navigator.language,e)} ${s} `}t=o+("0"+i.getHours()).substr(-2)+":"+("0"+i.getMinutes()).substr(-2)}return t}function k(e){if(e<60)return o;const t=Math.floor(e/60%60),a=Math.floor(e/3600);return(a>0?`${a} ${n}`:"")+(t>0?` ${t} ${r}`:"")}function w(e){let t=e;const a=[u,p,m,v];for(let e=0;e{if(void 0===t||null===t&&"progress"!==e)return(0,i.Iu)("prop.na");switch(e){case"number":return b(t);case"temp":return b(t)+" °C";case"temp_int":return b(t,0)+"°C";case"fan":return b(t)+` ${l}`;case"print":case"progressPct":return b(t||0,!0,0)+"%";case"pos":return b(t)+" mm";case"date":return f(t);case"time":return k(t);case"timeEst":return y(t);case"progress":return b(100*(t||0),!0,0)+"%";case"percent":return`${b(t||0,!0,0)}%`;case"material":return t||(0,i.Iu)("prop.na");case"size":return w(t);case"boolean":return x(t);case"diameter":return b(t,!0,2)+" mm";default:return t}},S=(e,t)=>z(e,t)},5412:(e,t,a)=>{"use strict";a.d(t,{L:()=>s});var i=a(5537);class s{set value(e){this._value=e,this.updateLabel()}get value(){return this._value}constructor(e,t,a){const i=this;this._label=t,this._ul=a,this._value=t.innerHTML,this.is_open=!1,this._options=[],this._onKeyDown=e=>{if(i.is_open){switch(e.key.toLowerCase()){case"escape":return void i.close();case"arrowdown":let e=!1;for(const t of this._ul.childNodes){if(e){this._highlight(t);break}t.classList?.contains("select")&&(e=!0)}break;case"arrowup":let t=null;for(const e of this._ul.childNodes){if(e.classList?.contains("select")){t&&this._highlight(t);break}t=e}break;case"enter":for(const e of this._ul.childNodes)if(e.classList.contains("select")){const t=e.innerText;this.value=t,this.onselect&&this.onselect(t),this.close();break}}e.preventDefault()}},this._onClick=t=>{const a=t.target.parentNode;if(!i.is_open)return!0;a!==e&&i.close()},window.addEventListener("keydown",this._onKeyDown,!1),window.addEventListener("click",this._onClick,!1),this.onselect=void 0,e.onclick=e=>{e.preventDefault(),this.is_open?this.close():this.open()}}_highlight(e){this._ul.childNodes.forEach((t=>{t===e?t.classList.add("select"):t.classList.remove("select")}))}destructor(){window.removeEventListener("keypress",this._onKeyPress),window.removeEventListener("click",this._onClick)}static init(e,t){let a=(0,i.Z)(e);const n=document.getElementById("dropdown-template"),o="dropdown"===a.getAttribute("data-type")?a:a.querySelector('select[data-type="dropdown"]');if(!o)return;o.after(document.importNode(n.content,!0));const r=o.nextElementSibling;r.id=t,o.remove();const l=r.querySelector(".dropdown-btn"),d=l.querySelector(".dropdown-label"),c=r.querySelector(".dropdown-content ul");return l&&d&&c?new s(l,d,c):void 0}setOptions(e){this._options=e}updateLabel(){this._label.innerHTML=this._value}select(e){this._label.innerHTML=e}open(){this._ul.classList.contains("open")||(this._options.forEach((e=>{const t=document.createElement("li");e===this._value&&(t.className="select selected"),t.innerText=e,t.onclick=()=>{this.select(e),this.value=e,this.onselect&&this.onselect(e),this.close()},t.onmouseover=()=>this._highlight(t),this._ul.appendChild(t)})),this._ul.classList.add("open")),this.is_open=!0}close(){for(this._ul.classList.remove(["open"]);this._ul.firstChild;)this._ul.removeChild(this._ul.firstChild);this.is_open=!1}}},1351:(e,t,a)=>{"use strict";a.d(t,{S:()=>n});var i=a(3707);let s={};function n(e,t){let a=e?.data?.title||t?.fallbackMessage?.title||"Error",n=e?.data?.message||t?.fallbackMessage?.message||"Action can not be performed",o=!1;if(e?.data){const t=e.data;t.code&&(a+=`- ${t.code}`,"7"==`${t.code}`[3]&&(o=!0)),t.url&&(n+=`
more info`)}const r=e?.data?.code||`${a}\n${n}`;if(s[r])return;s[r]=!0;const l=()=>s[r]=!1;o?(0,i.Kp)(a,n,l):(0,i.vU)(a,n,l)}},8236:(e,t,a)=>{"use strict";a.d(t,{o:()=>n});var i=a(7780);const s={count:0,current:0},n=(e,t={})=>{const a=Object.assign({timeout:5500,closeOutside:!0},t),n=s.count;s.count=s.count+1;const o=document.querySelector(".modal-box");t.className&&o.classList.add(t.className);const r=o.parentElement;for(;o.firstChild;)o.removeChild(o.firstChild);const l=()=>{n==s.current&&r.classList.contains("show-modal")&&(r.classList.remove("show-modal"),a.closeCallback&&a.closeCallback())},d=e=>{e.target===r&&l()};a.closeOutside&&window.addEventListener("click",d);const c=e(l);s.current=n,o.appendChild(c),(0,i.ot)(o),r.classList.add("show-modal"),a.timeout>0&&setTimeout(l,a.timeout)}},5951:(e,t,a)=>{"use strict";function i(e,t,a="right"){if(!e)return;const i=e.querySelector(".fill");if(i){const e=`${["top","right","bottom","left"].map((e=>(e=>e===a?100-(t||0)+"%":0)(e))).join(" ")}`;i.style.inset=e}}a.d(t,{g:()=>i})},2957:(e,t,a)=>{"use strict";a.d(t,{Z:()=>w});var i=a(7780),s=a(5489),n=a(6648),o=a(646),r=a(1351);var l=a(3707),d=a(8236);let c=null,u=null,p=null;const m=a(5493).Z,v=()=>(0,l.Vp)((0,i.Iu)("ntf.success"),(0,i.Iu)("ntf.settings-suc"));function g(e){const t=document.getElementById("api_key");t&&(t.innerText=e)}function h(e,t){(0,s.ZP)("con-settings",e.link),function(e,t){const a=document.getElementById("conn-prusa-connect-status"),i=document.getElementById("conn-prusa-connect-url"),s=document.getElementById("edit-connect-del"),n="FINISHED"===e.connect.registration,{hostname:r,tls:l,port:d}=e.connect.settings,{ok:c,message:u}=e.connect,m=c&&n,v=document.getElementById("conn-prusa-connect-status-"+(m?"ok":"not-ok")),g=`${l?"https":"http"}://${r}${d?`:${d}`:""}`,h=`(${g})`;(t||p!==g)&&(i.value=g,p=g);(0,o.QH)(i.parentNode.parentNode,n),s&&(0,o.yx)(s,n||!c);b(a,v,m,u,h)}(e.link,t),function(e,t){const a=document.getElementById("conn-printer-status"),{port:i,baudrate:s}=t.printer.settings,{ok:n,message:o}=t.printer,r=document.getElementById("conn-printer-status-"+(n?"ok":"not-ok"));b(a,r,n,o,`(${i||"/dev/ttyACM0"} @ ${s||0}bps)`)}(e.state,e.link)}function b(e,t,a,s,n){e&&e.setAttribute("ok",Boolean(a)),t&&(t.innerHTML=(a?(0,i.Iu)("conn.suc"):s)+"
"+n)}function f(e){switch(e.toLowerCase()){case"python":return(0,i.Iu)("sys-version.python");case"description":return(0,i.Iu)("sys-version.description");case"id":return(0,i.Iu)("sys-version.id");case"os":return(0,i.Iu)("sys-version.os");default:return e}}const y=(e,t,a)=>{const s=document.getElementById("modal-sysupgrade"),l=document.importNode(s.content,!0),d=l.getElementById("modal-sysupgrade__target"),c=l.getElementById("modal-sysupgrade__current"),p=l.getElementById("modal-sysupgrade__version"),m=l.getElementById("modal-sysupgrade__status"),v=l.getElementById("modal-sysupgrade__spinner"),g=l.getElementById("yes"),h=l.getElementById("no");return d.innerText=t,c.innerText=u,p.innerText=a,g.addEventListener("click",(t=>{t.preventDefault(),(0,o.H)(g,!0),(0,o.H)(h,!0),(0,o.yx)(g,!1),(0,o.yx)(h,!1),(0,o.yx)(v,!0),m.innerText=(0,i.Iu)("msg.sysupgrade.pending"),(0,n.LK)("/api/v1/update/prusalink",{method:"POST"}).then((()=>(m.innerText=(0,i.Iu)("msg.sysupgrade.wait-for-printer"),k(a)))).catch((e=>(0,r.S)(e))).finally((()=>{e(),window.location.href="/"}))})),h.addEventListener("click",(()=>e())),l},k=e=>new Promise(((e,t)=>{const a=()=>(0,n.LK)("/api/version").then((t=>{e()})).catch((e=>setTimeout(a,2500)));setTimeout(a,5e3)})),w={load:e=>{(0,i.Iu)("settings.title",{query:"#title-status-label"}),(0,n.LK)("/api/version?system=1").then((e=>{const t={version:e.data};u=t.version.server,(0,s.ZP)("settings",t),function(e){const t=document.querySelector("#sys-version .table");if(t)for(const[a,i]of Object.entries(e.version.system)){const e=document.createElement("div");e.className="row";const s=document.createElement("div");s.className="col txt-sm",s.innerHTML=`

${f(a)}

`,e.appendChild(s);const n=document.createElement("div");n.className="col txt-md",n.innerHTML=`

${i}

`,e.appendChild(n),t.appendChild(e)}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.getElementById("updates-check"),t=document.getElementById("updates-check__spinner"),a=a=>{a&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(t,a),(0,o.gL)(e,!a)};e&&t&&(e.onclick=()=>{a(!0),(0,n.LK)("/api/v1/update/prusalink").then((t=>{const a=t.data?.new_version,s=[{name:"PrusaLink",new_version:a}],n=e.parentNode.parentNode.parentNode;s.forEach((e=>{const t=document.createElement("div"),a=document.createElement("div"),s=document.createElement("p"),o=document.createElement("div"),r=document.createElement("p"),l=document.createElement("div"),c=document.createElement("span"),p=document.createElement("span"),m=document.createElement("span"),v="PrusaLink";if(t.className="row update-pkg",a.className="col",o.className="col",l.className="col",s.className="txt-bold txt-grey txt-sm",r.className="txt-md",c.className="txt-grey txt-sm",m.className="txt-grey txt-sm",s.innerText=v,p.innerHTML=" → ",e.new_version){c.innerText=u,m.innerText=e.new_version;const t=document.createElement("button"),a=document.createElement("p");a.innerText=(0,i.Iu)("btn.upgrade"),t.className="action",t.appendChild(a),l.appendChild(t),t.onclick=()=>(0,d.o)((t=>y(t,v,e.new_version)),{timeout:0,closeOutside:!1})}else m.innerText="The package is up to date";r.appendChild(c),r.appendChild(p),r.appendChild(m),a.appendChild(s),o.appendChild(r),t.appendChild(a),t.appendChild(o),t.appendChild(l),n.appendChild(t)}))})).catch((e=>(0,r.S)(e))).finally((()=>a(!1)))})}(),function(e){h(e,!0),document.getElementById("edit-connect-del").addEventListener("click",(t=>{(0,n.LK)("/api/connection",{method:"DELETE"}).then(v).catch((e=>(0,r.S)(e))).finally((()=>e.updateConnection()))}));const t=document.getElementById("edit-connect-set"),a=document.getElementById("edit-connect-set__spinner"),i=e=>{e&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(a,e),(0,o.gL)(t,!e)};t.addEventListener("click",(t=>{i(!0);const a=document.getElementById("conn-prusa-connect-url")?.value;if(!a)return;const s=new URL(a);(0,n.LK)("/api/connection",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connect:{hostname:s.hostname,port:s.port?parseInt(s.port):0,tls:s.protocol.startsWith("https")?1:0}})}).then((t=>{const a=t?.data?.url;a&&window.open(a,"_blank"),setTimeout((()=>{e.updateConnection().finally((()=>i(!1)))}),5e3)})).catch((e=>{i(!1),(0,r.S)(e)}))}))}(e),(0,n.LK)("/api/settings").then((e=>{const t=e.data;!function(e){const t=document.querySelector("#settings #printer-name"),a=document.querySelector("#settings #printer-location"),i=document.querySelector("#settings #printer-network_error_chime"),s=document.querySelector("#settings #edit-printer"),l=()=>{(0,o.gL)(s,t.value.length>0&&a.value.length>0)};t.oninput=l,a.oninput=l,i.oninput=l,t.value=e.printer?.name||"",a.value=e.printer?.location||"",i.checked=!!e.printer?.network_error_chime,"api-key"in e&&g(e["api-key"]),s.onclick=()=>{(({name:e,location:t,network_error_chime:a})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({printer:{name:e,location:t},network_error_chime:a})}))({name:t.value,location:a.value,network_error_chime:i.checked}).then((()=>v())).catch((e=>(0,r.S)(e)))},l()}(t),function(e){const t=document.querySelector("#settings #username"),a=document.querySelector("#settings #password"),i=document.querySelector("#settings #new-password"),s=document.querySelector("#settings #re-password"),l=document.querySelector("#settings #edit-user"),d=()=>{(0,o.gL)(l,a.value.length>0&&(t.value.length>0||i.value.length>0&&s.value.length>0))};t.oninput=d,a.oninput=d,i.oninput=d,s.oninput=d,t.value=e.username||"",d(),l.onclick=()=>{((e,{username:t,newPassword:a,rePassword:i})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:{password:e,username:t,new_password:a,new_repassword:i}})}))(a.value,{username:t.value||void 0,newPassword:i.value||void 0,rePassword:s.value||void 0}).then((()=>v())).catch((e=>(0,r.S)(e)))}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.querySelector("#settings #serial"),t=document.querySelector("#settings #edit-serial"),a=()=>{if(e&&t){c&&(e.value=`${c}`);const i=()=>{(0,o.gL)(t,!c&&e.value.length>0),(0,o.yx)(t,!c)};i(),e.oninput=i,(0,o.gL)(e,!c);const s=()=>{var t;(t=e.value,(0,n.LK)("/api/settings/sn",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:t})})).then((e=>{c=e.data.serial,v()})).catch((e=>(0,r.S)(e))).finally((()=>a()))};e.onkeyup=t=>{"Enter"===t.key&&(s(),e.blur())},t.onclick=s}};(0,n.LK)("/api/settings/sn",{headers:{"Content-Type":"application/json"}}).then((e=>{c=e.data.serial})).catch((e=>(0,r.S)(e))).finally((()=>a()))}(),function(){const e=document.getElementById("api_key-reset");e&&e.addEventListener("click",(()=>{(0,n.LK)("/api/settings/apikey",{method:"POST"}).then((e=>{g(e.data["api-key"]),v()})).catch((e=>(0,r.S)(e)))}),!1)}(),m?.load(),e.updateConnection()},update:e=>{m?.update(),h(e,!1)}}},5493:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(6648),n=a(1972),o=a(5412),r=a(1351),l=a(5502);let d=null,c=null;const u=67108864;function p(e){return`
  • ${e}
  • `}const m=()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files;if(d){const e=t.find((e=>e.name===d));e&&(!c||e.date>c)&&(c=e.date,e.size>u?function(){const e=document.querySelector("ul.logs"),t=(0,i.Iu)("logs.file-too-large",{size:(0,l.Z)("size",u)});e&&(e.innerHTML=p(t))}():(a=d,(0,s.iT)(`/api/logs/${a}`).then((e=>{const t=document.querySelector("ul.logs");t&&(e.data?t.innerHTML=e.data.split("\n").map((e=>p(e))).join(""):t.innerHTML=p((0,i.Iu)("logs.empty-file")))}))))}var a})).catch((e=>(0,r.S)(e)))},v={load:()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files,a=o.L.init("settings","log-list"),s=t.map((e=>e.name)),r=(0,i.Iu)("logs.select-file-placeholder");a.setOptions(s),a.select(r),a.onselect=e=>{!function(e){d=e,c=null,document.getElementById("download-log").onclick=()=>{(0,n.Z)(`/api/logs/${e}`,e)},m()}(e)}})).catch((e=>(0,r.S)(e)))},update:m}},3707:(e,t,a)=>{"use strict";a.d(t,{Kp:()=>o,Vp:()=>r,vU:()=>l});const i=document.getElementById("prusa-toast"),s={info:10500,success:10500,warning:10500,error:10500};function n({title:e,message:t,type:a,onClose:n}){const o=((e,t,a)=>{const i=document.getElementById("toast"),s=document.importNode(i.content,!0),n=s.querySelector("article");return n.className=a,s.querySelector("p").innerHTML=e,s.querySelector(".toast-body").innerHTML=t,n})(e,t,a),r=()=>{i.removeChild(o),n?.()};o.querySelector("span").addEventListener("click",(e=>{e.preventDefault(),r()}));const l=s[a];l&&setTimeout(r,l),i.appendChild(o)}function o(e,t,a){n({type:"warning",title:e,message:t,onClose:a})}function r(e,t,a){n({type:"success",title:e,message:t,onClose:a})}function l(e,t,a){n({type:"error",title:e,message:t,onClose:a})}},5489:(e,t,a)=>{"use strict";a.d(t,{NA:()=>n,ZP:()=>r,zR:()=>o});var i=a(646),s=a(5502);const n=(e,t)=>{try{const a=e.split(".");let i=t;for(;a.length;)i=i[a.shift()];return i}catch(e){return}},o=(e,t)=>{document.querySelectorAll(`[data-type="${e}"]`).forEach((e=>{const a=e.dataset.where,o=e.dataset.zeroes,r=a?n(a,t):t;e.innerHTML=(0,s.Z)(e.dataset.format,r),(0,i.QH)(e,"hide"===o&&!r)}))},r=o},2038:(e,t,a)=>{"use strict";a.d(t,{$:()=>r,i:()=>l});var i=a(8236),s=a(646),n=a(4800),o=a(7780);const r=(e,t,a)=>{const i=document.getElementById("modal-question"),n=document.importNode(i.content,!0),r=n.getElementById("modal-question-label"),l=document.createElement("p"),d=document.createElement("p");l.className="txt-sm my-md txt-bold",l.innerText=t,r.innerText=(0,o.Iu)("msg.file-exists.title"),d.innerText=(0,o.Iu)("msg.file-exists.overwrite-it"),r.parentNode.append(l),r.parentNode.append(d);const c=n.getElementById("yes"),u=n.getElementById("no");return u.addEventListener("click",e),c.addEventListener("click",(t=>{t.preventDefault(),(0,s.H)(c,!0),(0,s.H)(u,!0),a(),e()})),n},l=e=>{e.addEventListener("change",(t=>{e.checked&&e.getAttribute("data-link-state")!==n.PT.READY&&(0,i.o)((t=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),n=i.getElementById("yes"),o=i.getElementById("no");return n.addEventListener("click",(a=>{a.preventDefault(),(0,s.H)(n,!0),(0,s.H)(o,!0),t.checked=!0,e()})),o.addEventListener("click",(()=>{t.checked=!1,e()})),i})(t,e)),{timeout:0,closeOutside:!1})}))}},7049:(e,t,a)=>{"use strict";a.d(t,{Z:()=>k});var i=a(6648),s=a(1351),n=a(646),o=a(3707),r=a(7780),l=a(5951),d=a(2038),c=a(5489),u=a(4800),p=a(8495);let m=!1,v=null;function g(e){const t=p.Z.getContext(),a=u.cG.includes(e),i=document.querySelector("#upld-remote-start-pt");if(i&&(i.setAttribute("data-link-state",e),a||(i.checked=!1),(0,n.H)(i,!a)),t.transfer?.id){y("uploading"),(0,c.ZP)("download",t.transfer);const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.transfer.progress||0)}else y("choose")}function h(e){const t=e.data;if(![200,201,204].includes(e.code))return(0,s.S)(e),void f();if(t){if("FROM_WEB"===t.type){y("uploading"),(0,c.ZP)("download",{...t,time_start:t.time_transferring?Math.round((new Date).getTime()/1e3)-t.time_transferring:null});const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.progress||0)}}else{if(m)return function(){const e=(0,r.Iu)("ntf.success"),t=(0,r.Iu)("ntf.upld-suc",{file_name:""});(0,o.Vp)(e,t)}(),void f();y("choose")}}const b=(e,t,a,s)=>{if("local"===t)return e=e.split("?")[0].split("&")[0].split("#")[0],(0,i.LK)(`/api/download/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e,destination:a,...s})}).then((e=>function(e){y("uploading");const t=document.querySelector("#upld-remote .progress-bar");(0,l.g)(t,0);const a=(0,r.Iu)("ntf.success"),i=(0,r.Iu)("ntf.upld-start");(0,o.Vp)(a,i)}())).catch((e=>h(e)));(0,o.vU)("Can't upload to "+t,"You can upload only to local storage via remote upload!")};function f(){y("choose"),function(e){const t=document.querySelector("#upld-remote .progress-bar");t&&(0,l.g)(t,e||0)}(0),(0,c.ZP)("download",{}),v=null}function y(e){m="uploading"==e;const t=document.getElementById("upld-remote");t&&t.setAttribute("data-state",e)}const k={init:function(e,t){const a=document.getElementById("upld-remote");if(a){const i=a.querySelector("#remote-url"),s=a.querySelector("#remote-file-name"),o=a.querySelector("#upld-file"),r=a.querySelector("#upld-remote-start-pt");r&&(0,d.i)(r),o.onclick=()=>b(i.value,e,t,{to_print:r.checked,rename:s.value});const l=()=>{(0,n.H)(o,""===i.value)};l(),i.oninput=l}g()},update:g,get isUploading(){return m}}},7838:(e,t,a)=>{"use strict";a.r(t),a.d(t,{context:()=>Ve,default:()=>Xe});var i=a(7780);const s=500;let n=100,o=new Map;const r=(e,t)=>{o=e,n=t};function l(){const e=document.getElementById("graph");e&&(0==e.childElementCount&&function(){const e=document.getElementById("graph-template"),t=document.importNode(e.content,!0);document.getElementById("graph").appendChild(t),(0,i.ot)("graph")}(),o.forEach(((e,t)=>{!function(e,t){const a=(new Date).getTime();let i=[];if(e.length>1){let t=e[0],o=s-2.66*(a-t[0]-1e4)/1e3;for(let e=1;e1&&e[1][0]{var n=new XMLHttpRequest;const o=()=>{s(void 0)};!function(e,t){if(t){const a=e=>{if(!e.lengthComputable)return;let a=Math.round(e.loaded/e.total*100);t({loaded:e.loaded,total:e.total,percentage:a})};e.upload.addEventListener("progress",a,!1)}}(n,a.onProgress),n.addEventListener("load",(e=>{const t=function(e){function t(e){try{return JSON.parse(e)}catch{return}}return{status:e.status,statusText:e.statusText,ok:e.status>=200&&e.status<=299,data:t(e.response)}}(e.target);t.ok?i(t):s(t)}),!1),n.addEventListener("error",o,!1),n.addEventListener("abort",o,!1),n.open("PUT",`${m.O2}${e}`),a.print&&n.setRequestHeader("Print-After-Upload","?1"),n.setRequestHeader("Overwrite","?1"),n.setRequestHeader("Content-Type","text/x.gcode");for(const[e,t]of Object.entries((0,m.wU)()))n.setRequestHeader(e,t);n.send(t)}))};var g=a(2038),h=a(4800),b=a(8236);let f=!1,y=0;function k(e,t,a,i,s){const n=document.querySelector(e);n&&(n.setAttribute("accept",i.join(", ")),n.onchange=()=>{if(n.files.length>0&&!f){let e=n.files[0];S(e,t,a,s?.checked||!1)}})}function w(){[document.querySelector('#upld-direct input[type="file"]'),document.querySelector('#drop-zone input[type="file"]')].filter((e=>!!e)).forEach((e=>e.value="")),z(0),x("choose")}function x(e){f="uploading"===e;const t=document.getElementById("upld-direct");t&&t.setAttribute("data-state",e)}function z(e){y=e;const t=document.getElementById("upld-progress");t&&(t.innerHTML=`${e} %`)}const S=(e,t,a,s)=>{const n=["/api/v1/files",t,a,e.name].filter((e=>!!e)).join("/"),o=e.display_name||e.name,r=()=>e.arrayBuffer().then((e=>{x("uploading"),z(0),v(n,e,{onProgress:e=>{return t=e.percentage,x("uploading"),void z(t);var t},print:s}).then((()=>function(e){const t=(0,i.Iu)("ntf.success"),a=(0,i.Iu)("ntf.upld-suc",{file_name:e});(0,c.Vp)(t,a)}(o))).catch((e=>function(e,t){if(t)(0,u.S)(t);else{const t=(0,i.Iu)("ntf.error"),a=(0,i.Iu)("ntf.upld-unsuc",{file_name:e});(0,c.vU)(t,a)}}(o,e))).finally((()=>w()))}));(0,m.LK)(n,{method:"HEAD"}).then((()=>{try{(0,b.o)((e=>(0,g.$)((()=>{e(),w()}),o,r)),{timeout:0,closeOutside:!1})}catch(e){console.error("Modal error",e)}})).catch((()=>r()))};const E={init:function(e,t,a){(0,i.Iu)("upld.direct.choose",{query:"#upld-direct p",file:a.join(", ")}),function(e,t,a){const i=document.getElementById("upld-direct-start-pt");i&&(0,g.i)(i);const s=document.getElementById("drop-zone");s&&(document.ondragenter=e=>(0,p.yx)(s,!0),s.ondragleave=e=>(0,p.yx)(s,!1),document.ondrop=e=>(0,p.yx)(s,!1),k('#drop-zone input[type="file"]',e,t,a,i));k('#upld-direct input[type="file"]',e,t,a,i)}(e,t,a),f&&(x("uploading"),z(y))},update:function(e){const t=h.cG.includes(e),a=document.querySelector("#upld-direct-start-pt");a&&(a.setAttribute("data-link-state",e),t||(a.checked=!1),(0,p.H)(a,!t))},get isUploading(){return f},initInputByQuery:k};const P=class{get selected(){return this._selected}get isLocked(){return this._isLocked}lock(){this._isLocked=!0,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.getAttribute("data-tab-btn")!==this.selected&&e.setAttribute("locked",!0)}))}unlock(){this._isLocked=!1,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.hasAttribute("locked")&&e.removeAttribute("locked")}))}constructor(){this._root=null,this._selected=null,this._isLocked=!1}init(e){this._root=e,this._root&&(e.querySelectorAll("[data-tab-btn]").forEach((e=>{e.onclick=()=>{if(!this._isLocked){const t=e.getAttribute("data-tab-btn");t===this._selected||(this.closeTab(),this.openTab(t))}}})),this.openTab(this._selected,!0))}openTab(e){if(this._root&&e){const t=this._root.querySelector(`[data-tab="${e}"]`);t&&t.setAttribute("opened",!0);const a=this._root.querySelector(`[data-tab-btn="${e}"]`);a&&a.setAttribute("selected",!0),this._selected=e}}closeTab(){if(this._root&&this._selected){const e=this._root.querySelector(`[data-tab="${this._selected}"]`);e&&e.setAttribute("opened",!1);const t=this._root.querySelector(`[data-tab-btn="${this._selected}"]`);t&&t.setAttribute("selected",!1),this._selected=null}}},L=a(7049).Z,N=new P;function I(){E.isUploading?(N.openTab("direct"),N.lock()):L?.isUploading?(N.openTab("remote"),N.lock()):(N.unlock(),N.selected||N.openTab("direct"))}const _={init:function(e,t="",a){E.init(e,t,a),L?.init(e,t),N.init(document.getElementById("upld")),I()},update:function(e){E?.update(e),L?.update(e),I()},hide:function(e){(0,p.QH)(document.getElementById("upld"),e)}};var T=a(2451),j=a(5489),C=a(8751);const A=e=>(0,m.LK)(e,{method:"POST",headers:{"Content-Type":"application/json"}}),D=e=>(0,m.LK)(`/api/v1/job/${e}/resume`,{method:"PUT"}).catch((e=>(0,u.S)(e))),B=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const s=document.getElementById("modal-question"),n=document.importNode(s.content,!0);n.getElementById("modal-question-label").innerText=(0,i.Iu)("msg.cancel");const o=n.getElementById("yes"),r=n.getElementById("no");return o.addEventListener("click",(i=>{i.preventDefault(),t.onConfirm(),(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(`/api/v1/job/${a}`,{method:"DELETE",headers:{"Content-Type":"application/json"}}).catch((e=>{t.onError(),(0,u.S)(e)})),e()})),r.addEventListener("click",e),n})(a,t,e)),{timeout:0,closeOutside:!1})},O=(e,t)=>{e?(0,b.o)((e=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),s=i.getElementById("yes"),n=i.getElementById("no");return s.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(s,!0),(0,p.H)(n,!0),A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e))).finally((()=>e()))})),n.addEventListener("click",e),i})(e,t)),{timeout:0,closeOutside:!1}):A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e)))},q=()=>(0,m.LK)("/api/job",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"cancel"})}).catch((e=>(0,u.S)(e)));var M=a(1972);const R=(e,t,a)=>{(0,M.Z)(e,t),a()},H=(e,t,a,s,n=!1)=>{const o=document.getElementById("modal-question"),r=document.importNode(o.content,!0);r.getElementById("modal-question-label").innerText=n?(0,i.Iu)("msg.del-folder",{folder_name:a}):(0,i.Iu)("msg.del-proj",{file_name:a});const l=r.getElementById("yes"),d=r.getElementById("no");return d.addEventListener("click",e),l.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(l,!0),(0,p.H)(d,!0),(0,m.LK)(t,{method:"DELETE",headers:{force:"?1"}}).then((()=>s&&s())).catch((e=>(0,u.S)(e))).finally((t=>e()))})),r},U=(e,t,a)=>{(0,b.o)((i=>H(i,e,t,a)),{timeout:0,closeOutside:!1})},Z=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const i=document.getElementById("modal-file-name"),s=document.importNode(i.content,!0),n=s.getElementById("modal-file-name__input"),o=s.getElementById("yes"),r=s.getElementById("no");return r.addEventListener("click",e),o.addEventListener("click",(i=>{i.preventDefault();const s=n.value;if(s){const i=t(s);(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(i,{method:"PUT",headers:{"create-folder":"?1"}}).then((()=>a&&a())).catch((e=>(0,u.S)(e))).finally((t=>e()))}})),s})(a,e,t)),{timeout:0,closeOutside:!1})};function K(e){return`inset(${100-e}% 0% 0% 0%)`}var V=a(5951);const F={},$=()=>{F.title=null,F.questionChildren=null,F.yes=null,F.no=null,(0,C.g9)(F.next)},G={load:()=>{F.title||(0,C.c4)("#dashboard"),document.getElementById("title-status-label").innerHTML=F.title;const e=document.getElementById("question"),t=F.questionChildren;Array.isArray(t)?t.forEach((t=>e.appendChild(t))):e.innerHTML=t;for(let e of["yes","no"]){const t=document.getElementById(e),a=F[e];t.querySelector("p").innerHTML=F[e+"Text"],t.addEventListener("click",(e=>{e.stopPropagation(),a($)}))}}};(0,i.Iu)("exp-times.exp-time"),(0,i.Iu)("exp-times.inc"),(0,i.Iu)("exp-times.layer-1st"),(0,i.Iu)("exp-times.profile");const W=e=>{const t=e.querySelector("img");(0,p.gL)(e,!1),t&&(t.setAttribute("data-src",t.src),t.src=document.querySelector(".loading-overlay img").src)},Y=e=>{const t=e.querySelector("img");if((0,p.gL)(e,!0),t){const e=t.getAttribute("data-src");e&&(t.src=e,t.setAttribute("data-src",""))}};var J=a(8495);let Q=null,X=null;function ee(e,t=!1){const a=te(e,t);Q&&Q.state!==e.state&&(Q=null),a&&ae(e,t)}function te(e,t){const a=document.getElementById("job");if(!a)return!1;const i=t?!!e.files.selected:!!e.job?.id;return(0,p.yx)(a,i),i}function ae(e,t){const a=t?e.files.selected:e.job,s=a?.file?.resource;e.state;var n;if(a.file?(0,p.Zk)():(0,p.QP)(),function(e,t){const a=document.querySelector(".progress-bar"),i=document.querySelector(".progress-pct"),s=document.querySelector(".preview-img-wrapper"),n=void 0!==t;(function(e,t,a){if(!e)return;const i=t?.url&&t.ready?t.url:document.querySelector(".thumbnail-fallback")?.src;if(e.getAttribute("data-src")!==i){for(;e.firstChild;)e.removeChild(e.firstChild);e.setAttribute("data-src",i);const t=document.createElement("div");t.className="progress-img";const s=document.createElement("img");s.src=i,s.className="background",t.appendChild(s);const n=document.createElement("img");n.src=i,n.className="foreground",n.style.clipPath=K(a??100),t.appendChild(n),e.appendChild(t)}else{const t=e.querySelector(".foreground");t&&(t.style.clipPath=K(a))}})(s,e,t),(0,V.g)(a,t,"top"),(0,p.yx)(a,n),(0,p.yx)(i,n)}(a.thumbnail,a.progress),n=t,(0,p.QH)(document.querySelector("#job #pnt-time"),n),(0,p.QH)(document.querySelector("#job #rem-time"),n),(0,j.ZP)("job",a),s&&a.file){const s=t?null:a.id;!function(e,t,a){const i=t.file;(function(e,t){const a=document.querySelector("#job #stop"),i=document.querySelector("#job-close"),s=h.PT.fromApi(e),n=h.cG.includes(s),o=!Q&&h.Dt.includes(e),r=J.Z.getContext();if((0,p.gL)(a,o),a&&t){const i=t||!1;(0,p.yx)(a,i),a.onclick=()=>{B(t,{onConfirm:()=>{Q={code:"stop",state:e},(0,p.gL)(a,!1)},onError:()=>Q=null})}}i&&((0,p.yx)(i,n||!t),i.onclick=t?q:()=>r.selectFile(null))})(e,a),function(e,t,a){const i=document.querySelector("#job #start"),s=h.cG.includes(e);i&&((0,p.yx)(i,s),(0,p.gL)(i,s),i.onclick=()=>O(e!==h.PT.READY,t.resource))}(e,i),ie(e,i,a),function(e,t,a){const i=document.querySelector("#job #download");if(i){const e=!a&&t.refs?.download&&(!X||X===t.refs.download),s=t.display_name||t.name;(0,p.yx)(i,e),e&&(i.onclick=()=>{X=t.refs.download,W(i),R(t.refs.download,s,(()=>{X=null,Y(i)}))})}}(0,i,a),!a||(function(e,t,a){const i=document.querySelector(a),s=e===h.PT.PRINTING;(0,p.yx)(i,s),(0,p.gL)(i,!Q&&s),i&&(i.onclick=()=>{(0,p.gL)(i,!1),Q={code:"pause",state:e},(e=>(0,m.LK)(`/api/v1/job/${e}/pause`,{method:"PUT"}).catch((e=>(0,u.S)(e))))(t).catch((()=>Q=null))})}(e,a,"#job #pause"),function(e,t){const a=document.querySelector("#job #resume"),i=e===h.PT.PAUSED;(0,p.yx)(a,i),(0,p.gL)(a,!Q&&i),a&&(a.onclick=()=>{(0,p.gL)(a,!1),Q={code:"resume",state:e},D(t).catch((()=>Q=null))})}(e,a))}(e.state,a,s),(0,j.ZP)("file",a.file),function(e,t){const a=(0,i.Iu)("prop.na");document.getElementById("job").querySelectorAll(".job-details .job-prop").forEach((e=>{const t=e.querySelector(".job-prop-grid").children;let i=!0;for(const e of t){var s=e.querySelector("[data-type]")?.innerHTML.trim()===a;(0,p.QH)(e,s),s||(i=!1)}(0,p.QH)(e,i)}))}()}}function ie(e,t,a){const i=document.querySelector("#job #delete");if(i){const s=t.display_name||t.name;(0,p.gL)(i,!t.readOnly&&t.resource),(0,p.yx)(i,!a||e===h.cG.includes(e)),i.onclick=()=>{U(t.resource,s,(()=>{a||Ve.selectFile(null)}))}}}p.QP,p.Zk;const se=e=>[...e].filter((e=>!!e)).map((e=>e.trim())).join(" - "),ne=e=>{if(!e.printer)return;const t=e.state;ee(e),_.update(t),T.Z.update(e,null)},oe={load:e=>{(0,i.Iu)("home.link",{query:"#title-status-label"}),l(),ne(e),T.Z.update(e,null),T.Z.updateCurrentCamera(),(0,m.LK)("/api/v1/storage").then((t=>{const a=t.data.storage_list.find((e=>e.available&&!e.read_only));if(a){const t=a.path.replace("/","");_.init(t,"",e.fileExtensions)}}))},update:ne};var re=a(5502);const le=function(e,t="smooth"){if(!e)return;const a=e.getBoundingClientRect(),i=document.body.getBoundingClientRect(),s=a.top-(i.top+function(){const e=document.querySelector(".header");return e&&"sticky"===getComputedStyle(e).position?e.getBoundingClientRect().height:0}());(a.bottom>window.innerHeight||a.top<0)&&window.scroll({top:s,behavior:t})};var de=a(5537);const ce=e=>{const t=(0,de.Z)(e).querySelector(".kebab"),a=t.querySelector(".kebab-menu"),i=t.querySelector("ul");a.addEventListener("click",(e=>{e.stopPropagation(),function(e){return e&&e.classList.contains("open")}(i)?ue(i):function(e,t){e.classList.add("open"),(0,p.Ti)((()=>ue(e)),e,t)}(i,a)})),i.querySelectorAll("li").forEach((e=>{e.addEventListener("click",(()=>ue(i)))}))};function ue(e){e.classList.remove("open")}const pe=e=>{const t=document.querySelectorAll(".storage-select-content li");t&&t.forEach((t=>t.setAttribute("selected",t.getAttribute("data-storage")===e)))},me=e=>{const t=document.querySelector("#node-storage .storage-select-btn-inner");t&&(t.innerHTML=e)},ve=(e,t)=>{e&&t&&(t.classList.toggle("open"),(0,p.Ti)((()=>{t?.classList.remove("open")}),e,t))},ge=e=>{const t=document.querySelector(".node-storage-space");if(!t)return;const a=e.available&&!!e.totalSpace;if((0,p.yx)(t,a),a){const a=e.freeSpace,s=e.totalSpace,n=s-a,o=Math.round(100*(s?n/s:0)),r=(0,i.Iu)("prop.storage-used-space",{used:(0,re.Z)("size",n),free:(0,re.Z)("size",a),total:(0,re.Z)("size",s)});(0,V.g)(t,o),document.getElementById("storage-pct").innerHTML=(0,re.Z)("percent",o),document.getElementById("storage-space").innerHTML=r}},he=()=>{const e=document.querySelector("#node-storage .storage-select-btn");e&&(e.onclick=t=>{t.stopPropagation(),ve(e,dropdownContent)})},be=(e,t,a,i=!1)=>{const s=document.querySelector(".storage-select-content");document.querySelectorAll(".storage-select-content li").forEach((i=>{const n=i.getAttribute("data-storage");let o=!1;if(n in e){const r=e[n],l=i.querySelector("p");o=!0,r.name&&(l.innerText=r.name),i.setAttribute("selected",n===t),i.onclick=e=>{e.stopPropagation(),me(i.innerHTML),pe(n),s.classList.remove("open"),ge(r),a(n)}}(0,p.yx)(i,o)})),i&&ge(e[t])},fe="FOLDER",ye="PRINT_FILE",ke="FIRMWARE",we=["name","date","size"];let xe=null;const ze={origin:null,current_path:[],storages:{},files:[],eTag:null,sort:{field:"date",order:"desc"}};function Se(){const e=ze.origin;return ze.storages[e]}function Ee(){return ze.current_path.map((e=>e.path)).join("/")}function Pe(e){const t=Se(),a=Ee();return Le(t.path,a,e)}function Le(e,t,a){const i=["/api/v1/files",e,t,a].filter((e=>!!e)).join("/");return a?i:`${i}/`}const Ne=(e={})=>{(0,m.LK)("/api/v1/storage",{}).then((t=>{const a=t.data?.storage_list;let i=!!e.redraw,s=!!e.redraw;if(a&&a.forEach((e=>{const t=e.type,a={name:e.name,path:e.path.replaceAll("/",""),available:e.available,readOnly:e.read_only,freeSpace:e.free_space,totalSpace:e.total_space};if(t in ze.storages){const e=ze.storages[t];e.available!==a.available&&(i=!0),e.freeSpace!==a.freeSpace&&ze.origin===t&&(s=!0)}else i=!0,s=!0;ze.storages[t]=a})),!ze.origin){let e=Object.keys(ze.storages).find((e=>ze.storages[e].available));e||(e=Object.keys(ze.storages).find((()=>!0))),e&&Oe(e)}i&&be(ze.storages,ze.origin,Oe,s)}))},Ie=(e={})=>{if(!Se())return;const t=Pe();let a=ze.eTag;e.force&&(ze.eTag=null,a=null,function(e){const t=Se(),a=Ee();_.init(t.path,a,e?.fileExtensions),_.hide(!1!==t?.readOnly)}(J.Z.getContext()));const i=e=>{ze.files=e,_e(),Te()};(0,m.LK)(t,{headers:{"If-None-Match":a}}).then((s=>{if(t!==Pe())return;const n=s.eTag;if(!n||n!==a){ze.eTag=n;const t=s.data.children||[];if(!n&&!e.force){const e=(e,t)=>e.display_name.localeCompare(t.display_name);if(JSON.stringify([...ze.files].sort(e))===JSON.stringify(t.sort(e)))return}i(t)}})).catch((()=>{ze.eTag=null,i([]),J.Z.getContext().selectFile(null)}))},_e=()=>{const e=document.getElementById("files");if(e){for(;e?.firstChild;)e.removeChild(e.firstChild);e.appendChild(function(){const e=Se(),t=[e.name,...ze.current_path.map((e=>e.name))],a=je("node-current",t.pop()||"Root");a.getElementById("path").innerHTML=`${t.join("/")}/`;const s=a.getElementById("create");s&&(s.onclick=e=>{e.stopPropagation(),Z(Pe)});(0,p.H)(s,!1!==e.readOnly),a.querySelector("#sort-by-name p").innerText=(0,i.Iu)("sort.by-name"),a.querySelector("#sort-by-date p").innerText=(0,i.Iu)("sort.by-date"),a.querySelector("#sort-by-size p").innerText=(0,i.Iu)("sort.by-size");return a.querySelector(`#sort-by-${ze.sort.field}`).classList.add(ze.sort.order),we.forEach((e=>{a.getElementById(`sort-by-${e}`).addEventListener("click",(t=>{const a=document.getElementById(`sort-by-${e}`);document.getElementById(`sort-by-${ze.sort.field}`).classList.remove(ze.sort.order);const i=ze.sort.field===e&&"asc"===ze.sort.order?"desc":"asc";a.classList.add(i),ze.sort.field=e,ze.sort.order=i,_e(),Te()}),!1)})),a}()),ze.current_path.length&&e.appendChild(function(){const e=je("node-up","",(()=>{ze.current_path.pop(),_e(),Ie({force:!0})}));return(0,i.ot)(e),e}())}},Te=()=>{const e=document.getElementById("files");let t;if(e)for(let a of(e=>(e.sort(((e,t)=>{if(e.type===fe&&t.type!==fe)return-1;if(e.type!==fe&&t.type===fe)return 1;const a="desc"===ze.sort.order?-1:1;switch(ze.sort.field){case"date":return a*((e.m_timestamp||0)-(t.m_timestamp||0));case"size":return a*((e.size||0)-(t.size||0));default:return a*e.display_name.localeCompare(t.display_name)}})),e))(ze.files)){switch(a.type.toUpperCase()){case fe:t=Ce(a,{files:void 0,folders:void 0});break;case ye:t=De(a);break;case ke:t=Be(a,"firmware");break;default:t=Be(a,"file")}e.appendChild(t)}};function je(e,t,a){const i=document.getElementById(e).content,s=document.importNode(i,!0);return a&&s.querySelector(".node").addEventListener("click",(e=>{a(e),e.preventDefault()})),s.querySelector("#name")?.appendChild(document.createTextNode(t)),s}function Ce(e,t){const a=e.display_name||e.name,i=e.name,s=Pe(i),n=je("node-folder",a,(()=>{ze.current_path.push({path:i.replace("/",""),name:a}),_e(),Ie({force:!0})})),o=[t?.files?`${t.files} files`:null,t?.folders?`${t.folders} folders`:null].filter((e=>null!=e)).join(" | ");n.getElementById("details").innerHTML=o;const r=n.getElementById("delete");(0,p.gL)(r,!(e.read_only||e.ro)),r&&(r.onclick=e=>{var t,i,n;e.stopPropagation(),t=s,i=a,n=()=>{},(0,b.o)((e=>H(e,t,i,n,!0)),{timeout:0,closeOutside:!1})});const l=n.getElementById("rename");return l&&(l.onclick=e=>{e.stopPropagation(),console.log("renameFolder")}),n}const Ae=e=>{!function(e){const t=J.Z.getContext(),a=t.files.selected,i=Ee(),s=Pe(e.name);if(a===i)return;t.selectFile({...e,path:i,resource:s});const n=document.getElementById("job");n&&le(n)}(e)};function De(e){const t=je("node-file",e.display_name||e.name,(t=>Ae(e))),a=t.querySelector(".node-details");a.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const s=(0,j.NA)(t.dataset.where,e);if(s){const e=(0,re.Z)(t.dataset.format,s);t.querySelector("p[data-value]").innerHTML=e}else a.removeChild(t)}));const s=e?.refs?.thumbnail;if(s){const a=t.querySelector("img.node-img");a.setAttribute("data-src",e.date?`${s}?ct=${e.date}`:s),xe.observe(a)}return ce(t),function(e,t){const a=Pe(e.name),i=e.display_name||e.name,s=t.getElementById("details");s&&(s.onclick=t=>{Ae(e)});const n=t.getElementById("start");n&&(n.onclick=e=>{e.stopPropagation(),console.log("startPrint")});const o=t.getElementById("rename");o&&(o.onclick=e=>{e.stopPropagation(),console.log("renameFile")});const r=t.getElementById("delete");r&&((0,p.gL)(r,!(e.read_only||e.ro)),r.onclick=e=>{U(a,i),e.stopPropagation()});const l=t.getElementById("download");l&&((0,p.gL)(l,e.refs?.download),l.onclick=t=>{W(l),R(e.refs?.download,i,(()=>Y(l))),t.stopPropagation()})}(e,t),(0,i.ot)(t),t}function Be(e,t){const a=je("node-file",e.display_name||e.name,(e=>{})),s=a.querySelector(".node-details");s.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const a=(0,j.NA)(t.dataset.where,e);if(a){const e=(0,re.Z)(t.dataset.format,a);t.querySelector("p[data-value]").innerHTML=e}else s.removeChild(t)}));const n=a.querySelector("img.node-img");if(t){const e=n.getAttribute(`data-${t}`);e&&(n.src=e),xe.observe(n)}else(0,p.yx)(n,!1);return function(e){["details","start","rename","delete","download"].forEach((t=>{const a=e.getElementById(t);a&&(0,p.yx)(a,!1)}))}(a),a}function Oe(e){if(e in ze.storages){const t=ze.storages[e];ze.origin=e,ze.current_path=[],_e(),t.available&&Ie({force:!0}),_.hide(!1!==t.readOnly)}}const qe={load:function(e){if(ze.eTag=null,(0,i.Iu)("proj.link",{query:"#title-status-label"}),!xe){xe=new IntersectionObserver(((e,t)=>{e.forEach((e=>{if(e.isIntersecting){const t=e.target.getAttribute("data-src");(0,m.gJ)(t).then((({url:t})=>{e.target.src=t})).catch((()=>{}))}}))}),{rootMargin:"0px 0px 50px 0px",threshold:0})}e||(e=J.Z.getContext());const t=e.files.selected;if(t){(function(e,t){if(!e||!t)return null;let a=ze.files.find((t=>t.origin===e));const i=t.split("/").filter((e=>e)).slice(1);for(const e of i){if(!a)break;a=a.children.find((t=>t.name===e))}return"machinecode"===a?.type?a:null})(t.origin,t.path)||e.selectFile(null)}ee(e,!0),he(),Ne({redraw:!0}),Ie({force:!0})},update:e=>{const t=e.state;Ne(),Ie(),ee(e,!0),_.update(t)},getApiPath:Le},Me=e=>{e.getAttribute("tooltip")||(e.addEventListener("click",(t=>{e.classList.toggle("tooltip-handle--active");const a=e.querySelector("span");(0,p.Ti)((()=>e.classList.remove("tooltip-handle--active")),a,e),t.preventDefault()}),!1),e.setAttribute("tooltip",!0))};let Re=0,He=null;const Ue=()=>{const e=e=>{const t=document.getElementById("offline-screen"),a=document.importNode(t.content,!0);return["not-responsing","please-wait"].forEach((e=>{const t=a.getElementById(`offline-screen.${e}`);t&&(t.innerHTML=(e=>{switch(e){case"not-responsing":return(0,i.Iu)("msg.offline.not-responsing");case"please-wait":return(0,i.Iu)("msg.offline.please-wait");default:return""}})(e))})),He={node:a,close:()=>{e(),He=null}},a};(0,b.o)((t=>e(t)),{timeout:0,closeOutside:!1,className:"offline-screen"})},Ze=({link:e,isConnected:t})=>{const a=["connect"];for(const t in e){const{ok:s,message:n}=e[t],o=document.getElementById(`conn-status-${t}-msg`),r="ok"===n.toLowerCase();o&&(o.innerHTML="connect"===t?r?(0,i.Iu)("conn.connect.linked"):(0,i.Iu)("conn.connect.not-linked"):(0,i.Iu)("conn.error_status"));const l=document.getElementById(`conn-status-${t}`),d=l.querySelector(".icon-success"),c=l.querySelector(".icon-warning"),u=l.querySelector(".info-message-tooltip"),m=u.querySelector("span"),v=void 0===s||s&&!a.includes(t);u&&m&&(r||(m.innerText=n,Me(u)),(0,p.QH)(u,r)),(0,p.QH)(l,v),v||((0,p.QH)(d,!s),(0,p.QH)(c,s))}const s=e=>{Re<3?Re+=1:(e?Ue():He.close(),Re=0)};t?He&&s(!1):!He&&s(!0)};const Ke=e=>{return{resource:e.resource??(t=e.path,a=e.name,`${t}${t.endsWith("/")?"":"/"}${a}`),name:e.name,displayName:e.display_name??e.name,path:e.path,displayPath:e.display_path??e.path,size:e.size,refs:{download:e.refs?.download,icon:e.refs?.icon,thumbnail:e.refs?.thumbnail},lastModified:e.m_timestamp||0,meta:{filamentType:e.meta?.filament_type,layerHeight:e.meta?.layer_height,estimatedPrintTime:e.meta?.estimated_print_time},readOnly:e.read_only||e.ro};var t,a},Ve=new class{constructor(){this.state=void 0,this.printer=void 0,this.job=void 0,this.transfer=void 0,this.version=void 0,this.storage=[],this.currentStorage=void 0,this.telemetry={temperature:{nozzle:{current:0,target:0},bed:{current:0,target:0}}},this.flow=0,this.speed=0,this.fan={hotend:0,print:0},this.link={connect:{ok:!0,message:"OK",settings:{hostname:"connect.prusa3d.com",tls:!0,port:0}},printer:{ok:!0,message:"OK",settings:{port:"",baudrate:115200}}},this.files={location:"/",selected:{file:void 0,thumbnail:void 0}},this.fileExtensions=[".gcode"],this.updateConnection()}updateConnection(){return(0,m.LK)("/api/connection",{method:"GET"}).then((e=>{this.link.connect.settings={hostname:e.data.connect.hostname,port:e.data.connect.port,tls:e.data.connect.tls},this.link.connect.registration=e.data.connect.registration,this.link.printer.settings={port:e.data.current.port,baudrate:e.data.current.baudrate}}))}update({status:e,printer:t}){e?.ok&&e.payload&&this.updateStatus(e.payload.data),t&&this.updatePrinter(t)}updateStatus(e){this.updateTelemetry(e.printer),this.updateJob(e.job),this.updateStorage(e.storage),this.updateTransfer(e.transfer),this.updateCamera(e.camera)}updatePrinter(e){this.printer={name:e.name,location:e.location,farmMode:e.farm_mode,nozzleDiameter:e.nozzle_diameter,minExtrusionTemp:e.min_extrusion_temp,serial:e.serial,hostname:e.hostname,port:e.port}}updateTelemetry(e){this.state=h.PT.fromApi(e.state.toUpperCase()),this.telemetry={temperature:{nozzle:{current:e.temp_nozzle,target:e.target_nozzle},bed:{current:e.temp_bed,target:e.target_bed}},axis:{x:e.axis_x,y:e.axis_y,z:e.axis_z},flow:e.flow,speed:e.speed,fan:{hotend:e.fan_hotend,print:e.fan_print}},this.link.connect.message=e.status_connect?.message??"",this.link.connect.ok=e.status_connect?.ok,this.link.printer.message=e.status_printer?.message??"ok",this.link.printer.ok=e.status_printer?.ok??!0}updateJob(e){const t=this.job?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.job=void 0);(0,m.LK)("/api/v1/job").then((e=>{const t=e.data;t.id===this.job.id&&(this.job={...this.job,file:Ke(t.file),thumbnail:{source:!t.file.refs?.thumbnail,ready:!t.file.refs?.thumbnail,url:void 0}},this.job.thumbnail.ready||(0,m.gJ)(this.job.file.refs.thumbnail).then((({url:e})=>{this.job.id===a&&(this.job.thumbnail.url=e)})).catch((e=>console.error("Failed to fetch thumbnail",e))).finally((()=>this.job.thumbnail.ready=!0)))})).catch((e=>(0,u.S)(e)))}if(a){const t=this.job?.timeRemaining,s=e.time_remaining,n=t!=s?(i=s,Math.round(Date.now()/1e3)+i):this.job?.estimatedEnd;this.job={file:void 0,...this.job,timePrinting:e.time_printing,id:a,progress:e.progress,timeRemaining:e.time_remaining,estimatedEnd:n}}var i}updateStorage(e){Object.keys(e).forEach((e=>{const t={path:e.path,name:e.name,readOnly:e.readOnly,freeSpace:e.freeSpace},a=this.storage.findIndex((e=>e.path===t.path));-1!==a?this.storage[a]=t:this.storage.push(t)}))}updateTransfer(e){const t=this.transfer?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.transfer=void 0);(0,m.LK)("/api/v1/transfer").then((e=>{const t=e.data;this.transfer={...this.transfer,file:{displayName:t.display_name??t.name,path:t.path,size:t.size,toPrint:t.to_print}}})).catch((e=>(0,u.S)(e)))}if(a){const t=Math.round(Date.now()/1e3),i=this.transfer?.file?.size||0,s=e.time_transferring,n=void 0!==s?t-s:void 0,o=e.data_transferred,r=i-o,l=s>0&&r>=0?r/(o/s):void 0;this.transfer={...this.transfer,timeTransferring:s,timeStarted:n,timeRemaining:l,id:a,progress:e.progress,dataTransferred:o}}}updateCamera(e){this.camera={id:e?.id}}selectFile(e){if(!e)return void(this.files.selected=null);const t=e.refs?.thumbnail;if(this.files.selected={file:Ke(e),thumbnail:{source:t,ready:!t,url:void 0},timeRemaining:e.meta?.estimated_print_time},!e.meta){const e=this.files.selected.file.resource;(0,m.LK)(e).then((t=>{const a=Ke({...t.data,resource:e});this.files.selected.file.resource===e&&(this.files.selected.file.meta=a.meta,this.files.selected.timeRemaining=a.meta?.estimatedPrintTime)}))}t&&(0,m.gJ)(t).then((({url:e})=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.url=e)})).catch((()=>{})).finally((()=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.ready=!0)}))}},Fe=e=>{const t=e.load;return e.load=()=>{(()=>{const e=document.getElementById("title-printer");e&&(e.innerHTML=$e())})(),t(Ve)},e},$e=()=>(e=>se([e.printer?.location,e.printer?.name]))(Ve);let Ge=oe;const We={routes:[{path:"dashboard",html:a(2373),module:Fe(oe),getTitle:()=>(0,i.Iu)("home.link")},{path:"question",html:a(5198),module:Fe(G)},{path:"files",html:a(7189),module:Fe(qe),getTitle:()=>(0,i.Iu)("proj.storage")},{path:"settings",html:a(2936),module:Fe(a(2957).Z),getTitle:()=>(0,i.Iu)("settings.title")},{path:"control",html:a(3478),module:Fe(a(732).Z),getTitle:()=>(0,i.Iu)("control.link")},{path:"cameras",html:a(5464),module:Fe(a(2451).Z),getTitle:()=>(0,i.Iu)("cameras.link")}].filter((e=>null!=e)),init:e=>{Ve.update(e),Ye()},update:e=>{Ve.update(e);const t=(0,C.nC)(),a=(e=>{const t=e.state;let a=(0,h.ny)(t);switch(t){case"IDLE":return"";case"PRINTING":return`${a} ${Math.round(e?.job?.progress||0)}%`;default:return a}})(Ve);var i;document.title=(i=[a,We.routes.find((e=>e.path===t)).getTitle()],se([...i,$e(),"PrusaLink"])),(0,j.zR)("telemetry",Ve),(e=>{const t=e,a=document.getElementById("printer-status");a&&(a.innerHTML=(0,h.ny)(t))})(Ve.state),Je(Ve.telemetry),Qe()},setConnected:e=>{Ze({link:Ve.link,isConnected:e})},setModule:e=>{Ge=e},getContext:()=>Ve},Ye=()=>{let e=new Map([["temp-line-blue",[]],["temp-line-orange",[]]]);r(e,300),l()},Je=e=>{const t=(new Date).getTime();d("temp-line-blue",[t,e.temperature.bed.current]),d("temp-line-orange",[t,e.temperature.nozzle.current]),l()},Qe=()=>{Ge&&Ge.update&&Ge.update(Ve)},Xe=We},8495:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=a(7838).default},8751:(e,t,a)=>{"use strict";a.d(t,{c4:()=>l,g9:()=>d,nC:()=>o});var i=a(7780),s=a(8495);const n=e=>{const[t,a]=e.split("#");return a||"dashboard"},o=()=>n(window.location.hash);function r(e,t){const a=n(e),o=s.Z.routes.find((e=>e.path===a));if(!o)return!1;t&&function(e){window.location.hash!=e&&history.pushState(null,"",e)}("#"+a);const r=document.getElementById("root");var l;return function(e,t){t.innerHTML="",(new DOMParser).parseFromString(e,"text/html").body.childNodes.forEach((e=>t.appendChild(e)))}(o.html,r),(0,i.ot)(r),function(e){const t=document.querySelector(`a[href="#${e}"]`);t&&(document.getElementById("navbar").childNodes.forEach((e=>{"li"===e.nodeName.toLowerCase()&&e.classList.remove(["active"])})),t.parentNode.className="active")}(a),(l=o.getTitle)&&(document.title=l()),window.scrollTo({top:0}),o.module.load(),s.Z.setModule(o.module),!0}const l=e=>r(e,!0),d=e=>r(e,!1)},4800:(e,t,a)=>{"use strict";a.d(t,{Dt:()=>o,PT:()=>s,cG:()=>n,ny:()=>r});var i=a(7780);const s={UNKNOWN:"UNKNOWN",IDLE:"IDLE",READY:"READY",BUSY:"BUSY",PRINTING:"PRINTING",PAUSED:"PAUSED",FINISHED:"FINISHED",STOPPED:"STOPPED",ERROR:"ERROR",ATTENTION:"ATTENTION",fromApi:e=>{switch(e){case"IDLE":return s.IDLE;case"READY":return s.READY;case"BUSY":return s.BUSY;case"PRINTING":return s.PRINTING;case"PAUSED":return s.PAUSED;case"FINISHED":return s.FINISHED;case"STOPPED":return s.STOPPED;case"ERROR":return s.ERROR;case"ATTENTION":return s.ATTENTION;default:return console.error(`Unsupported state: ${e}`),s.UNKNOWN}}},n=[s.IDLE,s.READY,s.FINISHED],o=[s.PRINTING,s.PAUSED],r=e=>{switch(e){case s.IDLE:return(0,i.Iu)("prop.st-idle");case s.READY:return(0,i.Iu)("prop.st-ready");case s.BUSY:return(0,i.Iu)("prop.st-busy");case s.PRINTING:return(0,i.Iu)("prop.st-printing");case s.PAUSED:return(0,i.Iu)("prop.st-paused");case s.FINISHED:return(0,i.Iu)("prop.st-finished");case s.STOPPED:return(0,i.Iu)("prop.st-stopped");case s.ERROR:return(0,i.Iu)("prop.st-error");case s.ATTENTION:return(0,i.Iu)("prop.st-attention");default:return console.error(`Unsupported state: ${e}`),(0,i.Iu)("prop.st-unknown")}}},4977:e=>{"use strict";e.exports=JSON.parse('{"langs":["cs","de","en","es","fr","it","kr","lt","nl","pl","sk"],"texts":{"home":{"link":["Přehled","Dashboard","Dashboard","Panel principal","Tableau de bord","Dashboard","대쉬보드","Darbastalis","Dashboard","Panel kontrolny","Prehľad"],"title":["Stav tiskárny","Druckerstatus","Printer Status","Estado de la impresora","État de l\'imprimante","Stato della stampante","프린터 상태","Spausdintojo būsena","Printerstatus","Stan drukarki","Stav tlačiarne"]},"proj":{"link":["Úložiště","Projekte","Storage","Proyectos","Projets","Progetti","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"storage":["Úložiště","Speicher","Storage","Almacenamiento","Stockage","Archivio","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"add-from":{"title":["Nahrát soubor z","Datei hinzufügen von","Add file from","Añadir archivo desde","Ajouter un fichier à partir de","Aggiungi file da","에서 파일 추가하기","Pridėti failą iš","Bestanden toevoegen van","Dodaj plik z","Nahrať súbor z"],"local":["Lokálního úložiště","Lokaler Speicher","Local storage","Almacenamiento local","Stockage local","Archivio locale","로컬 저장장치","Vietinis saugykla","Lokale opslag","Magazyn lokalny","Lokálneho úložiska"],"remote":["Vzdálené url","Remote-URL","Remote url","Eliminar url","URL distante","Url remoto","원격 URL","Nuotolinis URL","Externe URL","Zdalny URL","Vzdialenej URL"]},"details":["Detaily souboru","Datei-Details","File details","Detalles del archivo","Détails du fichier","Dettagli file","파일 상세정보","Failo informacija","Bestandseigenschappen","Szczegóły pliku","Detaily súboru"],"del":["Smazat","Datei löschen","Delete","Borrar archivo","Supprimer le Fichier","Elimina File","삭제","Ištrinti","Verwijderen","Usuń plik","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","Télécharger","Download","다운로드","Atsisiųsti","Downloaden","Pobierz","Stiahnuť"],"up-folder":["nadřazená složka","übergeordneter Ordner","parent folder","carpeta contenedora","dossier parent","cartella superiore","상위폴더","tėvinis aplankas","Bovenliggende map","folder nadrzędny","nadradený priečinok"]},"control":{"link":["Ovládání","Kontrolle","Control","Control","Contrôle","Controllo","제어","Valdymas","Bediening","Sterowanie","Ovládanie"],"coordinates":["Souřadnice tiskárny","Drucker-Koordinaten","Printer Coordinates","Coordenadas de la Impresora","Coordonnées de l\'imprimante","Coordinate Stampante","프린터 좌표","Spausdintojo koordinatės","Printercoördinaten","Współrzędne drukarki","Súradnice tlačiarne"],"axis":{"x":["Osa X","X-Achse","X axis","Eje X","axe X","Asse X","X축","X ašis","X-as","Oś X","Os X"],"y":["Osa Y","Y-Achse","Y axis","Eje Y","axe Y","Asse Y","Y축","Y ašis","Y-as","Oś Y","Os Y"],"z":["Osa Z","Z-Achse","Z axis","Eje Z","axe Z","Asse Z","Z축","Z ašis","Z-as","Oś Z","Os Z"]},"stepper-motors":["Krokové motory","Schrittmotoren","Stepper Motors","Motores Paso-a-paso","moteurs","Motori Passo-Passo","스텝 모터","Sustojimo varikliai","Stappenmotors","Silniki krokowe","Krokové motory"],"heated-bed-move":["Pohyb podložky v ose X a Y","Heizbett X und Y bewegen","Heated Bed X and Y Move","Base Calefactable Mover X e Y","Mouvement en x/y","Spostamento X e Y Piano Riscaldato","히트베드 X 및 Y 이동","Šildomojo patalo X ir Y poslinkis","Beweeg verwarmd bed in X en Y","Ruch stołu grzewczego X i Y","Pohyb podložky v osi X a Y"],"move-step":["Krok pohybu [mm]","Schrittweite [mm]","Move Step [mm]","Mover Paso [mm]","déplacement [mm]","Sposta Passo [mm]","[mm]mm 스텝 이동","Poslinkis [mm]","Beweegafstand [mm]","Krok ruchu [mm]","Krok pohybu [mm]"],"nozzle-z-move":["Pohyb extrudéru v ose Z","Düse Z Bewegung","Nozzle Z Move","Boquilla Mover Z","déplacement en z","Spostamento Z Ugello","노즐 Z 이동","Antgalio Z poslinkis","Beweeg omhoog/omlaag","Ruch dyszy w osi Z","Pohyb extruderu v osi Z"],"extruder":["Extrudér","Extruder","Extruder","Extrusor","extrudeur","Estrusore","익스트루더","Ištraukiklis","Extruder","Ekstruder","Extruder"],"extrude-retract-step":["Krok vytlačení/vtažení [mm]","Extrudieren/Zurückziehen Schritt [mm]","Extrude/Retract Step [mm]","Distancia Extruir/Retraer [mm]","longueur d\'extrusion ou de rétractation [mm]","Passo Estrusione/Retrazione [mm]","[mm]mm 스텝 압출/철회","Ištrauka/atgalinimas [mm]","Extrude/retract-afstand [mm]","Krok ekstruzji/retrakcji [mm]","Krok vysunutia/zasunutia [mm]"],"nozzle-temp":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura Boquilla","température de la buse","Temperatura Ugello","노즐 온도","Antgalio temperatūra","Temperatuur nozzle","Temperatura dyszy","Teplota trysky"],"speed":["Rychlost","Geschwindigkeit","Speed","Velocidad","vitesse","Velocità","속도","Greitis","Snelheid","Prędkość","Rýchlosť"],"heated-bed-temp":["Teplota vyhřívané podložky","Temperatur des Heizbettes","Heated Bed Temperature","Temperatura de la Base Calefactable","Température du lit","Temperatura piano riscaldato","히트베드 온도","Šildomojo patalo temperatūra","Temperatuur verwarmd bed","Temperatura stołu","Teplota vyhrievanej podložky"],"flow":["Průtok","Flow","Flow","Flujo","flux","Flusso","흐름","Srautas","Extrusiefactor","Przepływ","Prietok"],"title":["Ovládání tiskárny","Druckersteuerung","Printer Control","Control de la Impresora","Contrôle de l\'imprimante","Controllo Stampante","프린터 제어","Spausdintojo valdymas","Printerbediening","Sterowanie drukarką","Ovládanie tlačiarne"]},"cameras":{"link":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"trigger-scheme":{"ten-sec":["Každých 10 sekund","Alle 10 Sekunden","Every 10 seconds","Cada 10 segundos","Toutes les 10 secondes","Ogni 10 secondi","매 10초","Kas 10 sekundžių","Elke 10 seconden","Co 10 sekund",""],"thirty-sec":["Každých 30 sekund","Alle 30 Sekunden","Every 30 seconds","Cada 30 segundos","Toutes les 30 secondes","Ogni 30 secondi","매 30초","Kas 30 sekundžių","Elke 30 seconden","Co 30 sekund",""],"sixty-sec":["Každých 60 sekund","Alle 60 Sekunden","Every 60 seconds","Cada 60 segundos","Toutes les 60 secondes","Ogni 60 secondi","매 60초","Kas 60 sekundžių","Elke minuut","Co 60 sekund",""],"each-layer":["Při změně vrstvy","Beim Schichtwechsel","On layer change","Al cambiar de capa","Au changement de couche","Al cambio layer","매 레이어","Pakeitus sluoksnį","Bij laagwissel","Przy zmianie warstwy",""],"fifth-layer":["Každou pátou vrstvu","Alle 5 Schichten","Every fifth layer","Cada cinco capas","Toutes les cinq couches","Ogni cinque layer","매 5레이어","Kas penktas sluoksnis","Elke 5 lagen","Co piąta warstwa",""],"manual":["Ručně","Manuell","Manual","Manual","Manuel","Manuale","수동","Rankinis","Handmatig","Ręcznie",""]}},"settings":{"title":["Nastavení","Einstellungen","Settings","Ajustes","Réglages","Impostazioni","세팅","Nustatymai","Instellingen","Ustawienia","Nastavenie"]},"conn":{"prusa-connect-status":["Stav připojení PrusaConnect","PrusaConnect Status","PrusaConnect Status","Estado de PrusaConnect","Informations de connexion à PrusaConnect","Stato PrusaConnect","프루사커넥트 상태","PrusaConnect būsena","Status van PrusaConnect","Stan PrusaConnect","Stav pripojenia PrusaConnect"],"printer-status":["Stav připojení 3D tiskárny","3D-Drucker Verbindungsstatus","3D Printer Connection Status","Estado Conexión Impresora 3D","Informations de connexion à l\'imprimante 3D","Stato Connessione Stampante 3D","3D 프린터 연결 상태","3D spausdintojo prisijungimo būsena","Verbindingsstatus van 3D-printer","Status połączenia z drukarką 3D","Stav pripojenia 3D tlačiarne"],"title":["připojení","Verbindung","Connection",null,"connexion",null,"연결","Prisijungimas","Verbinding",null,"pripojenie"],"prusa-connect-url":["Adresa PRUSA CONNECT","PRUSA CONNECT Adresse","PRUSA CONNECT Address",null,null,null,"프루사커넥트 주소","PRUSA CONNECT adresas","Adres van PRUSA CONNECT",null,"Adresa PrusaConnect"],"suc":["Úspěšně připojeno","Erfolgreich verbunden","Successfully connected","Correctamente conectado","Connecté avec succès","Connessione riuscita","연결 성공","Prisijungta sėkmingai","Succesvol verbonden","Połączono pomyślnie","Úspešne pripojené"],"connect":{"linked":["","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":[null,"Nicht verbunden","Not Linked","No enlazado","Non Associée","Non collegato","연결안됨","Nesusieta","Niet verbonden","Nie połączono",""]},"error_status":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","","","Błąd",""]},"prop":{"temp-nozzle":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura del nozzle","Température de la buse","Temperatura ugello","노즐 온도","Nozzle Temperature","Nozzletemperatuur","Temperatura dyszy","Teplota trysky"],"temp-bed":["Vyhřívaná podložka","Heizbett","Heatbed","Base calefactable","Plateau chauffant","Piano riscaldato","히트베드","Dėklo temperatūra","Verwarmd bed","Stół","Vyhrievaná podložka"],"speed":["Rychlost tisku","Druckgeschwindigkeit","Printing Speed","Velocidad de impresión","Vitesse d\'impression","Velocità di stampa","출력속도","Spausdinimo greitis","Printsnelheid","Prędkość drukowania","Rýchlosť tlače"],"z-height":["Výška Z","Z-Höhe","Z-Height","Altura-Z","Hauteur en z","Altezza-Z","Z높이","Z-Height","Z-Hoogte","Wysokość Z","Výška Z"],"nozzle-diameter":["Velikost trysky","Düsendurchmesser","Nozzle Diameter","Diámetro de Boquilla","Diamètre de la Buse","Diametro ugello","노즐지름","Galvutės skersmuo","Nozzlediameter","Średnica dyszy","Veľkosť trysky"],"rem-time":["Zbývající čas","Restzeit","Remaining time","Tiempo restante","Temps restant","Tempo residuo","남은시간","Likęs laikas","Resterende tijd","Pozostały czas","Zostávajúci čas"],"time-est":["Odhad doby tisku","Druckzeit Schätzen","Print Time Estimate","Tiempo Estimado de Impresión","Estimation du temps d\'impression","Stima del Tempo di Stampa","예상 출력 시간","Print Time Estimate","Geschatte printtijd","Szacowany Czas Druku","Odhad času tlače"],"est-end":["Odhadovaný konec","Erwartetes Ende","Estimated end","Fin estimado","Fin d\'impression estimée","Fine prevista","예상완료","Numatomas pabaiga","geschatte eindtijd","Szacowane zakończenie","Odhadovaný koniec"],"pnt-time":["Doba tisku","Druckzeit","Printing time","Tiempo de impresión","Temps d\'impression","Tempo di stampa","출력시간","Spausdinimo laikas","Printtijd","Czas druku","Čas tlače"],"last-mod":["Naposledy upraveno","Zuletzt Geändert","Last Modified","Ultima Modificación","Dernière Modification","Ultima Modifica","최종 수정됨","Paskutinis modifikavimas","Laatst gewijzigd","Ostatnio Zmodyfikowany","Posledná úprava"],"material":["Materiál","Material","Material","Material","Matériau","Materiale","재료","Medžiaga","Materiaal","Materiał","Materiál"],"layer-ht":["Výška vrstvy","Schichthöhe","Layer Height","Altura de Capa","Hauteur de Couche","Altezza Layer","레이어 높이","Sluoksnio storis","Laagdikte","Wysokość Warstwy","Výška vrstvy"],"size":["Velikost souboru","Größe der Datei","File size","Tamaño de archivo","Taille du fichier","Dimensione file","파일크기","Failo dydis","Bestandsgrootte","Rozmiar pliku","Veľkosť súboru"],"progress":["Postup","Fortschritt","Progress","Progreso","Progression","Progresso","진행","Eiga","Voortgang","Postęp","Progres"],"st-idle":["Nečinná","Leerlauf","Idle","En espera","Repos","Inattivo","대기","Pramoginė veikla","Inactief","Oczekuje","Nečinná"],"st-ready":["Připravena","Bereit","Ready","Lista","Prête","Pronto","준비","Pasirengęs","Gereed voor gebruik","Gotowe","Pripravené"],"st-busy":["Zaneprázdeněná","Beschäftigt","Busy","Ocupada","Occupée","Occupato","작업중","Užsiėmęs","Bezig","Zajęty","Zaneprázdnená"],"st-printing":["Probíhá tisk","Druckt","Printing","Imprimiendo","Impression","Stampa","출력중","Spausdinama","Printen","Drukowanie","Prebieha tlač"],"st-paused":["Pozastavena","Pausiert","Paused","Pausado","En pause","In pausa","일시정지","Pristabdyta","Gepauzeeerd","Pauza","Pozastavená"],"st-finished":["Dokončeno","Beendet","Finished","Terminado","Terminé","Completato","완료됨","Užbaigta","Klaar","Zakonczono","Dokončené"],"st-stopped":["Zastaveno","Gestoppt","Stopped","Parada","Arrêtée","Arrestato","정지됨","Sustabdytas","Gestopt","Zatrzymano","Zastavené"],"st-error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"st-attention":["Vyžaduje pozornost","Achtung","Attention","Atención","Attention","Attenzione","주의","Dėmesio","Attentie","Uwaga","Pozor"],"st-unknown":["Neznámý","Unbekannt","Unknown","Desconocido","Inconnu","Sconosciuto","알수없음","Nežinoma","Onbekend","Nieznane","Neznáme"],"at":["v","um","at","a las","à","alle","에서","iš","op","o","v"],"less-than":["Méně než minuta","Weniger als eine Minute","Less than a minute","Menos de un minuto","Moins d\'une minute","Meno di un minuto","1분 미만","Mažiau nei minutė","Minder dan een minuut","Mniej niż minuta","Menej ako minúta"],"today-at":["Dnes v","Heute um","Today at","Hoy a las","Aujourd\'hui à","Oggi alle","오늘","Šiandien","Vandaag om","Dzisiaj o","Dnes o"],"tmw-at":["Zítra v","Morgen um","Tomorrow at","Mañana a las","Demain à","Domani alle","내일","Rytoj","Morgen om","Jutro o","Zajtra o"],"true":["Ano","Ja","Yes","Si","Oui","Si","예","Taip","Ja","Tak","Áno"],"false":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"na":["N/A","NV","NA","NA","NA","ND","없음","NA","N.v.t.","N/D","N/A"],"cover-closed":["Uzavřené","Geschlossen","Closed","Cerrada","Fermé","Chiuso","닫힘","Uždarytas","Gesloten","Zamknięta","Zavreté"],"cover-opened":["Otevřené","Geöffnet","Opened","Abierta","Ouvert","Aperto","열림","Atidarytas","Open","Otwarta","Otvorené"],"storage-used-space":["Použito {{used}} z {{total}} ({{free}} volných)","{{used}} benutzt von {{total}} ({{free}} frei)","Used {{used}} of {{total}} ({{free}} free)","Usados {{used}} de {{total}} ({{free}} libres)","{{used}} utilisés sur {{total}} ({{free}} libre)","Usato {{used}} di {{total}} ({{free}} liberi)","{{total}} 중 {{used}} 사용중({{free}} 남음)","","","Zajęte {{used}} z {{total}} ({{free}} wolne)",""]},"msg":{"modal-p1":["Vítejte na webovém rozhraní vaší","Willkommen zur Weboberfläche Ihres","Welcome to the web interface of your","Bienvenido a la interfaz web de tu","Bienvenue dans l\'interface web de votre","Benvenuto nell\'interfaccia web del tuo","당신의 웹 인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į savo","Welkom bij de webinterface van uw","Witaj w interfejsie Twojej","Vitajte vo webovom rozhraní vašej"],"modal-p2":["Upozornění: některé hodnoty jsou zobrazeny pouze v průběhu tisku.","Bitte beachten Sie, dass die Werte nur angezeigt werden, wenn der Drucker gerade druckt.","Please note that values are shown only when the printer is printing.","Tenga en cuenta que los valores se muestran solo cuando la impresora está imprimiendo.","Veuillez noter que les valeurs sont affichées uniquement lorsque l\'imprimante imprime.","Si noti che i valori vengono visualizzati solo durante la stampa.","프린터가 출력중일 경우에만 값이 표시됩니다.","Prašome atkreipti dėmesį, kad reikšmės rodomos tik tada, kai spausdintuvas spausdina.","De waarden worden alleen getoond tijdens het printen.","Wartości będą wyświetlane tylko podczas drukowania.","Upozornenie: niektoré hodnoty sú zobrazené len počas tlače."],"api-key-1":["Vítejte ve webovém rozhraní PrusaLink Web!","Willkommen auf der Web-Oberfläche von PrusaLink Web.","Welcome to the PrusaLink Web web interface.","Bienvenido a la interfaz web de PrusaLink Web.","Bienvenue sur l\'interface web locale de PrusaLink Web.","Benvenuti nell\'interfaccia web di PrusaLink Web.","프루사 커넥트 웹 웹인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į PrusaLink Web interneto sąsają.","Welkom bij de PrusaLink Web webinterface.","Witaj w interfejsie sieciowym PrusaLink Web.","Vitajte vo webovom rozhraní PrusaLink Web!"],"api-key-2":["Vložte API klíč.","Bitte geben Sie den API-Schlüssel ein.","Please insert the API key.","Por favor introduce la clave API.","Veuillez insérer la clé API.","Si prega di inserire la chiave API.","API키를 입력하십시오.","Prašome įvesti API raktą.","Voer de API-sleutel in","Wpisz klucz API.","Vložte API kľúč."],"api-key-3":["Otevřete menu Nastavení -> Síť -> PrusaLink.","Sie finden ihn in Einstellungen -> Netzwerk -> PrusaLink.","You can find it in Settings -> Network -> PrusaLink.","Puedes encontrarla en Ajustes -> Red -> PrusaLink.","Vous pouvez la trouver dans Réglages -> Réseau -> Informations de connexion.","È possibile trovarla in Impostazioni -> Rete -> PrusaLink","설정 -> 네트워크 -> 프루사링크에서 찾을 수 있습니다.","Jį galite rasti Nustatymai -> Tinklas -> PrusaLink.","Deze kan gevonden worden bij Settings -> -> Network -> PrusaLink.","Możesz znaleźć go w sekcji Ustawienia -> Sieć -> PrusaLink.","Nájdete ho v Nastavenia -> Sieť -> PrusaLink."],"offline":{"not-responsing":["Tiskárna nereaguje.","Der Drucker antwortet nicht.","Printer is not responding.","La impresora no responde.","L\'imprimante ne répond pas.","La stampante non risponde.","프린터가 응답하지 않습니다.","Spausdintuvas neatsako.","Printer reageert niet.","Drukarka nie odpowiada.","Tlačiareň nereaguje."],"please-wait":["Prosím, čekejte...","Bitte warten...","Please wait...","Espera, por favor...","Veuillez patienter...","Attendere...","기다려주십시오...","Prašome palaukti...","Even geduld...","Proszę czekać...","Prosím, čakajte..."]},"drop-zone":{"label":["Přetažením souboru zahájíte nahrávání","Datei hier ablegen, um den Upload zu starten","Drop file here to start the uploading","Arrastra archivo aquí para subirlo","Déposez le fichier ici pour commencer le téléchargement","Trascina il file qui per iniziare il caricamento","파일을 여기로 끌어놓으면 업로드가 시작됩니다.","Tempti failą čia, kad predėti įkrovimą","Sleep het bestand hierheen om het te uploaden","Upuść plik tutaj, aby rozpocząć przesyłanie.",""]},"create-folder":["Nová složka","Neuer Ordner","New Folder","Nueva Carpeta","Nouveau Dossier","Nuova Cartella","새 폴더","","","Nowy folder",""],"create-folder-name":["Název složky","Ordnername","Folder Name","Nombre de la Carpeta","Nom de Dossier","Nome cartella","폴더 이름","","","Nazwa folderu",""],"sysupgrade":{"title":["Aktualizovat systémový balíček?","Systempaket aktualisieren?","Upgrade System Package?","¿Actualizar el Paquete del Sistema?","Mettre à niveau le package système ?","Aggiornare il pacchetto di sistema?","시스템 패키지를 업그레이드하겠습니까?","","","Zaktualizować paczkę systemową?",""],"remark":["Aktualizace může trvat několik desítek vteřin.","Das Upgrade kann einige Sekunden dauern.","The upgrade may take several tens of seconds.","La actualización puede tardar varias decenas de segundos.","La mise à jour peut prendre plusieurs dizaines de secondes.","L\'aggiornamento può richiedere qualche minuto.","업그레이드에는 수십초가 걸릴 수 있습니다.","","","Aktualizacja może trwać kilkadziesiąt sekund.",""],"pending":["Probíhá aktualizace... Nevypínejte tiskárnu.","Upgraden... Schalten Sie den Drucker nicht aus.","Upgrading... Do not switch the printer off.","Actualizando... No apagues la impresora.","Mise à niveau... N\'éteignez pas l\'imprimante.","Aggiornamento... Non spegnere la stampante.","업그레이드중... 프린터를 끄지 마십시오.","","","Aktualizacja... Nie wyłączaj drukarki.",""],"wait-for-printer":["Čeká se na tiskárnu...","Warten auf den Drucker...","Waiting for the printer...","Esperando a la impresora...","Attente de l\'imprimante...","In attesa della stampante...","프린터를 기다리는 중...","","","Oczekiwanie na drukarkę...",""]},"sla-pour-resin":["Nalijte do vaničky dostatečné množství resinu pro vybraný soubor a zavřete víko. Minimální objem resinu je zobrazen na dotykovém displeji tiskárny.","Füllen Sie genügend Harz für die ausgewählte Datei in den Tank und schließen Sie den Deckel. Die minimale Menge des Harzes wird auf dem Touchscreen angezeigt.","Pour enough resin for selected file into the tank and close the lid. Minimal amount of the resin is displayed on the touchscreen.","Vierte suficiente resina para el archivo seleccionado y cierra la tapa.\\nLa mínima cantidad necesaria se muestra en la pantalla táctil.","Versez suffisamment de résine dans le réservoir pour le projet sélectionné et fermez le capot.","Versare nel serbatoio la quantità di resina sufficiente per il file selezionato e chiudere il coperchio. La quantità minima di resina viene visualizzata sul touchscreen.","선택한 파일을 위한 레진을 탱크에 붓고 뚜껑을 닫습니다. 터치스크린에 최소량의 레진이 표시됩니다.","Įpilkite pakankamai dervos pasirinktam failui ir uždarykite dangtį. Mažiausias dervos kiekis yra rodomas ant ekrano.","Doe genoeg resin voor het geselcteerde bestand in het vat en sluit de kap. De minimale hoeveelheid resin wordt aangegeven op het touchscreen.","Wlej do zbiornika wystarczającą ilość żywicy dla wybranego pliku i zamknij pokrywę. Minimalna ilość żywicy jest wyświetlana na ekranie dotykowym.","Do nádržky nalejte dostatočné množstvo resinu pre vybraný súbor a zatvorte veko. Minimálne množstvo resinu sa zobrazí na dotykovom displeji."],"del-folder":["Opravdu chcete smazat {{folder_name}} a její obsah?","Möchten Sie wirklich {{folder_name}} und seinen Inhalt löschen?","Do you really want to delete {{folder_name}} and its contents?","¿Realmente deseas borrar {{folder_name}} y su contenido?","Voulez-vous vraiment supprimer {{folder_name}} et son contenu ?","Vuoi davvero cancellare la cartella {{folder_name}} e il suo contenuto?","정말 {{folder_name}} 폴더 및 내용을 지우시겠습니까?","","","Czy naprawdę chcesz usunąć {{folder_name}} i jego zawartość?",""],"del-proj":["Opravdu chcete smazat {{file_name}}?","Wollen Sie wirklich {{file_name}} löschen?","Do you really want to delete {{file_name}}?","¿Realmente deseas borrar {{file_name}}?","Voulez-vous vraiment supprimer le fichier {{file_name}} ?","Vuoi davvero eliminare il file {{file_name}}?","{{file_name}}을 정말로 삭제하겠습니까?","Ar tikrai norite ištrinti {{file_name}}?","Weet u zeker dat u {{file_name}} wilt verwijderen?","Czy na pewno chcesz usunąć plik {{file_name}}?","Naozaj chcete zmazať {{file_name}}?"],"cancel":["Chcete opravdu zrušit tisk?","Wollen Sie den Druck wirklich abbrechen?","Do you really want to cancel print?","¿Realmente quieres cancelar la impresión?","Voulez-vous vraiment annuler l\'impression ?","Vuoi davvero annullare la stampa?","출력을 취소하겠습니까?","Ar tikrai norite atšaukti spausdinimą?","Weet u zeker dat u de print wilt stoppen?","Czy na pewno chcesz anulować wydruk?","Chcete naozaj zrušiť tlač?"],"file-exists":{"title":["Soubor již existuje","Datei existiert bereits","File already exists","El archivo ya existe","Le fichier existe déjà","File già esistente","파일이 이미 존재합니다.","","","Plik już istnieje",""],"overwrite-it":["Chcete ho přepsat?","Möchten Sie sie überschreiben?","Do you want to overwrite it?","¿Quieres sobrescribirlo?","Voulez-vous l\'écraser ?","Vuoi sovrascriverlo?","덮어쓰시겠습니까?","","","Czy chcesz go nadpisać?",""]}},"btn":{"login":["Přihlášení","Login","Login","Iniciar sesión","Connexion","Accedi","로그인","Prisijungti","Login","Zaloguj","Prihlásenie"],"confirm":["Potvrdit","Bestätigen","Confirm","Confirmar","Confirmer","Conferma","결정","Patvirtinti","Bevestigen","Potwierdzam","Potvrdiť"],"cancel":["Zrušit","Abbrechen","Cancel","Cancelar","Annuler","Annulla","취소","Atšaukti","Annuleren","Anuluj","Zrušiť"],"del":["Smazat","löschen","Delete","borrar","supprimer","elimina","삭제","Ištrinti","Verwijderen","usuń","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","télécharger","Download","다운로드","Atsisiųsti","Download","Pobierz","Stiahnuť"],"pause-pt":["Pozastavit tisk","Druck pausieren","Pause Print","Pausar Impresión","Mettre l\'impression en pause","Pausa Stampa","출력 일시 정지","Pristabdyti spausdinimą","Pauzeer print","Wstrzymaj drukowanie","Pozastaviť tlač"],"resume-pt":["Pokračovat v tisku","Druck fortsetzen","Resume Print","Continuar Impresión","Redémarrer l\'impression","Riprendi stampa","출력 복귀","Tęsti spausdinimą","Hervat print","Wznów drukowanie","Pokračovať v tlači"],"start-pt":["Start tisku","Druck starten","Start Print","Empezar impresión","Lancer l\'impression","Inizia stampa","출력 시작","Pradėti spausdinimą","Start print","Start druku","Štart tlače"],"stop-print":["Zrušit tisk","Druck abbrechen","Stop Print","Cancelar impresión","Annuler l\'impression","Annulla stampa","출력 정지","Sustabdyti spausdinimą","Stop print","Anuluj wydruk","Zrušiť tlač"],"upld-file":["Nahrát soubor","Datei hochladen","Upload File","Cargar Archivo","Télécharger un Fichier","Carica file","파일 업로드","Įkelti failą","Upload bestand","Prześlij plik","Nahrať súbor"],"check-updates":["Kontrola aktualizací","Updates suchen","Check Updates","Comprobar actualizaciones","Vérifier les Mises à Jour","Controlla aggiornamenti","업데이트 체크","Tikrinti atnaujinimus","","Sprawdź aktualizacje",""],"connect":{"link":[null,"Verbinden","Link","Enlace","Associer","Collegamento","연결","Susieti","Verbinden","Link",""],"unlink":["Odpojit","Trennen","Unlink","Desenlazar","Dissocier","Scollegato","연결끊기","Atsieti","Verbinding verbreken","Odłącz",""]},"chg":["Změnit","Ändern","Change","Cambia","Mettre à jour","Cambia","변경","Pakeisti","Wijzig","Zmień","Zmeniť"],"reset":["","Reset","Reset","Reset","Réinitialiser","Reset","리셋","Perkrauti","Reset","Reset",""],"disable-steppers":["Vypnout motory","Schrittmotoren deaktivieren","Disable Steppers","Desactivar motores","Desactiver les moteurs","Disabilita motori","모터 정지","Išjungti stoperius","Stappenmotors uitschakelen","Wyłącz silniki krokowe","Vypnúť motory"],"extrude":["Vytlačit","Extrudieren","Extrude","Extruye","extruder","Estrudi","압출","Ištraukti","Extrudeer","Ekstruzja","Vysunúť"],"retract":["Vtáhnout","Zurückziehen","Retract","Retraer","Retracter","Retrai","리트렉트","Atitraukti","Retract","Retrakcja","Zasunúť"],"set":["Nastavit","Setzen","Set","Ajuste","Régler","Imposta","설정","Nustatyti","Instellen","Ustaw","Nastaviť"],"yes":["Ano","Ja","Yes","Sí","Oui","Sì","예","Taip","Ja","Tak","Áno"],"no":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"upgrade":["Aktualizovat","Aktualisieren","Upgrade","Actualización","Mise à niveau","Aggiorna","업그레이드","Atnaujinti","","Aktualizacja",""],"chg-print-set":["Tisková nastavení","Druckeinstellungen","Print Settings","Ajustes de la Impresora","Réglages d\'Impression","Impostazioni di stampa","프린트 설정","Spausdinimo nustatymai","Printinstellingen","Ustawienia druku",""],"save-chgs":["Uložit změny","Änderungen speichern","Save changes","Guardar cambios","Enregistrer les modifications","Salva le modifiche","변경내용 저장","Išsaugoti pakeitimus","Wijzigingen opslaan","Zapisz zmiany","Uložiť zmeny"]},"camera":{"settings":["Nastavení kamery","Kamera-Einstellungen","Camera Settings","Ajustes de la Cámara","Paramètres de la Caméra","Impostazioni Fotocamera","카메라 세팅","Kameros nustatymai","Camera-instellingen","Ustawienia kamery",""],"name":["Název kamery","Kameraname","Camera Name","Nombre de la Cámara","Nom de la Caméra","Nome Fotocamera","카메라 명칭","Kameros pavadinimas","Cameranaam","Nazwa kamery",""],"resolution":["Rozlišení","Auflösung","Resolution","Resolución","Résolution","Risoluzione","해상도","Raiška","Resolutie","Rozdzielczość",""],"trigger-scheme":["","Auslöse-Schema","Trigger Scheme","Modo de Disparo","Mode de Déclenchement","Schema di attivazione","트리거 계획","Paleisti schemą","Triggerschema","Schemat wyzwalania",""],"focus":["Zaostření","Fokus","Focus","Enfocar","Focus","Messa a fuoco","포커스","","","Ostrość",""],"register-by-token":["","","","","","","","","","",""],"token":["","","","","","","","","","",""],"title":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"time":["Čas snímku","Zeit der Momentaufnahme","Snapshot Time","Hora de la Foto","Heure de la Capture","Tempo Istantanea","스냅샷 시간","Momentinis vaizdas","Snapshot-tijd","Czas migawki",""],"cloud":{"linked":["Připojeno","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":["Nepřipojeno","Unverbunden","Not Linked","No Enlazado","Non Associée","Non collegato","연결되지 않음","Nesusieta","Niet verbonden","Nie połączono",""],"label":["","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT",""]},"btn":{"connect":["Zkusit povolit kameru","Versuche Kamera zu aktivieren","Try to enable camera","Intenta habilitar la cámara","Essayer d\'activer la caméra","Prova ad abilitare la fotocamera","카메라 활성화 시도중","Pabandykite įjungti kamerą","Probeer de camera in te schakelen","Spróbuj aktywować kamerę",""],"settings":["Otevřít nastavení kamery","Öffne Kamera-Einstellungen","Open camera settings","Abrir los ajustes de la cámara","Ouvrir les paramètres de la caméra","Apri impostazioni fotocamera","카메라 설정 열기","Atidaryti kameros nustatymus","Open camera-instellingen","Otwórz ustawienia kamery",""],"link":["Připojit kameru do Connectu","Kamera mit CONNECT verbinden","Link camera to CONNECT","Asocia cámara a CONNECT","Associer la caméra à CONNECT","Collega fotocamera a CONNECT","카메라를 CONNECT에 연결하기","Susieti kamerą su CONNECT","Verbind camera met CONNECT","Połącz kamerę z CONNECT",""],"unlink":["Odpojit kameru z Connectu","Kamera von CONNECT trennen","Unlink camera from CONNECT","Desvincular la cámara de CONNECT","Dissocier la caméra de CONNECT","Scollega fotocamera da CONNECT","카메라를 CONNECT에서 연결 해제하기","Atsieti kamerą nuo CONNECT","Verbreek verbinding van camera met CONNECT","Odłącz kamerę od CONNECT",""]},"path":["Cesta","Pfad","Path","Ruta","Chemin","Percorso","경로","Kelias","Pad","Ścieżka",""],"driver":["Ovladač","Treiber","Driver","Controlador","Driver","Driver","드라이버","Draiveris","Driver","Sterownik",""]},"printer":{"title":["Tiskárna","Drucker","Printer","Impresora","imprimante","Stampante","프린터","Spausdintuvas","Printer","Drukarka","Tlačiareň"],"name":["Název tiskárny","Name des Druckers","Printer name","Nombre de la impresora","nom de l\'imprimante","Nome stampante","프린터 이름","Spausdintuvo pavadinimas","Naam van de printer","Nazwa drukarki","Názov tlačiarne"],"location":["Umístění tiskárny","Standort des Druckers","Printer location","Ubicación de la impresora","localisation de l\'imprimante","Posizione stampante","프린터 위치","Spausdintuvo vieta","Locatie van de printer","Lokalizacja drukarki","Umiestnenie tlačiarne"],"network_error_chime":["Zvukové upozornění při síťové chybě","Netzwerk-Fehlerton","Network Error Chime","Tono Error Red","Carillon d\'erreur réseau","Suono di errore di rete","네트워크 에러 차임벨","","","Dźwięk błędu sieci",""]},"print":{"fdm":{"1":["Je tiskárna připravena?","Ist der Drucker bereit?","Is the printer ready?","¿Está lista la impresora?","L\'imprimante est-elle prête ?","La stampante è pronta?","프린터가 준비되었습니까?","Ar spausdintuvas pasirengęs?","Is de printer klaar voor gebruik?","Czy drukarka jest gotowa?","Je tlačiareň pripravená?"],"2":["Je tisková podložka prázdná a čistá?","Ist der Druckbogen leer und sauber?","Is printing sheet empty and clean?","¿Está vacía y limpia la lámina de impresión?","Le surface d\'impression est-elle vide et propre ?","La piastra di stampa è vuota e pulita?","프린트 시트가 비어있고 깨끗합니까?","Ar spausdinimo lapas tuščias ir švarus?","Is het printplatform leeg en schoon?","Czy arkusz druku jest pusty i czysty?","Je tlačová podložka prázdna a čistá?"]}},"upld":{"title":["Nahrát soubor","Projekt hochladen","Upload file","envía proyecto","Téléversement de projet","Carica file","파일업로드","Įkelti failą","Bestand uploaden","prześlij projekt","Nahrať súbor"],"start-pt":["po přenosu zahájit tisk","Druck nach der Übertragung starten","Start print after transfer","Iniciar la impresión tras la transferencia","Démarrer l\'impression après le transfert","Avvia stampa dopo il trasferimento","전송 후 출력 시작","Pradėti spausdinimą po perdavimo","Start print na het omzetten","Rozpocznij drukowanie po przesłaniu","po prenose spustiť tlač"],"remote":{"source":["URL zdroje","Quell-URL","Source URL","URL Fuente","URL de la source","URL fonte","원본 URL","Šaltinio URL","Bron van URL","Źródłowy URL","URL zdroja"],"hint-fdm":["Zadejte URL souboru G-CODE","URL der G-CODE-Datei eingeben","Type URL of G-CODE file","Escribe URL de archivo G-CODE","Entrez l\'URL du fichier G-CODE du projet","Digitare URL del file G-CODE","G코드 파일의 주소를 입력하십시오","Įveskite G-CODE failo URL","Type de URL van het gcode-bestand","Wpisz adres URL pliku G-Code","Zadajte URL súboru G-code"],"file":["Název souboru","Dateiname","File name","Nombre del archivo","Nom de fichier","Nome file","파일명","Failo pavadinimas","Bestandsnaam","Nazwa pliku","Názov súboru"],"file-hint":["Zadejte název souboru","Dateiname eingeben","Type file name","Escribe nombre de archivo","Tapez le nom du fichier","Digitare nome file","파일명을 입력하십시오","Įveskite failo pavadinimą","Type de bestandsnaam","Wpisz nazwę pliku","Zadajte názov súboru"]},"direct":{"choose":["Vyberte {{file}} nebo jej přetáhněte sem.","Klicke um eine {{file}} Datei auszuwählen oder ziehe sie hier hin","Click to choose a {{file}} file or drag it here","Haz clic para elegir un archivo {{file}} o arrástralo hasta aquí","Cliquer pour choisir un fichier {{file}} ou déposez le ici","Fare clic per scegliere un file {{file}} o trascinarlo qui","선택한 {{file}} 파일을 클릭하거나 여기로 드래그하십시오","Pasirinkite {{file}} failą arba vilkite jį čia","Klik om een {{file}}-bestand te kiezen of sleep het hierheen","Kliknij, aby wybrać plik {{file}} lub przeciągnij go tutaj","Kliknutím vyberte súbor {{file}} alebo ho sem potiahnite."]}},"download":{"dl-started":["Začátek stahování","Herunterladen Gestartet","Download Started","Se inició la descarga","téléchargement démarré","Scaricamento Avviato","다운로드가 시작됨","Atsisiuntimas pradėtas","Downloaden gestart","Pobieranie rozpoczęte","Sťahovanie začalo"],"start-pt":["Spustit tisk","Autostart","Autostart","Inicio automático","Démarrage automatique","Avvio automatico","자동시작","Automatinis paleidimas","Autostart","Autostart","Spustiť tlač"]},"temps":{"title":["Teploty","Temperaturen","Temperatures","Temperaturas","Températures","Temperature","온도","Temperatūros","Temperatuur","Temperatury","Teploty"]},"":[null,null,null,null,null,null,null,null,null,null,null],"version":{"title":["Verze","Version","Version",null,"version",null,"버전","Versija","Versie",null,"Verzia"],"api":["API","API","API",null,"api",null,"API","API","API",null,"API"],"hostname":["Hostname","Hostname","Hostname",null,"nom d\'hôte",null,"호스트명","Hostname","Hostnaam",null,"Hostname"],"firmware":["Firmware","Firmware","Firmware",null,"micrologiciel",null,"펌웨어","Firmware","Firmware",null,"Firmware"],"server":["Server","Server","Server",null,"serveur",null,"서버","Serveris","Server",null,"Server"],"text":["Text","Text","Text",null,"texte",null,"텍스트","Tekstas","Tekst",null,"Text"],"sdk":["SDK","SDK","SDK",null,"sdk",null,"SDK","SDK","SDK",null,"SDK"],"fe":["Frontend","Frontend","Frontend",null,"frontend",null,"프론트엔드","Frontendas","Frontend",null,"Frontend"]},"sys-version":{"title":["Verze systému","Systemversion","System Version",null,"version du système",null,"시스템버전","Sistemos versija","Systeenversie",null,"Verzia systému"],"python":["Python","Python","Python","Python","python","Python","파이썬","Python","Python","Python","Python"],"description":["Popis","Beschreibung","Description","Descripción","description","Descrizione","설명","Aprašymas","Beschrijving","Opis","Popis"],"id":["ID","ID","ID","ID","ID","ID","ID","ID","ID","ID","ID"],"os":["OS","OS","OS","OS","Système d\'exploitation","S.O.","OS","OS","OS","OS","OS"]},"updates":{"title":[null,null,"System Updates",null,null,null,null,"Sistemos atnaujinimai",null,null,null]},"user":{"title":["Uživatel","Benutzer","User",null,"utilisateur",null,"유저","Vartotojas","Gebruiker",null,"Používateľ"],"username":["Uživatelské jméno","Benutzername","User Name","Nombre de usuario","nom d\'utilisateur","Nome Utente","유저명","Vartotojo vardas","Gebruikersnaam","Nazwa użytkownika","Používateľské meno"],"format":{"name":["Uživatelské jméno musí obsahovat alespoň 3 znaky.","Der Benutzername muss mindestens 3 Zeichen lang sein.","Username length must be at least 3 characters long.","El nombre de usuario debe tener al menos 3 caracteres.","La longueur du nom d\'utilisateur doit être d\'au moins 3 caractères.","La lunghezza del nome utente deve essere di almeno 3 caratteri.","유저명은 최소 3자리 이상 입력하십시오.","Vartotojo vardo ilgis turi būti mažiausiai 3 simboliai.","De gebruikersnaam moet minimaal 3 karakters lang zijn.","Długość nazwy użytkownika musi mieć co najmniej 3 znaki.","Používateľské meno musí obsahovať aspoň 3 znaky."],"password-1":["Heslo nesmí začínat či končit mezerami, a zároveň musí splňovat jednu z následujících podmínek:","Das Passwort darf weder am Anfang noch am Ende Leerzeichen enthalten und muss mindestens eine der folgenden Optionen erfüllen:","Password can\'t contain spaces on the beggining nor the end and must meet at least one of these options:","La Contraseña no puede empezar o terminar con espacios y debe cumplir al menos una de estas opciones:","Le mot de passe ne peut pas contenir d\'espaces au début ni à la fin et doit répondre à au moins l\'une de ces options :","La password non può contenere spazi né all\'inizio né alla fine e deve soddisfare almeno una di queste opzioni:","암호는 시작부분에 공백을 둘 수 없으며 다음옵션 중 하나이상을 충족해야 합니다.","Slaptažodis negali turėti tarpų pradžioje arba pabaigoje ir turi atitikti bent vieną iš šių variantų:","Het wachtwoord mag geen spaties aan het begin of het einde bevatten en moet aan minstens één van deze opties voldoen:","Hasło nie może zawierać spacji na początku ani na końcu i musi spełniać przynajmniej jeden z poniższych warunków:","Heslo nesmie začínať ani končiť medzerami a musí spĺňať aspoň jednu z týchto podmienok:"],"password-2":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 malé písmeno, 1 velké písmeno a 1 číslo","- Minimale Länge 8 Zeichen, davon ein Kleinbuchstabe, ein Großbuchstabe und eine Zahl","- Minimal length 8 characters, including one lowercase letter, one uppercase letter and one number","- Longitud mínima 8 caracteres, incluyendo una minúscula, una mayúscula y un número","- Longueur minimale de 8 caractères, dont une lettre minuscule, une lettre majuscule et un chiffre","- Lunghezza minima 8 caratteri, di cui una lettera minuscola, una lettera maiuscola e un numero","- 최소 길이 8자(소문자 1개, 대문자 1개, 숫자 1개 포함)","- 8 simbolių ilgio minimalus, įskaitant vieną mažąją raidę, vieną didžiąją raidę ir vieną skaičių","- Minimaal 8 karakters lang, met tenminste een kleine letter, een hoofdletter en een nummber","- Minimalna długość 8 znaków, w tym jedna mała litera, jedna duża litera i jedna cyfra","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 malého písmena, 1 veľkého písmena a 1 číslice"],"password-3":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 speciální symbol (např. @)","- Mindestlänge 8 Zeichen, einschließlich eines nicht alphanumerischen Zeichens (z. B. @)","- Minimal length 8 characters, including one non-alphanumeric character (e.g. @)","- Longitud mínima 8 caracteres, incluyendo los no alfanuméricos (como @)","- Longueur minimale de 8 caractères, dont un caractère non alphanumérique (par exemple @)","- Lunghezza minima 8 caratteri, compreso un carattere non alfanumerico (es. @)","- 영숫자가 아닌 문자(예: @) 1개를 포함한 최소 길이 8자","- 8 simbolių ilgio minimalus, įskaitant vieną neteisingą simbolį (pvz., @)","- Minimaal 8 karakters lang, met tenminste één niet-alfanumeriek karakter (bijv. @)","- Minimalna długość 8 znaków, w tym jeden znak niealfanumeryczny (np. @)","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 špeciálneho symbolu (napr. @)"],"password-4":["- Heslo musí obsahovat minimálně 15 znaků","- Minimale Länge 15 Zeichen","- Minimal length 15 characters","- Longitud mínima 15 caracteres","- Longueur minimale 15 caractères","- Lunghezza minima 15 caratteri","- 최소 길이 15자","- 15 simbolių ilgio minimalus","- Minimaal 15 karakters lang","- Minimalna długość 15 znaków","- Heslo musí obsahovať minimálne 15 znakov"]},"new-password":["Nové heslo","Neues Passwort","New Password","Nueva Contraseña","nouveau mot de passe","Nuova Password","신규 암호","Naujas slaptažodis","Nieuw wachtwoord","Nowe hasło","Nové heslo"],"re-password":["Zopakujte heslo","Passwort wiederholen","Repeat Password","Repetir Contraseña","répéter le mot de passe","Ripeti Password","암호 재입력","Pakartokite slaptažodį","Herhaal wachtwoord","Powtórz hasło","Zopakujte heslo"],"password":["Heslo","Passwort","Password","Contraseña","mot de passe","Password","암호","Slaptažodis","Wachtwoord","Hasło","Heslo"]},"serial":{"label":["Sériové číslo","Seriennummer","Serial Number","Número de serie","numéro de série","Numero Seriale","시리얼넘버","Serijinis numeris","Serienummer","Numer seryjny","Sériové číslo"]},"api_key":{"label":["","API Key","API Key","Clave API","Clé API","Chiave API","API KEY","API raktas","API-sleutel","Klucz API",""]},"logs":{"title":["Logy","Protokolle","Logs",null,"logs",null,"로그","Žurnalai","Logbestanden",null,"Logy"],"select-file":["Vyberte soubor","Datei auswählen","Select File",null,"Sélectionnez une fichier",null,"파일 선택","Pasirinkti failą","Selecteer bestand",null,"Vyberte súbor"],"not-selected":["Není vybrán soubor logů!","Es ist keine Protokolldatei ausgewählt!","No log file is selected!","¡No se ha seleccionado archivo de registro!","Pas de fichier de log sélectionné!","Nessun file di registro selezionato!","로그 파일이 선택되지 않았습니다!","Nepasirinktas joks žurnalų failas!","Geen logbestand geselecteerd!","Nie wybrano żadnego pliku logu!","Nie je vybraný žiadny logovací súbor!"],"select-file-placeholder":["Vyberte soubor logů","Protokolldatei auswählen","Select log file","Selecciona archivo de registro","selectionnez un fichier de log","Selezionare un file di registro","로그 파일 선택","Pasirinkti žurnalų failą","Selecteer logbestand","Wybierz plik logu","Vyberte logovací súbor"],"empty-file":["Soubor je prázdný!","Die Protokolldatei ist leer!","Log file is empty!","¡El archivo de registro está vacío!","Le fichier de log est vide!","Il file di registro è vuoto!","로그파일이 비어있음!","Žurnalų failas yra tuščias!","Logbestand is leeg!","Plik logu jest pusty!","Logovací súbor je prázdny!"],"file-too-large":["Soubory logů o velikosti větší než {{size}} jsou k dispozici pouze ke stažení!","Protokolldateien, die größer als {{size}} sind, stehen nur zum Herunterladen zur Verfügung.","Log files of size larger than {{size}} are available only for downloading.","Los archivos de registro mayores de {{size}} sólo se pueden descargar.","Les fichiers de log d\'une taille supérieure à {{size}} ne sont disponibles que pour le téléchargement.","I file di registro di dimensioni superiori a {{size}} sono disponibili solo per il download.","로그 파일을 다운로드 하기 위해서는 최소 {{size}} 이상의 용량이 필요합니다.","Žurnalų failai, didesni nei {{size}}, yra prieinami tik atsiunčiant.","Logbestanden groter dan {{size}} kunnen alleen gedownload worden.","Pliki logów o rozmiarze większym niż {{size}} są dostępne tylko do pobrania.","Logovacie súbory s veľkosťou väčšou ako {{size}} sú k dispozícii len na stiahnutie.!"]},"ntf":{"success":["Požadavek byl úspěšný","Erfolg","The request was successful","Éxito","la demande a été traitée avec succès","Successo","요청이 성공했습니다.","Užklausa buvo sėkminga","De aanvraag was succesvol","Sukces","Žiadosť bola úspešná"],"settings-suc":["Nastavení bylo úspěšně změněno.","Die Einstellungen wurden erfolgreich geändert.","Settings was changed successfully.","Los ajustes se han cambiado correctamente.","Paramètres modifiés avec succès.","Impostazioni modificate correttamente","설정이 성공적으로 변경되었습니다.","Nustatymai sėkmingai pakeisti.","Instelling succesvol gewijzigd.","Ustawienia zostały zmienione pomyślnie","Nastavenia boli úspešne zmenené."],"camera-suc":["","Kamera Steuerungsanfrage wurde gesendet","Camera control request has been sent","La petición de control de cámara se ha enviado","La demande de contrôle de la caméra a été envoyée","È stata inviata una richiesta di controllo della fotocamera","카메라 조작 요청이 전송되었습니다.","Kameros valdymo užklausa buvo išsiųsta","Aanvraag voor camerabesturing is verzonden","Wysłano żądanie sterowania kamerą",""],"camera-config-success":["Konfigurace kamery byla aktualizovaná","Kamerakonfiguration wurde aktualisiert","Camera configuration has been updated","La configuración de la cámara se ha actualizado","La configuration de la caméra a été mise à jour","La configurazione della fotocamera è stata aggiornata","카메라 구성이 업데이트되었습니다.","Kameros konfigūracija buvo atnaujinta","Cameraconfiguration is geüpdatet","Konfiguracja kamery została zaktualizowana",""],"upld-suc":["Soubor {{file_name}} byl úspěšně nahrán.","Das Hochladen des Projekts {{file_name}} war erfolgreich.","The file {{file_name}} was uploaded successfully.","El envío del proyecto {{file_name}} se completó.","Le projet {{file_name}} a été téléversé correctement.","Caricamento del progetto {{file_name}} riuscito.","{{file_name}}파일이 성공적으로 업로드되었습니다.","Failas {{file_name}} sėkmingai įkeltas.","Het bestand {{file_name}} is succesvol geüpload.","Przesyłanie projektu {{file_name}} powiodło się.","Súbor {{file_name}} bol úspešne nahraný."],"error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"upld-unsuc":["Nahrání souboru {{file_name}} selhalo.","Das Hochladen des Projekts {{file_name}} war nicht erfolgreich.","The file {{file_name}} upload was unsuccessful.","El envío del proyecto {{file_name}} ha fallado.","Le téléversement du projet {{file_name}} a échoué.","Caricamento del progetto {{file_name}} non riuscito.","{{file_name}}파일의 업로드가 실패하였습니다.","Failo {{file_name}} įkėlimas nepavyko.","Het bestand {{file_name}} is niet succesvol geüpload.","Przesyłanie projektu {{file_name}} nie powiodło się.","Nahrávanie súboru {{file_name}} zlyhalo."],"upld-start":["Požadavek na nahrání souboru byl přijat","Upload-Anfrage wurde angenommen","Upload request has been accepted","Se acepto la petición de subida","La demande de téléchargement a été acceptée","Richiesta di caricamento accettata","업로드 요청이 수락되었습니다.","Įkėlimo užklausa priimta","Uploadverzoek is geaccepteerd","Żądanie przesłania zostało zaakceptowane","Žiadosť o odoslanie bola prijatá"]},"sort":{"by-name":["Název","Name","Name","Nombre","Nom","Nome","이름으로 정렬하기","Pavadinimas","Naam","Nazwa",""],"by-date":["Datum","Datum","Date","Fecha","Date","Data","날짜로 정렬하기","Data","Datum","Data",""],"by-size":["Velikost","Größe","Size","Tamaño","Taille","Dimensioni","크기로 정렬하기","Dydis","Grootte","Rozmiar",""]},"unit":{"h":["h","h","h","h","h","h","h","h","u","g","h"],"min":["min","min","min","min","min","min","min","min","min","min","min"],"ml":["ml","ml","ml","ml","mL","ml","ml","ml","ml","ml","ml"],"rpm":["RPM","UPM","RPM","RPM","TPM","RPM","RPM","RPM","RPM","Obr./min","RPM"],"b":["B","B","B","B","B","B","B","B","B","B","B"],"kb":["KB","KB","KB","KB","KB","KB","KB","KB","kB","KB","KB"],"mb":["MB","MB","MB","MB","MB","MB","MB","MB","MB","MB","MB"],"gb":["GB","GB","GB","GB","GB","GB","GB","GB","GB","GB","GB"]},"exp-times":{"exp-time":["Doba osvitu [s]","Belichtung [s]","Exposure [s]","Exposición [s]","Exposition [s]","Esposizione [s]","[s]초 노출","Ekspozicija [s]","Belichting [s]","Czas naświetlania [s]","Osvit [s]"],"inc":["Navýšení expozice (s)","Belichtungszeit inkr. [s]","Exposure time incr. [s]","Incremento tiempo exp. [s]","Incr. du temps d\'exposition [s]","Incremento tempo di esposizione [s]","[s]초 노출 시간 증가","Ekspozicijos laiko padidėjimas [s]","Belichtingstijd verhogen [s]","Przyrost czasu naświetl. [s]","Prírastok osvitu (s)"],"layer-1st":["Osvit první vrstvy [s]","Erste Schicht Bel. [s]","First Layer Expo. [s]","Primera Capa Expo. [s]","Première couche Expo. [s]","Esposizione Primo layer [s]","첫번째 레이어 노출시간 [s]초","Pirmojo sluoksnio ekspozicija [s]","Belichtingstijd eerste laag [s]","Naśw. 1. warstwy [s]","Osvit prvej vrstvy [s]"],"profile":["Tiskový profil","Druckprofil","Print profile","Perfil de Impresión","Profil d\'Impression","Profilo di stampa","출력 프로필","Spausdinimo profilis","Printprofielen","Profil druku","Tlačový profil"],"faster":["Rychlejší","Schneller","Faster","Rápido","Plus rapide","Più veloce","빠르게","Greičiau","Sneller","Szybciej","Rýchlejšie"],"slower":["Pomalejší","Langsamer","Slower","Lento","Plus lent","Più lento","느리게","Lėčiau","Langzamer","Wolniej","Pomalšie"],"high-viscosity":["Velmi Viskózní","Hohe Viskosität","High Viscosity","Alta Viscosidad","Haute viscosité","Alta Viscosità","고점도","Aukštas klampumas","Hoge viscositeit","Wysoka lepkość","Vysoká viskozita"]}}}')}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.p="",(()=>{"use strict";var e=a(8751),t=a(8495),i=a(6648);const s=()=>{document.getElementById("menu").addEventListener("click",(()=>{document.getElementById("menu").classList.contains("burger-open")?n():(document.getElementById("menu").classList.add("burger-open"),document.getElementById("navbar").classList.remove("burger-menu"))})),document.getElementById("navbar").querySelectorAll("a[href]").forEach((e=>{e.addEventListener("click",n)}))};function n(){document.getElementById("menu").classList.remove("burger-open"),document.getElementById("navbar").classList.add("burger-menu")}var o=a(7780),r=a(1351),l=a(5412);const d=(e,t)=>{const a=l.L.init(e,t);a&&(a.setOptions((0,o.Vb)()),a.value=(0,o.G3)(),a.onselect=e=>{(0,o.m0)(e),window.location.reload()})};let c=!1;const u={};async function p(e){const t=(new Date).getTime(),a=Object.fromEntries(Object.entries(u).map((([a,i])=>[a,(()=>{if(!e)return i.init;if(i.update){if(!i.updateInterval)return!0;if(i.timestamp||(i.timestamp=t+i.updateInterval),t>=i.timestamp)return i.timestamp=t+i.updateInterval,!0}})()?i.get():void 0])).filter((([,e])=>void 0!==e))),i=Object.values(a),s=await Promise.all(i.map((e=>e.then((e=>({ok:!0,payload:e}))).catch((e=>({ok:!e.code&&null,error:e}))))));return Object.fromEntries(Object.entries(a).map((([e],t)=>[e,s[t]])))}async function m(e){let a=!1;for(;;){let i=!1;try{const t=await p(a);t.status&&(c=null===t.status.ok),Object.values(t).forEach((({ok:e,error:t})=>{var a;e||(i=!0,null!==e&&(a=t,(0,r.S)(a,{fallbackMessage:{title:"API error",message:"Cannot connect to printer"}})))})),a?g(t):i||(v({...t,printer:e}),a=!0)}catch(e){h(e)}t.Z.setConnected(!c),await new Promise((e=>setTimeout(e,1e3)))}}function v(a){try{t.Z.init(a),window.onpopstate=t=>t&&(0,e.g9)(t.currentTarget.location.hash||"#dashboard"),(0,e.g9)(window.location.hash||"#dashboard")}catch(e){h(e)}}function g(e){try{t.Z.update(e)}catch(e){h(e)}}function h(e){(0,r.S)(e,{fallbackMessage:{title:"Application error",message:"Something bad happened on application side"}}),console.error(e)}window.onload=()=>{console.log("PrusaLink v.3.12.0 #b'c627133'"),s(),d("lang-dropdown","lang-dropdown"),(0,o.ot)(),document.querySelectorAll("a[href]").forEach((t=>{t.addEventListener("click",(a=>{(0,e.c4)(t.href)&&a.preventDefault()}))})),(0,i.Z5)().then((e=>{e&&m(e)}))}})()})(); diff --git a/prusa/link/static/main.38331aecb9f4fc5529ae.js b/prusa/link/static/main.38331aecb9f4fc5529ae.js new file mode 100644 index 00000000..6e94f81a --- /dev/null +++ b/prusa/link/static/main.38331aecb9f4fc5529ae.js @@ -0,0 +1 @@ +(()=>{var e={5862:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f844a0a85dde310826fce450c3e149d3.svg"},340:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"d0ce7d704590cb0b868ae92249ee86e8.svg"},3246:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"e6e0734bc2dad609a3e92f1873412f11.svg"},6730:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"557f3616d5a1b407b59795b8328bb51f.svg"},8065:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"2e842fcb7b83af8e1e0d26afd80f8fd9.svg"},8920:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24c2502c54c43441d0bb4bbc17e10a83.svg"},2456:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f6a7f34a841f532dd1e3e4d610d164f6.svg"},9819:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"53df9c11e268c2390b147239f9ee8796.svg"},7038:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"9332c323b291ba7226ddcdabb0c8e7c4.svg"},1656:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"79e90794ba3b36a64a12414decda0932.svg"},9594:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"a443dadfc7e114c74dae6cd64a74db9d.svg"},931:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"926f52aea63cfd597b30096bfe4077c6.svg"},7336:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"44b654f4ca724e154a9bc60335e98847.svg"},9387:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"8657650f85be23655543d28f58941616.svg"},5300:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ea93bcffb8771234f8c641f3b7e9f848.svg"},3482:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ccd215a92d0427a21339a8c38e2a40f3.svg"},5515:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"997c391425907810b4a6e42663d11fd4.svg"},4578:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24e2e49c87df140cf16aa18b4e261f12.svg"},2e3:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"58151992d28dfb34ee417e0ebf6a66b6.svg"},2290:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"c8a0ca767f73685bbe06863f81e9d3cb.svg"},3174:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"39e93870e6b8fd4ef2d9ed668f8c1545.svg"},8796:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"1218694688ee15ee97bcded9e1a75cc8.svg"},1373:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"dfb811cc28f8e3d7c14bcedbe7ef35b8.svg"},4622:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"b891ace1622f34bac5a2b4edb7adc733.svg"},5464:(e,t,a)=>{var i=a(7091),s=a(8065),n=a(4622),o=a(6730),r='

    • Camera Name

      -

    • Snapshot Time

      -

      ';e.exports=r},3478:(e,t,a)=>{var i=a(7091),s=a(340),n=a(5862),o=a(1656),r=i(s),l=i(n),d=i(o),c='

      printer coordinates

      X axis

      0 mm

      Y axis

      0 mm

      Z axis

      0 mm

      stepper motors

      heated bed X and Y move

      move step [mm]

      nozzle Z move

      extruder

      extrude/retract step [mm]

      nozzle temperature

      0°C

      speed

      100%

      heated bed temperature

      0°C

      flow

      100%

      ';e.exports=c},2373:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(3174),b=a(8796),f=i(s),y=i(n),k=i(o),w=i(r),x=i(l),z=i(d),S=i(c),E=i(u),P=i(p),N=i(m),L=i(v),I=i(g),T='

      !!! DO NOT DISTRIBUTE !!! INTERNAL TESTING ONLY !!!

      Upload file

      Add file from

       

      Click to choose a *.sl1 file or drag it here

      Source URL

      Type URL of G-CODE file

      File name

      Type or edit file name

      Progress

      NA

      Size

      NA

      Download Started

      NA

      Remaining Time

      NA

      Autostart

      NA

      Temperatures

      Cameras

      • -

      • -

      ';e.exports=T},7189:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(931),b=a(5515),f=a(3174),y=a(8796),k=a(9594),w=a(8065),x=a(8920),z=i(s),S=i(n),E=i(o),P=i(r),N=i(l),L=i(d),I=i(c),T=i(u),_=i(p),j=i(m),C=i(v),A=i(g),D=i(h),B=i(b),O=i(f),q=i(y),M=i(k),R=i(w),H=i(x),U='

      Local

      0%

      0 GB of 0 GB free

      Add file from

       

      Click to choose a *.sl1 file or drag it here

      Source URL

      Type URL of G-CODE file

      File name

      Type or edit file name

      Progress

      NA

      Size

      NA

      Download Started

      NA

      Remaining Time

      NA

      Autostart

      NA

      ';e.exports=U},5198:(e,t,a)=>{var i=a(7091),s=a(4622),n=a(6730),o='

      ';e.exports=o},2936:(e,t,a)=>{var i=a(7091),s=a(7038),n=a(7336),o=a(1373),r=a(4622),l=a(6730),d=i(s),c=i(n),u=i(o),p='

      version

      api

      hostname

      firmware

      server

      text

      sdk

      frontend

      3.12.0

      system version

      updates

      connection

      PRUSA CONNECT

      connection status

      Successfully connected

      3D printer connection status

      Successfully connected

      printer

      printer name

      printer location

      network error chime

      user

      username

      new password

      repeat password

      current password

      serial number

      serial number

      api key

      api key

      logs

      select file

      • No log file is selected!
      ';e.exports=p},7091:e=>{"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(t.hash&&(e+=t.hash),t.maybeNeedQuotes&&/[\t\n\f\r "'=<>`]/.test(e)?'"'.concat(e,'"'):e)}},6648:(e,t,a)=>{"use strict";a.d(t,{LK:()=>d,O2:()=>n,Z5:()=>g,gJ:()=>m,iT:()=>c,wU:()=>r});var i=a(8236),s=a(1351);const n=window.location.pathname.endsWith("/")?window.location.pathname.slice(0,-1):window.location.pathname,o=()=>new Promise(((e,t)=>{(0,i.o)((e=>t=>{const a=document.getElementById("modal-apiKey"),i=document.importNode(a.content,!0);return i.getElementById("apiKey").addEventListener("keydown",(a=>{"Enter"==a.key&&(t(),e(a.target.value))})),i.getElementById("login").addEventListener("click",(a=>{a.preventDefault();let i=document.getElementById("apiKey").value;t(),e(i)})),i})(e),{timeout:0,closeOutside:!1})})).then((e=>sessionStorage.setItem("apiKey",e))),r=(e="application/json")=>"ApiKey"==sessionStorage.getItem("authType")?{"X-Api-Key":sessionStorage.getItem("apiKey"),Accept:e}:{Accept:e},l=()=>new Promise(((e,t)=>(sessionStorage.setItem("auth","pending"),fetch(`${n}/api/v1/info`,{headers:r()}).then((t=>{if(401==t.status){const a=t.headers.get("WWW-Authenticate").split(" ")[0];return sessionStorage.setItem("authType",a),sessionStorage.removeItem("apiKey"),"ApiKey"==a?o().then((()=>l().then((t=>e(t))))):l().then((t=>e(t)))}{const e=t.json();return 200!=t.status&&e.then((e=>(0,s.S)({data:e}))),e}})).then((t=>{sessionStorage.setItem("auth","true"),e(t)}))))),d=(e,t={})=>u(e,t,"application/json","json"),c=(e,t={})=>u(e,t,"text/plain","text");async function u(e,t={},a,i){if("true"!=sessionStorage.getItem("auth"))throw{code:401};{t.headers={...t.headers,...r(a)};const s=await fetch(`${n}${e}`,t),o=s.status,l={code:o,eTag:s.headers.get("etag")};switch(o){case 401:throw sessionStorage.setItem("auth","false"),l;case 204:case 304:return l;default:const e=await s.text();if(!s.ok){if(e.length>0)try{l.data=JSON.parse(e)}catch{}throw l.data=l.data||{title:`Error ${o}`,message:s.statusText},l}return l.data="json"===i?0===e.length?{}:JSON.parse(e):e,l}}}const p=(e,t,a)=>new Promise(((i,s)=>{"true"==sessionStorage.getItem("auth")?(t.headers={...r(),...t.headers},fetch(a?`${n}${e}?ct=${a}`:e,t).then((e=>{401==e.status&&(sessionStorage.setItem("auth","false"),s(e)),e.ok?e.blob().then((t=>i({url:URL.createObjectURL(t),headers:e.headers}))):s(e)})).catch((e=>s(e)))):s()})),m=(e,t,a={})=>p(`${n}${e}`,{...a,headers:{...a.headers,Accept:"image/*"}},t),v=e=>{const t=document.getElementById("modal-welcome"),a=document.importNode(t.content,!0);return a.querySelector(".close-button").addEventListener("click",e),a},g=()=>null==localStorage.getItem("showWelcome")?new Promise(((e,t)=>{(0,i.o)(v,{closeCallback:()=>{localStorage.setItem("showWelcome",!0),e()}})})).then((()=>l())):l()},1972:(e,t,a)=>{"use strict";a.d(t,{Z:()=>s});var i=a(6648);const s=function(e,t){let a=document.createElement("a");a.href=`${i.O2}${e}`,a.download=t||"",a.click(),a.remove()}},646:(e,t,a)=>{"use strict";function i(e,t=!0){e&&(t&&!e.hasAttribute("hidden")&&e.setAttribute("hidden",!0),!t&&e.hasAttribute("hidden")&&e.removeAttribute("hidden"))}function s(e,t=!0){i(e,!t)}function n(e,t=!0){e&&(t&&!e.hasAttribute("disabled")&&e.setAttribute("disabled",!0),!t&&e.hasAttribute("disabled")&&e.removeAttribute("disabled"))}function o(e,t=!0){return n(e,!t)}function r(){s(document.querySelector("#job .loading-overlay"))}function l(){i(document.querySelector("#job .loading-overlay"))}function d(e,...t){const a=i=>{if(t)for(const e of t)if(e&&e.contains(i.target))return;e&&e(),window.removeEventListener("pointerup",a)};window.addEventListener("pointerup",a)}a.d(t,{H:()=>n,QH:()=>i,QP:()=>r,Ti:()=>d,Zk:()=>l,gL:()=>o,yx:()=>s})},5537:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=function(e){return"string"==typeof e?document.getElementById(e):e||document.body}},9741:e=>{e.exports=function(e,t){let a=t.split("."),i=e;for(const e of a)if(i=i[e],!i)break;return i}},7780:(e,t,a)=>{"use strict";a.d(t,{G3:()=>v,Iu:()=>h,Vb:()=>g,m0:()=>m,ot:()=>f});var i=a(5537),s=a(9741),n=a.n(s);const o=a(4977),r=o.langs,l=o.texts,d=r.indexOf("en");let c,u;function p(){return navigator.language||navigator.userLanguage||""}function m(e){const t=r.indexOf(e);return-1!==t&&(u=t,c=e,localStorage.setItem("lang",c),!0)}function v(){return c}function g(){return[...r]}function h(e,t){let a=n()(l,`${e}.${u}`);if(!a)return a=n()(l,`${e}.${d}`),a||(a=e),b(a,t),a;let i=null;if(t&&(i=Object.assign({},t),delete i.query,delete i.ref),i&&Object.keys(i).length>0){let e,i=a,s=/{{(.*?)}}/g;for(;e=s.exec(a);){let s=a.substr(e.index+2,e[0].length-4);if("query"!==s&&"ref"!==s)if(s in t){let a=t[s];i=i.replace(e[0],a)}else 0}a=i}return b(a,t),a}function b(e,t){if(t)if(t.ref){t.ref.innerHTML=e}else if(t.query){let a=document.querySelector(t.query);a?a.innerHTML=e:console.warn(`cannot find element with "${t.query}" query`)}}function f(e){(0,i.Z)(e).querySelectorAll('[data-label]:not([data-label=""])').forEach((e=>{const t=h(e.getAttribute("data-label")),a=e.getAttribute("data-label-target");a?e.setAttribute(a,t):e.innerHTML=t}))}m(localStorage.getItem("lang"))||m(p().toLowerCase())||m(p().toLowerCase().split("-")[0])||m("en")},2451:(e,t,a)=>{"use strict";a.d(t,{Z:()=>N});var i=a(6648),s=a(646),n=a(7780),o=a(3707),r=a(8236),l=a(5412),d=a(1351);let c,u=!1,p=[];const m={TEN_SEC:"TEN_SEC",THIRTY_SEC:"THIRTY_SEC",SIXTY_SEC:"SIXTY_SEC",EACH_LAYER:"EACH_LAYER",FIFTH_LAYER:"FIFTH_LAYER",MANUAL:"MANUAL"},v=e=>{switch(e){case m.TEN_SEC:return(0,n.Iu)("cameras.trigger-scheme.ten-sec");case m.THIRTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.thirty-sec");case m.SIXTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.sixty-sec");case m.EACH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.each-layer");case m.FIFTH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.fifth-layer");case m.MANUAL:return(0,n.Iu)("cameras.trigger-scheme.manual");default:return`${e}`}},g=()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-suc")),h=(e,t=E)=>{void 0===c&&(c=e.camera?.id),u=e.link.connect.ok,(0,i.LK)("/api/v1/cameras").then((e=>{const a=(e?.data?.camera_list||[]).map((e=>{let t=p.find((t=>t.id===e.camera_id))||{};return e.camera_id===c&&(e.connected||(c=null)),{id:e.camera_id,config:e.config,connected:e.connected,detected:e.detected,stored:e.stored,registered:e.registered,nextSnapshotAt:t?.nextSnapshotAt,lastSnapshotAt:t?.lastSnapshotAt,lastSnapshotUrl:t?.lastSnapshotUrl}})),i=p.filter((e=>!a.find((t=>e.id===t.id))));t&&t(a,i),p=a})).catch(d.S),p.filter((e=>e.connected)).forEach((e=>y(e.id)))},b=e=>`camera_${e}`,f=e=>document.getElementById(b(e)),y=e=>{const t=p.find((t=>t.id===e));if(!t)return;const a=new Date;t.lastSnapshotAt&&t.nextSnapshotAt&&a{const n=p.find((t=>t.id===e)),o=b(e),r=document.querySelector(`#${o} .camera__no-snapshot`),l=document.querySelector(`#${o} .camera__snapshot`);if(r&&(0,s.yx)(r,!1),l&&((0,s.yx)(l,!0),l.src=t),n){const e=`${i.get("cache-control")}`.match(/max-age=(\d+)/);let s;e&&(s=parseInt(e[1],10)),s||(s=11);const o=i.get("expires"),r=i.get("last-modified"),l=e=>{const t=new Date;return new Date(t.getTime()+1e3*e)};n.nextSnapshotAt=o?new Date(o):l(s),n.nextSnapshotAt{e||(e=c);const t=e?p.find((t=>t.id===e)):null,a=document.getElementById("camera-snapshot-picture"),i=document.getElementById("camera-snapshot-time"),s=document.getElementById("camera-snapshot-name"),[n,o,r,l]=t?.lastSnapshotAt?[t.id,t.config.name,t.lastSnapshotAt.toLocaleString(),t.lastSnapshotUrl]:[null,"-","-",""];c=n,a&&(a.src=l),i&&(i.innerText=r),s&&(s.innerText=o)},w=(e,t,a=!1)=>{e.querySelector(".camera__name").innerText=t.config.name,e.querySelector(".camera__path").innerText=t.config.path||"-",e.querySelector(".camera__driver").innerText=t.config.driver||"-",e.querySelector(".camera__cloud").innerText=t.registered?(0,n.Iu)("camera.cloud.linked"):(0,n.Iu)("camera.cloud.not-linked");const i=e.querySelector(".camera__register"),o=e.querySelector(".camera__unregister"),r=e.querySelector(".camera__add"),l=e.querySelector(".camera__remove"),d=e.querySelector(".camera__settings");(0,s.yx)(i,u&&t.connected&&!t.registered),(0,s.yx)(o,u&&t.connected&&t.registered),(0,s.yx)(r,!1),(0,s.yx)(l,!t.connected),(0,s.yx)(d,t.connected),a&&(r.title=(0,n.Iu)("camera.btn.connect"),d.title=(0,n.Iu)("camera.btn.settings"),i.title=(0,n.Iu)("camera.btn.link"),o.title=(0,n.Iu)("camera.btn.unlink"),r.addEventListener("click",(e=>{e.stopPropagation(),z(t.id)}),!1),l.addEventListener("click",(e=>{e.stopPropagation(),S(t.id)}),!1),d.addEventListener("click",(e=>{e.stopPropagation(),P(t.id)}),!1),i.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"POST")}),!1),o.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"DELETE")}),!1))},x=(e,t)=>{(0,i.LK)(`/api/v1/cameras/${e}/connection`,{method:t}).then((()=>g())).catch(d.S)},z=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:t.config})}).then((()=>g())).catch(d.S)},S=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"DELETE"}).then((()=>g())).catch(d.S)},E=(e,t)=>{const a=document.getElementById("cameras-list");t.forEach((e=>{const t=f(e.id);t&&a.removeChild(t)})),e.sort(((e,t)=>t.connected-e.connected)).forEach((e=>{const t=f(e.id);if(t)w(t,e);else{const t=(e=>{const t=document.getElementById("camera-list-item")?.content;if(!t)return null;const a=document.importNode(t,!0),i=a.querySelector("li"),o=e.id;return i.addEventListener("click",(e=>{const t=p.find((e=>e.id===o));t&&t.connected&&k(t.id),e.preventDefault()}),!1),i.id=b(e.id),a.querySelector(".camera__path__label").innerText=(0,n.Iu)("camera.path"),a.querySelector(".camera__driver__label").innerText=(0,n.Iu)("camera.driver"),a.querySelector(".camera__cloud__label").innerText=(0,n.Iu)("camera.cloud.label"),(0,s.yx)(a.querySelector(".camera__snapshot"),!1),w(a,e,!0),a})(e);t&&a.appendChild(t)}}))},P=e=>new Promise(((t,a)=>{(0,r.o)(((e,t)=>t=>{const a=`/api/v1/cameras/${e}`,r=document.getElementById("modal-camera-settings"),c=document.importNode(r.content,!0),u=c.getElementById("camera-settings__name"),p=c.getElementById("camera-settings__focus"),g=l.L.init(c.getElementById("camera-settings__resolution"),"camera-settings__resolution"),h=l.L.init(c.getElementById("camera-settings__trigger-scheme"),"camera-settings__trigger-scheme"),b=c.getElementById("yes");return(0,i.LK)(a).then((e=>{const r=e.data,l=r.available_resolutions.sort(((e,t)=>e.width===t.width?t.height-e.height:t.width-e.width)).map(((e,t)=>`${e.width}x${e.height}`)),c=Object.keys(m),f=c.map((e=>v(e))),y=r.capabilities.includes("FOCUS");u.value=r.name,g.setOptions(l),g.value=`${r.resolution.width}x${r.resolution.height}`,h.setOptions(f),h.value=v(r.trigger_scheme),(0,s.yx)(p.parentNode,y),console.log(`DEBUG: has focus (${y})`,r),y&&(p.value=Math.round(100*r.focus)),b.addEventListener("click",(()=>{const[e,s]=g.value.split("x").map((e=>parseInt(e))),r=c[f.indexOf(h.value)],l=y?{focus:p.value/100}:{};(0,i.LK)(`${a}/config`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u.value,resolution:{width:e,height:s},trigger_scheme:r,...l})}).then((()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-config-success")))).catch(d.S).finally(t)}))})).catch(d.S),c.getElementById("no").addEventListener("click",(()=>t())),c})(e),{timeout:0,closeOutside:!1})})).then((()=>{lastUpdated=null,h()})),N={load:e=>{p=[],(0,n.Iu)("cameras.link",{query:"#title-status-label"}),h(e)},update:h,getCameraNode:f,getCameraNodeId:b,updateCurrentCamera:k}},732:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(646),n=a(5489),o=a(6648);var r=a(1351),l=a(4800);a(7838);let d=1,c=1;const u=e=>{(0,n.ZP)("control",e),function(e){const t=e.state,a=document.querySelectorAll("#control button"),i=["extrude","retract"],n=["flowrate","bed","nozzle","speed"],o=[...n,...i,"move-step","extrude-retract-step","heated-bed-xy-move"];if([l.PT.PRINTING||l.PT.BUSY||l.PT.PAUSED].includes(t)){const e=t===l.PT.PAUSED?o:n;a.forEach((t=>{const a=t.id||t.parentNode.id||t.parentNode.parentNode.id;(0,s.H)(t,!e.includes(a))}))}const r=e.telemetry.temperature.nozzle.current||0,d=e.printer.minExtrusionTemp||0,c=r&&d&&r>=d;i.forEach((e=>(0,s.H)(document.getElementById(e),!c)))}(e)};function p(e,t){if("move"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"jog",...e})}))(function(e){const t=e.includes("-"),a=e.replace(RegExp("[+-]"),"");return a?{[a]:t?-d:d}:(console.error(`"${e}" is not valid direction`),{})}(t)).catch((e=>(0,r.S)(e)))}else if("home"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"home",axes:e})}))(t.split(",")).catch((e=>(0,r.S)(e)))}}function m(e,t,a){function i(e){return Number.parseFloat(e.getAttribute("data-step"))}if(e){const n=e.querySelectorAll("button[data-step]"),o=e=>{n.forEach((t=>{i(t)===e?((0,s.H)(t),t.setAttribute("selected",!0)):((0,s.gL)(t),t.hasAttribute("selected")&&t.removeAttribute("selected"))}))};n.forEach((e=>{const t=i(e);isNaN(t)||(e.onclick=()=>{o(t),a(t)})})),o(t)}}const v={load:e=>{(0,i.Iu)("control.title",{query:"#title-status-label"}),function(e){function t(e,t){switch(e){case"bed":return i=t,(0,o.LK)("/api/printer/bed",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",target:i})});case"flowrate":return a=t,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"flowrate",factor:a})});case"nozzle":return(e=>(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",targets:{tool0:e}})}))(t);case"speed":return(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"speed",factor:e})}))(t);default:throw Error("Unknown property!")}var a,i}e&&e.querySelectorAll(".input-wrapper").forEach((e=>{const a=e.querySelector("input"),i=e.querySelector("button");if(a){const e=()=>{const e=a.getAttribute("data-action"),i=Number.parseFloat(a.value);isNaN(i)||t(e,i).then((e=>{a.value=""})).catch((e=>(0,r.S)(e)))};a.onkeyup=t=>{"Enter"===t.key&&(e(),a.blur())},i&&(i.onclick=e)}}))}(document.querySelector("#control")),m(document.querySelector("#control #move-step"),d,(e=>d=e)),m(document.querySelector("#control #extrude-retract-step"),c,(e=>c=e)),function(){const e=document.querySelector("#control #disable-steppers");e&&(e.onclick=()=>{(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"disable_steppers"})}).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #extrude");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #retract");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:-e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #heated-bed-xy-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),function(){const e=document.querySelector("#control #nozzle-z-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),u(e)},update:u}},5502:(e,t,a)=>{"use strict";a.d(t,{Z:()=>S});var i=a(7780);const s=(0,i.Iu)("prop.at"),n=(0,i.Iu)("unit.h"),o=(0,i.Iu)("prop.less-than"),r=(0,i.Iu)("unit.min"),l=((0,i.Iu)("unit.ml"),(0,i.Iu)("unit.rpm")),d=(0,i.Iu)("prop.today-at"),c=(0,i.Iu)("prop.tmw-at"),u=(0,i.Iu)("unit.b"),p=(0,i.Iu)("unit.kb"),m=(0,i.Iu)("unit.mb"),v=(0,i.Iu)("unit.gb"),g=(0,i.Iu)("prop.true"),h=(0,i.Iu)("prop.false");function b(e,t=!0,a=1){return e>0?t?e.toFixed(a):e:0}function f(e){const t=new Date(1e3*e);var a=localStorage.getItem("lang");return(t.toLocaleDateString(a,{year:"numeric",month:"numeric",day:"numeric"})+" "+t.toLocaleTimeString(a,{hour:"numeric",minute:"numeric"})).substring(0,25)}function y(e){let t="00:00";if(e){let a=new Date,i=new Date(a.getTime()+1e3*e),n=new Date(a);n.setDate(n.getDate()+1);let o="";if(i.getDate()==a.getDate()&&i.getMonth()==a.getMonth())o=`${d} `;else if(i.getDate()==n.getDate()&&i.getMonth()==n.getMonth())o=`${c} `;else{let e={month:"numeric",day:"numeric"};o=`${i.toLocaleString(window.navigator.language,e)} ${s} `}t=o+("0"+i.getHours()).substr(-2)+":"+("0"+i.getMinutes()).substr(-2)}return t}function k(e){if(e<60)return o;const t=Math.floor(e/60%60),a=Math.floor(e/3600);return(a>0?`${a} ${n}`:"")+(t>0?` ${t} ${r}`:"")}function w(e){let t=e;const a=[u,p,m,v];for(let e=0;e{if(void 0===t||null===t&&"progress"!==e)return(0,i.Iu)("prop.na");switch(e){case"number":return b(t);case"temp":return b(t)+" °C";case"temp_int":return b(t,0)+"°C";case"fan":return b(t)+` ${l}`;case"print":case"progressPct":return b(t||0,!0,0)+"%";case"pos":return b(t)+" mm";case"date":return f(t);case"time":return k(t);case"timeEst":return y(t);case"progress":return b(100*(t||0),!0,0)+"%";case"percent":return`${b(t||0,!0,0)}%`;case"material":return t||(0,i.Iu)("prop.na");case"size":return w(t);case"boolean":return x(t);case"diameter":return b(t,!0,2)+" mm";default:return t}},S=(e,t)=>z(e,t)},5412:(e,t,a)=>{"use strict";a.d(t,{L:()=>s});var i=a(5537);class s{set value(e){this._value=e,this.updateLabel()}get value(){return this._value}constructor(e,t,a){const i=this;this._label=t,this._ul=a,this._value=t.innerHTML,this.is_open=!1,this._options=[],this._onKeyDown=e=>{if(i.is_open){switch(e.key.toLowerCase()){case"escape":return void i.close();case"arrowdown":let e=!1;for(const t of this._ul.childNodes){if(e){this._highlight(t);break}t.classList?.contains("select")&&(e=!0)}break;case"arrowup":let t=null;for(const e of this._ul.childNodes){if(e.classList?.contains("select")){t&&this._highlight(t);break}t=e}break;case"enter":for(const e of this._ul.childNodes)if(e.classList.contains("select")){const t=e.innerText;this.value=t,this.onselect&&this.onselect(t),this.close();break}}e.preventDefault()}},this._onClick=t=>{const a=t.target.parentNode;if(!i.is_open)return!0;a!==e&&i.close()},window.addEventListener("keydown",this._onKeyDown,!1),window.addEventListener("click",this._onClick,!1),this.onselect=void 0,e.onclick=e=>{e.preventDefault(),this.is_open?this.close():this.open()}}_highlight(e){this._ul.childNodes.forEach((t=>{t===e?t.classList.add("select"):t.classList.remove("select")}))}destructor(){window.removeEventListener("keypress",this._onKeyPress),window.removeEventListener("click",this._onClick)}static init(e,t){let a=(0,i.Z)(e);const n=document.getElementById("dropdown-template"),o="dropdown"===a.getAttribute("data-type")?a:a.querySelector('select[data-type="dropdown"]');if(!o)return;o.after(document.importNode(n.content,!0));const r=o.nextElementSibling;r.id=t,o.remove();const l=r.querySelector(".dropdown-btn"),d=l.querySelector(".dropdown-label"),c=r.querySelector(".dropdown-content ul");return l&&d&&c?new s(l,d,c):void 0}setOptions(e){this._options=e}updateLabel(){this._label.innerHTML=this._value}select(e){this._label.innerHTML=e}open(){this._ul.classList.contains("open")||(this._options.forEach((e=>{const t=document.createElement("li");e===this._value&&(t.className="select selected"),t.innerText=e,t.onclick=()=>{this.select(e),this.value=e,this.onselect&&this.onselect(e),this.close()},t.onmouseover=()=>this._highlight(t),this._ul.appendChild(t)})),this._ul.classList.add("open")),this.is_open=!0}close(){for(this._ul.classList.remove(["open"]);this._ul.firstChild;)this._ul.removeChild(this._ul.firstChild);this.is_open=!1}}},1351:(e,t,a)=>{"use strict";a.d(t,{S:()=>n});var i=a(3707);let s={};function n(e,t){let a=e?.data?.title||t?.fallbackMessage?.title||"Error",n=e?.data?.message||t?.fallbackMessage?.message||"Action can not be performed",o=!1;if(e?.data){const t=e.data;t.code&&(a+=`- ${t.code}`,"7"==`${t.code}`[3]&&(o=!0)),t.url&&(n+=`
      more info`)}const r=e?.data?.code||`${a}\n${n}`;if(s[r])return;s[r]=!0;const l=()=>s[r]=!1;o?(0,i.Kp)(a,n,l):(0,i.vU)(a,n,l)}},8236:(e,t,a)=>{"use strict";a.d(t,{o:()=>n});var i=a(7780);const s={count:0,current:0},n=(e,t={})=>{const a=Object.assign({timeout:5500,closeOutside:!0},t),n=s.count;s.count=s.count+1;const o=document.querySelector(".modal-box");t.className&&o.classList.add(t.className);const r=o.parentElement;for(;o.firstChild;)o.removeChild(o.firstChild);const l=()=>{n==s.current&&r.classList.contains("show-modal")&&(r.classList.remove("show-modal"),a.closeCallback&&a.closeCallback())},d=e=>{e.target===r&&l()};a.closeOutside&&window.addEventListener("click",d);const c=e(l);s.current=n,o.appendChild(c),(0,i.ot)(o),r.classList.add("show-modal"),a.timeout>0&&setTimeout(l,a.timeout)}},5951:(e,t,a)=>{"use strict";function i(e,t,a="right"){if(!e)return;const i=e.querySelector(".fill");if(i){const e=`${["top","right","bottom","left"].map((e=>(e=>e===a?100-(t||0)+"%":0)(e))).join(" ")}`;i.style.inset=e}}a.d(t,{g:()=>i})},2957:(e,t,a)=>{"use strict";a.d(t,{Z:()=>w});var i=a(7780),s=a(5489),n=a(6648),o=a(646),r=a(1351);var l=a(3707),d=a(8236);let c=null,u=null,p=null;const m=a(5493).Z,v=()=>(0,l.Vp)((0,i.Iu)("ntf.success"),(0,i.Iu)("ntf.settings-suc"));function g(e){const t=document.getElementById("api_key");t&&(t.innerText=e)}function h(e,t){(0,s.ZP)("con-settings",e.link),function(e,t){const a=document.getElementById("conn-prusa-connect-status"),i=document.getElementById("conn-prusa-connect-url"),s=document.getElementById("edit-connect-del"),n="FINISHED"===e.connect.registration,{hostname:r,tls:l,port:d}=e.connect.settings,{ok:c,message:u}=e.connect,m=c&&n,v=document.getElementById("conn-prusa-connect-status-"+(m?"ok":"not-ok")),g=`${l?"https":"http"}://${r}${d?`:${d}`:""}`,h=`(${g})`;(t||p!==g)&&(i.value=g,p=g);(0,o.QH)(i.parentNode.parentNode,n),s&&(0,o.yx)(s,n||!c);b(a,v,m,u,h)}(e.link,t),function(e,t){const a=document.getElementById("conn-printer-status"),{port:i,baudrate:s}=t.printer.settings,{ok:n,message:o}=t.printer,r=document.getElementById("conn-printer-status-"+(n?"ok":"not-ok"));b(a,r,n,o,`(${i||"/dev/ttyACM0"} @ ${s||0}bps)`)}(e.state,e.link)}function b(e,t,a,s,n){e&&e.setAttribute("ok",Boolean(a)),t&&(t.innerHTML=(a?(0,i.Iu)("conn.suc"):s)+"
      "+n)}function f(e){switch(e.toLowerCase()){case"python":return(0,i.Iu)("sys-version.python");case"description":return(0,i.Iu)("sys-version.description");case"id":return(0,i.Iu)("sys-version.id");case"os":return(0,i.Iu)("sys-version.os");default:return e}}const y=(e,t,a)=>{const s=document.getElementById("modal-sysupgrade"),l=document.importNode(s.content,!0),d=l.getElementById("modal-sysupgrade__target"),c=l.getElementById("modal-sysupgrade__current"),p=l.getElementById("modal-sysupgrade__version"),m=l.getElementById("modal-sysupgrade__status"),v=l.getElementById("modal-sysupgrade__spinner"),g=l.getElementById("yes"),h=l.getElementById("no");return d.innerText=t,c.innerText=u,p.innerText=a,g.addEventListener("click",(t=>{t.preventDefault(),(0,o.H)(g,!0),(0,o.H)(h,!0),(0,o.yx)(g,!1),(0,o.yx)(h,!1),(0,o.yx)(v,!0),m.innerText=(0,i.Iu)("msg.sysupgrade.pending"),(0,n.LK)("/api/v1/update/prusalink",{method:"POST"}).then((()=>(m.innerText=(0,i.Iu)("msg.sysupgrade.wait-for-printer"),k(a)))).catch((e=>(0,r.S)(e))).finally((()=>{e(),window.location.href="/"}))})),h.addEventListener("click",(()=>e())),l},k=e=>new Promise(((e,t)=>{const a=()=>(0,n.LK)("/api/version").then((t=>{e()})).catch((e=>setTimeout(a,2500)));setTimeout(a,5e3)})),w={load:e=>{(0,i.Iu)("settings.title",{query:"#title-status-label"}),(0,n.LK)("/api/version?system=1").then((e=>{const t={version:e.data};u=t.version.server,(0,s.ZP)("settings",t),function(e){const t=document.querySelector("#sys-version .table");if(t)for(const[a,i]of Object.entries(e.version.system)){const e=document.createElement("div");e.className="row";const s=document.createElement("div");s.className="col txt-sm",s.innerHTML=`

      ${f(a)}

      `,e.appendChild(s);const n=document.createElement("div");n.className="col txt-md",n.innerHTML=`

      ${i}

      `,e.appendChild(n),t.appendChild(e)}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.getElementById("updates-check"),t=document.getElementById("updates-check__spinner"),a=a=>{a&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(t,a),(0,o.gL)(e,!a)};e&&t&&(e.onclick=()=>{a(!0),(0,n.LK)("/api/v1/update/prusalink").then((t=>{const a=t.data?.new_version,s=[{name:"PrusaLink",new_version:a}],n=e.parentNode.parentNode.parentNode;s.forEach((e=>{const t=document.createElement("div"),a=document.createElement("div"),s=document.createElement("p"),o=document.createElement("div"),r=document.createElement("p"),l=document.createElement("div"),c=document.createElement("span"),p=document.createElement("span"),m=document.createElement("span"),v="PrusaLink";if(t.className="row update-pkg",a.className="col",o.className="col",l.className="col",s.className="txt-bold txt-grey txt-sm",r.className="txt-md",c.className="txt-grey txt-sm",m.className="txt-grey txt-sm",s.innerText=v,p.innerHTML=" → ",e.new_version){c.innerText=u,m.innerText=e.new_version;const t=document.createElement("button"),a=document.createElement("p");a.innerText=(0,i.Iu)("btn.upgrade"),t.className="action",t.appendChild(a),l.appendChild(t),t.onclick=()=>(0,d.o)((t=>y(t,v,e.new_version)),{timeout:0,closeOutside:!1})}else m.innerText="The package is up to date";r.appendChild(c),r.appendChild(p),r.appendChild(m),a.appendChild(s),o.appendChild(r),t.appendChild(a),t.appendChild(o),t.appendChild(l),n.appendChild(t)}))})).catch((e=>(0,r.S)(e))).finally((()=>a(!1)))})}(),function(e){h(e,!0),document.getElementById("edit-connect-del").addEventListener("click",(t=>{(0,n.LK)("/api/connection",{method:"DELETE"}).then(v).catch((e=>(0,r.S)(e))).finally((()=>e.updateConnection()))}));const t=document.getElementById("edit-connect-set"),a=document.getElementById("edit-connect-set__spinner"),i=e=>{e&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(a,e),(0,o.gL)(t,!e)};t.addEventListener("click",(t=>{i(!0);const a=document.getElementById("conn-prusa-connect-url")?.value;if(!a)return;const s=new URL(a);(0,n.LK)("/api/connection",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connect:{hostname:s.hostname,port:s.port?parseInt(s.port):0,tls:s.protocol.startsWith("https")?1:0}})}).then((t=>{const a=t?.data?.url;a&&window.open(a,"_blank"),setTimeout((()=>{e.updateConnection().finally((()=>i(!1)))}),5e3)})).catch((e=>{i(!1),(0,r.S)(e)}))}))}(e),(0,n.LK)("/api/settings").then((e=>{const t=e.data;!function(e){const t=document.querySelector("#settings #printer-name"),a=document.querySelector("#settings #printer-location"),i=document.querySelector("#settings #printer-network_error_chime"),s=document.querySelector("#settings #edit-printer"),l=()=>{(0,o.gL)(s,t.value.length>0&&a.value.length>0)};t.oninput=l,a.oninput=l,i.oninput=l,t.value=e.printer?.name||"",a.value=e.printer?.location||"",i.checked=!!e.printer?.network_error_chime,"api-key"in e&&g(e["api-key"]),s.onclick=()=>{(({name:e,location:t,network_error_chime:a})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({printer:{name:e,location:t},network_error_chime:a})}))({name:t.value,location:a.value,network_error_chime:i.checked}).then((()=>v())).catch((e=>(0,r.S)(e)))},l()}(t),function(e){const t=document.querySelector("#settings #username"),a=document.querySelector("#settings #password"),i=document.querySelector("#settings #new-password"),s=document.querySelector("#settings #re-password"),l=document.querySelector("#settings #edit-user"),d=()=>{(0,o.gL)(l,a.value.length>0&&(t.value.length>0||i.value.length>0&&s.value.length>0))};t.oninput=d,a.oninput=d,i.oninput=d,s.oninput=d,t.value=e.username||"",d(),l.onclick=()=>{((e,{username:t,newPassword:a,rePassword:i})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:{password:e,username:t,new_password:a,new_repassword:i}})}))(a.value,{username:t.value||void 0,newPassword:i.value||void 0,rePassword:s.value||void 0}).then((()=>v())).catch((e=>(0,r.S)(e)))}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.querySelector("#settings #serial"),t=document.querySelector("#settings #edit-serial"),a=()=>{if(e&&t){c&&(e.value=`${c}`);const i=()=>{(0,o.gL)(t,!c&&e.value.length>0),(0,o.yx)(t,!c)};i(),e.oninput=i,(0,o.gL)(e,!c);const s=()=>{var t;(t=e.value,(0,n.LK)("/api/settings/sn",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:t})})).then((e=>{c=e.data.serial,v()})).catch((e=>(0,r.S)(e))).finally((()=>a()))};e.onkeyup=t=>{"Enter"===t.key&&(s(),e.blur())},t.onclick=s}};(0,n.LK)("/api/settings/sn",{headers:{"Content-Type":"application/json"}}).then((e=>{c=e.data.serial})).catch((e=>(0,r.S)(e))).finally((()=>a()))}(),function(){const e=document.getElementById("api_key-reset");e&&e.addEventListener("click",(()=>{(0,n.LK)("/api/settings/apikey",{method:"POST"}).then((e=>{g(e.data["api-key"]),v()})).catch((e=>(0,r.S)(e)))}),!1)}(),m?.load(),e.updateConnection()},update:e=>{m?.update(),h(e,!1)}}},5493:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(6648),n=a(1972),o=a(5412),r=a(1351),l=a(5502);let d=null,c=null;const u=67108864;function p(e){return`
    • ${e}
    • `}const m=()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files;if(d){const e=t.find((e=>e.name===d));e&&(!c||e.date>c)&&(c=e.date,e.size>u?function(){const e=document.querySelector("ul.logs"),t=(0,i.Iu)("logs.file-too-large",{size:(0,l.Z)("size",u)});e&&(e.innerHTML=p(t))}():(a=d,(0,s.iT)(`/api/logs/${a}`).then((e=>{const t=document.querySelector("ul.logs");t&&(e.data?t.innerHTML=e.data.split("\n").map((e=>p(e))).join(""):t.innerHTML=p((0,i.Iu)("logs.empty-file")))}))))}var a})).catch((e=>(0,r.S)(e)))},v={load:()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files,a=o.L.init("settings","log-list"),s=t.map((e=>e.name)),r=(0,i.Iu)("logs.select-file-placeholder");a.setOptions(s),a.select(r),a.onselect=e=>{!function(e){d=e,c=null,document.getElementById("download-log").onclick=()=>{(0,n.Z)(`/api/logs/${e}`,e)},m()}(e)}})).catch((e=>(0,r.S)(e)))},update:m}},3707:(e,t,a)=>{"use strict";a.d(t,{Kp:()=>o,Vp:()=>r,vU:()=>l});const i=document.getElementById("prusa-toast"),s={info:10500,success:10500,warning:10500,error:10500};function n({title:e,message:t,type:a,onClose:n}){const o=((e,t,a)=>{const i=document.getElementById("toast"),s=document.importNode(i.content,!0),n=s.querySelector("article");return n.className=a,s.querySelector("p").innerHTML=e,s.querySelector(".toast-body").innerHTML=t,n})(e,t,a),r=()=>{i.removeChild(o),n?.()};o.querySelector("span").addEventListener("click",(e=>{e.preventDefault(),r()}));const l=s[a];l&&setTimeout(r,l),i.appendChild(o)}function o(e,t,a){n({type:"warning",title:e,message:t,onClose:a})}function r(e,t,a){n({type:"success",title:e,message:t,onClose:a})}function l(e,t,a){n({type:"error",title:e,message:t,onClose:a})}},5489:(e,t,a)=>{"use strict";a.d(t,{NA:()=>n,ZP:()=>r,zR:()=>o});var i=a(646),s=a(5502);const n=(e,t)=>{try{const a=e.split(".");let i=t;for(;a.length;)i=i[a.shift()];return i}catch(e){return}},o=(e,t)=>{document.querySelectorAll(`[data-type="${e}"]`).forEach((e=>{const a=e.dataset.where,o=e.dataset.zeroes,r=a?n(a,t):t;e.innerHTML=(0,s.Z)(e.dataset.format,r),(0,i.QH)(e,"hide"===o&&!r)}))},r=o},2038:(e,t,a)=>{"use strict";a.d(t,{$:()=>r,i:()=>l});var i=a(8236),s=a(646),n=a(4800),o=a(7780);const r=(e,t,a)=>{const i=document.getElementById("modal-question"),n=document.importNode(i.content,!0),r=n.getElementById("modal-question-label"),l=document.createElement("p"),d=document.createElement("p");l.className="txt-sm my-md txt-bold",l.innerText=t,r.innerText=(0,o.Iu)("msg.file-exists.title"),d.innerText=(0,o.Iu)("msg.file-exists.overwrite-it"),r.parentNode.append(l),r.parentNode.append(d);const c=n.getElementById("yes"),u=n.getElementById("no");return u.addEventListener("click",e),c.addEventListener("click",(t=>{t.preventDefault(),(0,s.H)(c,!0),(0,s.H)(u,!0),a(),e()})),n},l=e=>{e.addEventListener("change",(t=>{e.checked&&e.getAttribute("data-link-state")!==n.PT.READY&&(0,i.o)((t=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),n=i.getElementById("yes"),o=i.getElementById("no");return n.addEventListener("click",(a=>{a.preventDefault(),(0,s.H)(n,!0),(0,s.H)(o,!0),t.checked=!0,e()})),o.addEventListener("click",(()=>{t.checked=!1,e()})),i})(t,e)),{timeout:0,closeOutside:!1})}))}},7049:(e,t,a)=>{"use strict";a.d(t,{Z:()=>k});var i=a(6648),s=a(1351),n=a(646),o=a(3707),r=a(7780),l=a(5951),d=a(2038),c=a(5489),u=a(4800),p=a(8495);let m=!1,v=null;function g(e){const t=p.Z.getContext(),a=u.cG.includes(e),i=document.querySelector("#upld-remote-start-pt");if(i&&(i.setAttribute("data-link-state",e),a||(i.checked=!1),(0,n.H)(i,!a)),t.transfer?.id){y("uploading"),(0,c.ZP)("download",t.transfer);const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.transfer.progress||0)}else y("choose")}function h(e){const t=e.data;if(![200,201,204].includes(e.code))return(0,s.S)(e),void f();if(t){if("FROM_WEB"===t.type){y("uploading"),(0,c.ZP)("download",{...t,time_start:t.time_transferring?Math.round((new Date).getTime()/1e3)-t.time_transferring:null});const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.progress||0)}}else{if(m)return function(){const e=(0,r.Iu)("ntf.success"),t=(0,r.Iu)("ntf.upld-suc",{file_name:""});(0,o.Vp)(e,t)}(),void f();y("choose")}}const b=(e,t,a,s)=>{if("local"===t)return e=e.split("?")[0].split("&")[0].split("#")[0],(0,i.LK)(`/api/download/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e,destination:a,...s})}).then((e=>function(e){y("uploading");const t=document.querySelector("#upld-remote .progress-bar");(0,l.g)(t,0);const a=(0,r.Iu)("ntf.success"),i=(0,r.Iu)("ntf.upld-start");(0,o.Vp)(a,i)}())).catch((e=>h(e)));(0,o.vU)("Can't upload to "+t,"You can upload only to local storage via remote upload!")};function f(){y("choose"),function(e){const t=document.querySelector("#upld-remote .progress-bar");t&&(0,l.g)(t,e||0)}(0),(0,c.ZP)("download",{}),v=null}function y(e){m="uploading"==e;const t=document.getElementById("upld-remote");t&&t.setAttribute("data-state",e)}const k={init:function(e,t){const a=document.getElementById("upld-remote");if(a){const i=a.querySelector("#remote-url"),s=a.querySelector("#remote-file-name"),o=a.querySelector("#upld-file"),r=a.querySelector("#upld-remote-start-pt");r&&(0,d.i)(r),o.onclick=()=>b(i.value,e,t,{to_print:r.checked,rename:s.value});const l=()=>{(0,n.H)(o,""===i.value)};l(),i.oninput=l}g()},update:g,get isUploading(){return m}}},7838:(e,t,a)=>{"use strict";a.r(t),a.d(t,{context:()=>Ve,default:()=>Xe});var i=a(7780);const s=500;let n=100,o=new Map;const r=(e,t)=>{o=e,n=t};function l(){const e=document.getElementById("graph");e&&(0==e.childElementCount&&function(){const e=document.getElementById("graph-template"),t=document.importNode(e.content,!0);document.getElementById("graph").appendChild(t),(0,i.ot)("graph")}(),o.forEach(((e,t)=>{!function(e,t){const a=(new Date).getTime();let i=[];if(e.length>1){let t=e[0],o=s-2.66*(a-t[0]-1e4)/1e3;for(let e=1;e1&&e[1][0]{var n=new XMLHttpRequest;const o=()=>{s(void 0)};!function(e,t){if(t){const a=e=>{if(!e.lengthComputable)return;let a=Math.round(e.loaded/e.total*100);t({loaded:e.loaded,total:e.total,percentage:a})};e.upload.addEventListener("progress",a,!1)}}(n,a.onProgress),n.addEventListener("load",(e=>{const t=function(e){function t(e){try{return JSON.parse(e)}catch{return}}return{status:e.status,statusText:e.statusText,ok:e.status>=200&&e.status<=299,data:t(e.response)}}(e.target);t.ok?i(t):s(t)}),!1),n.addEventListener("error",o,!1),n.addEventListener("abort",o,!1),n.open("PUT",`${m.O2}${e}`),a.print&&n.setRequestHeader("Print-After-Upload","?1"),n.setRequestHeader("Overwrite","?1"),n.setRequestHeader("Content-Type","text/x.gcode");for(const[e,t]of Object.entries((0,m.wU)()))n.setRequestHeader(e,t);n.send(t)}))};var g=a(2038),h=a(4800),b=a(8236);let f=!1,y=0;function k(e,t,a,i,s){const n=document.querySelector(e);n&&(n.setAttribute("accept",i.join(", ")),n.onchange=()=>{if(n.files.length>0&&!f){let e=n.files[0];S(e,t,a,s?.checked||!1)}})}function w(){[document.querySelector('#upld-direct input[type="file"]'),document.querySelector('#drop-zone input[type="file"]')].filter((e=>!!e)).forEach((e=>e.value="")),z(0),x("choose")}function x(e){f="uploading"===e;const t=document.getElementById("upld-direct");t&&t.setAttribute("data-state",e)}function z(e){y=e;const t=document.getElementById("upld-progress");t&&(t.innerHTML=`${e} %`)}const S=(e,t,a,s)=>{const n=["/api/v1/files",t,a,e.name].filter((e=>!!e)).join("/"),o=e.display_name||e.name,r=()=>e.arrayBuffer().then((e=>{x("uploading"),z(0),v(n,e,{onProgress:e=>{return t=e.percentage,x("uploading"),void z(t);var t},print:s}).then((()=>function(e){const t=(0,i.Iu)("ntf.success"),a=(0,i.Iu)("ntf.upld-suc",{file_name:e});(0,c.Vp)(t,a)}(o))).catch((e=>function(e,t){if(t)(0,u.S)(t);else{const t=(0,i.Iu)("ntf.error"),a=(0,i.Iu)("ntf.upld-unsuc",{file_name:e});(0,c.vU)(t,a)}}(o,e))).finally((()=>w()))}));(0,m.LK)(n,{method:"HEAD"}).then((()=>{try{(0,b.o)((e=>(0,g.$)((()=>{e(),w()}),o,r)),{timeout:0,closeOutside:!1})}catch(e){console.error("Modal error",e)}})).catch((()=>r()))};const E={init:function(e,t,a){(0,i.Iu)("upld.direct.choose",{query:"#upld-direct p",file:a.join(", ")}),function(e,t,a){const i=document.getElementById("upld-direct-start-pt");i&&(0,g.i)(i);const s=document.getElementById("drop-zone");s&&(document.ondragenter=e=>(0,p.yx)(s,!0),s.ondragleave=e=>(0,p.yx)(s,!1),document.ondrop=e=>(0,p.yx)(s,!1),k('#drop-zone input[type="file"]',e,t,a,i));k('#upld-direct input[type="file"]',e,t,a,i)}(e,t,a),f&&(x("uploading"),z(y))},update:function(e){const t=h.cG.includes(e),a=document.querySelector("#upld-direct-start-pt");a&&(a.setAttribute("data-link-state",e),t||(a.checked=!1),(0,p.H)(a,!t))},get isUploading(){return f},initInputByQuery:k};const P=class{get selected(){return this._selected}get isLocked(){return this._isLocked}lock(){this._isLocked=!0,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.getAttribute("data-tab-btn")!==this.selected&&e.setAttribute("locked",!0)}))}unlock(){this._isLocked=!1,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.hasAttribute("locked")&&e.removeAttribute("locked")}))}constructor(){this._root=null,this._selected=null,this._isLocked=!1}init(e){this._root=e,this._root&&(e.querySelectorAll("[data-tab-btn]").forEach((e=>{e.onclick=()=>{if(!this._isLocked){const t=e.getAttribute("data-tab-btn");t===this._selected||(this.closeTab(),this.openTab(t))}}})),this.openTab(this._selected,!0))}openTab(e){if(this._root&&e){const t=this._root.querySelector(`[data-tab="${e}"]`);t&&t.setAttribute("opened",!0);const a=this._root.querySelector(`[data-tab-btn="${e}"]`);a&&a.setAttribute("selected",!0),this._selected=e}}closeTab(){if(this._root&&this._selected){const e=this._root.querySelector(`[data-tab="${this._selected}"]`);e&&e.setAttribute("opened",!1);const t=this._root.querySelector(`[data-tab-btn="${this._selected}"]`);t&&t.setAttribute("selected",!1),this._selected=null}}},N=a(7049).Z,L=new P;function I(){E.isUploading?(L.openTab("direct"),L.lock()):N?.isUploading?(L.openTab("remote"),L.lock()):(L.unlock(),L.selected||L.openTab("direct"))}const T={init:function(e,t="",a){E.init(e,t,a),N?.init(e,t),L.init(document.getElementById("upld")),I()},update:function(e){E?.update(e),N?.update(e),I()},hide:function(e){(0,p.QH)(document.getElementById("upld"),e)}};var _=a(2451),j=a(5489),C=a(8751);const A=e=>(0,m.LK)(e,{method:"POST",headers:{"Content-Type":"application/json"}}),D=e=>(0,m.LK)(`/api/v1/job/${e}/resume`,{method:"PUT"}).catch((e=>(0,u.S)(e))),B=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const s=document.getElementById("modal-question"),n=document.importNode(s.content,!0);n.getElementById("modal-question-label").innerText=(0,i.Iu)("msg.cancel");const o=n.getElementById("yes"),r=n.getElementById("no");return o.addEventListener("click",(i=>{i.preventDefault(),t.onConfirm(),(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(`/api/v1/job/${a}`,{method:"DELETE",headers:{"Content-Type":"application/json"}}).catch((e=>{t.onError(),(0,u.S)(e)})),e()})),r.addEventListener("click",e),n})(a,t,e)),{timeout:0,closeOutside:!1})},O=(e,t)=>{e?(0,b.o)((e=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),s=i.getElementById("yes"),n=i.getElementById("no");return s.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(s,!0),(0,p.H)(n,!0),A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e))).finally((()=>e()))})),n.addEventListener("click",e),i})(e,t)),{timeout:0,closeOutside:!1}):A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e)))},q=()=>(0,m.LK)("/api/job",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"cancel"})}).catch((e=>(0,u.S)(e)));var M=a(1972);const R=(e,t,a)=>{(0,M.Z)(e,t),a()},H=(e,t,a,s,n=!1)=>{const o=document.getElementById("modal-question"),r=document.importNode(o.content,!0);r.getElementById("modal-question-label").innerText=n?(0,i.Iu)("msg.del-folder",{folder_name:a}):(0,i.Iu)("msg.del-proj",{file_name:a});const l=r.getElementById("yes"),d=r.getElementById("no");return d.addEventListener("click",e),l.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(l,!0),(0,p.H)(d,!0),(0,m.LK)(t,{method:"DELETE",headers:{force:"?1"}}).then((()=>s&&s())).catch((e=>(0,u.S)(e))).finally((t=>e()))})),r},U=(e,t,a)=>{(0,b.o)((i=>H(i,e,t,a)),{timeout:0,closeOutside:!1})},K=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const i=document.getElementById("modal-file-name"),s=document.importNode(i.content,!0),n=s.getElementById("modal-file-name__input"),o=s.getElementById("yes"),r=s.getElementById("no");return r.addEventListener("click",e),o.addEventListener("click",(i=>{i.preventDefault();const s=n.value;if(s){const i=t(s);(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(i,{method:"PUT",headers:{"create-folder":"?1"}}).then((()=>a&&a())).catch((e=>(0,u.S)(e))).finally((t=>e()))}})),s})(a,e,t)),{timeout:0,closeOutside:!1})};function Z(e){return`inset(${100-e}% 0% 0% 0%)`}var V=a(5951);const F={},$=()=>{F.title=null,F.questionChildren=null,F.yes=null,F.no=null,(0,C.g9)(F.next)},G={load:()=>{F.title||(0,C.c4)("#dashboard"),document.getElementById("title-status-label").innerHTML=F.title;const e=document.getElementById("question"),t=F.questionChildren;Array.isArray(t)?t.forEach((t=>e.appendChild(t))):e.innerHTML=t;for(let e of["yes","no"]){const t=document.getElementById(e),a=F[e];t.querySelector("p").innerHTML=F[e+"Text"],t.addEventListener("click",(e=>{e.stopPropagation(),a($)}))}}};(0,i.Iu)("exp-times.exp-time"),(0,i.Iu)("exp-times.inc"),(0,i.Iu)("exp-times.layer-1st"),(0,i.Iu)("exp-times.profile");const W=e=>{const t=e.querySelector("img");(0,p.gL)(e,!1),t&&(t.setAttribute("data-src",t.src),t.src=document.querySelector(".loading-overlay img").src)},Y=e=>{const t=e.querySelector("img");if((0,p.gL)(e,!0),t){const e=t.getAttribute("data-src");e&&(t.src=e,t.setAttribute("data-src",""))}};var J=a(8495);let Q=null,X=null;function ee(e,t=!1){const a=te(e,t);Q&&Q.state!==e.state&&(Q=null),a&&ae(e,t)}function te(e,t){const a=document.getElementById("job");if(!a)return!1;const i=t?!!e.files.selected:!!e.job?.id;return(0,p.yx)(a,i),i}function ae(e,t){const a=t?e.files.selected:e.job,s=a?.file?.resource;e.state;var n;if(a.file?(0,p.Zk)():(0,p.QP)(),function(e,t){const a=document.querySelector(".progress-bar"),i=document.querySelector(".progress-pct"),s=document.querySelector(".preview-img-wrapper"),n=void 0!==t;(function(e,t,a){if(!e)return;const i=t?.url&&t.ready?t.url:document.querySelector(".thumbnail-fallback")?.src;if(e.getAttribute("data-src")!==i){for(;e.firstChild;)e.removeChild(e.firstChild);e.setAttribute("data-src",i);const t=document.createElement("div");t.className="progress-img";const s=document.createElement("img");s.src=i,s.className="background",t.appendChild(s);const n=document.createElement("img");n.src=i,n.className="foreground",n.style.clipPath=Z(a??100),t.appendChild(n),e.appendChild(t)}else{const t=e.querySelector(".foreground");t&&(t.style.clipPath=Z(a))}})(s,e,t),(0,V.g)(a,t,"top"),(0,p.yx)(a,n),(0,p.yx)(i,n)}(a.thumbnail,a.progress),n=t,(0,p.QH)(document.querySelector("#job #pnt-time"),n),(0,p.QH)(document.querySelector("#job #rem-time"),n),(0,j.ZP)("job",a),s&&a.file){const s=t?null:a.id;!function(e,t,a){const i=t.file;(function(e,t){const a=document.querySelector("#job #stop"),i=document.querySelector("#job-close"),s=h.PT.fromApi(e),n=h.cG.includes(s),o=!Q&&h.Dt.includes(e),r=J.Z.getContext();if((0,p.gL)(a,o),a&&t){const i=t||!1;(0,p.yx)(a,i),a.onclick=()=>{B(t,{onConfirm:()=>{Q={code:"stop",state:e},(0,p.gL)(a,!1)},onError:()=>Q=null})}}i&&((0,p.yx)(i,n||!t),i.onclick=t?q:()=>r.selectFile(null))})(e,a),function(e,t,a){const i=document.querySelector("#job #start"),s=h.cG.includes(e);i&&((0,p.yx)(i,s),(0,p.gL)(i,s),i.onclick=()=>O(e!==h.PT.READY,t.resource))}(e,i),ie(e,i,a),function(e,t,a){const i=document.querySelector("#job #download");if(i){const e=!a&&t.refs?.download&&(!X||X===t.refs.download),s=t.display_name||t.name;(0,p.yx)(i,e),e&&(i.onclick=()=>{X=t.refs.download,W(i),R(t.refs.download,s,(()=>{X=null,Y(i)}))})}}(0,i,a),!a||(function(e,t,a){const i=document.querySelector(a),s=e===h.PT.PRINTING;(0,p.yx)(i,s),(0,p.gL)(i,!Q&&s),i&&(i.onclick=()=>{(0,p.gL)(i,!1),Q={code:"pause",state:e},(e=>(0,m.LK)(`/api/v1/job/${e}/pause`,{method:"PUT"}).catch((e=>(0,u.S)(e))))(t).catch((()=>Q=null))})}(e,a,"#job #pause"),function(e,t){const a=document.querySelector("#job #resume"),i=e===h.PT.PAUSED;(0,p.yx)(a,i),(0,p.gL)(a,!Q&&i),a&&(a.onclick=()=>{(0,p.gL)(a,!1),Q={code:"resume",state:e},D(t).catch((()=>Q=null))})}(e,a))}(e.state,a,s),(0,j.ZP)("file",a.file),function(e,t){const a=(0,i.Iu)("prop.na");document.getElementById("job").querySelectorAll(".job-details .job-prop").forEach((e=>{const t=e.querySelector(".job-prop-grid").children;let i=!0;for(const e of t){var s=e.querySelector("[data-type]")?.innerHTML.trim()===a;(0,p.QH)(e,s),s||(i=!1)}(0,p.QH)(e,i)}))}()}}function ie(e,t,a){const i=document.querySelector("#job #delete");if(i){const s=t.display_name||t.name;(0,p.gL)(i,!t.readOnly&&t.resource),(0,p.yx)(i,!a||e===h.cG.includes(e)),i.onclick=()=>{U(t.resource,s,(()=>{a||Ve.selectFile(null)}))}}}p.QP,p.Zk;const se=e=>[...e].filter((e=>!!e)).map((e=>e.trim())).join(" - "),ne=e=>{if(!e.printer)return;const t=e.state;ee(e),T.update(t),_.Z.update(e,null)},oe={load:e=>{(0,i.Iu)("home.link",{query:"#title-status-label"}),l(),ne(e),_.Z.update(e,null),_.Z.updateCurrentCamera(),(0,m.LK)("/api/v1/storage").then((t=>{const a=t.data.storage_list.find((e=>e.available&&!e.read_only));if(a){const t=a.path.replace("/","");T.init(t,"",e.fileExtensions)}}))},update:ne};var re=a(5502);const le=function(e,t="smooth"){if(!e)return;const a=e.getBoundingClientRect(),i=document.body.getBoundingClientRect(),s=a.top-(i.top+function(){const e=document.querySelector(".header");return e&&"sticky"===getComputedStyle(e).position?e.getBoundingClientRect().height:0}());(a.bottom>window.innerHeight||a.top<0)&&window.scroll({top:s,behavior:t})};var de=a(5537);const ce=e=>{const t=(0,de.Z)(e).querySelector(".kebab"),a=t.querySelector(".kebab-menu"),i=t.querySelector("ul");a.addEventListener("click",(e=>{e.stopPropagation(),function(e){return e&&e.classList.contains("open")}(i)?ue(i):function(e,t){e.classList.add("open"),(0,p.Ti)((()=>ue(e)),e,t)}(i,a)})),i.querySelectorAll("li").forEach((e=>{e.addEventListener("click",(()=>ue(i)))}))};function ue(e){e.classList.remove("open")}const pe=e=>{const t=document.querySelectorAll(".storage-select-content li");t&&t.forEach((t=>t.setAttribute("selected",t.getAttribute("data-storage")===e)))},me=e=>{const t=document.querySelector("#node-storage .storage-select-btn-inner");t&&(t.innerHTML=e)},ve=(e,t)=>{e&&t&&(t.classList.toggle("open"),(0,p.Ti)((()=>{t?.classList.remove("open")}),e,t))},ge=e=>{const t=document.querySelector(".node-storage-space");if(!t)return;const a=e.available&&!!e.totalSpace;if((0,p.yx)(t,a),a){const a=e.freeSpace,s=e.totalSpace,n=s-a,o=Math.round(100*(s?n/s:0)),r=(0,i.Iu)("prop.storage-used-space",{used:(0,re.Z)("size",n),free:(0,re.Z)("size",a),total:(0,re.Z)("size",s)});(0,V.g)(t,o),document.getElementById("storage-pct").innerHTML=(0,re.Z)("percent",o),document.getElementById("storage-space").innerHTML=r}},he=()=>{const e=document.querySelector("#node-storage .storage-select-btn");e&&(e.onclick=t=>{t.stopPropagation(),ve(e,dropdownContent)})},be=(e,t,a,i=!1)=>{const s=document.querySelector(".storage-select-content");document.querySelectorAll(".storage-select-content li").forEach((i=>{const n=i.getAttribute("data-storage");let o=!1;if(n in e){const r=e[n],l=i.querySelector("p");o=!0,r.name&&(l.innerText=r.name),i.setAttribute("selected",n===t),i.onclick=e=>{e.stopPropagation(),me(i.innerHTML),pe(n),s.classList.remove("open"),ge(r),a(n)}}(0,p.yx)(i,o)})),i&&ge(e[t])},fe="FOLDER",ye="PRINT_FILE",ke="FIRMWARE",we=["name","date","size"];let xe=null;const ze={origin:null,current_path:[],storages:{},files:[],eTag:null,sort:{field:"date",order:"desc"}};function Se(){const e=ze.origin;return ze.storages[e]}function Ee(){return ze.current_path.map((e=>e.path)).join("/")}function Pe(e){const t=Se(),a=Ee();return Ne(t.path,a,e)}function Ne(e,t,a){const i=["/api/v1/files",e,t,a].filter((e=>!!e)).join("/");return a?i:`${i}/`}const Le=(e={})=>{(0,m.LK)("/api/v1/storage",{}).then((t=>{const a=t.data?.storage_list;let i=!!e.redraw,s=!!e.redraw;if(a&&a.forEach((e=>{const t=e.type,a={name:e.name,path:e.path.replaceAll("/",""),available:e.available,readOnly:e.read_only,freeSpace:e.free_space,totalSpace:e.total_space};if(t in ze.storages){const e=ze.storages[t];e.available!==a.available&&(i=!0),e.freeSpace!==a.freeSpace&&ze.origin===t&&(s=!0)}else i=!0,s=!0;ze.storages[t]=a})),!ze.origin){let e=Object.keys(ze.storages).find((e=>ze.storages[e].available));e||(e=Object.keys(ze.storages).find((()=>!0))),e&&Oe(e)}i&&be(ze.storages,ze.origin,Oe,s)}))},Ie=(e={})=>{if(!Se())return;const t=Pe();let a=ze.eTag;e.force&&(ze.eTag=null,a=null,function(e){const t=Se(),a=Ee();T.init(t.path,a,e?.fileExtensions),T.hide(!1!==t?.readOnly)}(J.Z.getContext()));const i=e=>{ze.files=e,Te(),_e()};(0,m.LK)(t,{headers:{"If-None-Match":a}}).then((s=>{if(t!==Pe())return;const n=s.eTag;if(!n||n!==a){ze.eTag=n;const t=s.data.children||[];if(!n&&!e.force){const e=(e,t)=>e.display_name.localeCompare(t.display_name);if(JSON.stringify([...ze.files].sort(e))===JSON.stringify(t.sort(e)))return}i(t)}})).catch((()=>{ze.eTag=null,i([]),J.Z.getContext().selectFile(null)}))},Te=()=>{const e=document.getElementById("files");if(e){for(;e?.firstChild;)e.removeChild(e.firstChild);e.appendChild(function(){const e=Se(),t=[e.name,...ze.current_path.map((e=>e.name))],a=je("node-current",t.pop()||"Root");a.getElementById("path").innerHTML=`${t.join("/")}/`;const s=a.getElementById("create");s&&(s.onclick=e=>{e.stopPropagation(),K(Pe)});(0,p.H)(s,!1!==e.readOnly),a.querySelector("#sort-by-name p").innerText=(0,i.Iu)("sort.by-name"),a.querySelector("#sort-by-date p").innerText=(0,i.Iu)("sort.by-date"),a.querySelector("#sort-by-size p").innerText=(0,i.Iu)("sort.by-size");return a.querySelector(`#sort-by-${ze.sort.field}`).classList.add(ze.sort.order),we.forEach((e=>{a.getElementById(`sort-by-${e}`).addEventListener("click",(t=>{const a=document.getElementById(`sort-by-${e}`);document.getElementById(`sort-by-${ze.sort.field}`).classList.remove(ze.sort.order);const i=ze.sort.field===e&&"asc"===ze.sort.order?"desc":"asc";a.classList.add(i),ze.sort.field=e,ze.sort.order=i,Te(),_e()}),!1)})),a}()),ze.current_path.length&&e.appendChild(function(){const e=je("node-up","",(()=>{ze.current_path.pop(),Te(),Ie({force:!0})}));return(0,i.ot)(e),e}())}},_e=()=>{const e=document.getElementById("files");let t;if(e)for(let a of(e=>(e.sort(((e,t)=>{if(e.type===fe&&t.type!==fe)return-1;if(e.type!==fe&&t.type===fe)return 1;const a="desc"===ze.sort.order?-1:1;switch(ze.sort.field){case"date":return a*((e.m_timestamp||0)-(t.m_timestamp||0));case"size":return a*((e.size||0)-(t.size||0));default:return a*e.display_name.localeCompare(t.display_name)}})),e))(ze.files)){switch(a.type.toUpperCase()){case fe:t=Ce(a,{files:void 0,folders:void 0});break;case ye:t=De(a);break;case ke:t=Be(a,"firmware");break;default:t=Be(a,"file")}e.appendChild(t)}};function je(e,t,a){const i=document.getElementById(e).content,s=document.importNode(i,!0);return a&&s.querySelector(".node").addEventListener("click",(e=>{a(e),e.preventDefault()})),s.querySelector("#name")?.appendChild(document.createTextNode(t)),s}function Ce(e,t){const a=e.display_name||e.name,i=e.name,s=Pe(i),n=je("node-folder",a,(()=>{ze.current_path.push({path:i.replace("/",""),name:a}),Te(),Ie({force:!0})})),o=[t?.files?`${t.files} files`:null,t?.folders?`${t.folders} folders`:null].filter((e=>null!=e)).join(" | ");n.getElementById("details").innerHTML=o;const r=n.getElementById("delete");(0,p.gL)(r,!(e.read_only||e.ro)),r&&(r.onclick=e=>{var t,i,n;e.stopPropagation(),t=s,i=a,n=()=>{},(0,b.o)((e=>H(e,t,i,n,!0)),{timeout:0,closeOutside:!1})});const l=n.getElementById("rename");return l&&(l.onclick=e=>{e.stopPropagation(),console.log("renameFolder")}),n}const Ae=e=>{!function(e){const t=J.Z.getContext(),a=t.files.selected,i=Ee(),s=Pe(e.name);if(a===i)return;t.selectFile({...e,path:i,resource:s});const n=document.getElementById("job");n&&le(n)}(e)};function De(e){const t=je("node-file",e.display_name||e.name,(t=>Ae(e))),a=t.querySelector(".node-details");a.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const s=(0,j.NA)(t.dataset.where,e);if(s){const e=(0,re.Z)(t.dataset.format,s);t.querySelector("p[data-value]").innerHTML=e}else a.removeChild(t)}));const s=e?.refs?.thumbnail;if(s){const a=t.querySelector("img.node-img");a.setAttribute("data-src",e.date?`${s}?ct=${e.date}`:s),xe.observe(a)}return ce(t),function(e,t){const a=Pe(e.name),i=e.display_name||e.name,s=t.getElementById("details");s&&(s.onclick=t=>{Ae(e)});const n=t.getElementById("start");n&&(n.onclick=e=>{e.stopPropagation(),console.log("startPrint")});const o=t.getElementById("rename");o&&(o.onclick=e=>{e.stopPropagation(),console.log("renameFile")});const r=t.getElementById("delete");r&&((0,p.gL)(r,!(e.read_only||e.ro)),r.onclick=e=>{U(a,i),e.stopPropagation()});const l=t.getElementById("download");l&&((0,p.gL)(l,e.refs?.download),l.onclick=t=>{W(l),R(e.refs?.download,i,(()=>Y(l))),t.stopPropagation()})}(e,t),(0,i.ot)(t),t}function Be(e,t){const a=je("node-file",e.display_name||e.name,(e=>{})),s=a.querySelector(".node-details");s.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const a=(0,j.NA)(t.dataset.where,e);if(a){const e=(0,re.Z)(t.dataset.format,a);t.querySelector("p[data-value]").innerHTML=e}else s.removeChild(t)}));const n=a.querySelector("img.node-img");if(t){const e=n.getAttribute(`data-${t}`);e&&(n.src=e),xe.observe(n)}else(0,p.yx)(n,!1);return function(e){["details","start","rename","delete","download"].forEach((t=>{const a=e.getElementById(t);a&&(0,p.yx)(a,!1)}))}(a),a}function Oe(e){if(e in ze.storages){const t=ze.storages[e];ze.origin=e,ze.current_path=[],Te(),t.available&&Ie({force:!0}),T.hide(!1!==t.readOnly)}}const qe={load:function(e){if(ze.eTag=null,(0,i.Iu)("proj.link",{query:"#title-status-label"}),!xe){xe=new IntersectionObserver(((e,t)=>{e.forEach((e=>{if(e.isIntersecting){const t=e.target.getAttribute("data-src");(0,m.gJ)(t).then((({url:t})=>{e.target.src=t})).catch((()=>{}))}}))}),{rootMargin:"0px 0px 50px 0px",threshold:0})}e||(e=J.Z.getContext());const t=e.files.selected;if(t){(function(e,t){if(!e||!t)return null;let a=ze.files.find((t=>t.origin===e));const i=t.split("/").filter((e=>e)).slice(1);for(const e of i){if(!a)break;a=a.children.find((t=>t.name===e))}return"machinecode"===a?.type?a:null})(t.origin,t.path)||e.selectFile(null)}ee(e,!0),he(),Le({redraw:!0}),Ie({force:!0})},update:e=>{const t=e.state;Le(),Ie(),ee(e,!0),T.update(t)},getApiPath:Ne},Me=e=>{e.getAttribute("tooltip")||(e.addEventListener("click",(t=>{e.classList.toggle("tooltip-handle--active");const a=e.querySelector("span");(0,p.Ti)((()=>e.classList.remove("tooltip-handle--active")),a,e),t.preventDefault()}),!1),e.setAttribute("tooltip",!0))};let Re=0,He=null;const Ue=()=>{const e=e=>{const t=document.getElementById("offline-screen"),a=document.importNode(t.content,!0);return["not-responsing","please-wait"].forEach((e=>{const t=a.getElementById(`offline-screen.${e}`);t&&(t.innerHTML=(e=>{switch(e){case"not-responsing":return(0,i.Iu)("msg.offline.not-responsing");case"please-wait":return(0,i.Iu)("msg.offline.please-wait");default:return""}})(e))})),He={node:a,close:()=>{e(),He=null}},a};(0,b.o)((t=>e(t)),{timeout:0,closeOutside:!1,className:"offline-screen"})},Ke=({link:e,isConnected:t})=>{const a=["connect"];for(const t in e){const{ok:s,message:n}=e[t],o=document.getElementById(`conn-status-${t}-msg`),r="ok"===n.toLowerCase();o&&(o.innerHTML="connect"===t?r?(0,i.Iu)("conn.connect.linked"):(0,i.Iu)("conn.connect.not-linked"):(0,i.Iu)("conn.error_status"));const l=document.getElementById(`conn-status-${t}`),d=l.querySelector(".icon-success"),c=l.querySelector(".icon-warning"),u=l.querySelector(".info-message-tooltip"),m=u.querySelector("span"),v=void 0===s||s&&!a.includes(t);u&&m&&(r||(m.innerText=n,Me(u)),(0,p.QH)(u,r)),(0,p.QH)(l,v),v||((0,p.QH)(d,!s),(0,p.QH)(c,s))}const s=e=>{Re<3?Re+=1:(e?Ue():He.close(),Re=0)};t?He&&s(!1):!He&&s(!0)};const Ze=e=>{return{resource:e.resource??(t=e.path,a=e.name,`${t}${t.endsWith("/")?"":"/"}${a}`),name:e.name,displayName:e.display_name??e.name,path:e.path,displayPath:e.display_path??e.path,size:e.size,refs:{download:e.refs?.download,icon:e.refs?.icon,thumbnail:e.refs?.thumbnail},lastModified:e.m_timestamp||0,meta:{filamentType:e.meta?.filament_type,layerHeight:e.meta?.layer_height,estimatedPrintTime:e.meta?.estimated_print_time},readOnly:e.read_only||e.ro};var t,a},Ve=new class{constructor(){this.state=void 0,this.printer=void 0,this.job=void 0,this.transfer=void 0,this.version=void 0,this.storage=[],this.currentStorage=void 0,this.telemetry={temperature:{nozzle:{current:0,target:0},bed:{current:0,target:0}}},this.flow=0,this.speed=0,this.fan={hotend:0,print:0},this.link={connect:{ok:!0,message:"OK",settings:{hostname:"connect.prusa3d.com",tls:!0,port:0}},printer:{ok:!0,message:"OK",settings:{port:"",baudrate:115200}}},this.files={location:"/",selected:{file:void 0,thumbnail:void 0}},this.fileExtensions=[".gcode"],this.updateConnection()}updateConnection(){return(0,m.LK)("/api/connection",{method:"GET"}).then((e=>{this.link.connect.settings={hostname:e.data.connect.hostname,port:e.data.connect.port,tls:e.data.connect.tls},this.link.connect.registration=e.data.connect.registration,this.link.printer.settings={port:e.data.current.port,baudrate:e.data.current.baudrate}}))}update({status:e,printer:t}){e?.ok&&e.payload&&this.updateStatus(e.payload.data),t&&this.updatePrinter(t)}updateStatus(e){this.updateTelemetry(e.printer),this.updateJob(e.job),this.updateStorage(e.storage),this.updateTransfer(e.transfer),this.updateCamera(e.camera)}updatePrinter(e){this.printer={name:e.name,location:e.location,farmMode:e.farm_mode,nozzleDiameter:e.nozzle_diameter,minExtrusionTemp:e.min_extrusion_temp,serial:e.serial,hostname:e.hostname,port:e.port}}updateTelemetry(e){this.state=h.PT.fromApi(e.state.toUpperCase()),this.telemetry={temperature:{nozzle:{current:e.temp_nozzle,target:e.target_nozzle},bed:{current:e.temp_bed,target:e.target_bed}},axis:{x:e.axis_x,y:e.axis_y,z:e.axis_z},flow:e.flow,speed:e.speed,fan:{hotend:e.fan_hotend,print:e.fan_print}},this.link.connect.message=e.status_connect?.message??"",this.link.connect.ok=e.status_connect?.ok,this.link.printer.message=e.status_printer?.message??"ok",this.link.printer.ok=e.status_printer?.ok??!0}updateJob(e){const t=this.job?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.job=void 0);(0,m.LK)("/api/v1/job").then((e=>{const t=e.data;t.id===this.job.id&&(this.job={...this.job,file:Ze(t.file),thumbnail:{source:!t.file.refs?.thumbnail,ready:!t.file.refs?.thumbnail,url:void 0}},this.job.thumbnail.ready||(0,m.gJ)(this.job.file.refs.thumbnail).then((({url:e})=>{this.job.id===a&&(this.job.thumbnail.url=e)})).catch((e=>console.error("Failed to fetch thumbnail",e))).finally((()=>this.job.thumbnail.ready=!0)))})).catch((e=>(0,u.S)(e)))}if(a){const t=this.job?.timeRemaining,s=e.time_remaining,n=t!=s?(i=s,Math.round(Date.now()/1e3)+i):this.job?.estimatedEnd;this.job={file:void 0,...this.job,timePrinting:e.time_printing,id:a,progress:e.progress,timeRemaining:e.time_remaining,estimatedEnd:n}}var i}updateStorage(e){Object.keys(e).forEach((e=>{const t={path:e.path,name:e.name,readOnly:e.readOnly,freeSpace:e.freeSpace},a=this.storage.findIndex((e=>e.path===t.path));-1!==a?this.storage[a]=t:this.storage.push(t)}))}updateTransfer(e){const t=this.transfer?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.transfer=void 0);(0,m.LK)("/api/v1/transfer").then((e=>{const t=e.data;this.transfer={...this.transfer,file:{displayName:t.display_name??t.name,path:t.path,size:t.size,toPrint:t.to_print}}})).catch((e=>(0,u.S)(e)))}if(a){const t=Math.round(Date.now()/1e3),i=this.transfer?.file?.size||0,s=e.time_transferring,n=void 0!==s?t-s:void 0,o=e.data_transferred,r=i-o,l=s>0&&r>=0?r/(o/s):void 0;this.transfer={...this.transfer,timeTransferring:s,timeStarted:n,timeRemaining:l,id:a,progress:e.progress,dataTransferred:o}}}updateCamera(e){this.camera={id:e?.id}}selectFile(e){if(!e)return void(this.files.selected=null);const t=e.refs?.thumbnail;if(this.files.selected={file:Ze(e),thumbnail:{source:t,ready:!t,url:void 0},timeRemaining:e.meta?.estimated_print_time},!e.meta){const e=this.files.selected.file.resource;(0,m.LK)(e).then((t=>{const a=Ze({...t.data,resource:e});this.files.selected.file.resource===e&&(this.files.selected.file.meta=a.meta,this.files.selected.timeRemaining=a.meta?.estimatedPrintTime)}))}t&&(0,m.gJ)(t).then((({url:e})=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.url=e)})).catch((()=>{})).finally((()=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.ready=!0)}))}},Fe=e=>{const t=e.load;return e.load=()=>{(()=>{const e=document.getElementById("title-printer");e&&(e.innerHTML=$e())})(),t(Ve)},e},$e=()=>(e=>se([e.printer?.location,e.printer?.name]))(Ve);let Ge=oe;const We={routes:[{path:"dashboard",html:a(2373),module:Fe(oe),getTitle:()=>(0,i.Iu)("home.link")},{path:"question",html:a(5198),module:Fe(G)},{path:"files",html:a(7189),module:Fe(qe),getTitle:()=>(0,i.Iu)("proj.storage")},{path:"settings",html:a(2936),module:Fe(a(2957).Z),getTitle:()=>(0,i.Iu)("settings.title")},{path:"control",html:a(3478),module:Fe(a(732).Z),getTitle:()=>(0,i.Iu)("control.link")},{path:"cameras",html:a(5464),module:Fe(a(2451).Z),getTitle:()=>(0,i.Iu)("cameras.link")}].filter((e=>null!=e)),init:e=>{Ve.update(e),Ye()},update:e=>{Ve.update(e);const t=(0,C.nC)(),a=(e=>{const t=e.state;let a=(0,h.ny)(t);switch(t){case"IDLE":return"";case"PRINTING":return`${a} ${Math.round(e?.job?.progress||0)}%`;default:return a}})(Ve);var i;document.title=(i=[a,We.routes.find((e=>e.path===t)).getTitle()],se([...i,$e(),"PrusaLink"])),(0,j.zR)("telemetry",Ve),(e=>{const t=e,a=document.getElementById("printer-status");a&&(a.innerHTML=(0,h.ny)(t))})(Ve.state),Je(Ve.telemetry),Qe()},setConnected:e=>{Ke({link:Ve.link,isConnected:e})},setModule:e=>{Ge=e},getContext:()=>Ve},Ye=()=>{let e=new Map([["temp-line-blue",[]],["temp-line-orange",[]]]);r(e,300),l()},Je=e=>{const t=(new Date).getTime();d("temp-line-blue",[t,e.temperature.bed.current]),d("temp-line-orange",[t,e.temperature.nozzle.current]),l()},Qe=()=>{Ge&&Ge.update&&Ge.update(Ve)},Xe=We},8495:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=a(7838).default},8751:(e,t,a)=>{"use strict";a.d(t,{c4:()=>l,g9:()=>d,nC:()=>o});var i=a(7780),s=a(8495);const n=e=>{const[t,a]=e.split("#");return a||"dashboard"},o=()=>n(window.location.hash);function r(e,t){const a=n(e),o=s.Z.routes.find((e=>e.path===a));if(!o)return!1;t&&function(e){window.location.hash!=e&&history.pushState(null,"",e)}("#"+a);const r=document.getElementById("root");var l;return function(e,t){t.innerHTML="",(new DOMParser).parseFromString(e,"text/html").body.childNodes.forEach((e=>t.appendChild(e)))}(o.html,r),(0,i.ot)(r),function(e){const t=document.querySelector(`a[href="#${e}"]`);t&&(document.getElementById("navbar").childNodes.forEach((e=>{"li"===e.nodeName.toLowerCase()&&e.classList.remove(["active"])})),t.parentNode.className="active")}(a),(l=o.getTitle)&&(document.title=l()),window.scrollTo({top:0}),o.module.load(),s.Z.setModule(o.module),!0}const l=e=>r(e,!0),d=e=>r(e,!1)},4800:(e,t,a)=>{"use strict";a.d(t,{Dt:()=>o,PT:()=>s,cG:()=>n,ny:()=>r});var i=a(7780);const s={UNKNOWN:"UNKNOWN",IDLE:"IDLE",READY:"READY",BUSY:"BUSY",PRINTING:"PRINTING",PAUSED:"PAUSED",FINISHED:"FINISHED",STOPPED:"STOPPED",ERROR:"ERROR",ATTENTION:"ATTENTION",fromApi:e=>{switch(e){case"IDLE":return s.IDLE;case"READY":return s.READY;case"BUSY":return s.BUSY;case"PRINTING":return s.PRINTING;case"PAUSED":return s.PAUSED;case"FINISHED":return s.FINISHED;case"STOPPED":return s.STOPPED;case"ERROR":return s.ERROR;case"ATTENTION":return s.ATTENTION;default:return console.error(`Unsupported state: ${e}`),s.UNKNOWN}}},n=[s.IDLE,s.READY,s.FINISHED],o=[s.PRINTING,s.PAUSED],r=e=>{switch(e){case s.IDLE:return(0,i.Iu)("prop.st-idle");case s.READY:return(0,i.Iu)("prop.st-ready");case s.BUSY:return(0,i.Iu)("prop.st-busy");case s.PRINTING:return(0,i.Iu)("prop.st-printing");case s.PAUSED:return(0,i.Iu)("prop.st-paused");case s.FINISHED:return(0,i.Iu)("prop.st-finished");case s.STOPPED:return(0,i.Iu)("prop.st-stopped");case s.ERROR:return(0,i.Iu)("prop.st-error");case s.ATTENTION:return(0,i.Iu)("prop.st-attention");default:return console.error(`Unsupported state: ${e}`),(0,i.Iu)("prop.st-unknown")}}},4977:e=>{"use strict";e.exports=JSON.parse('{"langs":["cs","de","en","es","fr","it","kr","lt","nl","pl","sk"],"texts":{"home":{"link":["Přehled","Dashboard","Dashboard","Panel principal","Tableau de bord","Dashboard","대쉬보드","Darbastalis","Dashboard","Panel kontrolny","Prehľad"],"title":["Stav tiskárny","Druckerstatus","Printer Status","Estado de la impresora","État de l\'imprimante","Stato della stampante","프린터 상태","Spausdintojo būsena","Printerstatus","Stan drukarki","Stav tlačiarne"]},"proj":{"link":["Úložiště","Projekte","Storage","Proyectos","Projets","Progetti","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"storage":["Úložiště","Speicher","Storage","Almacenamiento","Stockage","Archivio","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"add-from":{"title":["Nahrát soubor z","Datei hinzufügen von","Add file from","Añadir archivo desde","Ajouter un fichier à partir de","Aggiungi file da","에서 파일 추가하기","Pridėti failą iš","Bestanden toevoegen van","Dodaj plik z","Nahrať súbor z"],"local":["Lokálního úložiště","Lokaler Speicher","Local storage","Almacenamiento local","Stockage local","Archivio locale","로컬 저장장치","Vietinis saugykla","Lokale opslag","Magazyn lokalny","Lokálneho úložiska"],"remote":["Vzdálené url","Remote-URL","Remote url","Eliminar url","URL distante","Url remoto","원격 URL","Nuotolinis URL","Externe URL","Zdalny URL","Vzdialenej URL"]},"details":["Detaily souboru","Datei-Details","File details","Detalles del archivo","Détails du fichier","Dettagli file","파일 상세정보","Failo informacija","Bestandseigenschappen","Szczegóły pliku","Detaily súboru"],"del":["Smazat","Datei löschen","Delete","Borrar archivo","Supprimer le Fichier","Elimina File","삭제","Ištrinti","Verwijderen","Usuń plik","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","Télécharger","Download","다운로드","Atsisiųsti","Downloaden","Pobierz","Stiahnuť"],"up-folder":["nadřazená složka","übergeordneter Ordner","parent folder","carpeta contenedora","dossier parent","cartella superiore","상위폴더","tėvinis aplankas","Bovenliggende map","folder nadrzędny","nadradený priečinok"]},"control":{"link":["Ovládání","Kontrolle","Control","Control","Contrôle","Controllo","제어","Valdymas","Bediening","Sterowanie","Ovládanie"],"coordinates":["Souřadnice tiskárny","Drucker-Koordinaten","Printer Coordinates","Coordenadas de la Impresora","Coordonnées de l\'imprimante","Coordinate Stampante","프린터 좌표","Spausdintojo koordinatės","Printercoördinaten","Współrzędne drukarki","Súradnice tlačiarne"],"axis":{"x":["Osa X","X-Achse","X axis","Eje X","axe X","Asse X","X축","X ašis","X-as","Oś X","Os X"],"y":["Osa Y","Y-Achse","Y axis","Eje Y","axe Y","Asse Y","Y축","Y ašis","Y-as","Oś Y","Os Y"],"z":["Osa Z","Z-Achse","Z axis","Eje Z","axe Z","Asse Z","Z축","Z ašis","Z-as","Oś Z","Os Z"]},"stepper-motors":["Krokové motory","Schrittmotoren","Stepper Motors","Motores Paso-a-paso","moteurs","Motori Passo-Passo","스텝 모터","Sustojimo varikliai","Stappenmotors","Silniki krokowe","Krokové motory"],"heated-bed-move":["Pohyb podložky v ose X a Y","Heizbett X und Y bewegen","Heated Bed X and Y Move","Base Calefactable Mover X e Y","Mouvement en x/y","Spostamento X e Y Piano Riscaldato","히트베드 X 및 Y 이동","Šildomojo patalo X ir Y poslinkis","Beweeg verwarmd bed in X en Y","Ruch stołu grzewczego X i Y","Pohyb podložky v osi X a Y"],"move-step":["Krok pohybu [mm]","Schrittweite [mm]","Move Step [mm]","Mover Paso [mm]","déplacement [mm]","Sposta Passo [mm]","[mm]mm 스텝 이동","Poslinkis [mm]","Beweegafstand [mm]","Krok ruchu [mm]","Krok pohybu [mm]"],"nozzle-z-move":["Pohyb extrudéru v ose Z","Düse Z Bewegung","Nozzle Z Move","Boquilla Mover Z","déplacement en z","Spostamento Z Ugello","노즐 Z 이동","Antgalio Z poslinkis","Beweeg omhoog/omlaag","Ruch dyszy w osi Z","Pohyb extruderu v osi Z"],"extruder":["Extrudér","Extruder","Extruder","Extrusor","extrudeur","Estrusore","익스트루더","Ištraukiklis","Extruder","Ekstruder","Extruder"],"extrude-retract-step":["Krok vytlačení/vtažení [mm]","Extrudieren/Zurückziehen Schritt [mm]","Extrude/Retract Step [mm]","Distancia Extruir/Retraer [mm]","longueur d\'extrusion ou de rétractation [mm]","Passo Estrusione/Retrazione [mm]","[mm]mm 스텝 압출/철회","Ištrauka/atgalinimas [mm]","Extrude/retract-afstand [mm]","Krok ekstruzji/retrakcji [mm]","Krok vysunutia/zasunutia [mm]"],"nozzle-temp":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura Boquilla","température de la buse","Temperatura Ugello","노즐 온도","Antgalio temperatūra","Temperatuur nozzle","Temperatura dyszy","Teplota trysky"],"speed":["Rychlost","Geschwindigkeit","Speed","Velocidad","vitesse","Velocità","속도","Greitis","Snelheid","Prędkość","Rýchlosť"],"heated-bed-temp":["Teplota vyhřívané podložky","Temperatur des Heizbettes","Heated Bed Temperature","Temperatura de la Base Calefactable","Température du lit","Temperatura piano riscaldato","히트베드 온도","Šildomojo patalo temperatūra","Temperatuur verwarmd bed","Temperatura stołu","Teplota vyhrievanej podložky"],"flow":["Průtok","Flow","Flow","Flujo","flux","Flusso","흐름","Srautas","Extrusiefactor","Przepływ","Prietok"],"title":["Ovládání tiskárny","Druckersteuerung","Printer Control","Control de la Impresora","Contrôle de l\'imprimante","Controllo Stampante","프린터 제어","Spausdintojo valdymas","Printerbediening","Sterowanie drukarką","Ovládanie tlačiarne"]},"cameras":{"link":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"trigger-scheme":{"ten-sec":["Každých 10 sekund","Alle 10 Sekunden","Every 10 seconds","Cada 10 segundos","Toutes les 10 secondes","Ogni 10 secondi","매 10초","Kas 10 sekundžių","Elke 10 seconden","Co 10 sekund",""],"thirty-sec":["Každých 30 sekund","Alle 30 Sekunden","Every 30 seconds","Cada 30 segundos","Toutes les 30 secondes","Ogni 30 secondi","매 30초","Kas 30 sekundžių","Elke 30 seconden","Co 30 sekund",""],"sixty-sec":["Každých 60 sekund","Alle 60 Sekunden","Every 60 seconds","Cada 60 segundos","Toutes les 60 secondes","Ogni 60 secondi","매 60초","Kas 60 sekundžių","Elke minuut","Co 60 sekund",""],"each-layer":["Při změně vrstvy","Beim Schichtwechsel","On layer change","Al cambiar de capa","Au changement de couche","Al cambio layer","매 레이어","Pakeitus sluoksnį","Bij laagwissel","Przy zmianie warstwy",""],"fifth-layer":["Každou pátou vrstvu","Alle 5 Schichten","Every fifth layer","Cada cinco capas","Toutes les cinq couches","Ogni cinque layer","매 5레이어","Kas penktas sluoksnis","Elke 5 lagen","Co piąta warstwa",""],"manual":["Ručně","Manuell","Manual","Manual","Manuel","Manuale","수동","Rankinis","Handmatig","Ręcznie",""]}},"settings":{"title":["Nastavení","Einstellungen","Settings","Ajustes","Réglages","Impostazioni","세팅","Nustatymai","Instellingen","Ustawienia","Nastavenie"]},"conn":{"prusa-connect-status":["Stav připojení PrusaConnect","PrusaConnect Status","PrusaConnect Status","Estado de PrusaConnect","Informations de connexion à PrusaConnect","Stato PrusaConnect","프루사커넥트 상태","PrusaConnect būsena","Status van PrusaConnect","Stan PrusaConnect","Stav pripojenia PrusaConnect"],"printer-status":["Stav připojení 3D tiskárny","3D-Drucker Verbindungsstatus","3D Printer Connection Status","Estado Conexión Impresora 3D","Informations de connexion à l\'imprimante 3D","Stato Connessione Stampante 3D","3D 프린터 연결 상태","3D spausdintojo prisijungimo būsena","Verbindingsstatus van 3D-printer","Status połączenia z drukarką 3D","Stav pripojenia 3D tlačiarne"],"title":["připojení","Verbindung","Connection",null,"connexion",null,"연결","Prisijungimas","Verbinding",null,"pripojenie"],"prusa-connect-url":["Adresa PRUSA CONNECT","PRUSA CONNECT Adresse","PRUSA CONNECT Address",null,null,null,"프루사커넥트 주소","PRUSA CONNECT adresas","Adres van PRUSA CONNECT",null,"Adresa PrusaConnect"],"suc":["Úspěšně připojeno","Erfolgreich verbunden","Successfully connected","Correctamente conectado","Connecté avec succès","Connessione riuscita","연결 성공","Prisijungta sėkmingai","Succesvol verbonden","Połączono pomyślnie","Úspešne pripojené"],"connect":{"linked":["","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":[null,"Nicht verbunden","Not Linked","No enlazado","Non Associée","Non collegato","연결안됨","Nesusieta","Niet verbonden","Nie połączono",""]},"error_status":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","","","Błąd",""]},"prop":{"temp-nozzle":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura del nozzle","Température de la buse","Temperatura ugello","노즐 온도","Nozzle Temperature","Nozzletemperatuur","Temperatura dyszy","Teplota trysky"],"temp-bed":["Vyhřívaná podložka","Heizbett","Heatbed","Base calefactable","Plateau chauffant","Piano riscaldato","히트베드","Dėklo temperatūra","Verwarmd bed","Stół","Vyhrievaná podložka"],"speed":["Rychlost tisku","Druckgeschwindigkeit","Printing Speed","Velocidad de impresión","Vitesse d\'impression","Velocità di stampa","출력속도","Spausdinimo greitis","Printsnelheid","Prędkość drukowania","Rýchlosť tlače"],"z-height":["Výška Z","Z-Höhe","Z-Height","Altura-Z","Hauteur en z","Altezza-Z","Z높이","Z-Height","Z-Hoogte","Wysokość Z","Výška Z"],"nozzle-diameter":["Velikost trysky","Düsendurchmesser","Nozzle Diameter","Diámetro de Boquilla","Diamètre de la Buse","Diametro ugello","노즐지름","Galvutės skersmuo","Nozzlediameter","Średnica dyszy","Veľkosť trysky"],"rem-time":["Zbývající čas","Restzeit","Remaining time","Tiempo restante","Temps restant","Tempo residuo","남은시간","Likęs laikas","Resterende tijd","Pozostały czas","Zostávajúci čas"],"time-est":["Odhad doby tisku","Druckzeit Schätzen","Print Time Estimate","Tiempo Estimado de Impresión","Estimation du temps d\'impression","Stima del Tempo di Stampa","예상 출력 시간","Print Time Estimate","Geschatte printtijd","Szacowany Czas Druku","Odhad času tlače"],"est-end":["Odhadovaný konec","Erwartetes Ende","Estimated end","Fin estimado","Fin d\'impression estimée","Fine prevista","예상완료","Numatomas pabaiga","geschatte eindtijd","Szacowane zakończenie","Odhadovaný koniec"],"pnt-time":["Doba tisku","Druckzeit","Printing time","Tiempo de impresión","Temps d\'impression","Tempo di stampa","출력시간","Spausdinimo laikas","Printtijd","Czas druku","Čas tlače"],"last-mod":["Naposledy upraveno","Zuletzt Geändert","Last Modified","Ultima Modificación","Dernière Modification","Ultima Modifica","최종 수정됨","Paskutinis modifikavimas","Laatst gewijzigd","Ostatnio Zmodyfikowany","Posledná úprava"],"material":["Materiál","Material","Material","Material","Matériau","Materiale","재료","Medžiaga","Materiaal","Materiał","Materiál"],"layer-ht":["Výška vrstvy","Schichthöhe","Layer Height","Altura de Capa","Hauteur de Couche","Altezza Layer","레이어 높이","Sluoksnio storis","Laagdikte","Wysokość Warstwy","Výška vrstvy"],"size":["Velikost souboru","Größe der Datei","File size","Tamaño de archivo","Taille du fichier","Dimensione file","파일크기","Failo dydis","Bestandsgrootte","Rozmiar pliku","Veľkosť súboru"],"progress":["Postup","Fortschritt","Progress","Progreso","Progression","Progresso","진행","Eiga","Voortgang","Postęp","Progres"],"st-idle":["Nečinná","Leerlauf","Idle","En espera","Repos","Inattivo","대기","Pramoginė veikla","Inactief","Oczekuje","Nečinná"],"st-ready":["Připravena","Bereit","Ready","Lista","Prête","Pronto","준비","Pasirengęs","Gereed voor gebruik","Gotowe","Pripravené"],"st-busy":["Zaneprázdeněná","Beschäftigt","Busy","Ocupada","Occupée","Occupato","작업중","Užsiėmęs","Bezig","Zajęty","Zaneprázdnená"],"st-printing":["Probíhá tisk","Druckt","Printing","Imprimiendo","Impression","Stampa","출력중","Spausdinama","Printen","Drukowanie","Prebieha tlač"],"st-paused":["Pozastavena","Pausiert","Paused","Pausado","En pause","In pausa","일시정지","Pristabdyta","Gepauzeeerd","Pauza","Pozastavená"],"st-finished":["Dokončeno","Beendet","Finished","Terminado","Terminé","Completato","완료됨","Užbaigta","Klaar","Zakonczono","Dokončené"],"st-stopped":["Zastaveno","Gestoppt","Stopped","Parada","Arrêtée","Arrestato","정지됨","Sustabdytas","Gestopt","Zatrzymano","Zastavené"],"st-error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"st-attention":["Vyžaduje pozornost","Achtung","Attention","Atención","Attention","Attenzione","주의","Dėmesio","Attentie","Uwaga","Pozor"],"st-unknown":["Neznámý","Unbekannt","Unknown","Desconocido","Inconnu","Sconosciuto","알수없음","Nežinoma","Onbekend","Nieznane","Neznáme"],"at":["v","um","at","a las","à","alle","에서","iš","op","o","v"],"less-than":["Méně než minuta","Weniger als eine Minute","Less than a minute","Menos de un minuto","Moins d\'une minute","Meno di un minuto","1분 미만","Mažiau nei minutė","Minder dan een minuut","Mniej niż minuta","Menej ako minúta"],"today-at":["Dnes v","Heute um","Today at","Hoy a las","Aujourd\'hui à","Oggi alle","오늘","Šiandien","Vandaag om","Dzisiaj o","Dnes o"],"tmw-at":["Zítra v","Morgen um","Tomorrow at","Mañana a las","Demain à","Domani alle","내일","Rytoj","Morgen om","Jutro o","Zajtra o"],"true":["Ano","Ja","Yes","Si","Oui","Si","예","Taip","Ja","Tak","Áno"],"false":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"na":["N/A","NV","NA","NA","NA","ND","없음","NA","N.v.t.","N/D","N/A"],"cover-closed":["Uzavřené","Geschlossen","Closed","Cerrada","Fermé","Chiuso","닫힘","Uždarytas","Gesloten","Zamknięta","Zavreté"],"cover-opened":["Otevřené","Geöffnet","Opened","Abierta","Ouvert","Aperto","열림","Atidarytas","Open","Otwarta","Otvorené"],"storage-used-space":["Použito {{used}} z {{total}} ({{free}} volných)","{{used}} benutzt von {{total}} ({{free}} frei)","Used {{used}} of {{total}} ({{free}} free)","Usados {{used}} de {{total}} ({{free}} libres)","{{used}} utilisés sur {{total}} ({{free}} libre)","Usato {{used}} di {{total}} ({{free}} liberi)","{{total}} 중 {{used}} 사용중({{free}} 남음)","","","Zajęte {{used}} z {{total}} ({{free}} wolne)",""]},"msg":{"modal-p1":["Vítejte na webovém rozhraní vaší","Willkommen zur Weboberfläche Ihres","Welcome to the web interface of your","Bienvenido a la interfaz web de tu","Bienvenue dans l\'interface web de votre","Benvenuto nell\'interfaccia web del tuo","당신의 웹 인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į savo","Welkom bij de webinterface van uw","Witaj w interfejsie Twojej","Vitajte vo webovom rozhraní vašej"],"modal-p2":["Upozornění: některé hodnoty jsou zobrazeny pouze v průběhu tisku.","Bitte beachten Sie, dass die Werte nur angezeigt werden, wenn der Drucker gerade druckt.","Please note that values are shown only when the printer is printing.","Tenga en cuenta que los valores se muestran solo cuando la impresora está imprimiendo.","Veuillez noter que les valeurs sont affichées uniquement lorsque l\'imprimante imprime.","Si noti che i valori vengono visualizzati solo durante la stampa.","프린터가 출력중일 경우에만 값이 표시됩니다.","Prašome atkreipti dėmesį, kad reikšmės rodomos tik tada, kai spausdintuvas spausdina.","De waarden worden alleen getoond tijdens het printen.","Wartości będą wyświetlane tylko podczas drukowania.","Upozornenie: niektoré hodnoty sú zobrazené len počas tlače."],"api-key-1":["Vítejte ve webovém rozhraní PrusaLink Web!","Willkommen auf der Web-Oberfläche von PrusaLink Web.","Welcome to the PrusaLink Web web interface.","Bienvenido a la interfaz web de PrusaLink Web.","Bienvenue sur l\'interface web locale de PrusaLink Web.","Benvenuti nell\'interfaccia web di PrusaLink Web.","프루사 커넥트 웹 웹인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į PrusaLink Web interneto sąsają.","Welkom bij de PrusaLink Web webinterface.","Witaj w interfejsie sieciowym PrusaLink Web.","Vitajte vo webovom rozhraní PrusaLink Web!"],"api-key-2":["Vložte API klíč.","Bitte geben Sie den API-Schlüssel ein.","Please insert the API key.","Por favor introduce la clave API.","Veuillez insérer la clé API.","Si prega di inserire la chiave API.","API키를 입력하십시오.","Prašome įvesti API raktą.","Voer de API-sleutel in","Wpisz klucz API.","Vložte API kľúč."],"api-key-3":["Otevřete menu Nastavení -> Síť -> PrusaLink.","Sie finden ihn in Einstellungen -> Netzwerk -> PrusaLink.","You can find it in Settings -> Network -> PrusaLink.","Puedes encontrarla en Ajustes -> Red -> PrusaLink.","Vous pouvez la trouver dans Réglages -> Réseau -> Informations de connexion.","È possibile trovarla in Impostazioni -> Rete -> PrusaLink","설정 -> 네트워크 -> 프루사링크에서 찾을 수 있습니다.","Jį galite rasti Nustatymai -> Tinklas -> PrusaLink.","Deze kan gevonden worden bij Settings -> -> Network -> PrusaLink.","Możesz znaleźć go w sekcji Ustawienia -> Sieć -> PrusaLink.","Nájdete ho v Nastavenia -> Sieť -> PrusaLink."],"offline":{"not-responsing":["Tiskárna nereaguje.","Der Drucker antwortet nicht.","Printer is not responding.","La impresora no responde.","L\'imprimante ne répond pas.","La stampante non risponde.","프린터가 응답하지 않습니다.","Spausdintuvas neatsako.","Printer reageert niet.","Drukarka nie odpowiada.","Tlačiareň nereaguje."],"please-wait":["Prosím, čekejte...","Bitte warten...","Please wait...","Espera, por favor...","Veuillez patienter...","Attendere...","기다려주십시오...","Prašome palaukti...","Even geduld...","Proszę czekać...","Prosím, čakajte..."]},"drop-zone":{"label":["Přetažením souboru zahájíte nahrávání","Datei hier ablegen, um den Upload zu starten","Drop file here to start the uploading","Arrastra archivo aquí para subirlo","Déposez le fichier ici pour commencer le téléchargement","Trascina il file qui per iniziare il caricamento","파일을 여기로 끌어놓으면 업로드가 시작됩니다.","Tempti failą čia, kad predėti įkrovimą","Sleep het bestand hierheen om het te uploaden","Upuść plik tutaj, aby rozpocząć przesyłanie.",""]},"create-folder":["Nová složka","Neuer Ordner","New Folder","Nueva Carpeta","Nouveau Dossier","Nuova Cartella","새 폴더","","","Nowy folder",""],"create-folder-name":["Název složky","Ordnername","Folder Name","Nombre de la Carpeta","Nom de Dossier","Nome cartella","폴더 이름","","","Nazwa folderu",""],"sysupgrade":{"title":["Aktualizovat systémový balíček?","Systempaket aktualisieren?","Upgrade System Package?","¿Actualizar el Paquete del Sistema?","Mettre à niveau le package système ?","Aggiornare il pacchetto di sistema?","시스템 패키지를 업그레이드하겠습니까?","","","Zaktualizować paczkę systemową?",""],"remark":["Aktualizace může trvat několik desítek vteřin.","Das Upgrade kann einige Sekunden dauern.","The upgrade may take several tens of seconds.","La actualización puede tardar varias decenas de segundos.","La mise à jour peut prendre plusieurs dizaines de secondes.","L\'aggiornamento può richiedere qualche minuto.","업그레이드에는 수십초가 걸릴 수 있습니다.","","","Aktualizacja może trwać kilkadziesiąt sekund.",""],"pending":["Probíhá aktualizace... Nevypínejte tiskárnu.","Upgraden... Schalten Sie den Drucker nicht aus.","Upgrading... Do not switch the printer off.","Actualizando... No apagues la impresora.","Mise à niveau... N\'éteignez pas l\'imprimante.","Aggiornamento... Non spegnere la stampante.","업그레이드중... 프린터를 끄지 마십시오.","","","Aktualizacja... Nie wyłączaj drukarki.",""],"wait-for-printer":["Čeká se na tiskárnu...","Warten auf den Drucker...","Waiting for the printer...","Esperando a la impresora...","Attente de l\'imprimante...","In attesa della stampante...","프린터를 기다리는 중...","","","Oczekiwanie na drukarkę...",""]},"del-folder":["Opravdu chcete smazat {{folder_name}} a její obsah?","Möchten Sie wirklich {{folder_name}} und seinen Inhalt löschen?","Do you really want to delete {{folder_name}} and its contents?","¿Realmente deseas borrar {{folder_name}} y su contenido?","Voulez-vous vraiment supprimer {{folder_name}} et son contenu ?","Vuoi davvero cancellare la cartella {{folder_name}} e il suo contenuto?","정말 {{folder_name}} 폴더 및 내용을 지우시겠습니까?","","","Czy naprawdę chcesz usunąć {{folder_name}} i jego zawartość?",""],"del-proj":["Opravdu chcete smazat {{file_name}}?","Wollen Sie wirklich {{file_name}} löschen?","Do you really want to delete {{file_name}}?","¿Realmente deseas borrar {{file_name}}?","Voulez-vous vraiment supprimer le fichier {{file_name}} ?","Vuoi davvero eliminare il file {{file_name}}?","{{file_name}}을 정말로 삭제하겠습니까?","Ar tikrai norite ištrinti {{file_name}}?","Weet u zeker dat u {{file_name}} wilt verwijderen?","Czy na pewno chcesz usunąć plik {{file_name}}?","Naozaj chcete zmazať {{file_name}}?"],"sla-pour-resin":["Nalijte do vaničky dostatečné množství resinu pro vybraný soubor a zavřete víko. Minimální objem resinu je zobrazen na dotykovém displeji tiskárny.","Füllen Sie genügend Harz für die ausgewählte Datei in den Tank und schließen Sie den Deckel. Die minimale Menge des Harzes wird auf dem Touchscreen angezeigt.","Pour enough resin for selected file into the tank and close the lid. Minimal amount of the resin is displayed on the touchscreen.","Vierte suficiente resina para el archivo seleccionado y cierra la tapa.\\nLa mínima cantidad necesaria se muestra en la pantalla táctil.","Versez suffisamment de résine dans le réservoir pour le projet sélectionné et fermez le capot.","Versare nel serbatoio la quantità di resina sufficiente per il file selezionato e chiudere il coperchio. La quantità minima di resina viene visualizzata sul touchscreen.","선택한 파일을 위한 레진을 탱크에 붓고 뚜껑을 닫습니다. 터치스크린에 최소량의 레진이 표시됩니다.","Įpilkite pakankamai dervos pasirinktam failui ir uždarykite dangtį. Mažiausias dervos kiekis yra rodomas ant ekrano.","Doe genoeg resin voor het geselcteerde bestand in het vat en sluit de kap. De minimale hoeveelheid resin wordt aangegeven op het touchscreen.","Wlej do zbiornika wystarczającą ilość żywicy dla wybranego pliku i zamknij pokrywę. Minimalna ilość żywicy jest wyświetlana na ekranie dotykowym.","Do nádržky nalejte dostatočné množstvo resinu pre vybraný súbor a zatvorte veko. Minimálne množstvo resinu sa zobrazí na dotykovom displeji."],"cancel":["Chcete opravdu zrušit tisk?","Wollen Sie den Druck wirklich abbrechen?","Do you really want to cancel print?","¿Realmente quieres cancelar la impresión?","Voulez-vous vraiment annuler l\'impression ?","Vuoi davvero annullare la stampa?","출력을 취소하겠습니까?","Ar tikrai norite atšaukti spausdinimą?","Weet u zeker dat u de print wilt stoppen?","Czy na pewno chcesz anulować wydruk?","Chcete naozaj zrušiť tlač?"],"file-exists":{"title":["Soubor již existuje","Datei existiert bereits","File already exists","El archivo ya existe","Le fichier existe déjà","File già esistente","파일이 이미 존재합니다.","","","Plik już istnieje",""],"overwrite-it":["Chcete ho přepsat?","Möchten Sie sie überschreiben?","Do you want to overwrite it?","¿Quieres sobrescribirlo?","Voulez-vous l\'écraser ?","Vuoi sovrascriverlo?","덮어쓰시겠습니까?","","","Czy chcesz go nadpisać?",""]}},"btn":{"login":["Přihlášení","Login","Login","Iniciar sesión","Connexion","Accedi","로그인","Prisijungti","Login","Zaloguj","Prihlásenie"],"confirm":["Potvrdit","Bestätigen","Confirm","Confirmar","Confirmer","Conferma","결정","Patvirtinti","Bevestigen","Potwierdzam","Potvrdiť"],"cancel":["Zrušit","Abbrechen","Cancel","Cancelar","Annuler","Annulla","취소","Atšaukti","Annuleren","Anuluj","Zrušiť"],"del":["Smazat","löschen","Delete","borrar","supprimer","elimina","삭제","Ištrinti","Verwijderen","usuń","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","télécharger","Download","다운로드","Atsisiųsti","Download","Pobierz","Stiahnuť"],"pause-pt":["Pozastavit tisk","Druck pausieren","Pause Print","Pausar Impresión","Mettre l\'impression en pause","Pausa Stampa","출력 일시 정지","Pristabdyti spausdinimą","Pauzeer print","Wstrzymaj drukowanie","Pozastaviť tlač"],"resume-pt":["Pokračovat v tisku","Druck fortsetzen","Resume Print","Continuar Impresión","Redémarrer l\'impression","Riprendi stampa","출력 복귀","Tęsti spausdinimą","Hervat print","Wznów drukowanie","Pokračovať v tlači"],"start-pt":["Start tisku","Druck starten","Start Print","Empezar impresión","Lancer l\'impression","Inizia stampa","출력 시작","Pradėti spausdinimą","Start print","Start druku","Štart tlače"],"stop-print":["Zrušit tisk","Druck abbrechen","Stop Print","Cancelar impresión","Annuler l\'impression","Annulla stampa","출력 정지","Sustabdyti spausdinimą","Stop print","Anuluj wydruk","Zrušiť tlač"],"upld-file":["Nahrát soubor","Datei hochladen","Upload File","Cargar Archivo","Télécharger un Fichier","Carica file","파일 업로드","Įkelti failą","Upload bestand","Prześlij plik","Nahrať súbor"],"check-updates":["Kontrola aktualizací","Updates suchen","Check Updates","Comprobar actualizaciones","Vérifier les Mises à Jour","Controlla aggiornamenti","업데이트 체크","Tikrinti atnaujinimus","","Sprawdź aktualizacje",""],"connect":{"link":[null,"Verbinden","Link","Enlace","Associer","Collegamento","연결","Susieti","Verbinden","Link",""],"unlink":["Odpojit","Trennen","Unlink","Desenlazar","Dissocier","Scollegato","연결끊기","Atsieti","Verbinding verbreken","Odłącz",""]},"chg":["Změnit","Ändern","Change","Cambia","Mettre à jour","Cambia","변경","Pakeisti","Wijzig","Zmień","Zmeniť"],"reset":["","Reset","Reset","Reset","Réinitialiser","Reset","리셋","Perkrauti","Reset","Reset",""],"disable-steppers":["Vypnout motory","Schrittmotoren deaktivieren","Disable Steppers","Desactivar motores","Desactiver les moteurs","Disabilita motori","모터 정지","Išjungti stoperius","Stappenmotors uitschakelen","Wyłącz silniki krokowe","Vypnúť motory"],"extrude":["Vytlačit","Extrudieren","Extrude","Extruye","extruder","Estrudi","압출","Ištraukti","Extrudeer","Ekstruzja","Vysunúť"],"retract":["Vtáhnout","Zurückziehen","Retract","Retraer","Retracter","Retrai","리트렉트","Atitraukti","Retract","Retrakcja","Zasunúť"],"set":["Nastavit","Setzen","Set","Ajuste","Régler","Imposta","설정","Nustatyti","Instellen","Ustaw","Nastaviť"],"upgrade":["Aktualizovat","Aktualisieren","Upgrade","Actualización","Mise à niveau","Aggiorna","업그레이드","Atnaujinti","","Aktualizacja",""],"yes":["Ano","Ja","Yes","Sí","Oui","Sì","예","Taip","Ja","Tak","Áno"],"no":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"chg-print-set":["Tisková nastavení","Druckeinstellungen","Print Settings","Ajustes de la Impresora","Réglages d\'Impression","Impostazioni di stampa","프린트 설정","Spausdinimo nustatymai","Printinstellingen","Ustawienia druku",""],"save-chgs":["Uložit změny","Änderungen speichern","Save changes","Guardar cambios","Enregistrer les modifications","Salva le modifiche","변경내용 저장","Išsaugoti pakeitimus","Wijzigingen opslaan","Zapisz zmiany","Uložiť zmeny"]},"camera":{"settings":["Nastavení kamery","Kamera-Einstellungen","Camera Settings","Ajustes de la Cámara","Paramètres de la Caméra","Impostazioni Fotocamera","카메라 세팅","Kameros nustatymai","Camera-instellingen","Ustawienia kamery",""],"name":["Název kamery","Kameraname","Camera Name","Nombre de la Cámara","Nom de la Caméra","Nome Fotocamera","카메라 명칭","Kameros pavadinimas","Cameranaam","Nazwa kamery",""],"resolution":["Rozlišení","Auflösung","Resolution","Resolución","Résolution","Risoluzione","해상도","Raiška","Resolutie","Rozdzielczość",""],"trigger-scheme":["","Auslöse-Schema","Trigger Scheme","Modo de Disparo","Mode de Déclenchement","Schema di attivazione","트리거 계획","Paleisti schemą","Triggerschema","Schemat wyzwalania",""],"focus":["Zaostření","Fokus","Focus","Enfocar","Focus","Messa a fuoco","포커스","","","Ostrość",""],"register-by-token":[null,null,"Register Camera",null,null,null,null,null,null,null,null],"token":[null,null,"CONNECT Token",null,null,null,null,null,null,null,null],"title":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"time":["Čas snímku","Zeit der Momentaufnahme","Snapshot Time","Hora de la Foto","Heure de la Capture","Tempo Istantanea","스냅샷 시간","Momentinis vaizdas","Snapshot-tijd","Czas migawki",""],"cloud":{"linked":["Připojeno","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":["Nepřipojeno","Unverbunden","Not Linked","No Enlazado","Non Associée","Non collegato","연결되지 않음","Nesusieta","Niet verbonden","Nie połączono",""],"label":["","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT",""]},"btn":{"connect":["Zkusit povolit kameru","Versuche Kamera zu aktivieren","Try to enable camera","Intenta habilitar la cámara","Essayer d\'activer la caméra","Prova ad abilitare la fotocamera","카메라 활성화 시도중","Pabandykite įjungti kamerą","Probeer de camera in te schakelen","Spróbuj aktywować kamerę",""],"settings":["Otevřít nastavení kamery","Öffne Kamera-Einstellungen","Open camera settings","Abrir los ajustes de la cámara","Ouvrir les paramètres de la caméra","Apri impostazioni fotocamera","카메라 설정 열기","Atidaryti kameros nustatymus","Open camera-instellingen","Otwórz ustawienia kamery",""],"link":["Připojit kameru do Connectu","Kamera mit CONNECT verbinden","Link camera to CONNECT","Asocia cámara a CONNECT","Associer la caméra à CONNECT","Collega fotocamera a CONNECT","카메라를 CONNECT에 연결하기","Susieti kamerą su CONNECT","Verbind camera met CONNECT","Połącz kamerę z CONNECT",""],"unlink":["Odpojit kameru z Connectu","Kamera von CONNECT trennen","Unlink camera from CONNECT","Desvincular la cámara de CONNECT","Dissocier la caméra de CONNECT","Scollega fotocamera da CONNECT","카메라를 CONNECT에서 연결 해제하기","Atsieti kamerą nuo CONNECT","Verbreek verbinding van camera met CONNECT","Odłącz kamerę od CONNECT",""]},"path":["Cesta","Pfad","Path","Ruta","Chemin","Percorso","경로","Kelias","Pad","Ścieżka",""],"driver":["Ovladač","Treiber","Driver","Controlador","Driver","Driver","드라이버","Draiveris","Driver","Sterownik",""]},"printer":{"title":["Tiskárna","Drucker","Printer","Impresora","imprimante","Stampante","프린터","Spausdintuvas","Printer","Drukarka","Tlačiareň"],"name":["Název tiskárny","Name des Druckers","Printer name","Nombre de la impresora","nom de l\'imprimante","Nome stampante","프린터 이름","Spausdintuvo pavadinimas","Naam van de printer","Nazwa drukarki","Názov tlačiarne"],"location":["Umístění tiskárny","Standort des Druckers","Printer location","Ubicación de la impresora","localisation de l\'imprimante","Posizione stampante","프린터 위치","Spausdintuvo vieta","Locatie van de printer","Lokalizacja drukarki","Umiestnenie tlačiarne"],"network_error_chime":["Zvukové upozornění při síťové chybě","Netzwerk-Fehlerton","Network Error Chime","Tono Error Red","Carillon d\'erreur réseau","Suono di errore di rete","네트워크 에러 차임벨","","","Dźwięk błędu sieci",""]},"print":{"fdm":{"1":["Je tiskárna připravena?","Ist der Drucker bereit?","Is the printer ready?","¿Está lista la impresora?","L\'imprimante est-elle prête ?","La stampante è pronta?","프린터가 준비되었습니까?","Ar spausdintuvas pasirengęs?","Is de printer klaar voor gebruik?","Czy drukarka jest gotowa?","Je tlačiareň pripravená?"],"2":["Je tisková podložka prázdná a čistá?","Ist der Druckbogen leer und sauber?","Is printing sheet empty and clean?","¿Está vacía y limpia la lámina de impresión?","Le surface d\'impression est-elle vide et propre ?","La piastra di stampa è vuota e pulita?","프린트 시트가 비어있고 깨끗합니까?","Ar spausdinimo lapas tuščias ir švarus?","Is het printplatform leeg en schoon?","Czy arkusz druku jest pusty i czysty?","Je tlačová podložka prázdna a čistá?"]}},"upld":{"title":["Nahrát soubor","Projekt hochladen","Upload file","envía proyecto","Téléversement de projet","Carica file","파일업로드","Įkelti failą","Bestand uploaden","prześlij projekt","Nahrať súbor"],"start-pt":["po přenosu zahájit tisk","Druck nach der Übertragung starten","Start print after transfer","Iniciar la impresión tras la transferencia","Démarrer l\'impression après le transfert","Avvia stampa dopo il trasferimento","전송 후 출력 시작","Pradėti spausdinimą po perdavimo","Start print na het omzetten","Rozpocznij drukowanie po przesłaniu","po prenose spustiť tlač"],"remote":{"source":["URL zdroje","Quell-URL","Source URL","URL Fuente","URL de la source","URL fonte","원본 URL","Šaltinio URL","Bron van URL","Źródłowy URL","URL zdroja"],"hint-fdm":["Zadejte URL souboru G-CODE","URL der G-CODE-Datei eingeben","Type URL of G-CODE file","Escribe URL de archivo G-CODE","Entrez l\'URL du fichier G-CODE du projet","Digitare URL del file G-CODE","G코드 파일의 주소를 입력하십시오","Įveskite G-CODE failo URL","Type de URL van het gcode-bestand","Wpisz adres URL pliku G-Code","Zadajte URL súboru G-code"],"file":["Název souboru","Dateiname","File name","Nombre del archivo","Nom de fichier","Nome file","파일명","Failo pavadinimas","Bestandsnaam","Nazwa pliku","Názov súboru"],"file-hint":["Zadejte název souboru","Dateiname eingeben","Type file name","Escribe nombre de archivo","Tapez le nom du fichier","Digitare nome file","파일명을 입력하십시오","Įveskite failo pavadinimą","Type de bestandsnaam","Wpisz nazwę pliku","Zadajte názov súboru"]},"direct":{"choose":["Vyberte {{file}} nebo jej přetáhněte sem.","Klicke um eine {{file}} Datei auszuwählen oder ziehe sie hier hin","Click to choose a {{file}} file or drag it here","Haz clic para elegir un archivo {{file}} o arrástralo hasta aquí","Cliquer pour choisir un fichier {{file}} ou déposez le ici","Fare clic per scegliere un file {{file}} o trascinarlo qui","선택한 {{file}} 파일을 클릭하거나 여기로 드래그하십시오","Pasirinkite {{file}} failą arba vilkite jį čia","Klik om een {{file}}-bestand te kiezen of sleep het hierheen","Kliknij, aby wybrać plik {{file}} lub przeciągnij go tutaj","Kliknutím vyberte súbor {{file}} alebo ho sem potiahnite."]}},"download":{"dl-started":["Začátek stahování","Herunterladen Gestartet","Download Started","Se inició la descarga","téléchargement démarré","Scaricamento Avviato","다운로드가 시작됨","Atsisiuntimas pradėtas","Downloaden gestart","Pobieranie rozpoczęte","Sťahovanie začalo"],"start-pt":["Spustit tisk","Autostart","Autostart","Inicio automático","Démarrage automatique","Avvio automatico","자동시작","Automatinis paleidimas","Autostart","Autostart","Spustiť tlač"]},"temps":{"title":["Teploty","Temperaturen","Temperatures","Temperaturas","Températures","Temperature","온도","Temperatūros","Temperatuur","Temperatury","Teploty"]},"":[null,null,null,null,null,null,null,null,null,null,null],"version":{"title":["Verze","Version","Version",null,"version",null,"버전","Versija","Versie",null,"Verzia"],"api":["API","API","API",null,"api",null,"API","API","API",null,"API"],"hostname":["Hostname","Hostname","Hostname",null,"nom d\'hôte",null,"호스트명","Hostname","Hostnaam",null,"Hostname"],"firmware":["Firmware","Firmware","Firmware",null,"micrologiciel",null,"펌웨어","Firmware","Firmware",null,"Firmware"],"server":["Server","Server","Server",null,"serveur",null,"서버","Serveris","Server",null,"Server"],"text":["Text","Text","Text",null,"texte",null,"텍스트","Tekstas","Tekst",null,"Text"],"sdk":["SDK","SDK","SDK",null,"sdk",null,"SDK","SDK","SDK",null,"SDK"],"fe":["Frontend","Frontend","Frontend",null,"frontend",null,"프론트엔드","Frontendas","Frontend",null,"Frontend"]},"sys-version":{"title":["Verze systému","Systemversion","System Version",null,"version du système",null,"시스템버전","Sistemos versija","Systeenversie",null,"Verzia systému"],"python":["Python","Python","Python","Python","python","Python","파이썬","Python","Python","Python","Python"],"description":["Popis","Beschreibung","Description","Descripción","description","Descrizione","설명","Aprašymas","Beschrijving","Opis","Popis"],"id":["ID","ID","ID","ID","ID","ID","ID","ID","ID","ID","ID"],"os":["OS","OS","OS","OS","Système d\'exploitation","S.O.","OS","OS","OS","OS","OS"]},"updates":{"title":[null,null,"System Updates",null,null,null,null,"Sistemos atnaujinimai",null,null,null]},"user":{"title":["Uživatel","Benutzer","User",null,"utilisateur",null,"유저","Vartotojas","Gebruiker",null,"Používateľ"],"username":["Uživatelské jméno","Benutzername","User Name","Nombre de usuario","nom d\'utilisateur","Nome Utente","유저명","Vartotojo vardas","Gebruikersnaam","Nazwa użytkownika","Používateľské meno"],"format":{"name":["Uživatelské jméno musí obsahovat alespoň 3 znaky.","Der Benutzername muss mindestens 3 Zeichen lang sein.","Username length must be at least 3 characters long.","El nombre de usuario debe tener al menos 3 caracteres.","La longueur du nom d\'utilisateur doit être d\'au moins 3 caractères.","La lunghezza del nome utente deve essere di almeno 3 caratteri.","유저명은 최소 3자리 이상 입력하십시오.","Vartotojo vardo ilgis turi būti mažiausiai 3 simboliai.","De gebruikersnaam moet minimaal 3 karakters lang zijn.","Długość nazwy użytkownika musi mieć co najmniej 3 znaki.","Používateľské meno musí obsahovať aspoň 3 znaky."],"password-1":["Heslo nesmí začínat či končit mezerami, a zároveň musí splňovat jednu z následujících podmínek:","Das Passwort darf weder am Anfang noch am Ende Leerzeichen enthalten und muss mindestens eine der folgenden Optionen erfüllen:","Password can\'t contain spaces on the beggining nor the end and must meet at least one of these options:","La Contraseña no puede empezar o terminar con espacios y debe cumplir al menos una de estas opciones:","Le mot de passe ne peut pas contenir d\'espaces au début ni à la fin et doit répondre à au moins l\'une de ces options :","La password non può contenere spazi né all\'inizio né alla fine e deve soddisfare almeno una di queste opzioni:","암호는 시작부분에 공백을 둘 수 없으며 다음옵션 중 하나이상을 충족해야 합니다.","Slaptažodis negali turėti tarpų pradžioje arba pabaigoje ir turi atitikti bent vieną iš šių variantų:","Het wachtwoord mag geen spaties aan het begin of het einde bevatten en moet aan minstens één van deze opties voldoen:","Hasło nie może zawierać spacji na początku ani na końcu i musi spełniać przynajmniej jeden z poniższych warunków:","Heslo nesmie začínať ani končiť medzerami a musí spĺňať aspoň jednu z týchto podmienok:"],"password-2":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 malé písmeno, 1 velké písmeno a 1 číslo","- Minimale Länge 8 Zeichen, davon ein Kleinbuchstabe, ein Großbuchstabe und eine Zahl","- Minimal length 8 characters, including one lowercase letter, one uppercase letter and one number","- Longitud mínima 8 caracteres, incluyendo una minúscula, una mayúscula y un número","- Longueur minimale de 8 caractères, dont une lettre minuscule, une lettre majuscule et un chiffre","- Lunghezza minima 8 caratteri, di cui una lettera minuscola, una lettera maiuscola e un numero","- 최소 길이 8자(소문자 1개, 대문자 1개, 숫자 1개 포함)","- 8 simbolių ilgio minimalus, įskaitant vieną mažąją raidę, vieną didžiąją raidę ir vieną skaičių","- Minimaal 8 karakters lang, met tenminste een kleine letter, een hoofdletter en een nummber","- Minimalna długość 8 znaków, w tym jedna mała litera, jedna duża litera i jedna cyfra","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 malého písmena, 1 veľkého písmena a 1 číslice"],"password-3":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 speciální symbol (např. @)","- Mindestlänge 8 Zeichen, einschließlich eines nicht alphanumerischen Zeichens (z. B. @)","- Minimal length 8 characters, including one non-alphanumeric character (e.g. @)","- Longitud mínima 8 caracteres, incluyendo los no alfanuméricos (como @)","- Longueur minimale de 8 caractères, dont un caractère non alphanumérique (par exemple @)","- Lunghezza minima 8 caratteri, compreso un carattere non alfanumerico (es. @)","- 영숫자가 아닌 문자(예: @) 1개를 포함한 최소 길이 8자","- 8 simbolių ilgio minimalus, įskaitant vieną neteisingą simbolį (pvz., @)","- Minimaal 8 karakters lang, met tenminste één niet-alfanumeriek karakter (bijv. @)","- Minimalna długość 8 znaków, w tym jeden znak niealfanumeryczny (np. @)","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 špeciálneho symbolu (napr. @)"],"password-4":["- Heslo musí obsahovat minimálně 15 znaků","- Minimale Länge 15 Zeichen","- Minimal length 15 characters","- Longitud mínima 15 caracteres","- Longueur minimale 15 caractères","- Lunghezza minima 15 caratteri","- 최소 길이 15자","- 15 simbolių ilgio minimalus","- Minimaal 15 karakters lang","- Minimalna długość 15 znaków","- Heslo musí obsahovať minimálne 15 znakov"]},"new-password":["Nové heslo","Neues Passwort","New Password","Nueva Contraseña","nouveau mot de passe","Nuova Password","신규 암호","Naujas slaptažodis","Nieuw wachtwoord","Nowe hasło","Nové heslo"],"re-password":["Zopakujte heslo","Passwort wiederholen","Repeat Password","Repetir Contraseña","répéter le mot de passe","Ripeti Password","암호 재입력","Pakartokite slaptažodį","Herhaal wachtwoord","Powtórz hasło","Zopakujte heslo"],"password":["Heslo","Passwort","Password","Contraseña","mot de passe","Password","암호","Slaptažodis","Wachtwoord","Hasło","Heslo"]},"serial":{"label":["Sériové číslo","Seriennummer","Serial Number","Número de serie","numéro de série","Numero Seriale","시리얼넘버","Serijinis numeris","Serienummer","Numer seryjny","Sériové číslo"]},"api_key":{"label":["","API Key","API Key","Clave API","Clé API","Chiave API","API KEY","API raktas","API-sleutel","Klucz API",""]},"logs":{"title":["Logy","Protokolle","Logs",null,"logs",null,"로그","Žurnalai","Logbestanden",null,"Logy"],"select-file":["Vyberte soubor","Datei auswählen","Select File",null,"Sélectionnez une fichier",null,"파일 선택","Pasirinkti failą","Selecteer bestand",null,"Vyberte súbor"],"not-selected":["Není vybrán soubor logů!","Es ist keine Protokolldatei ausgewählt!","No log file is selected!","¡No se ha seleccionado archivo de registro!","Pas de fichier de log sélectionné!","Nessun file di registro selezionato!","로그 파일이 선택되지 않았습니다!","Nepasirinktas joks žurnalų failas!","Geen logbestand geselecteerd!","Nie wybrano żadnego pliku logu!","Nie je vybraný žiadny logovací súbor!"],"select-file-placeholder":["Vyberte soubor logů","Protokolldatei auswählen","Select log file","Selecciona archivo de registro","selectionnez un fichier de log","Selezionare un file di registro","로그 파일 선택","Pasirinkti žurnalų failą","Selecteer logbestand","Wybierz plik logu","Vyberte logovací súbor"],"empty-file":["Soubor je prázdný!","Die Protokolldatei ist leer!","Log file is empty!","¡El archivo de registro está vacío!","Le fichier de log est vide!","Il file di registro è vuoto!","로그파일이 비어있음!","Žurnalų failas yra tuščias!","Logbestand is leeg!","Plik logu jest pusty!","Logovací súbor je prázdny!"],"file-too-large":["Soubory logů o velikosti větší než {{size}} jsou k dispozici pouze ke stažení!","Protokolldateien, die größer als {{size}} sind, stehen nur zum Herunterladen zur Verfügung.","Log files of size larger than {{size}} are available only for downloading.","Los archivos de registro mayores de {{size}} sólo se pueden descargar.","Les fichiers de log d\'une taille supérieure à {{size}} ne sont disponibles que pour le téléchargement.","I file di registro di dimensioni superiori a {{size}} sono disponibili solo per il download.","로그 파일을 다운로드 하기 위해서는 최소 {{size}} 이상의 용량이 필요합니다.","Žurnalų failai, didesni nei {{size}}, yra prieinami tik atsiunčiant.","Logbestanden groter dan {{size}} kunnen alleen gedownload worden.","Pliki logów o rozmiarze większym niż {{size}} są dostępne tylko do pobrania.","Logovacie súbory s veľkosťou väčšou ako {{size}} sú k dispozícii len na stiahnutie.!"]},"ntf":{"success":["Požadavek byl úspěšný","Erfolg","The request was successful","Éxito","la demande a été traitée avec succès","Successo","요청이 성공했습니다.","Užklausa buvo sėkminga","De aanvraag was succesvol","Sukces","Žiadosť bola úspešná"],"camera-suc":["","Kamera Steuerungsanfrage wurde gesendet","Camera control request has been sent","La petición de control de cámara se ha enviado","La demande de contrôle de la caméra a été envoyée","È stata inviata una richiesta di controllo della fotocamera","카메라 조작 요청이 전송되었습니다.","Kameros valdymo užklausa buvo išsiųsta","Aanvraag voor camerabesturing is verzonden","Wysłano żądanie sterowania kamerą",""],"camera-config-success":["Konfigurace kamery byla aktualizovaná","Kamerakonfiguration wurde aktualisiert","Camera configuration has been updated","La configuración de la cámara se ha actualizado","La configuration de la caméra a été mise à jour","La configurazione della fotocamera è stata aggiornata","카메라 구성이 업데이트되었습니다.","Kameros konfigūracija buvo atnaujinta","Cameraconfiguration is geüpdatet","Konfiguracja kamery została zaktualizowana",""],"settings-suc":["Nastavení bylo úspěšně změněno.","Die Einstellungen wurden erfolgreich geändert.","Settings was changed successfully.","Los ajustes se han cambiado correctamente.","Paramètres modifiés avec succès.","Impostazioni modificate correttamente","설정이 성공적으로 변경되었습니다.","Nustatymai sėkmingai pakeisti.","Instelling succesvol gewijzigd.","Ustawienia zostały zmienione pomyślnie","Nastavenia boli úspešne zmenené."],"upld-suc":["Soubor {{file_name}} byl úspěšně nahrán.","Das Hochladen des Projekts {{file_name}} war erfolgreich.","The file {{file_name}} was uploaded successfully.","El envío del proyecto {{file_name}} se completó.","Le projet {{file_name}} a été téléversé correctement.","Caricamento del progetto {{file_name}} riuscito.","{{file_name}}파일이 성공적으로 업로드되었습니다.","Failas {{file_name}} sėkmingai įkeltas.","Het bestand {{file_name}} is succesvol geüpload.","Przesyłanie projektu {{file_name}} powiodło się.","Súbor {{file_name}} bol úspešne nahraný."],"error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"upld-unsuc":["Nahrání souboru {{file_name}} selhalo.","Das Hochladen des Projekts {{file_name}} war nicht erfolgreich.","The file {{file_name}} upload was unsuccessful.","El envío del proyecto {{file_name}} ha fallado.","Le téléversement du projet {{file_name}} a échoué.","Caricamento del progetto {{file_name}} non riuscito.","{{file_name}}파일의 업로드가 실패하였습니다.","Failo {{file_name}} įkėlimas nepavyko.","Het bestand {{file_name}} is niet succesvol geüpload.","Przesyłanie projektu {{file_name}} nie powiodło się.","Nahrávanie súboru {{file_name}} zlyhalo."],"upld-start":["Požadavek na nahrání souboru byl přijat","Upload-Anfrage wurde angenommen","Upload request has been accepted","Se acepto la petición de subida","La demande de téléchargement a été acceptée","Richiesta di caricamento accettata","업로드 요청이 수락되었습니다.","Įkėlimo užklausa priimta","Uploadverzoek is geaccepteerd","Żądanie przesłania zostało zaakceptowane","Žiadosť o odoslanie bola prijatá"]},"sort":{"by-name":["Název","Name","Name","Nombre","Nom","Nome","이름으로 정렬하기","Pavadinimas","Naam","Nazwa",""],"by-date":["Datum","Datum","Date","Fecha","Date","Data","날짜로 정렬하기","Data","Datum","Data",""],"by-size":["Velikost","Größe","Size","Tamaño","Taille","Dimensioni","크기로 정렬하기","Dydis","Grootte","Rozmiar",""]},"unit":{"h":["h","h","h","h","h","h","h","h","u","g","h"],"min":["min","min","min","min","min","min","min","min","min","min","min"],"ml":["ml","ml","ml","ml","mL","ml","ml","ml","ml","ml","ml"],"rpm":["RPM","UPM","RPM","RPM","TPM","RPM","RPM","RPM","RPM","Obr./min","RPM"],"b":["B","B","B","B","B","B","B","B","B","B","B"],"kb":["KB","KB","KB","KB","KB","KB","KB","KB","kB","KB","KB"],"mb":["MB","MB","MB","MB","MB","MB","MB","MB","MB","MB","MB"],"gb":["GB","GB","GB","GB","GB","GB","GB","GB","GB","GB","GB"]},"exp-times":{"exp-time":["Doba osvitu [s]","Belichtung [s]","Exposure [s]","Exposición [s]","Exposition [s]","Esposizione [s]","[s]초 노출","Ekspozicija [s]","Belichting [s]","Czas naświetlania [s]","Osvit [s]"],"inc":["Navýšení expozice (s)","Belichtungszeit inkr. [s]","Exposure time incr. [s]","Incremento tiempo exp. [s]","Incr. du temps d\'exposition [s]","Incremento tempo di esposizione [s]","[s]초 노출 시간 증가","Ekspozicijos laiko padidėjimas [s]","Belichtingstijd verhogen [s]","Przyrost czasu naświetl. [s]","Prírastok osvitu (s)"],"layer-1st":["Osvit první vrstvy [s]","Erste Schicht Bel. [s]","First Layer Expo. [s]","Primera Capa Expo. [s]","Première couche Expo. [s]","Esposizione Primo layer [s]","첫번째 레이어 노출시간 [s]초","Pirmojo sluoksnio ekspozicija [s]","Belichtingstijd eerste laag [s]","Naśw. 1. warstwy [s]","Osvit prvej vrstvy [s]"],"profile":["Tiskový profil","Druckprofil","Print profile","Perfil de Impresión","Profil d\'Impression","Profilo di stampa","출력 프로필","Spausdinimo profilis","Printprofielen","Profil druku","Tlačový profil"],"faster":["Rychlejší","Schneller","Faster","Rápido","Plus rapide","Più veloce","빠르게","Greičiau","Sneller","Szybciej","Rýchlejšie"],"slower":["Pomalejší","Langsamer","Slower","Lento","Plus lent","Più lento","느리게","Lėčiau","Langzamer","Wolniej","Pomalšie"],"high-viscosity":["Velmi Viskózní","Hohe Viskosität","High Viscosity","Alta Viscosidad","Haute viscosité","Alta Viscosità","고점도","Aukštas klampumas","Hoge viscositeit","Wysoka lepkość","Vysoká viskozita"]}}}')}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.p="",(()=>{"use strict";var e=a(8751),t=a(8495),i=a(6648);const s=()=>{document.getElementById("menu").addEventListener("click",(()=>{document.getElementById("menu").classList.contains("burger-open")?n():(document.getElementById("menu").classList.add("burger-open"),document.getElementById("navbar").classList.remove("burger-menu"))})),document.getElementById("navbar").querySelectorAll("a[href]").forEach((e=>{e.addEventListener("click",n)}))};function n(){document.getElementById("menu").classList.remove("burger-open"),document.getElementById("navbar").classList.add("burger-menu")}var o=a(7780),r=a(1351),l=a(5412);const d=(e,t)=>{const a=l.L.init(e,t);a&&(a.setOptions((0,o.Vb)()),a.value=(0,o.G3)(),a.onselect=e=>{(0,o.m0)(e),window.location.reload()})};let c=!1;const u={status:{get:()=>(0,i.LK)("/api/v1/status"),init:!0,update:!0,updateInterval:5e3}};async function p(e){const t=(new Date).getTime(),a=Object.fromEntries(Object.entries(u).map((([a,i])=>[a,(()=>{if(!e)return i.init;if(i.update){if(!i.updateInterval)return!0;if(i.timestamp||(i.timestamp=t+i.updateInterval),t>=i.timestamp)return i.timestamp=t+i.updateInterval,!0}})()?i.get():void 0])).filter((([,e])=>void 0!==e))),i=Object.values(a),s=await Promise.all(i.map((e=>e.then((e=>({ok:!0,payload:e}))).catch((e=>({ok:!e.code&&null,error:e}))))));return Object.fromEntries(Object.entries(a).map((([e],t)=>[e,s[t]])))}async function m(e){let a=!1;for(;;){let i=!1;try{const t=await p(a);t.status&&(c=null===t.status.ok),Object.values(t).forEach((({ok:e,error:t})=>{var a;e||(i=!0,null!==e&&(a=t,(0,r.S)(a,{fallbackMessage:{title:"API error",message:"Cannot connect to printer"}})))})),a?g(t):i||(v({...t,printer:e}),a=!0)}catch(e){h(e)}t.Z.setConnected(!c),await new Promise((e=>setTimeout(e,1e3)))}}function v(a){try{t.Z.init(a),window.onpopstate=t=>t&&(0,e.g9)(t.currentTarget.location.hash||"#dashboard"),(0,e.g9)(window.location.hash||"#dashboard")}catch(e){h(e)}}function g(e){try{t.Z.update(e)}catch(e){h(e)}}function h(e){(0,r.S)(e,{fallbackMessage:{title:"Application error",message:"Something bad happened on application side"}}),console.error(e)}window.onload=()=>{console.log("PrusaLink v.3.12.0 #b'cd5941b'"),s(),d("lang-dropdown","lang-dropdown"),(0,o.ot)(),document.querySelectorAll("a[href]").forEach((t=>{t.addEventListener("click",(a=>{(0,e.c4)(t.href)&&a.preventDefault()}))})),(0,i.Z5)().then((e=>{e&&m(e)}))}})()})(); diff --git a/prusa/link/static/main.64c0df84d11214f95835.js b/prusa/link/static/main.64c0df84d11214f95835.js new file mode 100644 index 00000000..72577380 --- /dev/null +++ b/prusa/link/static/main.64c0df84d11214f95835.js @@ -0,0 +1 @@ +(()=>{var e={5862:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f844a0a85dde310826fce450c3e149d3.svg"},340:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"d0ce7d704590cb0b868ae92249ee86e8.svg"},3246:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"e6e0734bc2dad609a3e92f1873412f11.svg"},6730:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"557f3616d5a1b407b59795b8328bb51f.svg"},8065:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"2e842fcb7b83af8e1e0d26afd80f8fd9.svg"},8920:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24c2502c54c43441d0bb4bbc17e10a83.svg"},2456:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f6a7f34a841f532dd1e3e4d610d164f6.svg"},9819:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"53df9c11e268c2390b147239f9ee8796.svg"},7038:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"9332c323b291ba7226ddcdabb0c8e7c4.svg"},1656:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"79e90794ba3b36a64a12414decda0932.svg"},9594:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"a443dadfc7e114c74dae6cd64a74db9d.svg"},931:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"926f52aea63cfd597b30096bfe4077c6.svg"},7336:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"44b654f4ca724e154a9bc60335e98847.svg"},9387:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"8657650f85be23655543d28f58941616.svg"},5300:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ea93bcffb8771234f8c641f3b7e9f848.svg"},3482:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ccd215a92d0427a21339a8c38e2a40f3.svg"},5515:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"997c391425907810b4a6e42663d11fd4.svg"},4578:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24e2e49c87df140cf16aa18b4e261f12.svg"},2e3:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"58151992d28dfb34ee417e0ebf6a66b6.svg"},2290:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"c8a0ca767f73685bbe06863f81e9d3cb.svg"},3174:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"39e93870e6b8fd4ef2d9ed668f8c1545.svg"},8796:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"1218694688ee15ee97bcded9e1a75cc8.svg"},1373:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"dfb811cc28f8e3d7c14bcedbe7ef35b8.svg"},4622:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"b891ace1622f34bac5a2b4edb7adc733.svg"},5464:(e,t,a)=>{var i=a(7091),s=a(8065),n=a(4622),o=a(6730),r='

      • Camera Name

        -

      • Snapshot Time

        -

        ';e.exports=r},3478:(e,t,a)=>{var i=a(7091),s=a(340),n=a(5862),o=a(1656),r=i(s),l=i(n),d=i(o),c='

        printer coordinates

        X axis

        0 mm

        Y axis

        0 mm

        Z axis

        0 mm

        stepper motors

        heated bed X and Y move

        move step [mm]

        nozzle Z move

        extruder

        extrude/retract step [mm]

        nozzle temperature

        0°C

        speed

        100%

        heated bed temperature

        0°C

        flow

        100%

        ';e.exports=c},2373:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(3174),b=a(8796),f=i(s),y=i(n),k=i(o),w=i(r),x=i(l),z=i(d),S=i(c),E=i(u),P=i(p),N=i(m),L=i(v),I=i(g),T='

        !!! DO NOT DISTRIBUTE !!! INTERNAL TESTING ONLY !!!

        Upload file

        Add file from

         

        Click to choose a *.sl1 file or drag it here

        Source URL

        Type URL of G-CODE file

        File name

        Type or edit file name

        Progress

        NA

        Size

        NA

        Download Started

        NA

        Remaining Time

        NA

        Autostart

        NA

        Temperatures

        Cameras

        • -

        • -

        ';e.exports=T},7189:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(931),b=a(5515),f=a(3174),y=a(8796),k=a(9594),w=a(8065),x=a(8920),z=i(s),S=i(n),E=i(o),P=i(r),N=i(l),L=i(d),I=i(c),T=i(u),_=i(p),j=i(m),C=i(v),A=i(g),D=i(h),B=i(b),O=i(f),q=i(y),M=i(k),R=i(w),H=i(x),U='

        Local

        0%

        0 GB of 0 GB free

        Add file from

         

        Click to choose a *.sl1 file or drag it here

        Source URL

        Type URL of G-CODE file

        File name

        Type or edit file name

        Progress

        NA

        Size

        NA

        Download Started

        NA

        Remaining Time

        NA

        Autostart

        NA

        ';e.exports=U},5198:(e,t,a)=>{var i=a(7091),s=a(4622),n=a(6730),o='

        ';e.exports=o},2936:(e,t,a)=>{var i=a(7091),s=a(7038),n=a(7336),o=a(1373),r=a(4622),l=a(6730),d=i(s),c=i(n),u=i(o),p='

        version

        api

        hostname

        firmware

        server

        text

        sdk

        frontend

        3.12.0

        system version

        updates

        connection

        PRUSA CONNECT

        connection status

        Successfully connected

        3D printer connection status

        Successfully connected

        printer

        printer name

        printer location

        network error chime

        user

        username

        new password

        repeat password

        current password

        serial number

        serial number

        api key

        api key

        logs

        select file

        • No log file is selected!
        ';e.exports=p},7091:e=>{"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(t.hash&&(e+=t.hash),t.maybeNeedQuotes&&/[\t\n\f\r "'=<>`]/.test(e)?'"'.concat(e,'"'):e)}},6648:(e,t,a)=>{"use strict";a.d(t,{LK:()=>d,O2:()=>n,Z5:()=>g,gJ:()=>m,iT:()=>c,wU:()=>r});var i=a(8236),s=a(1351);const n=window.location.pathname.endsWith("/")?window.location.pathname.slice(0,-1):window.location.pathname,o=()=>new Promise(((e,t)=>{(0,i.o)((e=>t=>{const a=document.getElementById("modal-apiKey"),i=document.importNode(a.content,!0);return i.getElementById("apiKey").addEventListener("keydown",(a=>{"Enter"==a.key&&(t(),e(a.target.value))})),i.getElementById("login").addEventListener("click",(a=>{a.preventDefault();let i=document.getElementById("apiKey").value;t(),e(i)})),i})(e),{timeout:0,closeOutside:!1})})).then((e=>sessionStorage.setItem("apiKey",e))),r=(e="application/json")=>"ApiKey"==sessionStorage.getItem("authType")?{"X-Api-Key":sessionStorage.getItem("apiKey"),Accept:e}:{Accept:e},l=()=>new Promise(((e,t)=>(sessionStorage.setItem("auth","pending"),fetch(`${n}/api/v1/info`,{headers:r()}).then((t=>{if(401==t.status){const a=t.headers.get("WWW-Authenticate").split(" ")[0];return sessionStorage.setItem("authType",a),sessionStorage.removeItem("apiKey"),"ApiKey"==a?o().then((()=>l().then((t=>e(t))))):l().then((t=>e(t)))}{const e=t.json();return 200!=t.status&&e.then((e=>(0,s.S)({data:e}))),e}})).then((t=>{sessionStorage.setItem("auth","true"),e(t)}))))),d=(e,t={})=>u(e,t,"application/json","json"),c=(e,t={})=>u(e,t,"text/plain","text");async function u(e,t={},a,i){if("true"!=sessionStorage.getItem("auth"))throw{code:401};{t.headers={...t.headers,...r(a)};const s=await fetch(`${n}${e}`,t),o=s.status,l={code:o,eTag:s.headers.get("etag")};switch(o){case 401:throw sessionStorage.setItem("auth","false"),l;case 204:case 304:return l;default:const e=await s.text();if(!s.ok){if(e.length>0)try{l.data=JSON.parse(e)}catch{}throw l.data=l.data||{title:`Error ${o}`,message:s.statusText},l}return l.data="json"===i?0===e.length?{}:JSON.parse(e):e,l}}}const p=(e,t,a)=>new Promise(((i,s)=>{"true"==sessionStorage.getItem("auth")?(t.headers={...r(),...t.headers},fetch(a?`${n}${e}?ct=${a}`:e,t).then((e=>{401==e.status&&(sessionStorage.setItem("auth","false"),s(e)),e.ok?e.blob().then((t=>i({url:URL.createObjectURL(t),headers:e.headers}))):s(e)})).catch((e=>s(e)))):s()})),m=(e,t,a={})=>p(`${n}${e}`,{...a,headers:{...a.headers,Accept:"image/*"}},t),v=e=>{const t=document.getElementById("modal-welcome"),a=document.importNode(t.content,!0);return a.querySelector(".close-button").addEventListener("click",e),a},g=()=>null==localStorage.getItem("showWelcome")?new Promise(((e,t)=>{(0,i.o)(v,{closeCallback:()=>{localStorage.setItem("showWelcome",!0),e()}})})).then((()=>l())):l()},1972:(e,t,a)=>{"use strict";a.d(t,{Z:()=>s});var i=a(6648);const s=function(e,t){let a=document.createElement("a");a.href=`${i.O2}${e}`,a.download=t||"",a.click(),a.remove()}},646:(e,t,a)=>{"use strict";function i(e,t=!0){e&&(t&&!e.hasAttribute("hidden")&&e.setAttribute("hidden",!0),!t&&e.hasAttribute("hidden")&&e.removeAttribute("hidden"))}function s(e,t=!0){i(e,!t)}function n(e,t=!0){e&&(t&&!e.hasAttribute("disabled")&&e.setAttribute("disabled",!0),!t&&e.hasAttribute("disabled")&&e.removeAttribute("disabled"))}function o(e,t=!0){return n(e,!t)}function r(){s(document.querySelector("#job .loading-overlay"))}function l(){i(document.querySelector("#job .loading-overlay"))}function d(e,...t){const a=i=>{if(t)for(const e of t)if(e&&e.contains(i.target))return;e&&e(),window.removeEventListener("pointerup",a)};window.addEventListener("pointerup",a)}a.d(t,{H:()=>n,QH:()=>i,QP:()=>r,Ti:()=>d,Zk:()=>l,gL:()=>o,yx:()=>s})},5537:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=function(e){return"string"==typeof e?document.getElementById(e):e||document.body}},9741:e=>{e.exports=function(e,t){let a=t.split("."),i=e;for(const e of a)if(i=i[e],!i)break;return i}},7780:(e,t,a)=>{"use strict";a.d(t,{G3:()=>v,Iu:()=>h,Vb:()=>g,m0:()=>m,ot:()=>f});var i=a(5537),s=a(9741),n=a.n(s);const o=a(4977),r=o.langs,l=o.texts,d=r.indexOf("en");let c,u;function p(){return navigator.language||navigator.userLanguage||""}function m(e){const t=r.indexOf(e);return-1!==t&&(u=t,c=e,localStorage.setItem("lang",c),!0)}function v(){return c}function g(){return[...r]}function h(e,t){let a=n()(l,`${e}.${u}`);if(!a)return a=n()(l,`${e}.${d}`),a||(a=e),b(a,t),a;let i=null;if(t&&(i=Object.assign({},t),delete i.query,delete i.ref),i&&Object.keys(i).length>0){let e,i=a,s=/{{(.*?)}}/g;for(;e=s.exec(a);){let s=a.substr(e.index+2,e[0].length-4);if("query"!==s&&"ref"!==s)if(s in t){let a=t[s];i=i.replace(e[0],a)}else 0}a=i}return b(a,t),a}function b(e,t){if(t)if(t.ref){t.ref.innerHTML=e}else if(t.query){let a=document.querySelector(t.query);a?a.innerHTML=e:console.warn(`cannot find element with "${t.query}" query`)}}function f(e){(0,i.Z)(e).querySelectorAll('[data-label]:not([data-label=""])').forEach((e=>{const t=h(e.getAttribute("data-label")),a=e.getAttribute("data-label-target");a?e.setAttribute(a,t):e.innerHTML=t}))}m(localStorage.getItem("lang"))||m(p().toLowerCase())||m(p().toLowerCase().split("-")[0])||m("en")},2451:(e,t,a)=>{"use strict";a.d(t,{Z:()=>N});var i=a(6648),s=a(646),n=a(7780),o=a(3707),r=a(8236),l=a(5412),d=a(1351);let c,u=!1,p=[];const m={TEN_SEC:"TEN_SEC",THIRTY_SEC:"THIRTY_SEC",SIXTY_SEC:"SIXTY_SEC",EACH_LAYER:"EACH_LAYER",FIFTH_LAYER:"FIFTH_LAYER",MANUAL:"MANUAL"},v=e=>{switch(e){case m.TEN_SEC:return(0,n.Iu)("cameras.trigger-scheme.ten-sec");case m.THIRTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.thirty-sec");case m.SIXTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.sixty-sec");case m.EACH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.each-layer");case m.FIFTH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.fifth-layer");case m.MANUAL:return(0,n.Iu)("cameras.trigger-scheme.manual");default:return`${e}`}},g=()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-suc")),h=(e,t=E)=>{void 0===c&&(c=e.camera?.id),u=e.link.connect.ok,(0,i.LK)("/api/v1/cameras").then((e=>{const a=(e?.data?.camera_list||[]).map((e=>{let t=p.find((t=>t.id===e.camera_id))||{};return e.camera_id===c&&(e.connected||(c=null)),{id:e.camera_id,config:e.config,connected:e.connected,detected:e.detected,stored:e.stored,registered:e.registered,nextSnapshotAt:t?.nextSnapshotAt,lastSnapshotAt:t?.lastSnapshotAt,lastSnapshotUrl:t?.lastSnapshotUrl}})),i=p.filter((e=>!a.find((t=>e.id===t.id))));t&&t(a,i),p=a})).catch(d.S),p.filter((e=>e.connected)).forEach((e=>y(e.id)))},b=e=>`camera_${e}`,f=e=>document.getElementById(b(e)),y=e=>{const t=p.find((t=>t.id===e));if(!t)return;const a=new Date;t.lastSnapshotAt&&t.nextSnapshotAt&&a{const n=p.find((t=>t.id===e)),o=b(e),r=document.querySelector(`#${o} .camera__no-snapshot`),l=document.querySelector(`#${o} .camera__snapshot`);if(r&&(0,s.yx)(r,!1),l&&((0,s.yx)(l,!0),l.src=t),n){const e=`${i.get("cache-control")}`.match(/max-age=(\d+)/);let s;e&&(s=parseInt(e[1],10)),s||(s=11);const o=i.get("expires"),r=i.get("last-modified"),l=e=>{const t=new Date;return new Date(t.getTime()+1e3*e)};n.nextSnapshotAt=o?new Date(o):l(s),n.nextSnapshotAt{e||(e=c);const t=e?p.find((t=>t.id===e)):null,a=document.getElementById("camera-snapshot-picture"),i=document.getElementById("camera-snapshot-time"),s=document.getElementById("camera-snapshot-name"),[n,o,r,l]=t?.lastSnapshotAt?[t.id,t.config.name,t.lastSnapshotAt.toLocaleString(),t.lastSnapshotUrl]:[null,"-","-",""];c=n,a&&(a.src=l),i&&(i.innerText=r),s&&(s.innerText=o)},w=(e,t,a=!1)=>{e.querySelector(".camera__name").innerText=t.config.name,e.querySelector(".camera__path").innerText=t.config.path||"-",e.querySelector(".camera__driver").innerText=t.config.driver||"-",e.querySelector(".camera__cloud").innerText=t.registered?(0,n.Iu)("camera.cloud.linked"):(0,n.Iu)("camera.cloud.not-linked");const i=e.querySelector(".camera__register"),o=e.querySelector(".camera__unregister"),r=e.querySelector(".camera__add"),l=e.querySelector(".camera__remove"),d=e.querySelector(".camera__settings");(0,s.yx)(i,u&&t.connected&&!t.registered),(0,s.yx)(o,u&&t.connected&&t.registered),(0,s.yx)(r,!1),(0,s.yx)(l,!t.connected),(0,s.yx)(d,t.connected),a&&(r.title=(0,n.Iu)("camera.btn.connect"),d.title=(0,n.Iu)("camera.btn.settings"),i.title=(0,n.Iu)("camera.btn.link"),o.title=(0,n.Iu)("camera.btn.unlink"),r.addEventListener("click",(e=>{e.stopPropagation(),z(t.id)}),!1),l.addEventListener("click",(e=>{e.stopPropagation(),S(t.id)}),!1),d.addEventListener("click",(e=>{e.stopPropagation(),P(t.id)}),!1),i.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"POST")}),!1),o.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"DELETE")}),!1))},x=(e,t)=>{(0,i.LK)(`/api/v1/cameras/${e}/connection`,{method:t}).then((()=>g())).catch(d.S)},z=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:t.config})}).then((()=>g())).catch(d.S)},S=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"DELETE"}).then((()=>g())).catch(d.S)},E=(e,t)=>{const a=document.getElementById("cameras-list");t.forEach((e=>{const t=f(e.id);t&&a.removeChild(t)})),e.sort(((e,t)=>t.connected-e.connected)).forEach((e=>{const t=f(e.id);if(t)w(t,e);else{const t=(e=>{const t=document.getElementById("camera-list-item")?.content;if(!t)return null;const a=document.importNode(t,!0),i=a.querySelector("li"),o=e.id;return i.addEventListener("click",(e=>{const t=p.find((e=>e.id===o));t&&t.connected&&k(t.id),e.preventDefault()}),!1),i.id=b(e.id),a.querySelector(".camera__path__label").innerText=(0,n.Iu)("camera.path"),a.querySelector(".camera__driver__label").innerText=(0,n.Iu)("camera.driver"),a.querySelector(".camera__cloud__label").innerText=(0,n.Iu)("camera.cloud.label"),(0,s.yx)(a.querySelector(".camera__snapshot"),!1),w(a,e,!0),a})(e);t&&a.appendChild(t)}}))},P=e=>new Promise(((t,a)=>{(0,r.o)(((e,t)=>t=>{const a=`/api/v1/cameras/${e}`,r=document.getElementById("modal-camera-settings"),c=document.importNode(r.content,!0),u=c.getElementById("camera-settings__name"),p=c.getElementById("camera-settings__focus"),g=l.L.init(c.getElementById("camera-settings__resolution"),"camera-settings__resolution"),h=l.L.init(c.getElementById("camera-settings__trigger-scheme"),"camera-settings__trigger-scheme"),b=c.getElementById("yes");return(0,i.LK)(a).then((e=>{const r=e.data,l=r.available_resolutions.sort(((e,t)=>e.width===t.width?t.height-e.height:t.width-e.width)).map(((e,t)=>`${e.width}x${e.height}`)),c=Object.keys(m),f=c.map((e=>v(e))),y=r.capabilities.includes("FOCUS");u.value=r.name,g.setOptions(l),g.value=`${r.resolution.width}x${r.resolution.height}`,h.setOptions(f),h.value=v(r.trigger_scheme),(0,s.yx)(p.parentNode,y),console.log(`DEBUG: has focus (${y})`,r),y&&(p.value=Math.round(100*r.focus)),b.addEventListener("click",(()=>{const[e,s]=g.value.split("x").map((e=>parseInt(e))),r=c[f.indexOf(h.value)],l=y?{focus:p.value/100}:{};(0,i.LK)(`${a}/config`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u.value,resolution:{width:e,height:s},trigger_scheme:r,...l})}).then((()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-config-success")))).catch(d.S).finally(t)}))})).catch(d.S),c.getElementById("no").addEventListener("click",(()=>t())),c})(e),{timeout:0,closeOutside:!1})})).then((()=>{lastUpdated=null,h()})),N={load:e=>{p=[],(0,n.Iu)("cameras.link",{query:"#title-status-label"}),h(e)},update:h,getCameraNode:f,getCameraNodeId:b,updateCurrentCamera:k}},732:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(646),n=a(5489),o=a(6648);var r=a(1351),l=a(4800);a(7838);let d=1,c=1;const u=e=>{(0,n.ZP)("control",e),function(e){const t=e.state,a=document.querySelectorAll("#control button"),i=["extrude","retract"],n=["flowrate","bed","nozzle","speed"],o=[...n,...i,"move-step","extrude-retract-step","heated-bed-xy-move"];if([l.PT.PRINTING||l.PT.BUSY||l.PT.PAUSED].includes(t)){const e=t===l.PT.PAUSED?o:n;a.forEach((t=>{const a=t.id||t.parentNode.id||t.parentNode.parentNode.id;(0,s.H)(t,!e.includes(a))}))}const r=e.telemetry.temperature.nozzle.current||0,d=e.printer.minExtrusionTemp||0,c=r&&d&&r>=d;i.forEach((e=>(0,s.H)(document.getElementById(e),!c)))}(e)};function p(e,t){if("move"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"jog",...e})}))(function(e){const t=e.includes("-"),a=e.replace(RegExp("[+-]"),"");return a?{[a]:t?-d:d}:(console.error(`"${e}" is not valid direction`),{})}(t)).catch((e=>(0,r.S)(e)))}else if("home"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"home",axes:e})}))(t.split(",")).catch((e=>(0,r.S)(e)))}}function m(e,t,a){function i(e){return Number.parseFloat(e.getAttribute("data-step"))}if(e){const n=e.querySelectorAll("button[data-step]"),o=e=>{n.forEach((t=>{i(t)===e?((0,s.H)(t),t.setAttribute("selected",!0)):((0,s.gL)(t),t.hasAttribute("selected")&&t.removeAttribute("selected"))}))};n.forEach((e=>{const t=i(e);isNaN(t)||(e.onclick=()=>{o(t),a(t)})})),o(t)}}const v={load:e=>{(0,i.Iu)("control.title",{query:"#title-status-label"}),function(e){function t(e,t){switch(e){case"bed":return i=t,(0,o.LK)("/api/printer/bed",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",target:i})});case"flowrate":return a=t,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"flowrate",factor:a})});case"nozzle":return(e=>(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",targets:{tool0:e}})}))(t);case"speed":return(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"speed",factor:e})}))(t);default:throw Error("Unknown property!")}var a,i}e&&e.querySelectorAll(".input-wrapper").forEach((e=>{const a=e.querySelector("input"),i=e.querySelector("button");if(a){const e=()=>{const e=a.getAttribute("data-action"),i=Number.parseFloat(a.value);isNaN(i)||t(e,i).then((e=>{a.value=""})).catch((e=>(0,r.S)(e)))};a.onkeyup=t=>{"Enter"===t.key&&(e(),a.blur())},i&&(i.onclick=e)}}))}(document.querySelector("#control")),m(document.querySelector("#control #move-step"),d,(e=>d=e)),m(document.querySelector("#control #extrude-retract-step"),c,(e=>c=e)),function(){const e=document.querySelector("#control #disable-steppers");e&&(e.onclick=()=>{(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"disable_steppers"})}).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #extrude");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #retract");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:-e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #heated-bed-xy-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),function(){const e=document.querySelector("#control #nozzle-z-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),u(e)},update:u}},5502:(e,t,a)=>{"use strict";a.d(t,{Z:()=>S});var i=a(7780);const s=(0,i.Iu)("prop.at"),n=(0,i.Iu)("unit.h"),o=(0,i.Iu)("prop.less-than"),r=(0,i.Iu)("unit.min"),l=((0,i.Iu)("unit.ml"),(0,i.Iu)("unit.rpm")),d=(0,i.Iu)("prop.today-at"),c=(0,i.Iu)("prop.tmw-at"),u=(0,i.Iu)("unit.b"),p=(0,i.Iu)("unit.kb"),m=(0,i.Iu)("unit.mb"),v=(0,i.Iu)("unit.gb"),g=(0,i.Iu)("prop.true"),h=(0,i.Iu)("prop.false");function b(e,t=!0,a=1){return e>0?t?e.toFixed(a):e:0}function f(e){const t=new Date(1e3*e);var a=localStorage.getItem("lang");return(t.toLocaleDateString(a,{year:"numeric",month:"numeric",day:"numeric"})+" "+t.toLocaleTimeString(a,{hour:"numeric",minute:"numeric"})).substring(0,25)}function y(e){let t="00:00";if(e){let a=new Date,i=new Date(a.getTime()+1e3*e),n=new Date(a);n.setDate(n.getDate()+1);let o="";if(i.getDate()==a.getDate()&&i.getMonth()==a.getMonth())o=`${d} `;else if(i.getDate()==n.getDate()&&i.getMonth()==n.getMonth())o=`${c} `;else{let e={month:"numeric",day:"numeric"};o=`${i.toLocaleString(window.navigator.language,e)} ${s} `}t=o+("0"+i.getHours()).substr(-2)+":"+("0"+i.getMinutes()).substr(-2)}return t}function k(e){if(e<60)return o;const t=Math.floor(e/60%60),a=Math.floor(e/3600);return(a>0?`${a} ${n}`:"")+(t>0?` ${t} ${r}`:"")}function w(e){let t=e;const a=[u,p,m,v];for(let e=0;e{if(void 0===t||null===t&&"progress"!==e)return(0,i.Iu)("prop.na");switch(e){case"number":return b(t);case"temp":return b(t)+" °C";case"temp_int":return b(t,0)+"°C";case"fan":return b(t)+` ${l}`;case"print":case"progressPct":return b(t||0,!0,0)+"%";case"pos":return b(t)+" mm";case"date":return f(t);case"time":return k(t);case"timeEst":return y(t);case"progress":return b(100*(t||0),!0,0)+"%";case"percent":return`${b(t||0,!0,0)}%`;case"material":return t||(0,i.Iu)("prop.na");case"size":return w(t);case"boolean":return x(t);case"diameter":return b(t,!0,2)+" mm";default:return t}},S=(e,t)=>z(e,t)},5412:(e,t,a)=>{"use strict";a.d(t,{L:()=>s});var i=a(5537);class s{set value(e){this._value=e,this.updateLabel()}get value(){return this._value}constructor(e,t,a){const i=this;this._label=t,this._ul=a,this._value=t.innerHTML,this.is_open=!1,this._options=[],this._onKeyDown=e=>{if(i.is_open){switch(e.key.toLowerCase()){case"escape":return void i.close();case"arrowdown":let e=!1;for(const t of this._ul.childNodes){if(e){this._highlight(t);break}t.classList?.contains("select")&&(e=!0)}break;case"arrowup":let t=null;for(const e of this._ul.childNodes){if(e.classList?.contains("select")){t&&this._highlight(t);break}t=e}break;case"enter":for(const e of this._ul.childNodes)if(e.classList.contains("select")){const t=e.innerText;this.value=t,this.onselect&&this.onselect(t),this.close();break}}e.preventDefault()}},this._onClick=t=>{const a=t.target.parentNode;if(!i.is_open)return!0;a!==e&&i.close()},window.addEventListener("keydown",this._onKeyDown,!1),window.addEventListener("click",this._onClick,!1),this.onselect=void 0,e.onclick=e=>{e.preventDefault(),this.is_open?this.close():this.open()}}_highlight(e){this._ul.childNodes.forEach((t=>{t===e?t.classList.add("select"):t.classList.remove("select")}))}destructor(){window.removeEventListener("keypress",this._onKeyPress),window.removeEventListener("click",this._onClick)}static init(e,t){let a=(0,i.Z)(e);const n=document.getElementById("dropdown-template"),o="dropdown"===a.getAttribute("data-type")?a:a.querySelector('select[data-type="dropdown"]');if(!o)return;o.after(document.importNode(n.content,!0));const r=o.nextElementSibling;r.id=t,o.remove();const l=r.querySelector(".dropdown-btn"),d=l.querySelector(".dropdown-label"),c=r.querySelector(".dropdown-content ul");return l&&d&&c?new s(l,d,c):void 0}setOptions(e){this._options=e}updateLabel(){this._label.innerHTML=this._value}select(e){this._label.innerHTML=e}open(){this._ul.classList.contains("open")||(this._options.forEach((e=>{const t=document.createElement("li");e===this._value&&(t.className="select selected"),t.innerText=e,t.onclick=()=>{this.select(e),this.value=e,this.onselect&&this.onselect(e),this.close()},t.onmouseover=()=>this._highlight(t),this._ul.appendChild(t)})),this._ul.classList.add("open")),this.is_open=!0}close(){for(this._ul.classList.remove(["open"]);this._ul.firstChild;)this._ul.removeChild(this._ul.firstChild);this.is_open=!1}}},1351:(e,t,a)=>{"use strict";a.d(t,{S:()=>n});var i=a(3707);let s={};function n(e,t){let a=e?.data?.title||t?.fallbackMessage?.title||"Error",n=e?.data?.message||t?.fallbackMessage?.message||"Action can not be performed",o=!1;if(e?.data){const t=e.data;t.code&&(a+=`- ${t.code}`,"7"==`${t.code}`[3]&&(o=!0)),t.url&&(n+=`
        more info`)}const r=e?.data?.code||`${a}\n${n}`;if(s[r])return;s[r]=!0;const l=()=>s[r]=!1;o?(0,i.Kp)(a,n,l):(0,i.vU)(a,n,l)}},8236:(e,t,a)=>{"use strict";a.d(t,{o:()=>n});var i=a(7780);const s={count:0,current:0},n=(e,t={})=>{const a=Object.assign({timeout:5500,closeOutside:!0},t),n=s.count;s.count=s.count+1;const o=document.querySelector(".modal-box");t.className&&o.classList.add(t.className);const r=o.parentElement;for(;o.firstChild;)o.removeChild(o.firstChild);const l=()=>{n==s.current&&r.classList.contains("show-modal")&&(r.classList.remove("show-modal"),a.closeCallback&&a.closeCallback())},d=e=>{e.target===r&&l()};a.closeOutside&&window.addEventListener("click",d);const c=e(l);s.current=n,o.appendChild(c),(0,i.ot)(o),r.classList.add("show-modal"),a.timeout>0&&setTimeout(l,a.timeout)}},5951:(e,t,a)=>{"use strict";function i(e,t,a="right"){if(!e)return;const i=e.querySelector(".fill");if(i){const e=`${["top","right","bottom","left"].map((e=>(e=>e===a?100-(t||0)+"%":0)(e))).join(" ")}`;i.style.inset=e}}a.d(t,{g:()=>i})},2957:(e,t,a)=>{"use strict";a.d(t,{Z:()=>w});var i=a(7780),s=a(5489),n=a(6648),o=a(646),r=a(1351);var l=a(3707),d=a(8236);let c=null,u=null,p=null;const m=a(5493).Z,v=()=>(0,l.Vp)((0,i.Iu)("ntf.success"),(0,i.Iu)("ntf.settings-suc"));function g(e){const t=document.getElementById("api_key");t&&(t.innerText=e)}function h(e,t){(0,s.ZP)("con-settings",e.link),function(e,t){const a=document.getElementById("conn-prusa-connect-status"),i=document.getElementById("conn-prusa-connect-url"),s=document.getElementById("edit-connect-del"),n="FINISHED"===e.connect.registration,{hostname:r,tls:l,port:d}=e.connect.settings,{ok:c,message:u}=e.connect,m=c&&n,v=document.getElementById("conn-prusa-connect-status-"+(m?"ok":"not-ok")),g=`${l?"https":"http"}://${r}${d?`:${d}`:""}`,h=`(${g})`;(t||p!==g)&&(i.value=g,p=g);(0,o.QH)(i.parentNode.parentNode,n),s&&(0,o.yx)(s,n||!c);b(a,v,m,u,h)}(e.link,t),function(e,t){const a=document.getElementById("conn-printer-status"),{port:i,baudrate:s}=t.printer.settings,{ok:n,message:o}=t.printer,r=document.getElementById("conn-printer-status-"+(n?"ok":"not-ok"));b(a,r,n,o,`(${i||"/dev/ttyACM0"} @ ${s||0}bps)`)}(e.state,e.link)}function b(e,t,a,s,n){e&&e.setAttribute("ok",Boolean(a)),t&&(t.innerHTML=(a?(0,i.Iu)("conn.suc"):s)+"
        "+n)}function f(e){switch(e.toLowerCase()){case"python":return(0,i.Iu)("sys-version.python");case"description":return(0,i.Iu)("sys-version.description");case"id":return(0,i.Iu)("sys-version.id");case"os":return(0,i.Iu)("sys-version.os");default:return e}}const y=(e,t,a)=>{const s=document.getElementById("modal-sysupgrade"),l=document.importNode(s.content,!0),d=l.getElementById("modal-sysupgrade__target"),c=l.getElementById("modal-sysupgrade__current"),p=l.getElementById("modal-sysupgrade__version"),m=l.getElementById("modal-sysupgrade__status"),v=l.getElementById("modal-sysupgrade__spinner"),g=l.getElementById("yes"),h=l.getElementById("no");return d.innerText=t,c.innerText=u,p.innerText=a,g.addEventListener("click",(t=>{t.preventDefault(),(0,o.H)(g,!0),(0,o.H)(h,!0),(0,o.yx)(g,!1),(0,o.yx)(h,!1),(0,o.yx)(v,!0),m.innerText=(0,i.Iu)("msg.sysupgrade.pending"),(0,n.LK)("/api/v1/update/prusalink",{method:"POST"}).then((()=>(m.innerText=(0,i.Iu)("msg.sysupgrade.wait-for-printer"),k(a)))).catch((e=>(0,r.S)(e))).finally((()=>{e(),window.location.href="/"}))})),h.addEventListener("click",(()=>e())),l},k=e=>new Promise(((e,t)=>{const a=()=>(0,n.LK)("/api/version").then((t=>{e()})).catch((e=>setTimeout(a,2500)));setTimeout(a,5e3)})),w={load:e=>{(0,i.Iu)("settings.title",{query:"#title-status-label"}),(0,n.LK)("/api/version?system=1").then((e=>{const t={version:e.data};u=t.version.server,(0,s.ZP)("settings",t),function(e){const t=document.querySelector("#sys-version .table");if(t)for(const[a,i]of Object.entries(e.version.system)){const e=document.createElement("div");e.className="row";const s=document.createElement("div");s.className="col txt-sm",s.innerHTML=`

        ${f(a)}

        `,e.appendChild(s);const n=document.createElement("div");n.className="col txt-md",n.innerHTML=`

        ${i}

        `,e.appendChild(n),t.appendChild(e)}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.getElementById("updates-check"),t=document.getElementById("updates-check__spinner"),a=a=>{a&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(t,a),(0,o.gL)(e,!a)};e&&t&&(e.onclick=()=>{a(!0),(0,n.LK)("/api/v1/update/prusalink").then((t=>{const a=t.data?.new_version,s=[{name:"PrusaLink",new_version:a}],n=e.parentNode.parentNode.parentNode;s.forEach((e=>{const t=document.createElement("div"),a=document.createElement("div"),s=document.createElement("p"),o=document.createElement("div"),r=document.createElement("p"),l=document.createElement("div"),c=document.createElement("span"),p=document.createElement("span"),m=document.createElement("span"),v="PrusaLink";if(t.className="row update-pkg",a.className="col",o.className="col",l.className="col",s.className="txt-bold txt-grey txt-sm",r.className="txt-md",c.className="txt-grey txt-sm",m.className="txt-grey txt-sm",s.innerText=v,p.innerHTML=" → ",e.new_version){c.innerText=u,m.innerText=e.new_version;const t=document.createElement("button"),a=document.createElement("p");a.innerText=(0,i.Iu)("btn.upgrade"),t.className="action",t.appendChild(a),l.appendChild(t),t.onclick=()=>(0,d.o)((t=>y(t,v,e.new_version)),{timeout:0,closeOutside:!1})}else m.innerText="The package is up to date";r.appendChild(c),r.appendChild(p),r.appendChild(m),a.appendChild(s),o.appendChild(r),t.appendChild(a),t.appendChild(o),t.appendChild(l),n.appendChild(t)}))})).catch((e=>(0,r.S)(e))).finally((()=>a(!1)))})}(),function(e){h(e,!0),document.getElementById("edit-connect-del").addEventListener("click",(t=>{(0,n.LK)("/api/connection",{method:"DELETE"}).then(v).catch((e=>(0,r.S)(e))).finally((()=>e.updateConnection()))}));const t=document.getElementById("edit-connect-set"),a=document.getElementById("edit-connect-set__spinner"),i=e=>{e&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(a,e),(0,o.gL)(t,!e)};t.addEventListener("click",(t=>{i(!0);const a=document.getElementById("conn-prusa-connect-url")?.value;if(!a)return;const s=new URL(a);(0,n.LK)("/api/connection",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connect:{hostname:s.hostname,port:s.port?parseInt(s.port):0,tls:s.protocol.startsWith("https")?1:0}})}).then((t=>{const a=t?.data?.url;a&&window.open(a,"_blank"),setTimeout((()=>{e.updateConnection().finally((()=>i(!1)))}),5e3)})).catch((e=>{i(!1),(0,r.S)(e)}))}))}(e),(0,n.LK)("/api/settings").then((e=>{const t=e.data;!function(e){const t=document.querySelector("#settings #printer-name"),a=document.querySelector("#settings #printer-location"),i=document.querySelector("#settings #printer-network_error_chime"),s=document.querySelector("#settings #edit-printer"),l=()=>{(0,o.gL)(s,t.value.length>0&&a.value.length>0)};t.oninput=l,a.oninput=l,i.oninput=l,t.value=e.printer?.name||"",a.value=e.printer?.location||"",i.checked=!!e.printer?.network_error_chime,"api-key"in e&&g(e["api-key"]),s.onclick=()=>{(({name:e,location:t,network_error_chime:a})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({printer:{name:e,location:t},network_error_chime:a})}))({name:t.value,location:a.value,network_error_chime:i.checked}).then((()=>v())).catch((e=>(0,r.S)(e)))},l()}(t),function(e){const t=document.querySelector("#settings #username"),a=document.querySelector("#settings #password"),i=document.querySelector("#settings #new-password"),s=document.querySelector("#settings #re-password"),l=document.querySelector("#settings #edit-user"),d=()=>{(0,o.gL)(l,a.value.length>0&&(t.value.length>0||i.value.length>0&&s.value.length>0))};t.oninput=d,a.oninput=d,i.oninput=d,s.oninput=d,t.value=e.username||"",d(),l.onclick=()=>{((e,{username:t,newPassword:a,rePassword:i})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:{password:e,username:t,new_password:a,new_repassword:i}})}))(a.value,{username:t.value||void 0,newPassword:i.value||void 0,rePassword:s.value||void 0}).then((()=>v())).catch((e=>(0,r.S)(e)))}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.querySelector("#settings #serial"),t=document.querySelector("#settings #edit-serial"),a=()=>{if(e&&t){c&&(e.value=`${c}`);const i=()=>{(0,o.gL)(t,!c&&e.value.length>0),(0,o.yx)(t,!c)};i(),e.oninput=i,(0,o.gL)(e,!c);const s=()=>{var t;(t=e.value,(0,n.LK)("/api/settings/sn",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:t})})).then((e=>{c=e.data.serial,v()})).catch((e=>(0,r.S)(e))).finally((()=>a()))};e.onkeyup=t=>{"Enter"===t.key&&(s(),e.blur())},t.onclick=s}};(0,n.LK)("/api/settings/sn",{headers:{"Content-Type":"application/json"}}).then((e=>{c=e.data.serial})).catch((e=>(0,r.S)(e))).finally((()=>a()))}(),function(){const e=document.getElementById("api_key-reset");e&&e.addEventListener("click",(()=>{(0,n.LK)("/api/settings/apikey",{method:"POST"}).then((e=>{g(e.data["api-key"]),v()})).catch((e=>(0,r.S)(e)))}),!1)}(),m?.load(),e.updateConnection()},update:e=>{m?.update(),h(e,!1)}}},5493:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(6648),n=a(1972),o=a(5412),r=a(1351),l=a(5502);let d=null,c=null;const u=67108864;function p(e){return`
      • ${e}
      • `}const m=()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files;if(d){const e=t.find((e=>e.name===d));e&&(!c||e.date>c)&&(c=e.date,e.size>u?function(){const e=document.querySelector("ul.logs"),t=(0,i.Iu)("logs.file-too-large",{size:(0,l.Z)("size",u)});e&&(e.innerHTML=p(t))}():(a=d,(0,s.iT)(`/api/logs/${a}`).then((e=>{const t=document.querySelector("ul.logs");t&&(e.data?t.innerHTML=e.data.split("\n").map((e=>p(e))).join(""):t.innerHTML=p((0,i.Iu)("logs.empty-file")))}))))}var a})).catch((e=>(0,r.S)(e)))},v={load:()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files,a=o.L.init("settings","log-list"),s=t.map((e=>e.name)),r=(0,i.Iu)("logs.select-file-placeholder");a.setOptions(s),a.select(r),a.onselect=e=>{!function(e){d=e,c=null,document.getElementById("download-log").onclick=()=>{(0,n.Z)(`/api/logs/${e}`,e)},m()}(e)}})).catch((e=>(0,r.S)(e)))},update:m}},3707:(e,t,a)=>{"use strict";a.d(t,{Kp:()=>o,Vp:()=>r,vU:()=>l});const i=document.getElementById("prusa-toast"),s={info:10500,success:10500,warning:10500,error:10500};function n({title:e,message:t,type:a,onClose:n}){const o=((e,t,a)=>{const i=document.getElementById("toast"),s=document.importNode(i.content,!0),n=s.querySelector("article");return n.className=a,s.querySelector("p").innerHTML=e,s.querySelector(".toast-body").innerHTML=t,n})(e,t,a),r=()=>{i.removeChild(o),n?.()};o.querySelector("span").addEventListener("click",(e=>{e.preventDefault(),r()}));const l=s[a];l&&setTimeout(r,l),i.appendChild(o)}function o(e,t,a){n({type:"warning",title:e,message:t,onClose:a})}function r(e,t,a){n({type:"success",title:e,message:t,onClose:a})}function l(e,t,a){n({type:"error",title:e,message:t,onClose:a})}},5489:(e,t,a)=>{"use strict";a.d(t,{NA:()=>n,ZP:()=>r,zR:()=>o});var i=a(646),s=a(5502);const n=(e,t)=>{try{const a=e.split(".");let i=t;for(;a.length;)i=i[a.shift()];return i}catch(e){return}},o=(e,t)=>{document.querySelectorAll(`[data-type="${e}"]`).forEach((e=>{const a=e.dataset.where,o=e.dataset.zeroes,r=a?n(a,t):t;e.innerHTML=(0,s.Z)(e.dataset.format,r),(0,i.QH)(e,"hide"===o&&!r)}))},r=o},2038:(e,t,a)=>{"use strict";a.d(t,{$:()=>r,i:()=>l});var i=a(8236),s=a(646),n=a(4800),o=a(7780);const r=(e,t,a)=>{const i=document.getElementById("modal-question"),n=document.importNode(i.content,!0),r=n.getElementById("modal-question-label"),l=document.createElement("p"),d=document.createElement("p");l.className="txt-sm my-md txt-bold",l.innerText=t,r.innerText=(0,o.Iu)("msg.file-exists.title"),d.innerText=(0,o.Iu)("msg.file-exists.overwrite-it"),r.parentNode.append(l),r.parentNode.append(d);const c=n.getElementById("yes"),u=n.getElementById("no");return u.addEventListener("click",e),c.addEventListener("click",(t=>{t.preventDefault(),(0,s.H)(c,!0),(0,s.H)(u,!0),a(),e()})),n},l=e=>{e.addEventListener("change",(t=>{e.checked&&e.getAttribute("data-link-state")!==n.PT.READY&&(0,i.o)((t=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),n=i.getElementById("yes"),o=i.getElementById("no");return n.addEventListener("click",(a=>{a.preventDefault(),(0,s.H)(n,!0),(0,s.H)(o,!0),t.checked=!0,e()})),o.addEventListener("click",(()=>{t.checked=!1,e()})),i})(t,e)),{timeout:0,closeOutside:!1})}))}},7049:(e,t,a)=>{"use strict";a.d(t,{Z:()=>k});var i=a(6648),s=a(1351),n=a(646),o=a(3707),r=a(7780),l=a(5951),d=a(2038),c=a(5489),u=a(4800),p=a(8495);let m=!1,v=null;function g(e){const t=p.Z.getContext(),a=u.cG.includes(e),i=document.querySelector("#upld-remote-start-pt");if(i&&(i.setAttribute("data-link-state",e),a||(i.checked=!1),(0,n.H)(i,!a)),t.transfer?.id){y("uploading"),(0,c.ZP)("download",t.transfer);const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.transfer.progress||0)}else y("choose")}function h(e){const t=e.data;if(![200,201,204].includes(e.code))return(0,s.S)(e),void f();if(t){if("FROM_WEB"===t.type){y("uploading"),(0,c.ZP)("download",{...t,time_start:t.time_transferring?Math.round((new Date).getTime()/1e3)-t.time_transferring:null});const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.progress||0)}}else{if(m)return function(){const e=(0,r.Iu)("ntf.success"),t=(0,r.Iu)("ntf.upld-suc",{file_name:""});(0,o.Vp)(e,t)}(),void f();y("choose")}}const b=(e,t,a,s)=>{if("local"===t)return e=e.split("?")[0].split("&")[0].split("#")[0],(0,i.LK)(`/api/download/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e,destination:a,...s})}).then((e=>function(e){y("uploading");const t=document.querySelector("#upld-remote .progress-bar");(0,l.g)(t,0);const a=(0,r.Iu)("ntf.success"),i=(0,r.Iu)("ntf.upld-start");(0,o.Vp)(a,i)}())).catch((e=>h(e)));(0,o.vU)("Can't upload to "+t,"You can upload only to local storage via remote upload!")};function f(){y("choose"),function(e){const t=document.querySelector("#upld-remote .progress-bar");t&&(0,l.g)(t,e||0)}(0),(0,c.ZP)("download",{}),v=null}function y(e){m="uploading"==e;const t=document.getElementById("upld-remote");t&&t.setAttribute("data-state",e)}const k={init:function(e,t){const a=document.getElementById("upld-remote");if(a){const i=a.querySelector("#remote-url"),s=a.querySelector("#remote-file-name"),o=a.querySelector("#upld-file"),r=a.querySelector("#upld-remote-start-pt");r&&(0,d.i)(r),o.onclick=()=>b(i.value,e,t,{to_print:r.checked,rename:s.value});const l=()=>{(0,n.H)(o,""===i.value)};l(),i.oninput=l}g()},update:g,get isUploading(){return m}}},7838:(e,t,a)=>{"use strict";a.r(t),a.d(t,{context:()=>Ve,default:()=>Xe});var i=a(7780);const s=500;let n=100,o=new Map;const r=(e,t)=>{o=e,n=t};function l(){const e=document.getElementById("graph");e&&(0==e.childElementCount&&function(){const e=document.getElementById("graph-template"),t=document.importNode(e.content,!0);document.getElementById("graph").appendChild(t),(0,i.ot)("graph")}(),o.forEach(((e,t)=>{!function(e,t){const a=(new Date).getTime();let i=[];if(e.length>1){let t=e[0],o=s-2.66*(a-t[0]-1e4)/1e3;for(let e=1;e1&&e[1][0]{var n=new XMLHttpRequest;const o=()=>{s(void 0)};!function(e,t){if(t){const a=e=>{if(!e.lengthComputable)return;let a=Math.round(e.loaded/e.total*100);t({loaded:e.loaded,total:e.total,percentage:a})};e.upload.addEventListener("progress",a,!1)}}(n,a.onProgress),n.addEventListener("load",(e=>{const t=function(e){function t(e){try{return JSON.parse(e)}catch{return}}return{status:e.status,statusText:e.statusText,ok:e.status>=200&&e.status<=299,data:t(e.response)}}(e.target);t.ok?i(t):s(t)}),!1),n.addEventListener("error",o,!1),n.addEventListener("abort",o,!1),n.open("PUT",`${m.O2}${e}`),a.print&&n.setRequestHeader("Print-After-Upload","?1"),n.setRequestHeader("Overwrite","?1"),n.setRequestHeader("Content-Type","text/x.gcode");for(const[e,t]of Object.entries((0,m.wU)()))n.setRequestHeader(e,t);n.send(t)}))};var g=a(2038),h=a(4800),b=a(8236);let f=!1,y=0;function k(e,t,a,i,s){const n=document.querySelector(e);n&&(n.setAttribute("accept",i.join(", ")),n.onchange=()=>{if(n.files.length>0&&!f){let e=n.files[0];S(e,t,a,s?.checked||!1)}})}function w(){[document.querySelector('#upld-direct input[type="file"]'),document.querySelector('#drop-zone input[type="file"]')].filter((e=>!!e)).forEach((e=>e.value="")),z(0),x("choose")}function x(e){f="uploading"===e;const t=document.getElementById("upld-direct");t&&t.setAttribute("data-state",e)}function z(e){y=e;const t=document.getElementById("upld-progress");t&&(t.innerHTML=`${e} %`)}const S=(e,t,a,s)=>{const n=["/api/v1/files",t,a,e.name].filter((e=>!!e)).join("/"),o=e.display_name||e.name,r=()=>e.arrayBuffer().then((e=>{x("uploading"),z(0),v(n,e,{onProgress:e=>{return t=e.percentage,x("uploading"),void z(t);var t},print:s}).then((()=>function(e){const t=(0,i.Iu)("ntf.success"),a=(0,i.Iu)("ntf.upld-suc",{file_name:e});(0,c.Vp)(t,a)}(o))).catch((e=>function(e,t){if(t)(0,u.S)(t);else{const t=(0,i.Iu)("ntf.error"),a=(0,i.Iu)("ntf.upld-unsuc",{file_name:e});(0,c.vU)(t,a)}}(o,e))).finally((()=>w()))}));(0,m.LK)(n,{method:"HEAD"}).then((()=>{try{(0,b.o)((e=>(0,g.$)((()=>{e(),w()}),o,r)),{timeout:0,closeOutside:!1})}catch(e){console.error("Modal error",e)}})).catch((()=>r()))};const E={init:function(e,t,a){(0,i.Iu)("upld.direct.choose",{query:"#upld-direct p",file:a.join(", ")}),function(e,t,a){const i=document.getElementById("upld-direct-start-pt");i&&(0,g.i)(i);const s=document.getElementById("drop-zone");s&&(document.ondragenter=e=>(0,p.yx)(s,!0),s.ondragleave=e=>(0,p.yx)(s,!1),document.ondrop=e=>(0,p.yx)(s,!1),k('#drop-zone input[type="file"]',e,t,a,i));k('#upld-direct input[type="file"]',e,t,a,i)}(e,t,a),f&&(x("uploading"),z(y))},update:function(e){const t=h.cG.includes(e),a=document.querySelector("#upld-direct-start-pt");a&&(a.setAttribute("data-link-state",e),t||(a.checked=!1),(0,p.H)(a,!t))},get isUploading(){return f},initInputByQuery:k};const P=class{get selected(){return this._selected}get isLocked(){return this._isLocked}lock(){this._isLocked=!0,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.getAttribute("data-tab-btn")!==this.selected&&e.setAttribute("locked",!0)}))}unlock(){this._isLocked=!1,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.hasAttribute("locked")&&e.removeAttribute("locked")}))}constructor(){this._root=null,this._selected=null,this._isLocked=!1}init(e){this._root=e,this._root&&(e.querySelectorAll("[data-tab-btn]").forEach((e=>{e.onclick=()=>{if(!this._isLocked){const t=e.getAttribute("data-tab-btn");t===this._selected||(this.closeTab(),this.openTab(t))}}})),this.openTab(this._selected,!0))}openTab(e){if(this._root&&e){const t=this._root.querySelector(`[data-tab="${e}"]`);t&&t.setAttribute("opened",!0);const a=this._root.querySelector(`[data-tab-btn="${e}"]`);a&&a.setAttribute("selected",!0),this._selected=e}}closeTab(){if(this._root&&this._selected){const e=this._root.querySelector(`[data-tab="${this._selected}"]`);e&&e.setAttribute("opened",!1);const t=this._root.querySelector(`[data-tab-btn="${this._selected}"]`);t&&t.setAttribute("selected",!1),this._selected=null}}},N=a(7049).Z,L=new P;function I(){E.isUploading?(L.openTab("direct"),L.lock()):N?.isUploading?(L.openTab("remote"),L.lock()):(L.unlock(),L.selected||L.openTab("direct"))}const T={init:function(e,t="",a){E.init(e,t,a),N?.init(e,t),L.init(document.getElementById("upld")),I()},update:function(e){E?.update(e),N?.update(e),I()},hide:function(e){(0,p.QH)(document.getElementById("upld"),e)}};var _=a(2451),j=a(5489),C=a(8751);const A=e=>(0,m.LK)(e,{method:"POST",headers:{"Content-Type":"application/json"}}),D=e=>(0,m.LK)(`/api/v1/job/${e}/resume`,{method:"PUT"}).catch((e=>(0,u.S)(e))),B=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const s=document.getElementById("modal-question"),n=document.importNode(s.content,!0);n.getElementById("modal-question-label").innerText=(0,i.Iu)("msg.cancel");const o=n.getElementById("yes"),r=n.getElementById("no");return o.addEventListener("click",(i=>{i.preventDefault(),t.onConfirm(),(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(`/api/v1/job/${a}`,{method:"DELETE",headers:{"Content-Type":"application/json"}}).catch((e=>{t.onError(),(0,u.S)(e)})),e()})),r.addEventListener("click",e),n})(a,t,e)),{timeout:0,closeOutside:!1})},O=(e,t)=>{e?(0,b.o)((e=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),s=i.getElementById("yes"),n=i.getElementById("no");return s.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(s,!0),(0,p.H)(n,!0),A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e))).finally((()=>e()))})),n.addEventListener("click",e),i})(e,t)),{timeout:0,closeOutside:!1}):A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e)))},q=()=>(0,m.LK)("/api/job",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"cancel"})}).catch((e=>(0,u.S)(e)));var M=a(1972);const R=(e,t,a)=>{(0,M.Z)(e,t),a()},H=(e,t,a,s,n=!1)=>{const o=document.getElementById("modal-question"),r=document.importNode(o.content,!0);r.getElementById("modal-question-label").innerText=n?(0,i.Iu)("msg.del-folder",{folder_name:a}):(0,i.Iu)("msg.del-proj",{file_name:a});const l=r.getElementById("yes"),d=r.getElementById("no");return d.addEventListener("click",e),l.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(l,!0),(0,p.H)(d,!0),(0,m.LK)(t,{method:"DELETE",headers:{force:"?1"}}).then((()=>s&&s())).catch((e=>(0,u.S)(e))).finally((t=>e()))})),r},U=(e,t,a)=>{(0,b.o)((i=>H(i,e,t,a)),{timeout:0,closeOutside:!1})},K=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const i=document.getElementById("modal-file-name"),s=document.importNode(i.content,!0),n=s.getElementById("modal-file-name__input"),o=s.getElementById("yes"),r=s.getElementById("no");return r.addEventListener("click",e),o.addEventListener("click",(i=>{i.preventDefault();const s=n.value;if(s){const i=t(s);(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(i,{method:"PUT",headers:{"create-folder":"?1"}}).then((()=>a&&a())).catch((e=>(0,u.S)(e))).finally((t=>e()))}})),s})(a,e,t)),{timeout:0,closeOutside:!1})};function Z(e){return`inset(${100-e}% 0% 0% 0%)`}var V=a(5951);const F={},$=()=>{F.title=null,F.questionChildren=null,F.yes=null,F.no=null,(0,C.g9)(F.next)},G={load:()=>{F.title||(0,C.c4)("#dashboard"),document.getElementById("title-status-label").innerHTML=F.title;const e=document.getElementById("question"),t=F.questionChildren;Array.isArray(t)?t.forEach((t=>e.appendChild(t))):e.innerHTML=t;for(let e of["yes","no"]){const t=document.getElementById(e),a=F[e];t.querySelector("p").innerHTML=F[e+"Text"],t.addEventListener("click",(e=>{e.stopPropagation(),a($)}))}}};(0,i.Iu)("exp-times.exp-time"),(0,i.Iu)("exp-times.inc"),(0,i.Iu)("exp-times.layer-1st"),(0,i.Iu)("exp-times.profile");const W=e=>{const t=e.querySelector("img");(0,p.gL)(e,!1),t&&(t.setAttribute("data-src",t.src),t.src=document.querySelector(".loading-overlay img").src)},Y=e=>{const t=e.querySelector("img");if((0,p.gL)(e,!0),t){const e=t.getAttribute("data-src");e&&(t.src=e,t.setAttribute("data-src",""))}};var J=a(8495);let Q=null,X=null;function ee(e,t=!1){const a=te(e,t);Q&&Q.state!==e.state&&(Q=null),a&&ae(e,t)}function te(e,t){const a=document.getElementById("job");if(!a)return!1;const i=t?!!e.files.selected:!!e.job?.id;return(0,p.yx)(a,i),i}function ae(e,t){const a=t?e.files.selected:e.job,s=a?.file?.resource;e.state;var n;if(a.file?(0,p.Zk)():(0,p.QP)(),function(e,t){const a=document.querySelector(".progress-bar"),i=document.querySelector(".progress-pct"),s=document.querySelector(".preview-img-wrapper"),n=void 0!==t;(function(e,t,a){if(!e)return;const i=t?.url&&t.ready?t.url:document.querySelector(".thumbnail-fallback")?.src;if(e.getAttribute("data-src")!==i){for(;e.firstChild;)e.removeChild(e.firstChild);e.setAttribute("data-src",i);const t=document.createElement("div");t.className="progress-img";const s=document.createElement("img");s.src=i,s.className="background",t.appendChild(s);const n=document.createElement("img");n.src=i,n.className="foreground",n.style.clipPath=Z(a??100),t.appendChild(n),e.appendChild(t)}else{const t=e.querySelector(".foreground");t&&(t.style.clipPath=Z(a))}})(s,e,t),(0,V.g)(a,t,"top"),(0,p.yx)(a,n),(0,p.yx)(i,n)}(a.thumbnail,a.progress),n=t,(0,p.QH)(document.querySelector("#job #pnt-time"),n),(0,p.QH)(document.querySelector("#job #rem-time"),n),(0,j.ZP)("job",a),s&&a.file){const s=t?null:a.id;!function(e,t,a){const i=t.file;(function(e,t){const a=document.querySelector("#job #stop"),i=document.querySelector("#job-close"),s=h.PT.fromApi(e),n=h.cG.includes(s),o=!Q&&h.Dt.includes(e),r=J.Z.getContext();if((0,p.gL)(a,o),a&&t){const i=t||!1;(0,p.yx)(a,i),a.onclick=()=>{B(t,{onConfirm:()=>{Q={code:"stop",state:e},(0,p.gL)(a,!1)},onError:()=>Q=null})}}i&&((0,p.yx)(i,n||!t),i.onclick=t?q:()=>r.selectFile(null))})(e,a),function(e,t,a){const i=document.querySelector("#job #start"),s=h.cG.includes(e);i&&((0,p.yx)(i,s),(0,p.gL)(i,s),i.onclick=()=>O(e!==h.PT.READY,t.resource))}(e,i),ie(e,i,a),function(e,t,a){const i=document.querySelector("#job #download");if(i){const e=!a&&t.refs?.download&&(!X||X===t.refs.download),s=t.display_name||t.name;(0,p.yx)(i,e),e&&(i.onclick=()=>{X=t.refs.download,W(i),R(t.refs.download,s,(()=>{X=null,Y(i)}))})}}(0,i,a),!a||(function(e,t,a){const i=document.querySelector(a),s=e===h.PT.PRINTING;(0,p.yx)(i,s),(0,p.gL)(i,!Q&&s),i&&(i.onclick=()=>{(0,p.gL)(i,!1),Q={code:"pause",state:e},(e=>(0,m.LK)(`/api/v1/job/${e}/pause`,{method:"PUT"}).catch((e=>(0,u.S)(e))))(t).catch((()=>Q=null))})}(e,a,"#job #pause"),function(e,t){const a=document.querySelector("#job #resume"),i=e===h.PT.PAUSED;(0,p.yx)(a,i),(0,p.gL)(a,!Q&&i),a&&(a.onclick=()=>{(0,p.gL)(a,!1),Q={code:"resume",state:e},D(t).catch((()=>Q=null))})}(e,a))}(e.state,a,s),(0,j.ZP)("file",a.file),function(e,t){const a=(0,i.Iu)("prop.na");document.getElementById("job").querySelectorAll(".job-details .job-prop").forEach((e=>{const t=e.querySelector(".job-prop-grid").children;let i=!0;for(const e of t){var s=e.querySelector("[data-type]")?.innerHTML.trim()===a;(0,p.QH)(e,s),s||(i=!1)}(0,p.QH)(e,i)}))}()}}function ie(e,t,a){const i=document.querySelector("#job #delete");if(i){const s=t.display_name||t.name;(0,p.gL)(i,!t.readOnly&&t.resource),(0,p.yx)(i,!a||e===h.cG.includes(e)),i.onclick=()=>{U(t.resource,s,(()=>{a||Ve.selectFile(null)}))}}}p.QP,p.Zk;const se=e=>[...e].filter((e=>!!e)).map((e=>e.trim())).join(" - "),ne=e=>{if(!e.printer)return;const t=e.state;ee(e),T.update(t),_.Z.update(e,null)},oe={load:e=>{(0,i.Iu)("home.link",{query:"#title-status-label"}),l(),ne(e),_.Z.update(e,null),_.Z.updateCurrentCamera(),(0,m.LK)("/api/v1/storage").then((t=>{const a=t.data.storage_list.find((e=>e.available&&!e.read_only));if(a){const t=a.path.replace("/","");T.init(t,"",e.fileExtensions)}}))},update:ne};var re=a(5502);const le=function(e,t="smooth"){if(!e)return;const a=e.getBoundingClientRect(),i=document.body.getBoundingClientRect(),s=a.top-(i.top+function(){const e=document.querySelector(".header");return e&&"sticky"===getComputedStyle(e).position?e.getBoundingClientRect().height:0}());(a.bottom>window.innerHeight||a.top<0)&&window.scroll({top:s,behavior:t})};var de=a(5537);const ce=e=>{const t=(0,de.Z)(e).querySelector(".kebab"),a=t.querySelector(".kebab-menu"),i=t.querySelector("ul");a.addEventListener("click",(e=>{e.stopPropagation(),function(e){return e&&e.classList.contains("open")}(i)?ue(i):function(e,t){e.classList.add("open"),(0,p.Ti)((()=>ue(e)),e,t)}(i,a)})),i.querySelectorAll("li").forEach((e=>{e.addEventListener("click",(()=>ue(i)))}))};function ue(e){e.classList.remove("open")}const pe=e=>{const t=document.querySelectorAll(".storage-select-content li");t&&t.forEach((t=>t.setAttribute("selected",t.getAttribute("data-storage")===e)))},me=e=>{const t=document.querySelector("#node-storage .storage-select-btn-inner");t&&(t.innerHTML=e)},ve=(e,t)=>{e&&t&&(t.classList.toggle("open"),(0,p.Ti)((()=>{t?.classList.remove("open")}),e,t))},ge=e=>{const t=document.querySelector(".node-storage-space");if(!t)return;const a=e.available&&!!e.totalSpace;if((0,p.yx)(t,a),a){const a=e.freeSpace,s=e.totalSpace,n=s-a,o=Math.round(100*(s?n/s:0)),r=(0,i.Iu)("prop.storage-used-space",{used:(0,re.Z)("size",n),free:(0,re.Z)("size",a),total:(0,re.Z)("size",s)});(0,V.g)(t,o),document.getElementById("storage-pct").innerHTML=(0,re.Z)("percent",o),document.getElementById("storage-space").innerHTML=r}},he=()=>{const e=document.querySelector("#node-storage .storage-select-btn");e&&(e.onclick=t=>{t.stopPropagation(),ve(e,dropdownContent)})},be=(e,t,a,i=!1)=>{const s=document.querySelector(".storage-select-content");document.querySelectorAll(".storage-select-content li").forEach((i=>{const n=i.getAttribute("data-storage");let o=!1;if(n in e){const r=e[n],l=i.querySelector("p");o=!0,r.name&&(l.innerText=r.name),i.setAttribute("selected",n===t),i.onclick=e=>{e.stopPropagation(),me(i.innerHTML),pe(n),s.classList.remove("open"),ge(r),a(n)}}(0,p.yx)(i,o)})),i&&ge(e[t])},fe="FOLDER",ye="PRINT_FILE",ke="FIRMWARE",we=["name","date","size"];let xe=null;const ze={origin:null,current_path:[],storages:{},files:[],eTag:null,sort:{field:"date",order:"desc"}};function Se(){const e=ze.origin;return ze.storages[e]}function Ee(){return ze.current_path.map((e=>e.path)).join("/")}function Pe(e){const t=Se(),a=Ee();return Ne(t.path,a,e)}function Ne(e,t,a){const i=["/api/v1/files",e,t,a].filter((e=>!!e)).join("/");return a?i:`${i}/`}const Le=(e={})=>{(0,m.LK)("/api/v1/storage",{}).then((t=>{const a=t.data?.storage_list;let i=!!e.redraw,s=!!e.redraw;if(a&&a.forEach((e=>{const t=e.type,a={name:e.name,path:e.path.replaceAll("/",""),available:e.available,readOnly:e.read_only,freeSpace:e.free_space,totalSpace:e.total_space};if(t in ze.storages){const e=ze.storages[t];e.available!==a.available&&(i=!0),e.freeSpace!==a.freeSpace&&ze.origin===t&&(s=!0)}else i=!0,s=!0;ze.storages[t]=a})),!ze.origin){let e=Object.keys(ze.storages).find((e=>ze.storages[e].available));e||(e=Object.keys(ze.storages).find((()=>!0))),e&&Oe(e)}i&&be(ze.storages,ze.origin,Oe,s)}))},Ie=(e={})=>{if(!Se())return;const t=Pe();let a=ze.eTag;e.force&&(ze.eTag=null,a=null,function(e){const t=Se(),a=Ee();T.init(t.path,a,e?.fileExtensions),T.hide(!1!==t?.readOnly)}(J.Z.getContext()));const i=e=>{ze.files=e,Te(),_e()};(0,m.LK)(t,{headers:{"If-None-Match":a}}).then((s=>{if(t!==Pe())return;const n=s.eTag;if(!n||n!==a){ze.eTag=n;const t=s.data.children||[];if(!n&&!e.force){const e=(e,t)=>e.display_name.localeCompare(t.display_name);if(JSON.stringify([...ze.files].sort(e))===JSON.stringify(t.sort(e)))return}i(t)}})).catch((()=>{ze.eTag=null,i([]),J.Z.getContext().selectFile(null)}))},Te=()=>{const e=document.getElementById("files");if(e){for(;e?.firstChild;)e.removeChild(e.firstChild);e.appendChild(function(){const e=Se(),t=[e.name,...ze.current_path.map((e=>e.name))],a=je("node-current",t.pop()||"Root");a.getElementById("path").innerHTML=`${t.join("/")}/`;const s=a.getElementById("create");s&&(s.onclick=e=>{e.stopPropagation(),K(Pe)});(0,p.H)(s,!1!==e.readOnly),a.querySelector("#sort-by-name p").innerText=(0,i.Iu)("sort.by-name"),a.querySelector("#sort-by-date p").innerText=(0,i.Iu)("sort.by-date"),a.querySelector("#sort-by-size p").innerText=(0,i.Iu)("sort.by-size");return a.querySelector(`#sort-by-${ze.sort.field}`).classList.add(ze.sort.order),we.forEach((e=>{a.getElementById(`sort-by-${e}`).addEventListener("click",(t=>{const a=document.getElementById(`sort-by-${e}`);document.getElementById(`sort-by-${ze.sort.field}`).classList.remove(ze.sort.order);const i=ze.sort.field===e&&"asc"===ze.sort.order?"desc":"asc";a.classList.add(i),ze.sort.field=e,ze.sort.order=i,Te(),_e()}),!1)})),a}()),ze.current_path.length&&e.appendChild(function(){const e=je("node-up","",(()=>{ze.current_path.pop(),Te(),Ie({force:!0})}));return(0,i.ot)(e),e}())}},_e=()=>{const e=document.getElementById("files");let t;if(e)for(let a of(e=>(e.sort(((e,t)=>{if(e.type===fe&&t.type!==fe)return-1;if(e.type!==fe&&t.type===fe)return 1;const a="desc"===ze.sort.order?-1:1;switch(ze.sort.field){case"date":return a*((e.m_timestamp||0)-(t.m_timestamp||0));case"size":return a*((e.size||0)-(t.size||0));default:return a*e.display_name.localeCompare(t.display_name)}})),e))(ze.files)){switch(a.type.toUpperCase()){case fe:t=Ce(a,{files:void 0,folders:void 0});break;case ye:t=De(a);break;case ke:t=Be(a,"firmware");break;default:t=Be(a,"file")}e.appendChild(t)}};function je(e,t,a){const i=document.getElementById(e).content,s=document.importNode(i,!0);return a&&s.querySelector(".node").addEventListener("click",(e=>{a(e),e.preventDefault()})),s.querySelector("#name")?.appendChild(document.createTextNode(t)),s}function Ce(e,t){const a=e.display_name||e.name,i=e.name,s=Pe(i),n=je("node-folder",a,(()=>{ze.current_path.push({path:i.replace("/",""),name:a}),Te(),Ie({force:!0})})),o=[t?.files?`${t.files} files`:null,t?.folders?`${t.folders} folders`:null].filter((e=>null!=e)).join(" | ");n.getElementById("details").innerHTML=o;const r=n.getElementById("delete");(0,p.gL)(r,!(e.read_only||e.ro)),r&&(r.onclick=e=>{var t,i,n;e.stopPropagation(),t=s,i=a,n=()=>{},(0,b.o)((e=>H(e,t,i,n,!0)),{timeout:0,closeOutside:!1})});const l=n.getElementById("rename");return l&&(l.onclick=e=>{e.stopPropagation(),console.log("renameFolder")}),n}const Ae=e=>{!function(e){const t=J.Z.getContext(),a=t.files.selected,i=Ee(),s=Pe(e.name);if(a===i)return;t.selectFile({...e,path:i,resource:s});const n=document.getElementById("job");n&&le(n)}(e)};function De(e){const t=je("node-file",e.display_name||e.name,(t=>Ae(e))),a=t.querySelector(".node-details");a.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const s=(0,j.NA)(t.dataset.where,e);if(s){const e=(0,re.Z)(t.dataset.format,s);t.querySelector("p[data-value]").innerHTML=e}else a.removeChild(t)}));const s=e?.refs?.thumbnail;if(s){const a=t.querySelector("img.node-img");a.setAttribute("data-src",e.date?`${s}?ct=${e.date}`:s),xe.observe(a)}return ce(t),function(e,t){const a=Pe(e.name),i=e.display_name||e.name,s=t.getElementById("details");s&&(s.onclick=t=>{Ae(e)});const n=t.getElementById("start");n&&(n.onclick=e=>{e.stopPropagation(),console.log("startPrint")});const o=t.getElementById("rename");o&&(o.onclick=e=>{e.stopPropagation(),console.log("renameFile")});const r=t.getElementById("delete");r&&((0,p.gL)(r,!(e.read_only||e.ro)),r.onclick=e=>{U(a,i),e.stopPropagation()});const l=t.getElementById("download");l&&((0,p.gL)(l,e.refs?.download),l.onclick=t=>{W(l),R(e.refs?.download,i,(()=>Y(l))),t.stopPropagation()})}(e,t),(0,i.ot)(t),t}function Be(e,t){const a=je("node-file",e.display_name||e.name,(e=>{})),s=a.querySelector(".node-details");s.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const a=(0,j.NA)(t.dataset.where,e);if(a){const e=(0,re.Z)(t.dataset.format,a);t.querySelector("p[data-value]").innerHTML=e}else s.removeChild(t)}));const n=a.querySelector("img.node-img");if(t){const e=n.getAttribute(`data-${t}`);e&&(n.src=e),xe.observe(n)}else(0,p.yx)(n,!1);return function(e){["details","start","rename","delete","download"].forEach((t=>{const a=e.getElementById(t);a&&(0,p.yx)(a,!1)}))}(a),a}function Oe(e){if(e in ze.storages){const t=ze.storages[e];ze.origin=e,ze.current_path=[],Te(),t.available&&Ie({force:!0}),T.hide(!1!==t.readOnly)}}const qe={load:function(e){if(ze.eTag=null,(0,i.Iu)("proj.link",{query:"#title-status-label"}),!xe){xe=new IntersectionObserver(((e,t)=>{e.forEach((e=>{if(e.isIntersecting){const t=e.target.getAttribute("data-src");(0,m.gJ)(t).then((({url:t})=>{e.target.src=t})).catch((()=>{}))}}))}),{rootMargin:"0px 0px 50px 0px",threshold:0})}e||(e=J.Z.getContext());const t=e.files.selected;if(t){(function(e,t){if(!e||!t)return null;let a=ze.files.find((t=>t.origin===e));const i=t.split("/").filter((e=>e)).slice(1);for(const e of i){if(!a)break;a=a.children.find((t=>t.name===e))}return"machinecode"===a?.type?a:null})(t.origin,t.path)||e.selectFile(null)}ee(e,!0),he(),Le({redraw:!0}),Ie({force:!0})},update:e=>{const t=e.state;Le(),Ie(),ee(e,!0),T.update(t)},getApiPath:Ne},Me=e=>{e.getAttribute("tooltip")||(e.addEventListener("click",(t=>{e.classList.toggle("tooltip-handle--active");const a=e.querySelector("span");(0,p.Ti)((()=>e.classList.remove("tooltip-handle--active")),a,e),t.preventDefault()}),!1),e.setAttribute("tooltip",!0))};let Re=0,He=null;const Ue=()=>{const e=e=>{const t=document.getElementById("offline-screen"),a=document.importNode(t.content,!0);return["not-responsing","please-wait"].forEach((e=>{const t=a.getElementById(`offline-screen.${e}`);t&&(t.innerHTML=(e=>{switch(e){case"not-responsing":return(0,i.Iu)("msg.offline.not-responsing");case"please-wait":return(0,i.Iu)("msg.offline.please-wait");default:return""}})(e))})),He={node:a,close:()=>{e(),He=null}},a};(0,b.o)((t=>e(t)),{timeout:0,closeOutside:!1,className:"offline-screen"})},Ke=({link:e,isConnected:t})=>{const a=["connect"];for(const t in e){const{ok:s,message:n}=e[t],o=document.getElementById(`conn-status-${t}-msg`),r="ok"===n.toLowerCase();o&&(o.innerHTML="connect"===t?r?(0,i.Iu)("conn.connect.linked"):(0,i.Iu)("conn.connect.not-linked"):(0,i.Iu)("conn.error_status"));const l=document.getElementById(`conn-status-${t}`),d=l.querySelector(".icon-success"),c=l.querySelector(".icon-warning"),u=l.querySelector(".info-message-tooltip"),m=u.querySelector("span"),v=void 0===s||s&&!a.includes(t);u&&m&&(r||(m.innerText=n,Me(u)),(0,p.QH)(u,r)),(0,p.QH)(l,v),v||((0,p.QH)(d,!s),(0,p.QH)(c,s))}const s=e=>{Re<3?Re+=1:(e?Ue():He.close(),Re=0)};t?He&&s(!1):!He&&s(!0)};const Ze=e=>{return{resource:e.resource??(t=e.path,a=e.name,`${t}${t.endsWith("/")?"":"/"}${a}`),name:e.name,displayName:e.display_name??e.name,path:e.path,displayPath:e.display_path??e.path,size:e.size,refs:{download:e.refs?.download,icon:e.refs?.icon,thumbnail:e.refs?.thumbnail},lastModified:e.m_timestamp||0,meta:{filamentType:e.meta?.filament_type,layerHeight:e.meta?.layer_height,estimatedPrintTime:e.meta?.estimated_print_time},readOnly:e.read_only||e.ro};var t,a},Ve=new class{constructor(){this.state=void 0,this.printer=void 0,this.job=void 0,this.transfer=void 0,this.version=void 0,this.storage=[],this.currentStorage=void 0,this.telemetry={temperature:{nozzle:{current:0,target:0},bed:{current:0,target:0}}},this.flow=0,this.speed=0,this.fan={hotend:0,print:0},this.link={connect:{ok:!0,message:"OK",settings:{hostname:"connect.prusa3d.com",tls:!0,port:0}},printer:{ok:!0,message:"OK",settings:{port:"",baudrate:115200}}},this.files={location:"/",selected:{file:void 0,thumbnail:void 0}},this.fileExtensions=[".gcode"],this.updateConnection()}updateConnection(){return(0,m.LK)("/api/connection",{method:"GET"}).then((e=>{this.link.connect.settings={hostname:e.data.connect.hostname,port:e.data.connect.port,tls:e.data.connect.tls},this.link.connect.registration=e.data.connect.registration,this.link.printer.settings={port:e.data.current.port,baudrate:e.data.current.baudrate}}))}update({status:e,printer:t}){e?.ok&&e.payload&&this.updateStatus(e.payload.data),t&&this.updatePrinter(t)}updateStatus(e){this.updateTelemetry(e.printer),this.updateJob(e.job),this.updateStorage(e.storage),this.updateTransfer(e.transfer),this.updateCamera(e.camera)}updatePrinter(e){this.printer={name:e.name,location:e.location,farmMode:e.farm_mode,nozzleDiameter:e.nozzle_diameter,minExtrusionTemp:e.min_extrusion_temp,serial:e.serial,hostname:e.hostname,port:e.port}}updateTelemetry(e){this.state=h.PT.fromApi(e.state.toUpperCase()),this.telemetry={temperature:{nozzle:{current:e.temp_nozzle,target:e.target_nozzle},bed:{current:e.temp_bed,target:e.target_bed}},axis:{x:e.axis_x,y:e.axis_y,z:e.axis_z},flow:e.flow,speed:e.speed,fan:{hotend:e.fan_hotend,print:e.fan_print}},this.link.connect.message=e.status_connect?.message??"",this.link.connect.ok=e.status_connect?.ok,this.link.printer.message=e.status_printer?.message??"ok",this.link.printer.ok=e.status_printer?.ok??!0}updateJob(e){const t=this.job?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.job=void 0);(0,m.LK)("/api/v1/job").then((e=>{const t=e.data;t.id===this.job.id&&(this.job={...this.job,file:Ze(t.file),thumbnail:{source:!t.file.refs?.thumbnail,ready:!t.file.refs?.thumbnail,url:void 0}},this.job.thumbnail.ready||(0,m.gJ)(this.job.file.refs.thumbnail).then((({url:e})=>{this.job.id===a&&(this.job.thumbnail.url=e)})).catch((e=>console.error("Failed to fetch thumbnail",e))).finally((()=>this.job.thumbnail.ready=!0)))})).catch((e=>(0,u.S)(e)))}if(a){const t=this.job?.timeRemaining,s=e.time_remaining,n=t!=s?(i=s,Math.round(Date.now()/1e3)+i):this.job?.estimatedEnd;this.job={file:void 0,...this.job,timePrinting:e.time_printing,id:a,progress:e.progress,timeRemaining:e.time_remaining,estimatedEnd:n}}var i}updateStorage(e){Object.keys(e).forEach((e=>{const t={path:e.path,name:e.name,readOnly:e.readOnly,freeSpace:e.freeSpace},a=this.storage.findIndex((e=>e.path===t.path));-1!==a?this.storage[a]=t:this.storage.push(t)}))}updateTransfer(e){const t=this.transfer?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.transfer=void 0);(0,m.LK)("/api/v1/transfer").then((e=>{const t=e.data;this.transfer={...this.transfer,file:{displayName:t.display_name??t.name,path:t.path,size:t.size,toPrint:t.to_print}}})).catch((e=>(0,u.S)(e)))}if(a){const t=Math.round(Date.now()/1e3),i=this.transfer?.file?.size||0,s=e.time_transferring,n=void 0!==s?t-s:void 0,o=e.data_transferred,r=i-o,l=s>0&&r>=0?r/(o/s):void 0;this.transfer={...this.transfer,timeTransferring:s,timeStarted:n,timeRemaining:l,id:a,progress:e.progress,dataTransferred:o}}}updateCamera(e){this.camera={id:e?.id}}selectFile(e){if(!e)return void(this.files.selected=null);const t=e.refs?.thumbnail;if(this.files.selected={file:Ze(e),thumbnail:{source:t,ready:!t,url:void 0},timeRemaining:e.meta?.estimated_print_time},!e.meta){const e=this.files.selected.file.resource;(0,m.LK)(e).then((t=>{const a=Ze({...t.data,resource:e});this.files.selected.file.resource===e&&(this.files.selected.file.meta=a.meta,this.files.selected.timeRemaining=a.meta?.estimatedPrintTime)}))}t&&(0,m.gJ)(t).then((({url:e})=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.url=e)})).catch((()=>{})).finally((()=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.ready=!0)}))}},Fe=e=>{const t=e.load;return e.load=()=>{(()=>{const e=document.getElementById("title-printer");e&&(e.innerHTML=$e())})(),t(Ve)},e},$e=()=>(e=>se([e.printer?.location,e.printer?.name]))(Ve);let Ge=oe;const We={routes:[{path:"dashboard",html:a(2373),module:Fe(oe),getTitle:()=>(0,i.Iu)("home.link")},{path:"question",html:a(5198),module:Fe(G)},{path:"files",html:a(7189),module:Fe(qe),getTitle:()=>(0,i.Iu)("proj.storage")},{path:"settings",html:a(2936),module:Fe(a(2957).Z),getTitle:()=>(0,i.Iu)("settings.title")},{path:"control",html:a(3478),module:Fe(a(732).Z),getTitle:()=>(0,i.Iu)("control.link")},{path:"cameras",html:a(5464),module:Fe(a(2451).Z),getTitle:()=>(0,i.Iu)("cameras.link")}].filter((e=>null!=e)),init:e=>{Ve.update(e),Ye()},update:e=>{Ve.update(e);const t=(0,C.nC)(),a=(e=>{const t=e.state;let a=(0,h.ny)(t);switch(t){case"IDLE":return"";case"PRINTING":return`${a} ${Math.round(e?.job?.progress||0)}%`;default:return a}})(Ve);var i;document.title=(i=[a,We.routes.find((e=>e.path===t)).getTitle()],se([...i,$e(),"PrusaLink"])),(0,j.zR)("telemetry",Ve),(e=>{const t=e,a=document.getElementById("printer-status");a&&(a.innerHTML=(0,h.ny)(t))})(Ve.state),Je(Ve.telemetry),Qe()},setConnected:e=>{Ke({link:Ve.link,isConnected:e})},setModule:e=>{Ge=e},getContext:()=>Ve},Ye=()=>{let e=new Map([["temp-line-blue",[]],["temp-line-orange",[]]]);r(e,300),l()},Je=e=>{const t=(new Date).getTime();d("temp-line-blue",[t,e.temperature.bed.current]),d("temp-line-orange",[t,e.temperature.nozzle.current]),l()},Qe=()=>{Ge&&Ge.update&&Ge.update(Ve)},Xe=We},8495:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=a(7838).default},8751:(e,t,a)=>{"use strict";a.d(t,{c4:()=>l,g9:()=>d,nC:()=>o});var i=a(7780),s=a(8495);const n=e=>{const[t,a]=e.split("#");return a||"dashboard"},o=()=>n(window.location.hash);function r(e,t){const a=n(e),o=s.Z.routes.find((e=>e.path===a));if(!o)return!1;t&&function(e){window.location.hash!=e&&history.pushState(null,"",e)}("#"+a);const r=document.getElementById("root");var l;return function(e,t){t.innerHTML="",(new DOMParser).parseFromString(e,"text/html").body.childNodes.forEach((e=>t.appendChild(e)))}(o.html,r),(0,i.ot)(r),function(e){const t=document.querySelector(`a[href="#${e}"]`);t&&(document.getElementById("navbar").childNodes.forEach((e=>{"li"===e.nodeName.toLowerCase()&&e.classList.remove(["active"])})),t.parentNode.className="active")}(a),(l=o.getTitle)&&(document.title=l()),window.scrollTo({top:0}),o.module.load(),s.Z.setModule(o.module),!0}const l=e=>r(e,!0),d=e=>r(e,!1)},4800:(e,t,a)=>{"use strict";a.d(t,{Dt:()=>o,PT:()=>s,cG:()=>n,ny:()=>r});var i=a(7780);const s={UNKNOWN:"UNKNOWN",IDLE:"IDLE",READY:"READY",BUSY:"BUSY",PRINTING:"PRINTING",PAUSED:"PAUSED",FINISHED:"FINISHED",STOPPED:"STOPPED",ERROR:"ERROR",ATTENTION:"ATTENTION",fromApi:e=>{switch(e){case"IDLE":return s.IDLE;case"READY":return s.READY;case"BUSY":return s.BUSY;case"PRINTING":return s.PRINTING;case"PAUSED":return s.PAUSED;case"FINISHED":return s.FINISHED;case"STOPPED":return s.STOPPED;case"ERROR":return s.ERROR;case"ATTENTION":return s.ATTENTION;default:return console.error(`Unsupported state: ${e}`),s.UNKNOWN}}},n=[s.IDLE,s.READY,s.FINISHED],o=[s.PRINTING,s.PAUSED],r=e=>{switch(e){case s.IDLE:return(0,i.Iu)("prop.st-idle");case s.READY:return(0,i.Iu)("prop.st-ready");case s.BUSY:return(0,i.Iu)("prop.st-busy");case s.PRINTING:return(0,i.Iu)("prop.st-printing");case s.PAUSED:return(0,i.Iu)("prop.st-paused");case s.FINISHED:return(0,i.Iu)("prop.st-finished");case s.STOPPED:return(0,i.Iu)("prop.st-stopped");case s.ERROR:return(0,i.Iu)("prop.st-error");case s.ATTENTION:return(0,i.Iu)("prop.st-attention");default:return console.error(`Unsupported state: ${e}`),(0,i.Iu)("prop.st-unknown")}}},4977:e=>{"use strict";e.exports=JSON.parse('{"langs":["cs","de","en","es","fr","it","kr","lt","nl","pl","sk"],"texts":{"home":{"link":["Přehled","Dashboard","Dashboard","Panel principal","Tableau de bord","Dashboard","대쉬보드","Darbastalis","Dashboard","Panel kontrolny","Prehľad"],"title":["Stav tiskárny","Druckerstatus","Printer Status","Estado de la impresora","État de l\'imprimante","Stato della stampante","프린터 상태","Spausdintojo būsena","Printerstatus","Stan drukarki","Stav tlačiarne"]},"proj":{"link":["Úložiště","Projekte","Storage","Proyectos","Projets","Progetti","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"storage":["Úložiště","Speicher","Storage","Almacenamiento","Stockage","Archivio","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"add-from":{"title":["Nahrát soubor z","Datei hinzufügen von","Add file from","Añadir archivo desde","Ajouter un fichier à partir de","Aggiungi file da","에서 파일 추가하기","Pridėti failą iš","Bestanden toevoegen van","Dodaj plik z","Nahrať súbor z"],"local":["Lokálního úložiště","Lokaler Speicher","Local storage","Almacenamiento local","Stockage local","Archivio locale","로컬 저장장치","Vietinis saugykla","Lokale opslag","Magazyn lokalny","Lokálneho úložiska"],"remote":["Vzdálené url","Remote-URL","Remote url","Eliminar url","URL distante","Url remoto","원격 URL","Nuotolinis URL","Externe URL","Zdalny URL","Vzdialenej URL"]},"details":["Detaily souboru","Datei-Details","File details","Detalles del archivo","Détails du fichier","Dettagli file","파일 상세정보","Failo informacija","Bestandseigenschappen","Szczegóły pliku","Detaily súboru"],"del":["Smazat","Datei löschen","Delete","Borrar archivo","Supprimer le Fichier","Elimina File","삭제","Ištrinti","Verwijderen","Usuń plik","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","Télécharger","Download","다운로드","Atsisiųsti","Downloaden","Pobierz","Stiahnuť"],"up-folder":["nadřazená složka","übergeordneter Ordner","parent folder","carpeta contenedora","dossier parent","cartella superiore","상위폴더","tėvinis aplankas","Bovenliggende map","folder nadrzędny","nadradený priečinok"]},"control":{"link":["Ovládání","Kontrolle","Control","Control","Contrôle","Controllo","제어","Valdymas","Bediening","Sterowanie","Ovládanie"],"coordinates":["Souřadnice tiskárny","Drucker-Koordinaten","Printer Coordinates","Coordenadas de la Impresora","Coordonnées de l\'imprimante","Coordinate Stampante","프린터 좌표","Spausdintojo koordinatės","Printercoördinaten","Współrzędne drukarki","Súradnice tlačiarne"],"axis":{"x":["Osa X","X-Achse","X axis","Eje X","axe X","Asse X","X축","X ašis","X-as","Oś X","Os X"],"y":["Osa Y","Y-Achse","Y axis","Eje Y","axe Y","Asse Y","Y축","Y ašis","Y-as","Oś Y","Os Y"],"z":["Osa Z","Z-Achse","Z axis","Eje Z","axe Z","Asse Z","Z축","Z ašis","Z-as","Oś Z","Os Z"]},"stepper-motors":["Krokové motory","Schrittmotoren","Stepper Motors","Motores Paso-a-paso","moteurs","Motori Passo-Passo","스텝 모터","Sustojimo varikliai","Stappenmotors","Silniki krokowe","Krokové motory"],"heated-bed-move":["Pohyb podložky v ose X a Y","Heizbett X und Y bewegen","Heated Bed X and Y Move","Base Calefactable Mover X e Y","Mouvement en x/y","Spostamento X e Y Piano Riscaldato","히트베드 X 및 Y 이동","Šildomojo patalo X ir Y poslinkis","Beweeg verwarmd bed in X en Y","Ruch stołu grzewczego X i Y","Pohyb podložky v osi X a Y"],"move-step":["Krok pohybu [mm]","Schrittweite [mm]","Move Step [mm]","Mover Paso [mm]","déplacement [mm]","Sposta Passo [mm]","[mm]mm 스텝 이동","Poslinkis [mm]","Beweegafstand [mm]","Krok ruchu [mm]","Krok pohybu [mm]"],"nozzle-z-move":["Pohyb extrudéru v ose Z","Düse Z Bewegung","Nozzle Z Move","Boquilla Mover Z","déplacement en z","Spostamento Z Ugello","노즐 Z 이동","Antgalio Z poslinkis","Beweeg omhoog/omlaag","Ruch dyszy w osi Z","Pohyb extruderu v osi Z"],"extruder":["Extrudér","Extruder","Extruder","Extrusor","extrudeur","Estrusore","익스트루더","Ištraukiklis","Extruder","Ekstruder","Extruder"],"extrude-retract-step":["Krok vytlačení/vtažení [mm]","Extrudieren/Zurückziehen Schritt [mm]","Extrude/Retract Step [mm]","Distancia Extruir/Retraer [mm]","longueur d\'extrusion ou de rétractation [mm]","Passo Estrusione/Retrazione [mm]","[mm]mm 스텝 압출/철회","Ištrauka/atgalinimas [mm]","Extrude/retract-afstand [mm]","Krok ekstruzji/retrakcji [mm]","Krok vysunutia/zasunutia [mm]"],"nozzle-temp":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura Boquilla","température de la buse","Temperatura Ugello","노즐 온도","Antgalio temperatūra","Temperatuur nozzle","Temperatura dyszy","Teplota trysky"],"speed":["Rychlost","Geschwindigkeit","Speed","Velocidad","vitesse","Velocità","속도","Greitis","Snelheid","Prędkość","Rýchlosť"],"heated-bed-temp":["Teplota vyhřívané podložky","Temperatur des Heizbettes","Heated Bed Temperature","Temperatura de la Base Calefactable","Température du lit","Temperatura piano riscaldato","히트베드 온도","Šildomojo patalo temperatūra","Temperatuur verwarmd bed","Temperatura stołu","Teplota vyhrievanej podložky"],"flow":["Průtok","Flow","Flow","Flujo","flux","Flusso","흐름","Srautas","Extrusiefactor","Przepływ","Prietok"],"title":["Ovládání tiskárny","Druckersteuerung","Printer Control","Control de la Impresora","Contrôle de l\'imprimante","Controllo Stampante","프린터 제어","Spausdintojo valdymas","Printerbediening","Sterowanie drukarką","Ovládanie tlačiarne"]},"cameras":{"link":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"trigger-scheme":{"ten-sec":["Každých 10 sekund","Alle 10 Sekunden","Every 10 seconds","Cada 10 segundos","Toutes les 10 secondes","Ogni 10 secondi","매 10초","Kas 10 sekundžių","Elke 10 seconden","Co 10 sekund",""],"thirty-sec":["Každých 30 sekund","Alle 30 Sekunden","Every 30 seconds","Cada 30 segundos","Toutes les 30 secondes","Ogni 30 secondi","매 30초","Kas 30 sekundžių","Elke 30 seconden","Co 30 sekund",""],"sixty-sec":["Každých 60 sekund","Alle 60 Sekunden","Every 60 seconds","Cada 60 segundos","Toutes les 60 secondes","Ogni 60 secondi","매 60초","Kas 60 sekundžių","Elke minuut","Co 60 sekund",""],"each-layer":["Při změně vrstvy","Beim Schichtwechsel","On layer change","Al cambiar de capa","Au changement de couche","Al cambio layer","매 레이어","Pakeitus sluoksnį","Bij laagwissel","Przy zmianie warstwy",""],"fifth-layer":["Každou pátou vrstvu","Alle 5 Schichten","Every fifth layer","Cada cinco capas","Toutes les cinq couches","Ogni cinque layer","매 5레이어","Kas penktas sluoksnis","Elke 5 lagen","Co piąta warstwa",""],"manual":["Ručně","Manuell","Manual","Manual","Manuel","Manuale","수동","Rankinis","Handmatig","Ręcznie",""]}},"settings":{"title":["Nastavení","Einstellungen","Settings","Ajustes","Réglages","Impostazioni","세팅","Nustatymai","Instellingen","Ustawienia","Nastavenie"]},"conn":{"prusa-connect-status":["Stav připojení PrusaConnect","PrusaConnect Status","PrusaConnect Status","Estado de PrusaConnect","Informations de connexion à PrusaConnect","Stato PrusaConnect","프루사커넥트 상태","PrusaConnect būsena","Status van PrusaConnect","Stan PrusaConnect","Stav pripojenia PrusaConnect"],"printer-status":["Stav připojení 3D tiskárny","3D-Drucker Verbindungsstatus","3D Printer Connection Status","Estado Conexión Impresora 3D","Informations de connexion à l\'imprimante 3D","Stato Connessione Stampante 3D","3D 프린터 연결 상태","3D spausdintojo prisijungimo būsena","Verbindingsstatus van 3D-printer","Status połączenia z drukarką 3D","Stav pripojenia 3D tlačiarne"],"title":["připojení","Verbindung","Connection",null,"connexion",null,"연결","Prisijungimas","Verbinding",null,"pripojenie"],"prusa-connect-url":["Adresa PRUSA CONNECT","PRUSA CONNECT Adresse","PRUSA CONNECT Address",null,null,null,"프루사커넥트 주소","PRUSA CONNECT adresas","Adres van PRUSA CONNECT",null,"Adresa PrusaConnect"],"suc":["Úspěšně připojeno","Erfolgreich verbunden","Successfully connected","Correctamente conectado","Connecté avec succès","Connessione riuscita","연결 성공","Prisijungta sėkmingai","Succesvol verbonden","Połączono pomyślnie","Úspešne pripojené"],"connect":{"linked":["","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":[null,"Nicht verbunden","Not Linked","No enlazado","Non Associée","Non collegato","연결안됨","Nesusieta","Niet verbonden","Nie połączono",""]},"error_status":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","","","Błąd",""]},"prop":{"temp-nozzle":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura del nozzle","Température de la buse","Temperatura ugello","노즐 온도","Nozzle Temperature","Nozzletemperatuur","Temperatura dyszy","Teplota trysky"],"temp-bed":["Vyhřívaná podložka","Heizbett","Heatbed","Base calefactable","Plateau chauffant","Piano riscaldato","히트베드","Dėklo temperatūra","Verwarmd bed","Stół","Vyhrievaná podložka"],"speed":["Rychlost tisku","Druckgeschwindigkeit","Printing Speed","Velocidad de impresión","Vitesse d\'impression","Velocità di stampa","출력속도","Spausdinimo greitis","Printsnelheid","Prędkość drukowania","Rýchlosť tlače"],"z-height":["Výška Z","Z-Höhe","Z-Height","Altura-Z","Hauteur en z","Altezza-Z","Z높이","Z-Height","Z-Hoogte","Wysokość Z","Výška Z"],"nozzle-diameter":["Velikost trysky","Düsendurchmesser","Nozzle Diameter","Diámetro de Boquilla","Diamètre de la Buse","Diametro ugello","노즐지름","Galvutės skersmuo","Nozzlediameter","Średnica dyszy","Veľkosť trysky"],"rem-time":["Zbývající čas","Restzeit","Remaining time","Tiempo restante","Temps restant","Tempo residuo","남은시간","Likęs laikas","Resterende tijd","Pozostały czas","Zostávajúci čas"],"time-est":["Odhad doby tisku","Druckzeit Schätzen","Print Time Estimate","Tiempo Estimado de Impresión","Estimation du temps d\'impression","Stima del Tempo di Stampa","예상 출력 시간","Print Time Estimate","Geschatte printtijd","Szacowany Czas Druku","Odhad času tlače"],"est-end":["Odhadovaný konec","Erwartetes Ende","Estimated end","Fin estimado","Fin d\'impression estimée","Fine prevista","예상완료","Numatomas pabaiga","geschatte eindtijd","Szacowane zakończenie","Odhadovaný koniec"],"pnt-time":["Doba tisku","Druckzeit","Printing time","Tiempo de impresión","Temps d\'impression","Tempo di stampa","출력시간","Spausdinimo laikas","Printtijd","Czas druku","Čas tlače"],"last-mod":["Naposledy upraveno","Zuletzt Geändert","Last Modified","Ultima Modificación","Dernière Modification","Ultima Modifica","최종 수정됨","Paskutinis modifikavimas","Laatst gewijzigd","Ostatnio Zmodyfikowany","Posledná úprava"],"material":["Materiál","Material","Material","Material","Matériau","Materiale","재료","Medžiaga","Materiaal","Materiał","Materiál"],"layer-ht":["Výška vrstvy","Schichthöhe","Layer Height","Altura de Capa","Hauteur de Couche","Altezza Layer","레이어 높이","Sluoksnio storis","Laagdikte","Wysokość Warstwy","Výška vrstvy"],"size":["Velikost souboru","Größe der Datei","File size","Tamaño de archivo","Taille du fichier","Dimensione file","파일크기","Failo dydis","Bestandsgrootte","Rozmiar pliku","Veľkosť súboru"],"progress":["Postup","Fortschritt","Progress","Progreso","Progression","Progresso","진행","Eiga","Voortgang","Postęp","Progres"],"st-idle":["Nečinná","Leerlauf","Idle","En espera","Repos","Inattivo","대기","Pramoginė veikla","Inactief","Oczekuje","Nečinná"],"st-ready":["Připravena","Bereit","Ready","Lista","Prête","Pronto","준비","Pasirengęs","Gereed voor gebruik","Gotowe","Pripravené"],"st-busy":["Zaneprázdeněná","Beschäftigt","Busy","Ocupada","Occupée","Occupato","작업중","Užsiėmęs","Bezig","Zajęty","Zaneprázdnená"],"st-printing":["Probíhá tisk","Druckt","Printing","Imprimiendo","Impression","Stampa","출력중","Spausdinama","Printen","Drukowanie","Prebieha tlač"],"st-paused":["Pozastavena","Pausiert","Paused","Pausado","En pause","In pausa","일시정지","Pristabdyta","Gepauzeeerd","Pauza","Pozastavená"],"st-finished":["Dokončeno","Beendet","Finished","Terminado","Terminé","Completato","완료됨","Užbaigta","Klaar","Zakonczono","Dokončené"],"st-stopped":["Zastaveno","Gestoppt","Stopped","Parada","Arrêtée","Arrestato","정지됨","Sustabdytas","Gestopt","Zatrzymano","Zastavené"],"st-error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"st-attention":["Vyžaduje pozornost","Achtung","Attention","Atención","Attention","Attenzione","주의","Dėmesio","Attentie","Uwaga","Pozor"],"st-unknown":["Neznámý","Unbekannt","Unknown","Desconocido","Inconnu","Sconosciuto","알수없음","Nežinoma","Onbekend","Nieznane","Neznáme"],"at":["v","um","at","a las","à","alle","에서","iš","op","o","v"],"less-than":["Méně než minuta","Weniger als eine Minute","Less than a minute","Menos de un minuto","Moins d\'une minute","Meno di un minuto","1분 미만","Mažiau nei minutė","Minder dan een minuut","Mniej niż minuta","Menej ako minúta"],"today-at":["Dnes v","Heute um","Today at","Hoy a las","Aujourd\'hui à","Oggi alle","오늘","Šiandien","Vandaag om","Dzisiaj o","Dnes o"],"tmw-at":["Zítra v","Morgen um","Tomorrow at","Mañana a las","Demain à","Domani alle","내일","Rytoj","Morgen om","Jutro o","Zajtra o"],"true":["Ano","Ja","Yes","Si","Oui","Si","예","Taip","Ja","Tak","Áno"],"false":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"na":["N/A","NV","NA","NA","NA","ND","없음","NA","N.v.t.","N/D","N/A"],"cover-closed":["Uzavřené","Geschlossen","Closed","Cerrada","Fermé","Chiuso","닫힘","Uždarytas","Gesloten","Zamknięta","Zavreté"],"cover-opened":["Otevřené","Geöffnet","Opened","Abierta","Ouvert","Aperto","열림","Atidarytas","Open","Otwarta","Otvorené"],"storage-used-space":["Použito {{used}} z {{total}} ({{free}} volných)","{{used}} benutzt von {{total}} ({{free}} frei)","Used {{used}} of {{total}} ({{free}} free)","Usados {{used}} de {{total}} ({{free}} libres)","{{used}} utilisés sur {{total}} ({{free}} libre)","Usato {{used}} di {{total}} ({{free}} liberi)","{{total}} 중 {{used}} 사용중({{free}} 남음)","","","Zajęte {{used}} z {{total}} ({{free}} wolne)",""]},"msg":{"modal-p1":["Vítejte na webovém rozhraní vaší","Willkommen zur Weboberfläche Ihres","Welcome to the web interface of your","Bienvenido a la interfaz web de tu","Bienvenue dans l\'interface web de votre","Benvenuto nell\'interfaccia web del tuo","당신의 웹 인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į savo","Welkom bij de webinterface van uw","Witaj w interfejsie Twojej","Vitajte vo webovom rozhraní vašej"],"modal-p2":["Upozornění: některé hodnoty jsou zobrazeny pouze v průběhu tisku.","Bitte beachten Sie, dass die Werte nur angezeigt werden, wenn der Drucker gerade druckt.","Please note that values are shown only when the printer is printing.","Tenga en cuenta que los valores se muestran solo cuando la impresora está imprimiendo.","Veuillez noter que les valeurs sont affichées uniquement lorsque l\'imprimante imprime.","Si noti che i valori vengono visualizzati solo durante la stampa.","프린터가 출력중일 경우에만 값이 표시됩니다.","Prašome atkreipti dėmesį, kad reikšmės rodomos tik tada, kai spausdintuvas spausdina.","De waarden worden alleen getoond tijdens het printen.","Wartości będą wyświetlane tylko podczas drukowania.","Upozornenie: niektoré hodnoty sú zobrazené len počas tlače."],"api-key-1":["Vítejte ve webovém rozhraní PrusaLink Web!","Willkommen auf der Web-Oberfläche von PrusaLink Web.","Welcome to the PrusaLink Web web interface.","Bienvenido a la interfaz web de PrusaLink Web.","Bienvenue sur l\'interface web locale de PrusaLink Web.","Benvenuti nell\'interfaccia web di PrusaLink Web.","프루사 커넥트 웹 웹인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į PrusaLink Web interneto sąsają.","Welkom bij de PrusaLink Web webinterface.","Witaj w interfejsie sieciowym PrusaLink Web.","Vitajte vo webovom rozhraní PrusaLink Web!"],"api-key-2":["Vložte API klíč.","Bitte geben Sie den API-Schlüssel ein.","Please insert the API key.","Por favor introduce la clave API.","Veuillez insérer la clé API.","Si prega di inserire la chiave API.","API키를 입력하십시오.","Prašome įvesti API raktą.","Voer de API-sleutel in","Wpisz klucz API.","Vložte API kľúč."],"api-key-3":["Otevřete menu Nastavení -> Síť -> PrusaLink.","Sie finden ihn in Einstellungen -> Netzwerk -> PrusaLink.","You can find it in Settings -> Network -> PrusaLink.","Puedes encontrarla en Ajustes -> Red -> PrusaLink.","Vous pouvez la trouver dans Réglages -> Réseau -> Informations de connexion.","È possibile trovarla in Impostazioni -> Rete -> PrusaLink","설정 -> 네트워크 -> 프루사링크에서 찾을 수 있습니다.","Jį galite rasti Nustatymai -> Tinklas -> PrusaLink.","Deze kan gevonden worden bij Settings -> -> Network -> PrusaLink.","Możesz znaleźć go w sekcji Ustawienia -> Sieć -> PrusaLink.","Nájdete ho v Nastavenia -> Sieť -> PrusaLink."],"offline":{"not-responsing":["Tiskárna nereaguje.","Der Drucker antwortet nicht.","Printer is not responding.","La impresora no responde.","L\'imprimante ne répond pas.","La stampante non risponde.","프린터가 응답하지 않습니다.","Spausdintuvas neatsako.","Printer reageert niet.","Drukarka nie odpowiada.","Tlačiareň nereaguje."],"please-wait":["Prosím, čekejte...","Bitte warten...","Please wait...","Espera, por favor...","Veuillez patienter...","Attendere...","기다려주십시오...","Prašome palaukti...","Even geduld...","Proszę czekać...","Prosím, čakajte..."]},"drop-zone":{"label":["Přetažením souboru zahájíte nahrávání","Datei hier ablegen, um den Upload zu starten","Drop file here to start the uploading","Arrastra archivo aquí para subirlo","Déposez le fichier ici pour commencer le téléchargement","Trascina il file qui per iniziare il caricamento","파일을 여기로 끌어놓으면 업로드가 시작됩니다.","Tempti failą čia, kad predėti įkrovimą","Sleep het bestand hierheen om het te uploaden","Upuść plik tutaj, aby rozpocząć przesyłanie.",""]},"create-folder":["Nová složka","Neuer Ordner","New Folder","Nueva Carpeta","Nouveau Dossier","Nuova Cartella","새 폴더","","","Nowy folder",""],"create-folder-name":["Název složky","Ordnername","Folder Name","Nombre de la Carpeta","Nom de Dossier","Nome cartella","폴더 이름","","","Nazwa folderu",""],"sysupgrade":{"title":["Aktualizovat systémový balíček?","Systempaket aktualisieren?","Upgrade System Package?","¿Actualizar el Paquete del Sistema?","Mettre à niveau le package système ?","Aggiornare il pacchetto di sistema?","시스템 패키지를 업그레이드하겠습니까?","","","Zaktualizować paczkę systemową?",""],"remark":["Aktualizace může trvat několik desítek vteřin.","Das Upgrade kann einige Sekunden dauern.","The upgrade may take several tens of seconds.","La actualización puede tardar varias decenas de segundos.","La mise à jour peut prendre plusieurs dizaines de secondes.","L\'aggiornamento può richiedere qualche minuto.","업그레이드에는 수십초가 걸릴 수 있습니다.","","","Aktualizacja może trwać kilkadziesiąt sekund.",""],"pending":["Probíhá aktualizace... Nevypínejte tiskárnu.","Upgraden... Schalten Sie den Drucker nicht aus.","Upgrading... Do not switch the printer off.","Actualizando... No apagues la impresora.","Mise à niveau... N\'éteignez pas l\'imprimante.","Aggiornamento... Non spegnere la stampante.","업그레이드중... 프린터를 끄지 마십시오.","","","Aktualizacja... Nie wyłączaj drukarki.",""],"wait-for-printer":["Čeká se na tiskárnu...","Warten auf den Drucker...","Waiting for the printer...","Esperando a la impresora...","Attente de l\'imprimante...","In attesa della stampante...","프린터를 기다리는 중...","","","Oczekiwanie na drukarkę...",""]},"del-folder":["Opravdu chcete smazat {{folder_name}} a její obsah?","Möchten Sie wirklich {{folder_name}} und seinen Inhalt löschen?","Do you really want to delete {{folder_name}} and its contents?","¿Realmente deseas borrar {{folder_name}} y su contenido?","Voulez-vous vraiment supprimer {{folder_name}} et son contenu ?","Vuoi davvero cancellare la cartella {{folder_name}} e il suo contenuto?","정말 {{folder_name}} 폴더 및 내용을 지우시겠습니까?","","","Czy naprawdę chcesz usunąć {{folder_name}} i jego zawartość?",""],"del-proj":["Opravdu chcete smazat {{file_name}}?","Wollen Sie wirklich {{file_name}} löschen?","Do you really want to delete {{file_name}}?","¿Realmente deseas borrar {{file_name}}?","Voulez-vous vraiment supprimer le fichier {{file_name}} ?","Vuoi davvero eliminare il file {{file_name}}?","{{file_name}}을 정말로 삭제하겠습니까?","Ar tikrai norite ištrinti {{file_name}}?","Weet u zeker dat u {{file_name}} wilt verwijderen?","Czy na pewno chcesz usunąć plik {{file_name}}?","Naozaj chcete zmazať {{file_name}}?"],"sla-pour-resin":["Nalijte do vaničky dostatečné množství resinu pro vybraný soubor a zavřete víko. Minimální objem resinu je zobrazen na dotykovém displeji tiskárny.","Füllen Sie genügend Harz für die ausgewählte Datei in den Tank und schließen Sie den Deckel. Die minimale Menge des Harzes wird auf dem Touchscreen angezeigt.","Pour enough resin for selected file into the tank and close the lid. Minimal amount of the resin is displayed on the touchscreen.","Vierte suficiente resina para el archivo seleccionado y cierra la tapa.\\nLa mínima cantidad necesaria se muestra en la pantalla táctil.","Versez suffisamment de résine dans le réservoir pour le projet sélectionné et fermez le capot.","Versare nel serbatoio la quantità di resina sufficiente per il file selezionato e chiudere il coperchio. La quantità minima di resina viene visualizzata sul touchscreen.","선택한 파일을 위한 레진을 탱크에 붓고 뚜껑을 닫습니다. 터치스크린에 최소량의 레진이 표시됩니다.","Įpilkite pakankamai dervos pasirinktam failui ir uždarykite dangtį. Mažiausias dervos kiekis yra rodomas ant ekrano.","Doe genoeg resin voor het geselcteerde bestand in het vat en sluit de kap. De minimale hoeveelheid resin wordt aangegeven op het touchscreen.","Wlej do zbiornika wystarczającą ilość żywicy dla wybranego pliku i zamknij pokrywę. Minimalna ilość żywicy jest wyświetlana na ekranie dotykowym.","Do nádržky nalejte dostatočné množstvo resinu pre vybraný súbor a zatvorte veko. Minimálne množstvo resinu sa zobrazí na dotykovom displeji."],"cancel":["Chcete opravdu zrušit tisk?","Wollen Sie den Druck wirklich abbrechen?","Do you really want to cancel print?","¿Realmente quieres cancelar la impresión?","Voulez-vous vraiment annuler l\'impression ?","Vuoi davvero annullare la stampa?","출력을 취소하겠습니까?","Ar tikrai norite atšaukti spausdinimą?","Weet u zeker dat u de print wilt stoppen?","Czy na pewno chcesz anulować wydruk?","Chcete naozaj zrušiť tlač?"],"file-exists":{"title":["Soubor již existuje","Datei existiert bereits","File already exists","El archivo ya existe","Le fichier existe déjà","File già esistente","파일이 이미 존재합니다.","","","Plik już istnieje",""],"overwrite-it":["Chcete ho přepsat?","Möchten Sie sie überschreiben?","Do you want to overwrite it?","¿Quieres sobrescribirlo?","Voulez-vous l\'écraser ?","Vuoi sovrascriverlo?","덮어쓰시겠습니까?","","","Czy chcesz go nadpisać?",""]}},"btn":{"login":["Přihlášení","Login","Login","Iniciar sesión","Connexion","Accedi","로그인","Prisijungti","Login","Zaloguj","Prihlásenie"],"confirm":["Potvrdit","Bestätigen","Confirm","Confirmar","Confirmer","Conferma","결정","Patvirtinti","Bevestigen","Potwierdzam","Potvrdiť"],"cancel":["Zrušit","Abbrechen","Cancel","Cancelar","Annuler","Annulla","취소","Atšaukti","Annuleren","Anuluj","Zrušiť"],"del":["Smazat","löschen","Delete","borrar","supprimer","elimina","삭제","Ištrinti","Verwijderen","usuń","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","télécharger","Download","다운로드","Atsisiųsti","Download","Pobierz","Stiahnuť"],"pause-pt":["Pozastavit tisk","Druck pausieren","Pause Print","Pausar Impresión","Mettre l\'impression en pause","Pausa Stampa","출력 일시 정지","Pristabdyti spausdinimą","Pauzeer print","Wstrzymaj drukowanie","Pozastaviť tlač"],"resume-pt":["Pokračovat v tisku","Druck fortsetzen","Resume Print","Continuar Impresión","Redémarrer l\'impression","Riprendi stampa","출력 복귀","Tęsti spausdinimą","Hervat print","Wznów drukowanie","Pokračovať v tlači"],"start-pt":["Start tisku","Druck starten","Start Print","Empezar impresión","Lancer l\'impression","Inizia stampa","출력 시작","Pradėti spausdinimą","Start print","Start druku","Štart tlače"],"stop-print":["Zrušit tisk","Druck abbrechen","Stop Print","Cancelar impresión","Annuler l\'impression","Annulla stampa","출력 정지","Sustabdyti spausdinimą","Stop print","Anuluj wydruk","Zrušiť tlač"],"upld-file":["Nahrát soubor","Datei hochladen","Upload File","Cargar Archivo","Télécharger un Fichier","Carica file","파일 업로드","Įkelti failą","Upload bestand","Prześlij plik","Nahrať súbor"],"check-updates":["Kontrola aktualizací","Updates suchen","Check Updates","Comprobar actualizaciones","Vérifier les Mises à Jour","Controlla aggiornamenti","업데이트 체크","Tikrinti atnaujinimus","","Sprawdź aktualizacje",""],"connect":{"link":[null,"Verbinden","Link","Enlace","Associer","Collegamento","연결","Susieti","Verbinden","Link",""],"unlink":["Odpojit","Trennen","Unlink","Desenlazar","Dissocier","Scollegato","연결끊기","Atsieti","Verbinding verbreken","Odłącz",""]},"chg":["Změnit","Ändern","Change","Cambia","Mettre à jour","Cambia","변경","Pakeisti","Wijzig","Zmień","Zmeniť"],"reset":["","Reset","Reset","Reset","Réinitialiser","Reset","리셋","Perkrauti","Reset","Reset",""],"disable-steppers":["Vypnout motory","Schrittmotoren deaktivieren","Disable Steppers","Desactivar motores","Desactiver les moteurs","Disabilita motori","모터 정지","Išjungti stoperius","Stappenmotors uitschakelen","Wyłącz silniki krokowe","Vypnúť motory"],"extrude":["Vytlačit","Extrudieren","Extrude","Extruye","extruder","Estrudi","압출","Ištraukti","Extrudeer","Ekstruzja","Vysunúť"],"retract":["Vtáhnout","Zurückziehen","Retract","Retraer","Retracter","Retrai","리트렉트","Atitraukti","Retract","Retrakcja","Zasunúť"],"set":["Nastavit","Setzen","Set","Ajuste","Régler","Imposta","설정","Nustatyti","Instellen","Ustaw","Nastaviť"],"yes":["Ano","Ja","Yes","Sí","Oui","Sì","예","Taip","Ja","Tak","Áno"],"no":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"upgrade":["Aktualizovat","Aktualisieren","Upgrade","Actualización","Mise à niveau","Aggiorna","업그레이드","Atnaujinti","","Aktualizacja",""],"chg-print-set":["Tisková nastavení","Druckeinstellungen","Print Settings","Ajustes de la Impresora","Réglages d\'Impression","Impostazioni di stampa","프린트 설정","Spausdinimo nustatymai","Printinstellingen","Ustawienia druku",""],"save-chgs":["Uložit změny","Änderungen speichern","Save changes","Guardar cambios","Enregistrer les modifications","Salva le modifiche","변경내용 저장","Išsaugoti pakeitimus","Wijzigingen opslaan","Zapisz zmiany","Uložiť zmeny"]},"camera":{"settings":["Nastavení kamery","Kamera-Einstellungen","Camera Settings","Ajustes de la Cámara","Paramètres de la Caméra","Impostazioni Fotocamera","카메라 세팅","Kameros nustatymai","Camera-instellingen","Ustawienia kamery",""],"name":["Název kamery","Kameraname","Camera Name","Nombre de la Cámara","Nom de la Caméra","Nome Fotocamera","카메라 명칭","Kameros pavadinimas","Cameranaam","Nazwa kamery",""],"resolution":["Rozlišení","Auflösung","Resolution","Resolución","Résolution","Risoluzione","해상도","Raiška","Resolutie","Rozdzielczość",""],"trigger-scheme":["","Auslöse-Schema","Trigger Scheme","Modo de Disparo","Mode de Déclenchement","Schema di attivazione","트리거 계획","Paleisti schemą","Triggerschema","Schemat wyzwalania",""],"focus":["Zaostření","Fokus","Focus","Enfocar","Focus","Messa a fuoco","포커스","","","Ostrość",""],"register-by-token":["","","Register Camera","","","","","","","",""],"token":["","","CONNECT Token","","","","","","","",""],"title":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"time":["Čas snímku","Zeit der Momentaufnahme","Snapshot Time","Hora de la Foto","Heure de la Capture","Tempo Istantanea","스냅샷 시간","Momentinis vaizdas","Snapshot-tijd","Czas migawki",""],"cloud":{"linked":["Připojeno","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":["Nepřipojeno","Unverbunden","Not Linked","No Enlazado","Non Associée","Non collegato","연결되지 않음","Nesusieta","Niet verbonden","Nie połączono",""],"label":["","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT",""]},"btn":{"connect":["Zkusit povolit kameru","Versuche Kamera zu aktivieren","Try to enable camera","Intenta habilitar la cámara","Essayer d\'activer la caméra","Prova ad abilitare la fotocamera","카메라 활성화 시도중","Pabandykite įjungti kamerą","Probeer de camera in te schakelen","Spróbuj aktywować kamerę",""],"settings":["Otevřít nastavení kamery","Öffne Kamera-Einstellungen","Open camera settings","Abrir los ajustes de la cámara","Ouvrir les paramètres de la caméra","Apri impostazioni fotocamera","카메라 설정 열기","Atidaryti kameros nustatymus","Open camera-instellingen","Otwórz ustawienia kamery",""],"link":["Připojit kameru do Connectu","Kamera mit CONNECT verbinden","Link camera to CONNECT","Asocia cámara a CONNECT","Associer la caméra à CONNECT","Collega fotocamera a CONNECT","카메라를 CONNECT에 연결하기","Susieti kamerą su CONNECT","Verbind camera met CONNECT","Połącz kamerę z CONNECT",""],"unlink":["Odpojit kameru z Connectu","Kamera von CONNECT trennen","Unlink camera from CONNECT","Desvincular la cámara de CONNECT","Dissocier la caméra de CONNECT","Scollega fotocamera da CONNECT","카메라를 CONNECT에서 연결 해제하기","Atsieti kamerą nuo CONNECT","Verbreek verbinding van camera met CONNECT","Odłącz kamerę od CONNECT",""]},"path":["Cesta","Pfad","Path","Ruta","Chemin","Percorso","경로","Kelias","Pad","Ścieżka",""],"driver":["Ovladač","Treiber","Driver","Controlador","Driver","Driver","드라이버","Draiveris","Driver","Sterownik",""]},"printer":{"title":["Tiskárna","Drucker","Printer","Impresora","imprimante","Stampante","프린터","Spausdintuvas","Printer","Drukarka","Tlačiareň"],"name":["Název tiskárny","Name des Druckers","Printer name","Nombre de la impresora","nom de l\'imprimante","Nome stampante","프린터 이름","Spausdintuvo pavadinimas","Naam van de printer","Nazwa drukarki","Názov tlačiarne"],"location":["Umístění tiskárny","Standort des Druckers","Printer location","Ubicación de la impresora","localisation de l\'imprimante","Posizione stampante","프린터 위치","Spausdintuvo vieta","Locatie van de printer","Lokalizacja drukarki","Umiestnenie tlačiarne"],"network_error_chime":["Zvukové upozornění při síťové chybě","Netzwerk-Fehlerton","Network Error Chime","Tono Error Red","Carillon d\'erreur réseau","Suono di errore di rete","네트워크 에러 차임벨","","","Dźwięk błędu sieci",""]},"print":{"fdm":{"1":["Je tiskárna připravena?","Ist der Drucker bereit?","Is the printer ready?","¿Está lista la impresora?","L\'imprimante est-elle prête ?","La stampante è pronta?","프린터가 준비되었습니까?","Ar spausdintuvas pasirengęs?","Is de printer klaar voor gebruik?","Czy drukarka jest gotowa?","Je tlačiareň pripravená?"],"2":["Je tisková podložka prázdná a čistá?","Ist der Druckbogen leer und sauber?","Is printing sheet empty and clean?","¿Está vacía y limpia la lámina de impresión?","Le surface d\'impression est-elle vide et propre ?","La piastra di stampa è vuota e pulita?","프린트 시트가 비어있고 깨끗합니까?","Ar spausdinimo lapas tuščias ir švarus?","Is het printplatform leeg en schoon?","Czy arkusz druku jest pusty i czysty?","Je tlačová podložka prázdna a čistá?"]}},"upld":{"title":["Nahrát soubor","Projekt hochladen","Upload file","envía proyecto","Téléversement de projet","Carica file","파일업로드","Įkelti failą","Bestand uploaden","prześlij projekt","Nahrať súbor"],"start-pt":["po přenosu zahájit tisk","Druck nach der Übertragung starten","Start print after transfer","Iniciar la impresión tras la transferencia","Démarrer l\'impression après le transfert","Avvia stampa dopo il trasferimento","전송 후 출력 시작","Pradėti spausdinimą po perdavimo","Start print na het omzetten","Rozpocznij drukowanie po przesłaniu","po prenose spustiť tlač"],"remote":{"source":["URL zdroje","Quell-URL","Source URL","URL Fuente","URL de la source","URL fonte","원본 URL","Šaltinio URL","Bron van URL","Źródłowy URL","URL zdroja"],"hint-fdm":["Zadejte URL souboru G-CODE","URL der G-CODE-Datei eingeben","Type URL of G-CODE file","Escribe URL de archivo G-CODE","Entrez l\'URL du fichier G-CODE du projet","Digitare URL del file G-CODE","G코드 파일의 주소를 입력하십시오","Įveskite G-CODE failo URL","Type de URL van het gcode-bestand","Wpisz adres URL pliku G-Code","Zadajte URL súboru G-code"],"file":["Název souboru","Dateiname","File name","Nombre del archivo","Nom de fichier","Nome file","파일명","Failo pavadinimas","Bestandsnaam","Nazwa pliku","Názov súboru"],"file-hint":["Zadejte název souboru","Dateiname eingeben","Type file name","Escribe nombre de archivo","Tapez le nom du fichier","Digitare nome file","파일명을 입력하십시오","Įveskite failo pavadinimą","Type de bestandsnaam","Wpisz nazwę pliku","Zadajte názov súboru"]},"direct":{"choose":["Vyberte {{file}} nebo jej přetáhněte sem.","Klicke um eine {{file}} Datei auszuwählen oder ziehe sie hier hin","Click to choose a {{file}} file or drag it here","Haz clic para elegir un archivo {{file}} o arrástralo hasta aquí","Cliquer pour choisir un fichier {{file}} ou déposez le ici","Fare clic per scegliere un file {{file}} o trascinarlo qui","선택한 {{file}} 파일을 클릭하거나 여기로 드래그하십시오","Pasirinkite {{file}} failą arba vilkite jį čia","Klik om een {{file}}-bestand te kiezen of sleep het hierheen","Kliknij, aby wybrać plik {{file}} lub przeciągnij go tutaj","Kliknutím vyberte súbor {{file}} alebo ho sem potiahnite."]}},"download":{"dl-started":["Začátek stahování","Herunterladen Gestartet","Download Started","Se inició la descarga","téléchargement démarré","Scaricamento Avviato","다운로드가 시작됨","Atsisiuntimas pradėtas","Downloaden gestart","Pobieranie rozpoczęte","Sťahovanie začalo"],"start-pt":["Spustit tisk","Autostart","Autostart","Inicio automático","Démarrage automatique","Avvio automatico","자동시작","Automatinis paleidimas","Autostart","Autostart","Spustiť tlač"]},"temps":{"title":["Teploty","Temperaturen","Temperatures","Temperaturas","Températures","Temperature","온도","Temperatūros","Temperatuur","Temperatury","Teploty"]},"":[null,null,null,null,null,null,null,null,null,null,null],"version":{"title":["Verze","Version","Version",null,"version",null,"버전","Versija","Versie",null,"Verzia"],"api":["API","API","API",null,"api",null,"API","API","API",null,"API"],"hostname":["Hostname","Hostname","Hostname",null,"nom d\'hôte",null,"호스트명","Hostname","Hostnaam",null,"Hostname"],"firmware":["Firmware","Firmware","Firmware",null,"micrologiciel",null,"펌웨어","Firmware","Firmware",null,"Firmware"],"server":["Server","Server","Server",null,"serveur",null,"서버","Serveris","Server",null,"Server"],"text":["Text","Text","Text",null,"texte",null,"텍스트","Tekstas","Tekst",null,"Text"],"sdk":["SDK","SDK","SDK",null,"sdk",null,"SDK","SDK","SDK",null,"SDK"],"fe":["Frontend","Frontend","Frontend",null,"frontend",null,"프론트엔드","Frontendas","Frontend",null,"Frontend"]},"sys-version":{"title":["Verze systému","Systemversion","System Version",null,"version du système",null,"시스템버전","Sistemos versija","Systeenversie",null,"Verzia systému"],"python":["Python","Python","Python","Python","python","Python","파이썬","Python","Python","Python","Python"],"description":["Popis","Beschreibung","Description","Descripción","description","Descrizione","설명","Aprašymas","Beschrijving","Opis","Popis"],"id":["ID","ID","ID","ID","ID","ID","ID","ID","ID","ID","ID"],"os":["OS","OS","OS","OS","Système d\'exploitation","S.O.","OS","OS","OS","OS","OS"]},"updates":{"title":[null,null,"System Updates",null,null,null,null,"Sistemos atnaujinimai",null,null,null]},"user":{"title":["Uživatel","Benutzer","User",null,"utilisateur",null,"유저","Vartotojas","Gebruiker",null,"Používateľ"],"username":["Uživatelské jméno","Benutzername","User Name","Nombre de usuario","nom d\'utilisateur","Nome Utente","유저명","Vartotojo vardas","Gebruikersnaam","Nazwa użytkownika","Používateľské meno"],"format":{"name":["Uživatelské jméno musí obsahovat alespoň 3 znaky.","Der Benutzername muss mindestens 3 Zeichen lang sein.","Username length must be at least 3 characters long.","El nombre de usuario debe tener al menos 3 caracteres.","La longueur du nom d\'utilisateur doit être d\'au moins 3 caractères.","La lunghezza del nome utente deve essere di almeno 3 caratteri.","유저명은 최소 3자리 이상 입력하십시오.","Vartotojo vardo ilgis turi būti mažiausiai 3 simboliai.","De gebruikersnaam moet minimaal 3 karakters lang zijn.","Długość nazwy użytkownika musi mieć co najmniej 3 znaki.","Používateľské meno musí obsahovať aspoň 3 znaky."],"password-1":["Heslo nesmí začínat či končit mezerami, a zároveň musí splňovat jednu z následujících podmínek:","Das Passwort darf weder am Anfang noch am Ende Leerzeichen enthalten und muss mindestens eine der folgenden Optionen erfüllen:","Password can\'t contain spaces on the beggining nor the end and must meet at least one of these options:","La Contraseña no puede empezar o terminar con espacios y debe cumplir al menos una de estas opciones:","Le mot de passe ne peut pas contenir d\'espaces au début ni à la fin et doit répondre à au moins l\'une de ces options :","La password non può contenere spazi né all\'inizio né alla fine e deve soddisfare almeno una di queste opzioni:","암호는 시작부분에 공백을 둘 수 없으며 다음옵션 중 하나이상을 충족해야 합니다.","Slaptažodis negali turėti tarpų pradžioje arba pabaigoje ir turi atitikti bent vieną iš šių variantų:","Het wachtwoord mag geen spaties aan het begin of het einde bevatten en moet aan minstens één van deze opties voldoen:","Hasło nie może zawierać spacji na początku ani na końcu i musi spełniać przynajmniej jeden z poniższych warunków:","Heslo nesmie začínať ani končiť medzerami a musí spĺňať aspoň jednu z týchto podmienok:"],"password-2":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 malé písmeno, 1 velké písmeno a 1 číslo","- Minimale Länge 8 Zeichen, davon ein Kleinbuchstabe, ein Großbuchstabe und eine Zahl","- Minimal length 8 characters, including one lowercase letter, one uppercase letter and one number","- Longitud mínima 8 caracteres, incluyendo una minúscula, una mayúscula y un número","- Longueur minimale de 8 caractères, dont une lettre minuscule, une lettre majuscule et un chiffre","- Lunghezza minima 8 caratteri, di cui una lettera minuscola, una lettera maiuscola e un numero","- 최소 길이 8자(소문자 1개, 대문자 1개, 숫자 1개 포함)","- 8 simbolių ilgio minimalus, įskaitant vieną mažąją raidę, vieną didžiąją raidę ir vieną skaičių","- Minimaal 8 karakters lang, met tenminste een kleine letter, een hoofdletter en een nummber","- Minimalna długość 8 znaków, w tym jedna mała litera, jedna duża litera i jedna cyfra","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 malého písmena, 1 veľkého písmena a 1 číslice"],"password-3":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 speciální symbol (např. @)","- Mindestlänge 8 Zeichen, einschließlich eines nicht alphanumerischen Zeichens (z. B. @)","- Minimal length 8 characters, including one non-alphanumeric character (e.g. @)","- Longitud mínima 8 caracteres, incluyendo los no alfanuméricos (como @)","- Longueur minimale de 8 caractères, dont un caractère non alphanumérique (par exemple @)","- Lunghezza minima 8 caratteri, compreso un carattere non alfanumerico (es. @)","- 영숫자가 아닌 문자(예: @) 1개를 포함한 최소 길이 8자","- 8 simbolių ilgio minimalus, įskaitant vieną neteisingą simbolį (pvz., @)","- Minimaal 8 karakters lang, met tenminste één niet-alfanumeriek karakter (bijv. @)","- Minimalna długość 8 znaków, w tym jeden znak niealfanumeryczny (np. @)","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 špeciálneho symbolu (napr. @)"],"password-4":["- Heslo musí obsahovat minimálně 15 znaků","- Minimale Länge 15 Zeichen","- Minimal length 15 characters","- Longitud mínima 15 caracteres","- Longueur minimale 15 caractères","- Lunghezza minima 15 caratteri","- 최소 길이 15자","- 15 simbolių ilgio minimalus","- Minimaal 15 karakters lang","- Minimalna długość 15 znaków","- Heslo musí obsahovať minimálne 15 znakov"]},"new-password":["Nové heslo","Neues Passwort","New Password","Nueva Contraseña","nouveau mot de passe","Nuova Password","신규 암호","Naujas slaptažodis","Nieuw wachtwoord","Nowe hasło","Nové heslo"],"re-password":["Zopakujte heslo","Passwort wiederholen","Repeat Password","Repetir Contraseña","répéter le mot de passe","Ripeti Password","암호 재입력","Pakartokite slaptažodį","Herhaal wachtwoord","Powtórz hasło","Zopakujte heslo"],"password":["Heslo","Passwort","Password","Contraseña","mot de passe","Password","암호","Slaptažodis","Wachtwoord","Hasło","Heslo"]},"serial":{"label":["Sériové číslo","Seriennummer","Serial Number","Número de serie","numéro de série","Numero Seriale","시리얼넘버","Serijinis numeris","Serienummer","Numer seryjny","Sériové číslo"]},"api_key":{"label":["","API Key","API Key","Clave API","Clé API","Chiave API","API KEY","API raktas","API-sleutel","Klucz API",""]},"logs":{"title":["Logy","Protokolle","Logs",null,"logs",null,"로그","Žurnalai","Logbestanden",null,"Logy"],"select-file":["Vyberte soubor","Datei auswählen","Select File",null,"Sélectionnez une fichier",null,"파일 선택","Pasirinkti failą","Selecteer bestand",null,"Vyberte súbor"],"not-selected":["Není vybrán soubor logů!","Es ist keine Protokolldatei ausgewählt!","No log file is selected!","¡No se ha seleccionado archivo de registro!","Pas de fichier de log sélectionné!","Nessun file di registro selezionato!","로그 파일이 선택되지 않았습니다!","Nepasirinktas joks žurnalų failas!","Geen logbestand geselecteerd!","Nie wybrano żadnego pliku logu!","Nie je vybraný žiadny logovací súbor!"],"select-file-placeholder":["Vyberte soubor logů","Protokolldatei auswählen","Select log file","Selecciona archivo de registro","selectionnez un fichier de log","Selezionare un file di registro","로그 파일 선택","Pasirinkti žurnalų failą","Selecteer logbestand","Wybierz plik logu","Vyberte logovací súbor"],"empty-file":["Soubor je prázdný!","Die Protokolldatei ist leer!","Log file is empty!","¡El archivo de registro está vacío!","Le fichier de log est vide!","Il file di registro è vuoto!","로그파일이 비어있음!","Žurnalų failas yra tuščias!","Logbestand is leeg!","Plik logu jest pusty!","Logovací súbor je prázdny!"],"file-too-large":["Soubory logů o velikosti větší než {{size}} jsou k dispozici pouze ke stažení!","Protokolldateien, die größer als {{size}} sind, stehen nur zum Herunterladen zur Verfügung.","Log files of size larger than {{size}} are available only for downloading.","Los archivos de registro mayores de {{size}} sólo se pueden descargar.","Les fichiers de log d\'une taille supérieure à {{size}} ne sont disponibles que pour le téléchargement.","I file di registro di dimensioni superiori a {{size}} sono disponibili solo per il download.","로그 파일을 다운로드 하기 위해서는 최소 {{size}} 이상의 용량이 필요합니다.","Žurnalų failai, didesni nei {{size}}, yra prieinami tik atsiunčiant.","Logbestanden groter dan {{size}} kunnen alleen gedownload worden.","Pliki logów o rozmiarze większym niż {{size}} są dostępne tylko do pobrania.","Logovacie súbory s veľkosťou väčšou ako {{size}} sú k dispozícii len na stiahnutie.!"]},"ntf":{"success":["Požadavek byl úspěšný","Erfolg","The request was successful","Éxito","la demande a été traitée avec succès","Successo","요청이 성공했습니다.","Užklausa buvo sėkminga","De aanvraag was succesvol","Sukces","Žiadosť bola úspešná"],"settings-suc":["Nastavení bylo úspěšně změněno.","Die Einstellungen wurden erfolgreich geändert.","Settings was changed successfully.","Los ajustes se han cambiado correctamente.","Paramètres modifiés avec succès.","Impostazioni modificate correttamente","설정이 성공적으로 변경되었습니다.","Nustatymai sėkmingai pakeisti.","Instelling succesvol gewijzigd.","Ustawienia zostały zmienione pomyślnie","Nastavenia boli úspešne zmenené."],"camera-suc":["","Kamera Steuerungsanfrage wurde gesendet","Camera control request has been sent","La petición de control de cámara se ha enviado","La demande de contrôle de la caméra a été envoyée","È stata inviata una richiesta di controllo della fotocamera","카메라 조작 요청이 전송되었습니다.","Kameros valdymo užklausa buvo išsiųsta","Aanvraag voor camerabesturing is verzonden","Wysłano żądanie sterowania kamerą",""],"camera-config-success":["Konfigurace kamery byla aktualizovaná","Kamerakonfiguration wurde aktualisiert","Camera configuration has been updated","La configuración de la cámara se ha actualizado","La configuration de la caméra a été mise à jour","La configurazione della fotocamera è stata aggiornata","카메라 구성이 업데이트되었습니다.","Kameros konfigūracija buvo atnaujinta","Cameraconfiguration is geüpdatet","Konfiguracja kamery została zaktualizowana",""],"upld-suc":["Soubor {{file_name}} byl úspěšně nahrán.","Das Hochladen des Projekts {{file_name}} war erfolgreich.","The file {{file_name}} was uploaded successfully.","El envío del proyecto {{file_name}} se completó.","Le projet {{file_name}} a été téléversé correctement.","Caricamento del progetto {{file_name}} riuscito.","{{file_name}}파일이 성공적으로 업로드되었습니다.","Failas {{file_name}} sėkmingai įkeltas.","Het bestand {{file_name}} is succesvol geüpload.","Przesyłanie projektu {{file_name}} powiodło się.","Súbor {{file_name}} bol úspešne nahraný."],"error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"upld-unsuc":["Nahrání souboru {{file_name}} selhalo.","Das Hochladen des Projekts {{file_name}} war nicht erfolgreich.","The file {{file_name}} upload was unsuccessful.","El envío del proyecto {{file_name}} ha fallado.","Le téléversement du projet {{file_name}} a échoué.","Caricamento del progetto {{file_name}} non riuscito.","{{file_name}}파일의 업로드가 실패하였습니다.","Failo {{file_name}} įkėlimas nepavyko.","Het bestand {{file_name}} is niet succesvol geüpload.","Przesyłanie projektu {{file_name}} nie powiodło się.","Nahrávanie súboru {{file_name}} zlyhalo."],"upld-start":["Požadavek na nahrání souboru byl přijat","Upload-Anfrage wurde angenommen","Upload request has been accepted","Se acepto la petición de subida","La demande de téléchargement a été acceptée","Richiesta di caricamento accettata","업로드 요청이 수락되었습니다.","Įkėlimo užklausa priimta","Uploadverzoek is geaccepteerd","Żądanie przesłania zostało zaakceptowane","Žiadosť o odoslanie bola prijatá"]},"sort":{"by-name":["Název","Name","Name","Nombre","Nom","Nome","이름으로 정렬하기","Pavadinimas","Naam","Nazwa",""],"by-date":["Datum","Datum","Date","Fecha","Date","Data","날짜로 정렬하기","Data","Datum","Data",""],"by-size":["Velikost","Größe","Size","Tamaño","Taille","Dimensioni","크기로 정렬하기","Dydis","Grootte","Rozmiar",""]},"unit":{"h":["h","h","h","h","h","h","h","h","u","g","h"],"min":["min","min","min","min","min","min","min","min","min","min","min"],"ml":["ml","ml","ml","ml","mL","ml","ml","ml","ml","ml","ml"],"rpm":["RPM","UPM","RPM","RPM","TPM","RPM","RPM","RPM","RPM","Obr./min","RPM"],"b":["B","B","B","B","B","B","B","B","B","B","B"],"kb":["KB","KB","KB","KB","KB","KB","KB","KB","kB","KB","KB"],"mb":["MB","MB","MB","MB","MB","MB","MB","MB","MB","MB","MB"],"gb":["GB","GB","GB","GB","GB","GB","GB","GB","GB","GB","GB"]},"exp-times":{"exp-time":["Doba osvitu [s]","Belichtung [s]","Exposure [s]","Exposición [s]","Exposition [s]","Esposizione [s]","[s]초 노출","Ekspozicija [s]","Belichting [s]","Czas naświetlania [s]","Osvit [s]"],"inc":["Navýšení expozice (s)","Belichtungszeit inkr. [s]","Exposure time incr. [s]","Incremento tiempo exp. [s]","Incr. du temps d\'exposition [s]","Incremento tempo di esposizione [s]","[s]초 노출 시간 증가","Ekspozicijos laiko padidėjimas [s]","Belichtingstijd verhogen [s]","Przyrost czasu naświetl. [s]","Prírastok osvitu (s)"],"layer-1st":["Osvit první vrstvy [s]","Erste Schicht Bel. [s]","First Layer Expo. [s]","Primera Capa Expo. [s]","Première couche Expo. [s]","Esposizione Primo layer [s]","첫번째 레이어 노출시간 [s]초","Pirmojo sluoksnio ekspozicija [s]","Belichtingstijd eerste laag [s]","Naśw. 1. warstwy [s]","Osvit prvej vrstvy [s]"],"profile":["Tiskový profil","Druckprofil","Print profile","Perfil de Impresión","Profil d\'Impression","Profilo di stampa","출력 프로필","Spausdinimo profilis","Printprofielen","Profil druku","Tlačový profil"],"faster":["Rychlejší","Schneller","Faster","Rápido","Plus rapide","Più veloce","빠르게","Greičiau","Sneller","Szybciej","Rýchlejšie"],"slower":["Pomalejší","Langsamer","Slower","Lento","Plus lent","Più lento","느리게","Lėčiau","Langzamer","Wolniej","Pomalšie"],"high-viscosity":["Velmi Viskózní","Hohe Viskosität","High Viscosity","Alta Viscosidad","Haute viscosité","Alta Viscosità","고점도","Aukštas klampumas","Hoge viscositeit","Wysoka lepkość","Vysoká viskozita"]}}}')}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.p="",(()=>{"use strict";var e=a(8751),t=a(8495),i=a(6648);const s=()=>{document.getElementById("menu").addEventListener("click",(()=>{document.getElementById("menu").classList.contains("burger-open")?n():(document.getElementById("menu").classList.add("burger-open"),document.getElementById("navbar").classList.remove("burger-menu"))})),document.getElementById("navbar").querySelectorAll("a[href]").forEach((e=>{e.addEventListener("click",n)}))};function n(){document.getElementById("menu").classList.remove("burger-open"),document.getElementById("navbar").classList.add("burger-menu")}var o=a(7780),r=a(1351),l=a(5412);const d=(e,t)=>{const a=l.L.init(e,t);a&&(a.setOptions((0,o.Vb)()),a.value=(0,o.G3)(),a.onselect=e=>{(0,o.m0)(e),window.location.reload()})};let c=!1;const u={status:{get:()=>(0,i.LK)("/api/v1/status"),init:!0,update:!0,updateInterval:5e3}};async function p(e){const t=(new Date).getTime(),a=Object.fromEntries(Object.entries(u).map((([a,i])=>[a,(()=>{if(!e)return i.init;if(i.update){if(!i.updateInterval)return!0;if(i.timestamp||(i.timestamp=t+i.updateInterval),t>=i.timestamp)return i.timestamp=t+i.updateInterval,!0}})()?i.get():void 0])).filter((([,e])=>void 0!==e))),i=Object.values(a),s=await Promise.all(i.map((e=>e.then((e=>({ok:!0,payload:e}))).catch((e=>({ok:!e.code&&null,error:e}))))));return Object.fromEntries(Object.entries(a).map((([e],t)=>[e,s[t]])))}async function m(e){let a=!1;for(;;){let i=!1;try{const t=await p(a);t.status&&(c=null===t.status.ok),Object.values(t).forEach((({ok:e,error:t})=>{var a;e||(i=!0,null!==e&&(a=t,(0,r.S)(a,{fallbackMessage:{title:"API error",message:"Cannot connect to printer"}})))})),a?g(t):i||(v({...t,printer:e}),a=!0)}catch(e){h(e)}t.Z.setConnected(!c),await new Promise((e=>setTimeout(e,1e3)))}}function v(a){try{t.Z.init(a),window.onpopstate=t=>t&&(0,e.g9)(t.currentTarget.location.hash||"#dashboard"),(0,e.g9)(window.location.hash||"#dashboard")}catch(e){h(e)}}function g(e){try{t.Z.update(e)}catch(e){h(e)}}function h(e){(0,r.S)(e,{fallbackMessage:{title:"Application error",message:"Something bad happened on application side"}}),console.error(e)}window.onload=()=>{console.log("PrusaLink v.3.12.0 #b'c5f2a9c'"),s(),d("lang-dropdown","lang-dropdown"),(0,o.ot)(),document.querySelectorAll("a[href]").forEach((t=>{t.addEventListener("click",(a=>{(0,e.c4)(t.href)&&a.preventDefault()}))})),(0,i.Z5)().then((e=>{e&&m(e)}))}})()})(); diff --git a/prusa/link/static/main.f2cb94adb8c26ac86d33.js b/prusa/link/static/main.f2cb94adb8c26ac86d33.js new file mode 100644 index 00000000..972896e2 --- /dev/null +++ b/prusa/link/static/main.f2cb94adb8c26ac86d33.js @@ -0,0 +1 @@ +(()=>{var e={5862:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f844a0a85dde310826fce450c3e149d3.svg"},340:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"d0ce7d704590cb0b868ae92249ee86e8.svg"},3246:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"e6e0734bc2dad609a3e92f1873412f11.svg"},6730:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"557f3616d5a1b407b59795b8328bb51f.svg"},8065:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"2e842fcb7b83af8e1e0d26afd80f8fd9.svg"},8920:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24c2502c54c43441d0bb4bbc17e10a83.svg"},2456:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f6a7f34a841f532dd1e3e4d610d164f6.svg"},9819:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"53df9c11e268c2390b147239f9ee8796.svg"},7038:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"9332c323b291ba7226ddcdabb0c8e7c4.svg"},1656:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"79e90794ba3b36a64a12414decda0932.svg"},9594:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"a443dadfc7e114c74dae6cd64a74db9d.svg"},931:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"926f52aea63cfd597b30096bfe4077c6.svg"},7336:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"44b654f4ca724e154a9bc60335e98847.svg"},9387:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"8657650f85be23655543d28f58941616.svg"},5300:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ea93bcffb8771234f8c641f3b7e9f848.svg"},3482:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ccd215a92d0427a21339a8c38e2a40f3.svg"},5515:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"997c391425907810b4a6e42663d11fd4.svg"},4578:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24e2e49c87df140cf16aa18b4e261f12.svg"},2e3:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"58151992d28dfb34ee417e0ebf6a66b6.svg"},2290:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"c8a0ca767f73685bbe06863f81e9d3cb.svg"},3174:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"39e93870e6b8fd4ef2d9ed668f8c1545.svg"},8796:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"1218694688ee15ee97bcded9e1a75cc8.svg"},1373:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"dfb811cc28f8e3d7c14bcedbe7ef35b8.svg"},4622:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"b891ace1622f34bac5a2b4edb7adc733.svg"},5464:(e,t,a)=>{var i=a(7091),s=a(8065),n=a(4622),o=a(6730),r='

        • Camera Name

          -

        • Snapshot Time

          -

          ';e.exports=r},3478:(e,t,a)=>{var i=a(7091),s=a(340),n=a(5862),o=a(1656),r=i(s),l=i(n),d=i(o),c='

          printer coordinates

          X axis

          0 mm

          Y axis

          0 mm

          Z axis

          0 mm

          stepper motors

          heated bed X and Y move

          move step [mm]

          nozzle Z move

          extruder

          extrude/retract step [mm]

          nozzle temperature

          0°C

          speed

          100%

          heated bed temperature

          0°C

          flow

          100%

          ';e.exports=c},2373:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(3174),b=a(8796),f=i(s),y=i(n),k=i(o),w=i(r),x=i(l),z=i(d),S=i(c),E=i(u),P=i(p),N=i(m),L=i(v),I=i(g),T='

          !!! DO NOT DISTRIBUTE !!! INTERNAL TESTING ONLY !!!

          Upload file

          Add file from

           

          Click to choose a *.sl1 file or drag it here

          Source URL

          Type URL of G-CODE file

          File name

          Type or edit file name

          Progress

          NA

          Size

          NA

          Download Started

          NA

          Remaining Time

          NA

          Autostart

          NA

          Temperatures

          Cameras

          • -

          • -

          ';e.exports=T},7189:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(931),b=a(5515),f=a(3174),y=a(8796),k=a(9594),w=a(8065),x=a(8920),z=i(s),S=i(n),E=i(o),P=i(r),N=i(l),L=i(d),I=i(c),T=i(u),_=i(p),j=i(m),C=i(v),A=i(g),D=i(h),B=i(b),O=i(f),q=i(y),M=i(k),R=i(w),H=i(x),U='

          Local

          0%

          0 GB of 0 GB free

          Add file from

           

          Click to choose a *.sl1 file or drag it here

          Source URL

          Type URL of G-CODE file

          File name

          Type or edit file name

          Progress

          NA

          Size

          NA

          Download Started

          NA

          Remaining Time

          NA

          Autostart

          NA

          ';e.exports=U},5198:(e,t,a)=>{var i=a(7091),s=a(4622),n=a(6730),o='

          ';e.exports=o},2936:(e,t,a)=>{var i=a(7091),s=a(7038),n=a(7336),o=a(1373),r=a(4622),l=a(6730),d=i(s),c=i(n),u=i(o),p='

          version

          api

          hostname

          firmware

          server

          text

          sdk

          frontend

          3.12.0

          system version

          updates

          connection

          PRUSA CONNECT

          connection status

          Successfully connected

          3D printer connection status

          Successfully connected

          printer

          printer name

          printer location

          network error chime

          user

          username

          new password

          repeat password

          current password

          serial number

          serial number

          api key

          api key

          logs

          select file

          • No log file is selected!
          ';e.exports=p},7091:e=>{"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(t.hash&&(e+=t.hash),t.maybeNeedQuotes&&/[\t\n\f\r "'=<>`]/.test(e)?'"'.concat(e,'"'):e)}},6648:(e,t,a)=>{"use strict";a.d(t,{LK:()=>d,O2:()=>n,Z5:()=>g,gJ:()=>m,iT:()=>c,wU:()=>r});var i=a(8236),s=a(1351);const n=window.location.pathname.endsWith("/")?window.location.pathname.slice(0,-1):window.location.pathname,o=()=>new Promise(((e,t)=>{(0,i.o)((e=>t=>{const a=document.getElementById("modal-apiKey"),i=document.importNode(a.content,!0);return i.getElementById("apiKey").addEventListener("keydown",(a=>{"Enter"==a.key&&(t(),e(a.target.value))})),i.getElementById("login").addEventListener("click",(a=>{a.preventDefault();let i=document.getElementById("apiKey").value;t(),e(i)})),i})(e),{timeout:0,closeOutside:!1})})).then((e=>sessionStorage.setItem("apiKey",e))),r=(e="application/json")=>"ApiKey"==sessionStorage.getItem("authType")?{"X-Api-Key":sessionStorage.getItem("apiKey"),Accept:e}:{Accept:e},l=()=>new Promise(((e,t)=>(sessionStorage.setItem("auth","pending"),fetch(`${n}/api/v1/info`,{headers:r()}).then((t=>{if(401==t.status){const a=t.headers.get("WWW-Authenticate").split(" ")[0];return sessionStorage.setItem("authType",a),sessionStorage.removeItem("apiKey"),"ApiKey"==a?o().then((()=>l().then((t=>e(t))))):l().then((t=>e(t)))}{const e=t.json();return 200!=t.status&&e.then((e=>(0,s.S)({data:e}))),e}})).then((t=>{sessionStorage.setItem("auth","true"),e(t)}))))),d=(e,t={})=>u(e,t,"application/json","json"),c=(e,t={})=>u(e,t,"text/plain","text");async function u(e,t={},a,i){if("true"!=sessionStorage.getItem("auth"))throw{code:401};{t.headers={...t.headers,...r(a)};const s=await fetch(`${n}${e}`,t),o=s.status,l={code:o,eTag:s.headers.get("etag")};switch(o){case 401:throw sessionStorage.setItem("auth","false"),l;case 204:case 304:return l;default:const e=await s.text();if(!s.ok){if(e.length>0)try{l.data=JSON.parse(e)}catch{}throw l.data=l.data||{title:`Error ${o}`,message:s.statusText},l}return l.data="json"===i?0===e.length?{}:JSON.parse(e):e,l}}}const p=(e,t,a)=>new Promise(((i,s)=>{"true"==sessionStorage.getItem("auth")?(t.headers={...r(),...t.headers},fetch(a?`${n}${e}?ct=${a}`:e,t).then((e=>{401==e.status&&(sessionStorage.setItem("auth","false"),s(e)),e.ok?e.blob().then((t=>i({url:URL.createObjectURL(t),headers:e.headers}))):s(e)})).catch((e=>s(e)))):s()})),m=(e,t,a={})=>p(`${n}${e}`,{...a,headers:{...a.headers,Accept:"image/*"}},t),v=e=>{const t=document.getElementById("modal-welcome"),a=document.importNode(t.content,!0);return a.querySelector(".close-button").addEventListener("click",e),a},g=()=>null==localStorage.getItem("showWelcome")?new Promise(((e,t)=>{(0,i.o)(v,{closeCallback:()=>{localStorage.setItem("showWelcome",!0),e()}})})).then((()=>l())):l()},1972:(e,t,a)=>{"use strict";a.d(t,{Z:()=>s});var i=a(6648);const s=function(e,t){let a=document.createElement("a");a.href=`${i.O2}${e}`,a.download=t||"",a.click(),a.remove()}},646:(e,t,a)=>{"use strict";function i(e,t=!0){e&&(t&&!e.hasAttribute("hidden")&&e.setAttribute("hidden",!0),!t&&e.hasAttribute("hidden")&&e.removeAttribute("hidden"))}function s(e,t=!0){i(e,!t)}function n(e,t=!0){e&&(t&&!e.hasAttribute("disabled")&&e.setAttribute("disabled",!0),!t&&e.hasAttribute("disabled")&&e.removeAttribute("disabled"))}function o(e,t=!0){return n(e,!t)}function r(){s(document.querySelector("#job .loading-overlay"))}function l(){i(document.querySelector("#job .loading-overlay"))}function d(e,...t){const a=i=>{if(t)for(const e of t)if(e&&e.contains(i.target))return;e&&e(),window.removeEventListener("pointerup",a)};window.addEventListener("pointerup",a)}a.d(t,{H:()=>n,QH:()=>i,QP:()=>r,Ti:()=>d,Zk:()=>l,gL:()=>o,yx:()=>s})},5537:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=function(e){return"string"==typeof e?document.getElementById(e):e||document.body}},9741:e=>{e.exports=function(e,t){let a=t.split("."),i=e;for(const e of a)if(i=i[e],!i)break;return i}},7780:(e,t,a)=>{"use strict";a.d(t,{G3:()=>v,Iu:()=>h,Vb:()=>g,m0:()=>m,ot:()=>f});var i=a(5537),s=a(9741),n=a.n(s);const o=a(4977),r=o.langs,l=o.texts,d=r.indexOf("en");let c,u;function p(){return navigator.language||navigator.userLanguage||""}function m(e){const t=r.indexOf(e);return-1!==t&&(u=t,c=e,localStorage.setItem("lang",c),!0)}function v(){return c}function g(){return[...r]}function h(e,t){let a=n()(l,`${e}.${u}`);if(!a)return a=n()(l,`${e}.${d}`),a||(a=e),b(a,t),a;let i=null;if(t&&(i=Object.assign({},t),delete i.query,delete i.ref),i&&Object.keys(i).length>0){let e,i=a,s=/{{(.*?)}}/g;for(;e=s.exec(a);){let s=a.substr(e.index+2,e[0].length-4);if("query"!==s&&"ref"!==s)if(s in t){let a=t[s];i=i.replace(e[0],a)}else 0}a=i}return b(a,t),a}function b(e,t){if(t)if(t.ref){t.ref.innerHTML=e}else if(t.query){let a=document.querySelector(t.query);a?a.innerHTML=e:console.warn(`cannot find element with "${t.query}" query`)}}function f(e){(0,i.Z)(e).querySelectorAll('[data-label]:not([data-label=""])').forEach((e=>{const t=h(e.getAttribute("data-label")),a=e.getAttribute("data-label-target");a?e.setAttribute(a,t):e.innerHTML=t}))}m(localStorage.getItem("lang"))||m(p().toLowerCase())||m(p().toLowerCase().split("-")[0])||m("en")},2451:(e,t,a)=>{"use strict";a.d(t,{Z:()=>N});var i=a(6648),s=a(646),n=a(7780),o=a(3707),r=a(8236),l=a(5412),d=a(1351);let c,u=!1,p=[];const m={TEN_SEC:"TEN_SEC",THIRTY_SEC:"THIRTY_SEC",SIXTY_SEC:"SIXTY_SEC",EACH_LAYER:"EACH_LAYER",FIFTH_LAYER:"FIFTH_LAYER",MANUAL:"MANUAL"},v=e=>{switch(e){case m.TEN_SEC:return(0,n.Iu)("cameras.trigger-scheme.ten-sec");case m.THIRTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.thirty-sec");case m.SIXTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.sixty-sec");case m.EACH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.each-layer");case m.FIFTH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.fifth-layer");case m.MANUAL:return(0,n.Iu)("cameras.trigger-scheme.manual");default:return`${e}`}},g=()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-suc")),h=(e,t=E)=>{void 0===c&&(c=e.camera?.id),u=e.link.connect.ok,(0,i.LK)("/api/v1/cameras").then((e=>{const a=(e?.data?.camera_list||[]).map((e=>{let t=p.find((t=>t.id===e.camera_id))||{};return e.camera_id===c&&(e.connected||(c=null)),{id:e.camera_id,config:e.config,connected:e.connected,detected:e.detected,stored:e.stored,registered:e.registered,nextSnapshotAt:t?.nextSnapshotAt,lastSnapshotAt:t?.lastSnapshotAt,lastSnapshotUrl:t?.lastSnapshotUrl}})),i=p.filter((e=>!a.find((t=>e.id===t.id))));t&&t(a,i),p=a})).catch(d.S),p.filter((e=>e.connected)).forEach((e=>y(e.id)))},b=e=>`camera_${e}`,f=e=>document.getElementById(b(e)),y=e=>{const t=p.find((t=>t.id===e));if(!t)return;const a=new Date;t.lastSnapshotAt&&t.nextSnapshotAt&&a{const n=p.find((t=>t.id===e)),o=b(e),r=document.querySelector(`#${o} .camera__no-snapshot`),l=document.querySelector(`#${o} .camera__snapshot`);if(r&&(0,s.yx)(r,!1),l&&((0,s.yx)(l,!0),l.src=t),n){const e=`${i.get("cache-control")}`.match(/max-age=(\d+)/);let s;e&&(s=parseInt(e[1],10)),s||(s=11);const o=i.get("expires"),r=i.get("last-modified"),l=e=>{const t=new Date;return new Date(t.getTime()+1e3*e)};n.nextSnapshotAt=o?new Date(o):l(s),n.nextSnapshotAt{e||(e=c);const t=e?p.find((t=>t.id===e)):null,a=document.getElementById("camera-snapshot-picture"),i=document.getElementById("camera-snapshot-time"),s=document.getElementById("camera-snapshot-name"),[n,o,r,l]=t?.lastSnapshotAt?[t.id,t.config.name,t.lastSnapshotAt.toLocaleString(),t.lastSnapshotUrl]:[null,"-","-",""];c=n,a&&(a.src=l),i&&(i.innerText=r),s&&(s.innerText=o)},w=(e,t,a=!1)=>{e.querySelector(".camera__name").innerText=t.config.name,e.querySelector(".camera__path").innerText=t.config.path||"-",e.querySelector(".camera__driver").innerText=t.config.driver||"-",e.querySelector(".camera__cloud").innerText=t.registered?(0,n.Iu)("camera.cloud.linked"):(0,n.Iu)("camera.cloud.not-linked");const i=e.querySelector(".camera__register"),o=e.querySelector(".camera__unregister"),r=e.querySelector(".camera__add"),l=e.querySelector(".camera__remove"),d=e.querySelector(".camera__settings");(0,s.yx)(i,u&&t.connected&&!t.registered),(0,s.yx)(o,u&&t.connected&&t.registered),(0,s.yx)(r,!1),(0,s.yx)(l,!t.connected),(0,s.yx)(d,t.connected),a&&(r.title=(0,n.Iu)("camera.btn.connect"),d.title=(0,n.Iu)("camera.btn.settings"),i.title=(0,n.Iu)("camera.btn.link"),o.title=(0,n.Iu)("camera.btn.unlink"),r.addEventListener("click",(e=>{e.stopPropagation(),z(t.id)}),!1),l.addEventListener("click",(e=>{e.stopPropagation(),S(t.id)}),!1),d.addEventListener("click",(e=>{e.stopPropagation(),P(t.id)}),!1),i.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"POST")}),!1),o.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"DELETE")}),!1))},x=(e,t)=>{(0,i.LK)(`/api/v1/cameras/${e}/connection`,{method:t}).then((()=>g())).catch(d.S)},z=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:t.config})}).then((()=>g())).catch(d.S)},S=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"DELETE"}).then((()=>g())).catch(d.S)},E=(e,t)=>{const a=document.getElementById("cameras-list");t.forEach((e=>{const t=f(e.id);t&&a.removeChild(t)})),e.sort(((e,t)=>t.connected-e.connected)).forEach((e=>{const t=f(e.id);if(t)w(t,e);else{const t=(e=>{const t=document.getElementById("camera-list-item")?.content;if(!t)return null;const a=document.importNode(t,!0),i=a.querySelector("li"),o=e.id;return i.addEventListener("click",(e=>{const t=p.find((e=>e.id===o));t&&t.connected&&k(t.id),e.preventDefault()}),!1),i.id=b(e.id),a.querySelector(".camera__path__label").innerText=(0,n.Iu)("camera.path"),a.querySelector(".camera__driver__label").innerText=(0,n.Iu)("camera.driver"),a.querySelector(".camera__cloud__label").innerText=(0,n.Iu)("camera.cloud.label"),(0,s.yx)(a.querySelector(".camera__snapshot"),!1),w(a,e,!0),a})(e);t&&a.appendChild(t)}}))},P=e=>new Promise(((t,a)=>{(0,r.o)(((e,t)=>t=>{const a=`/api/v1/cameras/${e}`,r=document.getElementById("modal-camera-settings"),c=document.importNode(r.content,!0),u=c.getElementById("camera-settings__name"),p=c.getElementById("camera-settings__focus"),g=l.L.init(c.getElementById("camera-settings__resolution"),"camera-settings__resolution"),h=l.L.init(c.getElementById("camera-settings__trigger-scheme"),"camera-settings__trigger-scheme"),b=c.getElementById("yes");return(0,i.LK)(a).then((e=>{const r=e.data,l=r.available_resolutions.sort(((e,t)=>e.width===t.width?t.height-e.height:t.width-e.width)).map(((e,t)=>`${e.width}x${e.height}`)),c=Object.keys(m),f=c.map((e=>v(e))),y=r.capabilities.includes("FOCUS");u.value=r.name,g.setOptions(l),g.value=`${r.resolution.width}x${r.resolution.height}`,h.setOptions(f),h.value=v(r.trigger_scheme),(0,s.yx)(p.parentNode,y),console.log(`DEBUG: has focus (${y})`,r),y&&(p.value=Math.round(100*r.focus)),b.addEventListener("click",(()=>{const[e,s]=g.value.split("x").map((e=>parseInt(e))),r=c[f.indexOf(h.value)],l=y?{focus:p.value/100}:{};(0,i.LK)(`${a}/config`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u.value,resolution:{width:e,height:s},trigger_scheme:r,...l})}).then((()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-config-success")))).catch(d.S).finally(t)}))})).catch(d.S),c.getElementById("no").addEventListener("click",(()=>t())),c})(e),{timeout:0,closeOutside:!1})})).then((()=>{lastUpdated=null,h()})),N={load:e=>{p=[],(0,n.Iu)("cameras.link",{query:"#title-status-label"}),h(e)},update:h,getCameraNode:f,getCameraNodeId:b,updateCurrentCamera:k}},732:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(646),n=a(5489),o=a(6648);var r=a(1351),l=a(4800);a(7838);let d=1,c=1;const u=e=>{(0,n.ZP)("control",e),function(e){const t=e.state,a=document.querySelectorAll("#control button"),i=["extrude","retract"],n=["flowrate","bed","nozzle","speed"],o=[...n,...i,"move-step","extrude-retract-step","heated-bed-xy-move"];if([l.PT.PRINTING||l.PT.BUSY||l.PT.PAUSED].includes(t)){const e=t===l.PT.PAUSED?o:n;a.forEach((t=>{const a=t.id||t.parentNode.id||t.parentNode.parentNode.id;(0,s.H)(t,!e.includes(a))}))}const r=e.telemetry.temperature.nozzle.current||0,d=e.printer.minExtrusionTemp||0,c=r&&d&&r>=d;i.forEach((e=>(0,s.H)(document.getElementById(e),!c)))}(e)};function p(e,t){if("move"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"jog",...e})}))(function(e){const t=e.includes("-"),a=e.replace(RegExp("[+-]"),"");return a?{[a]:t?-d:d}:(console.error(`"${e}" is not valid direction`),{})}(t)).catch((e=>(0,r.S)(e)))}else if("home"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"home",axes:e})}))(t.split(",")).catch((e=>(0,r.S)(e)))}}function m(e,t,a){function i(e){return Number.parseFloat(e.getAttribute("data-step"))}if(e){const n=e.querySelectorAll("button[data-step]"),o=e=>{n.forEach((t=>{i(t)===e?((0,s.H)(t),t.setAttribute("selected",!0)):((0,s.gL)(t),t.hasAttribute("selected")&&t.removeAttribute("selected"))}))};n.forEach((e=>{const t=i(e);isNaN(t)||(e.onclick=()=>{o(t),a(t)})})),o(t)}}const v={load:e=>{(0,i.Iu)("control.title",{query:"#title-status-label"}),function(e){function t(e,t){switch(e){case"bed":return i=t,(0,o.LK)("/api/printer/bed",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",target:i})});case"flowrate":return a=t,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"flowrate",factor:a})});case"nozzle":return(e=>(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",targets:{tool0:e}})}))(t);case"speed":return(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"speed",factor:e})}))(t);default:throw Error("Unknown property!")}var a,i}e&&e.querySelectorAll(".input-wrapper").forEach((e=>{const a=e.querySelector("input"),i=e.querySelector("button");if(a){const e=()=>{const e=a.getAttribute("data-action"),i=Number.parseFloat(a.value);isNaN(i)||t(e,i).then((e=>{a.value=""})).catch((e=>(0,r.S)(e)))};a.onkeyup=t=>{"Enter"===t.key&&(e(),a.blur())},i&&(i.onclick=e)}}))}(document.querySelector("#control")),m(document.querySelector("#control #move-step"),d,(e=>d=e)),m(document.querySelector("#control #extrude-retract-step"),c,(e=>c=e)),function(){const e=document.querySelector("#control #disable-steppers");e&&(e.onclick=()=>{(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"disable_steppers"})}).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #extrude");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #retract");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:-e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #heated-bed-xy-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),function(){const e=document.querySelector("#control #nozzle-z-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),u(e)},update:u}},5502:(e,t,a)=>{"use strict";a.d(t,{Z:()=>S});var i=a(7780);const s=(0,i.Iu)("prop.at"),n=(0,i.Iu)("unit.h"),o=(0,i.Iu)("prop.less-than"),r=(0,i.Iu)("unit.min"),l=((0,i.Iu)("unit.ml"),(0,i.Iu)("unit.rpm")),d=(0,i.Iu)("prop.today-at"),c=(0,i.Iu)("prop.tmw-at"),u=(0,i.Iu)("unit.b"),p=(0,i.Iu)("unit.kb"),m=(0,i.Iu)("unit.mb"),v=(0,i.Iu)("unit.gb"),g=(0,i.Iu)("prop.true"),h=(0,i.Iu)("prop.false");function b(e,t=!0,a=1){return e>0?t?e.toFixed(a):e:0}function f(e){const t=new Date(1e3*e);var a=localStorage.getItem("lang");return(t.toLocaleDateString(a,{year:"numeric",month:"numeric",day:"numeric"})+" "+t.toLocaleTimeString(a,{hour:"numeric",minute:"numeric"})).substring(0,25)}function y(e){let t="00:00";if(e){let a=new Date,i=new Date(a.getTime()+1e3*e),n=new Date(a);n.setDate(n.getDate()+1);let o="";if(i.getDate()==a.getDate()&&i.getMonth()==a.getMonth())o=`${d} `;else if(i.getDate()==n.getDate()&&i.getMonth()==n.getMonth())o=`${c} `;else{let e={month:"numeric",day:"numeric"};o=`${i.toLocaleString(window.navigator.language,e)} ${s} `}t=o+("0"+i.getHours()).substr(-2)+":"+("0"+i.getMinutes()).substr(-2)}return t}function k(e){if(e<60)return o;const t=Math.floor(e/60%60),a=Math.floor(e/3600);return(a>0?`${a} ${n}`:"")+(t>0?` ${t} ${r}`:"")}function w(e){let t=e;const a=[u,p,m,v];for(let e=0;e{if(void 0===t||null===t&&"progress"!==e)return(0,i.Iu)("prop.na");switch(e){case"number":return b(t);case"temp":return b(t)+" °C";case"temp_int":return b(t,0)+"°C";case"fan":return b(t)+` ${l}`;case"print":case"progressPct":return b(t||0,!0,0)+"%";case"pos":return b(t)+" mm";case"date":return f(t);case"time":return k(t);case"timeEst":return y(t);case"progress":return b(100*(t||0),!0,0)+"%";case"percent":return`${b(t||0,!0,0)}%`;case"material":return t||(0,i.Iu)("prop.na");case"size":return w(t);case"boolean":return x(t);case"diameter":return b(t,!0,2)+" mm";default:return t}},S=(e,t)=>z(e,t)},5412:(e,t,a)=>{"use strict";a.d(t,{L:()=>s});var i=a(5537);class s{set value(e){this._value=e,this.updateLabel()}get value(){return this._value}constructor(e,t,a){const i=this;this._label=t,this._ul=a,this._value=t.innerHTML,this.is_open=!1,this._options=[],this._onKeyDown=e=>{if(i.is_open){switch(e.key.toLowerCase()){case"escape":return void i.close();case"arrowdown":let e=!1;for(const t of this._ul.childNodes){if(e){this._highlight(t);break}t.classList?.contains("select")&&(e=!0)}break;case"arrowup":let t=null;for(const e of this._ul.childNodes){if(e.classList?.contains("select")){t&&this._highlight(t);break}t=e}break;case"enter":for(const e of this._ul.childNodes)if(e.classList.contains("select")){const t=e.innerText;this.value=t,this.onselect&&this.onselect(t),this.close();break}}e.preventDefault()}},this._onClick=t=>{const a=t.target.parentNode;if(!i.is_open)return!0;a!==e&&i.close()},window.addEventListener("keydown",this._onKeyDown,!1),window.addEventListener("click",this._onClick,!1),this.onselect=void 0,e.onclick=e=>{e.preventDefault(),this.is_open?this.close():this.open()}}_highlight(e){this._ul.childNodes.forEach((t=>{t===e?t.classList.add("select"):t.classList.remove("select")}))}destructor(){window.removeEventListener("keypress",this._onKeyPress),window.removeEventListener("click",this._onClick)}static init(e,t){let a=(0,i.Z)(e);const n=document.getElementById("dropdown-template"),o="dropdown"===a.getAttribute("data-type")?a:a.querySelector('select[data-type="dropdown"]');if(!o)return;o.after(document.importNode(n.content,!0));const r=o.nextElementSibling;r.id=t,o.remove();const l=r.querySelector(".dropdown-btn"),d=l.querySelector(".dropdown-label"),c=r.querySelector(".dropdown-content ul");return l&&d&&c?new s(l,d,c):void 0}setOptions(e){this._options=e}updateLabel(){this._label.innerHTML=this._value}select(e){this._label.innerHTML=e}open(){this._ul.classList.contains("open")||(this._options.forEach((e=>{const t=document.createElement("li");e===this._value&&(t.className="select selected"),t.innerText=e,t.onclick=()=>{this.select(e),this.value=e,this.onselect&&this.onselect(e),this.close()},t.onmouseover=()=>this._highlight(t),this._ul.appendChild(t)})),this._ul.classList.add("open")),this.is_open=!0}close(){for(this._ul.classList.remove(["open"]);this._ul.firstChild;)this._ul.removeChild(this._ul.firstChild);this.is_open=!1}}},1351:(e,t,a)=>{"use strict";a.d(t,{S:()=>n});var i=a(3707);let s={};function n(e,t){let a=e?.data?.title||t?.fallbackMessage?.title||"Error",n=e?.data?.message||t?.fallbackMessage?.message||"Action can not be performed",o=!1;if(e?.data){const t=e.data;t.code&&(a+=`- ${t.code}`,"7"==`${t.code}`[3]&&(o=!0)),t.url&&(n+=`
          more info`)}const r=e?.data?.code||`${a}\n${n}`;if(s[r])return;s[r]=!0;const l=()=>s[r]=!1;o?(0,i.Kp)(a,n,l):(0,i.vU)(a,n,l)}},8236:(e,t,a)=>{"use strict";a.d(t,{o:()=>n});var i=a(7780);const s={count:0,current:0},n=(e,t={})=>{const a=Object.assign({timeout:5500,closeOutside:!0},t),n=s.count;s.count=s.count+1;const o=document.querySelector(".modal-box");t.className&&o.classList.add(t.className);const r=o.parentElement;for(;o.firstChild;)o.removeChild(o.firstChild);const l=()=>{n==s.current&&r.classList.contains("show-modal")&&(r.classList.remove("show-modal"),a.closeCallback&&a.closeCallback())},d=e=>{e.target===r&&l()};a.closeOutside&&window.addEventListener("click",d);const c=e(l);s.current=n,o.appendChild(c),(0,i.ot)(o),r.classList.add("show-modal"),a.timeout>0&&setTimeout(l,a.timeout)}},5951:(e,t,a)=>{"use strict";function i(e,t,a="right"){if(!e)return;const i=e.querySelector(".fill");if(i){const e=`${["top","right","bottom","left"].map((e=>(e=>e===a?100-(t||0)+"%":0)(e))).join(" ")}`;i.style.inset=e}}a.d(t,{g:()=>i})},2957:(e,t,a)=>{"use strict";a.d(t,{Z:()=>w});var i=a(7780),s=a(5489),n=a(6648),o=a(646),r=a(1351);var l=a(3707),d=a(8236);let c=null,u=null,p=null;const m=a(5493).Z,v=()=>(0,l.Vp)((0,i.Iu)("ntf.success"),(0,i.Iu)("ntf.settings-suc"));function g(e){const t=document.getElementById("api_key");t&&(t.innerText=e)}function h(e,t){(0,s.ZP)("con-settings",e.link),function(e,t){const a=document.getElementById("conn-prusa-connect-status"),i=document.getElementById("conn-prusa-connect-url"),s=document.getElementById("edit-connect-del"),n="FINISHED"===e.connect.registration,{hostname:r,tls:l,port:d}=e.connect.settings,{ok:c,message:u}=e.connect,m=c&&n,v=document.getElementById("conn-prusa-connect-status-"+(m?"ok":"not-ok")),g=`${l?"https":"http"}://${r}${d?`:${d}`:""}`,h=`(${g})`;(t||p!==g)&&(i.value=g,p=g);(0,o.QH)(i.parentNode.parentNode,n),s&&(0,o.yx)(s,n||!c);b(a,v,m,u,h)}(e.link,t),function(e,t){const a=document.getElementById("conn-printer-status"),{port:i,baudrate:s}=t.printer.settings,{ok:n,message:o}=t.printer,r=document.getElementById("conn-printer-status-"+(n?"ok":"not-ok"));b(a,r,n,o,`(${i||"/dev/ttyACM0"} @ ${s||0}bps)`)}(e.state,e.link)}function b(e,t,a,s,n){e&&e.setAttribute("ok",Boolean(a)),t&&(t.innerHTML=(a?(0,i.Iu)("conn.suc"):s)+"
          "+n)}function f(e){switch(e.toLowerCase()){case"python":return(0,i.Iu)("sys-version.python");case"description":return(0,i.Iu)("sys-version.description");case"id":return(0,i.Iu)("sys-version.id");case"os":return(0,i.Iu)("sys-version.os");default:return e}}const y=(e,t,a)=>{const s=document.getElementById("modal-sysupgrade"),l=document.importNode(s.content,!0),d=l.getElementById("modal-sysupgrade__target"),c=l.getElementById("modal-sysupgrade__current"),p=l.getElementById("modal-sysupgrade__version"),m=l.getElementById("modal-sysupgrade__status"),v=l.getElementById("modal-sysupgrade__spinner"),g=l.getElementById("yes"),h=l.getElementById("no");return d.innerText=t,c.innerText=u,p.innerText=a,g.addEventListener("click",(t=>{t.preventDefault(),(0,o.H)(g,!0),(0,o.H)(h,!0),(0,o.yx)(g,!1),(0,o.yx)(h,!1),(0,o.yx)(v,!0),m.innerText=(0,i.Iu)("msg.sysupgrade.pending"),(0,n.LK)("/api/v1/update/prusalink",{method:"POST"}).then((()=>(m.innerText=(0,i.Iu)("msg.sysupgrade.wait-for-printer"),k(a)))).catch((e=>(0,r.S)(e))).finally((()=>{e(),window.location.href="/"}))})),h.addEventListener("click",(()=>e())),l},k=e=>new Promise(((e,t)=>{const a=()=>(0,n.LK)("/api/version").then((t=>{e()})).catch((e=>setTimeout(a,2500)));setTimeout(a,5e3)})),w={load:e=>{(0,i.Iu)("settings.title",{query:"#title-status-label"}),(0,n.LK)("/api/version?system=1").then((e=>{const t={version:e.data};u=t.version.server,(0,s.ZP)("settings",t),function(e){const t=document.querySelector("#sys-version .table");if(t)for(const[a,i]of Object.entries(e.version.system)){const e=document.createElement("div");e.className="row";const s=document.createElement("div");s.className="col txt-sm",s.innerHTML=`

          ${f(a)}

          `,e.appendChild(s);const n=document.createElement("div");n.className="col txt-md",n.innerHTML=`

          ${i}

          `,e.appendChild(n),t.appendChild(e)}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.getElementById("updates-check"),t=document.getElementById("updates-check__spinner"),a=a=>{a&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(t,a),(0,o.gL)(e,!a)};e&&t&&(e.onclick=()=>{a(!0),(0,n.LK)("/api/v1/update/prusalink").then((t=>{const a=t.data?.new_version,s=[{name:"PrusaLink",new_version:a}],n=e.parentNode.parentNode.parentNode;s.forEach((e=>{const t=document.createElement("div"),a=document.createElement("div"),s=document.createElement("p"),o=document.createElement("div"),r=document.createElement("p"),l=document.createElement("div"),c=document.createElement("span"),p=document.createElement("span"),m=document.createElement("span"),v="PrusaLink";if(t.className="row update-pkg",a.className="col",o.className="col",l.className="col",s.className="txt-bold txt-grey txt-sm",r.className="txt-md",c.className="txt-grey txt-sm",m.className="txt-grey txt-sm",s.innerText=v,p.innerHTML=" → ",e.new_version){c.innerText=u,m.innerText=e.new_version;const t=document.createElement("button"),a=document.createElement("p");a.innerText=(0,i.Iu)("btn.upgrade"),t.className="action",t.appendChild(a),l.appendChild(t),t.onclick=()=>(0,d.o)((t=>y(t,v,e.new_version)),{timeout:0,closeOutside:!1})}else m.innerText="The package is up to date";r.appendChild(c),r.appendChild(p),r.appendChild(m),a.appendChild(s),o.appendChild(r),t.appendChild(a),t.appendChild(o),t.appendChild(l),n.appendChild(t)}))})).catch((e=>(0,r.S)(e))).finally((()=>a(!1)))})}(),function(e){h(e,!0),document.getElementById("edit-connect-del").addEventListener("click",(t=>{(0,n.LK)("/api/connection",{method:"DELETE"}).then(v).catch((e=>(0,r.S)(e))).finally((()=>e.updateConnection()))}));const t=document.getElementById("edit-connect-set"),a=document.getElementById("edit-connect-set__spinner"),i=e=>{e&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(a,e),(0,o.gL)(t,!e)};t.addEventListener("click",(t=>{i(!0);const a=document.getElementById("conn-prusa-connect-url")?.value;if(!a)return;const s=new URL(a);(0,n.LK)("/api/connection",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connect:{hostname:s.hostname,port:s.port?parseInt(s.port):0,tls:s.protocol.startsWith("https")?1:0}})}).then((t=>{const a=t?.data?.url;a&&window.open(a,"_blank"),setTimeout((()=>{e.updateConnection().finally((()=>i(!1)))}),5e3)})).catch((e=>{i(!1),(0,r.S)(e)}))}))}(e),(0,n.LK)("/api/settings").then((e=>{const t=e.data;!function(e){const t=document.querySelector("#settings #printer-name"),a=document.querySelector("#settings #printer-location"),i=document.querySelector("#settings #printer-network_error_chime"),s=document.querySelector("#settings #edit-printer"),l=()=>{(0,o.gL)(s,t.value.length>0&&a.value.length>0)};t.oninput=l,a.oninput=l,i.oninput=l,t.value=e.printer?.name||"",a.value=e.printer?.location||"",i.checked=!!e.printer?.network_error_chime,"api-key"in e&&g(e["api-key"]),s.onclick=()=>{(({name:e,location:t,network_error_chime:a})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({printer:{name:e,location:t},network_error_chime:a})}))({name:t.value,location:a.value,network_error_chime:i.checked}).then((()=>v())).catch((e=>(0,r.S)(e)))},l()}(t),function(e){const t=document.querySelector("#settings #username"),a=document.querySelector("#settings #password"),i=document.querySelector("#settings #new-password"),s=document.querySelector("#settings #re-password"),l=document.querySelector("#settings #edit-user"),d=()=>{(0,o.gL)(l,a.value.length>0&&(t.value.length>0||i.value.length>0&&s.value.length>0))};t.oninput=d,a.oninput=d,i.oninput=d,s.oninput=d,t.value=e.username||"",d(),l.onclick=()=>{((e,{username:t,newPassword:a,rePassword:i})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:{password:e,username:t,new_password:a,new_repassword:i}})}))(a.value,{username:t.value||void 0,newPassword:i.value||void 0,rePassword:s.value||void 0}).then((()=>v())).catch((e=>(0,r.S)(e)))}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.querySelector("#settings #serial"),t=document.querySelector("#settings #edit-serial"),a=()=>{if(e&&t){c&&(e.value=`${c}`);const i=()=>{(0,o.gL)(t,!c&&e.value.length>0),(0,o.yx)(t,!c)};i(),e.oninput=i,(0,o.gL)(e,!c);const s=()=>{var t;(t=e.value,(0,n.LK)("/api/settings/sn",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:t})})).then((e=>{c=e.data.serial,v()})).catch((e=>(0,r.S)(e))).finally((()=>a()))};e.onkeyup=t=>{"Enter"===t.key&&(s(),e.blur())},t.onclick=s}};(0,n.LK)("/api/settings/sn",{headers:{"Content-Type":"application/json"}}).then((e=>{c=e.data.serial})).catch((e=>(0,r.S)(e))).finally((()=>a()))}(),function(){const e=document.getElementById("api_key-reset");e&&e.addEventListener("click",(()=>{(0,n.LK)("/api/settings/apikey",{method:"POST"}).then((e=>{g(e.data["api-key"]),v()})).catch((e=>(0,r.S)(e)))}),!1)}(),m?.load(),e.updateConnection()},update:e=>{m?.update(),h(e,!1)}}},5493:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(6648),n=a(1972),o=a(5412),r=a(1351),l=a(5502);let d=null,c=null;const u=67108864;function p(e){return`
        • ${e}
        • `}const m=()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files;if(d){const e=t.find((e=>e.name===d));e&&(!c||e.date>c)&&(c=e.date,e.size>u?function(){const e=document.querySelector("ul.logs"),t=(0,i.Iu)("logs.file-too-large",{size:(0,l.Z)("size",u)});e&&(e.innerHTML=p(t))}():(a=d,(0,s.iT)(`/api/logs/${a}`).then((e=>{const t=document.querySelector("ul.logs");t&&(e.data?t.innerHTML=e.data.split("\n").map((e=>p(e))).join(""):t.innerHTML=p((0,i.Iu)("logs.empty-file")))}))))}var a})).catch((e=>(0,r.S)(e)))},v={load:()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files,a=o.L.init("settings","log-list"),s=t.map((e=>e.name)),r=(0,i.Iu)("logs.select-file-placeholder");a.setOptions(s),a.select(r),a.onselect=e=>{!function(e){d=e,c=null,document.getElementById("download-log").onclick=()=>{(0,n.Z)(`/api/logs/${e}`,e)},m()}(e)}})).catch((e=>(0,r.S)(e)))},update:m}},3707:(e,t,a)=>{"use strict";a.d(t,{Kp:()=>o,Vp:()=>r,vU:()=>l});const i=document.getElementById("prusa-toast"),s={info:10500,success:10500,warning:10500,error:10500};function n({title:e,message:t,type:a,onClose:n}){const o=((e,t,a)=>{const i=document.getElementById("toast"),s=document.importNode(i.content,!0),n=s.querySelector("article");return n.className=a,s.querySelector("p").innerHTML=e,s.querySelector(".toast-body").innerHTML=t,n})(e,t,a),r=()=>{i.removeChild(o),n?.()};o.querySelector("span").addEventListener("click",(e=>{e.preventDefault(),r()}));const l=s[a];l&&setTimeout(r,l),i.appendChild(o)}function o(e,t,a){n({type:"warning",title:e,message:t,onClose:a})}function r(e,t,a){n({type:"success",title:e,message:t,onClose:a})}function l(e,t,a){n({type:"error",title:e,message:t,onClose:a})}},5489:(e,t,a)=>{"use strict";a.d(t,{NA:()=>n,ZP:()=>r,zR:()=>o});var i=a(646),s=a(5502);const n=(e,t)=>{try{const a=e.split(".");let i=t;for(;a.length;)i=i[a.shift()];return i}catch(e){return}},o=(e,t)=>{document.querySelectorAll(`[data-type="${e}"]`).forEach((e=>{const a=e.dataset.where,o=e.dataset.zeroes,r=a?n(a,t):t;e.innerHTML=(0,s.Z)(e.dataset.format,r),(0,i.QH)(e,"hide"===o&&!r)}))},r=o},2038:(e,t,a)=>{"use strict";a.d(t,{$:()=>r,i:()=>l});var i=a(8236),s=a(646),n=a(4800),o=a(7780);const r=(e,t,a)=>{const i=document.getElementById("modal-question"),n=document.importNode(i.content,!0),r=n.getElementById("modal-question-label"),l=document.createElement("p"),d=document.createElement("p");l.className="txt-sm my-md txt-bold",l.innerText=t,r.innerText=(0,o.Iu)("msg.file-exists.title"),d.innerText=(0,o.Iu)("msg.file-exists.overwrite-it"),r.parentNode.append(l),r.parentNode.append(d);const c=n.getElementById("yes"),u=n.getElementById("no");return u.addEventListener("click",e),c.addEventListener("click",(t=>{t.preventDefault(),(0,s.H)(c,!0),(0,s.H)(u,!0),a(),e()})),n},l=e=>{e.addEventListener("change",(t=>{e.checked&&e.getAttribute("data-link-state")!==n.PT.READY&&(0,i.o)((t=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),n=i.getElementById("yes"),o=i.getElementById("no");return n.addEventListener("click",(a=>{a.preventDefault(),(0,s.H)(n,!0),(0,s.H)(o,!0),t.checked=!0,e()})),o.addEventListener("click",(()=>{t.checked=!1,e()})),i})(t,e)),{timeout:0,closeOutside:!1})}))}},7049:(e,t,a)=>{"use strict";a.d(t,{Z:()=>k});var i=a(6648),s=a(1351),n=a(646),o=a(3707),r=a(7780),l=a(5951),d=a(2038),c=a(5489),u=a(4800),p=a(8495);let m=!1,v=null;function g(e){const t=p.Z.getContext(),a=u.cG.includes(e),i=document.querySelector("#upld-remote-start-pt");if(i&&(i.setAttribute("data-link-state",e),a||(i.checked=!1),(0,n.H)(i,!a)),t.transfer?.id){y("uploading"),(0,c.ZP)("download",t.transfer);const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.transfer.progress||0)}else y("choose")}function h(e){const t=e.data;if(![200,201,204].includes(e.code))return(0,s.S)(e),void f();if(t){if("FROM_WEB"===t.type){y("uploading"),(0,c.ZP)("download",{...t,time_start:t.time_transferring?Math.round((new Date).getTime()/1e3)-t.time_transferring:null});const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.progress||0)}}else{if(m)return function(){const e=(0,r.Iu)("ntf.success"),t=(0,r.Iu)("ntf.upld-suc",{file_name:""});(0,o.Vp)(e,t)}(),void f();y("choose")}}const b=(e,t,a,s)=>{if("local"===t)return e=e.split("?")[0].split("&")[0].split("#")[0],(0,i.LK)(`/api/download/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e,destination:a,...s})}).then((e=>function(e){y("uploading");const t=document.querySelector("#upld-remote .progress-bar");(0,l.g)(t,0);const a=(0,r.Iu)("ntf.success"),i=(0,r.Iu)("ntf.upld-start");(0,o.Vp)(a,i)}())).catch((e=>h(e)));(0,o.vU)("Can't upload to "+t,"You can upload only to local storage via remote upload!")};function f(){y("choose"),function(e){const t=document.querySelector("#upld-remote .progress-bar");t&&(0,l.g)(t,e||0)}(0),(0,c.ZP)("download",{}),v=null}function y(e){m="uploading"==e;const t=document.getElementById("upld-remote");t&&t.setAttribute("data-state",e)}const k={init:function(e,t){const a=document.getElementById("upld-remote");if(a){const i=a.querySelector("#remote-url"),s=a.querySelector("#remote-file-name"),o=a.querySelector("#upld-file"),r=a.querySelector("#upld-remote-start-pt");r&&(0,d.i)(r),o.onclick=()=>b(i.value,e,t,{to_print:r.checked,rename:s.value});const l=()=>{(0,n.H)(o,""===i.value)};l(),i.oninput=l}g()},update:g,get isUploading(){return m}}},7838:(e,t,a)=>{"use strict";a.r(t),a.d(t,{context:()=>Ve,default:()=>Xe});var i=a(7780);const s=500;let n=100,o=new Map;const r=(e,t)=>{o=e,n=t};function l(){const e=document.getElementById("graph");e&&(0==e.childElementCount&&function(){const e=document.getElementById("graph-template"),t=document.importNode(e.content,!0);document.getElementById("graph").appendChild(t),(0,i.ot)("graph")}(),o.forEach(((e,t)=>{!function(e,t){const a=(new Date).getTime();let i=[];if(e.length>1){let t=e[0],o=s-2.66*(a-t[0]-1e4)/1e3;for(let e=1;e1&&e[1][0]{var n=new XMLHttpRequest;const o=()=>{s(void 0)};!function(e,t){if(t){const a=e=>{if(!e.lengthComputable)return;let a=Math.round(e.loaded/e.total*100);t({loaded:e.loaded,total:e.total,percentage:a})};e.upload.addEventListener("progress",a,!1)}}(n,a.onProgress),n.addEventListener("load",(e=>{const t=function(e){function t(e){try{return JSON.parse(e)}catch{return}}return{status:e.status,statusText:e.statusText,ok:e.status>=200&&e.status<=299,data:t(e.response)}}(e.target);t.ok?i(t):s(t)}),!1),n.addEventListener("error",o,!1),n.addEventListener("abort",o,!1),n.open("PUT",`${m.O2}${e}`),a.print&&n.setRequestHeader("Print-After-Upload","?1"),n.setRequestHeader("Overwrite","?1"),n.setRequestHeader("Content-Type","text/x.gcode");for(const[e,t]of Object.entries((0,m.wU)()))n.setRequestHeader(e,t);n.send(t)}))};var g=a(2038),h=a(4800),b=a(8236);let f=!1,y=0;function k(e,t,a,i,s){const n=document.querySelector(e);n&&(n.setAttribute("accept",i.join(", ")),n.onchange=()=>{if(n.files.length>0&&!f){let e=n.files[0];S(e,t,a,s?.checked||!1)}})}function w(){[document.querySelector('#upld-direct input[type="file"]'),document.querySelector('#drop-zone input[type="file"]')].filter((e=>!!e)).forEach((e=>e.value="")),z(0),x("choose")}function x(e){f="uploading"===e;const t=document.getElementById("upld-direct");t&&t.setAttribute("data-state",e)}function z(e){y=e;const t=document.getElementById("upld-progress");t&&(t.innerHTML=`${e} %`)}const S=(e,t,a,s)=>{const n=["/api/v1/files",t,a,e.name].filter((e=>!!e)).join("/"),o=e.display_name||e.name,r=()=>e.arrayBuffer().then((e=>{x("uploading"),z(0),v(n,e,{onProgress:e=>{return t=e.percentage,x("uploading"),void z(t);var t},print:s}).then((()=>function(e){const t=(0,i.Iu)("ntf.success"),a=(0,i.Iu)("ntf.upld-suc",{file_name:e});(0,c.Vp)(t,a)}(o))).catch((e=>function(e,t){if(t)(0,u.S)(t);else{const t=(0,i.Iu)("ntf.error"),a=(0,i.Iu)("ntf.upld-unsuc",{file_name:e});(0,c.vU)(t,a)}}(o,e))).finally((()=>w()))}));(0,m.LK)(n,{method:"HEAD"}).then((()=>{try{(0,b.o)((e=>(0,g.$)((()=>{e(),w()}),o,r)),{timeout:0,closeOutside:!1})}catch(e){console.error("Modal error",e)}})).catch((()=>r()))};const E={init:function(e,t,a){(0,i.Iu)("upld.direct.choose",{query:"#upld-direct p",file:a.join(", ")}),function(e,t,a){const i=document.getElementById("upld-direct-start-pt");i&&(0,g.i)(i);const s=document.getElementById("drop-zone");s&&(document.ondragenter=e=>(0,p.yx)(s,!0),s.ondragleave=e=>(0,p.yx)(s,!1),document.ondrop=e=>(0,p.yx)(s,!1),k('#drop-zone input[type="file"]',e,t,a,i));k('#upld-direct input[type="file"]',e,t,a,i)}(e,t,a),f&&(x("uploading"),z(y))},update:function(e){const t=h.cG.includes(e),a=document.querySelector("#upld-direct-start-pt");a&&(a.setAttribute("data-link-state",e),t||(a.checked=!1),(0,p.H)(a,!t))},get isUploading(){return f},initInputByQuery:k};const P=class{get selected(){return this._selected}get isLocked(){return this._isLocked}lock(){this._isLocked=!0,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.getAttribute("data-tab-btn")!==this.selected&&e.setAttribute("locked",!0)}))}unlock(){this._isLocked=!1,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.hasAttribute("locked")&&e.removeAttribute("locked")}))}constructor(){this._root=null,this._selected=null,this._isLocked=!1}init(e){this._root=e,this._root&&(e.querySelectorAll("[data-tab-btn]").forEach((e=>{e.onclick=()=>{if(!this._isLocked){const t=e.getAttribute("data-tab-btn");t===this._selected||(this.closeTab(),this.openTab(t))}}})),this.openTab(this._selected,!0))}openTab(e){if(this._root&&e){const t=this._root.querySelector(`[data-tab="${e}"]`);t&&t.setAttribute("opened",!0);const a=this._root.querySelector(`[data-tab-btn="${e}"]`);a&&a.setAttribute("selected",!0),this._selected=e}}closeTab(){if(this._root&&this._selected){const e=this._root.querySelector(`[data-tab="${this._selected}"]`);e&&e.setAttribute("opened",!1);const t=this._root.querySelector(`[data-tab-btn="${this._selected}"]`);t&&t.setAttribute("selected",!1),this._selected=null}}},N=a(7049).Z,L=new P;function I(){E.isUploading?(L.openTab("direct"),L.lock()):N?.isUploading?(L.openTab("remote"),L.lock()):(L.unlock(),L.selected||L.openTab("direct"))}const T={init:function(e,t="",a){E.init(e,t,a),N?.init(e,t),L.init(document.getElementById("upld")),I()},update:function(e){E?.update(e),N?.update(e),I()},hide:function(e){(0,p.QH)(document.getElementById("upld"),e)}};var _=a(2451),j=a(5489),C=a(8751);const A=e=>(0,m.LK)(e,{method:"POST",headers:{"Content-Type":"application/json"}}),D=e=>(0,m.LK)(`/api/v1/job/${e}/resume`,{method:"PUT"}).catch((e=>(0,u.S)(e))),B=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const s=document.getElementById("modal-question"),n=document.importNode(s.content,!0);n.getElementById("modal-question-label").innerText=(0,i.Iu)("msg.cancel");const o=n.getElementById("yes"),r=n.getElementById("no");return o.addEventListener("click",(i=>{i.preventDefault(),t.onConfirm(),(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(`/api/v1/job/${a}`,{method:"DELETE",headers:{"Content-Type":"application/json"}}).catch((e=>{t.onError(),(0,u.S)(e)})),e()})),r.addEventListener("click",e),n})(a,t,e)),{timeout:0,closeOutside:!1})},O=(e,t)=>{e?(0,b.o)((e=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),s=i.getElementById("yes"),n=i.getElementById("no");return s.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(s,!0),(0,p.H)(n,!0),A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e))).finally((()=>e()))})),n.addEventListener("click",e),i})(e,t)),{timeout:0,closeOutside:!1}):A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e)))},q=()=>(0,m.LK)("/api/job",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"cancel"})}).catch((e=>(0,u.S)(e)));var M=a(1972);const R=(e,t,a)=>{(0,M.Z)(e,t),a()},H=(e,t,a,s,n=!1)=>{const o=document.getElementById("modal-question"),r=document.importNode(o.content,!0);r.getElementById("modal-question-label").innerText=n?(0,i.Iu)("msg.del-folder",{folder_name:a}):(0,i.Iu)("msg.del-proj",{file_name:a});const l=r.getElementById("yes"),d=r.getElementById("no");return d.addEventListener("click",e),l.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(l,!0),(0,p.H)(d,!0),(0,m.LK)(t,{method:"DELETE",headers:{force:"?1"}}).then((()=>s&&s())).catch((e=>(0,u.S)(e))).finally((t=>e()))})),r},U=(e,t,a)=>{(0,b.o)((i=>H(i,e,t,a)),{timeout:0,closeOutside:!1})},K=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const i=document.getElementById("modal-file-name"),s=document.importNode(i.content,!0),n=s.getElementById("modal-file-name__input"),o=s.getElementById("yes"),r=s.getElementById("no");return r.addEventListener("click",e),o.addEventListener("click",(i=>{i.preventDefault();const s=n.value;if(s){const i=t(s);(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(i,{method:"PUT",headers:{"create-folder":"?1"}}).then((()=>a&&a())).catch((e=>(0,u.S)(e))).finally((t=>e()))}})),s})(a,e,t)),{timeout:0,closeOutside:!1})};function Z(e){return`inset(${100-e}% 0% 0% 0%)`}var V=a(5951);const F={},$=()=>{F.title=null,F.questionChildren=null,F.yes=null,F.no=null,(0,C.g9)(F.next)},G={load:()=>{F.title||(0,C.c4)("#dashboard"),document.getElementById("title-status-label").innerHTML=F.title;const e=document.getElementById("question"),t=F.questionChildren;Array.isArray(t)?t.forEach((t=>e.appendChild(t))):e.innerHTML=t;for(let e of["yes","no"]){const t=document.getElementById(e),a=F[e];t.querySelector("p").innerHTML=F[e+"Text"],t.addEventListener("click",(e=>{e.stopPropagation(),a($)}))}}};(0,i.Iu)("exp-times.exp-time"),(0,i.Iu)("exp-times.inc"),(0,i.Iu)("exp-times.layer-1st"),(0,i.Iu)("exp-times.profile");const W=e=>{const t=e.querySelector("img");(0,p.gL)(e,!1),t&&(t.setAttribute("data-src",t.src),t.src=document.querySelector(".loading-overlay img").src)},Y=e=>{const t=e.querySelector("img");if((0,p.gL)(e,!0),t){const e=t.getAttribute("data-src");e&&(t.src=e,t.setAttribute("data-src",""))}};var J=a(8495);let Q=null,X=null;function ee(e,t=!1){const a=te(e,t);Q&&Q.state!==e.state&&(Q=null),a&&ae(e,t)}function te(e,t){const a=document.getElementById("job");if(!a)return!1;const i=t?!!e.files.selected:!!e.job?.id;return(0,p.yx)(a,i),i}function ae(e,t){const a=t?e.files.selected:e.job,s=a?.file?.resource;e.state;var n;if(a.file?(0,p.Zk)():(0,p.QP)(),function(e,t){const a=document.querySelector(".progress-bar"),i=document.querySelector(".progress-pct"),s=document.querySelector(".preview-img-wrapper"),n=void 0!==t;(function(e,t,a){if(!e)return;const i=t?.url&&t.ready?t.url:document.querySelector(".thumbnail-fallback")?.src;if(e.getAttribute("data-src")!==i){for(;e.firstChild;)e.removeChild(e.firstChild);e.setAttribute("data-src",i);const t=document.createElement("div");t.className="progress-img";const s=document.createElement("img");s.src=i,s.className="background",t.appendChild(s);const n=document.createElement("img");n.src=i,n.className="foreground",n.style.clipPath=Z(a??100),t.appendChild(n),e.appendChild(t)}else{const t=e.querySelector(".foreground");t&&(t.style.clipPath=Z(a))}})(s,e,t),(0,V.g)(a,t,"top"),(0,p.yx)(a,n),(0,p.yx)(i,n)}(a.thumbnail,a.progress),n=t,(0,p.QH)(document.querySelector("#job #pnt-time"),n),(0,p.QH)(document.querySelector("#job #rem-time"),n),(0,j.ZP)("job",a),s&&a.file){const s=t?null:a.id;!function(e,t,a){const i=t.file;(function(e,t){const a=document.querySelector("#job #stop"),i=document.querySelector("#job-close"),s=h.PT.fromApi(e),n=h.cG.includes(s),o=!Q&&h.Dt.includes(e),r=J.Z.getContext();if((0,p.gL)(a,o),a&&t){const i=t||!1;(0,p.yx)(a,i),a.onclick=()=>{B(t,{onConfirm:()=>{Q={code:"stop",state:e},(0,p.gL)(a,!1)},onError:()=>Q=null})}}i&&((0,p.yx)(i,n||!t),i.onclick=t?q:()=>r.selectFile(null))})(e,a),function(e,t,a){const i=document.querySelector("#job #start"),s=h.cG.includes(e);i&&((0,p.yx)(i,s),(0,p.gL)(i,s),i.onclick=()=>O(e!==h.PT.READY,t.resource))}(e,i),ie(e,i,a),function(e,t,a){const i=document.querySelector("#job #download");if(i){const e=!a&&t.refs?.download&&(!X||X===t.refs.download),s=t.display_name||t.name;(0,p.yx)(i,e),e&&(i.onclick=()=>{X=t.refs.download,W(i),R(t.refs.download,s,(()=>{X=null,Y(i)}))})}}(0,i,a),!a||(function(e,t,a){const i=document.querySelector(a),s=e===h.PT.PRINTING;(0,p.yx)(i,s),(0,p.gL)(i,!Q&&s),i&&(i.onclick=()=>{(0,p.gL)(i,!1),Q={code:"pause",state:e},(e=>(0,m.LK)(`/api/v1/job/${e}/pause`,{method:"PUT"}).catch((e=>(0,u.S)(e))))(t).catch((()=>Q=null))})}(e,a,"#job #pause"),function(e,t){const a=document.querySelector("#job #resume"),i=e===h.PT.PAUSED;(0,p.yx)(a,i),(0,p.gL)(a,!Q&&i),a&&(a.onclick=()=>{(0,p.gL)(a,!1),Q={code:"resume",state:e},D(t).catch((()=>Q=null))})}(e,a))}(e.state,a,s),(0,j.ZP)("file",a.file),function(e,t){const a=(0,i.Iu)("prop.na");document.getElementById("job").querySelectorAll(".job-details .job-prop").forEach((e=>{const t=e.querySelector(".job-prop-grid").children;let i=!0;for(const e of t){var s=e.querySelector("[data-type]")?.innerHTML.trim()===a;(0,p.QH)(e,s),s||(i=!1)}(0,p.QH)(e,i)}))}()}}function ie(e,t,a){const i=document.querySelector("#job #delete");if(i){const s=t.display_name||t.name;(0,p.gL)(i,!t.readOnly&&t.resource),(0,p.yx)(i,!a||e===h.cG.includes(e)),i.onclick=()=>{U(t.resource,s,(()=>{a||Ve.selectFile(null)}))}}}p.QP,p.Zk;const se=e=>[...e].filter((e=>!!e)).map((e=>e.trim())).join(" - "),ne=e=>{if(!e.printer)return;const t=e.state;ee(e),T.update(t),_.Z.update(e,null)},oe={load:e=>{(0,i.Iu)("home.link",{query:"#title-status-label"}),l(),ne(e),_.Z.update(e,null),_.Z.updateCurrentCamera(),(0,m.LK)("/api/v1/storage").then((t=>{const a=t.data.storage_list.find((e=>e.available&&!e.read_only));if(a){const t=a.path.replace("/","");T.init(t,"",e.fileExtensions)}}))},update:ne};var re=a(5502);const le=function(e,t="smooth"){if(!e)return;const a=e.getBoundingClientRect(),i=document.body.getBoundingClientRect(),s=a.top-(i.top+function(){const e=document.querySelector(".header");return e&&"sticky"===getComputedStyle(e).position?e.getBoundingClientRect().height:0}());(a.bottom>window.innerHeight||a.top<0)&&window.scroll({top:s,behavior:t})};var de=a(5537);const ce=e=>{const t=(0,de.Z)(e).querySelector(".kebab"),a=t.querySelector(".kebab-menu"),i=t.querySelector("ul");a.addEventListener("click",(e=>{e.stopPropagation(),function(e){return e&&e.classList.contains("open")}(i)?ue(i):function(e,t){e.classList.add("open"),(0,p.Ti)((()=>ue(e)),e,t)}(i,a)})),i.querySelectorAll("li").forEach((e=>{e.addEventListener("click",(()=>ue(i)))}))};function ue(e){e.classList.remove("open")}const pe=e=>{const t=document.querySelectorAll(".storage-select-content li");t&&t.forEach((t=>t.setAttribute("selected",t.getAttribute("data-storage")===e)))},me=e=>{const t=document.querySelector("#node-storage .storage-select-btn-inner");t&&(t.innerHTML=e)},ve=(e,t)=>{e&&t&&(t.classList.toggle("open"),(0,p.Ti)((()=>{t?.classList.remove("open")}),e,t))},ge=e=>{const t=document.querySelector(".node-storage-space");if(!t)return;const a=e.available&&!!e.totalSpace;if((0,p.yx)(t,a),a){const a=e.freeSpace,s=e.totalSpace,n=s-a,o=Math.round(100*(s?n/s:0)),r=(0,i.Iu)("prop.storage-used-space",{used:(0,re.Z)("size",n),free:(0,re.Z)("size",a),total:(0,re.Z)("size",s)});(0,V.g)(t,o),document.getElementById("storage-pct").innerHTML=(0,re.Z)("percent",o),document.getElementById("storage-space").innerHTML=r}},he=()=>{const e=document.querySelector("#node-storage .storage-select-btn");e&&(e.onclick=t=>{t.stopPropagation(),ve(e,dropdownContent)})},be=(e,t,a,i=!1)=>{const s=document.querySelector(".storage-select-content");document.querySelectorAll(".storage-select-content li").forEach((i=>{const n=i.getAttribute("data-storage");let o=!1;if(n in e){const r=e[n],l=i.querySelector("p");o=!0,r.name&&(l.innerText=r.name),i.setAttribute("selected",n===t),i.onclick=e=>{e.stopPropagation(),me(i.innerHTML),pe(n),s.classList.remove("open"),ge(r),a(n)}}(0,p.yx)(i,o)})),i&&ge(e[t])},fe="FOLDER",ye="PRINT_FILE",ke="FIRMWARE",we=["name","date","size"];let xe=null;const ze={origin:null,current_path:[],storages:{},files:[],eTag:null,sort:{field:"date",order:"desc"}};function Se(){const e=ze.origin;return ze.storages[e]}function Ee(){return ze.current_path.map((e=>e.path)).join("/")}function Pe(e){const t=Se(),a=Ee();return Ne(t.path,a,e)}function Ne(e,t,a){const i=["/api/v1/files",e,t,a].filter((e=>!!e)).join("/");return a?i:`${i}/`}const Le=(e={})=>{(0,m.LK)("/api/v1/storage",{}).then((t=>{const a=t.data?.storage_list;let i=!!e.redraw,s=!!e.redraw;if(a&&a.forEach((e=>{const t=e.type,a={name:e.name,path:e.path.replaceAll("/",""),available:e.available,readOnly:e.read_only,freeSpace:e.free_space,totalSpace:e.total_space};if(t in ze.storages){const e=ze.storages[t];e.available!==a.available&&(i=!0),e.freeSpace!==a.freeSpace&&ze.origin===t&&(s=!0)}else i=!0,s=!0;ze.storages[t]=a})),!ze.origin){let e=Object.keys(ze.storages).find((e=>ze.storages[e].available));e||(e=Object.keys(ze.storages).find((()=>!0))),e&&Oe(e)}i&&be(ze.storages,ze.origin,Oe,s)}))},Ie=(e={})=>{if(!Se())return;const t=Pe();let a=ze.eTag;e.force&&(ze.eTag=null,a=null,function(e){const t=Se(),a=Ee();T.init(t.path,a,e?.fileExtensions),T.hide(!1!==t?.readOnly)}(J.Z.getContext()));const i=e=>{ze.files=e,Te(),_e()};(0,m.LK)(t,{headers:{"If-None-Match":a}}).then((s=>{if(t!==Pe())return;const n=s.eTag;if(!n||n!==a){ze.eTag=n;const t=s.data.children||[];if(!n&&!e.force){const e=(e,t)=>e.display_name.localeCompare(t.display_name);if(JSON.stringify([...ze.files].sort(e))===JSON.stringify(t.sort(e)))return}i(t)}})).catch((()=>{ze.eTag=null,i([]),J.Z.getContext().selectFile(null)}))},Te=()=>{const e=document.getElementById("files");if(e){for(;e?.firstChild;)e.removeChild(e.firstChild);e.appendChild(function(){const e=Se(),t=[e.name,...ze.current_path.map((e=>e.name))],a=je("node-current",t.pop()||"Root");a.getElementById("path").innerHTML=`${t.join("/")}/`;const s=a.getElementById("create");s&&(s.onclick=e=>{e.stopPropagation(),K(Pe)});(0,p.H)(s,!1!==e.readOnly),a.querySelector("#sort-by-name p").innerText=(0,i.Iu)("sort.by-name"),a.querySelector("#sort-by-date p").innerText=(0,i.Iu)("sort.by-date"),a.querySelector("#sort-by-size p").innerText=(0,i.Iu)("sort.by-size");return a.querySelector(`#sort-by-${ze.sort.field}`).classList.add(ze.sort.order),we.forEach((e=>{a.getElementById(`sort-by-${e}`).addEventListener("click",(t=>{const a=document.getElementById(`sort-by-${e}`);document.getElementById(`sort-by-${ze.sort.field}`).classList.remove(ze.sort.order);const i=ze.sort.field===e&&"asc"===ze.sort.order?"desc":"asc";a.classList.add(i),ze.sort.field=e,ze.sort.order=i,Te(),_e()}),!1)})),a}()),ze.current_path.length&&e.appendChild(function(){const e=je("node-up","",(()=>{ze.current_path.pop(),Te(),Ie({force:!0})}));return(0,i.ot)(e),e}())}},_e=()=>{const e=document.getElementById("files");let t;if(e)for(let a of(e=>(e.sort(((e,t)=>{if(e.type===fe&&t.type!==fe)return-1;if(e.type!==fe&&t.type===fe)return 1;const a="desc"===ze.sort.order?-1:1;switch(ze.sort.field){case"date":return a*((e.m_timestamp||0)-(t.m_timestamp||0));case"size":return a*((e.size||0)-(t.size||0));default:return a*e.display_name.localeCompare(t.display_name)}})),e))(ze.files)){switch(a.type.toUpperCase()){case fe:t=Ce(a,{files:void 0,folders:void 0});break;case ye:t=De(a);break;case ke:t=Be(a,"firmware");break;default:t=Be(a,"file")}e.appendChild(t)}};function je(e,t,a){const i=document.getElementById(e).content,s=document.importNode(i,!0);return a&&s.querySelector(".node").addEventListener("click",(e=>{a(e),e.preventDefault()})),s.querySelector("#name")?.appendChild(document.createTextNode(t)),s}function Ce(e,t){const a=e.display_name||e.name,i=e.name,s=Pe(i),n=je("node-folder",a,(()=>{ze.current_path.push({path:i.replace("/",""),name:a}),Te(),Ie({force:!0})})),o=[t?.files?`${t.files} files`:null,t?.folders?`${t.folders} folders`:null].filter((e=>null!=e)).join(" | ");n.getElementById("details").innerHTML=o;const r=n.getElementById("delete");(0,p.gL)(r,!(e.read_only||e.ro)),r&&(r.onclick=e=>{var t,i,n;e.stopPropagation(),t=s,i=a,n=()=>{},(0,b.o)((e=>H(e,t,i,n,!0)),{timeout:0,closeOutside:!1})});const l=n.getElementById("rename");return l&&(l.onclick=e=>{e.stopPropagation(),console.log("renameFolder")}),n}const Ae=e=>{!function(e){const t=J.Z.getContext(),a=t.files.selected,i=Ee(),s=Pe(e.name);if(a===i)return;t.selectFile({...e,path:i,resource:s});const n=document.getElementById("job");n&&le(n)}(e)};function De(e){const t=je("node-file",e.display_name||e.name,(t=>Ae(e))),a=t.querySelector(".node-details");a.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const s=(0,j.NA)(t.dataset.where,e);if(s){const e=(0,re.Z)(t.dataset.format,s);t.querySelector("p[data-value]").innerHTML=e}else a.removeChild(t)}));const s=e?.refs?.thumbnail;if(s){const a=t.querySelector("img.node-img");a.setAttribute("data-src",e.date?`${s}?ct=${e.date}`:s),xe.observe(a)}return ce(t),function(e,t){const a=Pe(e.name),i=e.display_name||e.name,s=t.getElementById("details");s&&(s.onclick=t=>{Ae(e)});const n=t.getElementById("start");n&&(n.onclick=e=>{e.stopPropagation(),console.log("startPrint")});const o=t.getElementById("rename");o&&(o.onclick=e=>{e.stopPropagation(),console.log("renameFile")});const r=t.getElementById("delete");r&&((0,p.gL)(r,!(e.read_only||e.ro)),r.onclick=e=>{U(a,i),e.stopPropagation()});const l=t.getElementById("download");l&&((0,p.gL)(l,e.refs?.download),l.onclick=t=>{W(l),R(e.refs?.download,i,(()=>Y(l))),t.stopPropagation()})}(e,t),(0,i.ot)(t),t}function Be(e,t){const a=je("node-file",e.display_name||e.name,(e=>{})),s=a.querySelector(".node-details");s.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const a=(0,j.NA)(t.dataset.where,e);if(a){const e=(0,re.Z)(t.dataset.format,a);t.querySelector("p[data-value]").innerHTML=e}else s.removeChild(t)}));const n=a.querySelector("img.node-img");if(t){const e=n.getAttribute(`data-${t}`);e&&(n.src=e),xe.observe(n)}else(0,p.yx)(n,!1);return function(e){["details","start","rename","delete","download"].forEach((t=>{const a=e.getElementById(t);a&&(0,p.yx)(a,!1)}))}(a),a}function Oe(e){if(e in ze.storages){const t=ze.storages[e];ze.origin=e,ze.current_path=[],Te(),t.available&&Ie({force:!0}),T.hide(!1!==t.readOnly)}}const qe={load:function(e){if(ze.eTag=null,(0,i.Iu)("proj.link",{query:"#title-status-label"}),!xe){xe=new IntersectionObserver(((e,t)=>{e.forEach((e=>{if(e.isIntersecting){const t=e.target.getAttribute("data-src");(0,m.gJ)(t).then((({url:t})=>{e.target.src=t})).catch((()=>{}))}}))}),{rootMargin:"0px 0px 50px 0px",threshold:0})}e||(e=J.Z.getContext());const t=e.files.selected;if(t){(function(e,t){if(!e||!t)return null;let a=ze.files.find((t=>t.origin===e));const i=t.split("/").filter((e=>e)).slice(1);for(const e of i){if(!a)break;a=a.children.find((t=>t.name===e))}return"machinecode"===a?.type?a:null})(t.origin,t.path)||e.selectFile(null)}ee(e,!0),he(),Le({redraw:!0}),Ie({force:!0})},update:e=>{const t=e.state;Le(),Ie(),ee(e,!0),T.update(t)},getApiPath:Ne},Me=e=>{e.getAttribute("tooltip")||(e.addEventListener("click",(t=>{e.classList.toggle("tooltip-handle--active");const a=e.querySelector("span");(0,p.Ti)((()=>e.classList.remove("tooltip-handle--active")),a,e),t.preventDefault()}),!1),e.setAttribute("tooltip",!0))};let Re=0,He=null;const Ue=()=>{const e=e=>{const t=document.getElementById("offline-screen"),a=document.importNode(t.content,!0);return["not-responsing","please-wait"].forEach((e=>{const t=a.getElementById(`offline-screen.${e}`);t&&(t.innerHTML=(e=>{switch(e){case"not-responsing":return(0,i.Iu)("msg.offline.not-responsing");case"please-wait":return(0,i.Iu)("msg.offline.please-wait");default:return""}})(e))})),He={node:a,close:()=>{e(),He=null}},a};(0,b.o)((t=>e(t)),{timeout:0,closeOutside:!1,className:"offline-screen"})},Ke=({link:e,isConnected:t})=>{const a=["connect"];for(const t in e){const{ok:s,message:n}=e[t],o=document.getElementById(`conn-status-${t}-msg`),r="ok"===n.toLowerCase();o&&(o.innerHTML="connect"===t?r?(0,i.Iu)("conn.connect.linked"):(0,i.Iu)("conn.connect.not-linked"):(0,i.Iu)("conn.error_status"));const l=document.getElementById(`conn-status-${t}`),d=l.querySelector(".icon-success"),c=l.querySelector(".icon-warning"),u=l.querySelector(".info-message-tooltip"),m=u.querySelector("span"),v=void 0===s||s&&!a.includes(t);u&&m&&(r||(m.innerText=n,Me(u)),(0,p.QH)(u,r)),(0,p.QH)(l,v),v||((0,p.QH)(d,!s),(0,p.QH)(c,s))}const s=e=>{Re<3?Re+=1:(e?Ue():He.close(),Re=0)};t?He&&s(!1):!He&&s(!0)};const Ze=e=>{return{resource:e.resource??(t=e.path,a=e.name,`${t}${t.endsWith("/")?"":"/"}${a}`),name:e.name,displayName:e.display_name??e.name,path:e.path,displayPath:e.display_path??e.path,size:e.size,refs:{download:e.refs?.download,icon:e.refs?.icon,thumbnail:e.refs?.thumbnail},lastModified:e.m_timestamp||0,meta:{filamentType:e.meta?.filament_type,layerHeight:e.meta?.layer_height,estimatedPrintTime:e.meta?.estimated_print_time},readOnly:e.read_only||e.ro};var t,a},Ve=new class{constructor(){this.state=void 0,this.printer=void 0,this.job=void 0,this.transfer=void 0,this.version=void 0,this.storage=[],this.currentStorage=void 0,this.telemetry={temperature:{nozzle:{current:0,target:0},bed:{current:0,target:0}}},this.flow=0,this.speed=0,this.fan={hotend:0,print:0},this.link={connect:{ok:!0,message:"OK",settings:{hostname:"connect.prusa3d.com",tls:!0,port:0}},printer:{ok:!0,message:"OK",settings:{port:"",baudrate:115200}}},this.files={location:"/",selected:{file:void 0,thumbnail:void 0}},this.fileExtensions=[".gcode"],this.updateConnection()}updateConnection(){return(0,m.LK)("/api/connection",{method:"GET"}).then((e=>{this.link.connect.settings={hostname:e.data.connect.hostname,port:e.data.connect.port,tls:e.data.connect.tls},this.link.connect.registration=e.data.connect.registration,this.link.printer.settings={port:e.data.current.port,baudrate:e.data.current.baudrate}}))}update({status:e,printer:t}){e?.ok&&e.payload&&this.updateStatus(e.payload.data),t&&this.updatePrinter(t)}updateStatus(e){this.updateTelemetry(e.printer),this.updateJob(e.job),this.updateStorage(e.storage),this.updateTransfer(e.transfer),this.updateCamera(e.camera)}updatePrinter(e){this.printer={name:e.name,location:e.location,farmMode:e.farm_mode,nozzleDiameter:e.nozzle_diameter,minExtrusionTemp:e.min_extrusion_temp,serial:e.serial,hostname:e.hostname,port:e.port}}updateTelemetry(e){this.state=h.PT.fromApi(e.state.toUpperCase()),this.telemetry={temperature:{nozzle:{current:e.temp_nozzle,target:e.target_nozzle},bed:{current:e.temp_bed,target:e.target_bed}},axis:{x:e.axis_x,y:e.axis_y,z:e.axis_z},flow:e.flow,speed:e.speed,fan:{hotend:e.fan_hotend,print:e.fan_print}},this.link.connect.message=e.status_connect?.message??"",this.link.connect.ok=e.status_connect?.ok,this.link.printer.message=e.status_printer?.message??"ok",this.link.printer.ok=e.status_printer?.ok??!0}updateJob(e){const t=this.job?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.job=void 0);(0,m.LK)("/api/v1/job").then((e=>{const t=e.data;t.id===this.job.id&&(this.job={...this.job,file:Ze(t.file),thumbnail:{source:!t.file.refs?.thumbnail,ready:!t.file.refs?.thumbnail,url:void 0}},this.job.thumbnail.ready||(0,m.gJ)(this.job.file.refs.thumbnail).then((({url:e})=>{this.job.id===a&&(this.job.thumbnail.url=e)})).catch((e=>console.error("Failed to fetch thumbnail",e))).finally((()=>this.job.thumbnail.ready=!0)))})).catch((e=>(0,u.S)(e)))}if(a){const t=this.job?.timeRemaining,s=e.time_remaining,n=t!=s?(i=s,Math.round(Date.now()/1e3)+i):this.job?.estimatedEnd;this.job={file:void 0,...this.job,timePrinting:e.time_printing,id:a,progress:e.progress,timeRemaining:e.time_remaining,estimatedEnd:n}}var i}updateStorage(e){Object.keys(e).forEach((e=>{const t={path:e.path,name:e.name,readOnly:e.readOnly,freeSpace:e.freeSpace},a=this.storage.findIndex((e=>e.path===t.path));-1!==a?this.storage[a]=t:this.storage.push(t)}))}updateTransfer(e){const t=this.transfer?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.transfer=void 0);(0,m.LK)("/api/v1/transfer").then((e=>{const t=e.data;this.transfer={...this.transfer,file:{displayName:t.display_name??t.name,path:t.path,size:t.size,toPrint:t.to_print}}})).catch((e=>(0,u.S)(e)))}if(a){const t=Math.round(Date.now()/1e3),i=this.transfer?.file?.size||0,s=e.time_transferring,n=void 0!==s?t-s:void 0,o=e.data_transferred,r=i-o,l=s>0&&r>=0?r/(o/s):void 0;this.transfer={...this.transfer,timeTransferring:s,timeStarted:n,timeRemaining:l,id:a,progress:e.progress,dataTransferred:o}}}updateCamera(e){this.camera={id:e?.id}}selectFile(e){if(!e)return void(this.files.selected=null);const t=e.refs?.thumbnail;if(this.files.selected={file:Ze(e),thumbnail:{source:t,ready:!t,url:void 0},timeRemaining:e.meta?.estimated_print_time},!e.meta){const e=this.files.selected.file.resource;(0,m.LK)(e).then((t=>{const a=Ze({...t.data,resource:e});this.files.selected.file.resource===e&&(this.files.selected.file.meta=a.meta,this.files.selected.timeRemaining=a.meta?.estimatedPrintTime)}))}t&&(0,m.gJ)(t).then((({url:e})=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.url=e)})).catch((()=>{})).finally((()=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.ready=!0)}))}},Fe=e=>{const t=e.load;return e.load=()=>{(()=>{const e=document.getElementById("title-printer");e&&(e.innerHTML=$e())})(),t(Ve)},e},$e=()=>(e=>se([e.printer?.location,e.printer?.name]))(Ve);let Ge=oe;const We={routes:[{path:"dashboard",html:a(2373),module:Fe(oe),getTitle:()=>(0,i.Iu)("home.link")},{path:"question",html:a(5198),module:Fe(G)},{path:"files",html:a(7189),module:Fe(qe),getTitle:()=>(0,i.Iu)("proj.storage")},{path:"settings",html:a(2936),module:Fe(a(2957).Z),getTitle:()=>(0,i.Iu)("settings.title")},{path:"control",html:a(3478),module:Fe(a(732).Z),getTitle:()=>(0,i.Iu)("control.link")},{path:"cameras",html:a(5464),module:Fe(a(2451).Z),getTitle:()=>(0,i.Iu)("cameras.link")}].filter((e=>null!=e)),init:e=>{Ve.update(e),Ye()},update:e=>{Ve.update(e);const t=(0,C.nC)(),a=(e=>{const t=e.state;let a=(0,h.ny)(t);switch(t){case"IDLE":return"";case"PRINTING":return`${a} ${Math.round(e?.job?.progress||0)}%`;default:return a}})(Ve);var i;document.title=(i=[a,We.routes.find((e=>e.path===t)).getTitle()],se([...i,$e(),"PrusaLink"])),(0,j.zR)("telemetry",Ve),(e=>{const t=e,a=document.getElementById("printer-status");a&&(a.innerHTML=(0,h.ny)(t))})(Ve.state),Je(Ve.telemetry),Qe()},setConnected:e=>{Ke({link:Ve.link,isConnected:e})},setModule:e=>{Ge=e},getContext:()=>Ve},Ye=()=>{let e=new Map([["temp-line-blue",[]],["temp-line-orange",[]]]);r(e,300),l()},Je=e=>{const t=(new Date).getTime();d("temp-line-blue",[t,e.temperature.bed.current]),d("temp-line-orange",[t,e.temperature.nozzle.current]),l()},Qe=()=>{Ge&&Ge.update&&Ge.update(Ve)},Xe=We},8495:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=a(7838).default},8751:(e,t,a)=>{"use strict";a.d(t,{c4:()=>l,g9:()=>d,nC:()=>o});var i=a(7780),s=a(8495);const n=e=>{const[t,a]=e.split("#");return a||"dashboard"},o=()=>n(window.location.hash);function r(e,t){const a=n(e),o=s.Z.routes.find((e=>e.path===a));if(!o)return!1;t&&function(e){window.location.hash!=e&&history.pushState(null,"",e)}("#"+a);const r=document.getElementById("root");var l;return function(e,t){t.innerHTML="",(new DOMParser).parseFromString(e,"text/html").body.childNodes.forEach((e=>t.appendChild(e)))}(o.html,r),(0,i.ot)(r),function(e){const t=document.querySelector(`a[href="#${e}"]`);t&&(document.getElementById("navbar").childNodes.forEach((e=>{"li"===e.nodeName.toLowerCase()&&e.classList.remove(["active"])})),t.parentNode.className="active")}(a),(l=o.getTitle)&&(document.title=l()),window.scrollTo({top:0}),o.module.load(),s.Z.setModule(o.module),!0}const l=e=>r(e,!0),d=e=>r(e,!1)},4800:(e,t,a)=>{"use strict";a.d(t,{Dt:()=>o,PT:()=>s,cG:()=>n,ny:()=>r});var i=a(7780);const s={UNKNOWN:"UNKNOWN",IDLE:"IDLE",READY:"READY",BUSY:"BUSY",PRINTING:"PRINTING",PAUSED:"PAUSED",FINISHED:"FINISHED",STOPPED:"STOPPED",ERROR:"ERROR",ATTENTION:"ATTENTION",fromApi:e=>{switch(e){case"IDLE":return s.IDLE;case"READY":return s.READY;case"BUSY":return s.BUSY;case"PRINTING":return s.PRINTING;case"PAUSED":return s.PAUSED;case"FINISHED":return s.FINISHED;case"STOPPED":return s.STOPPED;case"ERROR":return s.ERROR;case"ATTENTION":return s.ATTENTION;default:return console.error(`Unsupported state: ${e}`),s.UNKNOWN}}},n=[s.IDLE,s.READY,s.FINISHED],o=[s.PRINTING,s.PAUSED],r=e=>{switch(e){case s.IDLE:return(0,i.Iu)("prop.st-idle");case s.READY:return(0,i.Iu)("prop.st-ready");case s.BUSY:return(0,i.Iu)("prop.st-busy");case s.PRINTING:return(0,i.Iu)("prop.st-printing");case s.PAUSED:return(0,i.Iu)("prop.st-paused");case s.FINISHED:return(0,i.Iu)("prop.st-finished");case s.STOPPED:return(0,i.Iu)("prop.st-stopped");case s.ERROR:return(0,i.Iu)("prop.st-error");case s.ATTENTION:return(0,i.Iu)("prop.st-attention");default:return console.error(`Unsupported state: ${e}`),(0,i.Iu)("prop.st-unknown")}}},4977:e=>{"use strict";e.exports=JSON.parse('{"langs":["cs","de","en","es","fr","it","kr","lt","nl","pl","sk"],"texts":{"home":{"link":["Přehled","Dashboard","Dashboard","Panel principal","Tableau de bord","Dashboard","대쉬보드","Darbastalis","Dashboard","Panel kontrolny","Prehľad"],"title":["Stav tiskárny","Druckerstatus","Printer Status","Estado de la impresora","État de l\'imprimante","Stato della stampante","프린터 상태","Spausdintojo būsena","Printerstatus","Stan drukarki","Stav tlačiarne"]},"proj":{"link":["Úložiště","Projekte","Storage","Proyectos","Projets","Progetti","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"storage":["Úložiště","Speicher","Storage","Almacenamiento","Stockage","Archivio","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"add-from":{"title":["Nahrát soubor z","Datei hinzufügen von","Add file from","Añadir archivo desde","Ajouter un fichier à partir de","Aggiungi file da","에서 파일 추가하기","Pridėti failą iš","Bestanden toevoegen van","Dodaj plik z","Nahrať súbor z"],"local":["Lokálního úložiště","Lokaler Speicher","Local storage","Almacenamiento local","Stockage local","Archivio locale","로컬 저장장치","Vietinis saugykla","Lokale opslag","Magazyn lokalny","Lokálneho úložiska"],"remote":["Vzdálené url","Remote-URL","Remote url","Eliminar url","URL distante","Url remoto","원격 URL","Nuotolinis URL","Externe URL","Zdalny URL","Vzdialenej URL"]},"details":["Detaily souboru","Datei-Details","File details","Detalles del archivo","Détails du fichier","Dettagli file","파일 상세정보","Failo informacija","Bestandseigenschappen","Szczegóły pliku","Detaily súboru"],"del":["Smazat","Datei löschen","Delete","Borrar archivo","Supprimer le Fichier","Elimina File","삭제","Ištrinti","Verwijderen","Usuń plik","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","Télécharger","Download","다운로드","Atsisiųsti","Downloaden","Pobierz","Stiahnuť"],"up-folder":["nadřazená složka","übergeordneter Ordner","parent folder","carpeta contenedora","dossier parent","cartella superiore","상위폴더","tėvinis aplankas","Bovenliggende map","folder nadrzędny","nadradený priečinok"]},"control":{"link":["Ovládání","Kontrolle","Control","Control","Contrôle","Controllo","제어","Valdymas","Bediening","Sterowanie","Ovládanie"],"coordinates":["Souřadnice tiskárny","Drucker-Koordinaten","Printer Coordinates","Coordenadas de la Impresora","Coordonnées de l\'imprimante","Coordinate Stampante","프린터 좌표","Spausdintojo koordinatės","Printercoördinaten","Współrzędne drukarki","Súradnice tlačiarne"],"axis":{"x":["Osa X","X-Achse","X axis","Eje X","axe X","Asse X","X축","X ašis","X-as","Oś X","Os X"],"y":["Osa Y","Y-Achse","Y axis","Eje Y","axe Y","Asse Y","Y축","Y ašis","Y-as","Oś Y","Os Y"],"z":["Osa Z","Z-Achse","Z axis","Eje Z","axe Z","Asse Z","Z축","Z ašis","Z-as","Oś Z","Os Z"]},"stepper-motors":["Krokové motory","Schrittmotoren","Stepper Motors","Motores Paso-a-paso","moteurs","Motori Passo-Passo","스텝 모터","Sustojimo varikliai","Stappenmotors","Silniki krokowe","Krokové motory"],"heated-bed-move":["Pohyb podložky v ose X a Y","Heizbett X und Y bewegen","Heated Bed X and Y Move","Base Calefactable Mover X e Y","Mouvement en x/y","Spostamento X e Y Piano Riscaldato","히트베드 X 및 Y 이동","Šildomojo patalo X ir Y poslinkis","Beweeg verwarmd bed in X en Y","Ruch stołu grzewczego X i Y","Pohyb podložky v osi X a Y"],"move-step":["Krok pohybu [mm]","Schrittweite [mm]","Move Step [mm]","Mover Paso [mm]","déplacement [mm]","Sposta Passo [mm]","[mm]mm 스텝 이동","Poslinkis [mm]","Beweegafstand [mm]","Krok ruchu [mm]","Krok pohybu [mm]"],"nozzle-z-move":["Pohyb extrudéru v ose Z","Düse Z Bewegung","Nozzle Z Move","Boquilla Mover Z","déplacement en z","Spostamento Z Ugello","노즐 Z 이동","Antgalio Z poslinkis","Beweeg omhoog/omlaag","Ruch dyszy w osi Z","Pohyb extruderu v osi Z"],"extruder":["Extrudér","Extruder","Extruder","Extrusor","extrudeur","Estrusore","익스트루더","Ištraukiklis","Extruder","Ekstruder","Extruder"],"extrude-retract-step":["Krok vytlačení/vtažení [mm]","Extrudieren/Zurückziehen Schritt [mm]","Extrude/Retract Step [mm]","Distancia Extruir/Retraer [mm]","longueur d\'extrusion ou de rétractation [mm]","Passo Estrusione/Retrazione [mm]","[mm]mm 스텝 압출/철회","Ištrauka/atgalinimas [mm]","Extrude/retract-afstand [mm]","Krok ekstruzji/retrakcji [mm]","Krok vysunutia/zasunutia [mm]"],"nozzle-temp":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura Boquilla","température de la buse","Temperatura Ugello","노즐 온도","Antgalio temperatūra","Temperatuur nozzle","Temperatura dyszy","Teplota trysky"],"speed":["Rychlost","Geschwindigkeit","Speed","Velocidad","vitesse","Velocità","속도","Greitis","Snelheid","Prędkość","Rýchlosť"],"heated-bed-temp":["Teplota vyhřívané podložky","Temperatur des Heizbettes","Heated Bed Temperature","Temperatura de la Base Calefactable","Température du lit","Temperatura piano riscaldato","히트베드 온도","Šildomojo patalo temperatūra","Temperatuur verwarmd bed","Temperatura stołu","Teplota vyhrievanej podložky"],"flow":["Průtok","Flow","Flow","Flujo","flux","Flusso","흐름","Srautas","Extrusiefactor","Przepływ","Prietok"],"title":["Ovládání tiskárny","Druckersteuerung","Printer Control","Control de la Impresora","Contrôle de l\'imprimante","Controllo Stampante","프린터 제어","Spausdintojo valdymas","Printerbediening","Sterowanie drukarką","Ovládanie tlačiarne"]},"cameras":{"link":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"trigger-scheme":{"ten-sec":["Každých 10 sekund","Alle 10 Sekunden","Every 10 seconds","Cada 10 segundos","Toutes les 10 secondes","Ogni 10 secondi","매 10초","Kas 10 sekundžių","Elke 10 seconden","Co 10 sekund",""],"thirty-sec":["Každých 30 sekund","Alle 30 Sekunden","Every 30 seconds","Cada 30 segundos","Toutes les 30 secondes","Ogni 30 secondi","매 30초","Kas 30 sekundžių","Elke 30 seconden","Co 30 sekund",""],"sixty-sec":["Každých 60 sekund","Alle 60 Sekunden","Every 60 seconds","Cada 60 segundos","Toutes les 60 secondes","Ogni 60 secondi","매 60초","Kas 60 sekundžių","Elke minuut","Co 60 sekund",""],"each-layer":["Při změně vrstvy","Beim Schichtwechsel","On layer change","Al cambiar de capa","Au changement de couche","Al cambio layer","매 레이어","Pakeitus sluoksnį","Bij laagwissel","Przy zmianie warstwy",""],"fifth-layer":["Každou pátou vrstvu","Alle 5 Schichten","Every fifth layer","Cada cinco capas","Toutes les cinq couches","Ogni cinque layer","매 5레이어","Kas penktas sluoksnis","Elke 5 lagen","Co piąta warstwa",""],"manual":["Ručně","Manuell","Manual","Manual","Manuel","Manuale","수동","Rankinis","Handmatig","Ręcznie",""]}},"settings":{"title":["Nastavení","Einstellungen","Settings","Ajustes","Réglages","Impostazioni","세팅","Nustatymai","Instellingen","Ustawienia","Nastavenie"]},"conn":{"prusa-connect-status":["Stav připojení PrusaConnect","PrusaConnect Status","PrusaConnect Status","Estado de PrusaConnect","Informations de connexion à PrusaConnect","Stato PrusaConnect","프루사커넥트 상태","PrusaConnect būsena","Status van PrusaConnect","Stan PrusaConnect","Stav pripojenia PrusaConnect"],"printer-status":["Stav připojení 3D tiskárny","3D-Drucker Verbindungsstatus","3D Printer Connection Status","Estado Conexión Impresora 3D","Informations de connexion à l\'imprimante 3D","Stato Connessione Stampante 3D","3D 프린터 연결 상태","3D spausdintojo prisijungimo būsena","Verbindingsstatus van 3D-printer","Status połączenia z drukarką 3D","Stav pripojenia 3D tlačiarne"],"title":["připojení","Verbindung","Connection",null,"connexion",null,"연결","Prisijungimas","Verbinding",null,"pripojenie"],"prusa-connect-url":["Adresa PRUSA CONNECT","PRUSA CONNECT Adresse","PRUSA CONNECT Address",null,null,null,"프루사커넥트 주소","PRUSA CONNECT adresas","Adres van PRUSA CONNECT",null,"Adresa PrusaConnect"],"suc":["Úspěšně připojeno","Erfolgreich verbunden","Successfully connected","Correctamente conectado","Connecté avec succès","Connessione riuscita","연결 성공","Prisijungta sėkmingai","Succesvol verbonden","Połączono pomyślnie","Úspešne pripojené"],"connect":{"linked":["","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":[null,"Nicht verbunden","Not Linked","No enlazado","Non Associée","Non collegato","연결안됨","Nesusieta","Niet verbonden","Nie połączono",""]},"error_status":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","","","Błąd",""]},"prop":{"temp-nozzle":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura del nozzle","Température de la buse","Temperatura ugello","노즐 온도","Nozzle Temperature","Nozzletemperatuur","Temperatura dyszy","Teplota trysky"],"temp-bed":["Vyhřívaná podložka","Heizbett","Heatbed","Base calefactable","Plateau chauffant","Piano riscaldato","히트베드","Dėklo temperatūra","Verwarmd bed","Stół","Vyhrievaná podložka"],"speed":["Rychlost tisku","Druckgeschwindigkeit","Printing Speed","Velocidad de impresión","Vitesse d\'impression","Velocità di stampa","출력속도","Spausdinimo greitis","Printsnelheid","Prędkość drukowania","Rýchlosť tlače"],"z-height":["Výška Z","Z-Höhe","Z-Height","Altura-Z","Hauteur en z","Altezza-Z","Z높이","Z-Height","Z-Hoogte","Wysokość Z","Výška Z"],"nozzle-diameter":["Velikost trysky","Düsendurchmesser","Nozzle Diameter","Diámetro de Boquilla","Diamètre de la Buse","Diametro ugello","노즐지름","Galvutės skersmuo","Nozzlediameter","Średnica dyszy","Veľkosť trysky"],"rem-time":["Zbývající čas","Restzeit","Remaining time","Tiempo restante","Temps restant","Tempo residuo","남은시간","Likęs laikas","Resterende tijd","Pozostały czas","Zostávajúci čas"],"time-est":["Odhad doby tisku","Druckzeit Schätzen","Print Time Estimate","Tiempo Estimado de Impresión","Estimation du temps d\'impression","Stima del Tempo di Stampa","예상 출력 시간","Print Time Estimate","Geschatte printtijd","Szacowany Czas Druku","Odhad času tlače"],"est-end":["Odhadovaný konec","Erwartetes Ende","Estimated end","Fin estimado","Fin d\'impression estimée","Fine prevista","예상완료","Numatomas pabaiga","geschatte eindtijd","Szacowane zakończenie","Odhadovaný koniec"],"pnt-time":["Doba tisku","Druckzeit","Printing time","Tiempo de impresión","Temps d\'impression","Tempo di stampa","출력시간","Spausdinimo laikas","Printtijd","Czas druku","Čas tlače"],"last-mod":["Naposledy upraveno","Zuletzt Geändert","Last Modified","Ultima Modificación","Dernière Modification","Ultima Modifica","최종 수정됨","Paskutinis modifikavimas","Laatst gewijzigd","Ostatnio Zmodyfikowany","Posledná úprava"],"material":["Materiál","Material","Material","Material","Matériau","Materiale","재료","Medžiaga","Materiaal","Materiał","Materiál"],"layer-ht":["Výška vrstvy","Schichthöhe","Layer Height","Altura de Capa","Hauteur de Couche","Altezza Layer","레이어 높이","Sluoksnio storis","Laagdikte","Wysokość Warstwy","Výška vrstvy"],"size":["Velikost souboru","Größe der Datei","File size","Tamaño de archivo","Taille du fichier","Dimensione file","파일크기","Failo dydis","Bestandsgrootte","Rozmiar pliku","Veľkosť súboru"],"progress":["Postup","Fortschritt","Progress","Progreso","Progression","Progresso","진행","Eiga","Voortgang","Postęp","Progres"],"st-idle":["Nečinná","Leerlauf","Idle","En espera","Repos","Inattivo","대기","Pramoginė veikla","Inactief","Oczekuje","Nečinná"],"st-ready":["Připravena","Bereit","Ready","Lista","Prête","Pronto","준비","Pasirengęs","Gereed voor gebruik","Gotowe","Pripravené"],"st-busy":["Zaneprázdeněná","Beschäftigt","Busy","Ocupada","Occupée","Occupato","작업중","Užsiėmęs","Bezig","Zajęty","Zaneprázdnená"],"st-printing":["Probíhá tisk","Druckt","Printing","Imprimiendo","Impression","Stampa","출력중","Spausdinama","Printen","Drukowanie","Prebieha tlač"],"st-paused":["Pozastavena","Pausiert","Paused","Pausado","En pause","In pausa","일시정지","Pristabdyta","Gepauzeeerd","Pauza","Pozastavená"],"st-finished":["Dokončeno","Beendet","Finished","Terminado","Terminé","Completato","완료됨","Užbaigta","Klaar","Zakonczono","Dokončené"],"st-stopped":["Zastaveno","Gestoppt","Stopped","Parada","Arrêtée","Arrestato","정지됨","Sustabdytas","Gestopt","Zatrzymano","Zastavené"],"st-error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"st-attention":["Vyžaduje pozornost","Achtung","Attention","Atención","Attention","Attenzione","주의","Dėmesio","Attentie","Uwaga","Pozor"],"st-unknown":["Neznámý","Unbekannt","Unknown","Desconocido","Inconnu","Sconosciuto","알수없음","Nežinoma","Onbekend","Nieznane","Neznáme"],"at":["v","um","at","a las","à","alle","에서","iš","op","o","v"],"less-than":["Méně než minuta","Weniger als eine Minute","Less than a minute","Menos de un minuto","Moins d\'une minute","Meno di un minuto","1분 미만","Mažiau nei minutė","Minder dan een minuut","Mniej niż minuta","Menej ako minúta"],"today-at":["Dnes v","Heute um","Today at","Hoy a las","Aujourd\'hui à","Oggi alle","오늘","Šiandien","Vandaag om","Dzisiaj o","Dnes o"],"tmw-at":["Zítra v","Morgen um","Tomorrow at","Mañana a las","Demain à","Domani alle","내일","Rytoj","Morgen om","Jutro o","Zajtra o"],"true":["Ano","Ja","Yes","Si","Oui","Si","예","Taip","Ja","Tak","Áno"],"false":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"na":["N/A","NV","NA","NA","NA","ND","없음","NA","N.v.t.","N/D","N/A"],"cover-closed":["Uzavřené","Geschlossen","Closed","Cerrada","Fermé","Chiuso","닫힘","Uždarytas","Gesloten","Zamknięta","Zavreté"],"cover-opened":["Otevřené","Geöffnet","Opened","Abierta","Ouvert","Aperto","열림","Atidarytas","Open","Otwarta","Otvorené"],"storage-used-space":["Použito {{used}} z {{total}} ({{free}} volných)","{{used}} benutzt von {{total}} ({{free}} frei)","Used {{used}} of {{total}} ({{free}} free)","Usados {{used}} de {{total}} ({{free}} libres)","{{used}} utilisés sur {{total}} ({{free}} libre)","Usato {{used}} di {{total}} ({{free}} liberi)","{{total}} 중 {{used}} 사용중({{free}} 남음)","","","Zajęte {{used}} z {{total}} ({{free}} wolne)",""]},"msg":{"modal-p1":["Vítejte na webovém rozhraní vaší","Willkommen zur Weboberfläche Ihres","Welcome to the web interface of your","Bienvenido a la interfaz web de tu","Bienvenue dans l\'interface web de votre","Benvenuto nell\'interfaccia web del tuo","당신의 웹 인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į savo","Welkom bij de webinterface van uw","Witaj w interfejsie Twojej","Vitajte vo webovom rozhraní vašej"],"modal-p2":["Upozornění: některé hodnoty jsou zobrazeny pouze v průběhu tisku.","Bitte beachten Sie, dass die Werte nur angezeigt werden, wenn der Drucker gerade druckt.","Please note that values are shown only when the printer is printing.","Tenga en cuenta que los valores se muestran solo cuando la impresora está imprimiendo.","Veuillez noter que les valeurs sont affichées uniquement lorsque l\'imprimante imprime.","Si noti che i valori vengono visualizzati solo durante la stampa.","프린터가 출력중일 경우에만 값이 표시됩니다.","Prašome atkreipti dėmesį, kad reikšmės rodomos tik tada, kai spausdintuvas spausdina.","De waarden worden alleen getoond tijdens het printen.","Wartości będą wyświetlane tylko podczas drukowania.","Upozornenie: niektoré hodnoty sú zobrazené len počas tlače."],"api-key-1":["Vítejte ve webovém rozhraní PrusaLink Web!","Willkommen auf der Web-Oberfläche von PrusaLink Web.","Welcome to the PrusaLink Web web interface.","Bienvenido a la interfaz web de PrusaLink Web.","Bienvenue sur l\'interface web locale de PrusaLink Web.","Benvenuti nell\'interfaccia web di PrusaLink Web.","프루사 커넥트 웹 웹인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į PrusaLink Web interneto sąsają.","Welkom bij de PrusaLink Web webinterface.","Witaj w interfejsie sieciowym PrusaLink Web.","Vitajte vo webovom rozhraní PrusaLink Web!"],"api-key-2":["Vložte API klíč.","Bitte geben Sie den API-Schlüssel ein.","Please insert the API key.","Por favor introduce la clave API.","Veuillez insérer la clé API.","Si prega di inserire la chiave API.","API키를 입력하십시오.","Prašome įvesti API raktą.","Voer de API-sleutel in","Wpisz klucz API.","Vložte API kľúč."],"api-key-3":["Otevřete menu Nastavení -> Síť -> PrusaLink.","Sie finden ihn in Einstellungen -> Netzwerk -> PrusaLink.","You can find it in Settings -> Network -> PrusaLink.","Puedes encontrarla en Ajustes -> Red -> PrusaLink.","Vous pouvez la trouver dans Réglages -> Réseau -> Informations de connexion.","È possibile trovarla in Impostazioni -> Rete -> PrusaLink","설정 -> 네트워크 -> 프루사링크에서 찾을 수 있습니다.","Jį galite rasti Nustatymai -> Tinklas -> PrusaLink.","Deze kan gevonden worden bij Settings -> -> Network -> PrusaLink.","Możesz znaleźć go w sekcji Ustawienia -> Sieć -> PrusaLink.","Nájdete ho v Nastavenia -> Sieť -> PrusaLink."],"offline":{"not-responsing":["Tiskárna nereaguje.","Der Drucker antwortet nicht.","Printer is not responding.","La impresora no responde.","L\'imprimante ne répond pas.","La stampante non risponde.","프린터가 응답하지 않습니다.","Spausdintuvas neatsako.","Printer reageert niet.","Drukarka nie odpowiada.","Tlačiareň nereaguje."],"please-wait":["Prosím, čekejte...","Bitte warten...","Please wait...","Espera, por favor...","Veuillez patienter...","Attendere...","기다려주십시오...","Prašome palaukti...","Even geduld...","Proszę czekać...","Prosím, čakajte..."]},"drop-zone":{"label":["Přetažením souboru zahájíte nahrávání","Datei hier ablegen, um den Upload zu starten","Drop file here to start the uploading","Arrastra archivo aquí para subirlo","Déposez le fichier ici pour commencer le téléchargement","Trascina il file qui per iniziare il caricamento","파일을 여기로 끌어놓으면 업로드가 시작됩니다.","Tempti failą čia, kad predėti įkrovimą","Sleep het bestand hierheen om het te uploaden","Upuść plik tutaj, aby rozpocząć przesyłanie.",""]},"create-folder":["Nová složka","Neuer Ordner","New Folder","Nueva Carpeta","Nouveau Dossier","Nuova Cartella","새 폴더","","","Nowy folder",""],"create-folder-name":["Název složky","Ordnername","Folder Name","Nombre de la Carpeta","Nom de Dossier","Nome cartella","폴더 이름","","","Nazwa folderu",""],"sysupgrade":{"title":["Aktualizovat systémový balíček?","Systempaket aktualisieren?","Upgrade System Package?","¿Actualizar el Paquete del Sistema?","Mettre à niveau le package système ?","Aggiornare il pacchetto di sistema?","시스템 패키지를 업그레이드하겠습니까?","","","Zaktualizować paczkę systemową?",""],"remark":["Aktualizace může trvat několik desítek vteřin.","Das Upgrade kann einige Sekunden dauern.","The upgrade may take several tens of seconds.","La actualización puede tardar varias decenas de segundos.","La mise à jour peut prendre plusieurs dizaines de secondes.","L\'aggiornamento può richiedere qualche minuto.","업그레이드에는 수십초가 걸릴 수 있습니다.","","","Aktualizacja może trwać kilkadziesiąt sekund.",""],"pending":["Probíhá aktualizace... Nevypínejte tiskárnu.","Upgraden... Schalten Sie den Drucker nicht aus.","Upgrading... Do not switch the printer off.","Actualizando... No apagues la impresora.","Mise à niveau... N\'éteignez pas l\'imprimante.","Aggiornamento... Non spegnere la stampante.","업그레이드중... 프린터를 끄지 마십시오.","","","Aktualizacja... Nie wyłączaj drukarki.",""],"wait-for-printer":["Čeká se na tiskárnu...","Warten auf den Drucker...","Waiting for the printer...","Esperando a la impresora...","Attente de l\'imprimante...","In attesa della stampante...","프린터를 기다리는 중...","","","Oczekiwanie na drukarkę...",""]},"del-folder":["Opravdu chcete smazat {{folder_name}} a její obsah?","Möchten Sie wirklich {{folder_name}} und seinen Inhalt löschen?","Do you really want to delete {{folder_name}} and its contents?","¿Realmente deseas borrar {{folder_name}} y su contenido?","Voulez-vous vraiment supprimer {{folder_name}} et son contenu ?","Vuoi davvero cancellare la cartella {{folder_name}} e il suo contenuto?","정말 {{folder_name}} 폴더 및 내용을 지우시겠습니까?","","","Czy naprawdę chcesz usunąć {{folder_name}} i jego zawartość?",""],"del-proj":["Opravdu chcete smazat {{file_name}}?","Wollen Sie wirklich {{file_name}} löschen?","Do you really want to delete {{file_name}}?","¿Realmente deseas borrar {{file_name}}?","Voulez-vous vraiment supprimer le fichier {{file_name}} ?","Vuoi davvero eliminare il file {{file_name}}?","{{file_name}}을 정말로 삭제하겠습니까?","Ar tikrai norite ištrinti {{file_name}}?","Weet u zeker dat u {{file_name}} wilt verwijderen?","Czy na pewno chcesz usunąć plik {{file_name}}?","Naozaj chcete zmazať {{file_name}}?"],"sla-pour-resin":["Nalijte do vaničky dostatečné množství resinu pro vybraný soubor a zavřete víko. Minimální objem resinu je zobrazen na dotykovém displeji tiskárny.","Füllen Sie genügend Harz für die ausgewählte Datei in den Tank und schließen Sie den Deckel. Die minimale Menge des Harzes wird auf dem Touchscreen angezeigt.","Pour enough resin for selected file into the tank and close the lid. Minimal amount of the resin is displayed on the touchscreen.","Vierte suficiente resina para el archivo seleccionado y cierra la tapa.\\nLa mínima cantidad necesaria se muestra en la pantalla táctil.","Versez suffisamment de résine dans le réservoir pour le projet sélectionné et fermez le capot.","Versare nel serbatoio la quantità di resina sufficiente per il file selezionato e chiudere il coperchio. La quantità minima di resina viene visualizzata sul touchscreen.","선택한 파일을 위한 레진을 탱크에 붓고 뚜껑을 닫습니다. 터치스크린에 최소량의 레진이 표시됩니다.","Įpilkite pakankamai dervos pasirinktam failui ir uždarykite dangtį. Mažiausias dervos kiekis yra rodomas ant ekrano.","Doe genoeg resin voor het geselcteerde bestand in het vat en sluit de kap. De minimale hoeveelheid resin wordt aangegeven op het touchscreen.","Wlej do zbiornika wystarczającą ilość żywicy dla wybranego pliku i zamknij pokrywę. Minimalna ilość żywicy jest wyświetlana na ekranie dotykowym.","Do nádržky nalejte dostatočné množstvo resinu pre vybraný súbor a zatvorte veko. Minimálne množstvo resinu sa zobrazí na dotykovom displeji."],"cancel":["Chcete opravdu zrušit tisk?","Wollen Sie den Druck wirklich abbrechen?","Do you really want to cancel print?","¿Realmente quieres cancelar la impresión?","Voulez-vous vraiment annuler l\'impression ?","Vuoi davvero annullare la stampa?","출력을 취소하겠습니까?","Ar tikrai norite atšaukti spausdinimą?","Weet u zeker dat u de print wilt stoppen?","Czy na pewno chcesz anulować wydruk?","Chcete naozaj zrušiť tlač?"],"file-exists":{"title":["Soubor již existuje","Datei existiert bereits","File already exists","El archivo ya existe","Le fichier existe déjà","File già esistente","파일이 이미 존재합니다.","","","Plik już istnieje",""],"overwrite-it":["Chcete ho přepsat?","Möchten Sie sie überschreiben?","Do you want to overwrite it?","¿Quieres sobrescribirlo?","Voulez-vous l\'écraser ?","Vuoi sovrascriverlo?","덮어쓰시겠습니까?","","","Czy chcesz go nadpisać?",""]}},"btn":{"login":["Přihlášení","Login","Login","Iniciar sesión","Connexion","Accedi","로그인","Prisijungti","Login","Zaloguj","Prihlásenie"],"confirm":["Potvrdit","Bestätigen","Confirm","Confirmar","Confirmer","Conferma","결정","Patvirtinti","Bevestigen","Potwierdzam","Potvrdiť"],"cancel":["Zrušit","Abbrechen","Cancel","Cancelar","Annuler","Annulla","취소","Atšaukti","Annuleren","Anuluj","Zrušiť"],"del":["Smazat","löschen","Delete","borrar","supprimer","elimina","삭제","Ištrinti","Verwijderen","usuń","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","télécharger","Download","다운로드","Atsisiųsti","Download","Pobierz","Stiahnuť"],"pause-pt":["Pozastavit tisk","Druck pausieren","Pause Print","Pausar Impresión","Mettre l\'impression en pause","Pausa Stampa","출력 일시 정지","Pristabdyti spausdinimą","Pauzeer print","Wstrzymaj drukowanie","Pozastaviť tlač"],"resume-pt":["Pokračovat v tisku","Druck fortsetzen","Resume Print","Continuar Impresión","Redémarrer l\'impression","Riprendi stampa","출력 복귀","Tęsti spausdinimą","Hervat print","Wznów drukowanie","Pokračovať v tlači"],"start-pt":["Start tisku","Druck starten","Start Print","Empezar impresión","Lancer l\'impression","Inizia stampa","출력 시작","Pradėti spausdinimą","Start print","Start druku","Štart tlače"],"stop-print":["Zrušit tisk","Druck abbrechen","Stop Print","Cancelar impresión","Annuler l\'impression","Annulla stampa","출력 정지","Sustabdyti spausdinimą","Stop print","Anuluj wydruk","Zrušiť tlač"],"upld-file":["Nahrát soubor","Datei hochladen","Upload File","Cargar Archivo","Télécharger un Fichier","Carica file","파일 업로드","Įkelti failą","Upload bestand","Prześlij plik","Nahrať súbor"],"check-updates":["Kontrola aktualizací","Updates suchen","Check Updates","Comprobar actualizaciones","Vérifier les Mises à Jour","Controlla aggiornamenti","업데이트 체크","Tikrinti atnaujinimus","","Sprawdź aktualizacje",""],"connect":{"link":[null,"Verbinden","Link","Enlace","Associer","Collegamento","연결","Susieti","Verbinden","Link",""],"unlink":["Odpojit","Trennen","Unlink","Desenlazar","Dissocier","Scollegato","연결끊기","Atsieti","Verbinding verbreken","Odłącz",""]},"chg":["Změnit","Ändern","Change","Cambia","Mettre à jour","Cambia","변경","Pakeisti","Wijzig","Zmień","Zmeniť"],"reset":["","Reset","Reset","Reset","Réinitialiser","Reset","리셋","Perkrauti","Reset","Reset",""],"disable-steppers":["Vypnout motory","Schrittmotoren deaktivieren","Disable Steppers","Desactivar motores","Desactiver les moteurs","Disabilita motori","모터 정지","Išjungti stoperius","Stappenmotors uitschakelen","Wyłącz silniki krokowe","Vypnúť motory"],"extrude":["Vytlačit","Extrudieren","Extrude","Extruye","extruder","Estrudi","압출","Ištraukti","Extrudeer","Ekstruzja","Vysunúť"],"retract":["Vtáhnout","Zurückziehen","Retract","Retraer","Retracter","Retrai","리트렉트","Atitraukti","Retract","Retrakcja","Zasunúť"],"set":["Nastavit","Setzen","Set","Ajuste","Régler","Imposta","설정","Nustatyti","Instellen","Ustaw","Nastaviť"],"yes":["Ano","Ja","Yes","Sí","Oui","Sì","예","Taip","Ja","Tak","Áno"],"no":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"upgrade":["Aktualizovat","Aktualisieren","Upgrade","Actualización","Mise à niveau","Aggiorna","업그레이드","Atnaujinti","","Aktualizacja",""],"chg-print-set":["Tisková nastavení","Druckeinstellungen","Print Settings","Ajustes de la Impresora","Réglages d\'Impression","Impostazioni di stampa","프린트 설정","Spausdinimo nustatymai","Printinstellingen","Ustawienia druku",""],"save-chgs":["Uložit změny","Änderungen speichern","Save changes","Guardar cambios","Enregistrer les modifications","Salva le modifiche","변경내용 저장","Išsaugoti pakeitimus","Wijzigingen opslaan","Zapisz zmiany","Uložiť zmeny"]},"camera":{"settings":["Nastavení kamery","Kamera-Einstellungen","Camera Settings","Ajustes de la Cámara","Paramètres de la Caméra","Impostazioni Fotocamera","카메라 세팅","Kameros nustatymai","Camera-instellingen","Ustawienia kamery",""],"name":["Název kamery","Kameraname","Camera Name","Nombre de la Cámara","Nom de la Caméra","Nome Fotocamera","카메라 명칭","Kameros pavadinimas","Cameranaam","Nazwa kamery",""],"resolution":["Rozlišení","Auflösung","Resolution","Resolución","Résolution","Risoluzione","해상도","Raiška","Resolutie","Rozdzielczość",""],"trigger-scheme":["","Auslöse-Schema","Trigger Scheme","Modo de Disparo","Mode de Déclenchement","Schema di attivazione","트리거 계획","Paleisti schemą","Triggerschema","Schemat wyzwalania",""],"focus":["Zaostření","Fokus","Focus","Enfocar","Focus","Messa a fuoco","포커스","","","Ostrość",""],"register-by-token":[null,null,"Register Camera",null,null,null,null,null,null,null,null],"token":[null,null,"CONNECT Token",null,null,null,null,null,null,null,null],"title":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"time":["Čas snímku","Zeit der Momentaufnahme","Snapshot Time","Hora de la Foto","Heure de la Capture","Tempo Istantanea","스냅샷 시간","Momentinis vaizdas","Snapshot-tijd","Czas migawki",""],"cloud":{"linked":["Připojeno","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":["Nepřipojeno","Unverbunden","Not Linked","No Enlazado","Non Associée","Non collegato","연결되지 않음","Nesusieta","Niet verbonden","Nie połączono",""],"label":["","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT",""]},"btn":{"connect":["Zkusit povolit kameru","Versuche Kamera zu aktivieren","Try to enable camera","Intenta habilitar la cámara","Essayer d\'activer la caméra","Prova ad abilitare la fotocamera","카메라 활성화 시도중","Pabandykite įjungti kamerą","Probeer de camera in te schakelen","Spróbuj aktywować kamerę",""],"settings":["Otevřít nastavení kamery","Öffne Kamera-Einstellungen","Open camera settings","Abrir los ajustes de la cámara","Ouvrir les paramètres de la caméra","Apri impostazioni fotocamera","카메라 설정 열기","Atidaryti kameros nustatymus","Open camera-instellingen","Otwórz ustawienia kamery",""],"link":["Připojit kameru do Connectu","Kamera mit CONNECT verbinden","Link camera to CONNECT","Asocia cámara a CONNECT","Associer la caméra à CONNECT","Collega fotocamera a CONNECT","카메라를 CONNECT에 연결하기","Susieti kamerą su CONNECT","Verbind camera met CONNECT","Połącz kamerę z CONNECT",""],"unlink":["Odpojit kameru z Connectu","Kamera von CONNECT trennen","Unlink camera from CONNECT","Desvincular la cámara de CONNECT","Dissocier la caméra de CONNECT","Scollega fotocamera da CONNECT","카메라를 CONNECT에서 연결 해제하기","Atsieti kamerą nuo CONNECT","Verbreek verbinding van camera met CONNECT","Odłącz kamerę od CONNECT",""]},"path":["Cesta","Pfad","Path","Ruta","Chemin","Percorso","경로","Kelias","Pad","Ścieżka",""],"driver":["Ovladač","Treiber","Driver","Controlador","Driver","Driver","드라이버","Draiveris","Driver","Sterownik",""]},"printer":{"title":["Tiskárna","Drucker","Printer","Impresora","imprimante","Stampante","프린터","Spausdintuvas","Printer","Drukarka","Tlačiareň"],"name":["Název tiskárny","Name des Druckers","Printer name","Nombre de la impresora","nom de l\'imprimante","Nome stampante","프린터 이름","Spausdintuvo pavadinimas","Naam van de printer","Nazwa drukarki","Názov tlačiarne"],"location":["Umístění tiskárny","Standort des Druckers","Printer location","Ubicación de la impresora","localisation de l\'imprimante","Posizione stampante","프린터 위치","Spausdintuvo vieta","Locatie van de printer","Lokalizacja drukarki","Umiestnenie tlačiarne"],"network_error_chime":["Zvukové upozornění při síťové chybě","Netzwerk-Fehlerton","Network Error Chime","Tono Error Red","Carillon d\'erreur réseau","Suono di errore di rete","네트워크 에러 차임벨","","","Dźwięk błędu sieci",""]},"print":{"fdm":{"1":["Je tiskárna připravena?","Ist der Drucker bereit?","Is the printer ready?","¿Está lista la impresora?","L\'imprimante est-elle prête ?","La stampante è pronta?","프린터가 준비되었습니까?","Ar spausdintuvas pasirengęs?","Is de printer klaar voor gebruik?","Czy drukarka jest gotowa?","Je tlačiareň pripravená?"],"2":["Je tisková podložka prázdná a čistá?","Ist der Druckbogen leer und sauber?","Is printing sheet empty and clean?","¿Está vacía y limpia la lámina de impresión?","Le surface d\'impression est-elle vide et propre ?","La piastra di stampa è vuota e pulita?","프린트 시트가 비어있고 깨끗합니까?","Ar spausdinimo lapas tuščias ir švarus?","Is het printplatform leeg en schoon?","Czy arkusz druku jest pusty i czysty?","Je tlačová podložka prázdna a čistá?"]}},"upld":{"start-pt":["po přenosu zahájit tisk","Druck nach der Übertragung starten","Start print after transfer","Iniciar la impresión tras la transferencia","Démarrer l\'impression après le transfert","Avvia stampa dopo il trasferimento","전송 후 출력 시작","Pradėti spausdinimą po perdavimo","Start print na het omzetten","Rozpocznij drukowanie po przesłaniu","po prenose spustiť tlač"],"remote":{"source":["URL zdroje","Quell-URL","Source URL","URL Fuente","URL de la source","URL fonte","원본 URL","Šaltinio URL","Bron van URL","Źródłowy URL","URL zdroja"],"hint-fdm":["Zadejte URL souboru G-CODE","URL der G-CODE-Datei eingeben","Type URL of G-CODE file","Escribe URL de archivo G-CODE","Entrez l\'URL du fichier G-CODE du projet","Digitare URL del file G-CODE","G코드 파일의 주소를 입력하십시오","Įveskite G-CODE failo URL","Type de URL van het gcode-bestand","Wpisz adres URL pliku G-Code","Zadajte URL súboru G-code"],"file":["Název souboru","Dateiname","File name","Nombre del archivo","Nom de fichier","Nome file","파일명","Failo pavadinimas","Bestandsnaam","Nazwa pliku","Názov súboru"],"file-hint":["Zadejte název souboru","Dateiname eingeben","Type file name","Escribe nombre de archivo","Tapez le nom du fichier","Digitare nome file","파일명을 입력하십시오","Įveskite failo pavadinimą","Type de bestandsnaam","Wpisz nazwę pliku","Zadajte názov súboru"]},"title":["Nahrát soubor","Projekt hochladen","Upload file","envía proyecto","Téléversement de projet","Carica file","파일업로드","Įkelti failą","Bestand uploaden","prześlij projekt","Nahrať súbor"],"direct":{"choose":["Vyberte {{file}} nebo jej přetáhněte sem.","Klicke um eine {{file}} Datei auszuwählen oder ziehe sie hier hin","Click to choose a {{file}} file or drag it here","Haz clic para elegir un archivo {{file}} o arrástralo hasta aquí","Cliquer pour choisir un fichier {{file}} ou déposez le ici","Fare clic per scegliere un file {{file}} o trascinarlo qui","선택한 {{file}} 파일을 클릭하거나 여기로 드래그하십시오","Pasirinkite {{file}} failą arba vilkite jį čia","Klik om een {{file}}-bestand te kiezen of sleep het hierheen","Kliknij, aby wybrać plik {{file}} lub przeciągnij go tutaj","Kliknutím vyberte súbor {{file}} alebo ho sem potiahnite."]}},"download":{"dl-started":["Začátek stahování","Herunterladen Gestartet","Download Started","Se inició la descarga","téléchargement démarré","Scaricamento Avviato","다운로드가 시작됨","Atsisiuntimas pradėtas","Downloaden gestart","Pobieranie rozpoczęte","Sťahovanie začalo"],"start-pt":["Spustit tisk","Autostart","Autostart","Inicio automático","Démarrage automatique","Avvio automatico","자동시작","Automatinis paleidimas","Autostart","Autostart","Spustiť tlač"]},"":[null,null,null,null,null,null,null,null,null,null,null],"version":{"title":["Verze","Version","Version",null,"version",null,"버전","Versija","Versie",null,"Verzia"],"api":["API","API","API",null,"api",null,"API","API","API",null,"API"],"hostname":["Hostname","Hostname","Hostname",null,"nom d\'hôte",null,"호스트명","Hostname","Hostnaam",null,"Hostname"],"firmware":["Firmware","Firmware","Firmware",null,"micrologiciel",null,"펌웨어","Firmware","Firmware",null,"Firmware"],"server":["Server","Server","Server",null,"serveur",null,"서버","Serveris","Server",null,"Server"],"text":["Text","Text","Text",null,"texte",null,"텍스트","Tekstas","Tekst",null,"Text"],"sdk":["SDK","SDK","SDK",null,"sdk",null,"SDK","SDK","SDK",null,"SDK"],"fe":["Frontend","Frontend","Frontend",null,"frontend",null,"프론트엔드","Frontendas","Frontend",null,"Frontend"]},"sys-version":{"title":["Verze systému","Systemversion","System Version",null,"version du système",null,"시스템버전","Sistemos versija","Systeenversie",null,"Verzia systému"],"python":["Python","Python","Python","Python","python","Python","파이썬","Python","Python","Python","Python"],"description":["Popis","Beschreibung","Description","Descripción","description","Descrizione","설명","Aprašymas","Beschrijving","Opis","Popis"],"id":["ID","ID","ID","ID","ID","ID","ID","ID","ID","ID","ID"],"os":["OS","OS","OS","OS","Système d\'exploitation","S.O.","OS","OS","OS","OS","OS"]},"updates":{"title":[null,null,"System Updates",null,null,null,null,"Sistemos atnaujinimai",null,null,null]},"user":{"title":["Uživatel","Benutzer","User",null,"utilisateur",null,"유저","Vartotojas","Gebruiker",null,"Používateľ"],"username":["Uživatelské jméno","Benutzername","User Name","Nombre de usuario","nom d\'utilisateur","Nome Utente","유저명","Vartotojo vardas","Gebruikersnaam","Nazwa użytkownika","Používateľské meno"],"format":{"name":["Uživatelské jméno musí obsahovat alespoň 3 znaky.","Der Benutzername muss mindestens 3 Zeichen lang sein.","Username length must be at least 3 characters long.","El nombre de usuario debe tener al menos 3 caracteres.","La longueur du nom d\'utilisateur doit être d\'au moins 3 caractères.","La lunghezza del nome utente deve essere di almeno 3 caratteri.","유저명은 최소 3자리 이상 입력하십시오.","Vartotojo vardo ilgis turi būti mažiausiai 3 simboliai.","De gebruikersnaam moet minimaal 3 karakters lang zijn.","Długość nazwy użytkownika musi mieć co najmniej 3 znaki.","Používateľské meno musí obsahovať aspoň 3 znaky."],"password-1":["Heslo nesmí začínat či končit mezerami, a zároveň musí splňovat jednu z následujících podmínek:","Das Passwort darf weder am Anfang noch am Ende Leerzeichen enthalten und muss mindestens eine der folgenden Optionen erfüllen:","Password can\'t contain spaces on the beggining nor the end and must meet at least one of these options:","La Contraseña no puede empezar o terminar con espacios y debe cumplir al menos una de estas opciones:","Le mot de passe ne peut pas contenir d\'espaces au début ni à la fin et doit répondre à au moins l\'une de ces options :","La password non può contenere spazi né all\'inizio né alla fine e deve soddisfare almeno una di queste opzioni:","암호는 시작부분에 공백을 둘 수 없으며 다음옵션 중 하나이상을 충족해야 합니다.","Slaptažodis negali turėti tarpų pradžioje arba pabaigoje ir turi atitikti bent vieną iš šių variantų:","Het wachtwoord mag geen spaties aan het begin of het einde bevatten en moet aan minstens één van deze opties voldoen:","Hasło nie może zawierać spacji na początku ani na końcu i musi spełniać przynajmniej jeden z poniższych warunków:","Heslo nesmie začínať ani končiť medzerami a musí spĺňať aspoň jednu z týchto podmienok:"],"password-2":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 malé písmeno, 1 velké písmeno a 1 číslo","- Minimale Länge 8 Zeichen, davon ein Kleinbuchstabe, ein Großbuchstabe und eine Zahl","- Minimal length 8 characters, including one lowercase letter, one uppercase letter and one number","- Longitud mínima 8 caracteres, incluyendo una minúscula, una mayúscula y un número","- Longueur minimale de 8 caractères, dont une lettre minuscule, une lettre majuscule et un chiffre","- Lunghezza minima 8 caratteri, di cui una lettera minuscola, una lettera maiuscola e un numero","- 최소 길이 8자(소문자 1개, 대문자 1개, 숫자 1개 포함)","- 8 simbolių ilgio minimalus, įskaitant vieną mažąją raidę, vieną didžiąją raidę ir vieną skaičių","- Minimaal 8 karakters lang, met tenminste een kleine letter, een hoofdletter en een nummber","- Minimalna długość 8 znaków, w tym jedna mała litera, jedna duża litera i jedna cyfra","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 malého písmena, 1 veľkého písmena a 1 číslice"],"password-3":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 speciální symbol (např. @)","- Mindestlänge 8 Zeichen, einschließlich eines nicht alphanumerischen Zeichens (z. B. @)","- Minimal length 8 characters, including one non-alphanumeric character (e.g. @)","- Longitud mínima 8 caracteres, incluyendo los no alfanuméricos (como @)","- Longueur minimale de 8 caractères, dont un caractère non alphanumérique (par exemple @)","- Lunghezza minima 8 caratteri, compreso un carattere non alfanumerico (es. @)","- 영숫자가 아닌 문자(예: @) 1개를 포함한 최소 길이 8자","- 8 simbolių ilgio minimalus, įskaitant vieną neteisingą simbolį (pvz., @)","- Minimaal 8 karakters lang, met tenminste één niet-alfanumeriek karakter (bijv. @)","- Minimalna długość 8 znaków, w tym jeden znak niealfanumeryczny (np. @)","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 špeciálneho symbolu (napr. @)"],"password-4":["- Heslo musí obsahovat minimálně 15 znaků","- Minimale Länge 15 Zeichen","- Minimal length 15 characters","- Longitud mínima 15 caracteres","- Longueur minimale 15 caractères","- Lunghezza minima 15 caratteri","- 최소 길이 15자","- 15 simbolių ilgio minimalus","- Minimaal 15 karakters lang","- Minimalna długość 15 znaków","- Heslo musí obsahovať minimálne 15 znakov"]},"new-password":["Nové heslo","Neues Passwort","New Password","Nueva Contraseña","nouveau mot de passe","Nuova Password","신규 암호","Naujas slaptažodis","Nieuw wachtwoord","Nowe hasło","Nové heslo"],"re-password":["Zopakujte heslo","Passwort wiederholen","Repeat Password","Repetir Contraseña","répéter le mot de passe","Ripeti Password","암호 재입력","Pakartokite slaptažodį","Herhaal wachtwoord","Powtórz hasło","Zopakujte heslo"],"password":["Heslo","Passwort","Password","Contraseña","mot de passe","Password","암호","Slaptažodis","Wachtwoord","Hasło","Heslo"]},"serial":{"label":["Sériové číslo","Seriennummer","Serial Number","Número de serie","numéro de série","Numero Seriale","시리얼넘버","Serijinis numeris","Serienummer","Numer seryjny","Sériové číslo"]},"api_key":{"label":["","API Key","API Key","Clave API","Clé API","Chiave API","API KEY","API raktas","API-sleutel","Klucz API",""]},"logs":{"title":["Logy","Protokolle","Logs",null,"logs",null,"로그","Žurnalai","Logbestanden",null,"Logy"],"select-file":["Vyberte soubor","Datei auswählen","Select File",null,"Sélectionnez une fichier",null,"파일 선택","Pasirinkti failą","Selecteer bestand",null,"Vyberte súbor"],"not-selected":["Není vybrán soubor logů!","Es ist keine Protokolldatei ausgewählt!","No log file is selected!","¡No se ha seleccionado archivo de registro!","Pas de fichier de log sélectionné!","Nessun file di registro selezionato!","로그 파일이 선택되지 않았습니다!","Nepasirinktas joks žurnalų failas!","Geen logbestand geselecteerd!","Nie wybrano żadnego pliku logu!","Nie je vybraný žiadny logovací súbor!"],"select-file-placeholder":["Vyberte soubor logů","Protokolldatei auswählen","Select log file","Selecciona archivo de registro","selectionnez un fichier de log","Selezionare un file di registro","로그 파일 선택","Pasirinkti žurnalų failą","Selecteer logbestand","Wybierz plik logu","Vyberte logovací súbor"],"empty-file":["Soubor je prázdný!","Die Protokolldatei ist leer!","Log file is empty!","¡El archivo de registro está vacío!","Le fichier de log est vide!","Il file di registro è vuoto!","로그파일이 비어있음!","Žurnalų failas yra tuščias!","Logbestand is leeg!","Plik logu jest pusty!","Logovací súbor je prázdny!"],"file-too-large":["Soubory logů o velikosti větší než {{size}} jsou k dispozici pouze ke stažení!","Protokolldateien, die größer als {{size}} sind, stehen nur zum Herunterladen zur Verfügung.","Log files of size larger than {{size}} are available only for downloading.","Los archivos de registro mayores de {{size}} sólo se pueden descargar.","Les fichiers de log d\'une taille supérieure à {{size}} ne sont disponibles que pour le téléchargement.","I file di registro di dimensioni superiori a {{size}} sono disponibili solo per il download.","로그 파일을 다운로드 하기 위해서는 최소 {{size}} 이상의 용량이 필요합니다.","Žurnalų failai, didesni nei {{size}}, yra prieinami tik atsiunčiant.","Logbestanden groter dan {{size}} kunnen alleen gedownload worden.","Pliki logów o rozmiarze większym niż {{size}} są dostępne tylko do pobrania.","Logovacie súbory s veľkosťou väčšou ako {{size}} sú k dispozícii len na stiahnutie.!"]},"temps":{"title":["Teploty","Temperaturen","Temperatures","Temperaturas","Températures","Temperature","온도","Temperatūros","Temperatuur","Temperatury","Teploty"]},"ntf":{"success":["Požadavek byl úspěšný","Erfolg","The request was successful","Éxito","la demande a été traitée avec succès","Successo","요청이 성공했습니다.","Užklausa buvo sėkminga","De aanvraag was succesvol","Sukces","Žiadosť bola úspešná"],"settings-suc":["Nastavení bylo úspěšně změněno.","Die Einstellungen wurden erfolgreich geändert.","Settings was changed successfully.","Los ajustes se han cambiado correctamente.","Paramètres modifiés avec succès.","Impostazioni modificate correttamente","설정이 성공적으로 변경되었습니다.","Nustatymai sėkmingai pakeisti.","Instelling succesvol gewijzigd.","Ustawienia zostały zmienione pomyślnie","Nastavenia boli úspešne zmenené."],"camera-suc":["","Kamera Steuerungsanfrage wurde gesendet","Camera control request has been sent","La petición de control de cámara se ha enviado","La demande de contrôle de la caméra a été envoyée","È stata inviata una richiesta di controllo della fotocamera","카메라 조작 요청이 전송되었습니다.","Kameros valdymo užklausa buvo išsiųsta","Aanvraag voor camerabesturing is verzonden","Wysłano żądanie sterowania kamerą",""],"camera-config-success":["Konfigurace kamery byla aktualizovaná","Kamerakonfiguration wurde aktualisiert","Camera configuration has been updated","La configuración de la cámara se ha actualizado","La configuration de la caméra a été mise à jour","La configurazione della fotocamera è stata aggiornata","카메라 구성이 업데이트되었습니다.","Kameros konfigūracija buvo atnaujinta","Cameraconfiguration is geüpdatet","Konfiguracja kamery została zaktualizowana",""],"upld-suc":["Soubor {{file_name}} byl úspěšně nahrán.","Das Hochladen des Projekts {{file_name}} war erfolgreich.","The file {{file_name}} was uploaded successfully.","El envío del proyecto {{file_name}} se completó.","Le projet {{file_name}} a été téléversé correctement.","Caricamento del progetto {{file_name}} riuscito.","{{file_name}}파일이 성공적으로 업로드되었습니다.","Failas {{file_name}} sėkmingai įkeltas.","Het bestand {{file_name}} is succesvol geüpload.","Przesyłanie projektu {{file_name}} powiodło się.","Súbor {{file_name}} bol úspešne nahraný."],"error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"upld-unsuc":["Nahrání souboru {{file_name}} selhalo.","Das Hochladen des Projekts {{file_name}} war nicht erfolgreich.","The file {{file_name}} upload was unsuccessful.","El envío del proyecto {{file_name}} ha fallado.","Le téléversement du projet {{file_name}} a échoué.","Caricamento del progetto {{file_name}} non riuscito.","{{file_name}}파일의 업로드가 실패하였습니다.","Failo {{file_name}} įkėlimas nepavyko.","Het bestand {{file_name}} is niet succesvol geüpload.","Przesyłanie projektu {{file_name}} nie powiodło się.","Nahrávanie súboru {{file_name}} zlyhalo."],"upld-start":["Požadavek na nahrání souboru byl přijat","Upload-Anfrage wurde angenommen","Upload request has been accepted","Se acepto la petición de subida","La demande de téléchargement a été acceptée","Richiesta di caricamento accettata","업로드 요청이 수락되었습니다.","Įkėlimo užklausa priimta","Uploadverzoek is geaccepteerd","Żądanie przesłania zostało zaakceptowane","Žiadosť o odoslanie bola prijatá"]},"sort":{"by-name":["Název","Name","Name","Nombre","Nom","Nome","이름으로 정렬하기","Pavadinimas","Naam","Nazwa",""],"by-date":["Datum","Datum","Date","Fecha","Date","Data","날짜로 정렬하기","Data","Datum","Data",""],"by-size":["Velikost","Größe","Size","Tamaño","Taille","Dimensioni","크기로 정렬하기","Dydis","Grootte","Rozmiar",""]},"unit":{"h":["h","h","h","h","h","h","h","h","u","g","h"],"min":["min","min","min","min","min","min","min","min","min","min","min"],"ml":["ml","ml","ml","ml","mL","ml","ml","ml","ml","ml","ml"],"rpm":["RPM","UPM","RPM","RPM","TPM","RPM","RPM","RPM","RPM","Obr./min","RPM"],"b":["B","B","B","B","B","B","B","B","B","B","B"],"kb":["KB","KB","KB","KB","KB","KB","KB","KB","kB","KB","KB"],"mb":["MB","MB","MB","MB","MB","MB","MB","MB","MB","MB","MB"],"gb":["GB","GB","GB","GB","GB","GB","GB","GB","GB","GB","GB"]},"exp-times":{"exp-time":["Doba osvitu [s]","Belichtung [s]","Exposure [s]","Exposición [s]","Exposition [s]","Esposizione [s]","[s]초 노출","Ekspozicija [s]","Belichting [s]","Czas naświetlania [s]","Osvit [s]"],"inc":["Navýšení expozice (s)","Belichtungszeit inkr. [s]","Exposure time incr. [s]","Incremento tiempo exp. [s]","Incr. du temps d\'exposition [s]","Incremento tempo di esposizione [s]","[s]초 노출 시간 증가","Ekspozicijos laiko padidėjimas [s]","Belichtingstijd verhogen [s]","Przyrost czasu naświetl. [s]","Prírastok osvitu (s)"],"layer-1st":["Osvit první vrstvy [s]","Erste Schicht Bel. [s]","First Layer Expo. [s]","Primera Capa Expo. [s]","Première couche Expo. [s]","Esposizione Primo layer [s]","첫번째 레이어 노출시간 [s]초","Pirmojo sluoksnio ekspozicija [s]","Belichtingstijd eerste laag [s]","Naśw. 1. warstwy [s]","Osvit prvej vrstvy [s]"],"profile":["Tiskový profil","Druckprofil","Print profile","Perfil de Impresión","Profil d\'Impression","Profilo di stampa","출력 프로필","Spausdinimo profilis","Printprofielen","Profil druku","Tlačový profil"],"faster":["Rychlejší","Schneller","Faster","Rápido","Plus rapide","Più veloce","빠르게","Greičiau","Sneller","Szybciej","Rýchlejšie"],"slower":["Pomalejší","Langsamer","Slower","Lento","Plus lent","Più lento","느리게","Lėčiau","Langzamer","Wolniej","Pomalšie"],"high-viscosity":["Velmi Viskózní","Hohe Viskosität","High Viscosity","Alta Viscosidad","Haute viscosité","Alta Viscosità","고점도","Aukštas klampumas","Hoge viscositeit","Wysoka lepkość","Vysoká viskozita"]}}}')}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.p="",(()=>{"use strict";var e=a(8751),t=a(8495),i=a(6648);const s=()=>{document.getElementById("menu").addEventListener("click",(()=>{document.getElementById("menu").classList.contains("burger-open")?n():(document.getElementById("menu").classList.add("burger-open"),document.getElementById("navbar").classList.remove("burger-menu"))})),document.getElementById("navbar").querySelectorAll("a[href]").forEach((e=>{e.addEventListener("click",n)}))};function n(){document.getElementById("menu").classList.remove("burger-open"),document.getElementById("navbar").classList.add("burger-menu")}var o=a(7780),r=a(1351),l=a(5412);const d=(e,t)=>{const a=l.L.init(e,t);a&&(a.setOptions((0,o.Vb)()),a.value=(0,o.G3)(),a.onselect=e=>{(0,o.m0)(e),window.location.reload()})};let c=!1;const u={status:{get:()=>(0,i.LK)("/api/v1/status"),init:!0,update:!0,updateInterval:5e3}};async function p(e){const t=(new Date).getTime(),a=Object.fromEntries(Object.entries(u).map((([a,i])=>[a,(()=>{if(!e)return i.init;if(i.update){if(!i.updateInterval)return!0;if(i.timestamp||(i.timestamp=t+i.updateInterval),t>=i.timestamp)return i.timestamp=t+i.updateInterval,!0}})()?i.get():void 0])).filter((([,e])=>void 0!==e))),i=Object.values(a),s=await Promise.all(i.map((e=>e.then((e=>({ok:!0,payload:e}))).catch((e=>({ok:!e.code&&null,error:e}))))));return Object.fromEntries(Object.entries(a).map((([e],t)=>[e,s[t]])))}async function m(e){let a=!1;for(;;){let i=!1;try{const t=await p(a);t.status&&(c=null===t.status.ok),Object.values(t).forEach((({ok:e,error:t})=>{var a;e||(i=!0,null!==e&&(a=t,(0,r.S)(a,{fallbackMessage:{title:"API error",message:"Cannot connect to printer"}})))})),a?g(t):i||(v({...t,printer:e}),a=!0)}catch(e){h(e)}t.Z.setConnected(!c),await new Promise((e=>setTimeout(e,1e3)))}}function v(a){try{t.Z.init(a),window.onpopstate=t=>t&&(0,e.g9)(t.currentTarget.location.hash||"#dashboard"),(0,e.g9)(window.location.hash||"#dashboard")}catch(e){h(e)}}function g(e){try{t.Z.update(e)}catch(e){h(e)}}function h(e){(0,r.S)(e,{fallbackMessage:{title:"Application error",message:"Something bad happened on application side"}}),console.error(e)}window.onload=()=>{console.log("PrusaLink v.3.12.0 #b'fb6b661'"),s(),d("lang-dropdown","lang-dropdown"),(0,o.ot)(),document.querySelectorAll("a[href]").forEach((t=>{t.addEventListener("click",(a=>{(0,e.c4)(t.href)&&a.preventDefault()}))})),(0,i.Z5)().then((e=>{e&&m(e)}))}})()})(); diff --git a/prusa/link/static/main.fefa0d0f82f3a5f05365.js b/prusa/link/static/main.fefa0d0f82f3a5f05365.js new file mode 100644 index 00000000..af40fb26 --- /dev/null +++ b/prusa/link/static/main.fefa0d0f82f3a5f05365.js @@ -0,0 +1 @@ +(()=>{var e={5862:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f844a0a85dde310826fce450c3e149d3.svg"},340:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"d0ce7d704590cb0b868ae92249ee86e8.svg"},3246:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"e6e0734bc2dad609a3e92f1873412f11.svg"},6730:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"557f3616d5a1b407b59795b8328bb51f.svg"},8065:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"2e842fcb7b83af8e1e0d26afd80f8fd9.svg"},8920:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24c2502c54c43441d0bb4bbc17e10a83.svg"},2456:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f6a7f34a841f532dd1e3e4d610d164f6.svg"},9819:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"53df9c11e268c2390b147239f9ee8796.svg"},7038:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"9332c323b291ba7226ddcdabb0c8e7c4.svg"},1656:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"79e90794ba3b36a64a12414decda0932.svg"},9594:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"a443dadfc7e114c74dae6cd64a74db9d.svg"},931:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"926f52aea63cfd597b30096bfe4077c6.svg"},7336:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"44b654f4ca724e154a9bc60335e98847.svg"},9387:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"8657650f85be23655543d28f58941616.svg"},5300:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ea93bcffb8771234f8c641f3b7e9f848.svg"},3482:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ccd215a92d0427a21339a8c38e2a40f3.svg"},5515:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"997c391425907810b4a6e42663d11fd4.svg"},4578:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24e2e49c87df140cf16aa18b4e261f12.svg"},2e3:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"58151992d28dfb34ee417e0ebf6a66b6.svg"},2290:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"c8a0ca767f73685bbe06863f81e9d3cb.svg"},3174:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"39e93870e6b8fd4ef2d9ed668f8c1545.svg"},8796:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"1218694688ee15ee97bcded9e1a75cc8.svg"},1373:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"dfb811cc28f8e3d7c14bcedbe7ef35b8.svg"},4622:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"b891ace1622f34bac5a2b4edb7adc733.svg"},5464:(e,t,a)=>{var i=a(7091),s=a(8065),n=a(4622),o=a(6730),r='

          • Camera Name

            -

          • Snapshot Time

            -

            ';e.exports=r},3478:(e,t,a)=>{var i=a(7091),s=a(340),n=a(5862),o=a(1656),r=i(s),l=i(n),d=i(o),c='

            printer coordinates

            X axis

            0 mm

            Y axis

            0 mm

            Z axis

            0 mm

            stepper motors

            heated bed X and Y move

            move step [mm]

            nozzle Z move

            extruder

            extrude/retract step [mm]

            nozzle temperature

            0°C

            speed

            100%

            heated bed temperature

            0°C

            flow

            100%

            ';e.exports=c},2373:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(3174),b=a(8796),f=i(s),y=i(n),k=i(o),w=i(r),x=i(l),z=i(d),S=i(c),E=i(u),P=i(p),N=i(m),L=i(v),I=i(g),T='

            !!! DO NOT DISTRIBUTE !!! INTERNAL TESTING ONLY !!!

            Upload file

            Add file from

             

            Click to choose a *.sl1 file or drag it here

            Source URL

            Type URL of G-CODE file

            File name

            Type or edit file name

            Progress

            NA

            Size

            NA

            Download Started

            NA

            Remaining Time

            NA

            Autostart

            NA

            Temperatures

            Cameras

            • -

            • -

            ';e.exports=T},7189:(e,t,a)=>{var i=a(7091),s=a(2e3),n=a(2290),o=a(3246),r=a(4578),l=a(7038),d=a(2456),c=a(9819),u=a(9387),p=a(5300),m=a(3482),v=a(4622),g=a(6730),h=a(931),b=a(5515),f=a(3174),y=a(8796),k=a(9594),w=a(8065),x=a(8920),z=i(s),S=i(n),E=i(o),P=i(r),N=i(l),L=i(d),I=i(c),T=i(u),_=i(p),j=i(m),C=i(v),A=i(g),D=i(h),B=i(b),O=i(f),q=i(y),M=i(k),R=i(w),H=i(x),U='

            Local

            0%

            0 GB of 0 GB free

            Add file from

             

            Click to choose a *.sl1 file or drag it here

            Source URL

            Type URL of G-CODE file

            File name

            Type or edit file name

            Progress

            NA

            Size

            NA

            Download Started

            NA

            Remaining Time

            NA

            Autostart

            NA

            ';e.exports=U},5198:(e,t,a)=>{var i=a(7091),s=a(4622),n=a(6730),o='

            ';e.exports=o},2936:(e,t,a)=>{var i=a(7091),s=a(7038),n=a(7336),o=a(1373),r=a(4622),l=a(6730),d=i(s),c=i(n),u=i(o),p='

            version

            api

            hostname

            firmware

            server

            text

            sdk

            frontend

            3.12.0

            system version

            updates

            connection

            PRUSA CONNECT

            connection status

            Successfully connected

            3D printer connection status

            Successfully connected

            printer

            printer name

            printer location

            network error chime

            user

            username

            new password

            repeat password

            current password

            serial number

            serial number

            api key

            api key

            logs

            select file

            • No log file is selected!
            ';e.exports=p},7091:e=>{"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(t.hash&&(e+=t.hash),t.maybeNeedQuotes&&/[\t\n\f\r "'=<>`]/.test(e)?'"'.concat(e,'"'):e)}},6648:(e,t,a)=>{"use strict";a.d(t,{LK:()=>d,O2:()=>n,Z5:()=>g,gJ:()=>m,iT:()=>c,wU:()=>r});var i=a(8236),s=a(1351);const n=window.location.pathname.endsWith("/")?window.location.pathname.slice(0,-1):window.location.pathname,o=()=>new Promise(((e,t)=>{(0,i.o)((e=>t=>{const a=document.getElementById("modal-apiKey"),i=document.importNode(a.content,!0);return i.getElementById("apiKey").addEventListener("keydown",(a=>{"Enter"==a.key&&(t(),e(a.target.value))})),i.getElementById("login").addEventListener("click",(a=>{a.preventDefault();let i=document.getElementById("apiKey").value;t(),e(i)})),i})(e),{timeout:0,closeOutside:!1})})).then((e=>sessionStorage.setItem("apiKey",e))),r=(e="application/json")=>"ApiKey"==sessionStorage.getItem("authType")?{"X-Api-Key":sessionStorage.getItem("apiKey"),Accept:e}:{Accept:e},l=()=>new Promise(((e,t)=>(sessionStorage.setItem("auth","pending"),fetch(`${n}/api/v1/info`,{headers:r()}).then((t=>{if(401==t.status){const a=t.headers.get("WWW-Authenticate").split(" ")[0];return sessionStorage.setItem("authType",a),sessionStorage.removeItem("apiKey"),"ApiKey"==a?o().then((()=>l().then((t=>e(t))))):l().then((t=>e(t)))}{const e=t.json();return 200!=t.status&&e.then((e=>(0,s.S)({data:e}))),e}})).then((t=>{sessionStorage.setItem("auth","true"),e(t)}))))),d=(e,t={})=>u(e,t,"application/json","json"),c=(e,t={})=>u(e,t,"text/plain","text");async function u(e,t={},a,i){if("true"!=sessionStorage.getItem("auth"))throw{code:401};{t.headers={...t.headers,...r(a)};const s=await fetch(`${n}${e}`,t),o=s.status,l={code:o,eTag:s.headers.get("etag")};switch(o){case 401:throw sessionStorage.setItem("auth","false"),l;case 204:case 304:return l;default:const e=await s.text();if(!s.ok){if(e.length>0)try{l.data=JSON.parse(e)}catch{}throw l.data=l.data||{title:`Error ${o}`,message:s.statusText},l}return l.data="json"===i?0===e.length?{}:JSON.parse(e):e,l}}}const p=(e,t,a)=>new Promise(((i,s)=>{"true"==sessionStorage.getItem("auth")?(t.headers={...r(),...t.headers},fetch(a?`${n}${e}?ct=${a}`:e,t).then((e=>{401==e.status&&(sessionStorage.setItem("auth","false"),s(e)),e.ok?e.blob().then((t=>i({url:URL.createObjectURL(t),headers:e.headers}))):s(e)})).catch((e=>s(e)))):s()})),m=(e,t,a={})=>p(`${n}${e}`,{...a,headers:{...a.headers,Accept:"image/*"}},t),v=e=>{const t=document.getElementById("modal-welcome"),a=document.importNode(t.content,!0);return a.querySelector(".close-button").addEventListener("click",e),a},g=()=>null==localStorage.getItem("showWelcome")?new Promise(((e,t)=>{(0,i.o)(v,{closeCallback:()=>{localStorage.setItem("showWelcome",!0),e()}})})).then((()=>l())):l()},1972:(e,t,a)=>{"use strict";a.d(t,{Z:()=>s});var i=a(6648);const s=function(e,t){let a=document.createElement("a");a.href=`${i.O2}${e}`,a.download=t||"",a.click(),a.remove()}},646:(e,t,a)=>{"use strict";function i(e,t=!0){e&&(t&&!e.hasAttribute("hidden")&&e.setAttribute("hidden",!0),!t&&e.hasAttribute("hidden")&&e.removeAttribute("hidden"))}function s(e,t=!0){i(e,!t)}function n(e,t=!0){e&&(t&&!e.hasAttribute("disabled")&&e.setAttribute("disabled",!0),!t&&e.hasAttribute("disabled")&&e.removeAttribute("disabled"))}function o(e,t=!0){return n(e,!t)}function r(){s(document.querySelector("#job .loading-overlay"))}function l(){i(document.querySelector("#job .loading-overlay"))}function d(e,...t){const a=i=>{if(t)for(const e of t)if(e&&e.contains(i.target))return;e&&e(),window.removeEventListener("pointerup",a)};window.addEventListener("pointerup",a)}a.d(t,{H:()=>n,QH:()=>i,QP:()=>r,Ti:()=>d,Zk:()=>l,gL:()=>o,yx:()=>s})},5537:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=function(e){return"string"==typeof e?document.getElementById(e):e||document.body}},9741:e=>{e.exports=function(e,t){let a=t.split("."),i=e;for(const e of a)if(i=i[e],!i)break;return i}},7780:(e,t,a)=>{"use strict";a.d(t,{G3:()=>v,Iu:()=>h,Vb:()=>g,m0:()=>m,ot:()=>f});var i=a(5537),s=a(9741),n=a.n(s);const o=a(4977),r=o.langs,l=o.texts,d=r.indexOf("en");let c,u;function p(){return navigator.language||navigator.userLanguage||""}function m(e){const t=r.indexOf(e);return-1!==t&&(u=t,c=e,localStorage.setItem("lang",c),!0)}function v(){return c}function g(){return[...r]}function h(e,t){let a=n()(l,`${e}.${u}`);if(!a)return a=n()(l,`${e}.${d}`),a||(a=e),b(a,t),a;let i=null;if(t&&(i=Object.assign({},t),delete i.query,delete i.ref),i&&Object.keys(i).length>0){let e,i=a,s=/{{(.*?)}}/g;for(;e=s.exec(a);){let s=a.substr(e.index+2,e[0].length-4);if("query"!==s&&"ref"!==s)if(s in t){let a=t[s];i=i.replace(e[0],a)}else 0}a=i}return b(a,t),a}function b(e,t){if(t)if(t.ref){t.ref.innerHTML=e}else if(t.query){let a=document.querySelector(t.query);a?a.innerHTML=e:console.warn(`cannot find element with "${t.query}" query`)}}function f(e){(0,i.Z)(e).querySelectorAll('[data-label]:not([data-label=""])').forEach((e=>{const t=h(e.getAttribute("data-label")),a=e.getAttribute("data-label-target");a?e.setAttribute(a,t):e.innerHTML=t}))}m(localStorage.getItem("lang"))||m(p().toLowerCase())||m(p().toLowerCase().split("-")[0])||m("en")},2451:(e,t,a)=>{"use strict";a.d(t,{Z:()=>N});var i=a(6648),s=a(646),n=a(7780),o=a(3707),r=a(8236),l=a(5412),d=a(1351);let c,u=!1,p=[];const m={TEN_SEC:"TEN_SEC",THIRTY_SEC:"THIRTY_SEC",SIXTY_SEC:"SIXTY_SEC",EACH_LAYER:"EACH_LAYER",FIFTH_LAYER:"FIFTH_LAYER",MANUAL:"MANUAL"},v=e=>{switch(e){case m.TEN_SEC:return(0,n.Iu)("cameras.trigger-scheme.ten-sec");case m.THIRTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.thirty-sec");case m.SIXTY_SEC:return(0,n.Iu)("cameras.trigger-scheme.sixty-sec");case m.EACH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.each-layer");case m.FIFTH_LAYER:return(0,n.Iu)("cameras.trigger-scheme.fifth-layer");case m.MANUAL:return(0,n.Iu)("cameras.trigger-scheme.manual");default:return`${e}`}},g=()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-suc")),h=(e,t=E)=>{void 0===c&&(c=e.camera?.id),u=e.link.connect.ok,(0,i.LK)("/api/v1/cameras").then((e=>{const a=(e?.data?.camera_list||[]).map((e=>{let t=p.find((t=>t.id===e.camera_id))||{};return e.camera_id===c&&(e.connected||(c=null)),{id:e.camera_id,config:e.config,connected:e.connected,detected:e.detected,stored:e.stored,registered:e.registered,nextSnapshotAt:t?.nextSnapshotAt,lastSnapshotAt:t?.lastSnapshotAt,lastSnapshotUrl:t?.lastSnapshotUrl}})),i=p.filter((e=>!a.find((t=>e.id===t.id))));t&&t(a,i),p=a})).catch(d.S),p.filter((e=>e.connected)).forEach((e=>y(e.id)))},b=e=>`camera_${e}`,f=e=>document.getElementById(b(e)),y=e=>{const t=p.find((t=>t.id===e));if(!t)return;const a=new Date;t.lastSnapshotAt&&t.nextSnapshotAt&&a{const n=p.find((t=>t.id===e)),o=b(e),r=document.querySelector(`#${o} .camera__no-snapshot`),l=document.querySelector(`#${o} .camera__snapshot`);if(r&&(0,s.yx)(r,!1),l&&((0,s.yx)(l,!0),l.src=t),n){const e=`${i.get("cache-control")}`.match(/max-age=(\d+)/);let s;e&&(s=parseInt(e[1],10)),s||(s=11);const o=i.get("expires"),r=i.get("last-modified"),l=e=>{const t=new Date;return new Date(t.getTime()+1e3*e)};n.nextSnapshotAt=o?new Date(o):l(s),n.nextSnapshotAt{e||(e=c);const t=e?p.find((t=>t.id===e)):null,a=document.getElementById("camera-snapshot-picture"),i=document.getElementById("camera-snapshot-time"),s=document.getElementById("camera-snapshot-name"),[n,o,r,l]=t?.lastSnapshotAt?[t.id,t.config.name,t.lastSnapshotAt.toLocaleString(),t.lastSnapshotUrl]:[null,"-","-",""];c=n,a&&(a.src=l),i&&(i.innerText=r),s&&(s.innerText=o)},w=(e,t,a=!1)=>{e.querySelector(".camera__name").innerText=t.config.name,e.querySelector(".camera__path").innerText=t.config.path||"-",e.querySelector(".camera__driver").innerText=t.config.driver||"-",e.querySelector(".camera__cloud").innerText=t.registered?(0,n.Iu)("camera.cloud.linked"):(0,n.Iu)("camera.cloud.not-linked");const i=e.querySelector(".camera__register"),o=e.querySelector(".camera__unregister"),r=e.querySelector(".camera__add"),l=e.querySelector(".camera__remove"),d=e.querySelector(".camera__settings");(0,s.yx)(i,u&&t.connected&&!t.registered),(0,s.yx)(o,u&&t.connected&&t.registered),(0,s.yx)(r,!1),(0,s.yx)(l,!t.connected),(0,s.yx)(d,t.connected),a&&(r.title=(0,n.Iu)("camera.btn.connect"),d.title=(0,n.Iu)("camera.btn.settings"),i.title=(0,n.Iu)("camera.btn.link"),o.title=(0,n.Iu)("camera.btn.unlink"),r.addEventListener("click",(e=>{e.stopPropagation(),z(t.id)}),!1),l.addEventListener("click",(e=>{e.stopPropagation(),S(t.id)}),!1),d.addEventListener("click",(e=>{e.stopPropagation(),P(t.id)}),!1),i.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"POST")}),!1),o.addEventListener("click",(e=>{e.stopPropagation(),x(t.id,"DELETE")}),!1))},x=(e,t)=>{(0,i.LK)(`/api/v1/cameras/${e}/connection`,{method:t}).then((()=>g())).catch(d.S)},z=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:t.config})}).then((()=>g())).catch(d.S)},S=e=>{const t=p.find((t=>t.id===e));t&&(0,i.LK)(`/api/v1/cameras/${t.id}`,{method:"DELETE"}).then((()=>g())).catch(d.S)},E=(e,t)=>{const a=document.getElementById("cameras-list");t.forEach((e=>{const t=f(e.id);t&&a.removeChild(t)})),e.sort(((e,t)=>t.connected-e.connected)).forEach((e=>{const t=f(e.id);if(t)w(t,e);else{const t=(e=>{const t=document.getElementById("camera-list-item")?.content;if(!t)return null;const a=document.importNode(t,!0),i=a.querySelector("li"),o=e.id;return i.addEventListener("click",(e=>{const t=p.find((e=>e.id===o));t&&t.connected&&k(t.id),e.preventDefault()}),!1),i.id=b(e.id),a.querySelector(".camera__path__label").innerText=(0,n.Iu)("camera.path"),a.querySelector(".camera__driver__label").innerText=(0,n.Iu)("camera.driver"),a.querySelector(".camera__cloud__label").innerText=(0,n.Iu)("camera.cloud.label"),(0,s.yx)(a.querySelector(".camera__snapshot"),!1),w(a,e,!0),a})(e);t&&a.appendChild(t)}}))},P=e=>new Promise(((t,a)=>{(0,r.o)(((e,t)=>t=>{const a=`/api/v1/cameras/${e}`,r=document.getElementById("modal-camera-settings"),c=document.importNode(r.content,!0),u=c.getElementById("camera-settings__name"),p=c.getElementById("camera-settings__focus"),g=l.L.init(c.getElementById("camera-settings__resolution"),"camera-settings__resolution"),h=l.L.init(c.getElementById("camera-settings__trigger-scheme"),"camera-settings__trigger-scheme"),b=c.getElementById("yes");return(0,i.LK)(a).then((e=>{const r=e.data,l=r.available_resolutions.sort(((e,t)=>e.width===t.width?t.height-e.height:t.width-e.width)).map(((e,t)=>`${e.width}x${e.height}`)),c=Object.keys(m),f=c.map((e=>v(e))),y=r.capabilities.includes("FOCUS");u.value=r.name,g.setOptions(l),g.value=`${r.resolution.width}x${r.resolution.height}`,h.setOptions(f),h.value=v(r.trigger_scheme),(0,s.yx)(p.parentNode,y),console.log(`DEBUG: has focus (${y})`,r),y&&(p.value=Math.round(100*r.focus)),b.addEventListener("click",(()=>{const[e,s]=g.value.split("x").map((e=>parseInt(e))),r=c[f.indexOf(h.value)],l=y?{focus:p.value/100}:{};(0,i.LK)(`${a}/config`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u.value,resolution:{width:e,height:s},trigger_scheme:r,...l})}).then((()=>(0,o.Vp)((0,n.Iu)("ntf.success"),(0,n.Iu)("ntf.camera-config-success")))).catch(d.S).finally(t)}))})).catch(d.S),c.getElementById("no").addEventListener("click",(()=>t())),c})(e),{timeout:0,closeOutside:!1})})).then((()=>{lastUpdated=null,h()})),N={load:e=>{p=[],(0,n.Iu)("cameras.link",{query:"#title-status-label"}),h(e)},update:h,getCameraNode:f,getCameraNodeId:b,updateCurrentCamera:k}},732:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(646),n=a(5489),o=a(6648);var r=a(1351),l=a(4800);a(7838);let d=1,c=1;const u=e=>{(0,n.ZP)("control",e),function(e){const t=e.state,a=document.querySelectorAll("#control button"),i=["extrude","retract"],n=["flowrate","bed","nozzle","speed"],o=[...n,...i,"move-step","extrude-retract-step","heated-bed-xy-move"];if([l.PT.PRINTING||l.PT.BUSY||l.PT.PAUSED].includes(t)){const e=t===l.PT.PAUSED?o:n;a.forEach((t=>{const a=t.id||t.parentNode.id||t.parentNode.parentNode.id;(0,s.H)(t,!e.includes(a))}))}const r=e.telemetry.temperature.nozzle.current||0,d=e.printer.minExtrusionTemp||0,c=r&&d&&r>=d;i.forEach((e=>(0,s.H)(document.getElementById(e),!c)))}(e)};function p(e,t){if("move"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"jog",...e})}))(function(e){const t=e.includes("-"),a=e.replace(RegExp("[+-]"),"");return a?{[a]:t?-d:d}:(console.error(`"${e}" is not valid direction`),{})}(t)).catch((e=>(0,r.S)(e)))}else if("home"===e){(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"home",axes:e})}))(t.split(",")).catch((e=>(0,r.S)(e)))}}function m(e,t,a){function i(e){return Number.parseFloat(e.getAttribute("data-step"))}if(e){const n=e.querySelectorAll("button[data-step]"),o=e=>{n.forEach((t=>{i(t)===e?((0,s.H)(t),t.setAttribute("selected",!0)):((0,s.gL)(t),t.hasAttribute("selected")&&t.removeAttribute("selected"))}))};n.forEach((e=>{const t=i(e);isNaN(t)||(e.onclick=()=>{o(t),a(t)})})),o(t)}}const v={load:e=>{(0,i.Iu)("control.title",{query:"#title-status-label"}),function(e){function t(e,t){switch(e){case"bed":return i=t,(0,o.LK)("/api/printer/bed",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",target:i})});case"flowrate":return a=t,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"flowrate",factor:a})});case"nozzle":return(e=>(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"target",targets:{tool0:e}})}))(t);case"speed":return(e=>(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"speed",factor:e})}))(t);default:throw Error("Unknown property!")}var a,i}e&&e.querySelectorAll(".input-wrapper").forEach((e=>{const a=e.querySelector("input"),i=e.querySelector("button");if(a){const e=()=>{const e=a.getAttribute("data-action"),i=Number.parseFloat(a.value);isNaN(i)||t(e,i).then((e=>{a.value=""})).catch((e=>(0,r.S)(e)))};a.onkeyup=t=>{"Enter"===t.key&&(e(),a.blur())},i&&(i.onclick=e)}}))}(document.querySelector("#control")),m(document.querySelector("#control #move-step"),d,(e=>d=e)),m(document.querySelector("#control #extrude-retract-step"),c,(e=>c=e)),function(){const e=document.querySelector("#control #disable-steppers");e&&(e.onclick=()=>{(0,o.LK)("/api/printer/printhead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"disable_steppers"})}).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #extrude");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #retract");e&&(e.onclick=()=>{var e;(e=c,(0,o.LK)("/api/printer/tool",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"extrude",amount:-e})})).catch((e=>(0,r.S)(e)))})}(),function(){const e=document.querySelector("#control #heated-bed-xy-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),function(){const e=document.querySelector("#control #nozzle-z-move");e&&e.querySelectorAll("button[data-action]").forEach((e=>{e.onclick=()=>{p(e.getAttribute("data-action"),e.getAttribute("data-value"))}}))}(),u(e)},update:u}},5502:(e,t,a)=>{"use strict";a.d(t,{Z:()=>S});var i=a(7780);const s=(0,i.Iu)("prop.at"),n=(0,i.Iu)("unit.h"),o=(0,i.Iu)("prop.less-than"),r=(0,i.Iu)("unit.min"),l=((0,i.Iu)("unit.ml"),(0,i.Iu)("unit.rpm")),d=(0,i.Iu)("prop.today-at"),c=(0,i.Iu)("prop.tmw-at"),u=(0,i.Iu)("unit.b"),p=(0,i.Iu)("unit.kb"),m=(0,i.Iu)("unit.mb"),v=(0,i.Iu)("unit.gb"),g=(0,i.Iu)("prop.true"),h=(0,i.Iu)("prop.false");function b(e,t=!0,a=1){return e>0?t?e.toFixed(a):e:0}function f(e){const t=new Date(1e3*e);var a=localStorage.getItem("lang");return(t.toLocaleDateString(a,{year:"numeric",month:"numeric",day:"numeric"})+" "+t.toLocaleTimeString(a,{hour:"numeric",minute:"numeric"})).substring(0,25)}function y(e){let t="00:00";if(e){let a=new Date,i=new Date(a.getTime()+1e3*e),n=new Date(a);n.setDate(n.getDate()+1);let o="";if(i.getDate()==a.getDate()&&i.getMonth()==a.getMonth())o=`${d} `;else if(i.getDate()==n.getDate()&&i.getMonth()==n.getMonth())o=`${c} `;else{let e={month:"numeric",day:"numeric"};o=`${i.toLocaleString(window.navigator.language,e)} ${s} `}t=o+("0"+i.getHours()).substr(-2)+":"+("0"+i.getMinutes()).substr(-2)}return t}function k(e){if(e<60)return o;const t=Math.floor(e/60%60),a=Math.floor(e/3600);return(a>0?`${a} ${n}`:"")+(t>0?` ${t} ${r}`:"")}function w(e){let t=e;const a=[u,p,m,v];for(let e=0;e{if(void 0===t||null===t&&"progress"!==e)return(0,i.Iu)("prop.na");switch(e){case"number":return b(t);case"temp":return b(t)+" °C";case"temp_int":return b(t,0)+"°C";case"fan":return b(t)+` ${l}`;case"print":case"progressPct":return b(t||0,!0,0)+"%";case"pos":return b(t)+" mm";case"date":return f(t);case"time":return k(t);case"timeEst":return y(t);case"progress":return b(100*(t||0),!0,0)+"%";case"percent":return`${b(t||0,!0,0)}%`;case"material":return t||(0,i.Iu)("prop.na");case"size":return w(t);case"boolean":return x(t);case"diameter":return b(t,!0,2)+" mm";default:return t}},S=(e,t)=>z(e,t)},5412:(e,t,a)=>{"use strict";a.d(t,{L:()=>s});var i=a(5537);class s{set value(e){this._value=e,this.updateLabel()}get value(){return this._value}constructor(e,t,a){const i=this;this._label=t,this._ul=a,this._value=t.innerHTML,this.is_open=!1,this._options=[],this._onKeyDown=e=>{if(i.is_open){switch(e.key.toLowerCase()){case"escape":return void i.close();case"arrowdown":let e=!1;for(const t of this._ul.childNodes){if(e){this._highlight(t);break}t.classList?.contains("select")&&(e=!0)}break;case"arrowup":let t=null;for(const e of this._ul.childNodes){if(e.classList?.contains("select")){t&&this._highlight(t);break}t=e}break;case"enter":for(const e of this._ul.childNodes)if(e.classList.contains("select")){const t=e.innerText;this.value=t,this.onselect&&this.onselect(t),this.close();break}}e.preventDefault()}},this._onClick=t=>{const a=t.target.parentNode;if(!i.is_open)return!0;a!==e&&i.close()},window.addEventListener("keydown",this._onKeyDown,!1),window.addEventListener("click",this._onClick,!1),this.onselect=void 0,e.onclick=e=>{e.preventDefault(),this.is_open?this.close():this.open()}}_highlight(e){this._ul.childNodes.forEach((t=>{t===e?t.classList.add("select"):t.classList.remove("select")}))}destructor(){window.removeEventListener("keypress",this._onKeyPress),window.removeEventListener("click",this._onClick)}static init(e,t){let a=(0,i.Z)(e);const n=document.getElementById("dropdown-template"),o="dropdown"===a.getAttribute("data-type")?a:a.querySelector('select[data-type="dropdown"]');if(!o)return;o.after(document.importNode(n.content,!0));const r=o.nextElementSibling;r.id=t,o.remove();const l=r.querySelector(".dropdown-btn"),d=l.querySelector(".dropdown-label"),c=r.querySelector(".dropdown-content ul");return l&&d&&c?new s(l,d,c):void 0}setOptions(e){this._options=e}updateLabel(){this._label.innerHTML=this._value}select(e){this._label.innerHTML=e}open(){this._ul.classList.contains("open")||(this._options.forEach((e=>{const t=document.createElement("li");e===this._value&&(t.className="select selected"),t.innerText=e,t.onclick=()=>{this.select(e),this.value=e,this.onselect&&this.onselect(e),this.close()},t.onmouseover=()=>this._highlight(t),this._ul.appendChild(t)})),this._ul.classList.add("open")),this.is_open=!0}close(){for(this._ul.classList.remove(["open"]);this._ul.firstChild;)this._ul.removeChild(this._ul.firstChild);this.is_open=!1}}},1351:(e,t,a)=>{"use strict";a.d(t,{S:()=>n});var i=a(3707);let s={};function n(e,t){let a=e?.data?.title||t?.fallbackMessage?.title||"Error",n=e?.data?.message||t?.fallbackMessage?.message||"Action can not be performed",o=!1;if(e?.data){const t=e.data;t.code&&(a+=`- ${t.code}`,"7"==`${t.code}`[3]&&(o=!0)),t.url&&(n+=`
            more info`)}const r=e?.data?.code||`${a}\n${n}`;if(s[r])return;s[r]=!0;const l=()=>s[r]=!1;o?(0,i.Kp)(a,n,l):(0,i.vU)(a,n,l)}},8236:(e,t,a)=>{"use strict";a.d(t,{o:()=>n});var i=a(7780);const s={count:0,current:0},n=(e,t={})=>{const a=Object.assign({timeout:5500,closeOutside:!0},t),n=s.count;s.count=s.count+1;const o=document.querySelector(".modal-box");t.className&&o.classList.add(t.className);const r=o.parentElement;for(;o.firstChild;)o.removeChild(o.firstChild);const l=()=>{n==s.current&&r.classList.contains("show-modal")&&(r.classList.remove("show-modal"),a.closeCallback&&a.closeCallback())},d=e=>{e.target===r&&l()};a.closeOutside&&window.addEventListener("click",d);const c=e(l);s.current=n,o.appendChild(c),(0,i.ot)(o),r.classList.add("show-modal"),a.timeout>0&&setTimeout(l,a.timeout)}},5951:(e,t,a)=>{"use strict";function i(e,t,a="right"){if(!e)return;const i=e.querySelector(".fill");if(i){const e=`${["top","right","bottom","left"].map((e=>(e=>e===a?100-(t||0)+"%":0)(e))).join(" ")}`;i.style.inset=e}}a.d(t,{g:()=>i})},2957:(e,t,a)=>{"use strict";a.d(t,{Z:()=>w});var i=a(7780),s=a(5489),n=a(6648),o=a(646),r=a(1351);var l=a(3707),d=a(8236);let c=null,u=null,p=null;const m=a(5493).Z,v=()=>(0,l.Vp)((0,i.Iu)("ntf.success"),(0,i.Iu)("ntf.settings-suc"));function g(e){const t=document.getElementById("api_key");t&&(t.innerText=e)}function h(e,t){(0,s.ZP)("con-settings",e.link),function(e,t){const a=document.getElementById("conn-prusa-connect-status"),i=document.getElementById("conn-prusa-connect-url"),s=document.getElementById("edit-connect-del"),n="FINISHED"===e.connect.registration,{hostname:r,tls:l,port:d}=e.connect.settings,{ok:c,message:u}=e.connect,m=c&&n,v=document.getElementById("conn-prusa-connect-status-"+(m?"ok":"not-ok")),g=`${l?"https":"http"}://${r}${d?`:${d}`:""}`,h=`(${g})`;(t||p!==g)&&(i.value=g,p=g);(0,o.QH)(i.parentNode.parentNode,n),s&&(0,o.yx)(s,n||!c);b(a,v,m,u,h)}(e.link,t),function(e,t){const a=document.getElementById("conn-printer-status"),{port:i,baudrate:s}=t.printer.settings,{ok:n,message:o}=t.printer,r=document.getElementById("conn-printer-status-"+(n?"ok":"not-ok"));b(a,r,n,o,`(${i||"/dev/ttyACM0"} @ ${s||0}bps)`)}(e.state,e.link)}function b(e,t,a,s,n){e&&e.setAttribute("ok",Boolean(a)),t&&(t.innerHTML=(a?(0,i.Iu)("conn.suc"):s)+"
            "+n)}function f(e){switch(e.toLowerCase()){case"python":return(0,i.Iu)("sys-version.python");case"description":return(0,i.Iu)("sys-version.description");case"id":return(0,i.Iu)("sys-version.id");case"os":return(0,i.Iu)("sys-version.os");default:return e}}const y=(e,t,a)=>{const s=document.getElementById("modal-sysupgrade"),l=document.importNode(s.content,!0),d=l.getElementById("modal-sysupgrade__target"),c=l.getElementById("modal-sysupgrade__current"),p=l.getElementById("modal-sysupgrade__version"),m=l.getElementById("modal-sysupgrade__status"),v=l.getElementById("modal-sysupgrade__spinner"),g=l.getElementById("yes"),h=l.getElementById("no");return d.innerText=t,c.innerText=u,p.innerText=a,g.addEventListener("click",(t=>{t.preventDefault(),(0,o.H)(g,!0),(0,o.H)(h,!0),(0,o.yx)(g,!1),(0,o.yx)(h,!1),(0,o.yx)(v,!0),m.innerText=(0,i.Iu)("msg.sysupgrade.pending"),(0,n.LK)("/api/v1/update/prusalink",{method:"POST"}).then((()=>(m.innerText=(0,i.Iu)("msg.sysupgrade.wait-for-printer"),k(a)))).catch((e=>(0,r.S)(e))).finally((()=>{e(),window.location.href="/"}))})),h.addEventListener("click",(()=>e())),l},k=e=>new Promise(((e,t)=>{const a=()=>(0,n.LK)("/api/version").then((t=>{e()})).catch((e=>setTimeout(a,2500)));setTimeout(a,5e3)})),w={load:e=>{(0,i.Iu)("settings.title",{query:"#title-status-label"}),(0,n.LK)("/api/version?system=1").then((e=>{const t={version:e.data};u=t.version.server,(0,s.ZP)("settings",t),function(e){const t=document.querySelector("#sys-version .table");if(t)for(const[a,i]of Object.entries(e.version.system)){const e=document.createElement("div");e.className="row";const s=document.createElement("div");s.className="col txt-sm",s.innerHTML=`

            ${f(a)}

            `,e.appendChild(s);const n=document.createElement("div");n.className="col txt-md",n.innerHTML=`

            ${i}

            `,e.appendChild(n),t.appendChild(e)}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.getElementById("updates-check"),t=document.getElementById("updates-check__spinner"),a=a=>{a&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(t,a),(0,o.gL)(e,!a)};e&&t&&(e.onclick=()=>{a(!0),(0,n.LK)("/api/v1/update/prusalink").then((t=>{const a=t.data?.new_version,s=[{name:"PrusaLink",new_version:a}],n=e.parentNode.parentNode.parentNode;s.forEach((e=>{const t=document.createElement("div"),a=document.createElement("div"),s=document.createElement("p"),o=document.createElement("div"),r=document.createElement("p"),l=document.createElement("div"),c=document.createElement("span"),p=document.createElement("span"),m=document.createElement("span"),v="PrusaLink";if(t.className="row update-pkg",a.className="col",o.className="col",l.className="col",s.className="txt-bold txt-grey txt-sm",r.className="txt-md",c.className="txt-grey txt-sm",m.className="txt-grey txt-sm",s.innerText=v,p.innerHTML=" → ",e.new_version){c.innerText=u,m.innerText=e.new_version;const t=document.createElement("button"),a=document.createElement("p");a.innerText=(0,i.Iu)("btn.upgrade"),t.className="action",t.appendChild(a),l.appendChild(t),t.onclick=()=>(0,d.o)((t=>y(t,v,e.new_version)),{timeout:0,closeOutside:!1})}else m.innerText="The package is up to date";r.appendChild(c),r.appendChild(p),r.appendChild(m),a.appendChild(s),o.appendChild(r),t.appendChild(a),t.appendChild(o),t.appendChild(l),n.appendChild(t)}))})).catch((e=>(0,r.S)(e))).finally((()=>a(!1)))})}(),function(e){h(e,!0),document.getElementById("edit-connect-del").addEventListener("click",(t=>{(0,n.LK)("/api/connection",{method:"DELETE"}).then(v).catch((e=>(0,r.S)(e))).finally((()=>e.updateConnection()))}));const t=document.getElementById("edit-connect-set"),a=document.getElementById("edit-connect-set__spinner"),i=e=>{e&&document.querySelectorAll(".update-pkg").forEach((e=>{e.parentNode.removeChild(e)})),(0,o.yx)(a,e),(0,o.gL)(t,!e)};t.addEventListener("click",(t=>{i(!0);const a=document.getElementById("conn-prusa-connect-url")?.value;if(!a)return;const s=new URL(a);(0,n.LK)("/api/connection",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connect:{hostname:s.hostname,port:s.port?parseInt(s.port):0,tls:s.protocol.startsWith("https")?1:0}})}).then((t=>{const a=t?.data?.url;a&&window.open(a,"_blank"),setTimeout((()=>{e.updateConnection().finally((()=>i(!1)))}),5e3)})).catch((e=>{i(!1),(0,r.S)(e)}))}))}(e),(0,n.LK)("/api/settings").then((e=>{const t=e.data;!function(e){const t=document.querySelector("#settings #printer-name"),a=document.querySelector("#settings #printer-location"),i=document.querySelector("#settings #printer-network_error_chime"),s=document.querySelector("#settings #edit-printer"),l=()=>{(0,o.gL)(s,t.value.length>0&&a.value.length>0)};t.oninput=l,a.oninput=l,i.oninput=l,t.value=e.printer?.name||"",a.value=e.printer?.location||"",i.checked=!!e.printer?.network_error_chime,"api-key"in e&&g(e["api-key"]),s.onclick=()=>{(({name:e,location:t,network_error_chime:a})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({printer:{name:e,location:t},network_error_chime:a})}))({name:t.value,location:a.value,network_error_chime:i.checked}).then((()=>v())).catch((e=>(0,r.S)(e)))},l()}(t),function(e){const t=document.querySelector("#settings #username"),a=document.querySelector("#settings #password"),i=document.querySelector("#settings #new-password"),s=document.querySelector("#settings #re-password"),l=document.querySelector("#settings #edit-user"),d=()=>{(0,o.gL)(l,a.value.length>0&&(t.value.length>0||i.value.length>0&&s.value.length>0))};t.oninput=d,a.oninput=d,i.oninput=d,s.oninput=d,t.value=e.username||"",d(),l.onclick=()=>{((e,{username:t,newPassword:a,rePassword:i})=>(0,n.LK)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:{password:e,username:t,new_password:a,new_repassword:i}})}))(a.value,{username:t.value||void 0,newPassword:i.value||void 0,rePassword:s.value||void 0}).then((()=>v())).catch((e=>(0,r.S)(e)))}}(t)})).catch((e=>(0,r.S)(e))),function(){const e=document.querySelector("#settings #serial"),t=document.querySelector("#settings #edit-serial"),a=()=>{if(e&&t){c&&(e.value=`${c}`);const i=()=>{(0,o.gL)(t,!c&&e.value.length>0),(0,o.yx)(t,!c)};i(),e.oninput=i,(0,o.gL)(e,!c);const s=()=>{var t;(t=e.value,(0,n.LK)("/api/settings/sn",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:t})})).then((e=>{c=e.data.serial,v()})).catch((e=>(0,r.S)(e))).finally((()=>a()))};e.onkeyup=t=>{"Enter"===t.key&&(s(),e.blur())},t.onclick=s}};(0,n.LK)("/api/settings/sn",{headers:{"Content-Type":"application/json"}}).then((e=>{c=e.data.serial})).catch((e=>(0,r.S)(e))).finally((()=>a()))}(),function(){const e=document.getElementById("api_key-reset");e&&e.addEventListener("click",(()=>{(0,n.LK)("/api/settings/apikey",{method:"POST"}).then((e=>{g(e.data["api-key"]),v()})).catch((e=>(0,r.S)(e)))}),!1)}(),m?.load(),e.updateConnection()},update:e=>{m?.update(),h(e,!1)}}},5493:(e,t,a)=>{"use strict";a.d(t,{Z:()=>v});var i=a(7780),s=a(6648),n=a(1972),o=a(5412),r=a(1351),l=a(5502);let d=null,c=null;const u=67108864;function p(e){return`
          • ${e}
          • `}const m=()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files;if(d){const e=t.find((e=>e.name===d));e&&(!c||e.date>c)&&(c=e.date,e.size>u?function(){const e=document.querySelector("ul.logs"),t=(0,i.Iu)("logs.file-too-large",{size:(0,l.Z)("size",u)});e&&(e.innerHTML=p(t))}():(a=d,(0,s.iT)(`/api/logs/${a}`).then((e=>{const t=document.querySelector("ul.logs");t&&(e.data?t.innerHTML=e.data.split("\n").map((e=>p(e))).join(""):t.innerHTML=p((0,i.Iu)("logs.empty-file")))}))))}var a})).catch((e=>(0,r.S)(e)))},v={load:()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files,a=o.L.init("settings","log-list"),s=t.map((e=>e.name)),r=(0,i.Iu)("logs.select-file-placeholder");a.setOptions(s),a.select(r),a.onselect=e=>{!function(e){d=e,c=null,document.getElementById("download-log").onclick=()=>{(0,n.Z)(`/api/logs/${e}`,e)},m()}(e)}})).catch((e=>(0,r.S)(e)))},update:m}},3707:(e,t,a)=>{"use strict";a.d(t,{Kp:()=>o,Vp:()=>r,vU:()=>l});const i=document.getElementById("prusa-toast"),s={info:10500,success:10500,warning:10500,error:10500};function n({title:e,message:t,type:a,onClose:n}){const o=((e,t,a)=>{const i=document.getElementById("toast"),s=document.importNode(i.content,!0),n=s.querySelector("article");return n.className=a,s.querySelector("p").innerHTML=e,s.querySelector(".toast-body").innerHTML=t,n})(e,t,a),r=()=>{i.removeChild(o),n?.()};o.querySelector("span").addEventListener("click",(e=>{e.preventDefault(),r()}));const l=s[a];l&&setTimeout(r,l),i.appendChild(o)}function o(e,t,a){n({type:"warning",title:e,message:t,onClose:a})}function r(e,t,a){n({type:"success",title:e,message:t,onClose:a})}function l(e,t,a){n({type:"error",title:e,message:t,onClose:a})}},5489:(e,t,a)=>{"use strict";a.d(t,{NA:()=>n,ZP:()=>r,zR:()=>o});var i=a(646),s=a(5502);const n=(e,t)=>{try{const a=e.split(".");let i=t;for(;a.length;)i=i[a.shift()];return i}catch(e){return}},o=(e,t)=>{document.querySelectorAll(`[data-type="${e}"]`).forEach((e=>{const a=e.dataset.where,o=e.dataset.zeroes,r=a?n(a,t):t;e.innerHTML=(0,s.Z)(e.dataset.format,r),(0,i.QH)(e,"hide"===o&&!r)}))},r=o},2038:(e,t,a)=>{"use strict";a.d(t,{$:()=>r,i:()=>l});var i=a(8236),s=a(646),n=a(4800),o=a(7780);const r=(e,t,a)=>{const i=document.getElementById("modal-question"),n=document.importNode(i.content,!0),r=n.getElementById("modal-question-label"),l=document.createElement("p"),d=document.createElement("p");l.className="txt-sm my-md txt-bold",l.innerText=t,r.innerText=(0,o.Iu)("msg.file-exists.title"),d.innerText=(0,o.Iu)("msg.file-exists.overwrite-it"),r.parentNode.append(l),r.parentNode.append(d);const c=n.getElementById("yes"),u=n.getElementById("no");return u.addEventListener("click",e),c.addEventListener("click",(t=>{t.preventDefault(),(0,s.H)(c,!0),(0,s.H)(u,!0),a(),e()})),n},l=e=>{e.addEventListener("change",(t=>{e.checked&&e.getAttribute("data-link-state")!==n.PT.READY&&(0,i.o)((t=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),n=i.getElementById("yes"),o=i.getElementById("no");return n.addEventListener("click",(a=>{a.preventDefault(),(0,s.H)(n,!0),(0,s.H)(o,!0),t.checked=!0,e()})),o.addEventListener("click",(()=>{t.checked=!1,e()})),i})(t,e)),{timeout:0,closeOutside:!1})}))}},7049:(e,t,a)=>{"use strict";a.d(t,{Z:()=>k});var i=a(6648),s=a(1351),n=a(646),o=a(3707),r=a(7780),l=a(5951),d=a(2038),c=a(5489),u=a(4800),p=a(8495);let m=!1,v=null;function g(e){const t=p.Z.getContext(),a=u.cG.includes(e),i=document.querySelector("#upld-remote-start-pt");if(i&&(i.setAttribute("data-link-state",e),a||(i.checked=!1),(0,n.H)(i,!a)),t.transfer?.id){y("uploading"),(0,c.ZP)("download",t.transfer);const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.transfer.progress||0)}else y("choose")}function h(e){const t=e.data;if(![200,201,204].includes(e.code))return(0,s.S)(e),void f();if(t){if("FROM_WEB"===t.type){y("uploading"),(0,c.ZP)("download",{...t,time_start:t.time_transferring?Math.round((new Date).getTime()/1e3)-t.time_transferring:null});const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.progress||0)}}else{if(m)return function(){const e=(0,r.Iu)("ntf.success"),t=(0,r.Iu)("ntf.upld-suc",{file_name:""});(0,o.Vp)(e,t)}(),void f();y("choose")}}const b=(e,t,a,s)=>{if("local"===t)return e=e.split("?")[0].split("&")[0].split("#")[0],(0,i.LK)(`/api/download/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e,destination:a,...s})}).then((e=>function(e){y("uploading");const t=document.querySelector("#upld-remote .progress-bar");(0,l.g)(t,0);const a=(0,r.Iu)("ntf.success"),i=(0,r.Iu)("ntf.upld-start");(0,o.Vp)(a,i)}())).catch((e=>h(e)));(0,o.vU)("Can't upload to "+t,"You can upload only to local storage via remote upload!")};function f(){y("choose"),function(e){const t=document.querySelector("#upld-remote .progress-bar");t&&(0,l.g)(t,e||0)}(0),(0,c.ZP)("download",{}),v=null}function y(e){m="uploading"==e;const t=document.getElementById("upld-remote");t&&t.setAttribute("data-state",e)}const k={init:function(e,t){const a=document.getElementById("upld-remote");if(a){const i=a.querySelector("#remote-url"),s=a.querySelector("#remote-file-name"),o=a.querySelector("#upld-file"),r=a.querySelector("#upld-remote-start-pt");r&&(0,d.i)(r),o.onclick=()=>b(i.value,e,t,{to_print:r.checked,rename:s.value});const l=()=>{(0,n.H)(o,""===i.value)};l(),i.oninput=l}g()},update:g,get isUploading(){return m}}},7838:(e,t,a)=>{"use strict";a.r(t),a.d(t,{context:()=>Ve,default:()=>Xe});var i=a(7780);const s=500;let n=100,o=new Map;const r=(e,t)=>{o=e,n=t};function l(){const e=document.getElementById("graph");e&&(0==e.childElementCount&&function(){const e=document.getElementById("graph-template"),t=document.importNode(e.content,!0);document.getElementById("graph").appendChild(t),(0,i.ot)("graph")}(),o.forEach(((e,t)=>{!function(e,t){const a=(new Date).getTime();let i=[];if(e.length>1){let t=e[0],o=s-2.66*(a-t[0]-1e4)/1e3;for(let e=1;e1&&e[1][0]{var n=new XMLHttpRequest;const o=()=>{s(void 0)};!function(e,t){if(t){const a=e=>{if(!e.lengthComputable)return;let a=Math.round(e.loaded/e.total*100);t({loaded:e.loaded,total:e.total,percentage:a})};e.upload.addEventListener("progress",a,!1)}}(n,a.onProgress),n.addEventListener("load",(e=>{const t=function(e){function t(e){try{return JSON.parse(e)}catch{return}}return{status:e.status,statusText:e.statusText,ok:e.status>=200&&e.status<=299,data:t(e.response)}}(e.target);t.ok?i(t):s(t)}),!1),n.addEventListener("error",o,!1),n.addEventListener("abort",o,!1),n.open("PUT",`${m.O2}${e}`),a.print&&n.setRequestHeader("Print-After-Upload","?1"),n.setRequestHeader("Overwrite","?1"),n.setRequestHeader("Content-Type","text/x.gcode");for(const[e,t]of Object.entries((0,m.wU)()))n.setRequestHeader(e,t);n.send(t)}))};var g=a(2038),h=a(4800),b=a(8236);let f=!1,y=0;function k(e,t,a,i,s){const n=document.querySelector(e);n&&(n.setAttribute("accept",i.join(", ")),n.onchange=()=>{if(n.files.length>0&&!f){let e=n.files[0];S(e,t,a,s?.checked||!1)}})}function w(){[document.querySelector('#upld-direct input[type="file"]'),document.querySelector('#drop-zone input[type="file"]')].filter((e=>!!e)).forEach((e=>e.value="")),z(0),x("choose")}function x(e){f="uploading"===e;const t=document.getElementById("upld-direct");t&&t.setAttribute("data-state",e)}function z(e){y=e;const t=document.getElementById("upld-progress");t&&(t.innerHTML=`${e} %`)}const S=(e,t,a,s)=>{const n=["/api/v1/files",t,a,e.name].filter((e=>!!e)).join("/"),o=e.display_name||e.name,r=()=>e.arrayBuffer().then((e=>{x("uploading"),z(0),v(n,e,{onProgress:e=>{return t=e.percentage,x("uploading"),void z(t);var t},print:s}).then((()=>function(e){const t=(0,i.Iu)("ntf.success"),a=(0,i.Iu)("ntf.upld-suc",{file_name:e});(0,c.Vp)(t,a)}(o))).catch((e=>function(e,t){if(t)(0,u.S)(t);else{const t=(0,i.Iu)("ntf.error"),a=(0,i.Iu)("ntf.upld-unsuc",{file_name:e});(0,c.vU)(t,a)}}(o,e))).finally((()=>w()))}));(0,m.LK)(n,{method:"HEAD"}).then((()=>{try{(0,b.o)((e=>(0,g.$)((()=>{e(),w()}),o,r)),{timeout:0,closeOutside:!1})}catch(e){console.error("Modal error",e)}})).catch((()=>r()))};const E={init:function(e,t,a){(0,i.Iu)("upld.direct.choose",{query:"#upld-direct p",file:a.join(", ")}),function(e,t,a){const i=document.getElementById("upld-direct-start-pt");i&&(0,g.i)(i);const s=document.getElementById("drop-zone");s&&(document.ondragenter=e=>(0,p.yx)(s,!0),s.ondragleave=e=>(0,p.yx)(s,!1),document.ondrop=e=>(0,p.yx)(s,!1),k('#drop-zone input[type="file"]',e,t,a,i));k('#upld-direct input[type="file"]',e,t,a,i)}(e,t,a),f&&(x("uploading"),z(y))},update:function(e){const t=h.cG.includes(e),a=document.querySelector("#upld-direct-start-pt");a&&(a.setAttribute("data-link-state",e),t||(a.checked=!1),(0,p.H)(a,!t))},get isUploading(){return f},initInputByQuery:k};const P=class{get selected(){return this._selected}get isLocked(){return this._isLocked}lock(){this._isLocked=!0,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.getAttribute("data-tab-btn")!==this.selected&&e.setAttribute("locked",!0)}))}unlock(){this._isLocked=!1,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.hasAttribute("locked")&&e.removeAttribute("locked")}))}constructor(){this._root=null,this._selected=null,this._isLocked=!1}init(e){this._root=e,this._root&&(e.querySelectorAll("[data-tab-btn]").forEach((e=>{e.onclick=()=>{if(!this._isLocked){const t=e.getAttribute("data-tab-btn");t===this._selected||(this.closeTab(),this.openTab(t))}}})),this.openTab(this._selected,!0))}openTab(e){if(this._root&&e){const t=this._root.querySelector(`[data-tab="${e}"]`);t&&t.setAttribute("opened",!0);const a=this._root.querySelector(`[data-tab-btn="${e}"]`);a&&a.setAttribute("selected",!0),this._selected=e}}closeTab(){if(this._root&&this._selected){const e=this._root.querySelector(`[data-tab="${this._selected}"]`);e&&e.setAttribute("opened",!1);const t=this._root.querySelector(`[data-tab-btn="${this._selected}"]`);t&&t.setAttribute("selected",!1),this._selected=null}}},N=a(7049).Z,L=new P;function I(){E.isUploading?(L.openTab("direct"),L.lock()):N?.isUploading?(L.openTab("remote"),L.lock()):(L.unlock(),L.selected||L.openTab("direct"))}const T={init:function(e,t="",a){E.init(e,t,a),N?.init(e,t),L.init(document.getElementById("upld")),I()},update:function(e){E?.update(e),N?.update(e),I()},hide:function(e){(0,p.QH)(document.getElementById("upld"),e)}};var _=a(2451),j=a(5489),C=a(8751);const A=e=>(0,m.LK)(e,{method:"POST",headers:{"Content-Type":"application/json"}}),D=e=>(0,m.LK)(`/api/v1/job/${e}/resume`,{method:"PUT"}).catch((e=>(0,u.S)(e))),B=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const s=document.getElementById("modal-question"),n=document.importNode(s.content,!0);n.getElementById("modal-question-label").innerText=(0,i.Iu)("msg.cancel");const o=n.getElementById("yes"),r=n.getElementById("no");return o.addEventListener("click",(i=>{i.preventDefault(),t.onConfirm(),(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(`/api/v1/job/${a}`,{method:"DELETE",headers:{"Content-Type":"application/json"}}).catch((e=>{t.onError(),(0,u.S)(e)})),e()})),r.addEventListener("click",e),n})(a,t,e)),{timeout:0,closeOutside:!1})},O=(e,t)=>{e?(0,b.o)((e=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),s=i.getElementById("yes"),n=i.getElementById("no");return s.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(s,!0),(0,p.H)(n,!0),A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e))).finally((()=>e()))})),n.addEventListener("click",e),i})(e,t)),{timeout:0,closeOutside:!1}):A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e)))},q=()=>(0,m.LK)("/api/job",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"cancel"})}).catch((e=>(0,u.S)(e)));var M=a(1972);const R=(e,t,a)=>{(0,M.Z)(e,t),a()},H=(e,t,a,s,n=!1)=>{const o=document.getElementById("modal-question"),r=document.importNode(o.content,!0);r.getElementById("modal-question-label").innerText=n?(0,i.Iu)("msg.del-folder",{folder_name:a}):(0,i.Iu)("msg.del-proj",{file_name:a});const l=r.getElementById("yes"),d=r.getElementById("no");return d.addEventListener("click",e),l.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(l,!0),(0,p.H)(d,!0),(0,m.LK)(t,{method:"DELETE",headers:{force:"?1"}}).then((()=>s&&s())).catch((e=>(0,u.S)(e))).finally((t=>e()))})),r},U=(e,t,a)=>{(0,b.o)((i=>H(i,e,t,a)),{timeout:0,closeOutside:!1})},K=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const i=document.getElementById("modal-file-name"),s=document.importNode(i.content,!0),n=s.getElementById("modal-file-name__input"),o=s.getElementById("yes"),r=s.getElementById("no");return r.addEventListener("click",e),o.addEventListener("click",(i=>{i.preventDefault();const s=n.value;if(s){const i=t(s);(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(i,{method:"PUT",headers:{"create-folder":"?1"}}).then((()=>a&&a())).catch((e=>(0,u.S)(e))).finally((t=>e()))}})),s})(a,e,t)),{timeout:0,closeOutside:!1})};function Z(e){return`inset(${100-e}% 0% 0% 0%)`}var V=a(5951);const F={},$=()=>{F.title=null,F.questionChildren=null,F.yes=null,F.no=null,(0,C.g9)(F.next)},G={load:()=>{F.title||(0,C.c4)("#dashboard"),document.getElementById("title-status-label").innerHTML=F.title;const e=document.getElementById("question"),t=F.questionChildren;Array.isArray(t)?t.forEach((t=>e.appendChild(t))):e.innerHTML=t;for(let e of["yes","no"]){const t=document.getElementById(e),a=F[e];t.querySelector("p").innerHTML=F[e+"Text"],t.addEventListener("click",(e=>{e.stopPropagation(),a($)}))}}};(0,i.Iu)("exp-times.exp-time"),(0,i.Iu)("exp-times.inc"),(0,i.Iu)("exp-times.layer-1st"),(0,i.Iu)("exp-times.profile");const W=e=>{const t=e.querySelector("img");(0,p.gL)(e,!1),t&&(t.setAttribute("data-src",t.src),t.src=document.querySelector(".loading-overlay img").src)},Y=e=>{const t=e.querySelector("img");if((0,p.gL)(e,!0),t){const e=t.getAttribute("data-src");e&&(t.src=e,t.setAttribute("data-src",""))}};var J=a(8495);let Q=null,X=null;function ee(e,t=!1){const a=te(e,t);Q&&Q.state!==e.state&&(Q=null),a&&ae(e,t)}function te(e,t){const a=document.getElementById("job");if(!a)return!1;const i=t?!!e.files.selected:!!e.job?.id;return(0,p.yx)(a,i),i}function ae(e,t){const a=t?e.files.selected:e.job,s=a?.file?.resource;e.state;var n;if(a.file?(0,p.Zk)():(0,p.QP)(),function(e,t){const a=document.querySelector(".progress-bar"),i=document.querySelector(".progress-pct"),s=document.querySelector(".preview-img-wrapper"),n=void 0!==t;(function(e,t,a){if(!e)return;const i=t?.url&&t.ready?t.url:document.querySelector(".thumbnail-fallback")?.src;if(e.getAttribute("data-src")!==i){for(;e.firstChild;)e.removeChild(e.firstChild);e.setAttribute("data-src",i);const t=document.createElement("div");t.className="progress-img";const s=document.createElement("img");s.src=i,s.className="background",t.appendChild(s);const n=document.createElement("img");n.src=i,n.className="foreground",n.style.clipPath=Z(a??100),t.appendChild(n),e.appendChild(t)}else{const t=e.querySelector(".foreground");t&&(t.style.clipPath=Z(a))}})(s,e,t),(0,V.g)(a,t,"top"),(0,p.yx)(a,n),(0,p.yx)(i,n)}(a.thumbnail,a.progress),n=t,(0,p.QH)(document.querySelector("#job #pnt-time"),n),(0,p.QH)(document.querySelector("#job #rem-time"),n),(0,j.ZP)("job",a),s&&a.file){const s=t?null:a.id;!function(e,t,a){const i=t.file;(function(e,t){const a=document.querySelector("#job #stop"),i=document.querySelector("#job-close"),s=h.PT.fromApi(e),n=h.cG.includes(s),o=!Q&&h.Dt.includes(e),r=J.Z.getContext();if((0,p.gL)(a,o),a&&t){const i=t||!1;(0,p.yx)(a,i),a.onclick=()=>{B(t,{onConfirm:()=>{Q={code:"stop",state:e},(0,p.gL)(a,!1)},onError:()=>Q=null})}}i&&((0,p.yx)(i,n||!t),i.onclick=t?q:()=>r.selectFile(null))})(e,a),function(e,t,a){const i=document.querySelector("#job #start"),s=h.cG.includes(e);i&&((0,p.yx)(i,s),(0,p.gL)(i,s),i.onclick=()=>O(e!==h.PT.READY,t.resource))}(e,i),ie(e,i,a),function(e,t,a){const i=document.querySelector("#job #download");if(i){const e=!a&&t.refs?.download&&(!X||X===t.refs.download),s=t.display_name||t.name;(0,p.yx)(i,e),e&&(i.onclick=()=>{X=t.refs.download,W(i),R(t.refs.download,s,(()=>{X=null,Y(i)}))})}}(0,i,a),!a||(function(e,t,a){const i=document.querySelector(a),s=e===h.PT.PRINTING;(0,p.yx)(i,s),(0,p.gL)(i,!Q&&s),i&&(i.onclick=()=>{(0,p.gL)(i,!1),Q={code:"pause",state:e},(e=>(0,m.LK)(`/api/v1/job/${e}/pause`,{method:"PUT"}).catch((e=>(0,u.S)(e))))(t).catch((()=>Q=null))})}(e,a,"#job #pause"),function(e,t){const a=document.querySelector("#job #resume"),i=e===h.PT.PAUSED;(0,p.yx)(a,i),(0,p.gL)(a,!Q&&i),a&&(a.onclick=()=>{(0,p.gL)(a,!1),Q={code:"resume",state:e},D(t).catch((()=>Q=null))})}(e,a))}(e.state,a,s),(0,j.ZP)("file",a.file),function(e,t){const a=(0,i.Iu)("prop.na");document.getElementById("job").querySelectorAll(".job-details .job-prop").forEach((e=>{const t=e.querySelector(".job-prop-grid").children;let i=!0;for(const e of t){var s=e.querySelector("[data-type]")?.innerHTML.trim()===a;(0,p.QH)(e,s),s||(i=!1)}(0,p.QH)(e,i)}))}()}}function ie(e,t,a){const i=document.querySelector("#job #delete");if(i){const s=t.display_name||t.name;(0,p.gL)(i,!t.readOnly&&t.resource),(0,p.yx)(i,!a||e===h.cG.includes(e)),i.onclick=()=>{U(t.resource,s,(()=>{a||Ve.selectFile(null)}))}}}p.QP,p.Zk;const se=e=>[...e].filter((e=>!!e)).map((e=>e.trim())).join(" - "),ne=e=>{if(!e.printer)return;const t=e.state;ee(e),T.update(t),_.Z.update(e,null)},oe={load:e=>{(0,i.Iu)("home.link",{query:"#title-status-label"}),l(),ne(e),_.Z.update(e,null),_.Z.updateCurrentCamera(),(0,m.LK)("/api/v1/storage").then((t=>{const a=t.data.storage_list.find((e=>e.available&&!e.read_only));if(a){const t=a.path.replace("/","");T.init(t,"",e.fileExtensions)}}))},update:ne};var re=a(5502);const le=function(e,t="smooth"){if(!e)return;const a=e.getBoundingClientRect(),i=document.body.getBoundingClientRect(),s=a.top-(i.top+function(){const e=document.querySelector(".header");return e&&"sticky"===getComputedStyle(e).position?e.getBoundingClientRect().height:0}());(a.bottom>window.innerHeight||a.top<0)&&window.scroll({top:s,behavior:t})};var de=a(5537);const ce=e=>{const t=(0,de.Z)(e).querySelector(".kebab"),a=t.querySelector(".kebab-menu"),i=t.querySelector("ul");a.addEventListener("click",(e=>{e.stopPropagation(),function(e){return e&&e.classList.contains("open")}(i)?ue(i):function(e,t){e.classList.add("open"),(0,p.Ti)((()=>ue(e)),e,t)}(i,a)})),i.querySelectorAll("li").forEach((e=>{e.addEventListener("click",(()=>ue(i)))}))};function ue(e){e.classList.remove("open")}const pe=e=>{const t=document.querySelectorAll(".storage-select-content li");t&&t.forEach((t=>t.setAttribute("selected",t.getAttribute("data-storage")===e)))},me=e=>{const t=document.querySelector("#node-storage .storage-select-btn-inner");t&&(t.innerHTML=e)},ve=(e,t)=>{e&&t&&(t.classList.toggle("open"),(0,p.Ti)((()=>{t?.classList.remove("open")}),e,t))},ge=e=>{const t=document.querySelector(".node-storage-space");if(!t)return;const a=e.available&&!!e.totalSpace;if((0,p.yx)(t,a),a){const a=e.freeSpace,s=e.totalSpace,n=s-a,o=Math.round(100*(s?n/s:0)),r=(0,i.Iu)("prop.storage-used-space",{used:(0,re.Z)("size",n),free:(0,re.Z)("size",a),total:(0,re.Z)("size",s)});(0,V.g)(t,o),document.getElementById("storage-pct").innerHTML=(0,re.Z)("percent",o),document.getElementById("storage-space").innerHTML=r}},he=()=>{const e=document.querySelector("#node-storage .storage-select-btn");e&&(e.onclick=t=>{t.stopPropagation(),ve(e,dropdownContent)})},be=(e,t,a,i=!1)=>{const s=document.querySelector(".storage-select-content");document.querySelectorAll(".storage-select-content li").forEach((i=>{const n=i.getAttribute("data-storage");let o=!1;if(n in e){const r=e[n],l=i.querySelector("p");o=!0,r.name&&(l.innerText=r.name),i.setAttribute("selected",n===t),i.onclick=e=>{e.stopPropagation(),me(i.innerHTML),pe(n),s.classList.remove("open"),ge(r),a(n)}}(0,p.yx)(i,o)})),i&&ge(e[t])},fe="FOLDER",ye="PRINT_FILE",ke="FIRMWARE",we=["name","date","size"];let xe=null;const ze={origin:null,current_path:[],storages:{},files:[],eTag:null,sort:{field:"date",order:"desc"}};function Se(){const e=ze.origin;return ze.storages[e]}function Ee(){return ze.current_path.map((e=>e.path)).join("/")}function Pe(e){const t=Se(),a=Ee();return Ne(t.path,a,e)}function Ne(e,t,a){const i=["/api/v1/files",e,t,a].filter((e=>!!e)).join("/");return a?i:`${i}/`}const Le=(e={})=>{(0,m.LK)("/api/v1/storage",{}).then((t=>{const a=t.data?.storage_list;let i=!!e.redraw,s=!!e.redraw;if(a&&a.forEach((e=>{const t=e.type,a={name:e.name,path:e.path.replaceAll("/",""),available:e.available,readOnly:e.read_only,freeSpace:e.free_space,totalSpace:e.total_space};if(t in ze.storages){const e=ze.storages[t];e.available!==a.available&&(i=!0),e.freeSpace!==a.freeSpace&&ze.origin===t&&(s=!0)}else i=!0,s=!0;ze.storages[t]=a})),!ze.origin){let e=Object.keys(ze.storages).find((e=>ze.storages[e].available));e||(e=Object.keys(ze.storages).find((()=>!0))),e&&Oe(e)}i&&be(ze.storages,ze.origin,Oe,s)}))},Ie=(e={})=>{if(!Se())return;const t=Pe();let a=ze.eTag;e.force&&(ze.eTag=null,a=null,function(e){const t=Se(),a=Ee();T.init(t.path,a,e?.fileExtensions),T.hide(!1!==t?.readOnly)}(J.Z.getContext()));const i=e=>{ze.files=e,Te(),_e()};(0,m.LK)(t,{headers:{"If-None-Match":a}}).then((s=>{if(t!==Pe())return;const n=s.eTag;if(!n||n!==a){ze.eTag=n;const t=s.data.children||[];if(!n&&!e.force){const e=(e,t)=>e.display_name.localeCompare(t.display_name);if(JSON.stringify([...ze.files].sort(e))===JSON.stringify(t.sort(e)))return}i(t)}})).catch((()=>{ze.eTag=null,i([]),J.Z.getContext().selectFile(null)}))},Te=()=>{const e=document.getElementById("files");if(e){for(;e?.firstChild;)e.removeChild(e.firstChild);e.appendChild(function(){const e=Se(),t=[e.name,...ze.current_path.map((e=>e.name))],a=je("node-current",t.pop()||"Root");a.getElementById("path").innerHTML=`${t.join("/")}/`;const s=a.getElementById("create");s&&(s.onclick=e=>{e.stopPropagation(),K(Pe)});(0,p.H)(s,!1!==e.readOnly),a.querySelector("#sort-by-name p").innerText=(0,i.Iu)("sort.by-name"),a.querySelector("#sort-by-date p").innerText=(0,i.Iu)("sort.by-date"),a.querySelector("#sort-by-size p").innerText=(0,i.Iu)("sort.by-size");return a.querySelector(`#sort-by-${ze.sort.field}`).classList.add(ze.sort.order),we.forEach((e=>{a.getElementById(`sort-by-${e}`).addEventListener("click",(t=>{const a=document.getElementById(`sort-by-${e}`);document.getElementById(`sort-by-${ze.sort.field}`).classList.remove(ze.sort.order);const i=ze.sort.field===e&&"asc"===ze.sort.order?"desc":"asc";a.classList.add(i),ze.sort.field=e,ze.sort.order=i,Te(),_e()}),!1)})),a}()),ze.current_path.length&&e.appendChild(function(){const e=je("node-up","",(()=>{ze.current_path.pop(),Te(),Ie({force:!0})}));return(0,i.ot)(e),e}())}},_e=()=>{const e=document.getElementById("files");let t;if(e)for(let a of(e=>(e.sort(((e,t)=>{if(e.type===fe&&t.type!==fe)return-1;if(e.type!==fe&&t.type===fe)return 1;const a="desc"===ze.sort.order?-1:1;switch(ze.sort.field){case"date":return a*((e.m_timestamp||0)-(t.m_timestamp||0));case"size":return a*((e.size||0)-(t.size||0));default:return a*e.display_name.localeCompare(t.display_name)}})),e))(ze.files)){switch(a.type.toUpperCase()){case fe:t=Ce(a,{files:void 0,folders:void 0});break;case ye:t=De(a);break;case ke:t=Be(a,"firmware");break;default:t=Be(a,"file")}e.appendChild(t)}};function je(e,t,a){const i=document.getElementById(e).content,s=document.importNode(i,!0);return a&&s.querySelector(".node").addEventListener("click",(e=>{a(e),e.preventDefault()})),s.querySelector("#name")?.appendChild(document.createTextNode(t)),s}function Ce(e,t){const a=e.display_name||e.name,i=e.name,s=Pe(i),n=je("node-folder",a,(()=>{ze.current_path.push({path:i.replace("/",""),name:a}),Te(),Ie({force:!0})})),o=[t?.files?`${t.files} files`:null,t?.folders?`${t.folders} folders`:null].filter((e=>null!=e)).join(" | ");n.getElementById("details").innerHTML=o;const r=n.getElementById("delete");(0,p.gL)(r,!(e.read_only||e.ro)),r&&(r.onclick=e=>{var t,i,n;e.stopPropagation(),t=s,i=a,n=()=>{},(0,b.o)((e=>H(e,t,i,n,!0)),{timeout:0,closeOutside:!1})});const l=n.getElementById("rename");return l&&(l.onclick=e=>{e.stopPropagation(),console.log("renameFolder")}),n}const Ae=e=>{!function(e){const t=J.Z.getContext(),a=t.files.selected,i=Ee(),s=Pe(e.name);if(a===i)return;t.selectFile({...e,path:i,resource:s});const n=document.getElementById("job");n&&le(n)}(e)};function De(e){const t=je("node-file",e.display_name||e.name,(t=>Ae(e))),a=t.querySelector(".node-details");a.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const s=(0,j.NA)(t.dataset.where,e);if(s){const e=(0,re.Z)(t.dataset.format,s);t.querySelector("p[data-value]").innerHTML=e}else a.removeChild(t)}));const s=e?.refs?.thumbnail;if(s){const a=t.querySelector("img.node-img");a.setAttribute("data-src",e.date?`${s}?ct=${e.date}`:s),xe.observe(a)}return ce(t),function(e,t){const a=Pe(e.name),i=e.display_name||e.name,s=t.getElementById("details");s&&(s.onclick=t=>{Ae(e)});const n=t.getElementById("start");n&&(n.onclick=e=>{e.stopPropagation(),console.log("startPrint")});const o=t.getElementById("rename");o&&(o.onclick=e=>{e.stopPropagation(),console.log("renameFile")});const r=t.getElementById("delete");r&&((0,p.gL)(r,!(e.read_only||e.ro)),r.onclick=e=>{U(a,i),e.stopPropagation()});const l=t.getElementById("download");l&&((0,p.gL)(l,e.refs?.download),l.onclick=t=>{W(l),R(e.refs?.download,i,(()=>Y(l))),t.stopPropagation()})}(e,t),(0,i.ot)(t),t}function Be(e,t){const a=je("node-file",e.display_name||e.name,(e=>{})),s=a.querySelector(".node-details");s.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const a=(0,j.NA)(t.dataset.where,e);if(a){const e=(0,re.Z)(t.dataset.format,a);t.querySelector("p[data-value]").innerHTML=e}else s.removeChild(t)}));const n=a.querySelector("img.node-img");if(t){const e=n.getAttribute(`data-${t}`);e&&(n.src=e),xe.observe(n)}else(0,p.yx)(n,!1);return function(e){["details","start","rename","delete","download"].forEach((t=>{const a=e.getElementById(t);a&&(0,p.yx)(a,!1)}))}(a),a}function Oe(e){if(e in ze.storages){const t=ze.storages[e];ze.origin=e,ze.current_path=[],Te(),t.available&&Ie({force:!0}),T.hide(!1!==t.readOnly)}}const qe={load:function(e){if(ze.eTag=null,(0,i.Iu)("proj.link",{query:"#title-status-label"}),!xe){xe=new IntersectionObserver(((e,t)=>{e.forEach((e=>{if(e.isIntersecting){const t=e.target.getAttribute("data-src");(0,m.gJ)(t).then((({url:t})=>{e.target.src=t})).catch((()=>{}))}}))}),{rootMargin:"0px 0px 50px 0px",threshold:0})}e||(e=J.Z.getContext());const t=e.files.selected;if(t){(function(e,t){if(!e||!t)return null;let a=ze.files.find((t=>t.origin===e));const i=t.split("/").filter((e=>e)).slice(1);for(const e of i){if(!a)break;a=a.children.find((t=>t.name===e))}return"machinecode"===a?.type?a:null})(t.origin,t.path)||e.selectFile(null)}ee(e,!0),he(),Le({redraw:!0}),Ie({force:!0})},update:e=>{const t=e.state;Le(),Ie(),ee(e,!0),T.update(t)},getApiPath:Ne},Me=e=>{e.getAttribute("tooltip")||(e.addEventListener("click",(t=>{e.classList.toggle("tooltip-handle--active");const a=e.querySelector("span");(0,p.Ti)((()=>e.classList.remove("tooltip-handle--active")),a,e),t.preventDefault()}),!1),e.setAttribute("tooltip",!0))};let Re=0,He=null;const Ue=()=>{const e=e=>{const t=document.getElementById("offline-screen"),a=document.importNode(t.content,!0);return["not-responsing","please-wait"].forEach((e=>{const t=a.getElementById(`offline-screen.${e}`);t&&(t.innerHTML=(e=>{switch(e){case"not-responsing":return(0,i.Iu)("msg.offline.not-responsing");case"please-wait":return(0,i.Iu)("msg.offline.please-wait");default:return""}})(e))})),He={node:a,close:()=>{e(),He=null}},a};(0,b.o)((t=>e(t)),{timeout:0,closeOutside:!1,className:"offline-screen"})},Ke=({link:e,isConnected:t})=>{const a=["connect"];for(const t in e){const{ok:s,message:n}=e[t],o=document.getElementById(`conn-status-${t}-msg`),r="ok"===n.toLowerCase();o&&(o.innerHTML="connect"===t?r?(0,i.Iu)("conn.connect.linked"):(0,i.Iu)("conn.connect.not-linked"):(0,i.Iu)("conn.error_status"));const l=document.getElementById(`conn-status-${t}`),d=l.querySelector(".icon-success"),c=l.querySelector(".icon-warning"),u=l.querySelector(".info-message-tooltip"),m=u.querySelector("span"),v=void 0===s||s&&!a.includes(t);u&&m&&(r||(m.innerText=n,Me(u)),(0,p.QH)(u,r)),(0,p.QH)(l,v),v||((0,p.QH)(d,!s),(0,p.QH)(c,s))}const s=e=>{Re<3?Re+=1:(e?Ue():He.close(),Re=0)};t?He&&s(!1):!He&&s(!0)};const Ze=e=>{return{resource:e.resource??(t=e.path,a=e.name,`${t}${t.endsWith("/")?"":"/"}${a}`),name:e.name,displayName:e.display_name??e.name,path:e.path,displayPath:e.display_path??e.path,size:e.size,refs:{download:e.refs?.download,icon:e.refs?.icon,thumbnail:e.refs?.thumbnail},lastModified:e.m_timestamp||0,meta:{filamentType:e.meta?.filament_type,layerHeight:e.meta?.layer_height,estimatedPrintTime:e.meta?.estimated_print_time},readOnly:e.read_only||e.ro};var t,a},Ve=new class{constructor(){this.state=void 0,this.printer=void 0,this.job=void 0,this.transfer=void 0,this.version=void 0,this.storage=[],this.currentStorage=void 0,this.telemetry={temperature:{nozzle:{current:0,target:0},bed:{current:0,target:0}}},this.flow=0,this.speed=0,this.fan={hotend:0,print:0},this.link={connect:{ok:!0,message:"OK",settings:{hostname:"connect.prusa3d.com",tls:!0,port:0}},printer:{ok:!0,message:"OK",settings:{port:"",baudrate:115200}}},this.files={location:"/",selected:{file:void 0,thumbnail:void 0}},this.fileExtensions=[".gcode"],this.updateConnection()}updateConnection(){return(0,m.LK)("/api/connection",{method:"GET"}).then((e=>{this.link.connect.settings={hostname:e.data.connect.hostname,port:e.data.connect.port,tls:e.data.connect.tls},this.link.connect.registration=e.data.connect.registration,this.link.printer.settings={port:e.data.current.port,baudrate:e.data.current.baudrate}}))}update({status:e,printer:t}){e?.ok&&e.payload&&this.updateStatus(e.payload.data),t&&this.updatePrinter(t)}updateStatus(e){this.updateTelemetry(e.printer),this.updateJob(e.job),this.updateStorage(e.storage),this.updateTransfer(e.transfer),this.updateCamera(e.camera)}updatePrinter(e){this.printer={name:e.name,location:e.location,farmMode:e.farm_mode,nozzleDiameter:e.nozzle_diameter,minExtrusionTemp:e.min_extrusion_temp,serial:e.serial,hostname:e.hostname,port:e.port}}updateTelemetry(e){this.state=h.PT.fromApi(e.state.toUpperCase()),this.telemetry={temperature:{nozzle:{current:e.temp_nozzle,target:e.target_nozzle},bed:{current:e.temp_bed,target:e.target_bed}},axis:{x:e.axis_x,y:e.axis_y,z:e.axis_z},flow:e.flow,speed:e.speed,fan:{hotend:e.fan_hotend,print:e.fan_print}},this.link.connect.message=e.status_connect?.message??"",this.link.connect.ok=e.status_connect?.ok,this.link.printer.message=e.status_printer?.message??"ok",this.link.printer.ok=e.status_printer?.ok??!0}updateJob(e){const t=this.job?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.job=void 0);(0,m.LK)("/api/v1/job").then((e=>{const t=e.data;t.id===this.job.id&&(this.job={...this.job,file:Ze(t.file),thumbnail:{source:!t.file.refs?.thumbnail,ready:!t.file.refs?.thumbnail,url:void 0}},this.job.thumbnail.ready||(0,m.gJ)(this.job.file.refs.thumbnail).then((({url:e})=>{this.job.id===a&&(this.job.thumbnail.url=e)})).catch((e=>console.error("Failed to fetch thumbnail",e))).finally((()=>this.job.thumbnail.ready=!0)))})).catch((e=>(0,u.S)(e)))}if(a){const t=this.job?.timeRemaining,s=e.time_remaining,n=t!=s?(i=s,Math.round(Date.now()/1e3)+i):this.job?.estimatedEnd;this.job={file:void 0,...this.job,timePrinting:e.time_printing,id:a,progress:e.progress,timeRemaining:e.time_remaining,estimatedEnd:n}}var i}updateStorage(e){Object.keys(e).forEach((e=>{const t={path:e.path,name:e.name,readOnly:e.readOnly,freeSpace:e.freeSpace},a=this.storage.findIndex((e=>e.path===t.path));-1!==a?this.storage[a]=t:this.storage.push(t)}))}updateTransfer(e){const t=this.transfer?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.transfer=void 0);(0,m.LK)("/api/v1/transfer").then((e=>{const t=e.data;this.transfer={...this.transfer,file:{displayName:t.display_name??t.name,path:t.path,size:t.size,toPrint:t.to_print}}})).catch((e=>(0,u.S)(e)))}if(a){const t=Math.round(Date.now()/1e3),i=this.transfer?.file?.size||0,s=e.time_transferring,n=void 0!==s?t-s:void 0,o=e.data_transferred,r=i-o,l=s>0&&r>=0?r/(o/s):void 0;this.transfer={...this.transfer,timeTransferring:s,timeStarted:n,timeRemaining:l,id:a,progress:e.progress,dataTransferred:o}}}updateCamera(e){this.camera={id:e?.id}}selectFile(e){if(!e)return void(this.files.selected=null);const t=e.refs?.thumbnail;if(this.files.selected={file:Ze(e),thumbnail:{source:t,ready:!t,url:void 0},timeRemaining:e.meta?.estimated_print_time},!e.meta){const e=this.files.selected.file.resource;(0,m.LK)(e).then((t=>{const a=Ze({...t.data,resource:e});this.files.selected.file.resource===e&&(this.files.selected.file.meta=a.meta,this.files.selected.timeRemaining=a.meta?.estimatedPrintTime)}))}t&&(0,m.gJ)(t).then((({url:e})=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.url=e)})).catch((()=>{})).finally((()=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.ready=!0)}))}},Fe=e=>{const t=e.load;return e.load=()=>{(()=>{const e=document.getElementById("title-printer");e&&(e.innerHTML=$e())})(),t(Ve)},e},$e=()=>(e=>se([e.printer?.location,e.printer?.name]))(Ve);let Ge=oe;const We={routes:[{path:"dashboard",html:a(2373),module:Fe(oe),getTitle:()=>(0,i.Iu)("home.link")},{path:"question",html:a(5198),module:Fe(G)},{path:"files",html:a(7189),module:Fe(qe),getTitle:()=>(0,i.Iu)("proj.storage")},{path:"settings",html:a(2936),module:Fe(a(2957).Z),getTitle:()=>(0,i.Iu)("settings.title")},{path:"control",html:a(3478),module:Fe(a(732).Z),getTitle:()=>(0,i.Iu)("control.link")},{path:"cameras",html:a(5464),module:Fe(a(2451).Z),getTitle:()=>(0,i.Iu)("cameras.link")}].filter((e=>null!=e)),init:e=>{Ve.update(e),Ye()},update:e=>{Ve.update(e);const t=(0,C.nC)(),a=(e=>{const t=e.state;let a=(0,h.ny)(t);switch(t){case"IDLE":return"";case"PRINTING":return`${a} ${Math.round(e?.job?.progress||0)}%`;default:return a}})(Ve);var i;document.title=(i=[a,We.routes.find((e=>e.path===t)).getTitle()],se([...i,$e(),"PrusaLink"])),(0,j.zR)("telemetry",Ve),(e=>{const t=e,a=document.getElementById("printer-status");a&&(a.innerHTML=(0,h.ny)(t))})(Ve.state),Je(Ve.telemetry),Qe()},setConnected:e=>{Ke({link:Ve.link,isConnected:e})},setModule:e=>{Ge=e},getContext:()=>Ve},Ye=()=>{let e=new Map([["temp-line-blue",[]],["temp-line-orange",[]]]);r(e,300),l()},Je=e=>{const t=(new Date).getTime();d("temp-line-blue",[t,e.temperature.bed.current]),d("temp-line-orange",[t,e.temperature.nozzle.current]),l()},Qe=()=>{Ge&&Ge.update&&Ge.update(Ve)},Xe=We},8495:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=a(7838).default},8751:(e,t,a)=>{"use strict";a.d(t,{c4:()=>l,g9:()=>d,nC:()=>o});var i=a(7780),s=a(8495);const n=e=>{const[t,a]=e.split("#");return a||"dashboard"},o=()=>n(window.location.hash);function r(e,t){const a=n(e),o=s.Z.routes.find((e=>e.path===a));if(!o)return!1;t&&function(e){window.location.hash!=e&&history.pushState(null,"",e)}("#"+a);const r=document.getElementById("root");var l;return function(e,t){t.innerHTML="",(new DOMParser).parseFromString(e,"text/html").body.childNodes.forEach((e=>t.appendChild(e)))}(o.html,r),(0,i.ot)(r),function(e){const t=document.querySelector(`a[href="#${e}"]`);t&&(document.getElementById("navbar").childNodes.forEach((e=>{"li"===e.nodeName.toLowerCase()&&e.classList.remove(["active"])})),t.parentNode.className="active")}(a),(l=o.getTitle)&&(document.title=l()),window.scrollTo({top:0}),o.module.load(),s.Z.setModule(o.module),!0}const l=e=>r(e,!0),d=e=>r(e,!1)},4800:(e,t,a)=>{"use strict";a.d(t,{Dt:()=>o,PT:()=>s,cG:()=>n,ny:()=>r});var i=a(7780);const s={UNKNOWN:"UNKNOWN",IDLE:"IDLE",READY:"READY",BUSY:"BUSY",PRINTING:"PRINTING",PAUSED:"PAUSED",FINISHED:"FINISHED",STOPPED:"STOPPED",ERROR:"ERROR",ATTENTION:"ATTENTION",fromApi:e=>{switch(e){case"IDLE":return s.IDLE;case"READY":return s.READY;case"BUSY":return s.BUSY;case"PRINTING":return s.PRINTING;case"PAUSED":return s.PAUSED;case"FINISHED":return s.FINISHED;case"STOPPED":return s.STOPPED;case"ERROR":return s.ERROR;case"ATTENTION":return s.ATTENTION;default:return console.error(`Unsupported state: ${e}`),s.UNKNOWN}}},n=[s.IDLE,s.READY,s.FINISHED],o=[s.PRINTING,s.PAUSED],r=e=>{switch(e){case s.IDLE:return(0,i.Iu)("prop.st-idle");case s.READY:return(0,i.Iu)("prop.st-ready");case s.BUSY:return(0,i.Iu)("prop.st-busy");case s.PRINTING:return(0,i.Iu)("prop.st-printing");case s.PAUSED:return(0,i.Iu)("prop.st-paused");case s.FINISHED:return(0,i.Iu)("prop.st-finished");case s.STOPPED:return(0,i.Iu)("prop.st-stopped");case s.ERROR:return(0,i.Iu)("prop.st-error");case s.ATTENTION:return(0,i.Iu)("prop.st-attention");default:return console.error(`Unsupported state: ${e}`),(0,i.Iu)("prop.st-unknown")}}},4977:e=>{"use strict";e.exports=JSON.parse('{"langs":["cs","de","en","es","fr","it","kr","lt","nl","pl","sk"],"texts":{"home":{"link":["Přehled","Dashboard","Dashboard","Panel principal","Tableau de bord","Dashboard","대쉬보드","Darbastalis","Dashboard","Panel kontrolny","Prehľad"],"title":["Stav tiskárny","Druckerstatus","Printer Status","Estado de la impresora","État de l\'imprimante","Stato della stampante","프린터 상태","Spausdintojo būsena","Printerstatus","Stan drukarki","Stav tlačiarne"]},"proj":{"link":["Úložiště","Projekte","Storage","Proyectos","Projets","Progetti","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"storage":["Úložiště","Speicher","Storage","Almacenamiento","Stockage","Archivio","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"add-from":{"title":["Nahrát soubor z","Datei hinzufügen von","Add file from","Añadir archivo desde","Ajouter un fichier à partir de","Aggiungi file da","에서 파일 추가하기","Pridėti failą iš","Bestanden toevoegen van","Dodaj plik z","Nahrať súbor z"],"local":["Lokálního úložiště","Lokaler Speicher","Local storage","Almacenamiento local","Stockage local","Archivio locale","로컬 저장장치","Vietinis saugykla","Lokale opslag","Magazyn lokalny","Lokálneho úložiska"],"remote":["Vzdálené url","Remote-URL","Remote url","Eliminar url","URL distante","Url remoto","원격 URL","Nuotolinis URL","Externe URL","Zdalny URL","Vzdialenej URL"]},"details":["Detaily souboru","Datei-Details","File details","Detalles del archivo","Détails du fichier","Dettagli file","파일 상세정보","Failo informacija","Bestandseigenschappen","Szczegóły pliku","Detaily súboru"],"del":["Smazat","Datei löschen","Delete","Borrar archivo","Supprimer le Fichier","Elimina File","삭제","Ištrinti","Verwijderen","Usuń plik","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","Télécharger","Download","다운로드","Atsisiųsti","Downloaden","Pobierz","Stiahnuť"],"up-folder":["nadřazená složka","übergeordneter Ordner","parent folder","carpeta contenedora","dossier parent","cartella superiore","상위폴더","tėvinis aplankas","Bovenliggende map","folder nadrzędny","nadradený priečinok"]},"control":{"link":["Ovládání","Kontrolle","Control","Control","Contrôle","Controllo","제어","Valdymas","Bediening","Sterowanie","Ovládanie"],"coordinates":["Souřadnice tiskárny","Drucker-Koordinaten","Printer Coordinates","Coordenadas de la Impresora","Coordonnées de l\'imprimante","Coordinate Stampante","프린터 좌표","Spausdintojo koordinatės","Printercoördinaten","Współrzędne drukarki","Súradnice tlačiarne"],"axis":{"x":["Osa X","X-Achse","X axis","Eje X","axe X","Asse X","X축","X ašis","X-as","Oś X","Os X"],"y":["Osa Y","Y-Achse","Y axis","Eje Y","axe Y","Asse Y","Y축","Y ašis","Y-as","Oś Y","Os Y"],"z":["Osa Z","Z-Achse","Z axis","Eje Z","axe Z","Asse Z","Z축","Z ašis","Z-as","Oś Z","Os Z"]},"stepper-motors":["Krokové motory","Schrittmotoren","Stepper Motors","Motores Paso-a-paso","moteurs","Motori Passo-Passo","스텝 모터","Sustojimo varikliai","Stappenmotors","Silniki krokowe","Krokové motory"],"heated-bed-move":["Pohyb podložky v ose X a Y","Heizbett X und Y bewegen","Heated Bed X and Y Move","Base Calefactable Mover X e Y","Mouvement en x/y","Spostamento X e Y Piano Riscaldato","히트베드 X 및 Y 이동","Šildomojo patalo X ir Y poslinkis","Beweeg verwarmd bed in X en Y","Ruch stołu grzewczego X i Y","Pohyb podložky v osi X a Y"],"move-step":["Krok pohybu [mm]","Schrittweite [mm]","Move Step [mm]","Mover Paso [mm]","déplacement [mm]","Sposta Passo [mm]","[mm]mm 스텝 이동","Poslinkis [mm]","Beweegafstand [mm]","Krok ruchu [mm]","Krok pohybu [mm]"],"nozzle-z-move":["Pohyb extrudéru v ose Z","Düse Z Bewegung","Nozzle Z Move","Boquilla Mover Z","déplacement en z","Spostamento Z Ugello","노즐 Z 이동","Antgalio Z poslinkis","Beweeg omhoog/omlaag","Ruch dyszy w osi Z","Pohyb extruderu v osi Z"],"extruder":["Extrudér","Extruder","Extruder","Extrusor","extrudeur","Estrusore","익스트루더","Ištraukiklis","Extruder","Ekstruder","Extruder"],"extrude-retract-step":["Krok vytlačení/vtažení [mm]","Extrudieren/Zurückziehen Schritt [mm]","Extrude/Retract Step [mm]","Distancia Extruir/Retraer [mm]","longueur d\'extrusion ou de rétractation [mm]","Passo Estrusione/Retrazione [mm]","[mm]mm 스텝 압출/철회","Ištrauka/atgalinimas [mm]","Extrude/retract-afstand [mm]","Krok ekstruzji/retrakcji [mm]","Krok vysunutia/zasunutia [mm]"],"nozzle-temp":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura Boquilla","température de la buse","Temperatura Ugello","노즐 온도","Antgalio temperatūra","Temperatuur nozzle","Temperatura dyszy","Teplota trysky"],"speed":["Rychlost","Geschwindigkeit","Speed","Velocidad","vitesse","Velocità","속도","Greitis","Snelheid","Prędkość","Rýchlosť"],"heated-bed-temp":["Teplota vyhřívané podložky","Temperatur des Heizbettes","Heated Bed Temperature","Temperatura de la Base Calefactable","Température du lit","Temperatura piano riscaldato","히트베드 온도","Šildomojo patalo temperatūra","Temperatuur verwarmd bed","Temperatura stołu","Teplota vyhrievanej podložky"],"flow":["Průtok","Flow","Flow","Flujo","flux","Flusso","흐름","Srautas","Extrusiefactor","Przepływ","Prietok"],"title":["Ovládání tiskárny","Druckersteuerung","Printer Control","Control de la Impresora","Contrôle de l\'imprimante","Controllo Stampante","프린터 제어","Spausdintojo valdymas","Printerbediening","Sterowanie drukarką","Ovládanie tlačiarne"]},"cameras":{"link":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"trigger-scheme":{"ten-sec":["Každých 10 sekund","Alle 10 Sekunden","Every 10 seconds","Cada 10 segundos","Toutes les 10 secondes","Ogni 10 secondi","매 10초","Kas 10 sekundžių","Elke 10 seconden","Co 10 sekund",""],"thirty-sec":["Každých 30 sekund","Alle 30 Sekunden","Every 30 seconds","Cada 30 segundos","Toutes les 30 secondes","Ogni 30 secondi","매 30초","Kas 30 sekundžių","Elke 30 seconden","Co 30 sekund",""],"sixty-sec":["Každých 60 sekund","Alle 60 Sekunden","Every 60 seconds","Cada 60 segundos","Toutes les 60 secondes","Ogni 60 secondi","매 60초","Kas 60 sekundžių","Elke minuut","Co 60 sekund",""],"each-layer":["Při změně vrstvy","Beim Schichtwechsel","On layer change","Al cambiar de capa","Au changement de couche","Al cambio layer","매 레이어","Pakeitus sluoksnį","Bij laagwissel","Przy zmianie warstwy",""],"fifth-layer":["Každou pátou vrstvu","Alle 5 Schichten","Every fifth layer","Cada cinco capas","Toutes les cinq couches","Ogni cinque layer","매 5레이어","Kas penktas sluoksnis","Elke 5 lagen","Co piąta warstwa",""],"manual":["Ručně","Manuell","Manual","Manual","Manuel","Manuale","수동","Rankinis","Handmatig","Ręcznie",""]}},"settings":{"title":["Nastavení","Einstellungen","Settings","Ajustes","Réglages","Impostazioni","세팅","Nustatymai","Instellingen","Ustawienia","Nastavenie"]},"conn":{"prusa-connect-status":["Stav připojení PrusaConnect","PrusaConnect Status","PrusaConnect Status","Estado de PrusaConnect","Informations de connexion à PrusaConnect","Stato PrusaConnect","프루사커넥트 상태","PrusaConnect būsena","Status van PrusaConnect","Stan PrusaConnect","Stav pripojenia PrusaConnect"],"printer-status":["Stav připojení 3D tiskárny","3D-Drucker Verbindungsstatus","3D Printer Connection Status","Estado Conexión Impresora 3D","Informations de connexion à l\'imprimante 3D","Stato Connessione Stampante 3D","3D 프린터 연결 상태","3D spausdintojo prisijungimo būsena","Verbindingsstatus van 3D-printer","Status połączenia z drukarką 3D","Stav pripojenia 3D tlačiarne"],"title":["připojení","Verbindung","Connection",null,"connexion",null,"연결","Prisijungimas","Verbinding",null,"pripojenie"],"prusa-connect-url":["Adresa PRUSA CONNECT","PRUSA CONNECT Adresse","PRUSA CONNECT Address",null,null,null,"프루사커넥트 주소","PRUSA CONNECT adresas","Adres van PRUSA CONNECT",null,"Adresa PrusaConnect"],"suc":["Úspěšně připojeno","Erfolgreich verbunden","Successfully connected","Correctamente conectado","Connecté avec succès","Connessione riuscita","연결 성공","Prisijungta sėkmingai","Succesvol verbonden","Połączono pomyślnie","Úspešne pripojené"],"connect":{"linked":["","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":[null,"Nicht verbunden","Not Linked","No enlazado","Non Associée","Non collegato","연결안됨","Nesusieta","Niet verbonden","Nie połączono",""]},"error_status":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","","","Błąd",""]},"prop":{"temp-nozzle":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura del nozzle","Température de la buse","Temperatura ugello","노즐 온도","Nozzle Temperature","Nozzletemperatuur","Temperatura dyszy","Teplota trysky"],"temp-bed":["Vyhřívaná podložka","Heizbett","Heatbed","Base calefactable","Plateau chauffant","Piano riscaldato","히트베드","Dėklo temperatūra","Verwarmd bed","Stół","Vyhrievaná podložka"],"speed":["Rychlost tisku","Druckgeschwindigkeit","Printing Speed","Velocidad de impresión","Vitesse d\'impression","Velocità di stampa","출력속도","Spausdinimo greitis","Printsnelheid","Prędkość drukowania","Rýchlosť tlače"],"z-height":["Výška Z","Z-Höhe","Z-Height","Altura-Z","Hauteur en z","Altezza-Z","Z높이","Z-Height","Z-Hoogte","Wysokość Z","Výška Z"],"nozzle-diameter":["Velikost trysky","Düsendurchmesser","Nozzle Diameter","Diámetro de Boquilla","Diamètre de la Buse","Diametro ugello","노즐지름","Galvutės skersmuo","Nozzlediameter","Średnica dyszy","Veľkosť trysky"],"rem-time":["Zbývající čas","Restzeit","Remaining time","Tiempo restante","Temps restant","Tempo residuo","남은시간","Likęs laikas","Resterende tijd","Pozostały czas","Zostávajúci čas"],"time-est":["Odhad doby tisku","Druckzeit Schätzen","Print Time Estimate","Tiempo Estimado de Impresión","Estimation du temps d\'impression","Stima del Tempo di Stampa","예상 출력 시간","Print Time Estimate","Geschatte printtijd","Szacowany Czas Druku","Odhad času tlače"],"est-end":["Odhadovaný konec","Erwartetes Ende","Estimated end","Fin estimado","Fin d\'impression estimée","Fine prevista","예상완료","Numatomas pabaiga","geschatte eindtijd","Szacowane zakończenie","Odhadovaný koniec"],"pnt-time":["Doba tisku","Druckzeit","Printing time","Tiempo de impresión","Temps d\'impression","Tempo di stampa","출력시간","Spausdinimo laikas","Printtijd","Czas druku","Čas tlače"],"last-mod":["Naposledy upraveno","Zuletzt Geändert","Last Modified","Ultima Modificación","Dernière Modification","Ultima Modifica","최종 수정됨","Paskutinis modifikavimas","Laatst gewijzigd","Ostatnio Zmodyfikowany","Posledná úprava"],"material":["Materiál","Material","Material","Material","Matériau","Materiale","재료","Medžiaga","Materiaal","Materiał","Materiál"],"layer-ht":["Výška vrstvy","Schichthöhe","Layer Height","Altura de Capa","Hauteur de Couche","Altezza Layer","레이어 높이","Sluoksnio storis","Laagdikte","Wysokość Warstwy","Výška vrstvy"],"size":["Velikost souboru","Größe der Datei","File size","Tamaño de archivo","Taille du fichier","Dimensione file","파일크기","Failo dydis","Bestandsgrootte","Rozmiar pliku","Veľkosť súboru"],"progress":["Postup","Fortschritt","Progress","Progreso","Progression","Progresso","진행","Eiga","Voortgang","Postęp","Progres"],"st-idle":["Nečinná","Leerlauf","Idle","En espera","Repos","Inattivo","대기","Pramoginė veikla","Inactief","Oczekuje","Nečinná"],"st-ready":["Připravena","Bereit","Ready","Lista","Prête","Pronto","준비","Pasirengęs","Gereed voor gebruik","Gotowe","Pripravené"],"st-busy":["Zaneprázdeněná","Beschäftigt","Busy","Ocupada","Occupée","Occupato","작업중","Užsiėmęs","Bezig","Zajęty","Zaneprázdnená"],"st-printing":["Probíhá tisk","Druckt","Printing","Imprimiendo","Impression","Stampa","출력중","Spausdinama","Printen","Drukowanie","Prebieha tlač"],"st-paused":["Pozastavena","Pausiert","Paused","Pausado","En pause","In pausa","일시정지","Pristabdyta","Gepauzeeerd","Pauza","Pozastavená"],"st-finished":["Dokončeno","Beendet","Finished","Terminado","Terminé","Completato","완료됨","Užbaigta","Klaar","Zakonczono","Dokončené"],"st-stopped":["Zastaveno","Gestoppt","Stopped","Parada","Arrêtée","Arrestato","정지됨","Sustabdytas","Gestopt","Zatrzymano","Zastavené"],"st-error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"st-attention":["Vyžaduje pozornost","Achtung","Attention","Atención","Attention","Attenzione","주의","Dėmesio","Attentie","Uwaga","Pozor"],"st-unknown":["Neznámý","Unbekannt","Unknown","Desconocido","Inconnu","Sconosciuto","알수없음","Nežinoma","Onbekend","Nieznane","Neznáme"],"at":["v","um","at","a las","à","alle","에서","iš","op","o","v"],"less-than":["Méně než minuta","Weniger als eine Minute","Less than a minute","Menos de un minuto","Moins d\'une minute","Meno di un minuto","1분 미만","Mažiau nei minutė","Minder dan een minuut","Mniej niż minuta","Menej ako minúta"],"today-at":["Dnes v","Heute um","Today at","Hoy a las","Aujourd\'hui à","Oggi alle","오늘","Šiandien","Vandaag om","Dzisiaj o","Dnes o"],"tmw-at":["Zítra v","Morgen um","Tomorrow at","Mañana a las","Demain à","Domani alle","내일","Rytoj","Morgen om","Jutro o","Zajtra o"],"true":["Ano","Ja","Yes","Si","Oui","Si","예","Taip","Ja","Tak","Áno"],"false":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"na":["N/A","NV","NA","NA","NA","ND","없음","NA","N.v.t.","N/D","N/A"],"cover-closed":["Uzavřené","Geschlossen","Closed","Cerrada","Fermé","Chiuso","닫힘","Uždarytas","Gesloten","Zamknięta","Zavreté"],"cover-opened":["Otevřené","Geöffnet","Opened","Abierta","Ouvert","Aperto","열림","Atidarytas","Open","Otwarta","Otvorené"],"storage-used-space":["Použito {{used}} z {{total}} ({{free}} volných)","{{used}} benutzt von {{total}} ({{free}} frei)","Used {{used}} of {{total}} ({{free}} free)","Usados {{used}} de {{total}} ({{free}} libres)","{{used}} utilisés sur {{total}} ({{free}} libre)","Usato {{used}} di {{total}} ({{free}} liberi)","{{total}} 중 {{used}} 사용중({{free}} 남음)","","","Zajęte {{used}} z {{total}} ({{free}} wolne)",""]},"msg":{"modal-p1":["Vítejte na webovém rozhraní vaší","Willkommen zur Weboberfläche Ihres","Welcome to the web interface of your","Bienvenido a la interfaz web de tu","Bienvenue dans l\'interface web de votre","Benvenuto nell\'interfaccia web del tuo","당신의 웹 인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į savo","Welkom bij de webinterface van uw","Witaj w interfejsie Twojej","Vitajte vo webovom rozhraní vašej"],"modal-p2":["Upozornění: některé hodnoty jsou zobrazeny pouze v průběhu tisku.","Bitte beachten Sie, dass die Werte nur angezeigt werden, wenn der Drucker gerade druckt.","Please note that values are shown only when the printer is printing.","Tenga en cuenta que los valores se muestran solo cuando la impresora está imprimiendo.","Veuillez noter que les valeurs sont affichées uniquement lorsque l\'imprimante imprime.","Si noti che i valori vengono visualizzati solo durante la stampa.","프린터가 출력중일 경우에만 값이 표시됩니다.","Prašome atkreipti dėmesį, kad reikšmės rodomos tik tada, kai spausdintuvas spausdina.","De waarden worden alleen getoond tijdens het printen.","Wartości będą wyświetlane tylko podczas drukowania.","Upozornenie: niektoré hodnoty sú zobrazené len počas tlače."],"api-key-1":["Vítejte ve webovém rozhraní PrusaLink Web!","Willkommen auf der Web-Oberfläche von PrusaLink Web.","Welcome to the PrusaLink Web web interface.","Bienvenido a la interfaz web de PrusaLink Web.","Bienvenue sur l\'interface web locale de PrusaLink Web.","Benvenuti nell\'interfaccia web di PrusaLink Web.","프루사 커넥트 웹 웹인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į PrusaLink Web interneto sąsają.","Welkom bij de PrusaLink Web webinterface.","Witaj w interfejsie sieciowym PrusaLink Web.","Vitajte vo webovom rozhraní PrusaLink Web!"],"api-key-2":["Vložte API klíč.","Bitte geben Sie den API-Schlüssel ein.","Please insert the API key.","Por favor introduce la clave API.","Veuillez insérer la clé API.","Si prega di inserire la chiave API.","API키를 입력하십시오.","Prašome įvesti API raktą.","Voer de API-sleutel in","Wpisz klucz API.","Vložte API kľúč."],"api-key-3":["Otevřete menu Nastavení -> Síť -> PrusaLink.","Sie finden ihn in Einstellungen -> Netzwerk -> PrusaLink.","You can find it in Settings -> Network -> PrusaLink.","Puedes encontrarla en Ajustes -> Red -> PrusaLink.","Vous pouvez la trouver dans Réglages -> Réseau -> Informations de connexion.","È possibile trovarla in Impostazioni -> Rete -> PrusaLink","설정 -> 네트워크 -> 프루사링크에서 찾을 수 있습니다.","Jį galite rasti Nustatymai -> Tinklas -> PrusaLink.","Deze kan gevonden worden bij Settings -> -> Network -> PrusaLink.","Możesz znaleźć go w sekcji Ustawienia -> Sieć -> PrusaLink.","Nájdete ho v Nastavenia -> Sieť -> PrusaLink."],"offline":{"not-responsing":["Tiskárna nereaguje.","Der Drucker antwortet nicht.","Printer is not responding.","La impresora no responde.","L\'imprimante ne répond pas.","La stampante non risponde.","프린터가 응답하지 않습니다.","Spausdintuvas neatsako.","Printer reageert niet.","Drukarka nie odpowiada.","Tlačiareň nereaguje."],"please-wait":["Prosím, čekejte...","Bitte warten...","Please wait...","Espera, por favor...","Veuillez patienter...","Attendere...","기다려주십시오...","Prašome palaukti...","Even geduld...","Proszę czekać...","Prosím, čakajte..."]},"drop-zone":{"label":["Přetažením souboru zahájíte nahrávání","Datei hier ablegen, um den Upload zu starten","Drop file here to start the uploading","Arrastra archivo aquí para subirlo","Déposez le fichier ici pour commencer le téléchargement","Trascina il file qui per iniziare il caricamento","파일을 여기로 끌어놓으면 업로드가 시작됩니다.","Tempti failą čia, kad predėti įkrovimą","Sleep het bestand hierheen om het te uploaden","Upuść plik tutaj, aby rozpocząć przesyłanie.",""]},"create-folder":["Nová složka","Neuer Ordner","New Folder","Nueva Carpeta","Nouveau Dossier","Nuova Cartella","새 폴더","","","Nowy folder",""],"create-folder-name":["Název složky","Ordnername","Folder Name","Nombre de la Carpeta","Nom de Dossier","Nome cartella","폴더 이름","","","Nazwa folderu",""],"sysupgrade":{"title":["Aktualizovat systémový balíček?","Systempaket aktualisieren?","Upgrade System Package?","¿Actualizar el Paquete del Sistema?","Mettre à niveau le package système ?","Aggiornare il pacchetto di sistema?","시스템 패키지를 업그레이드하겠습니까?","","","Zaktualizować paczkę systemową?",""],"remark":["Aktualizace může trvat několik desítek vteřin.","Das Upgrade kann einige Sekunden dauern.","The upgrade may take several tens of seconds.","La actualización puede tardar varias decenas de segundos.","La mise à jour peut prendre plusieurs dizaines de secondes.","L\'aggiornamento può richiedere qualche minuto.","업그레이드에는 수십초가 걸릴 수 있습니다.","","","Aktualizacja może trwać kilkadziesiąt sekund.",""],"pending":["Probíhá aktualizace... Nevypínejte tiskárnu.","Upgraden... Schalten Sie den Drucker nicht aus.","Upgrading... Do not switch the printer off.","Actualizando... No apagues la impresora.","Mise à niveau... N\'éteignez pas l\'imprimante.","Aggiornamento... Non spegnere la stampante.","업그레이드중... 프린터를 끄지 마십시오.","","","Aktualizacja... Nie wyłączaj drukarki.",""],"wait-for-printer":["Čeká se na tiskárnu...","Warten auf den Drucker...","Waiting for the printer...","Esperando a la impresora...","Attente de l\'imprimante...","In attesa della stampante...","프린터를 기다리는 중...","","","Oczekiwanie na drukarkę...",""]},"sla-pour-resin":["Nalijte do vaničky dostatečné množství resinu pro vybraný soubor a zavřete víko. Minimální objem resinu je zobrazen na dotykovém displeji tiskárny.","Füllen Sie genügend Harz für die ausgewählte Datei in den Tank und schließen Sie den Deckel. Die minimale Menge des Harzes wird auf dem Touchscreen angezeigt.","Pour enough resin for selected file into the tank and close the lid. Minimal amount of the resin is displayed on the touchscreen.","Vierte suficiente resina para el archivo seleccionado y cierra la tapa.\\nLa mínima cantidad necesaria se muestra en la pantalla táctil.","Versez suffisamment de résine dans le réservoir pour le projet sélectionné et fermez le capot.","Versare nel serbatoio la quantità di resina sufficiente per il file selezionato e chiudere il coperchio. La quantità minima di resina viene visualizzata sul touchscreen.","선택한 파일을 위한 레진을 탱크에 붓고 뚜껑을 닫습니다. 터치스크린에 최소량의 레진이 표시됩니다.","Įpilkite pakankamai dervos pasirinktam failui ir uždarykite dangtį. Mažiausias dervos kiekis yra rodomas ant ekrano.","Doe genoeg resin voor het geselcteerde bestand in het vat en sluit de kap. De minimale hoeveelheid resin wordt aangegeven op het touchscreen.","Wlej do zbiornika wystarczającą ilość żywicy dla wybranego pliku i zamknij pokrywę. Minimalna ilość żywicy jest wyświetlana na ekranie dotykowym.","Do nádržky nalejte dostatočné množstvo resinu pre vybraný súbor a zatvorte veko. Minimálne množstvo resinu sa zobrazí na dotykovom displeji."],"del-folder":["Opravdu chcete smazat {{folder_name}} a její obsah?","Möchten Sie wirklich {{folder_name}} und seinen Inhalt löschen?","Do you really want to delete {{folder_name}} and its contents?","¿Realmente deseas borrar {{folder_name}} y su contenido?","Voulez-vous vraiment supprimer {{folder_name}} et son contenu ?","Vuoi davvero cancellare la cartella {{folder_name}} e il suo contenuto?","정말 {{folder_name}} 폴더 및 내용을 지우시겠습니까?","","","Czy naprawdę chcesz usunąć {{folder_name}} i jego zawartość?",""],"del-proj":["Opravdu chcete smazat {{file_name}}?","Wollen Sie wirklich {{file_name}} löschen?","Do you really want to delete {{file_name}}?","¿Realmente deseas borrar {{file_name}}?","Voulez-vous vraiment supprimer le fichier {{file_name}} ?","Vuoi davvero eliminare il file {{file_name}}?","{{file_name}}을 정말로 삭제하겠습니까?","Ar tikrai norite ištrinti {{file_name}}?","Weet u zeker dat u {{file_name}} wilt verwijderen?","Czy na pewno chcesz usunąć plik {{file_name}}?","Naozaj chcete zmazať {{file_name}}?"],"cancel":["Chcete opravdu zrušit tisk?","Wollen Sie den Druck wirklich abbrechen?","Do you really want to cancel print?","¿Realmente quieres cancelar la impresión?","Voulez-vous vraiment annuler l\'impression ?","Vuoi davvero annullare la stampa?","출력을 취소하겠습니까?","Ar tikrai norite atšaukti spausdinimą?","Weet u zeker dat u de print wilt stoppen?","Czy na pewno chcesz anulować wydruk?","Chcete naozaj zrušiť tlač?"],"file-exists":{"title":["Soubor již existuje","Datei existiert bereits","File already exists","El archivo ya existe","Le fichier existe déjà","File già esistente","파일이 이미 존재합니다.","","","Plik już istnieje",""],"overwrite-it":["Chcete ho přepsat?","Möchten Sie sie überschreiben?","Do you want to overwrite it?","¿Quieres sobrescribirlo?","Voulez-vous l\'écraser ?","Vuoi sovrascriverlo?","덮어쓰시겠습니까?","","","Czy chcesz go nadpisać?",""]}},"btn":{"login":["Přihlášení","Login","Login","Iniciar sesión","Connexion","Accedi","로그인","Prisijungti","Login","Zaloguj","Prihlásenie"],"confirm":["Potvrdit","Bestätigen","Confirm","Confirmar","Confirmer","Conferma","결정","Patvirtinti","Bevestigen","Potwierdzam","Potvrdiť"],"cancel":["Zrušit","Abbrechen","Cancel","Cancelar","Annuler","Annulla","취소","Atšaukti","Annuleren","Anuluj","Zrušiť"],"del":["Smazat","löschen","Delete","borrar","supprimer","elimina","삭제","Ištrinti","Verwijderen","usuń","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","télécharger","Download","다운로드","Atsisiųsti","Download","Pobierz","Stiahnuť"],"pause-pt":["Pozastavit tisk","Druck pausieren","Pause Print","Pausar Impresión","Mettre l\'impression en pause","Pausa Stampa","출력 일시 정지","Pristabdyti spausdinimą","Pauzeer print","Wstrzymaj drukowanie","Pozastaviť tlač"],"resume-pt":["Pokračovat v tisku","Druck fortsetzen","Resume Print","Continuar Impresión","Redémarrer l\'impression","Riprendi stampa","출력 복귀","Tęsti spausdinimą","Hervat print","Wznów drukowanie","Pokračovať v tlači"],"start-pt":["Start tisku","Druck starten","Start Print","Empezar impresión","Lancer l\'impression","Inizia stampa","출력 시작","Pradėti spausdinimą","Start print","Start druku","Štart tlače"],"stop-print":["Zrušit tisk","Druck abbrechen","Stop Print","Cancelar impresión","Annuler l\'impression","Annulla stampa","출력 정지","Sustabdyti spausdinimą","Stop print","Anuluj wydruk","Zrušiť tlač"],"upld-file":["Nahrát soubor","Datei hochladen","Upload File","Cargar Archivo","Télécharger un Fichier","Carica file","파일 업로드","Įkelti failą","Upload bestand","Prześlij plik","Nahrať súbor"],"disable-steppers":["Vypnout motory","Schrittmotoren deaktivieren","Disable Steppers","Desactivar motores","Desactiver les moteurs","Disabilita motori","모터 정지","Išjungti stoperius","Stappenmotors uitschakelen","Wyłącz silniki krokowe","Vypnúť motory"],"extrude":["Vytlačit","Extrudieren","Extrude","Extruye","extruder","Estrudi","압출","Ištraukti","Extrudeer","Ekstruzja","Vysunúť"],"retract":["Vtáhnout","Zurückziehen","Retract","Retraer","Retracter","Retrai","리트렉트","Atitraukti","Retract","Retrakcja","Zasunúť"],"set":["Nastavit","Setzen","Set","Ajuste","Régler","Imposta","설정","Nustatyti","Instellen","Ustaw","Nastaviť"],"check-updates":["Kontrola aktualizací","Updates suchen","Check Updates","Comprobar actualizaciones","Vérifier les Mises à Jour","Controlla aggiornamenti","업데이트 체크","Tikrinti atnaujinimus","","Sprawdź aktualizacje",""],"connect":{"link":[null,"Verbinden","Link","Enlace","Associer","Collegamento","연결","Susieti","Verbinden","Link",""],"unlink":["Odpojit","Trennen","Unlink","Desenlazar","Dissocier","Scollegato","연결끊기","Atsieti","Verbinding verbreken","Odłącz",""]},"chg":["Změnit","Ändern","Change","Cambia","Mettre à jour","Cambia","변경","Pakeisti","Wijzig","Zmień","Zmeniť"],"reset":["","Reset","Reset","Reset","Réinitialiser","Reset","리셋","Perkrauti","Reset","Reset",""],"yes":["Ano","Ja","Yes","Sí","Oui","Sì","예","Taip","Ja","Tak","Áno"],"no":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"upgrade":["Aktualizovat","Aktualisieren","Upgrade","Actualización","Mise à niveau","Aggiorna","업그레이드","Atnaujinti","","Aktualizacja",""],"chg-print-set":["Tisková nastavení","Druckeinstellungen","Print Settings","Ajustes de la Impresora","Réglages d\'Impression","Impostazioni di stampa","프린트 설정","Spausdinimo nustatymai","Printinstellingen","Ustawienia druku",""],"save-chgs":["Uložit změny","Änderungen speichern","Save changes","Guardar cambios","Enregistrer les modifications","Salva le modifiche","변경내용 저장","Išsaugoti pakeitimus","Wijzigingen opslaan","Zapisz zmiany","Uložiť zmeny"]},"camera":{"settings":["Nastavení kamery","Kamera-Einstellungen","Camera Settings","Ajustes de la Cámara","Paramètres de la Caméra","Impostazioni Fotocamera","카메라 세팅","Kameros nustatymai","Camera-instellingen","Ustawienia kamery",""],"name":["Název kamery","Kameraname","Camera Name","Nombre de la Cámara","Nom de la Caméra","Nome Fotocamera","카메라 명칭","Kameros pavadinimas","Cameranaam","Nazwa kamery",""],"resolution":["Rozlišení","Auflösung","Resolution","Resolución","Résolution","Risoluzione","해상도","Raiška","Resolutie","Rozdzielczość",""],"trigger-scheme":["","Auslöse-Schema","Trigger Scheme","Modo de Disparo","Mode de Déclenchement","Schema di attivazione","트리거 계획","Paleisti schemą","Triggerschema","Schemat wyzwalania",""],"focus":["Zaostření","Fokus","Focus","Enfocar","Focus","Messa a fuoco","포커스","","","Ostrość",""],"register-by-token":[null,null,"Register Camera",null,null,null,null,null,null,null,null],"token":[null,null,"CONNECT Token",null,null,null,null,null,null,null,null],"title":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"time":["Čas snímku","Zeit der Momentaufnahme","Snapshot Time","Hora de la Foto","Heure de la Capture","Tempo Istantanea","스냅샷 시간","Momentinis vaizdas","Snapshot-tijd","Czas migawki",""],"cloud":{"linked":["Připojeno","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":["Nepřipojeno","Unverbunden","Not Linked","No Enlazado","Non Associée","Non collegato","연결되지 않음","Nesusieta","Niet verbonden","Nie połączono",""],"label":["","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT",""]},"btn":{"connect":["Zkusit povolit kameru","Versuche Kamera zu aktivieren","Try to enable camera","Intenta habilitar la cámara","Essayer d\'activer la caméra","Prova ad abilitare la fotocamera","카메라 활성화 시도중","Pabandykite įjungti kamerą","Probeer de camera in te schakelen","Spróbuj aktywować kamerę",""],"settings":["Otevřít nastavení kamery","Öffne Kamera-Einstellungen","Open camera settings","Abrir los ajustes de la cámara","Ouvrir les paramètres de la caméra","Apri impostazioni fotocamera","카메라 설정 열기","Atidaryti kameros nustatymus","Open camera-instellingen","Otwórz ustawienia kamery",""],"link":["Připojit kameru do Connectu","Kamera mit CONNECT verbinden","Link camera to CONNECT","Asocia cámara a CONNECT","Associer la caméra à CONNECT","Collega fotocamera a CONNECT","카메라를 CONNECT에 연결하기","Susieti kamerą su CONNECT","Verbind camera met CONNECT","Połącz kamerę z CONNECT",""],"unlink":["Odpojit kameru z Connectu","Kamera von CONNECT trennen","Unlink camera from CONNECT","Desvincular la cámara de CONNECT","Dissocier la caméra de CONNECT","Scollega fotocamera da CONNECT","카메라를 CONNECT에서 연결 해제하기","Atsieti kamerą nuo CONNECT","Verbreek verbinding van camera met CONNECT","Odłącz kamerę od CONNECT",""]},"path":["Cesta","Pfad","Path","Ruta","Chemin","Percorso","경로","Kelias","Pad","Ścieżka",""],"driver":["Ovladač","Treiber","Driver","Controlador","Driver","Driver","드라이버","Draiveris","Driver","Sterownik",""]},"printer":{"title":["Tiskárna","Drucker","Printer","Impresora","imprimante","Stampante","프린터","Spausdintuvas","Printer","Drukarka","Tlačiareň"],"name":["Název tiskárny","Name des Druckers","Printer name","Nombre de la impresora","nom de l\'imprimante","Nome stampante","프린터 이름","Spausdintuvo pavadinimas","Naam van de printer","Nazwa drukarki","Názov tlačiarne"],"location":["Umístění tiskárny","Standort des Druckers","Printer location","Ubicación de la impresora","localisation de l\'imprimante","Posizione stampante","프린터 위치","Spausdintuvo vieta","Locatie van de printer","Lokalizacja drukarki","Umiestnenie tlačiarne"],"network_error_chime":["Zvukové upozornění při síťové chybě","Netzwerk-Fehlerton","Network Error Chime","Tono Error Red","Carillon d\'erreur réseau","Suono di errore di rete","네트워크 에러 차임벨","","","Dźwięk błędu sieci",""]},"print":{"fdm":{"1":["Je tiskárna připravena?","Ist der Drucker bereit?","Is the printer ready?","¿Está lista la impresora?","L\'imprimante est-elle prête ?","La stampante è pronta?","프린터가 준비되었습니까?","Ar spausdintuvas pasirengęs?","Is de printer klaar voor gebruik?","Czy drukarka jest gotowa?","Je tlačiareň pripravená?"],"2":["Je tisková podložka prázdná a čistá?","Ist der Druckbogen leer und sauber?","Is printing sheet empty and clean?","¿Está vacía y limpia la lámina de impresión?","Le surface d\'impression est-elle vide et propre ?","La piastra di stampa è vuota e pulita?","프린트 시트가 비어있고 깨끗합니까?","Ar spausdinimo lapas tuščias ir švarus?","Is het printplatform leeg en schoon?","Czy arkusz druku jest pusty i czysty?","Je tlačová podložka prázdna a čistá?"]}},"upld":{"title":["Nahrát soubor","Projekt hochladen","Upload file","envía proyecto","Téléversement de projet","Carica file","파일업로드","Įkelti failą","Bestand uploaden","prześlij projekt","Nahrať súbor"],"start-pt":["po přenosu zahájit tisk","Druck nach der Übertragung starten","Start print after transfer","Iniciar la impresión tras la transferencia","Démarrer l\'impression après le transfert","Avvia stampa dopo il trasferimento","전송 후 출력 시작","Pradėti spausdinimą po perdavimo","Start print na het omzetten","Rozpocznij drukowanie po przesłaniu","po prenose spustiť tlač"],"remote":{"source":["URL zdroje","Quell-URL","Source URL","URL Fuente","URL de la source","URL fonte","원본 URL","Šaltinio URL","Bron van URL","Źródłowy URL","URL zdroja"],"hint-fdm":["Zadejte URL souboru G-CODE","URL der G-CODE-Datei eingeben","Type URL of G-CODE file","Escribe URL de archivo G-CODE","Entrez l\'URL du fichier G-CODE du projet","Digitare URL del file G-CODE","G코드 파일의 주소를 입력하십시오","Įveskite G-CODE failo URL","Type de URL van het gcode-bestand","Wpisz adres URL pliku G-Code","Zadajte URL súboru G-code"],"file":["Název souboru","Dateiname","File name","Nombre del archivo","Nom de fichier","Nome file","파일명","Failo pavadinimas","Bestandsnaam","Nazwa pliku","Názov súboru"],"file-hint":["Zadejte název souboru","Dateiname eingeben","Type file name","Escribe nombre de archivo","Tapez le nom du fichier","Digitare nome file","파일명을 입력하십시오","Įveskite failo pavadinimą","Type de bestandsnaam","Wpisz nazwę pliku","Zadajte názov súboru"]},"direct":{"choose":["Vyberte {{file}} nebo jej přetáhněte sem.","Klicke um eine {{file}} Datei auszuwählen oder ziehe sie hier hin","Click to choose a {{file}} file or drag it here","Haz clic para elegir un archivo {{file}} o arrástralo hasta aquí","Cliquer pour choisir un fichier {{file}} ou déposez le ici","Fare clic per scegliere un file {{file}} o trascinarlo qui","선택한 {{file}} 파일을 클릭하거나 여기로 드래그하십시오","Pasirinkite {{file}} failą arba vilkite jį čia","Klik om een {{file}}-bestand te kiezen of sleep het hierheen","Kliknij, aby wybrać plik {{file}} lub przeciągnij go tutaj","Kliknutím vyberte súbor {{file}} alebo ho sem potiahnite."]}},"download":{"dl-started":["Začátek stahování","Herunterladen Gestartet","Download Started","Se inició la descarga","téléchargement démarré","Scaricamento Avviato","다운로드가 시작됨","Atsisiuntimas pradėtas","Downloaden gestart","Pobieranie rozpoczęte","Sťahovanie začalo"],"start-pt":["Spustit tisk","Autostart","Autostart","Inicio automático","Démarrage automatique","Avvio automatico","자동시작","Automatinis paleidimas","Autostart","Autostart","Spustiť tlač"]},"temps":{"title":["Teploty","Temperaturen","Temperatures","Temperaturas","Températures","Temperature","온도","Temperatūros","Temperatuur","Temperatury","Teploty"]},"":[null,null,null,null,null,null,null,null,null,null,null],"version":{"title":["Verze","Version","Version",null,"version",null,"버전","Versija","Versie",null,"Verzia"],"api":["API","API","API",null,"api",null,"API","API","API",null,"API"],"hostname":["Hostname","Hostname","Hostname",null,"nom d\'hôte",null,"호스트명","Hostname","Hostnaam",null,"Hostname"],"firmware":["Firmware","Firmware","Firmware",null,"micrologiciel",null,"펌웨어","Firmware","Firmware",null,"Firmware"],"server":["Server","Server","Server",null,"serveur",null,"서버","Serveris","Server",null,"Server"],"text":["Text","Text","Text",null,"texte",null,"텍스트","Tekstas","Tekst",null,"Text"],"sdk":["SDK","SDK","SDK",null,"sdk",null,"SDK","SDK","SDK",null,"SDK"],"fe":["Frontend","Frontend","Frontend",null,"frontend",null,"프론트엔드","Frontendas","Frontend",null,"Frontend"]},"sys-version":{"title":["Verze systému","Systemversion","System Version",null,"version du système",null,"시스템버전","Sistemos versija","Systeenversie",null,"Verzia systému"],"python":["Python","Python","Python","Python","python","Python","파이썬","Python","Python","Python","Python"],"description":["Popis","Beschreibung","Description","Descripción","description","Descrizione","설명","Aprašymas","Beschrijving","Opis","Popis"],"id":["ID","ID","ID","ID","ID","ID","ID","ID","ID","ID","ID"],"os":["OS","OS","OS","OS","Système d\'exploitation","S.O.","OS","OS","OS","OS","OS"]},"updates":{"title":[null,null,"System Updates",null,null,null,null,"Sistemos atnaujinimai",null,null,null]},"user":{"title":["Uživatel","Benutzer","User",null,"utilisateur",null,"유저","Vartotojas","Gebruiker",null,"Používateľ"],"username":["Uživatelské jméno","Benutzername","User Name","Nombre de usuario","nom d\'utilisateur","Nome Utente","유저명","Vartotojo vardas","Gebruikersnaam","Nazwa użytkownika","Používateľské meno"],"format":{"name":["Uživatelské jméno musí obsahovat alespoň 3 znaky.","Der Benutzername muss mindestens 3 Zeichen lang sein.","Username length must be at least 3 characters long.","El nombre de usuario debe tener al menos 3 caracteres.","La longueur du nom d\'utilisateur doit être d\'au moins 3 caractères.","La lunghezza del nome utente deve essere di almeno 3 caratteri.","유저명은 최소 3자리 이상 입력하십시오.","Vartotojo vardo ilgis turi būti mažiausiai 3 simboliai.","De gebruikersnaam moet minimaal 3 karakters lang zijn.","Długość nazwy użytkownika musi mieć co najmniej 3 znaki.","Používateľské meno musí obsahovať aspoň 3 znaky."],"password-1":["Heslo nesmí začínat či končit mezerami, a zároveň musí splňovat jednu z následujících podmínek:","Das Passwort darf weder am Anfang noch am Ende Leerzeichen enthalten und muss mindestens eine der folgenden Optionen erfüllen:","Password can\'t contain spaces on the beggining nor the end and must meet at least one of these options:","La Contraseña no puede empezar o terminar con espacios y debe cumplir al menos una de estas opciones:","Le mot de passe ne peut pas contenir d\'espaces au début ni à la fin et doit répondre à au moins l\'une de ces options :","La password non può contenere spazi né all\'inizio né alla fine e deve soddisfare almeno una di queste opzioni:","암호는 시작부분에 공백을 둘 수 없으며 다음옵션 중 하나이상을 충족해야 합니다.","Slaptažodis negali turėti tarpų pradžioje arba pabaigoje ir turi atitikti bent vieną iš šių variantų:","Het wachtwoord mag geen spaties aan het begin of het einde bevatten en moet aan minstens één van deze opties voldoen:","Hasło nie może zawierać spacji na początku ani na końcu i musi spełniać przynajmniej jeden z poniższych warunków:","Heslo nesmie začínať ani končiť medzerami a musí spĺňať aspoň jednu z týchto podmienok:"],"password-2":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 malé písmeno, 1 velké písmeno a 1 číslo","- Minimale Länge 8 Zeichen, davon ein Kleinbuchstabe, ein Großbuchstabe und eine Zahl","- Minimal length 8 characters, including one lowercase letter, one uppercase letter and one number","- Longitud mínima 8 caracteres, incluyendo una minúscula, una mayúscula y un número","- Longueur minimale de 8 caractères, dont une lettre minuscule, une lettre majuscule et un chiffre","- Lunghezza minima 8 caratteri, di cui una lettera minuscola, una lettera maiuscola e un numero","- 최소 길이 8자(소문자 1개, 대문자 1개, 숫자 1개 포함)","- 8 simbolių ilgio minimalus, įskaitant vieną mažąją raidę, vieną didžiąją raidę ir vieną skaičių","- Minimaal 8 karakters lang, met tenminste een kleine letter, een hoofdletter en een nummber","- Minimalna długość 8 znaków, w tym jedna mała litera, jedna duża litera i jedna cyfra","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 malého písmena, 1 veľkého písmena a 1 číslice"],"password-3":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 speciální symbol (např. @)","- Mindestlänge 8 Zeichen, einschließlich eines nicht alphanumerischen Zeichens (z. B. @)","- Minimal length 8 characters, including one non-alphanumeric character (e.g. @)","- Longitud mínima 8 caracteres, incluyendo los no alfanuméricos (como @)","- Longueur minimale de 8 caractères, dont un caractère non alphanumérique (par exemple @)","- Lunghezza minima 8 caratteri, compreso un carattere non alfanumerico (es. @)","- 영숫자가 아닌 문자(예: @) 1개를 포함한 최소 길이 8자","- 8 simbolių ilgio minimalus, įskaitant vieną neteisingą simbolį (pvz., @)","- Minimaal 8 karakters lang, met tenminste één niet-alfanumeriek karakter (bijv. @)","- Minimalna długość 8 znaków, w tym jeden znak niealfanumeryczny (np. @)","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 špeciálneho symbolu (napr. @)"],"password-4":["- Heslo musí obsahovat minimálně 15 znaků","- Minimale Länge 15 Zeichen","- Minimal length 15 characters","- Longitud mínima 15 caracteres","- Longueur minimale 15 caractères","- Lunghezza minima 15 caratteri","- 최소 길이 15자","- 15 simbolių ilgio minimalus","- Minimaal 15 karakters lang","- Minimalna długość 15 znaków","- Heslo musí obsahovať minimálne 15 znakov"]},"new-password":["Nové heslo","Neues Passwort","New Password","Nueva Contraseña","nouveau mot de passe","Nuova Password","신규 암호","Naujas slaptažodis","Nieuw wachtwoord","Nowe hasło","Nové heslo"],"re-password":["Zopakujte heslo","Passwort wiederholen","Repeat Password","Repetir Contraseña","répéter le mot de passe","Ripeti Password","암호 재입력","Pakartokite slaptažodį","Herhaal wachtwoord","Powtórz hasło","Zopakujte heslo"],"password":["Heslo","Passwort","Password","Contraseña","mot de passe","Password","암호","Slaptažodis","Wachtwoord","Hasło","Heslo"]},"serial":{"label":["Sériové číslo","Seriennummer","Serial Number","Número de serie","numéro de série","Numero Seriale","시리얼넘버","Serijinis numeris","Serienummer","Numer seryjny","Sériové číslo"]},"api_key":{"label":["","API Key","API Key","Clave API","Clé API","Chiave API","API KEY","API raktas","API-sleutel","Klucz API",""]},"logs":{"title":["Logy","Protokolle","Logs",null,"logs",null,"로그","Žurnalai","Logbestanden",null,"Logy"],"select-file":["Vyberte soubor","Datei auswählen","Select File",null,"Sélectionnez une fichier",null,"파일 선택","Pasirinkti failą","Selecteer bestand",null,"Vyberte súbor"],"not-selected":["Není vybrán soubor logů!","Es ist keine Protokolldatei ausgewählt!","No log file is selected!","¡No se ha seleccionado archivo de registro!","Pas de fichier de log sélectionné!","Nessun file di registro selezionato!","로그 파일이 선택되지 않았습니다!","Nepasirinktas joks žurnalų failas!","Geen logbestand geselecteerd!","Nie wybrano żadnego pliku logu!","Nie je vybraný žiadny logovací súbor!"],"select-file-placeholder":["Vyberte soubor logů","Protokolldatei auswählen","Select log file","Selecciona archivo de registro","selectionnez un fichier de log","Selezionare un file di registro","로그 파일 선택","Pasirinkti žurnalų failą","Selecteer logbestand","Wybierz plik logu","Vyberte logovací súbor"],"empty-file":["Soubor je prázdný!","Die Protokolldatei ist leer!","Log file is empty!","¡El archivo de registro está vacío!","Le fichier de log est vide!","Il file di registro è vuoto!","로그파일이 비어있음!","Žurnalų failas yra tuščias!","Logbestand is leeg!","Plik logu jest pusty!","Logovací súbor je prázdny!"],"file-too-large":["Soubory logů o velikosti větší než {{size}} jsou k dispozici pouze ke stažení!","Protokolldateien, die größer als {{size}} sind, stehen nur zum Herunterladen zur Verfügung.","Log files of size larger than {{size}} are available only for downloading.","Los archivos de registro mayores de {{size}} sólo se pueden descargar.","Les fichiers de log d\'une taille supérieure à {{size}} ne sont disponibles que pour le téléchargement.","I file di registro di dimensioni superiori a {{size}} sono disponibili solo per il download.","로그 파일을 다운로드 하기 위해서는 최소 {{size}} 이상의 용량이 필요합니다.","Žurnalų failai, didesni nei {{size}}, yra prieinami tik atsiunčiant.","Logbestanden groter dan {{size}} kunnen alleen gedownload worden.","Pliki logów o rozmiarze większym niż {{size}} są dostępne tylko do pobrania.","Logovacie súbory s veľkosťou väčšou ako {{size}} sú k dispozícii len na stiahnutie.!"]},"ntf":{"success":["Požadavek byl úspěšný","Erfolg","The request was successful","Éxito","la demande a été traitée avec succès","Successo","요청이 성공했습니다.","Užklausa buvo sėkminga","De aanvraag was succesvol","Sukces","Žiadosť bola úspešná"],"settings-suc":["Nastavení bylo úspěšně změněno.","Die Einstellungen wurden erfolgreich geändert.","Settings was changed successfully.","Los ajustes se han cambiado correctamente.","Paramètres modifiés avec succès.","Impostazioni modificate correttamente","설정이 성공적으로 변경되었습니다.","Nustatymai sėkmingai pakeisti.","Instelling succesvol gewijzigd.","Ustawienia zostały zmienione pomyślnie","Nastavenia boli úspešne zmenené."],"camera-suc":["","Kamera Steuerungsanfrage wurde gesendet","Camera control request has been sent","La petición de control de cámara se ha enviado","La demande de contrôle de la caméra a été envoyée","È stata inviata una richiesta di controllo della fotocamera","카메라 조작 요청이 전송되었습니다.","Kameros valdymo užklausa buvo išsiųsta","Aanvraag voor camerabesturing is verzonden","Wysłano żądanie sterowania kamerą",""],"camera-config-success":["Konfigurace kamery byla aktualizovaná","Kamerakonfiguration wurde aktualisiert","Camera configuration has been updated","La configuración de la cámara se ha actualizado","La configuration de la caméra a été mise à jour","La configurazione della fotocamera è stata aggiornata","카메라 구성이 업데이트되었습니다.","Kameros konfigūracija buvo atnaujinta","Cameraconfiguration is geüpdatet","Konfiguracja kamery została zaktualizowana",""],"upld-suc":["Soubor {{file_name}} byl úspěšně nahrán.","Das Hochladen des Projekts {{file_name}} war erfolgreich.","The file {{file_name}} was uploaded successfully.","El envío del proyecto {{file_name}} se completó.","Le projet {{file_name}} a été téléversé correctement.","Caricamento del progetto {{file_name}} riuscito.","{{file_name}}파일이 성공적으로 업로드되었습니다.","Failas {{file_name}} sėkmingai įkeltas.","Het bestand {{file_name}} is succesvol geüpload.","Przesyłanie projektu {{file_name}} powiodło się.","Súbor {{file_name}} bol úspešne nahraný."],"error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"upld-unsuc":["Nahrání souboru {{file_name}} selhalo.","Das Hochladen des Projekts {{file_name}} war nicht erfolgreich.","The file {{file_name}} upload was unsuccessful.","El envío del proyecto {{file_name}} ha fallado.","Le téléversement du projet {{file_name}} a échoué.","Caricamento del progetto {{file_name}} non riuscito.","{{file_name}}파일의 업로드가 실패하였습니다.","Failo {{file_name}} įkėlimas nepavyko.","Het bestand {{file_name}} is niet succesvol geüpload.","Przesyłanie projektu {{file_name}} nie powiodło się.","Nahrávanie súboru {{file_name}} zlyhalo."],"upld-start":["Požadavek na nahrání souboru byl přijat","Upload-Anfrage wurde angenommen","Upload request has been accepted","Se acepto la petición de subida","La demande de téléchargement a été acceptée","Richiesta di caricamento accettata","업로드 요청이 수락되었습니다.","Įkėlimo užklausa priimta","Uploadverzoek is geaccepteerd","Żądanie przesłania zostało zaakceptowane","Žiadosť o odoslanie bola prijatá"]},"sort":{"by-name":["Název","Name","Name","Nombre","Nom","Nome","이름으로 정렬하기","Pavadinimas","Naam","Nazwa",""],"by-date":["Datum","Datum","Date","Fecha","Date","Data","날짜로 정렬하기","Data","Datum","Data",""],"by-size":["Velikost","Größe","Size","Tamaño","Taille","Dimensioni","크기로 정렬하기","Dydis","Grootte","Rozmiar",""]},"unit":{"h":["h","h","h","h","h","h","h","h","u","g","h"],"min":["min","min","min","min","min","min","min","min","min","min","min"],"ml":["ml","ml","ml","ml","mL","ml","ml","ml","ml","ml","ml"],"rpm":["RPM","UPM","RPM","RPM","TPM","RPM","RPM","RPM","RPM","Obr./min","RPM"],"b":["B","B","B","B","B","B","B","B","B","B","B"],"kb":["KB","KB","KB","KB","KB","KB","KB","KB","kB","KB","KB"],"mb":["MB","MB","MB","MB","MB","MB","MB","MB","MB","MB","MB"],"gb":["GB","GB","GB","GB","GB","GB","GB","GB","GB","GB","GB"]},"exp-times":{"exp-time":["Doba osvitu [s]","Belichtung [s]","Exposure [s]","Exposición [s]","Exposition [s]","Esposizione [s]","[s]초 노출","Ekspozicija [s]","Belichting [s]","Czas naświetlania [s]","Osvit [s]"],"inc":["Navýšení expozice (s)","Belichtungszeit inkr. [s]","Exposure time incr. [s]","Incremento tiempo exp. [s]","Incr. du temps d\'exposition [s]","Incremento tempo di esposizione [s]","[s]초 노출 시간 증가","Ekspozicijos laiko padidėjimas [s]","Belichtingstijd verhogen [s]","Przyrost czasu naświetl. [s]","Prírastok osvitu (s)"],"layer-1st":["Osvit první vrstvy [s]","Erste Schicht Bel. [s]","First Layer Expo. [s]","Primera Capa Expo. [s]","Première couche Expo. [s]","Esposizione Primo layer [s]","첫번째 레이어 노출시간 [s]초","Pirmojo sluoksnio ekspozicija [s]","Belichtingstijd eerste laag [s]","Naśw. 1. warstwy [s]","Osvit prvej vrstvy [s]"],"profile":["Tiskový profil","Druckprofil","Print profile","Perfil de Impresión","Profil d\'Impression","Profilo di stampa","출력 프로필","Spausdinimo profilis","Printprofielen","Profil druku","Tlačový profil"],"faster":["Rychlejší","Schneller","Faster","Rápido","Plus rapide","Più veloce","빠르게","Greičiau","Sneller","Szybciej","Rýchlejšie"],"slower":["Pomalejší","Langsamer","Slower","Lento","Plus lent","Più lento","느리게","Lėčiau","Langzamer","Wolniej","Pomalšie"],"high-viscosity":["Velmi Viskózní","Hohe Viskosität","High Viscosity","Alta Viscosidad","Haute viscosité","Alta Viscosità","고점도","Aukštas klampumas","Hoge viscositeit","Wysoka lepkość","Vysoká viskozita"]}}}')}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.p="",(()=>{"use strict";var e=a(8751),t=a(8495),i=a(6648);const s=()=>{document.getElementById("menu").addEventListener("click",(()=>{document.getElementById("menu").classList.contains("burger-open")?n():(document.getElementById("menu").classList.add("burger-open"),document.getElementById("navbar").classList.remove("burger-menu"))})),document.getElementById("navbar").querySelectorAll("a[href]").forEach((e=>{e.addEventListener("click",n)}))};function n(){document.getElementById("menu").classList.remove("burger-open"),document.getElementById("navbar").classList.add("burger-menu")}var o=a(7780),r=a(1351),l=a(5412);const d=(e,t)=>{const a=l.L.init(e,t);a&&(a.setOptions((0,o.Vb)()),a.value=(0,o.G3)(),a.onselect=e=>{(0,o.m0)(e),window.location.reload()})};let c=!1;const u={status:{get:()=>(0,i.LK)("/api/v1/status"),init:!0,update:!0,updateInterval:5e3}};async function p(e){const t=(new Date).getTime(),a=Object.fromEntries(Object.entries(u).map((([a,i])=>[a,(()=>{if(!e)return i.init;if(i.update){if(!i.updateInterval)return!0;if(i.timestamp||(i.timestamp=t+i.updateInterval),t>=i.timestamp)return i.timestamp=t+i.updateInterval,!0}})()?i.get():void 0])).filter((([,e])=>void 0!==e))),i=Object.values(a),s=await Promise.all(i.map((e=>e.then((e=>({ok:!0,payload:e}))).catch((e=>({ok:!e.code&&null,error:e}))))));return Object.fromEntries(Object.entries(a).map((([e],t)=>[e,s[t]])))}async function m(e){let a=!1;for(;;){let i=!1;try{const t=await p(a);t.status&&(c=null===t.status.ok),Object.values(t).forEach((({ok:e,error:t})=>{var a;e||(i=!0,null!==e&&(a=t,(0,r.S)(a,{fallbackMessage:{title:"API error",message:"Cannot connect to printer"}})))})),a?g(t):i||(v({...t,printer:e}),a=!0)}catch(e){h(e)}t.Z.setConnected(!c),await new Promise((e=>setTimeout(e,1e3)))}}function v(a){try{t.Z.init(a),window.onpopstate=t=>t&&(0,e.g9)(t.currentTarget.location.hash||"#dashboard"),(0,e.g9)(window.location.hash||"#dashboard")}catch(e){h(e)}}function g(e){try{t.Z.update(e)}catch(e){h(e)}}function h(e){(0,r.S)(e,{fallbackMessage:{title:"Application error",message:"Something bad happened on application side"}}),console.error(e)}window.onload=()=>{console.log("PrusaLink v.3.12.0 #b'cd5941b'"),s(),d("lang-dropdown","lang-dropdown"),(0,o.ot)(),document.querySelectorAll("a[href]").forEach((t=>{t.addEventListener("click",(a=>{(0,e.c4)(t.href)&&a.preventDefault()}))})),(0,i.Z5)().then((e=>{e&&m(e)}))}})()})(); diff --git a/prusa/link/static/wifi/assets/index-5I425TkQ.css b/prusa/link/static/wifi/assets/index-5I425TkQ.css new file mode 100644 index 00000000..311fc7f6 --- /dev/null +++ b/prusa/link/static/wifi/assets/index-5I425TkQ.css @@ -0,0 +1 @@ +dialog.svelte-1w8ed2v{max-width:32em;border-radius:0.2em;color:grey;background:black}dialog.svelte-1w8ed2v::backdrop{background:rgba(0, 0, 0, 0.3)}dialog[open].svelte-1w8ed2v{animation:svelte-1w8ed2v-zoom 0.5s cubic-bezier(0.34, 1.56, 0.64, 1)}@keyframes svelte-1w8ed2v-zoom{from{transform:scale(0.5)}to{transform:scale(1)}}dialog[open].svelte-1w8ed2v::backdrop{animation:svelte-1w8ed2v-fade 0.3s ease-out}@keyframes svelte-1w8ed2v-fade{from{opacity:0}to{opacity:1}} diff --git a/prusa/link/static/wifi/assets/index-cDOxcm6d.js b/prusa/link/static/wifi/assets/index-cDOxcm6d.js new file mode 100644 index 00000000..67f9c6d8 --- /dev/null +++ b/prusa/link/static/wifi/assets/index-cDOxcm6d.js @@ -0,0 +1,3056 @@ +var __defProp = Object.defineProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +(function polyfill() { + const relList = document.createElement("link").relList; + if (relList && relList.supports && relList.supports("modulepreload")) { + return; + } + for (const link of document.querySelectorAll('link[rel="modulepreload"]')) { + processPreload(link); + } + new MutationObserver((mutations) => { + for (const mutation of mutations) { + if (mutation.type !== "childList") { + continue; + } + for (const node of mutation.addedNodes) { + if (node.tagName === "LINK" && node.rel === "modulepreload") + processPreload(node); + } + } + }).observe(document, { childList: true, subtree: true }); + function getFetchOpts(link) { + const fetchOpts = {}; + if (link.integrity) + fetchOpts.integrity = link.integrity; + if (link.referrerPolicy) + fetchOpts.referrerPolicy = link.referrerPolicy; + if (link.crossOrigin === "use-credentials") + fetchOpts.credentials = "include"; + else if (link.crossOrigin === "anonymous") + fetchOpts.credentials = "omit"; + else + fetchOpts.credentials = "same-origin"; + return fetchOpts; + } + function processPreload(link) { + if (link.ep) + return; + link.ep = true; + const fetchOpts = getFetchOpts(link); + fetch(link.href, fetchOpts); + } +})(); +function noop() { +} +const identity = (x) => x; +function assign(tar, src) { + for (const k in src) + tar[k] = src[k]; + return ( + /** @type {T & S} */ + tar + ); +} +function run(fn) { + return fn(); +} +function blank_object() { + return /* @__PURE__ */ Object.create(null); +} +function run_all(fns) { + fns.forEach(run); +} +function is_function(thing) { + return typeof thing === "function"; +} +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function"; +} +let src_url_equal_anchor; +function src_url_equal(element_src, url) { + if (element_src === url) + return true; + if (!src_url_equal_anchor) { + src_url_equal_anchor = document.createElement("a"); + } + src_url_equal_anchor.href = url; + return element_src === src_url_equal_anchor.href; +} +function is_empty(obj) { + return Object.keys(obj).length === 0; +} +function create_slot(definition, ctx, $$scope, fn) { + if (definition) { + const slot_ctx = get_slot_context(definition, ctx, $$scope, fn); + return definition[0](slot_ctx); + } +} +function get_slot_context(definition, ctx, $$scope, fn) { + return definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx; +} +function get_slot_changes(definition, $$scope, dirty, fn) { + if (definition[2] && fn) { + const lets = definition[2](fn(dirty)); + if ($$scope.dirty === void 0) { + return lets; + } + if (typeof lets === "object") { + const merged = []; + const len = Math.max($$scope.dirty.length, lets.length); + for (let i = 0; i < len; i += 1) { + merged[i] = $$scope.dirty[i] | lets[i]; + } + return merged; + } + return $$scope.dirty | lets; + } + return $$scope.dirty; +} +function update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) { + if (slot_changes) { + const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn); + slot.p(slot_context, slot_changes); + } +} +function get_all_dirty_from_scope($$scope) { + if ($$scope.ctx.length > 32) { + const dirty = []; + const length = $$scope.ctx.length / 32; + for (let i = 0; i < length; i++) { + dirty[i] = -1; + } + return dirty; + } + return -1; +} +const is_client = typeof window !== "undefined"; +let now = is_client ? () => window.performance.now() : () => Date.now(); +let raf = is_client ? (cb) => requestAnimationFrame(cb) : noop; +const tasks = /* @__PURE__ */ new Set(); +function run_tasks(now2) { + tasks.forEach((task) => { + if (!task.c(now2)) { + tasks.delete(task); + task.f(); + } + }); + if (tasks.size !== 0) + raf(run_tasks); +} +function loop(callback) { + let task; + if (tasks.size === 0) + raf(run_tasks); + return { + promise: new Promise((fulfill) => { + tasks.add(task = { c: callback, f: fulfill }); + }), + abort() { + tasks.delete(task); + } + }; +} +function append(target, node) { + target.appendChild(node); +} +function get_root_for_style(node) { + if (!node) + return document; + const root = node.getRootNode ? node.getRootNode() : node.ownerDocument; + if (root && /** @type {ShadowRoot} */ + root.host) { + return ( + /** @type {ShadowRoot} */ + root + ); + } + return node.ownerDocument; +} +function append_empty_stylesheet(node) { + const style_element = element("style"); + style_element.textContent = "/* empty */"; + append_stylesheet(get_root_for_style(node), style_element); + return style_element.sheet; +} +function append_stylesheet(node, style) { + append( + /** @type {Document} */ + node.head || node, + style + ); + return style.sheet; +} +function insert(target, node, anchor) { + target.insertBefore(node, anchor || null); +} +function detach(node) { + if (node.parentNode) { + node.parentNode.removeChild(node); + } +} +function destroy_each(iterations, detaching) { + for (let i = 0; i < iterations.length; i += 1) { + if (iterations[i]) + iterations[i].d(detaching); + } +} +function element(name) { + return document.createElement(name); +} +function text(data) { + return document.createTextNode(data); +} +function space() { + return text(" "); +} +function empty() { + return text(""); +} +function listen(node, event, handler, options) { + node.addEventListener(event, handler, options); + return () => node.removeEventListener(event, handler, options); +} +function prevent_default(fn) { + return function(event) { + event.preventDefault(); + return fn.call(this, event); + }; +} +function stop_propagation(fn) { + return function(event) { + event.stopPropagation(); + return fn.call(this, event); + }; +} +function attr(node, attribute, value) { + if (value == null) + node.removeAttribute(attribute); + else if (node.getAttribute(attribute) !== value) + node.setAttribute(attribute, value); +} +function children(element2) { + return Array.from(element2.childNodes); +} +function set_data(text2, data) { + data = "" + data; + if (text2.data === data) + return; + text2.data = /** @type {string} */ + data; +} +function set_style(node, key, value, important) { + if (value == null) { + node.style.removeProperty(key); + } else { + node.style.setProperty(key, value, important ? "important" : ""); + } +} +function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) { + return new CustomEvent(type, { detail, bubbles, cancelable }); +} +const managed_styles = /* @__PURE__ */ new Map(); +let active = 0; +function hash(str) { + let hash2 = 5381; + let i = str.length; + while (i--) + hash2 = (hash2 << 5) - hash2 ^ str.charCodeAt(i); + return hash2 >>> 0; +} +function create_style_information(doc, node) { + const info = { stylesheet: append_empty_stylesheet(node), rules: {} }; + managed_styles.set(doc, info); + return info; +} +function create_rule(node, a, b, duration, delay, ease, fn, uid = 0) { + const step = 16.666 / duration; + let keyframes = "{\n"; + for (let p = 0; p <= 1; p += step) { + const t = a + (b - a) * ease(p); + keyframes += p * 100 + `%{${fn(t, 1 - t)}} +`; + } + const rule = keyframes + `100% {${fn(b, 1 - b)}} +}`; + const name = `__svelte_${hash(rule)}_${uid}`; + const doc = get_root_for_style(node); + const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node); + if (!rules[name]) { + rules[name] = true; + stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length); + } + const animation = node.style.animation || ""; + node.style.animation = `${animation ? `${animation}, ` : ""}${name} ${duration}ms linear ${delay}ms 1 both`; + active += 1; + return name; +} +function delete_rule(node, name) { + const previous = (node.style.animation || "").split(", "); + const next = previous.filter( + name ? (anim) => anim.indexOf(name) < 0 : (anim) => anim.indexOf("__svelte") === -1 + // remove all Svelte animations + ); + const deleted = previous.length - next.length; + if (deleted) { + node.style.animation = next.join(", "); + active -= deleted; + if (!active) + clear_rules(); + } +} +function clear_rules() { + raf(() => { + if (active) + return; + managed_styles.forEach((info) => { + const { ownerNode } = info.stylesheet; + if (ownerNode) + detach(ownerNode); + }); + managed_styles.clear(); + }); +} +let current_component; +function set_current_component(component) { + current_component = component; +} +function get_current_component() { + if (!current_component) + throw new Error("Function called outside component initialization"); + return current_component; +} +function onMount(fn) { + get_current_component().$$.on_mount.push(fn); +} +function bubble(component, event) { + const callbacks = component.$$.callbacks[event.type]; + if (callbacks) { + callbacks.slice().forEach((fn) => fn.call(this, event)); + } +} +const dirty_components = []; +const binding_callbacks = []; +let render_callbacks = []; +const flush_callbacks = []; +const resolved_promise = /* @__PURE__ */ Promise.resolve(); +let update_scheduled = false; +function schedule_update() { + if (!update_scheduled) { + update_scheduled = true; + resolved_promise.then(flush); + } +} +function add_render_callback(fn) { + render_callbacks.push(fn); +} +function add_flush_callback(fn) { + flush_callbacks.push(fn); +} +const seen_callbacks = /* @__PURE__ */ new Set(); +let flushidx = 0; +function flush() { + if (flushidx !== 0) { + return; + } + const saved_component = current_component; + do { + try { + while (flushidx < dirty_components.length) { + const component = dirty_components[flushidx]; + flushidx++; + set_current_component(component); + update(component.$$); + } + } catch (e) { + dirty_components.length = 0; + flushidx = 0; + throw e; + } + set_current_component(null); + dirty_components.length = 0; + flushidx = 0; + while (binding_callbacks.length) + binding_callbacks.pop()(); + for (let i = 0; i < render_callbacks.length; i += 1) { + const callback = render_callbacks[i]; + if (!seen_callbacks.has(callback)) { + seen_callbacks.add(callback); + callback(); + } + } + render_callbacks.length = 0; + } while (dirty_components.length); + while (flush_callbacks.length) { + flush_callbacks.pop()(); + } + update_scheduled = false; + seen_callbacks.clear(); + set_current_component(saved_component); +} +function update($$) { + if ($$.fragment !== null) { + $$.update(); + run_all($$.before_update); + const dirty = $$.dirty; + $$.dirty = [-1]; + $$.fragment && $$.fragment.p($$.ctx, dirty); + $$.after_update.forEach(add_render_callback); + } +} +function flush_render_callbacks(fns) { + const filtered = []; + const targets = []; + render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)); + targets.forEach((c) => c()); + render_callbacks = filtered; +} +let promise; +function wait() { + if (!promise) { + promise = Promise.resolve(); + promise.then(() => { + promise = null; + }); + } + return promise; +} +function dispatch(node, direction, kind) { + node.dispatchEvent(custom_event(`${direction ? "intro" : "outro"}${kind}`)); +} +const outroing = /* @__PURE__ */ new Set(); +let outros; +function group_outros() { + outros = { + r: 0, + c: [], + p: outros + // parent group + }; +} +function check_outros() { + if (!outros.r) { + run_all(outros.c); + } + outros = outros.p; +} +function transition_in(block, local) { + if (block && block.i) { + outroing.delete(block); + block.i(local); + } +} +function transition_out(block, local, detach2, callback) { + if (block && block.o) { + if (outroing.has(block)) + return; + outroing.add(block); + outros.c.push(() => { + outroing.delete(block); + if (callback) { + if (detach2) + block.d(1); + callback(); + } + }); + block.o(local); + } else if (callback) { + callback(); + } +} +const null_transition = { duration: 0 }; +function create_bidirectional_transition(node, fn, params, intro) { + const options = { direction: "both" }; + let config = fn(node, params, options); + let t = intro ? 0 : 1; + let running_program = null; + let pending_program = null; + let animation_name = null; + let original_inert_value; + function clear_animation() { + if (animation_name) + delete_rule(node, animation_name); + } + function init2(program, duration) { + const d = ( + /** @type {Program['d']} */ + program.b - t + ); + duration *= Math.abs(d); + return { + a: t, + b: program.b, + d, + duration, + start: program.start, + end: program.start + duration, + group: program.group + }; + } + function go(b) { + const { + delay = 0, + duration = 300, + easing = identity, + tick = noop, + css + } = config || null_transition; + const program = { + start: now() + delay, + b + }; + if (!b) { + program.group = outros; + outros.r += 1; + } + if ("inert" in node) { + if (b) { + if (original_inert_value !== void 0) { + node.inert = original_inert_value; + } + } else { + original_inert_value = /** @type {HTMLElement} */ + node.inert; + node.inert = true; + } + } + if (running_program || pending_program) { + pending_program = program; + } else { + if (css) { + clear_animation(); + animation_name = create_rule(node, t, b, duration, delay, easing, css); + } + if (b) + tick(0, 1); + running_program = init2(program, duration); + add_render_callback(() => dispatch(node, b, "start")); + loop((now2) => { + if (pending_program && now2 > pending_program.start) { + running_program = init2(pending_program, duration); + pending_program = null; + dispatch(node, running_program.b, "start"); + if (css) { + clear_animation(); + animation_name = create_rule( + node, + t, + running_program.b, + running_program.duration, + 0, + easing, + config.css + ); + } + } + if (running_program) { + if (now2 >= running_program.end) { + tick(t = running_program.b, 1 - t); + dispatch(node, running_program.b, "end"); + if (!pending_program) { + if (running_program.b) { + clear_animation(); + } else { + if (!--running_program.group.r) + run_all(running_program.group.c); + } + } + running_program = null; + } else if (now2 >= running_program.start) { + const p = now2 - running_program.start; + t = running_program.a + running_program.d * easing(p / running_program.duration); + tick(t, 1 - t); + } + } + return !!(running_program || pending_program); + }); + } + } + return { + run(b) { + if (is_function(config)) { + wait().then(() => { + const opts = { direction: b ? "in" : "out" }; + config = config(opts); + go(b); + }); + } else { + go(b); + } + }, + end() { + clear_animation(); + running_program = pending_program = null; + } + }; +} +function ensure_array_like(array_like_or_iterator) { + return (array_like_or_iterator == null ? void 0 : array_like_or_iterator.length) !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator); +} +function outro_and_destroy_block(block, lookup) { + transition_out(block, 1, 1, () => { + lookup.delete(block.key); + }); +} +function update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block2, next, get_context) { + let o = old_blocks.length; + let n = list.length; + let i = o; + const old_indexes = {}; + while (i--) + old_indexes[old_blocks[i].key] = i; + const new_blocks = []; + const new_lookup = /* @__PURE__ */ new Map(); + const deltas = /* @__PURE__ */ new Map(); + const updates = []; + i = n; + while (i--) { + const child_ctx = get_context(ctx, list, i); + const key = get_key(child_ctx); + let block = lookup.get(key); + if (!block) { + block = create_each_block2(key, child_ctx); + block.c(); + } else if (dynamic) { + updates.push(() => block.p(child_ctx, dirty)); + } + new_lookup.set(key, new_blocks[i] = block); + if (key in old_indexes) + deltas.set(key, Math.abs(i - old_indexes[key])); + } + const will_move = /* @__PURE__ */ new Set(); + const did_move = /* @__PURE__ */ new Set(); + function insert2(block) { + transition_in(block, 1); + block.m(node, next); + lookup.set(block.key, block); + next = block.first; + n--; + } + while (o && n) { + const new_block = new_blocks[n - 1]; + const old_block = old_blocks[o - 1]; + const new_key = new_block.key; + const old_key = old_block.key; + if (new_block === old_block) { + next = new_block.first; + o--; + n--; + } else if (!new_lookup.has(old_key)) { + destroy(old_block, lookup); + o--; + } else if (!lookup.has(new_key) || will_move.has(new_key)) { + insert2(new_block); + } else if (did_move.has(old_key)) { + o--; + } else if (deltas.get(new_key) > deltas.get(old_key)) { + did_move.add(new_key); + insert2(new_block); + } else { + will_move.add(old_key); + o--; + } + } + while (o--) { + const old_block = old_blocks[o]; + if (!new_lookup.has(old_block.key)) + destroy(old_block, lookup); + } + while (n) + insert2(new_blocks[n - 1]); + run_all(updates); + return new_blocks; +} +function bind(component, name, callback) { + const index = component.$$.props[name]; + if (index !== void 0) { + component.$$.bound[index] = callback; + callback(component.$$.ctx[index]); + } +} +function create_component(block) { + block && block.c(); +} +function mount_component(component, target, anchor) { + const { fragment, after_update } = component.$$; + fragment && fragment.m(target, anchor); + add_render_callback(() => { + const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); + if (component.$$.on_destroy) { + component.$$.on_destroy.push(...new_on_destroy); + } else { + run_all(new_on_destroy); + } + component.$$.on_mount = []; + }); + after_update.forEach(add_render_callback); +} +function destroy_component(component, detaching) { + const $$ = component.$$; + if ($$.fragment !== null) { + flush_render_callbacks($$.after_update); + run_all($$.on_destroy); + $$.fragment && $$.fragment.d(detaching); + $$.on_destroy = $$.fragment = null; + $$.ctx = []; + } +} +function make_dirty(component, i) { + if (component.$$.dirty[0] === -1) { + dirty_components.push(component); + schedule_update(); + component.$$.dirty.fill(0); + } + component.$$.dirty[i / 31 | 0] |= 1 << i % 31; +} +function init(component, options, instance2, create_fragment2, not_equal, props, append_styles = null, dirty = [-1]) { + const parent_component = current_component; + set_current_component(component); + const $$ = component.$$ = { + fragment: null, + ctx: [], + // state + props, + update: noop, + not_equal, + bound: blank_object(), + // lifecycle + on_mount: [], + on_destroy: [], + on_disconnect: [], + before_update: [], + after_update: [], + context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), + // everything else + callbacks: blank_object(), + dirty, + skip_bound: false, + root: options.target || parent_component.$$.root + }; + append_styles && append_styles($$.root); + let ready = false; + $$.ctx = instance2 ? instance2(component, options.props || {}, (i, ret, ...rest) => { + const value = rest.length ? rest[0] : ret; + if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { + if (!$$.skip_bound && $$.bound[i]) + $$.bound[i](value); + if (ready) + make_dirty(component, i); + } + return ret; + }) : []; + $$.update(); + ready = true; + run_all($$.before_update); + $$.fragment = create_fragment2 ? create_fragment2($$.ctx) : false; + if (options.target) { + if (options.hydrate) { + const nodes = children(options.target); + $$.fragment && $$.fragment.l(nodes); + nodes.forEach(detach); + } else { + $$.fragment && $$.fragment.c(); + } + if (options.intro) + transition_in(component.$$.fragment); + mount_component(component, options.target, options.anchor); + flush(); + } + set_current_component(parent_component); +} +class SvelteComponent { + constructor() { + /** + * ### PRIVATE API + * + * Do not use, may change at any time + * + * @type {any} + */ + __publicField(this, "$$"); + /** + * ### PRIVATE API + * + * Do not use, may change at any time + * + * @type {any} + */ + __publicField(this, "$$set"); + } + /** @returns {void} */ + $destroy() { + destroy_component(this, 1); + this.$destroy = noop; + } + /** + * @template {Extract} K + * @param {K} type + * @param {((e: Events[K]) => void) | null | undefined} callback + * @returns {() => void} + */ + $on(type, callback) { + if (!is_function(callback)) { + return noop; + } + const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []); + callbacks.push(callback); + return () => { + const index = callbacks.indexOf(callback); + if (index !== -1) + callbacks.splice(index, 1); + }; + } + /** + * @param {Partial} props + * @returns {void} + */ + $set(props) { + if (this.$$set && !is_empty(props)) { + this.$$.skip_bound = true; + this.$$set(props); + this.$$.skip_bound = false; + } + } +} +const PUBLIC_VERSION = "4"; +if (typeof window !== "undefined") + (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION); +function cubicOut(t) { + const f = t - 1; + return f * f * f + 1; +} +function slide(node, { delay = 0, duration = 400, easing = cubicOut, axis = "y" } = {}) { + const style = getComputedStyle(node); + const opacity = +style.opacity; + const primary_property = axis === "y" ? "height" : "width"; + const primary_property_value = parseFloat(style[primary_property]); + const secondary_properties = axis === "y" ? ["top", "bottom"] : ["left", "right"]; + const capitalized_secondary_properties = secondary_properties.map( + (e) => `${e[0].toUpperCase()}${e.slice(1)}` + ); + const padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]); + const padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]); + const margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]); + const margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]); + const border_width_start_value = parseFloat( + style[`border${capitalized_secondary_properties[0]}Width`] + ); + const border_width_end_value = parseFloat( + style[`border${capitalized_secondary_properties[1]}Width`] + ); + return { + delay, + duration, + easing, + css: (t) => `overflow: hidden;opacity: ${Math.min(t * 20, 1) * opacity};${primary_property}: ${t * primary_property_value}px;padding-${secondary_properties[0]}: ${t * padding_start_value}px;padding-${secondary_properties[1]}: ${t * padding_end_value}px;margin-${secondary_properties[0]}: ${t * margin_start_value}px;margin-${secondary_properties[1]}: ${t * margin_end_value}px;border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;` + }; +} +let requestUrl = window.location.href.split("/").slice(0, -1).join("/"); +function handleFormData(e) { + const ACTION_URL = e.target.action; + const formData = new FormData(e.target); + const data = new URLSearchParams(); + for (let field of formData) { + const [key, value] = field; + data.append(key, value); + } + if (e.target.method.toLowerCase() == "get") { + fetch(`${ACTION_URL}?${data}`); + } else { + fetch(ACTION_URL, { + method: "POST", + body: data + }); + } +} +function saveSsid(e, ap) { + ap.savedSsid = e.target.value; +} +function savePassword(e, ap) { + ap.savedPassword = e.target.value; +} +const TIMEOUT = 3e4; +class AutoRedirect { + constructor(redirectCallback) { + this.active = false; + this.timeout = null; + this.callback = redirectCallback; + } + update() { + if (window.performance.now() - this.stateChangedAt > TIMEOUT) { + this.disable(); + } + } + lookForRedirect(probeDetails) { + if (!this.active) { + return; + } + for (const probeDetail of probeDetails) { + if (probeDetail.reachable && !probeDetail.sameAsHost) { + this.callback(probeDetail.url); + this.disable(); + } + } + } + activate() { + if (!this.active) { + return; + } + this.stateChangedAt = window.performance.now(); + this.active = true; + } + disable() { + clearTimeout(this.timeout); + this.active = false; + } +} +function create_else_block$1(ctx) { + let div1; + let div0; + let t1; + let input; + let input_value_value; + let input_autofocus_value; + let mounted; + let dispose; + return { + c() { + div1 = element("div"); + div0 = element("div"); + div0.innerHTML = `SSID`; + t1 = space(); + input = element("input"); + attr(div0, "class", "col-auto pr-0 input-group-prepend"); + attr(input, "class", "col form-control bg-dark text-white"); + attr(input, "type", "text"); + attr(input, "name", "ssid"); + input.value = input_value_value = /*ap*/ + ctx[0].savedSsid ? ( + /*ap*/ + ctx[0].savedSsid + ) : ""; + input.autofocus = input_autofocus_value = /*ap*/ + ctx[0].ssidFocus; + attr(div1, "class", "row pt-2 input-group"); + }, + m(target, anchor) { + insert(target, div1, anchor); + append(div1, div0); + append(div1, t1); + append(div1, input); + if ( + /*ap*/ + ctx[0].ssidFocus + ) + input.focus(); + if (!mounted) { + dispose = [ + listen( + input, + "input", + /*input_handler*/ + ctx[1] + ), + listen( + input, + "focusin", + /*focusin_handler*/ + ctx[2] + ), + listen( + input, + "focusout", + /*focusout_handler*/ + ctx[3] + ) + ]; + mounted = true; + } + }, + p(ctx2, dirty) { + if (dirty & /*ap*/ + 1 && input_value_value !== (input_value_value = /*ap*/ + ctx2[0].savedSsid ? ( + /*ap*/ + ctx2[0].savedSsid + ) : "") && input.value !== input_value_value) { + input.value = input_value_value; + } + if (dirty & /*ap*/ + 1 && input_autofocus_value !== (input_autofocus_value = /*ap*/ + ctx2[0].ssidFocus)) { + input.autofocus = input_autofocus_value; + } + }, + d(detaching) { + if (detaching) { + detach(div1); + } + mounted = false; + run_all(dispose); + } + }; +} +function create_if_block$1(ctx) { + let input; + let input_value_value; + return { + c() { + input = element("input"); + attr(input, "type", "hidden"); + attr(input, "name", "ssid"); + input.value = input_value_value = /*ap*/ + ctx[0].ssid; + }, + m(target, anchor) { + insert(target, input, anchor); + }, + p(ctx2, dirty) { + if (dirty & /*ap*/ + 1 && input_value_value !== (input_value_value = /*ap*/ + ctx2[0].ssid)) { + input.value = input_value_value; + } + }, + d(detaching) { + if (detaching) { + detach(input); + } + } + }; +} +function create_fragment$2(ctx) { + let form; + let t0; + let div1; + let div0; + let t2; + let input0; + let input0_value_value; + let input0_autofocus_value; + let t3; + let div3; + let mounted; + let dispose; + function select_block_type(ctx2, dirty) { + if ( + /*ap*/ + ctx2[0].ssid + ) + return create_if_block$1; + return create_else_block$1; + } + let current_block_type = select_block_type(ctx); + let if_block = current_block_type(ctx); + return { + c() { + form = element("form"); + if_block.c(); + t0 = space(); + div1 = element("div"); + div0 = element("div"); + div0.innerHTML = `Password`; + t2 = space(); + input0 = element("input"); + t3 = space(); + div3 = element("div"); + div3.innerHTML = `
            `; + attr(div0, "class", "col-auto pr-0 input-group-prepend"); + attr(input0, "class", "col form-control bg-dark text-white"); + attr(input0, "type", "password"); + attr(input0, "name", "password"); + input0.value = input0_value_value = /*ap*/ + ctx[0].savedPassword ? ( + /*ap*/ + ctx[0].savedPassword + ) : ""; + input0.autofocus = input0_autofocus_value = /*ap*/ + ctx[0].passFocus; + attr(div1, "class", "row pt-2 input-group"); + attr(div3, "class", "row pt-2 pb-2 input-group"); + attr(form, "class", "container p-0"); + attr(form, "action", "/save"); + attr(form, "method", "post"); + }, + m(target, anchor) { + insert(target, form, anchor); + if_block.m(form, null); + append(form, t0); + append(form, div1); + append(div1, div0); + append(div1, t2); + append(div1, input0); + append(form, t3); + append(form, div3); + if ( + /*ap*/ + ctx[0].passFocus + ) + input0.focus(); + if (!mounted) { + dispose = [ + listen( + input0, + "input", + /*input_handler_1*/ + ctx[4] + ), + listen( + input0, + "focusin", + /*focusin_handler_1*/ + ctx[5] + ), + listen( + input0, + "focusout", + /*focusout_handler_1*/ + ctx[6] + ), + listen(form, "submit", prevent_default(handleFormData)) + ]; + mounted = true; + } + }, + p(ctx2, [dirty]) { + if (current_block_type === (current_block_type = select_block_type(ctx2)) && if_block) { + if_block.p(ctx2, dirty); + } else { + if_block.d(1); + if_block = current_block_type(ctx2); + if (if_block) { + if_block.c(); + if_block.m(form, t0); + } + } + if (dirty & /*ap*/ + 1 && input0_value_value !== (input0_value_value = /*ap*/ + ctx2[0].savedPassword ? ( + /*ap*/ + ctx2[0].savedPassword + ) : "") && input0.value !== input0_value_value) { + input0.value = input0_value_value; + } + if (dirty & /*ap*/ + 1 && input0_autofocus_value !== (input0_autofocus_value = /*ap*/ + ctx2[0].passFocus)) { + input0.autofocus = input0_autofocus_value; + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) { + detach(form); + } + if_block.d(); + mounted = false; + run_all(dispose); + } + }; +} +function instance$2($$self, $$props, $$invalidate) { + let { ap } = $$props; + const input_handler = (e) => saveSsid(e, ap); + const focusin_handler = () => $$invalidate(0, ap.ssidFocus = true, ap); + const focusout_handler = () => $$invalidate(0, ap.ssidFocus = false, ap); + const input_handler_1 = (e) => savePassword(e, ap); + const focusin_handler_1 = () => $$invalidate(0, ap.passFocus = true, ap); + const focusout_handler_1 = () => $$invalidate(0, ap.passFocus = false, ap); + $$self.$$set = ($$props2) => { + if ("ap" in $$props2) + $$invalidate(0, ap = $$props2.ap); + }; + return [ + ap, + input_handler, + focusin_handler, + focusout_handler, + input_handler_1, + focusin_handler_1, + focusout_handler_1 + ]; +} +class ConnectForm extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance$2, create_fragment$2, safe_not_equal, { ap: 0 }); + } +} +const get_navigation_slot_changes = (dirty) => ({}); +const get_navigation_slot_context = (ctx) => ({}); +const get_content_slot_changes = (dirty) => ({}); +const get_content_slot_context = (ctx) => ({}); +const get_header_slot_changes = (dirty) => ({}); +const get_header_slot_context = (ctx) => ({}); +function create_fragment$1(ctx) { + let dialog_1; + let div3; + let div0; + let t0; + let div1; + let t1; + let div2; + let current; + let mounted; + let dispose; + const header_slot_template = ( + /*#slots*/ + ctx[3].header + ); + const header_slot = create_slot( + header_slot_template, + ctx, + /*$$scope*/ + ctx[2], + get_header_slot_context + ); + const content_slot_template = ( + /*#slots*/ + ctx[3].content + ); + const content_slot = create_slot( + content_slot_template, + ctx, + /*$$scope*/ + ctx[2], + get_content_slot_context + ); + const navigation_slot_template = ( + /*#slots*/ + ctx[3].navigation + ); + const navigation_slot = create_slot( + navigation_slot_template, + ctx, + /*$$scope*/ + ctx[2], + get_navigation_slot_context + ); + return { + c() { + dialog_1 = element("dialog"); + div3 = element("div"); + div0 = element("div"); + if (header_slot) + header_slot.c(); + t0 = space(); + div1 = element("div"); + if (content_slot) + content_slot.c(); + t1 = space(); + div2 = element("div"); + if (navigation_slot) + navigation_slot.c(); + attr(div0, "class", "row"); + attr(div1, "class", "row"); + attr(div2, "class", "row pt-3"); + attr(dialog_1, "class", "border container p-4 svelte-1w8ed2v"); + }, + m(target, anchor) { + insert(target, dialog_1, anchor); + append(dialog_1, div3); + append(div3, div0); + if (header_slot) { + header_slot.m(div0, null); + } + append(div3, t0); + append(div3, div1); + if (content_slot) { + content_slot.m(div1, null); + } + append(div3, t1); + append(div3, div2); + if (navigation_slot) { + navigation_slot.m(div2, null); + } + ctx[5](dialog_1); + current = true; + if (!mounted) { + dispose = [ + listen(div3, "click", stop_propagation( + /*click_handler*/ + ctx[4] + )), + listen( + dialog_1, + "close", + /*close_handler*/ + ctx[6] + ) + ]; + mounted = true; + } + }, + p(ctx2, [dirty]) { + if (header_slot) { + if (header_slot.p && (!current || dirty & /*$$scope*/ + 4)) { + update_slot_base( + header_slot, + header_slot_template, + ctx2, + /*$$scope*/ + ctx2[2], + !current ? get_all_dirty_from_scope( + /*$$scope*/ + ctx2[2] + ) : get_slot_changes( + header_slot_template, + /*$$scope*/ + ctx2[2], + dirty, + get_header_slot_changes + ), + get_header_slot_context + ); + } + } + if (content_slot) { + if (content_slot.p && (!current || dirty & /*$$scope*/ + 4)) { + update_slot_base( + content_slot, + content_slot_template, + ctx2, + /*$$scope*/ + ctx2[2], + !current ? get_all_dirty_from_scope( + /*$$scope*/ + ctx2[2] + ) : get_slot_changes( + content_slot_template, + /*$$scope*/ + ctx2[2], + dirty, + get_content_slot_changes + ), + get_content_slot_context + ); + } + } + if (navigation_slot) { + if (navigation_slot.p && (!current || dirty & /*$$scope*/ + 4)) { + update_slot_base( + navigation_slot, + navigation_slot_template, + ctx2, + /*$$scope*/ + ctx2[2], + !current ? get_all_dirty_from_scope( + /*$$scope*/ + ctx2[2] + ) : get_slot_changes( + navigation_slot_template, + /*$$scope*/ + ctx2[2], + dirty, + get_navigation_slot_changes + ), + get_navigation_slot_context + ); + } + } + }, + i(local) { + if (current) + return; + transition_in(header_slot, local); + transition_in(content_slot, local); + transition_in(navigation_slot, local); + current = true; + }, + o(local) { + transition_out(header_slot, local); + transition_out(content_slot, local); + transition_out(navigation_slot, local); + current = false; + }, + d(detaching) { + if (detaching) { + detach(dialog_1); + } + if (header_slot) + header_slot.d(detaching); + if (content_slot) + content_slot.d(detaching); + if (navigation_slot) + navigation_slot.d(detaching); + ctx[5](null); + mounted = false; + run_all(dispose); + } + }; +} +function instance$1($$self, $$props, $$invalidate) { + let { $$slots: slots = {}, $$scope } = $$props; + let { showModal } = $$props; + let { dialog } = $$props; + function click_handler(event) { + bubble.call(this, $$self, event); + } + function dialog_1_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + dialog = $$value; + $$invalidate(1, dialog); + }); + } + const close_handler = () => $$invalidate(0, showModal = false); + $$self.$$set = ($$props2) => { + if ("showModal" in $$props2) + $$invalidate(0, showModal = $$props2.showModal); + if ("dialog" in $$props2) + $$invalidate(1, dialog = $$props2.dialog); + if ("$$scope" in $$props2) + $$invalidate(2, $$scope = $$props2.$$scope); + }; + $$self.$$.update = () => { + if ($$self.$$.dirty & /*dialog, showModal*/ + 3) { + if (dialog && showModal) + dialog.showModal(); + } + }; + return [ + showModal, + dialog, + $$scope, + slots, + click_handler, + dialog_1_binding, + close_handler + ]; +} +class Modal extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance$1, create_fragment$1, safe_not_equal, { showModal: 0, dialog: 1 }); + } +} +function get_each_context(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[25] = list[i]; + return child_ctx; +} +function get_each_context_1(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[28] = list[i]; + const constants_0 = ( + /*probeDetails*/ + child_ctx[6].find(function func(...args) { + return ( + /*func*/ + ctx[10]( + /*connectionDetail*/ + child_ctx[28], + ...args + ) + ); + }) + ); + child_ctx[29] = constants_0; + return child_ctx; +} +function create_else_block_3(ctx) { + let h2; + return { + c() { + h2 = element("h2"); + h2.textContent = "PrusaLink is not connected to any LAN network"; + }, + m(target, anchor) { + insert(target, h2, anchor); + }, + p: noop, + d(detaching) { + if (detaching) { + detach(h2); + } + } + }; +} +function create_if_block_8(ctx) { + let h2; + let t1; + let div5; + let div4; + let t8; + let each_value_1 = ensure_array_like( + /*connectionDetails*/ + ctx[1] + ); + let each_blocks = []; + for (let i = 0; i < each_value_1.length; i += 1) { + each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i)); + } + return { + c() { + h2 = element("h2"); + h2.textContent = "Connections"; + t1 = space(); + div5 = element("div"); + div4 = element("div"); + div4.innerHTML = `
            Interface
            IP address
            SSID
            `; + t8 = space(); + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + set_style(h2, "margin-bottom", "0.3em"); + attr(div4, "class", "row border border-white pt-2 pb-2"); + attr(div5, "class", "container mb-5"); + }, + m(target, anchor) { + insert(target, h2, anchor); + insert(target, t1, anchor); + insert(target, div5, anchor); + append(div5, div4); + append(div5, t8); + for (let i = 0; i < each_blocks.length; i += 1) { + if (each_blocks[i]) { + each_blocks[i].m(div5, null); + } + } + }, + p(ctx2, dirty) { + if (dirty[0] & /*probeDetails, connectionDetails*/ + 66) { + each_value_1 = ensure_array_like( + /*connectionDetails*/ + ctx2[1] + ); + let i; + for (i = 0; i < each_value_1.length; i += 1) { + const child_ctx = get_each_context_1(ctx2, each_value_1, i); + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + } else { + each_blocks[i] = create_each_block_1(child_ctx); + each_blocks[i].c(); + each_blocks[i].m(div5, null); + } + } + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + each_blocks.length = each_value_1.length; + } + }, + d(detaching) { + if (detaching) { + detach(h2); + detach(t1); + detach(div5); + } + destroy_each(each_blocks, detaching); + } + }; +} +function create_if_block_12(ctx) { + let t_value = ( + /*connectionDetail*/ + ctx[28].ssid + "" + ); + let t; + return { + c() { + t = text(t_value); + }, + m(target, anchor) { + insert(target, t, anchor); + }, + p(ctx2, dirty) { + if (dirty[0] & /*connectionDetails*/ + 2 && t_value !== (t_value = /*connectionDetail*/ + ctx2[28].ssid + "")) + set_data(t, t_value); + }, + d(detaching) { + if (detaching) { + detach(t); + } + } + }; +} +function create_else_block_2(ctx) { + let div; + return { + c() { + div = element("div"); + div.textContent = "Unreachable"; + attr(div, "class", "float-right"); + }, + m(target, anchor) { + insert(target, div, anchor); + }, + p: noop, + d(detaching) { + if (detaching) { + detach(div); + } + } + }; +} +function create_if_block_11(ctx) { + let div1; + return { + c() { + div1 = element("div"); + div1.innerHTML = `
            Please wait...
            `; + attr(div1, "class", "float-right"); + }, + m(target, anchor) { + insert(target, div1, anchor); + }, + p: noop, + d(detaching) { + if (detaching) { + detach(div1); + } + } + }; +} +function create_if_block_10(ctx) { + let button; + let mounted; + let dispose; + function click_handler() { + return ( + /*click_handler*/ + ctx[9]( + /*probeDetail*/ + ctx[29] + ) + ); + } + return { + c() { + button = element("button"); + button.textContent = "Go there"; + attr(button, "class", "btn btn-outline-light float-right"); + }, + m(target, anchor) { + insert(target, button, anchor); + if (!mounted) { + dispose = listen(button, "click", click_handler); + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + }, + d(detaching) { + if (detaching) { + detach(button); + } + mounted = false; + dispose(); + } + }; +} +function create_if_block_9(ctx) { + let div; + return { + c() { + div = element("div"); + div.textContent = "You are here"; + attr(div, "class", "float-right"); + }, + m(target, anchor) { + insert(target, div, anchor); + }, + p: noop, + d(detaching) { + if (detaching) { + detach(div); + } + } + }; +} +function create_each_block_1(ctx) { + let div4; + let div0; + let t0_value = ( + /*connectionDetail*/ + ctx[28].interface + "" + ); + let t0; + let t1; + let div1; + let t2_value = ( + /*connectionDetail*/ + ctx[28].ip + "" + ); + let t2; + let t3; + let div2; + let t4; + let div3; + let t5; + let if_block0 = ( + /*connectionDetail*/ + ctx[28].ssid && create_if_block_12(ctx) + ); + function select_block_type_1(ctx2, dirty) { + if ( + /*probeDetail*/ + ctx2[29].sameAsHost + ) + return create_if_block_9; + if ( + /*probeDetail*/ + ctx2[29].reachable == true + ) + return create_if_block_10; + if ( + /*probeDetail*/ + ctx2[29].reachable == void 0 + ) + return create_if_block_11; + return create_else_block_2; + } + let current_block_type = select_block_type_1(ctx); + let if_block1 = current_block_type(ctx); + return { + c() { + div4 = element("div"); + div0 = element("div"); + t0 = text(t0_value); + t1 = space(); + div1 = element("div"); + t2 = text(t2_value); + t3 = space(); + div2 = element("div"); + if (if_block0) + if_block0.c(); + t4 = space(); + div3 = element("div"); + if_block1.c(); + t5 = space(); + attr(div0, "class", "col-auto"); + set_style(div0, "width", "125px"); + attr(div1, "class", "col-auto"); + set_style(div1, "width", "175px"); + attr(div2, "class", "col"); + attr(div3, "class", "col-auto"); + set_style(div3, "width", "175px"); + attr(div4, "class", "row border border-white border-top-0 pt-2 pb-2"); + }, + m(target, anchor) { + insert(target, div4, anchor); + append(div4, div0); + append(div0, t0); + append(div4, t1); + append(div4, div1); + append(div1, t2); + append(div4, t3); + append(div4, div2); + if (if_block0) + if_block0.m(div2, null); + append(div4, t4); + append(div4, div3); + if_block1.m(div3, null); + append(div4, t5); + }, + p(ctx2, dirty) { + if (dirty[0] & /*connectionDetails*/ + 2 && t0_value !== (t0_value = /*connectionDetail*/ + ctx2[28].interface + "")) + set_data(t0, t0_value); + if (dirty[0] & /*connectionDetails*/ + 2 && t2_value !== (t2_value = /*connectionDetail*/ + ctx2[28].ip + "")) + set_data(t2, t2_value); + if ( + /*connectionDetail*/ + ctx2[28].ssid + ) { + if (if_block0) { + if_block0.p(ctx2, dirty); + } else { + if_block0 = create_if_block_12(ctx2); + if_block0.c(); + if_block0.m(div2, null); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + if (current_block_type === (current_block_type = select_block_type_1(ctx2)) && if_block1) { + if_block1.p(ctx2, dirty); + } else { + if_block1.d(1); + if_block1 = current_block_type(ctx2); + if (if_block1) { + if_block1.c(); + if_block1.m(div3, null); + } + } + }, + d(detaching) { + if (detaching) { + detach(div4); + } + if (if_block0) + if_block0.d(); + if_block1.d(); + } + }; +} +function create_if_block_7(ctx) { + let t; + return { + c() { + t = text("Saved"); + }, + m(target, anchor) { + insert(target, t, anchor); + }, + p: noop, + d(detaching) { + if (detaching) { + detach(t); + } + } + }; +} +function create_if_block_3(ctx) { + let if_block_anchor; + function select_block_type_3(ctx2, dirty) { + if ( + /*ap*/ + ctx2[25].state == 1 + ) + return create_if_block_4; + if ( + /*ap*/ + ctx2[25].state == 2 + ) + return create_if_block_5; + if ( + /*ap*/ + ctx2[25].state == 3 + ) + return create_if_block_6; + } + let current_block_type = select_block_type_3(ctx); + let if_block = current_block_type && current_block_type(ctx); + return { + c() { + if (if_block) + if_block.c(); + if_block_anchor = empty(); + }, + m(target, anchor) { + if (if_block) + if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + }, + p(ctx2, dirty) { + if (current_block_type !== (current_block_type = select_block_type_3(ctx2))) { + if (if_block) + if_block.d(1); + if_block = current_block_type && current_block_type(ctx2); + if (if_block) { + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } + }, + d(detaching) { + if (detaching) { + detach(if_block_anchor); + } + if (if_block) { + if_block.d(detaching); + } + } + }; +} +function create_if_block_6(ctx) { + let t; + return { + c() { + t = text("Disconnecting"); + }, + m(target, anchor) { + insert(target, t, anchor); + }, + d(detaching) { + if (detaching) { + detach(t); + } + } + }; +} +function create_if_block_5(ctx) { + let t; + return { + c() { + t = text("Connected"); + }, + m(target, anchor) { + insert(target, t, anchor); + }, + d(detaching) { + if (detaching) { + detach(t); + } + } + }; +} +function create_if_block_4(ctx) { + let t; + return { + c() { + t = text("Connecting"); + }, + m(target, anchor) { + insert(target, t, anchor); + }, + d(detaching) { + if (detaching) { + detach(t); + } + } + }; +} +function create_if_block(ctx) { + let div2; + let div0; + let t0; + let current_block_type_index; + let if_block; + let t1; + let div1; + let div2_transition; + let current; + const if_block_creators = [create_if_block_1, create_else_block_1]; + const if_blocks = []; + function select_block_type_4(ctx2, dirty) { + if ( + /*ap*/ + ctx2[25].saved + ) + return 0; + return 1; + } + current_block_type_index = select_block_type_4(ctx); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + return { + c() { + div2 = element("div"); + div0 = element("div"); + t0 = space(); + if_block.c(); + t1 = space(); + div1 = element("div"); + attr(div0, "class", "col-auto"); + set_style(div0, "width", "60px"); + attr(div1, "class", "col-md"); + attr(div2, "class", "container row"); + }, + m(target, anchor) { + insert(target, div2, anchor); + append(div2, div0); + append(div2, t0); + if_blocks[current_block_type_index].m(div2, null); + append(div2, t1); + append(div2, div1); + current = true; + }, + p(ctx2, dirty) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type_4(ctx2); + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(ctx2, dirty); + } else { + group_outros(); + transition_out(if_blocks[previous_block_index], 1, 1, () => { + if_blocks[previous_block_index] = null; + }); + check_outros(); + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); + if_block.c(); + } else { + if_block.p(ctx2, dirty); + } + transition_in(if_block, 1); + if_block.m(div2, t1); + } + }, + i(local) { + if (current) + return; + transition_in(if_block); + if (local) { + add_render_callback(() => { + if (!current) + return; + if (!div2_transition) + div2_transition = create_bidirectional_transition(div2, slide, {}, true); + div2_transition.run(1); + }); + } + current = true; + }, + o(local) { + transition_out(if_block); + if (local) { + if (!div2_transition) + div2_transition = create_bidirectional_transition(div2, slide, {}, false); + div2_transition.run(0); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(div2); + } + if_blocks[current_block_type_index].d(); + if (detaching && div2_transition) + div2_transition.end(); + } + }; +} +function create_else_block_1(ctx) { + let div; + let connectform; + let current; + connectform = new ConnectForm({ props: { ap: ( + /*selectedAp*/ + ctx[3] + ) } }); + return { + c() { + div = element("div"); + create_component(connectform.$$.fragment); + attr(div, "class", "col-md-5 col-lg-4 col container"); + }, + m(target, anchor) { + insert(target, div, anchor); + mount_component(connectform, div, null); + current = true; + }, + p(ctx2, dirty) { + const connectform_changes = {}; + if (dirty[0] & /*selectedAp*/ + 8) + connectform_changes.ap = /*selectedAp*/ + ctx2[3]; + connectform.$set(connectform_changes); + }, + i(local) { + if (current) + return; + transition_in(connectform.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(connectform.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) { + detach(div); + } + destroy_component(connectform); + } + }; +} +function create_if_block_1(ctx) { + let div1; + let div0; + let t0; + let form; + let input0; + let input0_value_value; + let t1; + let input1; + let mounted; + let dispose; + function select_block_type_5(ctx2, dirty) { + if ( + /*ap*/ + ctx2[25].state >= 1 && /*ap*/ + ctx2[25].state <= 3 + ) + return create_if_block_2; + return create_else_block; + } + let current_block_type = select_block_type_5(ctx); + let if_block = current_block_type(ctx); + return { + c() { + div1 = element("div"); + div0 = element("div"); + if_block.c(); + t0 = space(); + form = element("form"); + input0 = element("input"); + t1 = space(); + input1 = element("input"); + attr(input0, "type", "hidden"); + attr(input0, "name", "ssid"); + input0.value = input0_value_value = /*ap*/ + ctx[25].ssid; + attr(input1, "class", "btn btn-outline-light"); + attr(input1, "type", "submit"); + input1.value = "Forget"; + attr(form, "class", "col-auto"); + attr(form, "action", "/wifi/api/forget"); + attr(form, "method", "post"); + attr(div0, "class", "row pt-2 pd-2 input-group"); + attr(div1, "class", "col container"); + }, + m(target, anchor) { + insert(target, div1, anchor); + append(div1, div0); + if_block.m(div0, null); + append(div0, t0); + append(div0, form); + append(form, input0); + append(form, t1); + append(form, input1); + if (!mounted) { + dispose = listen(form, "submit", prevent_default(handleFormData)); + mounted = true; + } + }, + p(ctx2, dirty) { + if (current_block_type === (current_block_type = select_block_type_5(ctx2)) && if_block) { + if_block.p(ctx2, dirty); + } else { + if_block.d(1); + if_block = current_block_type(ctx2); + if (if_block) { + if_block.c(); + if_block.m(div0, t0); + } + } + if (dirty[0] & /*aps*/ + 1 && input0_value_value !== (input0_value_value = /*ap*/ + ctx2[25].ssid)) { + input0.value = input0_value_value; + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) { + detach(div1); + } + if_block.d(); + mounted = false; + dispose(); + } + }; +} +function create_else_block(ctx) { + let form; + let input0; + let input0_value_value; + let t; + let input1; + let mounted; + let dispose; + return { + c() { + form = element("form"); + input0 = element("input"); + t = space(); + input1 = element("input"); + attr(input0, "type", "hidden"); + attr(input0, "name", "ssid"); + input0.value = input0_value_value = /*ap*/ + ctx[25].ssid; + attr(input1, "class", "btn btn-outline-light"); + attr(input1, "type", "submit"); + input1.value = "Connect"; + attr(form, "class", "col-auto"); + attr(form, "action", "/wifi/api/connect"); + attr(form, "method", "post"); + }, + m(target, anchor) { + insert(target, form, anchor); + append(form, input0); + append(form, t); + append(form, input1); + if (!mounted) { + dispose = listen(form, "submit", prevent_default(handleFormData)); + mounted = true; + } + }, + p(ctx2, dirty) { + if (dirty[0] & /*aps*/ + 1 && input0_value_value !== (input0_value_value = /*ap*/ + ctx2[25].ssid)) { + input0.value = input0_value_value; + } + }, + d(detaching) { + if (detaching) { + detach(form); + } + mounted = false; + dispose(); + } + }; +} +function create_if_block_2(ctx) { + let form; + let input0; + let input0_value_value; + let t; + let input1; + let mounted; + let dispose; + return { + c() { + form = element("form"); + input0 = element("input"); + t = space(); + input1 = element("input"); + attr(input0, "type", "hidden"); + attr(input0, "name", "ssid"); + input0.value = input0_value_value = /*ap*/ + ctx[25].ssid; + attr(input1, "class", "btn btn-outline-light"); + attr(input1, "type", "submit"); + input1.value = "Disconnect"; + attr(form, "class", "col-auto"); + attr(form, "action", "/wifi/api/disconnect"); + attr(form, "method", "post"); + }, + m(target, anchor) { + insert(target, form, anchor); + append(form, input0); + append(form, t); + append(form, input1); + if (!mounted) { + dispose = listen(form, "submit", prevent_default(handleFormData)); + mounted = true; + } + }, + p(ctx2, dirty) { + if (dirty[0] & /*aps*/ + 1 && input0_value_value !== (input0_value_value = /*ap*/ + ctx2[25].ssid)) { + input0.value = input0_value_value; + } + }, + d(detaching) { + if (detaching) { + detach(form); + } + mounted = false; + dispose(); + } + }; +} +function create_each_block(key_1, ctx) { + let div6; + let div0; + let img; + let img_src_value; + let t0; + let div1; + let span0; + let t1_value = ( + /*ap*/ + (ctx[25].ssid ? ( + /*ap*/ + ctx[25].ssid + ) : "[hidden]") + "" + ); + let t1; + let t2; + let div2; + let span1; + let div2_class_value; + let t3; + let div3; + let span2; + let t4_value = ( + /*ap*/ + ctx[25].frequency + "" + ); + let t4; + let t5; + let div4; + let button; + let t7; + let div5; + let t8; + let t9; + let div6_transition; + let current; + let mounted; + let dispose; + function click_handler_1() { + return ( + /*click_handler_1*/ + ctx[11]( + /*ap*/ + ctx[25] + ) + ); + } + function click_handler_2() { + return ( + /*click_handler_2*/ + ctx[12]( + /*ap*/ + ctx[25] + ) + ); + } + function select_block_type_2(ctx2, dirty) { + if ( + /*ap*/ + ctx2[25].state >= 1 && /*ap*/ + ctx2[25].state <= 3 + ) + return create_if_block_3; + if ( + /*ap*/ + ctx2[25].saved + ) + return create_if_block_7; + } + let current_block_type = select_block_type_2(ctx); + let if_block0 = current_block_type && current_block_type(ctx); + function click_handler_3() { + return ( + /*click_handler_3*/ + ctx[13]( + /*ap*/ + ctx[25] + ) + ); + } + function click_handler_4() { + return ( + /*click_handler_4*/ + ctx[14]( + /*ap*/ + ctx[25] + ) + ); + } + function click_handler_5() { + return ( + /*click_handler_5*/ + ctx[15]( + /*ap*/ + ctx[25] + ) + ); + } + let if_block1 = ( + /*isApSelected*/ + ctx[2] && /*ap*/ + ctx[25].ssid == /*selectedAp*/ + ctx[3].ssid && create_if_block(ctx) + ); + return { + key: key_1, + first: null, + c() { + div6 = element("div"); + div0 = element("div"); + img = element("img"); + t0 = space(); + div1 = element("div"); + span0 = element("span"); + t1 = text(t1_value); + t2 = space(); + div2 = element("div"); + span1 = element("span"); + if (if_block0) + if_block0.c(); + t3 = space(); + div3 = element("div"); + span2 = element("span"); + t4 = text(t4_value); + t5 = space(); + div4 = element("div"); + button = element("button"); + button.textContent = "Details"; + t7 = space(); + div5 = element("div"); + t8 = space(); + if (if_block1) + if_block1.c(); + t9 = space(); + attr(img, "height", "25"); + if (!src_url_equal(img.src, img_src_value = "img/" + /*ap*/ + ctx[25].strength_icon)) + attr(img, "src", img_src_value); + attr(div0, "class", "col-auto"); + set_style(div0, "width", "60px"); + attr(div1, "class", "col text-break"); + attr(div2, "class", div2_class_value = "col-auto " + /*ap*/ + (ctx[25].state == 2 ? "text-white" : "")); + set_style(div2, "width", "150px"); + attr(div3, "class", "col-auto"); + set_style(div3, "width", "125px"); + attr(button, "class", "btn btn-outline-light float-right"); + attr(div4, "class", "col-auto"); + set_style(div4, "width", "150px"); + attr(div5, "class", "w-100"); + attr(div6, "class", "row border border-white border-top-0 pt-2 pb-2"); + this.first = div6; + }, + m(target, anchor) { + insert(target, div6, anchor); + append(div6, div0); + append(div0, img); + append(div6, t0); + append(div6, div1); + append(div1, span0); + append(span0, t1); + append(div6, t2); + append(div6, div2); + append(div2, span1); + if (if_block0) + if_block0.m(span1, null); + append(div6, t3); + append(div6, div3); + append(div3, span2); + append(span2, t4); + append(div6, t5); + append(div6, div4); + append(div4, button); + append(div6, t7); + append(div6, div5); + append(div6, t8); + if (if_block1) + if_block1.m(div6, null); + append(div6, t9); + current = true; + if (!mounted) { + dispose = [ + listen(div0, "click", click_handler_1), + listen(div1, "click", click_handler_2), + listen(div2, "click", click_handler_3), + listen(div3, "click", click_handler_4), + listen(button, "click", click_handler_5) + ]; + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + if (!current || dirty[0] & /*aps*/ + 1 && !src_url_equal(img.src, img_src_value = "img/" + /*ap*/ + ctx[25].strength_icon)) { + attr(img, "src", img_src_value); + } + if ((!current || dirty[0] & /*aps*/ + 1) && t1_value !== (t1_value = /*ap*/ + (ctx[25].ssid ? ( + /*ap*/ + ctx[25].ssid + ) : "[hidden]") + "")) + set_data(t1, t1_value); + if (current_block_type === (current_block_type = select_block_type_2(ctx)) && if_block0) { + if_block0.p(ctx, dirty); + } else { + if (if_block0) + if_block0.d(1); + if_block0 = current_block_type && current_block_type(ctx); + if (if_block0) { + if_block0.c(); + if_block0.m(span1, null); + } + } + if (!current || dirty[0] & /*aps*/ + 1 && div2_class_value !== (div2_class_value = "col-auto " + /*ap*/ + (ctx[25].state == 2 ? "text-white" : ""))) { + attr(div2, "class", div2_class_value); + } + if ((!current || dirty[0] & /*aps*/ + 1) && t4_value !== (t4_value = /*ap*/ + ctx[25].frequency + "")) + set_data(t4, t4_value); + if ( + /*isApSelected*/ + ctx[2] && /*ap*/ + ctx[25].ssid == /*selectedAp*/ + ctx[3].ssid + ) { + if (if_block1) { + if_block1.p(ctx, dirty); + if (dirty[0] & /*isApSelected, aps, selectedAp*/ + 13) { + transition_in(if_block1, 1); + } + } else { + if_block1 = create_if_block(ctx); + if_block1.c(); + transition_in(if_block1, 1); + if_block1.m(div6, t9); + } + } else if (if_block1) { + group_outros(); + transition_out(if_block1, 1, 1, () => { + if_block1 = null; + }); + check_outros(); + } + }, + i(local) { + if (current) + return; + transition_in(if_block1); + if (local) { + add_render_callback(() => { + if (!current) + return; + if (!div6_transition) + div6_transition = create_bidirectional_transition(div6, slide, {}, true); + div6_transition.run(1); + }); + } + current = true; + }, + o(local) { + transition_out(if_block1); + if (local) { + if (!div6_transition) + div6_transition = create_bidirectional_transition(div6, slide, {}, false); + div6_transition.run(0); + } + current = false; + }, + d(detaching) { + if (detaching) { + detach(div6); + } + if (if_block0) { + if_block0.d(); + } + if (if_block1) + if_block1.d(); + if (detaching && div6_transition) + div6_transition.end(); + mounted = false; + run_all(dispose); + } + }; +} +function create_header_slot(ctx) { + let div; + return { + c() { + div = element("div"); + div.innerHTML = `

            Connected successfully

            `; + attr(div, "class", "col"); + attr(div, "slot", "header"); + }, + m(target, anchor) { + insert(target, div, anchor); + }, + p: noop, + d(detaching) { + if (detaching) { + detach(div); + } + } + }; +} +function create_content_slot(ctx) { + let div; + return { + c() { + div = element("div"); + div.innerHTML = `To continue please connect to your local network
            + It's possible this will happen automatically
            + Once connected, this should close on its own`; + attr(div, "class", "col"); + attr(div, "slot", "content"); + }, + m(target, anchor) { + insert(target, div, anchor); + }, + p: noop, + d(detaching) { + if (detaching) { + detach(div); + } + } + }; +} +function create_fragment(ctx) { + let h1; + let t1; + let t2; + let h20; + let t4; + let div7; + let div6; + let t13; + let each_blocks = []; + let each_1_lookup = /* @__PURE__ */ new Map(); + let t14; + let h21; + let t16; + let div11; + let div10; + let div8; + let connectform; + let t17; + let div9; + let div11_transition; + let t18; + let div14; + let div13; + let div12; + let button; + let t20; + let modal; + let updating_showModal; + let updating_dialog; + let current; + let mounted; + let dispose; + function select_block_type(ctx2, dirty) { + if ( + /*connectionDetails*/ + ctx2[1].length + ) + return create_if_block_8; + return create_else_block_3; + } + let current_block_type = select_block_type(ctx); + let if_block = current_block_type(ctx); + let each_value = ensure_array_like( + /*aps*/ + ctx[0] + ); + const get_key = (ctx2) => ( + /*ap*/ + ctx2[25].ssid + ); + for (let i = 0; i < each_value.length; i += 1) { + let child_ctx = get_each_context(ctx, each_value, i); + let key = get_key(child_ctx); + each_1_lookup.set(key, each_blocks[i] = create_each_block(key, child_ctx)); + } + connectform = new ConnectForm({ props: { ap: {} } }); + function modal_showModal_binding(value) { + ctx[16](value); + } + function modal_dialog_binding(value) { + ctx[17](value); + } + let modal_props = { + $$slots: { + content: [create_content_slot], + header: [create_header_slot] + }, + $$scope: { ctx } + }; + if ( + /*showRedirectModal*/ + ctx[4] !== void 0 + ) { + modal_props.showModal = /*showRedirectModal*/ + ctx[4]; + } + if ( + /*redirectDialog*/ + ctx[5] !== void 0 + ) { + modal_props.dialog = /*redirectDialog*/ + ctx[5]; + } + modal = new Modal({ props: modal_props }); + binding_callbacks.push(() => bind(modal, "showModal", modal_showModal_binding)); + binding_callbacks.push(() => bind(modal, "dialog", modal_dialog_binding)); + return { + c() { + h1 = element("h1"); + h1.textContent = "Wi-Fi Setup"; + t1 = space(); + if_block.c(); + t2 = space(); + h20 = element("h2"); + h20.textContent = "Available networks"; + t4 = space(); + div7 = element("div"); + div6 = element("div"); + div6.innerHTML = `
            SSID
            State
            Frequency
            `; + t13 = space(); + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + t14 = space(); + h21 = element("h2"); + h21.textContent = "Connect to another network"; + t16 = space(); + div11 = element("div"); + div10 = element("div"); + div8 = element("div"); + create_component(connectform.$$.fragment); + t17 = space(); + div9 = element("div"); + div9.innerHTML = ``; + t18 = space(); + div14 = element("div"); + div13 = element("div"); + div12 = element("div"); + button = element("button"); + button.innerHTML = `Back to wizard back arrow`; + t20 = space(); + create_component(modal.$$.fragment); + attr(h1, "class", "align-center"); + set_style(h20, "margin-bottom", "0.3em"); + attr(div6, "class", "row border border-white pt-2 pb-2"); + attr(div7, "class", "container mb-5"); + set_style(h21, "margin-bottom", "0.2em"); + attr(div8, "class", "col-lg-4 col"); + attr(div9, "class", "col-lg"); + attr(div10, "class", "row"); + attr(div11, "class", "container p-0"); + attr(button, "class", "btn btn-outline-light full-width"); + attr(div12, "class", "col-sm-auto p-0"); + attr(div13, "class", "row"); + attr(div14, "class", "container navigation"); + }, + m(target, anchor) { + insert(target, h1, anchor); + insert(target, t1, anchor); + if_block.m(target, anchor); + insert(target, t2, anchor); + insert(target, h20, anchor); + insert(target, t4, anchor); + insert(target, div7, anchor); + append(div7, div6); + append(div7, t13); + for (let i = 0; i < each_blocks.length; i += 1) { + if (each_blocks[i]) { + each_blocks[i].m(div7, null); + } + } + insert(target, t14, anchor); + insert(target, h21, anchor); + insert(target, t16, anchor); + insert(target, div11, anchor); + append(div11, div10); + append(div10, div8); + mount_component(connectform, div8, null); + append(div10, t17); + append(div10, div9); + insert(target, t18, anchor); + insert(target, div14, anchor); + append(div14, div13); + append(div13, div12); + append(div12, button); + insert(target, t20, anchor); + mount_component(modal, target, anchor); + current = true; + if (!mounted) { + dispose = listen( + button, + "click", + /*backToWizard*/ + ctx[8] + ); + mounted = true; + } + }, + p(ctx2, dirty) { + if (current_block_type === (current_block_type = select_block_type(ctx2)) && if_block) { + if_block.p(ctx2, dirty); + } else { + if_block.d(1); + if_block = current_block_type(ctx2); + if (if_block) { + if_block.c(); + if_block.m(t2.parentNode, t2); + } + } + if (dirty[0] & /*aps, selectedAp, isApSelected, selectAp*/ + 141) { + each_value = ensure_array_like( + /*aps*/ + ctx2[0] + ); + group_outros(); + each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx2, each_value, each_1_lookup, div7, outro_and_destroy_block, create_each_block, null, get_each_context); + check_outros(); + } + const modal_changes = {}; + if (dirty[1] & /*$$scope*/ + 2) { + modal_changes.$$scope = { dirty, ctx: ctx2 }; + } + if (!updating_showModal && dirty[0] & /*showRedirectModal*/ + 16) { + updating_showModal = true; + modal_changes.showModal = /*showRedirectModal*/ + ctx2[4]; + add_flush_callback(() => updating_showModal = false); + } + if (!updating_dialog && dirty[0] & /*redirectDialog*/ + 32) { + updating_dialog = true; + modal_changes.dialog = /*redirectDialog*/ + ctx2[5]; + add_flush_callback(() => updating_dialog = false); + } + modal.$set(modal_changes); + }, + i(local) { + if (current) + return; + for (let i = 0; i < each_value.length; i += 1) { + transition_in(each_blocks[i]); + } + transition_in(connectform.$$.fragment, local); + if (local) { + add_render_callback(() => { + if (!current) + return; + if (!div11_transition) + div11_transition = create_bidirectional_transition(div11, slide, {}, true); + div11_transition.run(1); + }); + } + transition_in(modal.$$.fragment, local); + current = true; + }, + o(local) { + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + transition_out(connectform.$$.fragment, local); + if (local) { + if (!div11_transition) + div11_transition = create_bidirectional_transition(div11, slide, {}, false); + div11_transition.run(0); + } + transition_out(modal.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) { + detach(h1); + detach(t1); + detach(t2); + detach(h20); + detach(t4); + detach(div7); + detach(t14); + detach(h21); + detach(t16); + detach(div11); + detach(t18); + detach(div14); + detach(t20); + } + if_block.d(detaching); + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].d(); + } + destroy_component(connectform); + if (detaching && div11_transition) + div11_transition.end(); + destroy_component(modal, detaching); + mounted = false; + dispose(); + } + }; +} +const AP_FETCH_INTERVAL = 3e3; +const INFO_FETCH_INTERVAL = 1e3; +const PROBE_INTERVAL = 2e3; +function changeHost(probeUrl) { + window.location.href = probeUrl + "/wifi"; +} +async function probe(url) { + try { + const response = await fetch(url + "/wifi/api/probe", { method: "HEAD" }); + if (response.status != 200) { + return false; + } + return true; + } catch { + return false; + } +} +function instance($$self, $$props, $$invalidate) { + let aps = []; + let probeDetails = []; + let connectionDetails = []; + let isApSelected = false; + let selectedAp = {}; + let autoRedirect = new AutoRedirect(changeHost); + let showRedirectModal = false; + let redirectDialog; + function processAps(receivedAps) { + if (isApSelected) { + let foundIndex = receivedAps.findIndex((ap) => ap.ssid == selectedAp.ssid); + if (foundIndex != selectedAp.index) { + if (foundIndex != -1) { + receivedAps.splice(foundIndex, 1); + } + receivedAps.splice(selectedAp.index, 0, selectedAp); + } + } + for (let i = 0; i < receivedAps.length; i++) { + let ap = receivedAps[i]; + ap.index = i; + } + $$invalidate(0, aps = receivedAps); + } + function processConnectionInfo(info) { + let newConnectionDetails = info.connection_details; + let newIps = []; + newConnectionDetails.forEach((detail) => { + newIps.push(detail.ip); + let activeConnection = info.active_connections.find((ac) => ac.interface == detail.interface); + if (activeConnection) { + detail.ssid = activeConnection.ssid; + } + }); + if (newConnectionDetails.length > 0 && connectionDetails.length == 0 && info["hotspot_on"]) { + autoRedirect.activate(); + $$invalidate(4, showRedirectModal = true); + } + if (autoRedirect.active && info["hotspot_on"] == false) { + autoRedirect.disable(); + $$invalidate(4, showRedirectModal = false); + } + updateProbeDetails(newIps); + $$invalidate(1, connectionDetails = newConnectionDetails); + } + function updateProbeDetails(receivedIps) { + const old = new Set(probeDetails.map((e) => e.ip)); + const current = new Set(receivedIps); + const toRemove = new Set([...old].filter((x) => !current.has(x))); + const toAdd = new Set([...current].filter((x) => !old.has(x))); + for (const ipToRemove of toRemove) { + probeDetails.splice(probeDetails.indexOf((e) => e.ip == ipToRemove), 1); + } + for (const ipToAdd of toAdd) { + const port = window.location.port; + let detail = { + ip: ipToAdd, + url: requestUrl.replace(window.location.host, `${ipToAdd}:${port}`), + sameAsHost: window.location.host == `${ipToAdd}:${port}`, + reachable: void 0 + }; + probeDetails.push(detail); + } + if (toAdd.size) { + probeAll(); + } + } + async function probeAll() { + for (const probeDetail of probeDetails) { + probeDetail.reachable = await probe(probeDetail.url); + } + autoRedirect.lookForRedirect(probeDetails); + } + async function fetchWifiList() { + try { + const response = await fetch(requestUrl + "/wifi/api/ap_list"); + const data = await response.json(); + processAps(data.aps); + } catch (error) { + console.log(error); + } + } + async function fetchConnectionInfo() { + fetch(requestUrl + "/wifi/api/connection_info").then((response) => response.json()).then((data) => { + processConnectionInfo(data); + }).catch((error) => { + console.log(error); + }); + } + function selectAp(ap) { + if (selectedAp.ssid == ap.ssid) { + return; + } + $$invalidate(2, isApSelected = true); + $$invalidate(3, selectedAp = ap); + } + function backToWizard() { + window.location.href = requestUrl + "/wizard"; + } + onMount(() => { + const apInterval = setInterval(fetchWifiList, AP_FETCH_INTERVAL); + const infoInterval = setInterval(fetchConnectionInfo, INFO_FETCH_INTERVAL); + const probeInterval = setInterval(probeAll, PROBE_INTERVAL); + fetchWifiList(); + fetchConnectionInfo(); + return () => { + clearInterval(apInterval); + clearInterval(infoInterval); + clearInterval(probeInterval); + }; + }); + const click_handler = (probeDetail) => changeHost(probeDetail.url); + const func = (connectionDetail, e) => e.ip == connectionDetail.ip; + const click_handler_1 = (ap) => { + selectAp(ap); + }; + const click_handler_2 = (ap) => { + selectAp(ap); + }; + const click_handler_3 = (ap) => { + selectAp(ap); + }; + const click_handler_4 = (ap) => { + selectAp(ap); + }; + const click_handler_5 = (ap) => { + selectAp(ap); + }; + function modal_showModal_binding(value) { + showRedirectModal = value; + $$invalidate(4, showRedirectModal); + } + function modal_dialog_binding(value) { + redirectDialog = value; + $$invalidate(5, redirectDialog); + } + return [ + aps, + connectionDetails, + isApSelected, + selectedAp, + showRedirectModal, + redirectDialog, + probeDetails, + selectAp, + backToWizard, + click_handler, + func, + click_handler_1, + click_handler_2, + click_handler_3, + click_handler_4, + click_handler_5, + modal_showModal_binding, + modal_dialog_binding + ]; +} +class App extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance, create_fragment, safe_not_equal, {}, null, [-1, -1]); + } +} +new App({ + target: document.getElementById("app") +}); diff --git a/prusa/link/static/wifi/index.html b/prusa/link/static/wifi/index.html new file mode 100644 index 00000000..6f57059a --- /dev/null +++ b/prusa/link/static/wifi/index.html @@ -0,0 +1,3 @@ + + +
            diff --git a/prusa/link/static_cam/1218694688ee15ee97bcded9e1a75cc8.svg b/prusa/link/static_cam/1218694688ee15ee97bcded9e1a75cc8.svg new file mode 100644 index 00000000..5191fb86 --- /dev/null +++ b/prusa/link/static_cam/1218694688ee15ee97bcded9e1a75cc8.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/24c2502c54c43441d0bb4bbc17e10a83.svg b/prusa/link/static_cam/24c2502c54c43441d0bb4bbc17e10a83.svg new file mode 100644 index 00000000..bfdeeb8e --- /dev/null +++ b/prusa/link/static_cam/24c2502c54c43441d0bb4bbc17e10a83.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/24e2e49c87df140cf16aa18b4e261f12.svg b/prusa/link/static_cam/24e2e49c87df140cf16aa18b4e261f12.svg new file mode 100644 index 00000000..e727f287 --- /dev/null +++ b/prusa/link/static_cam/24e2e49c87df140cf16aa18b4e261f12.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/2e842fcb7b83af8e1e0d26afd80f8fd9.svg b/prusa/link/static_cam/2e842fcb7b83af8e1e0d26afd80f8fd9.svg new file mode 100644 index 00000000..09f653bb --- /dev/null +++ b/prusa/link/static_cam/2e842fcb7b83af8e1e0d26afd80f8fd9.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/39e93870e6b8fd4ef2d9ed668f8c1545.svg b/prusa/link/static_cam/39e93870e6b8fd4ef2d9ed668f8c1545.svg new file mode 100644 index 00000000..c4a68c69 --- /dev/null +++ b/prusa/link/static_cam/39e93870e6b8fd4ef2d9ed668f8c1545.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/44b654f4ca724e154a9bc60335e98847.svg b/prusa/link/static_cam/44b654f4ca724e154a9bc60335e98847.svg new file mode 100644 index 00000000..79b3c8b7 --- /dev/null +++ b/prusa/link/static_cam/44b654f4ca724e154a9bc60335e98847.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/53df9c11e268c2390b147239f9ee8796.svg b/prusa/link/static_cam/53df9c11e268c2390b147239f9ee8796.svg new file mode 100644 index 00000000..66972f34 --- /dev/null +++ b/prusa/link/static_cam/53df9c11e268c2390b147239f9ee8796.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/557f3616d5a1b407b59795b8328bb51f.svg b/prusa/link/static_cam/557f3616d5a1b407b59795b8328bb51f.svg new file mode 100644 index 00000000..63657938 --- /dev/null +++ b/prusa/link/static_cam/557f3616d5a1b407b59795b8328bb51f.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/58151992d28dfb34ee417e0ebf6a66b6.svg b/prusa/link/static_cam/58151992d28dfb34ee417e0ebf6a66b6.svg new file mode 100644 index 00000000..c67b01e8 --- /dev/null +++ b/prusa/link/static_cam/58151992d28dfb34ee417e0ebf6a66b6.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/755aa24665769159d2c1134183bae174.svg b/prusa/link/static_cam/755aa24665769159d2c1134183bae174.svg new file mode 100644 index 00000000..817ba09a --- /dev/null +++ b/prusa/link/static_cam/755aa24665769159d2c1134183bae174.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/79e90794ba3b36a64a12414decda0932.svg b/prusa/link/static_cam/79e90794ba3b36a64a12414decda0932.svg new file mode 100644 index 00000000..8d6ae6cb --- /dev/null +++ b/prusa/link/static_cam/79e90794ba3b36a64a12414decda0932.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/8657650f85be23655543d28f58941616.svg b/prusa/link/static_cam/8657650f85be23655543d28f58941616.svg new file mode 100644 index 00000000..d841d6eb --- /dev/null +++ b/prusa/link/static_cam/8657650f85be23655543d28f58941616.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/926f52aea63cfd597b30096bfe4077c6.svg b/prusa/link/static_cam/926f52aea63cfd597b30096bfe4077c6.svg new file mode 100644 index 00000000..58cfdac6 --- /dev/null +++ b/prusa/link/static_cam/926f52aea63cfd597b30096bfe4077c6.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/9332c323b291ba7226ddcdabb0c8e7c4.svg b/prusa/link/static_cam/9332c323b291ba7226ddcdabb0c8e7c4.svg new file mode 100644 index 00000000..33888960 --- /dev/null +++ b/prusa/link/static_cam/9332c323b291ba7226ddcdabb0c8e7c4.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/997c391425907810b4a6e42663d11fd4.svg b/prusa/link/static_cam/997c391425907810b4a6e42663d11fd4.svg new file mode 100644 index 00000000..f491411f --- /dev/null +++ b/prusa/link/static_cam/997c391425907810b4a6e42663d11fd4.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/a443dadfc7e114c74dae6cd64a74db9d.svg b/prusa/link/static_cam/a443dadfc7e114c74dae6cd64a74db9d.svg new file mode 100644 index 00000000..ba263344 --- /dev/null +++ b/prusa/link/static_cam/a443dadfc7e114c74dae6cd64a74db9d.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/b891ace1622f34bac5a2b4edb7adc733.svg b/prusa/link/static_cam/b891ace1622f34bac5a2b4edb7adc733.svg new file mode 100644 index 00000000..8d910806 --- /dev/null +++ b/prusa/link/static_cam/b891ace1622f34bac5a2b4edb7adc733.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/c8a0ca767f73685bbe06863f81e9d3cb.svg b/prusa/link/static_cam/c8a0ca767f73685bbe06863f81e9d3cb.svg new file mode 100644 index 00000000..5f648933 --- /dev/null +++ b/prusa/link/static_cam/c8a0ca767f73685bbe06863f81e9d3cb.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/ccd215a92d0427a21339a8c38e2a40f3.svg b/prusa/link/static_cam/ccd215a92d0427a21339a8c38e2a40f3.svg new file mode 100644 index 00000000..f4a86d02 --- /dev/null +++ b/prusa/link/static_cam/ccd215a92d0427a21339a8c38e2a40f3.svg @@ -0,0 +1 @@ + diff --git a/prusa/link/static_cam/css/bootstrap.connect.css b/prusa/link/static_cam/css/bootstrap.connect.css new file mode 100644 index 00000000..c2405dc1 --- /dev/null +++ b/prusa/link/static_cam/css/bootstrap.connect.css @@ -0,0 +1,148 @@ +a { + color: #fa6831 !important; +} + +.flex-even { + flex: 1; +} + +section { + margin-top: 10px; +} + +#mainmenu { + border-bottom: 1px solid #e0e0e0; + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.nav-link { + font-family: Helvetica, sans-serif; + font-size: 15px; + color: #2a2a2a !important; +} + +.nav-link.disabled { + color: #a0a0a0 !important; +} + +.nav-link:hover { + color: #fa6831 !important; +} + +.nav-tabs { + border-bottom: 1px solid #707070; +} + +.nav-tabs .nav-link { + padding: 0.8em 1.3em 0.7em 1.2em; + text-transform: uppercase; + color: #585858 !important; +} + +.nav-tabs .nav-link:hover { + color: #fa6831 !important; +} + +.nav-tabs .nav-link.active:hover { + color: #585858 !important; +} + +.nav-tabs .nav-link:first-child { + margin-left: 1em; +} + +.nav-tabs .nav-link:last-child { + margin-right: 1em; +} + +.nav-tabs .nav-link { + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.nav-tabs .nav-link:focus, +.nav-tabs .nav-link:hover { + border-color: #e9ecef #e9ecef #707070; +} + +.nav-tabs .nav-item.show .nav-link, +.nav-tabs .nav-link.active { + color: #495057; + background-color: #fff; + border-color: #707070 #707070 #fff +} + +.breadcrumb { + padding: 0 1rem; + margin-bottom: 0.5rem; + background-color: transparent; + border-radius: 0; + font-size: 0.9em; + color: black; +} + +.breadcrumb-item .active { + color: black; + font-family: Helvetica, sans-serif; + font-size: 0.9em; +} + +.breadcrumb-item a { + font-size: 0.9em; + color: #797979 !important; + font-family: Helvetica, sans-serif; +} +.btn { + font-family: Helvetica, sans-serif; + border: 1px solid transparent; + padding: 0.3em 0.75em; + white-space: pre-line; + word-break: break-word; +} + +.btn img { + position: relative; + top: -2px; + padding: 0; +} + +.btn svg.append { + margin-right: 0; + margin-left: 0.25em; +} + +.btn-group .btn { + border-right-width: 0; +} + +.btn-group .btn:last-child { + border-right-width: 1px; +} + +.btn-outline-primary, +.btn-outline-secondary, +.btn-outline-success, +.btn-outline-warning, +.btn-outline-danger, +.btn-outline-info, +.btn-outline-light, +.btn-outline-dark { + border-color: white; + color: white; +} + +.btn-outline-primary:hover, +.btn-outline-secondary:hover, +.btn-outline-success:hover, +.btn-outline-warning:hover, +.btn-outline-danger:hover, +.btn-outline-info:hover, +.btn-outline-light:hover, +.btn-outline-dark:hover { + color: black !important; +} + +.btn-back { + color: #585858 !important; +} diff --git a/prusa/link/static_cam/css/bootstrap.min.css b/prusa/link/static_cam/css/bootstrap.min.css new file mode 100644 index 00000000..27a8e820 --- /dev/null +++ b/prusa/link/static_cam/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 0%;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ diff --git a/prusa/link/static_cam/css/bootstrap.min.css.map b/prusa/link/static_cam/css/bootstrap.min.css.map new file mode 100644 index 00000000..2e8a143c --- /dev/null +++ b/prusa/link/static_cam/css/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","// Do not forget to update getting-started/theming.md!\n:root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

            `-`

            ` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

            `s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

            `s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: -ms-inline-flexbox;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: stretch;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n -ms-flex: 1 1 0%;\n flex: 1 1 0%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: -ms-flexbox;\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n -webkit-transform: translateX(0.75rem);\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n -ms-transition: none;\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n -ms-flex-preferred-size: 100%;\n flex-basis: 100%;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n }\n .card-group > .card {\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n -webkit-column-count: 3;\n -moz-column-count: 3;\n column-count: 3;\n -webkit-column-gap: 1.25rem;\n -moz-column-gap: 1.25rem;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: -ms-flexbox;\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: -ms-flexbox;\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n -webkit-animation: progress-bar-stripes 1s linear infinite;\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n.media {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n}\n\n.media-body {\n -ms-flex: 1;\n flex: 1;\n}\n\n.list-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right-width: 0;\n border-left-width: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:first-child {\n border-top-width: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: -webkit-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n -webkit-transform: translate(0, -50px);\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n -webkit-transform: none;\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n -webkit-transform: scale(1.02);\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: -ms-flexbox;\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: end;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n -ms-touch-action: pan-y;\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: -webkit-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n -webkit-transform: translateX(100%);\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n -webkit-transform: translateX(-100%);\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n -webkit-transform: none;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n -ms-flex: 0 1 auto;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@-webkit-keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n -webkit-animation: spinner-border .75s linear infinite;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n@keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n -webkit-animation: spinner-grow .75s linear infinite;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n .sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 0%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: flex;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right-width: 0;\n border-left-width: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:first-child {\n border-top-width: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled() {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid() {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-blacklist\n// Single side border-radius\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n @each $name, $width in $grid-breakpoints {\n @if ($container-max-width > $width or $breakpoint == $name) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n & > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover() {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover() {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover() {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `

            Printer status

            NA

            Cameras

            NA

            diff --git a/prusa/link/static_cam/js/bootstrap.min.js b/prusa/link/static_cam/js/bootstrap.min.js new file mode 100644 index 00000000..7febeda7 --- /dev/null +++ b/prusa/link/static_cam/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)g(this._element).one(Y.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
            ',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Se,popperConfig:null},Fe="show",Ue="out",We={HIDE:"hide"+Oe,HIDDEN:"hidden"+Oe,SHOW:"show"+Oe,SHOWN:"shown"+Oe,INSERTED:"inserted"+Oe,CLICK:"click"+Oe,FOCUSIN:"focusin"+Oe,FOCUSOUT:"focusout"+Oe,MOUSEENTER:"mouseenter"+Oe,MOUSELEAVE:"mouseleave"+Oe},qe="fade",Me="show",Ke=".tooltip-inner",Qe=".arrow",Be="hover",Ve="focus",Ye="click",ze="manual",Xe=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Me))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(qe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,this._getPopperConfig(a)),g(o).addClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===Ue&&e._leave(null,e)};if(g(this.tip).hasClass(qe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){function e(){n._hoverState!==Fe&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),g(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()}var n=this,i=this.getTipElement(),o=g.Event(this.constructor.Event.HIDE);if(g(this.element).trigger(o),!o.isDefaultPrevented()){if(g(i).removeClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ye]=!1,this._activeTrigger[Ve]=!1,this._activeTrigger[Be]=!1,g(this.tip).hasClass(qe)){var r=_.getTransitionDurationFromElement(i);g(i).one(_.TRANSITION_END,e).emulateTransitionEnd(r)}else e();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Pe+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ke)),this.getTitle()),g(t).removeClass(qe+" "+Me)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=we(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t=t||("function"==typeof this.config.title?this.config.title.call(this.element):this.config.title)},t._getPopperConfig=function(t){var e=this;return l({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Qe},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},{},this.config.popperConfig)},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,{},e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Re[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==ze){var e=t===Be?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Be?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),this._hideModalHandler=function(){i.element&&i.hide()},g(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title")&&"string"==t||(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Ve:Be]=!0),g(e.getTipElement()).hasClass(Me)||e._hoverState===Fe?e._hoverState=Fe:(clearTimeout(e._timeout),e._hoverState=Fe,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Fe&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Ve:Be]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=Ue,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===Ue&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==je.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,{},e,{},"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(Ae,t,this.constructor.DefaultType),t.sanitize&&(t.template=we(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Le);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(qe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ne),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ne,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return xe}},{key:"NAME",get:function(){return Ae}},{key:"DATA_KEY",get:function(){return Ne}},{key:"Event",get:function(){return We}},{key:"EVENT_KEY",get:function(){return Oe}},{key:"DefaultType",get:function(){return He}}]),i}();g.fn[Ae]=Xe._jQueryInterface,g.fn[Ae].Constructor=Xe,g.fn[Ae].noConflict=function(){return g.fn[Ae]=ke,Xe._jQueryInterface};var $e="popover",Ge="bs.popover",Je="."+Ge,Ze=g.fn[$e],tn="bs-popover",en=new RegExp("(^|\\s)"+tn+"\\S+","g"),nn=l({},Xe.Default,{placement:"right",trigger:"click",content:"",template:''}),on=l({},Xe.DefaultType,{content:"(string|element|function)"}),rn="fade",sn="show",an=".popover-header",ln=".popover-body",cn={HIDE:"hide"+Je,HIDDEN:"hidden"+Je,SHOW:"show"+Je,SHOWN:"shown"+Je,INSERTED:"inserted"+Je,CLICK:"click"+Je,FOCUSIN:"focusin"+Je,FOCUSOUT:"focusout"+Je,MOUSEENTER:"mouseenter"+Je,MOUSELEAVE:"mouseleave"+Je},hn=function(t){function i(){return t.apply(this,arguments)||this}!function(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}(i,t);var e=i.prototype;return e.isWithContent=function(){return this.getTitle()||this._getContent()},e.addAttachmentClass=function(t){g(this.getTipElement()).addClass(tn+"-"+t)},e.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},e.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(an),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ln),e),t.removeClass(rn+" "+sn)},e._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},e._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(en);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n}\n\nconst Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n}\n\nconst Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLES : '[data-toggle=\"buttons\"]',\n DATA_TOGGLE : '[data-toggle=\"button\"]',\n DATA_TOGGLES_BUTTONS : '[data-toggle=\"buttons\"] .btn',\n INPUT : 'input:not([type=\"hidden\"])',\n ACTIVE : '.active',\n BUTTON : '.btn'\n}\n\nconst Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLES\n )[0]\n\n if (rootElement) {\n const input = this._element.querySelector(Selector.INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(Selector.ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n } else if (input.type === 'checkbox') {\n if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n }\n } else {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n triggerChangeEvent = false\n }\n\n if (triggerChangeEvent) {\n input.checked = !this._element.classList.contains(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !this._element.classList.contains(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(Selector.INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n }\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(Event.LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(Selector.INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(ClassName.ACTIVE)\n } else {\n button.classList.remove(ClassName.ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(ClassName.ACTIVE)\n } else {\n button.classList.remove(ClassName.ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n POINTERDOWN : `pointerdown${EVENT_KEY}`,\n POINTERUP : `pointerup${EVENT_KEY}`,\n DRAG_START : `dragstart${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item',\n POINTER_EVENT : 'pointer-event'\n}\n\nconst Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n ITEM_IMG : '.carousel-item img',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n}\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, (event) => start(event))\n $(this._element).on(Event.POINTERUP, (event) => end(event))\n\n this._element.classList.add(ClassName.POINTER_EVENT)\n } else {\n $(this._element).on(Event.TOUCHSTART, (event) => start(event))\n $(this._element).on(Event.TOUCHMOVE, (event) => move(event))\n $(this._element).on(Event.TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n}\n\nconst Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n}\n\nconst Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n}\n\nconst Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(ClassName.COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n}\n\nconst Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n}\n\nconst AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n}\n\nconst Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic',\n popperConfig : null\n}\n\nconst DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string',\n popperConfig : '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n .filter((item) => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDE_PREVENTED : `hidePrevented${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SCROLLABLE : 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show',\n STATIC : 'modal-static'\n}\n\nconst Selector = {\n DIALOG : '.modal-dialog',\n MODAL_BODY : '.modal-body',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n $(document).off(Event.FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(Event.HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.defaultPrevented) {\n return\n }\n\n this._element.classList.add(ClassName.STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(ClassName.STATIC)\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(Selector.MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(ClassName.OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach((attr) => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string|function)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)',\n sanitize : 'boolean',\n sanitizeFn : '(null|function)',\n whiteList : 'object',\n popperConfig : '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n}\n\nconst Default = {\n animation : true,\n template : '
            ' +\n '
            ' +\n '
            ',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent',\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist,\n popperConfig : null\n}\n\nconst HoverState = {\n SHOW : 'show',\n OUT : 'out'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n}\n\nconst Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n this._hideModalHandler\n )\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach((dataAttr) => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const popperInstance = popperData.instance\n this.tip = popperInstance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
            ' +\n '
            ' +\n '

            ' +\n '
            '\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset : 10,\n method : 'auto',\n target : ''\n}\n\nconst DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n}\n\nconst Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n}\n\nconst Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n}\n\nconst OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
              and