{
 "cells": [
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Detecting sharing of user accounts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Overview\n",
    "This notebook provides an example of how RelationalAI can be used to detect whether a user account is shared between multiple people.\n",
    "\n",
    "We will analyze a dataset that contains login information from users, together with details on both the device as well as the location from which they are logging into our fictitious application. Our fictitious company does not allow account sharing, our goal is therefore to first understand our users behavioral patterns, as well as to detect using different methods whether fraudulent behavior is being observed on some of these accounts.\n",
    "\n",
    "To see examples that showcase more of RelationalAI's analytics capabilities, check out the other notebooks on the docs site.\n",
    "\n",
    "## Let's get started!\n",
    "\n",
    "If you haven't already done so, begin by installing the RelationalAI Native App in your Snowflake account. See [this page in the RelationalAI documentation](https://relational.ai/docs/get-started/install-native-app) for instructions.\n",
    "\n",
    "Next, [install RelationalAI's Python library into a local Python virtual environment](https://relational.ai/docs/get-started#install-the-relationalai-python-package) and run `rai init` to connect your project to your Snowflake account.\n",
    "\n",
    "This notebook is written with the assumption that you're running it from such a virtual environment. To do that, navigate in your terminal to your project's root directory and run the following commands:\n",
    "\n",
    "```bash\n",
    "source .venv/bin/activate\n",
    "python -m pip install jupyter\n",
    "jupyter lab\n",
    "```\n",
    "\n",
    "*Note: The first command assumes you put your virtual environment in `.venv` as specified in the instructions in the documentation linked above. If you put it somewhere else, adjust the path accordingly.*\n",
    "\n",
    "Next, perform the necessary imports:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import relationalai as rai\n",
    "\n",
    "from relationalai.std.graphs import Graph\n",
    "from relationalai.std import aggregates as agg\n",
    "from relationalai.std import alias, dates, Vars\n",
    "\n",
    "from typing import Tuple\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The first time you run this notebook, you'll need to do a couple data-setup tasks. Those tasks are in the Appendix at the end of the notebook. If no one has run those commands for your account yet, scroll down to that section and follow the instructions there before proceeding."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define Model in RelationalAI\n",
    "Let's define our model object. **Models** represent collections of objects. **Objects**, like Python objects, have **types** and **properties**, which we will define in a bit."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = rai.Model(\"login_sharing\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Referencing Snowflake Data\n",
    "Due to RelationalAI's tight integration with Snowflake, we can refer to data that we are streaming to our RelationalAI schema by simply referring to the source:\\\n",
    "**\\<my_database>.\\<my_schema>.<my_table\\>**.\n",
    "\n",
    "The data for this example consists of a single table called `USER_LOGS`. The table contains `events` pertaining to logins from users, such as their `user_id`, the `timestamp` together with information on the device that was used and the location from where the login took place. \n",
    "\n",
    "We therefore introduce a *type* called `Event` that represents these event objects in our model. We can query all the properties of objects of this type using `Event.known_properties()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['snowflake_id',\n",
       " 'device_id',\n",
       " 'public_ip',\n",
       " 'user_id',\n",
       " 'city',\n",
       " 'device_type',\n",
       " 'timestamp']"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Event = model.Type(\"Event\", source=\"RAI_DEMO.FRAUD_DETECTION.USER_LOGS\")\n",
    "\n",
    "Event.known_properties()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> **Note**. The `snowflake_id` property is the RAI internal identifier of a row in a Snowflake table and can be ignored."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Weaving data into our model\n",
    "Let's create a few more types for objects that are relevant for our use case. \n",
    "We then create two rules:\n",
    "- one where we create instances for each of these types based on the occurrence of their identifier in our event table. At the same time, we set these objects as a property to each event instance, to create a relationship between them.\n",
    "- in the second rule, we define additional properties for the `User` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "User = model.Type(\"User\")\n",
    "Device = model.Type(\"Device\")\n",
    "IPAddress = model.Type(\"IPAddress\")\n",
    "\n",
    "with model.rule():\n",
    "    e = Event()\n",
    "    e.set(\n",
    "        to_user = User.add(id=e.user_id),\n",
    "        to_device = Device.add(id=e.device_id, type=e.device_type),\n",
    "        to_ip_address = IPAddress.add(id=e.public_ip)\n",
    "    )\n",
    "\n",
    "with model.rule():\n",
    "    u = User()\n",
    "    e = Event(to_user = u)\n",
    "    u.has_device.add(e.to_device)\n",
    "    u.has_ip_address.add(e.to_ip_address)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualizing the input data\n",
    "\n",
    "Time to take a closer look at our input data! We'll do this by defining our nodes and edges. But before we do that, let's create a smaller helper function to style our graph, that we will be able to call upon also later in this notebook.\n",
    "\n",
    "We assign different colors to nodes based on the type of the nodes. Notice how you can also configure other attributes such as the size of nodes, or their shape."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "style = {\n",
    "    \"node\": {\n",
    "        \"color\": lambda n : 'firebrick' if n.get('focus') and n['type'] == 'User' else\n",
    "           {'User': 'yellow', 'tablet': 'lightsteelblue', 'desktop': 'steelblue', 'IPAddress': 'grey'}[n['type']],\n",
    "        \"hover\": lambda n: n['type'],\n",
    "        \"size\": lambda n: {'User': 30, 'tablet': 15, 'desktop': 25, 'IPAddress': 15}[n['type']],\n",
    "        \"shape\": lambda n: 'circle' if n['type'] == 'User' else 'rectangle',    },\n",
    "    \"edge\": {\n",
    "        \"color\":'grey',\n",
    "    }\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We then define a graph called `input_graph`, that we want to use to display the usage patterns from our users, in particular patterns such as: which devices they are using and from which IP addresses. Nodes in our graph therefore represent users, devices and IP addresses. We use the properties of users that we defined earlier via a rule as edges of the graph.\n",
    "\n",
    "Note how we use the style that we defined earlier on the graph for visualization purposes. It also sets both the color and the size of each node of the `device` based on its device type (e.g. tablet/desktop)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #iBjXxNK2XIxmSdIuX-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #iBjXxNK2XIxmSdIuX-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .iBjXxNK2XIxmSdIuX-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .iBjXxNK2XIxmSdIuX-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .iBjXxNK2XIxmSdIuX-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #iBjXxNK2XIxmSdIuX-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #iBjXxNK2XIxmSdIuX-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-menu-toggle-button, #iBjXxNK2XIxmSdIuX-details-toggle-button, #iBjXxNK2XIxmSdIuX-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #iBjXxNK2XIxmSdIuX-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #iBjXxNK2XIxmSdIuX-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #iBjXxNK2XIxmSdIuX-svg,\n",
       "    #iBjXxNK2XIxmSdIuX-node-label-rotation,\n",
       "    #iBjXxNK2XIxmSdIuX-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"iBjXxNK2XIxmSdIuX-main-div\">\n",
       "    <div id=\"iBjXxNK2XIxmSdIuX-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"iBjXxNK2XIxmSdIuX-left-div\">\n",
       "      <div id=\"iBjXxNK2XIxmSdIuX-left-inner-div\">\n",
       "        <div id=\"iBjXxNK2XIxmSdIuX-graph-div\"></div>\n",
       "        <div id=\"iBjXxNK2XIxmSdIuX-details-div\">\n",
       "          <div id=\"iBjXxNK2XIxmSdIuX-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"iBjXxNK2XIxmSdIuX-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"iBjXxNK2XIxmSdIuX-right-div\">\n",
       "      <div id=\"iBjXxNK2XIxmSdIuX-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-head\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-body\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <button class=\"iBjXxNK2XIxmSdIuX-button\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <button class=\"iBjXxNK2XIxmSdIuX-button\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <button class=\"iBjXxNK2XIxmSdIuX-button\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"iBjXxNK2XIxmSdIuX-button\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"iBjXxNK2XIxmSdIuX-button\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-head\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-body\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"iBjXxNK2XIxmSdIuX-graph-select-div\">\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <select class=\"iBjXxNK2XIxmSdIuX-select\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <select class=\"iBjXxNK2XIxmSdIuX-select\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <select class=\"iBjXxNK2XIxmSdIuX-select\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iBjXxNK2XIxmSdIuX-select\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "              <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                     id=\"iBjXxNK2XIxmSdIuX-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                     for=\"iBjXxNK2XIxmSdIuX-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iBjXxNK2XIxmSdIuX-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iBjXxNK2XIxmSdIuX-select\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "              <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                     id=\"iBjXxNK2XIxmSdIuX-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                     for=\"iBjXxNK2XIxmSdIuX-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iBjXxNK2XIxmSdIuX-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-head\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-body\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-node-size-factor-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <button class=\"iBjXxNK2XIxmSdIuX-button\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"iBjXxNK2XIxmSdIuX-node-image-meta-control\">\n",
       "          <div class=\"iBjXxNK2XIxmSdIuX-menu-item-head\"\n",
       "               id=\"iBjXxNK2XIxmSdIuX-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"iBjXxNK2XIxmSdIuX-menu-item-body\"\n",
       "               id=\"iBjXxNK2XIxmSdIuX-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "                <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                  <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                         id=\"iBjXxNK2XIxmSdIuX-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                         for=\"iBjXxNK2XIxmSdIuX-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-node-image-size-factor-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-head\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-body\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                    id=\"iBjXxNK2XIxmSdIuX-node-label-size-factor-text\"></span>\n",
       "              <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                     id=\"iBjXxNK2XIxmSdIuX-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iBjXxNK2XIxmSdIuX-node-label-rotation\">\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Angle</span>\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                    id=\"iBjXxNK2XIxmSdIuX-node-label-rotation-text\"></span>\n",
       "              <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                     id=\"iBjXxNK2XIxmSdIuX-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-head\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-body\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                    id=\"iBjXxNK2XIxmSdIuX-edge-size-factor-text\"></span>\n",
       "              <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                     id=\"iBjXxNK2XIxmSdIuX-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Curvature</span>\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                    id=\"iBjXxNK2XIxmSdIuX-edge-curvature-text\"></span>\n",
       "              <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                     id=\"iBjXxNK2XIxmSdIuX-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-head\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-body\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                    id=\"iBjXxNK2XIxmSdIuX-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                     id=\"iBjXxNK2XIxmSdIuX-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iBjXxNK2XIxmSdIuX-edge-label-rotation\">\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Angle</span>\n",
       "              <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-edge-label-rotation-text\"></span>\n",
       "              <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                     id=\"iBjXxNK2XIxmSdIuX-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-head\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"iBjXxNK2XIxmSdIuX-menu-item-body\"\n",
       "             id=\"iBjXxNK2XIxmSdIuX-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div class=\"iBjXxNK2XIxmSdIuX-labeled-input\">\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-checkbox\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iBjXxNK2XIxmSdIuX-label\"\n",
       "                       for=\"iBjXxNK2XIxmSdIuX-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"iBjXxNK2XIxmSdIuX-select\"\n",
       "                        id=\"iBjXxNK2XIxmSdIuX-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"iBjXxNK2XIxmSdIuX-menu-subitem-body\">\n",
       "              <div id=\"iBjXxNK2XIxmSdIuX-gravitational-constant-div\">\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-gravitational-constant-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"iBjXxNK2XIxmSdIuX-spring-length-div\">\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Spring length</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-spring-length-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"iBjXxNK2XIxmSdIuX-spring-constant-div\">\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-spring-constant-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iBjXxNK2XIxmSdIuX-avoid-overlap-div\">\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-avoid-overlap-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iBjXxNK2XIxmSdIuX-central-gravity-div\">\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"iBjXxNK2XIxmSdIuX-slider-text-right\"\n",
       "                      id=\"iBjXxNK2XIxmSdIuX-central-gravity-text\"></span>\n",
       "                <input class=\"iBjXxNK2XIxmSdIuX-slider\"\n",
       "                       id=\"iBjXxNK2XIxmSdIuX-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"black\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"grey\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"jsx1A3DXEJWW5Y5564P9Aw\": {\"label\": \"67.148.79.79\", \"metadata\": {\"label\": \"67.148.79.79\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"5hhckeyKgj5q0JtYuTfRBg\": {\"label\": \"travelling_salesman\", \"metadata\": {\"label\": \"travelling_salesman\", \"type\": \"User\", \"color\": \"yellow\", \"hover\": \"User\", \"size\": 30, \"shape\": \"circle\"}}, \"dhGeSwmS70ww/pr5dqjmBw\": {\"label\": \"233.189.189.48\", \"metadata\": {\"label\": \"233.189.189.48\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"tKAba6bZdakYBQKYW2MHLw\": {\"label\": \"171.231.231.97\", \"metadata\": {\"label\": \"171.231.231.97\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"TuUGzjksY3QRq3sjLjlWSw\": {\"label\": \"99.31.19.07\", \"metadata\": {\"label\": \"99.31.19.07\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"l9gD4g4uEfCMyCrX8UtHTw\": {\"label\": \"franks macbook\", \"metadata\": {\"label\": \"franks macbook\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"IKJI/z4C9BcJbxmNORhLVw\": {\"label\": \"151.239.231.47\", \"metadata\": {\"label\": \"151.239.231.47\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"iLpO5GFJhG9BngGB4f/3XQ\": {\"label\": \"ts imac\", \"metadata\": {\"label\": \"ts imac\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"SPeR7dKM8E2Z4dFYEsAMYA\": {\"label\": \"annys ipad\", \"metadata\": {\"label\": \"annys ipad\", \"type\": \"tablet\", \"color\": \"lightsteelblue\", \"hover\": \"tablet\", \"size\": 15, \"shape\": \"rectangle\"}}, \"xG2IIb7LS4exqOoPOMwUZQ\": {\"label\": \"69.37.129.87\", \"metadata\": {\"label\": \"69.37.129.87\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"5djC0Lm01AKPugxC88TSbA\": {\"label\": \"171.167.22.118\", \"metadata\": {\"label\": \"171.167.22.118\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"iJ0NgAVBcEg7NEvDYr6obg\": {\"label\": \"catch_me_if_you_can\", \"metadata\": {\"label\": \"catch_me_if_you_can\", \"type\": \"User\", \"color\": \"yellow\", \"hover\": \"User\", \"size\": 30, \"shape\": \"circle\"}}, \"vxnpq8JmdRhlGuj/N5nkdA\": {\"label\": \"judys_ipad\", \"metadata\": {\"label\": \"judys_ipad\", \"type\": \"tablet\", \"color\": \"lightsteelblue\", \"hover\": \"tablet\", \"size\": 15, \"shape\": \"rectangle\"}}, \"y7vLG72sLxfAua3iYCcAjw\": {\"label\": \"marys computer\", \"metadata\": {\"label\": \"marys computer\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"qJX6RBDda6h0jl8bJvLdnA\": {\"label\": \"aunt_judy\", \"metadata\": {\"label\": \"aunt_judy\", \"type\": \"User\", \"color\": \"yellow\", \"hover\": \"User\", \"size\": 30, \"shape\": \"circle\"}}, \"SIGu9tgGEfE3IUZNS73JnQ\": {\"label\": \"202.17.239.114\", \"metadata\": {\"label\": \"202.17.239.114\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"nPd3PJugC/q7W8Qaz1eRpA\": {\"label\": \"38.45.1.249\", \"metadata\": {\"label\": \"38.45.1.249\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"fq5msBGD6DlgXyS+asbPpA\": {\"label\": \"120.35.6.505\", \"metadata\": {\"label\": \"120.35.6.505\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"pf4upx5/FSmxfDGAzaVEsA\": {\"label\": \"100.33.3.205\", \"metadata\": {\"label\": \"100.33.3.205\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"eB+Rs8dLGwkU3uT7fIBlvw\": {\"label\": \"168.191.205.135\", \"metadata\": {\"label\": \"168.191.205.135\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"CmwUslJD56hfmz6sRpwVww\": {\"label\": \"228.17.231.201\", \"metadata\": {\"label\": \"228.17.231.201\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"IcRyuCqKgkW0hEi3RELz1A\": {\"label\": \"33.25.1.249\", \"metadata\": {\"label\": \"33.25.1.249\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"NvIqgxaat+VKDkDNCKGF2A\": {\"label\": \"tommys chromebook\", \"metadata\": {\"label\": \"tommys chromebook\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"N+2arbLleyRnT6m/6U1c2w\": {\"label\": \"ts ipad\", \"metadata\": {\"label\": \"ts ipad\", \"type\": \"tablet\", \"color\": \"lightsteelblue\", \"hover\": \"tablet\", \"size\": 15, \"shape\": \"rectangle\"}}, \"ryUjHD4svbydpBGHZAg24g\": {\"label\": \"dannys laptop\", \"metadata\": {\"label\": \"dannys laptop\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"6hQ+oUtE3YbP9T6YgTrO8w\": {\"label\": \"146.157.47.128\", \"metadata\": {\"label\": \"146.157.47.128\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}}, \"edges\": [{\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"jsx1A3DXEJWW5Y5564P9Aw\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"dhGeSwmS70ww/pr5dqjmBw\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"IKJI/z4C9BcJbxmNORhLVw\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"iLpO5GFJhG9BngGB4f/3XQ\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"5djC0Lm01AKPugxC88TSbA\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"SIGu9tgGEfE3IUZNS73JnQ\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"eB+Rs8dLGwkU3uT7fIBlvw\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"CmwUslJD56hfmz6sRpwVww\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"IcRyuCqKgkW0hEi3RELz1A\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"N+2arbLleyRnT6m/6U1c2w\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"6hQ+oUtE3YbP9T6YgTrO8w\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"tKAba6bZdakYBQKYW2MHLw\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"TuUGzjksY3QRq3sjLjlWSw\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"l9gD4g4uEfCMyCrX8UtHTw\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"SPeR7dKM8E2Z4dFYEsAMYA\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"y7vLG72sLxfAua3iYCcAjw\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"nPd3PJugC/q7W8Qaz1eRpA\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"fq5msBGD6DlgXyS+asbPpA\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"pf4upx5/FSmxfDGAzaVEsA\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"NvIqgxaat+VKDkDNCKGF2A\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"ryUjHD4svbydpBGHZAg24g\", \"metadata\": {}}, {\"source\": \"qJX6RBDda6h0jl8bJvLdnA\", \"target\": \"xG2IIb7LS4exqOoPOMwUZQ\", \"metadata\": {}}, {\"source\": \"qJX6RBDda6h0jl8bJvLdnA\", \"target\": \"vxnpq8JmdRhlGuj/N5nkdA\", \"metadata\": {}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.5;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 0.5;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-left-div\"),\n",
       "          rightContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-right-div\"),\n",
       "          graphContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-details-div\"),\n",
       "          detailsHead: document.getElementById(\"iBjXxNK2XIxmSdIuX-details-head\"),\n",
       "          detailsBody: document.getElementById(\"iBjXxNK2XIxmSdIuX-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"iBjXxNK2XIxmSdIuX-data-head\"),\n",
       "          dataBody: document.getElementById(\"iBjXxNK2XIxmSdIuX-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"iBjXxNK2XIxmSdIuX-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"iBjXxNK2XIxmSdIuX-general-head\"),\n",
       "          generalBody: document.getElementById(\"iBjXxNK2XIxmSdIuX-general-body\"),\n",
       "          resetButton: document.getElementById(\"iBjXxNK2XIxmSdIuX-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"iBjXxNK2XIxmSdIuX-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"iBjXxNK2XIxmSdIuX-svg\"),\n",
       "          pngExportButton: document.getElementById(\"iBjXxNK2XIxmSdIuX-png\"),\n",
       "          jpgExportButton: document.getElementById(\"iBjXxNK2XIxmSdIuX-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-head\"),\n",
       "          nodeBody: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"iBjXxNK2XIxmSdIuX-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"iBjXxNK2XIxmSdIuX-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"iBjXxNK2XIxmSdIuX-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"iBjXxNK2XIxmSdIuX-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"iBjXxNK2XIxmSdIuX-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"iBjXxNK2XIxmSdIuX-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"iBjXxNK2XIxmSdIuX-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"iBjXxNK2XIxmSdIuX-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"iBjXxNK2XIxmSdIuX-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"iBjXxNK2XIxmSdIuX-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"iBjXxNK2XIxmSdIuX-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"iBjXxNK2XIxmSdIuX-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"iBjXxNK2XIxmSdIuX-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"iBjXxNK2XIxmSdIuX-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iBjXxNK2XIxmSdIuX-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iBjXxNK2XIxmSdIuX-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "input_graph = Graph(model)\n",
    "Node, Edge = input_graph.Node, input_graph.Edge\n",
    "\n",
    "Node.extend(User, label=User.id, type=\"User\")\n",
    "Node.extend(Device, label=Device.id, type=Device.type)\n",
    "Node.extend(IPAddress, label=IPAddress.id, type=\"IPAddress\")\n",
    "\n",
    "Edge.extend(User.has_device)\n",
    "Edge.extend(User.has_ip_address)\n",
    "\n",
    "input_graph.visualize(three = False, node_label_size_factor = 1.5, edge_size_factor = 0.5, style = style).display(inline = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "User `aunt_judy` only uses 1 device, and it seems that she's always using our application from the same IP address.\n",
    "\n",
    "From a first look, the usage pattern from user `travelling_salesman` seems quite similar to the usage pattern of user `catch_me_if_you_can`. Let's see how this might change if we extend our data model a little bit."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Identifying suspicious user activity\n",
    "Let's create a rule that adds a property called `has_ip_address` to each device. This allows us to track from which IP addresses each device logged in."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "with model.rule():\n",
    "    d = Device()\n",
    "    e = Event(to_device = d)\n",
    "    d.has_ip_address.add(e.to_ip_address)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's see how our graph changes, if we use this new property as an edge between devices and IP addresses. We also add an edge between users and devices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #ikB9eDUJB4VQ0ClnA-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #ikB9eDUJB4VQ0ClnA-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .ikB9eDUJB4VQ0ClnA-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .ikB9eDUJB4VQ0ClnA-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .ikB9eDUJB4VQ0ClnA-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #ikB9eDUJB4VQ0ClnA-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #ikB9eDUJB4VQ0ClnA-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-menu-toggle-button, #ikB9eDUJB4VQ0ClnA-details-toggle-button, #ikB9eDUJB4VQ0ClnA-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #ikB9eDUJB4VQ0ClnA-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #ikB9eDUJB4VQ0ClnA-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #ikB9eDUJB4VQ0ClnA-svg,\n",
       "    #ikB9eDUJB4VQ0ClnA-node-label-rotation,\n",
       "    #ikB9eDUJB4VQ0ClnA-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"ikB9eDUJB4VQ0ClnA-main-div\">\n",
       "    <div id=\"ikB9eDUJB4VQ0ClnA-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"ikB9eDUJB4VQ0ClnA-left-div\">\n",
       "      <div id=\"ikB9eDUJB4VQ0ClnA-left-inner-div\">\n",
       "        <div id=\"ikB9eDUJB4VQ0ClnA-graph-div\"></div>\n",
       "        <div id=\"ikB9eDUJB4VQ0ClnA-details-div\">\n",
       "          <div id=\"ikB9eDUJB4VQ0ClnA-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"ikB9eDUJB4VQ0ClnA-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"ikB9eDUJB4VQ0ClnA-right-div\">\n",
       "      <div id=\"ikB9eDUJB4VQ0ClnA-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-head\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-body\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <button class=\"ikB9eDUJB4VQ0ClnA-button\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <button class=\"ikB9eDUJB4VQ0ClnA-button\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <button class=\"ikB9eDUJB4VQ0ClnA-button\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"ikB9eDUJB4VQ0ClnA-button\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"ikB9eDUJB4VQ0ClnA-button\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-head\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-body\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"ikB9eDUJB4VQ0ClnA-graph-select-div\">\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <select class=\"ikB9eDUJB4VQ0ClnA-select\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <select class=\"ikB9eDUJB4VQ0ClnA-select\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <select class=\"ikB9eDUJB4VQ0ClnA-select\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"ikB9eDUJB4VQ0ClnA-select\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "              <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                     id=\"ikB9eDUJB4VQ0ClnA-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                     for=\"ikB9eDUJB4VQ0ClnA-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"ikB9eDUJB4VQ0ClnA-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Minimum</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Maximum</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"ikB9eDUJB4VQ0ClnA-select\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "              <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                     id=\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                     for=\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"ikB9eDUJB4VQ0ClnA-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Minimum</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Maximum</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-head\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-body\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-node-size-factor-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <button class=\"ikB9eDUJB4VQ0ClnA-button\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"ikB9eDUJB4VQ0ClnA-node-image-meta-control\">\n",
       "          <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-head\"\n",
       "               id=\"ikB9eDUJB4VQ0ClnA-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-body\"\n",
       "               id=\"ikB9eDUJB4VQ0ClnA-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "                <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                  <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                         id=\"ikB9eDUJB4VQ0ClnA-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                         for=\"ikB9eDUJB4VQ0ClnA-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-node-image-size-factor-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-head\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-body\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                    id=\"ikB9eDUJB4VQ0ClnA-node-label-size-factor-text\"></span>\n",
       "              <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                     id=\"ikB9eDUJB4VQ0ClnA-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"ikB9eDUJB4VQ0ClnA-node-label-rotation\">\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Angle</span>\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                    id=\"ikB9eDUJB4VQ0ClnA-node-label-rotation-text\"></span>\n",
       "              <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                     id=\"ikB9eDUJB4VQ0ClnA-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-head\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-body\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                    id=\"ikB9eDUJB4VQ0ClnA-edge-size-factor-text\"></span>\n",
       "              <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                     id=\"ikB9eDUJB4VQ0ClnA-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Curvature</span>\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                    id=\"ikB9eDUJB4VQ0ClnA-edge-curvature-text\"></span>\n",
       "              <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                     id=\"ikB9eDUJB4VQ0ClnA-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-head\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-body\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                    id=\"ikB9eDUJB4VQ0ClnA-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                     id=\"ikB9eDUJB4VQ0ClnA-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"ikB9eDUJB4VQ0ClnA-edge-label-rotation\">\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Angle</span>\n",
       "              <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-edge-label-rotation-text\"></span>\n",
       "              <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                     id=\"ikB9eDUJB4VQ0ClnA-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-head\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"ikB9eDUJB4VQ0ClnA-menu-item-body\"\n",
       "             id=\"ikB9eDUJB4VQ0ClnA-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div class=\"ikB9eDUJB4VQ0ClnA-labeled-input\">\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-checkbox\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"ikB9eDUJB4VQ0ClnA-label\"\n",
       "                       for=\"ikB9eDUJB4VQ0ClnA-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"ikB9eDUJB4VQ0ClnA-select\"\n",
       "                        id=\"ikB9eDUJB4VQ0ClnA-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"ikB9eDUJB4VQ0ClnA-menu-subitem-body\">\n",
       "              <div id=\"ikB9eDUJB4VQ0ClnA-gravitational-constant-div\">\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-gravitational-constant-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"ikB9eDUJB4VQ0ClnA-spring-length-div\">\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Spring length</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-spring-length-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"ikB9eDUJB4VQ0ClnA-spring-constant-div\">\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-spring-constant-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"ikB9eDUJB4VQ0ClnA-avoid-overlap-div\">\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-avoid-overlap-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"ikB9eDUJB4VQ0ClnA-central-gravity-div\">\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"ikB9eDUJB4VQ0ClnA-slider-text-right\"\n",
       "                      id=\"ikB9eDUJB4VQ0ClnA-central-gravity-text\"></span>\n",
       "                <input class=\"ikB9eDUJB4VQ0ClnA-slider\"\n",
       "                       id=\"ikB9eDUJB4VQ0ClnA-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"black\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"grey\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"jsx1A3DXEJWW5Y5564P9Aw\": {\"label\": \"67.148.79.79\", \"metadata\": {\"label\": \"67.148.79.79\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"5hhckeyKgj5q0JtYuTfRBg\": {\"label\": \"travelling_salesman\", \"metadata\": {\"label\": \"travelling_salesman\", \"type\": \"User\", \"color\": \"yellow\", \"hover\": \"User\", \"size\": 30, \"shape\": \"circle\"}}, \"dhGeSwmS70ww/pr5dqjmBw\": {\"label\": \"233.189.189.48\", \"metadata\": {\"label\": \"233.189.189.48\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"tKAba6bZdakYBQKYW2MHLw\": {\"label\": \"171.231.231.97\", \"metadata\": {\"label\": \"171.231.231.97\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"TuUGzjksY3QRq3sjLjlWSw\": {\"label\": \"99.31.19.07\", \"metadata\": {\"label\": \"99.31.19.07\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"l9gD4g4uEfCMyCrX8UtHTw\": {\"label\": \"franks macbook\", \"metadata\": {\"label\": \"franks macbook\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"IKJI/z4C9BcJbxmNORhLVw\": {\"label\": \"151.239.231.47\", \"metadata\": {\"label\": \"151.239.231.47\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"iLpO5GFJhG9BngGB4f/3XQ\": {\"label\": \"ts imac\", \"metadata\": {\"label\": \"ts imac\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"SPeR7dKM8E2Z4dFYEsAMYA\": {\"label\": \"annys ipad\", \"metadata\": {\"label\": \"annys ipad\", \"type\": \"tablet\", \"color\": \"lightsteelblue\", \"hover\": \"tablet\", \"size\": 15, \"shape\": \"rectangle\"}}, \"xG2IIb7LS4exqOoPOMwUZQ\": {\"label\": \"69.37.129.87\", \"metadata\": {\"label\": \"69.37.129.87\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"5djC0Lm01AKPugxC88TSbA\": {\"label\": \"171.167.22.118\", \"metadata\": {\"label\": \"171.167.22.118\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"iJ0NgAVBcEg7NEvDYr6obg\": {\"label\": \"catch_me_if_you_can\", \"metadata\": {\"label\": \"catch_me_if_you_can\", \"type\": \"User\", \"color\": \"yellow\", \"hover\": \"User\", \"size\": 30, \"shape\": \"circle\"}}, \"vxnpq8JmdRhlGuj/N5nkdA\": {\"label\": \"judys_ipad\", \"metadata\": {\"label\": \"judys_ipad\", \"type\": \"tablet\", \"color\": \"lightsteelblue\", \"hover\": \"tablet\", \"size\": 15, \"shape\": \"rectangle\"}}, \"y7vLG72sLxfAua3iYCcAjw\": {\"label\": \"marys computer\", \"metadata\": {\"label\": \"marys computer\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"qJX6RBDda6h0jl8bJvLdnA\": {\"label\": \"aunt_judy\", \"metadata\": {\"label\": \"aunt_judy\", \"type\": \"User\", \"color\": \"yellow\", \"hover\": \"User\", \"size\": 30, \"shape\": \"circle\"}}, \"SIGu9tgGEfE3IUZNS73JnQ\": {\"label\": \"202.17.239.114\", \"metadata\": {\"label\": \"202.17.239.114\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"nPd3PJugC/q7W8Qaz1eRpA\": {\"label\": \"38.45.1.249\", \"metadata\": {\"label\": \"38.45.1.249\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"fq5msBGD6DlgXyS+asbPpA\": {\"label\": \"120.35.6.505\", \"metadata\": {\"label\": \"120.35.6.505\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"pf4upx5/FSmxfDGAzaVEsA\": {\"label\": \"100.33.3.205\", \"metadata\": {\"label\": \"100.33.3.205\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"eB+Rs8dLGwkU3uT7fIBlvw\": {\"label\": \"168.191.205.135\", \"metadata\": {\"label\": \"168.191.205.135\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"CmwUslJD56hfmz6sRpwVww\": {\"label\": \"228.17.231.201\", \"metadata\": {\"label\": \"228.17.231.201\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"IcRyuCqKgkW0hEi3RELz1A\": {\"label\": \"33.25.1.249\", \"metadata\": {\"label\": \"33.25.1.249\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}, \"NvIqgxaat+VKDkDNCKGF2A\": {\"label\": \"tommys chromebook\", \"metadata\": {\"label\": \"tommys chromebook\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"N+2arbLleyRnT6m/6U1c2w\": {\"label\": \"ts ipad\", \"metadata\": {\"label\": \"ts ipad\", \"type\": \"tablet\", \"color\": \"lightsteelblue\", \"hover\": \"tablet\", \"size\": 15, \"shape\": \"rectangle\"}}, \"ryUjHD4svbydpBGHZAg24g\": {\"label\": \"dannys laptop\", \"metadata\": {\"label\": \"dannys laptop\", \"type\": \"desktop\", \"color\": \"steelblue\", \"hover\": \"desktop\", \"size\": 25, \"shape\": \"rectangle\"}}, \"6hQ+oUtE3YbP9T6YgTrO8w\": {\"label\": \"146.157.47.128\", \"metadata\": {\"label\": \"146.157.47.128\", \"type\": \"IPAddress\", \"color\": \"grey\", \"hover\": \"IPAddress\", \"size\": 15, \"shape\": \"rectangle\"}}}, \"edges\": [{\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"iLpO5GFJhG9BngGB4f/3XQ\", \"metadata\": {}}, {\"source\": \"5hhckeyKgj5q0JtYuTfRBg\", \"target\": \"N+2arbLleyRnT6m/6U1c2w\", \"metadata\": {}}, {\"source\": \"l9gD4g4uEfCMyCrX8UtHTw\", \"target\": \"TuUGzjksY3QRq3sjLjlWSw\", \"metadata\": {}}, {\"source\": \"iLpO5GFJhG9BngGB4f/3XQ\", \"target\": \"eB+Rs8dLGwkU3uT7fIBlvw\", \"metadata\": {}}, {\"source\": \"SPeR7dKM8E2Z4dFYEsAMYA\", \"target\": \"tKAba6bZdakYBQKYW2MHLw\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"l9gD4g4uEfCMyCrX8UtHTw\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"SPeR7dKM8E2Z4dFYEsAMYA\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"y7vLG72sLxfAua3iYCcAjw\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"NvIqgxaat+VKDkDNCKGF2A\", \"metadata\": {}}, {\"source\": \"iJ0NgAVBcEg7NEvDYr6obg\", \"target\": \"ryUjHD4svbydpBGHZAg24g\", \"metadata\": {}}, {\"source\": \"vxnpq8JmdRhlGuj/N5nkdA\", \"target\": \"xG2IIb7LS4exqOoPOMwUZQ\", \"metadata\": {}}, {\"source\": \"y7vLG72sLxfAua3iYCcAjw\", \"target\": \"pf4upx5/FSmxfDGAzaVEsA\", \"metadata\": {}}, {\"source\": \"qJX6RBDda6h0jl8bJvLdnA\", \"target\": \"vxnpq8JmdRhlGuj/N5nkdA\", \"metadata\": {}}, {\"source\": \"NvIqgxaat+VKDkDNCKGF2A\", \"target\": \"fq5msBGD6DlgXyS+asbPpA\", \"metadata\": {}}, {\"source\": \"N+2arbLleyRnT6m/6U1c2w\", \"target\": \"jsx1A3DXEJWW5Y5564P9Aw\", \"metadata\": {}}, {\"source\": \"N+2arbLleyRnT6m/6U1c2w\", \"target\": \"dhGeSwmS70ww/pr5dqjmBw\", \"metadata\": {}}, {\"source\": \"N+2arbLleyRnT6m/6U1c2w\", \"target\": \"IKJI/z4C9BcJbxmNORhLVw\", \"metadata\": {}}, {\"source\": \"N+2arbLleyRnT6m/6U1c2w\", \"target\": \"5djC0Lm01AKPugxC88TSbA\", \"metadata\": {}}, {\"source\": \"N+2arbLleyRnT6m/6U1c2w\", \"target\": \"SIGu9tgGEfE3IUZNS73JnQ\", \"metadata\": {}}, {\"source\": \"N+2arbLleyRnT6m/6U1c2w\", \"target\": \"eB+Rs8dLGwkU3uT7fIBlvw\", \"metadata\": {}}, {\"source\": \"N+2arbLleyRnT6m/6U1c2w\", \"target\": \"CmwUslJD56hfmz6sRpwVww\", \"metadata\": {}}, {\"source\": \"N+2arbLleyRnT6m/6U1c2w\", \"target\": \"IcRyuCqKgkW0hEi3RELz1A\", \"metadata\": {}}, {\"source\": \"N+2arbLleyRnT6m/6U1c2w\", \"target\": \"6hQ+oUtE3YbP9T6YgTrO8w\", \"metadata\": {}}, {\"source\": \"ryUjHD4svbydpBGHZAg24g\", \"target\": \"nPd3PJugC/q7W8Qaz1eRpA\", \"metadata\": {}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.5;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 0.5;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-left-div\"),\n",
       "          rightContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-right-div\"),\n",
       "          graphContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-details-div\"),\n",
       "          detailsHead: document.getElementById(\"ikB9eDUJB4VQ0ClnA-details-head\"),\n",
       "          detailsBody: document.getElementById(\"ikB9eDUJB4VQ0ClnA-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"ikB9eDUJB4VQ0ClnA-data-head\"),\n",
       "          dataBody: document.getElementById(\"ikB9eDUJB4VQ0ClnA-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"ikB9eDUJB4VQ0ClnA-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"ikB9eDUJB4VQ0ClnA-general-head\"),\n",
       "          generalBody: document.getElementById(\"ikB9eDUJB4VQ0ClnA-general-body\"),\n",
       "          resetButton: document.getElementById(\"ikB9eDUJB4VQ0ClnA-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"ikB9eDUJB4VQ0ClnA-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"ikB9eDUJB4VQ0ClnA-svg\"),\n",
       "          pngExportButton: document.getElementById(\"ikB9eDUJB4VQ0ClnA-png\"),\n",
       "          jpgExportButton: document.getElementById(\"ikB9eDUJB4VQ0ClnA-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-head\"),\n",
       "          nodeBody: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"ikB9eDUJB4VQ0ClnA-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"ikB9eDUJB4VQ0ClnA-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"ikB9eDUJB4VQ0ClnA-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"ikB9eDUJB4VQ0ClnA-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"ikB9eDUJB4VQ0ClnA-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"ikB9eDUJB4VQ0ClnA-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"ikB9eDUJB4VQ0ClnA-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"ikB9eDUJB4VQ0ClnA-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"ikB9eDUJB4VQ0ClnA-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"ikB9eDUJB4VQ0ClnA-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"ikB9eDUJB4VQ0ClnA-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"ikB9eDUJB4VQ0ClnA-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "by_device_graph = Graph(model)\n",
    "Node, Edge = by_device_graph.Node, by_device_graph.Edge\n",
    "\n",
    "Node.extend(User, label=User.id, type=\"User\")\n",
    "Node.extend(Device, label=Device.id, type=Device.type)\n",
    "Node.extend(IPAddress, label=IPAddress.id, type=\"IPAddress\")\n",
    "\n",
    "Edge.extend(User.has_device)\n",
    "Edge.extend(Device.has_ip_address)\n",
    "\n",
    "by_device_graph.visualize(three = False, node_label_size_factor = 1.5, edge_size_factor = 0.5, style = style).display(inline = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> **Note**. Can you spot how different the usage pattern between the users is? Does anything look suspicious to you? For instance, user `catch_me_if_you_can` seems to use different IP addresses for each of the devices. User `travelling_salesman` on the other hand only has 2 devices. Both devices have been used at one IP address, which most likely is the home (or work) address of that user. Additionally, this user is using one of their devices in many different locations. This could possibly be, because the user is using our application while on the road, e.g. visiting clients. \n",
    "\n",
    "We can run a few queries to help us understand even better what might be going on. For instance, let's query for each user on how many different devices they used our applications, as well as from how many different IP addresses."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>user</th>\n",
       "      <th>nr.devices</th>\n",
       "      <th>nr. ip addresses</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>aunt_judy</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>travelling_salesman</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x127c96850>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    u = User()\n",
    "    c_d = agg.count(u.has_device, per = [u])\n",
    "    c_ip = agg.count(u.has_ip_address, per = [u])\n",
    "    res = select(alias(u.id,\"user\"), alias(c_d,\"nr.devices\"), alias(c_ip,\"nr. ip addresses\"))\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> **Note**. User `catch_me_if_you_can` uses the largest number of devices, `travelling_salesman` on the other hand is logging in frequently from different IP addresses.\n",
    "\n",
    "Let's run one more query: given that we know the type of each device, let's count how many devices, grouped by device type, each user has.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>user</th>\n",
       "      <th>type</th>\n",
       "      <th>nr. devices</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>aunt_judy</td>\n",
       "      <td>tablet</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>desktop</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>tablet</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>travelling_salesman</td>\n",
       "      <td>desktop</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>travelling_salesman</td>\n",
       "      <td>tablet</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x127c70710>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    d = Device()\n",
    "    u = User(has_device = d)\n",
    "    c_d = agg.count(d, per = [u, d.type])\n",
    "    res = select.distinct(alias(u.id,\"user\"), d.type, alias(c_d, \"nr. devices\"))\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> **Note**. While it's possible to use our application from different devices, and it's also conceivable that someone has 2 devices over time of the same type (e.g. when you replace your device with a newer one), the behavior of user `catch_me_if_you_can` looks suspicious though with logins from 4 different desktops. Furthermore, this user also uses a different IP address on each of the devices.\n",
    "\n",
    "What we therefore can do as a next step is to create a rule that tags each user that shows a suspicious behavior as a `SuspiciousUser`. Based on our observations, we could state that a user that uses our application on more than 2 different devices of the same type should be marked as suspicious."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x127ccfcd0>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "SuspiciousUser = model.Type(\"SuspiciousUser\")\n",
    "\n",
    "with model.rule():\n",
    "    d = Device()\n",
    "    u = User(has_device = d)\n",
    "    c_d = agg.count(d, per = [u, d.type])\n",
    "    c_d > 2\n",
    "    u.set(SuspiciousUser)\n",
    "\n",
    "with model.query() as select:\n",
    "    u = SuspiciousUser()\n",
    "    res = select(u.id)\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Confirming Fraudulent Activity\n",
    "Now that we have identified a user with suspicious activity, let's see if we can confirm that there is indeed some fraudulent behavior going on. \n",
    "\n",
    "One way to do this would be to check whether we can find overlapping events from the same user that took place in 2 different locations. Unfortunately, we only track user log ins and not how long a user was actually using our application. We can make an assumption though that there is most likely fraudulent activity in play if a user logs in within a certain time interval, let's say 20 minutes, from two different cities.\n",
    "\n",
    "### Step 1 - Derive *next event*\n",
    "Let's start by creating an ordered sequence of events, grouped by user, and derive the `has_next_event` property for each event of a suspicious user. We then query for each suspicious user the sorted even sequence, from which city the log in took place, as well as the timestamp and the city from the next event. If you look closely, you might spot some irregularities!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>id</th>\n",
       "      <th>rank</th>\n",
       "      <th>timestamp</th>\n",
       "      <th>city</th>\n",
       "      <th>timestamp next event</th>\n",
       "      <th>city next event</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>1</td>\n",
       "      <td>2024-06-02 19:12:10</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>2024-06-06 16:36:27</td>\n",
       "      <td>New York</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>2</td>\n",
       "      <td>2024-06-06 16:36:27</td>\n",
       "      <td>New York</td>\n",
       "      <td>2024-06-14 14:10:29</td>\n",
       "      <td>Atlanta</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>3</td>\n",
       "      <td>2024-06-14 14:10:29</td>\n",
       "      <td>Atlanta</td>\n",
       "      <td>2024-06-14 14:20:29</td>\n",
       "      <td>Atlanta</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>4</td>\n",
       "      <td>2024-06-14 14:20:29</td>\n",
       "      <td>Atlanta</td>\n",
       "      <td>2024-06-14 14:38:29</td>\n",
       "      <td>Los Angeles</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>5</td>\n",
       "      <td>2024-06-14 14:38:29</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>2024-06-14 14:50:29</td>\n",
       "      <td>New York</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>6</td>\n",
       "      <td>2024-06-14 14:50:29</td>\n",
       "      <td>New York</td>\n",
       "      <td>2024-06-17 05:54:51</td>\n",
       "      <td>New York</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>7</td>\n",
       "      <td>2024-06-17 05:54:51</td>\n",
       "      <td>New York</td>\n",
       "      <td>2024-06-17 09:26:24</td>\n",
       "      <td>Atlanta</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>8</td>\n",
       "      <td>2024-06-17 09:26:24</td>\n",
       "      <td>Atlanta</td>\n",
       "      <td>2024-06-17 09:33:24</td>\n",
       "      <td>Atlanta</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>9</td>\n",
       "      <td>2024-06-17 09:33:24</td>\n",
       "      <td>Atlanta</td>\n",
       "      <td>2024-06-17 09:47:24</td>\n",
       "      <td>New York</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>10</td>\n",
       "      <td>2024-06-17 09:47:24</td>\n",
       "      <td>New York</td>\n",
       "      <td>2024-06-17 11:22:24</td>\n",
       "      <td>Los Angeles</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>11</td>\n",
       "      <td>2024-06-17 11:22:24</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>2024-06-17 11:27:24</td>\n",
       "      <td>New York</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>12</td>\n",
       "      <td>2024-06-17 11:27:24</td>\n",
       "      <td>New York</td>\n",
       "      <td>2024-06-20 09:00:15</td>\n",
       "      <td>Los Angeles</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>13</td>\n",
       "      <td>2024-06-20 09:00:15</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>2024-06-20 09:21:15</td>\n",
       "      <td>Atlanta</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>14</td>\n",
       "      <td>2024-06-20 09:21:15</td>\n",
       "      <td>Atlanta</td>\n",
       "      <td>2024-06-20 09:40:15</td>\n",
       "      <td>New York</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>15</td>\n",
       "      <td>2024-06-20 09:40:15</td>\n",
       "      <td>New York</td>\n",
       "      <td>2024-06-20 10:13:15</td>\n",
       "      <td>Atlanta</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>16</td>\n",
       "      <td>2024-06-20 10:13:15</td>\n",
       "      <td>Atlanta</td>\n",
       "      <td>2024-06-20 10:32:15</td>\n",
       "      <td>Los Angeles</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "      <td>17</td>\n",
       "      <td>2024-06-20 10:32:15</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>2024-06-23 10:31:59</td>\n",
       "      <td>New York</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x127cb7b10>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.rule():\n",
    "    u = SuspiciousUser()\n",
    "    e = Event(to_user = u)\n",
    "    r = agg.rank_asc(e.timestamp, u)\n",
    "    e.set(rank = r)\n",
    "\n",
    "with model.rule():\n",
    "    u = SuspiciousUser()\n",
    "    e1 = Event(to_user = u)\n",
    "    e2 = Event(to_user = u)\n",
    "    e1.rank == e2.rank - 1\n",
    "    e1.set(has_next_event = e2)\n",
    "\n",
    "with model.query() as select:\n",
    "    u = SuspiciousUser()\n",
    "    e = Event(to_user = u)\n",
    "    res = select(u.id, e.rank, e.timestamp, e.city, alias(e.has_next_event.timestamp,\"timestamp next event\"), alias(e.has_next_event.city,\"city next event\"))\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 2 - Derive Fraudulent Users\n",
    "It looks indeed that this *user has committed a fraudulent activity* and there is some amount of account sharing going on. So let's write a rule that tags each user with fraudulent behavior as a `FraudulentUser`.\n",
    "\n",
    "We do this in case there exists at least one event where the next event took place within a configurable interval that we set in `suspicious_interval_in_milliseconds`, where the city property of the events do not match."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x127c99250>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# suspicious time interval\n",
    "suspicious_interval_in_milliseconds = 1200000 # = 20minutes\n",
    "FraudulentUser = model.Type(\"FraudulentUser\")\n",
    "\n",
    "with model.rule():\n",
    "    u = SuspiciousUser()\n",
    "    with model.found():\n",
    "        e = Event(to_user = u)\n",
    "        e.has_next_event.timestamp - e.timestamp == dates.milliseconds(diff_ms := Vars(1))\n",
    "        diff_ms <= suspicious_interval_in_milliseconds\n",
    "        e.city != e.has_next_event.city\n",
    "    u.set(FraudulentUser)\n",
    "\n",
    "with model.query() as select:\n",
    "    u = FraudulentUser()\n",
    "    res = select(u.id)\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## What to do next?\n",
    "Now that we have identified fraudulent users in our dataset, we want to provide a way for users of this little fraud detection application to get the results of our analysis directly from Snowflake. \n",
    "\n",
    "In order to do that, we create a stored procedure, which returns all of the instances of `FraudulentUser`. Alternatively, it would have been possible to write the results back directly into a Snowflake table."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "@model.export(\"rai_demo.fraud_detection\")\n",
    "def fraudulent_logins() -> Tuple[str]:\n",
    "    u = FraudulentUser()\n",
    "    return u.id\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's execute the procedure to take a look at the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>catch_me_if_you_can</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                    id\n",
       "0  catch_me_if_you_can"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(model.resources._exec(f\"call rai_demo.fraud_detection.fraudulent_logins();\"), columns = [\"id\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Appendix\n",
    "### Inserting Data\n",
    "To insert the data for this demo into Snowflake, change the value of `DO_SETUP` below to `True` and run the cell."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "DO_SETUP = False\n",
    "\n",
    "create_schema_commands = \"\"\"\n",
    "create database if not exists RAI_DEMO;\n",
    "create schema if not exists RAI_DEMO.FRAUD_DETECTION;\n",
    "\"\"\"\n",
    "\n",
    "create_table_command = \"\"\"\n",
    "create or replace table RAI_DEMO.FRAUD_DETECTION.USER_LOGS (\n",
    "\tUSER_ID VARCHAR(16777216),\n",
    "    TIMESTAMP TIMESTAMP_NTZ(9),\n",
    "\tPUBLIC_IP VARCHAR(16777216),\n",
    "\tCITY VARCHAR(16777216),\n",
    "\tDEVICE_TYPE VARCHAR(16777216),\n",
    "    DEVICE_ID VARCHAR(16777216)\n",
    ");\n",
    "\n",
    "\"\"\"\n",
    "\n",
    "insert_data_command = \"\"\"\n",
    "insert into RAI_DEMO.FRAUD_DETECTION.USER_LOGS (USER_ID,TIMESTAMP,PUBLIC_IP,CITY,DEVICE_TYPE,DEVICE_ID)\n",
    "values\n",
    "    ('aunt_judy','2024-06-01T20:31:46Z','69.37.129.87','New York','tablet','judys_ipad'),\n",
    "    ('aunt_judy','2024-06-03T14:37:59Z','69.37.129.87','New York','tablet','judys_ipad'),\n",
    "    ('aunt_judy','2024-06-05T06:07:56Z','69.37.129.87','New York','tablet','judys_ipad'),\n",
    "    ('aunt_judy','2024-06-08T06:41:19Z','69.37.129.87','New York','tablet','judys_ipad'),\n",
    "    ('aunt_judy','2024-06-12T05:09:50Z','69.37.129.87','New York','tablet','judys_ipad'),\n",
    "    ('aunt_judy','2024-06-14T12:02:11Z','69.37.129.87','New York','tablet','judys_ipad'),\n",
    "    ('aunt_judy','2024-06-16T08:32:16Z','69.37.129.87','New York','tablet','judys_ipad'),\n",
    "    ('travelling_salesman','2024-06-04T19:43:18Z','168.191.205.135','Los Angeles','desktop','ts imac'),\n",
    "    ('travelling_salesman','2024-06-18T01:59:39Z','168.191.205.135','Los Angeles','desktop','ts imac'),\n",
    "    ('travelling_salesman','2024-06-21T07:21:14Z','168.191.205.135','Los Angeles','desktop','ts imac'),\n",
    "    ('travelling_salesman','2024-06-26T16:24:55Z','168.191.205.135','Los Angeles','desktop','ts imac'),\n",
    "    ('travelling_salesman','2024-06-06T18:03:44Z','168.191.205.135','Los Angeles','desktop','ts imac'),\n",
    "    ('travelling_salesman','2024-06-07T20:15:24Z','168.191.205.135','Los Angeles','desktop','ts imac'),\n",
    "    ('travelling_salesman','2024-06-11T08:53:45Z','168.191.205.135','Los Angeles','desktop','ts imac'),\n",
    "    ('travelling_salesman','2024-06-24T08:55:45Z','168.191.205.135','Los Angeles','desktop','ts imac'),\n",
    "    ('travelling_salesman','2024-06-24T08:59:45Z','168.191.205.135','Los Angeles','tablet','ts ipad'),\n",
    "    ('travelling_salesman','2024-06-21T09:31:45Z','151.239.231.47','San Francisco','tablet','ts ipad'),\n",
    "    ('travelling_salesman','2024-06-01T07:07:10Z','146.157.47.128','Long Beach','tablet','ts ipad'),\n",
    "    ('travelling_salesman','2024-06-14T10:21:57Z','67.148.79.79','San Diego','tablet','ts ipad'),\n",
    "    ('travelling_salesman','2024-06-12T18:08:20Z','228.17.231.201','Fresno','tablet','ts ipad'),\n",
    "    ('travelling_salesman','2024-06-17T13:59:40Z','33.25.1.249','Oakland','tablet','ts ipad'),\n",
    "    ('travelling_salesman','2024-06-29T05:35:51Z','171.167.22.118','San Jose','tablet','ts ipad'),\n",
    "    ('travelling_salesman','2024-06-05T14:35:24Z','202.17.239.114','Sacramento','tablet','ts ipad'),\n",
    "    ('travelling_salesman','2024-06-08T11:29:11Z','233.189.189.48','Bakersfield','tablet','ts ipad'),\n",
    "    ('catch_me_if_you_can','2024-06-14T14:38:29Z','38.45.1.249','Los Angeles','desktop','dannys laptop'),\n",
    "    ('catch_me_if_you_can','2024-06-14T14:50:29Z','99.31.19.07','New York','desktop','franks macbook'),\n",
    "    ('catch_me_if_you_can','2024-06-14T14:10:29Z','171.231.231.97','Atlanta','tablet','annys ipad'),\n",
    "    ('catch_me_if_you_can','2024-06-14T14:20:29Z','100.33.3.205','Atlanta','desktop','marys computer'),\n",
    "    ('catch_me_if_you_can','2024-06-20T09:00:15Z','38.45.1.249','Los Angeles','desktop','dannys laptop'),\n",
    "    ('catch_me_if_you_can','2024-06-20T09:40:15Z','99.31.19.07','New York','desktop','franks macbook'),\n",
    "    ('catch_me_if_you_can','2024-06-20T10:13:15Z','171.231.231.97','Atlanta','tablet','annys ipad'),\n",
    "    ('catch_me_if_you_can','2024-06-20T09:21:15Z','100.33.3.205','Atlanta','desktop','marys computer'),\n",
    "    ('catch_me_if_you_can','2024-06-20T10:32:15Z','38.45.1.249','Los Angeles','desktop','dannys laptop'),\n",
    "    ('catch_me_if_you_can','2024-06-17T09:47:24Z','99.31.19.07','New York','desktop','franks macbook'),\n",
    "    ('catch_me_if_you_can','2024-06-17T09:33:24Z','171.231.231.97','Atlanta','tablet','annys ipad'),\n",
    "    ('catch_me_if_you_can','2024-06-17T09:26:24Z','100.33.3.205','Atlanta','desktop','marys computer'),\n",
    "    ('catch_me_if_you_can','2024-06-17T11:22:24Z','38.45.1.249','Los Angeles','desktop','dannys laptop'),\n",
    "    ('catch_me_if_you_can','2024-06-17T11:27:24Z','99.31.19.07','New York','desktop','franks macbook'),\n",
    "    ('catch_me_if_you_can','2024-06-23T10:31:59Z','120.35.6.505','New York','desktop','tommys chromebook'),\n",
    "    ('catch_me_if_you_can','2024-06-06T16:36:27Z','120.35.6.505','New York','desktop','tommys chromebook'),\n",
    "    ('catch_me_if_you_can','2024-06-02T19:12:10Z','38.45.1.249','Los Angeles','desktop','dannys laptop'),\n",
    "    ('catch_me_if_you_can','2024-06-17T05:54:51Z','99.31.19.07','New York','desktop','franks macbook');\n",
    "\"\"\"\n",
    "\n",
    "def exec_commands(resources, commands):\n",
    "    for cmd in commands.split(\";\"):\n",
    "    \tif cmd.strip():\n",
    "            resources._exec(cmd)\n",
    "\n",
    "def setup():\n",
    "    resources = rai.Resources()\n",
    "    for commands in [\n",
    "        create_schema_commands,\n",
    "        create_table_command,\n",
    "        insert_data_command,\n",
    "    ]:\n",
    "        exec_commands(resources, commands)\n",
    "\n",
    "if DO_SETUP:\n",
    "    setup()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "if DO_SETUP:\n",
    "    import subprocess\n",
    "\n",
    "    command = [\n",
    "        \"rai\", \"imports:stream\",\n",
    "        \"--source\", \"RAI_DEMO.FRAUD_DETECTION.USER_LOGS\",\n",
    "        \"--model\", \"login_sharing\"\n",
    "    ]\n",
    "\n",
    "    result = subprocess.run(command)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
