diff --git "a/notebooks_pipelines/01_functional_track_prediction.ipynb" "b/notebooks_pipelines/01_functional_track_prediction.ipynb" new file mode 100644--- /dev/null +++ "b/notebooks_pipelines/01_functional_track_prediction.ipynb" @@ -0,0 +1,466 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1ee06421", + "metadata": {}, + "source": [ + "# 🧬 NTv3 Post-Trained Functional Track Prediction\n", + "\n", + "This notebook demonstrates how to use the NTv3 post-trained model to predict functional tracks and genome annotation directly from a DNA sequence. \n", + "\n", + "The pipeline abstracts away all the underlying steps: running inference with the model and plotting the predictions per tracks.\n", + "\n", + "If you’re interested in exploring the intermediate probabilities, please refer to the [track-prediction notebook](https://huggingface.co/spaces/InstaDeepAI/ntv3/blob/main/notebooks_tutorials/01_tracks_prediction.ipynb).\n", + "\n", + "> πŸ“ **Note for Google Colab users:** This notebook is compatible with Colab! For faster inference, make sure to enable GPU: Runtime β†’ Change runtime type β†’ GPU (T4 or better recommended)." + ] + }, + { + "cell_type": "markdown", + "id": "94c46695", + "metadata": {}, + "source": [ + "## 0) πŸ“¦ Imports + setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2e2f5963", + "metadata": {}, + "outputs": [], + "source": [ + "# Install dependencies\n", + "!pip -q install \"transformers>=4.55\" \"huggingface_hub>=0.23\" safetensors torch pyfaidx requests seaborn matplotlib igv_notebook pyBigWig" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "3f0a8e73", + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "import time\n", + "import os\n", + "import torch\n", + "import requests\n", + "import numpy as np\n", + "import pyBigWig\n", + "from transformers import pipeline, AutoConfig" + ] + }, + { + "cell_type": "markdown", + "id": "9d29bb77", + "metadata": {}, + "source": [ + "## 1) πŸ“¦ Configuration\n", + "\n", + "Set your NTv3 model and genomic window here" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "423af70a", + "metadata": {}, + "outputs": [], + "source": [ + "# Define the model and genomic window\n", + "model_name = \"InstaDeepAI/NTv3_650M_pos\"\n", + "\n", + "species = \"human\" # will use for condition the model on species\n", + "assembly = \"hg38\" # will use for fetching the chromosome sequence\n", + "\n", + "chrom = \"chr19\"\n", + "start = 6_700_000\n", + "end = 6_831_072" + ] + }, + { + "cell_type": "markdown", + "id": "aee9541c", + "metadata": {}, + "source": [ + "## 2) πŸ“₯ Fetch chromosome sequence for the chosen window" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b34378f1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original sequence length: 131072\n", + "Cropped sequence length: 131072, 1024.0 transformer tokens\n" + ] + } + ], + "source": [ + "# Get the sequence from the UCSC API\n", + "url = f\"https://api.genome.ucsc.edu/getData/sequence?genome={assembly};chrom={chrom};start={start};end={end}\"\n", + "seq = requests.get(url).json()[\"dna\"].upper()\n", + "print(f\"Original sequence length: {len(seq)}\")\n", + "\n", + "# Crop to multiple of 128 (the pipeline will crop again, but this is a no-op once divisible)\n", + "seq = seq[:int(len(seq) // 128) * 128]\n", + "print(f\"Cropped sequence length: {len(seq)}, {len(seq) / 128} transformer tokens\")" + ] + }, + { + "cell_type": "markdown", + "id": "442c4b03", + "metadata": {}, + "source": [ + "## 3) ⚑ Functional track prediction pipeline (pre-processing, inference, plotting)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "4857d15c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Device set to use cpu\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running on device: cpu\n", + "Inference + decoding time: 38.32 seconds\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAB8YAAAUJCAYAAAASJmkYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXwV9b3/8fecJedkD/sm+yIqVi0IKlTEBXG9eKvS1a2ttre0tf68Kva2irX1Xq3obbVqtepV0SpVpCqiiIgLKgoiguwQCNnXs+8zvz9OckhIAklISEhez8fjPCAz35n5zJw5s32+3+8YlmVZAgAAAAAAAAAAAACgm7J1dgAAAAAAAAAAAAAAAHQkEuMAAAAAAAAAAAAAgG6NxDgAAAAAAAAAAAAAoFsjMQ4AAAAAAAAAAAAA6NZIjAMAAAAAAAAAAAAAujUS4wAAAAAAAAAAAACAbo3EOAAAAAAAAAAAAACgWyMxDgAAAAAAAAAAAADo1kiMAwAAAAAAAAAAAAC6NRLjAAAAAAAAAAAAAIBujcQ4AAAAAOCo9vTTT8swDH3++ecNhns8Hk2ePFlut1vLli1rULapT0lJSaN5+3w+3XLLLRo5cqRcLpeGDBmiyy+/XMFgMFVmxYoVuu666zRu3DhlZGRo1KhR+vGPf6zi4uIWxX/NNdc0iMPlcmncuHH63e9+p3A43Kh8Xbn777+/xduizi233CLDMDRnzpwWxQYAAAAAQHfh6OwAAAAAAABob16vVzNnztSGDRu0ePFizZo1q8H4u+66SyNHjmwwLC8vr8HfHo9H06dP1759+3T99ddrzJgxKi8v1wcffKBIJKKMjAxJ0q233qqqqipdccUVGjt2rHbt2qWHHnpIr7/+utavX6+BAwceMl6Xy6UnnngitdwlS5bo97//vXbu3KmFCxc2Oc19992nn/3sZ6k4DsWyLL3wwgsaMWKEXnvtNfl8PmVnZ7doWgAAAAAAjnYkxgEAAAAA3YrP59P555+v9evX65VXXtEFF1zQqMwFF1ygSZMmHXQ+8+bN0549e7Ru3boGSfRbb721QbkFCxZo2rRpstn2d8o2a9YsTZ8+XQ899JDuvvvuQ8bscDj0gx/8IPX3f/zHf+iMM87QCy+8oAULFmjAgAENyp988slav369Hn30Ud10002HnL8kvffee9q3b5/effddnX/++XrllVd09dVXt2haAAAAAACOdnSlDgAAAADoNvx+v2bNmqV169bp5Zdf1kUXXdRsWZ/Pp0Qi0eS4mpoaPfXUU7r++us1cuRIRaNRRSKRJsueeeaZDZLidcN69+6tzZs3t2k9DMPQtGnTZFmWdu3a1Wj81KlTdfbZZ+vee+9VKBRq0TwXLlyo448/XjNmzNC5557bbEv0pmzfvl3f/va3NXDgQLndbh1zzDH6zne+I4/H06Dcc889p4kTJyo9PV29e/fWd77zHRUUFDSa39/+9jeNHj1a6enpmjx5sj744AOdddZZOuuss1ocEwAAAAAArUFiHAAAAADQLQQCAV1wwQX67LPPtGjRIl188cXNlp0xY4ZycnKUkZGhSy+9VNu3b28w/sMPP1Q4HNaYMWN0+eWXKyMjQ+np6Zo6darWr19/yFj8fr/8fr/69u3b5vXJz8+XJPXq1avJ8XfeeadKS0v1yCOPHHJekUhEL7/8sr773e9Kkr773e/q3XffbfK96geKRqM6//zz9cknn+gXv/iFHn74YV1//fXatWuXampqUuX+8Ic/6KqrrtLYsWO1YMEC3XjjjVqxYoXOPPPMBuX+/ve/64YbbtDAgQN17733aurUqbr00kubTKADAAAAANBe6EodAAAAANAtXH311SoqKtKiRYt06aWXNlkmIyND11xzTSoxvnbtWi1YsEBnnHGG1q1bp6FDh0pSKlE+b948jR49Ws8884w8Ho/mz5+vs88+W5s2bdKgQYOajeXBBx9UNBrVnDlzWhx/RUWFpOQ7xl999VW9/PLLmjBhgo499tgmy3/rW9/SjBkzUu8aT09Pb3ber7/+umpqavSd73xHkjR79mxdf/31+sc//qEbb7zxoHF9/fXX2r17txYtWqTLL788Nfx3v/td6v979uzRHXfcobvvvlu33357avi///u/65RTTtFf//pX3X777YrFYrr99tt18skna+XKlUpLS5MkHX/88br++utT2x8AAAAAgPZGi3EAAAAAQLdQWloqt9t90OTqlVdeqaeeekpXXXWVZs+erd///vd66623VFlZqT/84Q+pcn6/X1KyS/MVK1boe9/7nn72s5/p1VdfVXV1tR5++OFml/H+++9r/vz5uvLKK3X22We3KPZAIKB+/fqpX79+GjNmjG6++WZNnTpVS5YskWEYzU535513qqSkRI8++uhB579w4UJNmjRJY8aMkSRlZ2froosualF36rm5uZKkt956S8FgsMkyr7zyikzT1JVXXqmKiorUZ+DAgRo7dqxWrlwpSfr8889VVlamn/70p6mkuCRdc801qeUAAAAAANARSIwDAAAAALqFxx57TGlpaZo1a5a2bt3a4ummTZumKVOm6J133kkNq2t9fckllygrKys1/LTTTtPIkSO1evXqJue1ZcsWXXbZZZowYYKeeOKJFsfgdru1fPlyLV++XE899ZSOO+44lZWVHbQVuJR8l/mMGTMO+q7xmpoaLV26VNOnT9eOHTtSn6lTp+rzzz/Xtm3bJEmhUEglJSUNPpI0cuRI3XTTTXriiSfUt29fnX/++Xr44YcbvF98+/btsixLY8eOTSX46z6bN29WWVmZpGTLckkaO3ZsgxidTqdGjRrV4u0FAAAAAEBr0ZU6AAAAAKBbOP7447V06VKdc845Ou+88/TRRx+1uGvuoUOHNkimDx48WJI0YMCARmX79++v6urqRsMLCgo0c+ZM5ebmaunSpcrOzm5x7Ha7Xeeee27q7/PPP1/jx4/XDTfcoH/9618HnfaOO+7QWWedpccee0x5eXmNxi9atEiRSET333+/7r///kbjFy5cqPnz5+vFF1/Utdde22CcZVmSpPvvv1/XXHONlixZorffflu//OUvdc899+iTTz7RMcccI9M0ZRiG3nzzTdnt9kbLqF+5AAAAAACAzkBiHAAAAADQbUyePFmvvvqqLrroIp133nn64IMP1K9fv0NOt2vXrgblJk6cKEkqLCxsVLaoqEjjx49vMKyyslIzZ85UJBLRihUrDvr+8ZYYNGiQfv3rX2v+/Pn65JNPdNpppzVbdvr06TrrrLP0P//zPw3e+11n4cKFmjBhgu64445G4x577DE9//zzmj9/vs4//3wtX7682eWceOKJOvHEE/Vf//VfWr16taZOnapHH31Ud999t0aPHi3LsjRy5EiNGzeu2XkMHz5cUrKFef1u5mOxmHbv3q2TTjqp2WkBAAAAADgcdKUOAAAAAOhWzjnnHL3wwgvasWOHZs2aJa/XmxpXXl7eqPzSpUu1du1azZo1KzXs2GOP1UknnaQlS5aooqIiNfztt99WQUGBzjvvvNSwQCCgCy+8UIWFhVq6dGmjbsLb6he/+IUyMjL03//934csW/eu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7ne/qzfffFPV1dWpYXl5eZKkJUuWyDTNJue1aNEiHXfccRo/frwqKipSn7r1XblyZYvXDwAAAACA9kBiHAAAAADQIzz22GNKS0vTrFmztHXr1hZPN23aNE2ZMkXvvPNOalh6erok6ZJLLkklpiXptNNO08iRI7V69eom57VlyxZddtllmjBhgp544ok2rklDdUn67OzsJsfn5ubqxhtv1L/+9S998cUXzc7nueee0+TJk1VZWakdO3Zox44dOuWUUxSNRrVo0aJUuTlz5mjq1Kn68Y9/rAEDBug73/mOXnrppQZJ8u3bt2vTpk3q169fg8+4ceMkJVunAwAAAABwJNGVOgAAAACgRzj++OO1dOlSnXPOOTrvvPP00UcfHbT1eH1Dhw5tkEwfPHiwJGnAgAGNyvbv379BC+s6BQUFmjlzpnJzc7V06dJmE9mttXHjRknSmDFjmi3zq1/9Sg888IDmz5+vBx98sNH47du367PPPpMkjR07ttH4hQsX6vrrr5eUrBTw/vvva+XKlXrjjTe0bNkyvfjiizr77LP19ttvy263yzRNnXjiiVqwYEGT8bR0uwMAAAAA0F5IjAMAAAAAeozJkyfr1Vdf1UUXXaTzzjtPH3zwgfr163fI6Xbt2tWg3MSJEyVJhYWFjcoWFRVp/PjxDYZVVlZq5syZikQiWrFixUHfP95azz77rAzD0HnnnddsmbpW43feeaeuvvrqRuMXLlwop9OpZ599Vna7vcG4Dz/8UH/+85+1d+9eDRs2TJJks9l0zjnn6JxzztGCBQv0xz/+Ub/5zW+0cuVKnXvuuRo9erS+/PJLnXPOOTIMo93WFQAAAACAtqIrdQAAAABAj3LOOefohRde0I4dOzRr1ix5vd7UuPLy8kblly5dqrVr12rWrFmpYccee6xOOukkLVmyRBUVFanhb7/9tgoKChokqQOBgC688EIVFhZq6dKlTbbIbqv//u//1ttvv605c+Yccr433nij8vLydNdddzUat3DhQn3rW9/SnDlzdPnllzf4/Od//qck6YUXXpAkVVVVNZr+5JNPliRFIhFJyXe1FxYW6vHHH29UNhQKKRAItGo9AQAAAAA4XLQYBwAAAAD0OJdddpkef/xxXXfddbr00ku1bNkyud1unXHGGTrllFM0adIk5ebmat26dXryySc1dOhQ3X777Q3m8cAD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DPvpT3+q3NxcPfTQQ1qwYEGbk/FlZWW66667dOutt+p3v/tde4TbZn/9618bDZs9e7YmTZqkZ555RrfddlsnRAUAAAAA6E7oSh0AAAAAcFTy+/2aNWuW1q1bp5dfflkXXXRRs2V9Pp8SiUST42pqavTUU0/p+uuv18iRIxWNRhWJRJose+aZZzZIitcN6927tzZv3tz2lWmlESNGSErGfjDr169Xv379dNZZZ8nv9zcYd9ttt+nYY4/VD37wgyanreuK/sMPP9Qvf/lL9evXT3l5ebrhhhsUjUZVU1Ojq666Sr169VKvXr10yy23yLKsBvMwTVMPPvigTjjhBLndbg0YMEA33HCDqqur220dAQAAAABoCVqMAwAAAACOOoFAQBdccIE+++wz/fOf/9TFF1/cbNkZM2bI7/crLS1N559/vu6//36NHTs2Nf7DDz9UOBzWmDFjdPnll+vVV1+VaZo6/fTT9fDDD+vkk08+aCx+v19+v199+/ZtcfwVFRUtLitJ0WhUXq9XoVBIn3/+uf70pz9p+PDhGjNmTLPTfPbZZzr//PM1adIkLVmyROnp6alxa9as0f/93//pww8/lGEYB132L37xCw0cOFDz58/XJ598or/97W/Ky8vT6tWrNWzYMP3xj3/U0qVLdd9992nChAm66qqrUtPecMMNevrpp3Xttdfql7/8pXbv3q2HHnpIX3zxhT766CM5nc4Gy6qsrFQikdDevXt11113SZLOOeecVm0rAAAAAACaQmIcAAAAAHDUufrqq1VUVKRFixbp0ksvbbJMRkaGrrnmGs2YMUM5OTlau3atFixYoDPOOEPr1q3T0KFDJUnbt2+XlOxOffTo0XrmmWfk8Xg0f/58nX322dq0aZMGDRrUbCwPPvigotGo5syZ06LYA4GA+vXr16r1feWVV/Td73439fekSZP05JNPyuFo+rb+o48+0oUXXqhvfetbevnll+VyuVLjLMvSL37xC82ZM0enn3668vPzD7rsAQMGaOnSpTIMQ//xH/+hHTt26L777tMNN9ygRx55RJJ0/fXXa8SIEXryySdTifEPP/xQTzzxhBYuXKjvfe97qfnNmDFDs2bN0qJFixoMl6QhQ4akWuv36dNHf/7zn3Xeeee1fEMBAAAAANAMEuMAAAAAgKNOaWmp3G53KrndlCuvvFJXXnll6u/Zs2fr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FQwGdcghh+gzn/nMkG21p21y5ZVXjus7AAAAAAAwmXxTHQAAAAAAANNJPB7X2WefrTVr1ujuu+/WueeeO+T9733ve1qyZMmQadXV1UNex2Ixvec971FLS4s+//nP67DDDlN3d7eeeeYZ5XI5RSIRSdK3vvUt9fX16WMf+5gOP/xwbdu2TTfeeKPuv/9+rV69WvPnzx813quvvlrf+973dPjhh+sLX/iCDj74YPX29uqBBx7QRRddpOXLl+s//uM/9LnPfa70mVdeeUW/+MUv9O1vf1tHHXVUafpxxx2nTCajCy+8UCtWrNDpp5+ub3/726qtrVVjY6P+8pe/6Pe//72ampq0ePHiPW6TY445ZtTYAQAAAADYX0iMAwAAAABQlEgkdM4552j16tW66667dN555w2b57zzztNJJ520x+VcddVV2rFjh1atWjUkYfytb31ryHw/+9nP9O53v1sez84O3c4991y95z3v0Y033qgf/OAHe1zPX//6V33ve9/TRz/6Ud1+++3y+/2l9/793/9dDz30kAqFgs4666whnwuFQvrFL36hs846S2ecccaQ9y677DKtWLFCP//5z3X55ZcPee/qq6/Wz3/+82FxjGWbAAAAAAAwlUiMAwAAAAAgKZlM6txzz9WqVav0t7/9TR/84Ad3O28ikVAkEpHX6x32XjQa1e9+9zv967/+q5YsWaJ8Pi/HcRQMBofNe/rpp484rba2VuvXrx815u985zuqra3VLbfcMiQpPuCcc84ZdRmDtbS06Ne//rXOOuusYUlxSfJ6vfrGN74xrmUCAAAAADAdMMY4AAAAAGDWS6VSOu+88/TKK6/ozjvv1Pnnn7/bed/73veqsrJSkUhEH/7wh7V58+Yh7z/77LPKZrM67LDD9NGPflSRSEThcFjvete7tHr16lFjSSaTSiaTqq+v3+N8mzdv1oYNG3TBBReooqJiTN9zNA8++KBM09Q///M/j+tzsVhMPT09Q/4AAAAAAJhOaDEOAAAAAJj1LrnkErW1tenOO+/Uhz/84RHniUQi+pd/+ZdSYnzlypX62c9+pne+851atWqVGhoaJKmUKL/qqqu0dOlS/eEPf1AsFtO1116rM888U2+88YYWLFiw21iuv/565fN5ffzjH99jzAMtyo899ti9+coTusz3v//9w6Y5jjMhMQEAAAAAMBFIjAMA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8cQTx/zdli9frkMOOUSNjY16/PHHxxwbAAAAAAAHAhLjAAAAAACMgWma+shHPqLOzk499dRTete73jXk/auvvloPP/ywLMsqTfvkJz+pa665RuXl5aVpn/3sZ3XUUUfpmmuuGXPy+bzzztNJJ50kSfrc5z6n+vp6/ehHP9K9996riy++eMi8Bx10kBKJhK699lrde++9Y1p+KpXSPffco+uuu06/+93vtHz5chLjAAAAAIAZha7UAQAAAAAz1m233aYTTzxR4XBYtbW1+sQnPqHm5uYh8wx0w75y5Uq9853vVDgc1pIlS/SrX/1qyHx33nmn1q1bp+985zvDkuIDzj77bJ133nml1yeeeOKQpLgk1dXV6bTTTtP69ev3+nuddtppkqStW7cOe6+iokJf+9rXdN9992nVqlVjWt7dd9+tTCajj33sY/rEJz6hu+66S9lsdkyfTSQSuvzyy3XIIYcoGAxq7ty5Ouuss4at+6WXXtK5556rqqoqRSIRvec979Fzzz03bHnPPvusTj75ZIVCIS1dulS//vWvdc0118gwjDHFAwAAAADASEiMAwAAAAAOGLFYTD09PcP+CoXCsHl/+MMf6tOf/rQOP/xw/exnP9Pll1+uxx57TKeffrqi0eiQefv7+/WBD3xAJ554on784x9r8eLF+tKXvqRbbrmlNM99990nSfqnf/qnff4eHR0dqq+v3+vPNzY2SpJqampGfP/f/u3fVFNTo2uuuWZMy1u+fLne+973av78+frEJz6hRCJR+r6j+eIXv6ibb75ZF110kX75y1/qG9/4hsLh8JDE/+OPP67TTz9d8XhcV199tf7rv/5L0WhUZ555pl5++eXSfGvXrtXZZ5+trq4uXXPNNfrMZz6jq6++WnffffeYYgEAAAAAYHfoSh0AAAAAcMDYU/feRx99dOn/O3bs0NVXX60f/OAH+va3v12afuGFF+qEE07QL3/5yyHT29ra9NOf/lRXXHGFJOkLX/iCTj31VF111VX653/+Z/n9fm3YsEHV1dVatGjRkPWmUillMpnS60AgoMrKyt3G+cwzz+iFF17Qf/7nf475ew9UCMhms3rppZd07bXXKhgM6vzzzx9x/srKSl1++eW6+uqrtWrVKr3tbW/b7bK7urr06KOP6uabb5bkdsX+jne8Q8uXL9fHPvaxUWP7xz/+oUsvvVQ//elPS9O++c1vlv7vOI6++MUv6r3vfa8efPDBUsvvL3zhCzr66KP1n//5n3r44YclSd/97nflOI6eeeYZHXTQQZKkiy66SMcee+yocQAAAAAAsCe0GAcAAAAAHDBuuukmPfLII8P+jjvuuCHz3XXXXbJtWxdffPGQluXz58/X4YcfrieeeGLI/D6fT1/4whdKrwOBgL7whS+oq6tLK1eulCTF4/Fh3aJL0n/8x39ozpw5pb9PfepTu42/q6tLn/rUp7RkyZIhyePRvP/979ecOXPU0NCgj370oyorK9O9996rxYsX7/YzA63Gr7322j0u+89//rM8Ho8uuuii0rRPfvKTevDBB9Xf3z9qbNXV1XrppZfU1tY24vurV6/W5s2b9alPfUq9vb2l3yKVSul973ufnn76adm2Lcuy9NBDD+mCCy4oJcUl6aijjtI555wzahwAAAAAAOwJLcYBAAAAAAeMU045RSeddNKw6TU1Nerp6Sm93rx5sxzH0eGHHz7icvx+/5DXCxcuVFlZ2ZBpy5Ytk+R2W/72t79dFRUV6u3tHbasL3/5y6WW23vqZj2VSun8889XIpHQs88+O2KSfXduuukmLVu2TLFYTLfccouefvppBYPBPX6mqqqq1Gr8tdde222367fddptOOeUU9fb2lr7fCSecoHw+rzvvvFOf//znZVmWuru7h3yutrZWgUBAP/7xj3XJJZeooaFBJ554oj7wgQ/o05/+tA499FBJ7m8hSZdccsluY43FYsrlcspkMiP+ZkcccYQeeOCBPX5fAAAAAAD2hMQ4AAAAAGDGsW1bhmHowQcflNfrHfb+eJLSA4488kitXr1ara2tQ7pTX7ZsWSmJHgqFRvxsPp/XhRdeqDVr1uihhx7SMcccM651D64QcMEFF+jd7363PvWpT2njxo17/C7/9m//pp///Oe69tprdf311w97f/PmzXrllVckacSE9PLly/X5z39ezc3NWrJkyZD3nnjiCZ1xxhm6+OKLddppp+nuu+/Www8/rJ/85Cf60Y9+pLvuukvnnXeebNuWJP3kJz/RW9/61hHjLC8vVy6XG8umAAAAAABgr5AYBwAAAADMOEuXLpXjOFqyZEkpab0nbW1tSqVSQ1qNb9q0SZJ0yCGHSJLOP/98/fnPf9by5cvH1Q26bdv69Kc/rccee0x/+ctf9J73vGd8X2YXXq9X1113nd773vfqxhtv1JVXXrnbeQdajV9zzTUjtthevny5/H6//vjHPw6rQPDss8/qF7/4hZqamjR//nw98sgjQ94//vjjS/9fsGCBvvzlL+vLX/6yurq69La3vU0//OEPdd5552np0qWS3HHP9zRG/Jw5cxQOh0stzAfbuHHjbj8HAAAAAMBYMMY4AAAAAGDGufDCC+X1enXttdfKcZwh7zmOM6xLdNM09etf/7r0Op/P69e//rXmzJmjE088UZJ08cUX6y1veYu+//3v68UXXxxxvbuuS5K++tWv6o477tAvf/lLXXjhhfv61SRJZ5xxhk455RRdf/31ymaze5z38ssvV3V1tb73ve8Ne2/58uU67bTT9PGPf1wf/ehHh/z9+7//uyTpT3/6k0KhkN7//vcP+aupqZFlWYrFYkOWOXfuXC1cuLDUAvzEE0/U0qVL9d///d9KJpPDYhjoot3r9eqcc87R3//+dzU1NZXeX79+vR566KHxbSAAAAAAAHZBi3EAAAAAwIyzdOlS/eAHP9BVV12lxsZGXXDBBaqoqND27dt199136/Of/7y+8Y1vlOZfuHChfvSjH6mxsVHLli3THXfcodWrV+s3v/lNaTxyv9+vu+++W+ecc47e/e5368ILL9Rpp52msrIytba26t5771VTU5M++MEPlpZ7/fXX65e//KXe8Y53KBKJ6LbbbhsS50c+8pFhY5uP1b//+7/rYx/7mG699VZ98Ytf3O18VVVV+rd/+zdde+21Q6a/9NJL2rJliy677LIRP7do0SK97W1v0/Lly/Wtb31rxHkSiYQWL16sj370ozr++ONVXl6uRx99VK+88op++tOfSpI8Ho/+93//V+edd56OPvpofeYzn9GiRYvU2tqqJ554QpWVlbrvvvskSddee61WrFih0047TV/+8pdlmqZuuOEGHX300VqzZs3ebCYAAAAAACSRGAcAAAAAzFBXXnmlli1bVhpjW5IaGhp09tln68Mf/vCQeWtqavT73/9eX/3qV/Xb3/5W8+bN04033qhLL710yHzLli3T6tWr9Ytf/EJ33323HnzwQeXzec2bN0+nnnqqrr76ap1//vml+VevXi1JeuGFF/TCCy8Mi3H79u17nRi/8MILSy2xL7300hHHUh9w+eWX6/rrrx/Sunv58uWSpA996EO7/dyHPvQh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AAAAAAAAAMCoRmAcAAAAAAAAAAAAADCqERgHAAAAAAAAAAAAAIxqBMYBAAAAAAe8v//977JYLFq9enWX8xcuXKhZs2btl7J4vV7ddtttmjt3rrKysuRyuTRx4kRdcMEFev755zssu3XrVl1//fU66qijlJGRoZKSEp155pndfo5Pa//c7S+3260xY8bo9NNP1+9//3v5fL5O6yxdulQWi0VFRUUKBAKd5k+aNEmLFi3qcn8tLS1yu92yWCzasmVLn8oIAAAAAMBIQGAcAAAAAIBBsnPnTh199NFasmSJJk+erJ///Oe677779I1vfEOlpaVatGiRHnzwweTyf/7zn/WnP/1Jc+fO1W9+8xt9//vf17Zt27RgwQK9+uqrfd7vz372Mz344IO67777dO2110qSrrvuOs2ePVvr16/vcp26ujrdd999/fp8jz/+uCwWi4qLi7Vs2bJ+rQsAAAAAwHCyD3cBAAAAAAAYDWKxmM455xzV1tZq5cqVOuGEEzrMX7JkiV555RXF4/HktIsuukhLly5Venp6cto3vvENzZw5U0uXLtWpp57ap31/8Ytf1Ny5c5Pvb7zxRr3++utatGiRzjrrLG3ZskUpKSkd1jnqqKP061//WldffXWned156KGHdMYZZ2jixIl6+OGHdeutt/ZpPQAAAAAAhhs9xgEAAAAAB62HHnpIc+bMUUpKinJzc3XhhReqvLy8wzLtadjXrFmj448/XikpKZo8ebLuv//+Dss9/vjj2rhxo2666aZOQfF2p512mr74xS8m38+ZM6dDUFyS8vLydOKJJ+5zqvJTTjlFN910k8rKyvTQQw91mn/zzTertra2z73G9+7dq7feeksXXnihLrzwQu3Zs0fvvvtup+V27Nih8847T8XFxXK73Ro3bpwuvPBCeTyeDsv15dgDAAAAADBYCIwDAAAAAEYNj8ejhoaGTq9oNNpp2dtuu02XXXaZpk2bpt/+9re67rrr9Nprr+mkk05SS0tLh2Wbm5t1xhlnaM6cObrjjjs0btw4XXXVVfrrX/+aXObZZ5+VJF1yySX7/DlqamqUn5+/z9u59NJLJUmvvPJKp3knnniiTjnlFN1xxx0KBoO9buuRRx5RWlqaFi1apHnz5mnq1Kmd0qlHIhGdfvrp/1EaNgABAABJREFUeu+993Tttdfqnnvu0RVXXKHdu3d3OKb9OfYAAAAAAAwGUqkDAAAAAEaNnlKPH3744cn/l5WVacmSJbr11lv14x//ODn93HPP1dFHH6177723w/SqqqrkGOCSdOWVV2r+/Pm68cYbdemll8rhcGjr1q3Kzs7W2LFjO+zX7/d3CDw7nU5lZmZ2W8633npLq1at0k9/+tO+f/BujBs3TllZWdq1a1eX85csWaKTTz5Z999/v773ve/1uK1ly5bpy1/+cjLt+gUXXKA//vGPuuuuu2S3J6oXNm/erD179ujxxx/XV77yleS6N998c/L//T32AAAAAAAMBnqMAwAAAABGjXvuuUfLly/v9DriiCM6LPfkk0/KMAydf/75HXqWFxcXa9q0aVqxYkWH5e12u6688srke6fTqSuvvFJ1dXVas2aNJMnr9XZKiy5JP/nJT1RQUJB8XXzxxd2Wv66uThdffLEmT56s66+/fl8ORVJ6erp8Pl+X80466SR99rOf7bXX+Pr167VhwwZddNFFyWkXXXSRGhoa9PLLLyenZWVlSZJefvllBQKBLrfV32MPAAAAAMBgoMc4AAAAAGDUmDdvnubOndtpek5OjhoaGpLvd+zYIdM0NW3atC6343A4OrwfM2aM0tLSOkybPn26JKm0tFQLFixQRkaGGhsbO23r6quv1qJFiyT1nGbd7/dr0aJF8vl8evvtt7sMsg9Ea2urCgsLu52/dOnSXnuNP/TQQ0pLS9OUKVO0c+dOSZLb7dakSZO0bNkynXnmmZKkyZMn6/vf/75++9vfatmyZTrxxBN11lln6ZJLLkkGzft77AEAAAAAGAwExgEAAAAABx3DMGSxWPTiiy/KZrN1mj+QoPSMGTO0bt06VVZWdkinPn369GQQ3e12d7luJBLRueeeq/Xr1+vll1/WrFmz+r3/rlRUVMjj8eiQQw7pdpmTTjpJCxcu1B133KFvf/vbneabpqlHHnlEfr9fhx12WKf5dXV1am1tTR6z3/zmN/qf//kfPf3003rllVf0ne98R7fffrvee+89jRs3bkiOPQAAAAAAvSEwDgAAAAA46EydOlWmaWry5MnJoHVPqqqq5Pf7O/Qa3759uyRp0qRJkqRFixbp0Ucf1bJly/qVBt0wDF122WV67bXX9K9//Usnn3xy/z5MDx588EFJ0umnn97jckuXLtXChQv1wAMPdJq3cuVKVVRU6Gc/+5lmzpzZYV5zc7OuuOIK/ec//+nQG3727NmaPXu2fvrTn+rdd9/VCSecoPvvv1+33nprv489AAAAAACDgTHGAQAAAAAHnXPPPVc2m0233HKLTNPsMM80zU4p0WOxWIegcSQS0QMPPKCCggLNmTNHknT++efrsMMO089//nO99957Xe730/uSpGuvvVaPPfaY7r33Xp177rn7+tGSXn/9df385z/X5MmT9bWvfa3HZU8++WQtXLhQv/rVrxQKhTrMa0+j/r//+7/6yle+0uH1rW99S9OmTdOyZcskJcZZj8ViHdafPXu2rFarwuGwpP4fewAAAAAABgM9xgEAAAAAB52pU6fq1ltv1Y033qjS0lKdffbZysjI0J49e/TUU0/piiuu0A9/+MPk8mPGjNGvfvUrlZaWavr06Xrssce0bt06/fGPf0yOie1wOPTUU0/p9NNP12c+8xmde+65OvHEE5WWlqbKyko988wz2rt3b3I8bkm68847de+99+q4445TamqqHnrooQ7lPOecczqNbd6VF198UVu3blUsFlNtba1ef/11LV++XBMnTtQzzzzTbQr3T1qyZIk++9nPdpgWDof1xBNP6POf/3y32zjrrLN01113qa6uTu+++64WL16sr371q5o+fbpisZgefPBB2Ww2nXfeeQM69gAAAAAADAYC4wAAAACAg9INN9yg6dOn63e/+51uueUWSdL48eN12mmn6ayzzuqwbE5Ojv7xj3/o2muv1Z/+9CcVFRXpD3/4g771rW91WG769Olat26dfv/73+upp57Siy++qEgkoqKiIs2fP19LlizRokWLksuvW7dOkrRq1SqtWrWqUxn37NnTp8D4zTffLElyOp3Kzc3V7Nmzdeedd+rrX/+6MjIy+nQ8Fi5cqJNPPlkrV65MTnv++efV0tKiL33pS92u96UvfUm/+c1v9Oijj+pLX/qSTj/9dD377LOqrKxUamqqjjzySL344otasGBBcp3+HHsAAAAAAAaDxewqjxsAAAAAAJCUCBg3NDRo48aNw10UAAAAAAAwQIwxDgAAAAAAAAAAAAAY1QiMAwAAAAAAAAAAAABGNQLjAAAAAAAAAAAAAIBRjTHGAQAAAAAAAAAAAACjGj3GAQAAAAAAAAAAAACj2ogLjJumKa/XKzqyAwAAAAAAAAAAAAAGw4gLjPt8PmVlZcnn8w13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AAAwqhEYBwAAAAAAAAAAAACMagTGAQAAAAAAAAAAAACjGoFxAAAAAAAAAAAAAMCoRmAcAAAAAAAAAAAAADCqERgHAAAAAGCU+/vf/y6LxaLVq1cPd1EAAAAAABgWBMYBAAAAACNKb0HchQsXatasWfulLF6vV7fddpvmzp2rrKwsuVwuTZw4URdccIGef/75Dstu3bpV119/vY466ihlZGSopKREZ555Zp+D0QP53L/4xS+0YMECFRQUyO12a9q0abruuutUX18/sA/8Kd/61rdksVi0aNGiQdneQLz55ps666yzNH78eLndbhUXF+sLX/iC3nnnnWErEwAAAADgwGMf7gIAAAAAADAS7dy5U6effrrKysp0zjnn6LLLLlN6errKy8v1wgsvaNGiRfrnP/+pSy+9VJL05z//WX/5y1903nnn6eqrr5bH49EDDzygBQsW6KWXXtKpp5466GVcs2aNjjrqKF144YXKyMjQli1b9Kc//UnPP/+81q1bp7S0tAFve/Xq1fr73/8ut9s9iCXuv+3bt8tqterb3/62iouL1dzcrIceekgnnXSSnn/+eX3hC18Y1vIBAAAAAA4MBMYBAAAAAPiUWCymc845R7W1tVq5cqVOOOGEDvOXLFmiV155RfF4PDntoosu0tKlS5Wenp6c9o1vfEMzZ87U0qVLhyQw/sQTT3Sadtxxx+krX/mKnn32WV144YUD2q5pmvrOd76jyy67TK+99tq+FnOffPOb39Q3v/nNDtOuvvpqTZkyRXfeeSeBcQAAAABAn5BKHQAAAAAwKjz00EOaM2eOUlJSlJubqwsvvFDl5eUdlmlPR75mzRodf/zxSklJ0eTJk3X//fd3WO7xxx/Xxo0bddNNN3UKirc77bTT9MUvfjH5fs6cOR2C4pKUl5enE088UVu2bBmkT9m7SZMmSZJaWlp6XK65uVnz5s3TuHHjtG3btg7zHnzwQW3cuFG33XZbl+uWlpbKYrHo//7v/3TPPfdoypQpSk1N1Wmnnaby8nKZpqmf//znGjdunFJSUvTlL39ZTU1Nnbbz4osv6sQTT1RaWpoyMjJ05plnatOmTb1+xtTUVBUUFPT6GQEAAAAAaEePcQAAAADAiOTxeNTQ0NBpejQa7TTttttu00033aTzzz9f3/zmN1VfX6+7775bJ510ktauXavs7Ozkss3NzTrjjDN0/vnn66KLLtK//vUvXXXVVXI6nfrGN74hSXr22WclSZdccsk+f46amhrl5+f3efn+fG4p0bu7sbFRsVhMO3bs0A033CCbzaaFCxd2u4+GhgZ9/vOfV1NTk1auXKmpU6cm5/l8Pv3oRz/Sj3/8YxUXF/dY1mXLlikSiejaa69VU1OT7rjjDp1//vk65ZRT9MYbb+hHP/qRdu7cqbvvvls//OEP9de//jW57oMPPqjLL79cp59+un71q18pEAjovvvu02c+8xmtXbs2GeBv5/V6FYlE1NDQoH/+85/auHGjfvzjH/dYPgAAAAAA2hEYBwAAAACMSD2lHj/88MOT/y8rK9OSJUt06623dgiUnnvuuTr66KN17733dpheVVWl3/zmN/r+978vSbryyis1f/583Xjjjbr00kvlcDi0detWZWdna+zYsR326/f7FQwGk++dTqcyMzO7Ledbb72lVatW6ac//emgf+52tbW1KikpSb4fN26cHn74Yc2YMaPLbdTU1OjUU09VMBjUm2++qYkTJ3aY/7Of/UwpKSn63ve+12tZKysrtWPHDmVlZUmS4vG4br/9dgWDQa1evVp2e6Laob6+XsuWLdN9990nl8ul1tZWfec739E3v/lN/fGPf0xu7/LLL9ehhx6qX/ziFx2mS9L555+vl19+WVLiuF955ZW66aabei0jAAAAAAASgXEAAAAAwAh1zz33aPr06Z2m/+AHP+gwtveTTz4pwzB0/vnnd+hpXVxcrGnTpmnFihUdAuN2u11XXnll8n17kPWqq67SmjVrtGDBAnm93k5p0SXpJz/5ie66667k+zPPPFPPPfdcl+Wvq6vTxRdfrMmTJ+v6668f9M/dLjc3V8uXL1coFNLatWv15JNPqrW1tcttV1RU6Gtf+5ok6c033+wU+N++fbvuuusuPfLII3K5XL2W9atf/WoyKC5J8+fPl5Toad8eFG+f/sgjj6iyslJTpkzR8uXL1dLSoosuuqjD38xms2n+/PlasWJFp3398pe/1A9+8AOVl5frH//4hyKRiGKxWK9lBAAAAABAIjAOAAAAABih5s2bp7lz53aanpOT0yGYumPHDpmmqWnTpnW5HYfD0eH9mDFjlJaW1mFaeyC6tLRUCxYsUEZGhhobGztt6+qrr9aiRYsk9Zxm3e/3a9GiRfL5fHr77be7DLJ3p6+fu53T6Uz2Ml+0aJE+97nP6YQTTlBhYWGyrO0uvfRS2e12bdmypcs06d/97nd1/PHH67zzzutTWSdMmNDhfXuQfPz48V1Ob25ulpT4m0nSKaec0uV2u+qFf9RRRyX/f8kll+iYY47R//zP/+jf//53n8oKAAAAADi4ERgHAAAAABzQDMOQxWLRiy++KJvN1ml+f4LS7WbMmKF169apsrKyQ6/q6dOnJ4Pobre7y3UjkYjOPfdcrV+/Xi+//LJmzZrV7/3vi+OPP14lJSVatmxZp8D4ueeeq3/+85+66667dPvtt3eY9/rrr+ull17Sk08+qdLS0uT0WCymYDCo0tJS5ebmdghad3W8e5pumqakxN9MSowz3lWA/pO9zbvidDp11lln6Ze//KWCwaBSUlJ6XB4AAAAAAALjAAAAAIAD2tSpU2WapiZPntxlCvJPq6qqkt/v79BrfPv27ZKkSZMmSUr0vH700Ue1bNmyfqVBNwxDl112mV577TX961//0sknn9y/DzNIQqGQPB5Pp+nXXnutDjnkEN18883KysrSDTfckJy3d+9eSYng+adVVlZq8uTJ+t3vfqfrrrtun8s3depUSVJhYWGPY6r3JBgMyjRN+Xw+AuMAAAAAgF5Zh7sAAAAAAADsi3PPPVc2m0233HJLskdyO9M0O6VEj8VieuCBB5LvI5GIHnjgARUUFGjOnDmSpPPPP1+HHXaYfv7zn+u9997rcr+f3peUCDw/9thjuvfee7sMMA8mv9+vQCDQafoTTzyh5ubmLtOxS9JNN92kH/7wh7rxxht13333Jaefcsopeuqppzq9CgoKNHfuXD311FP60pe+NChlP/3005WZmalf/OIXikajnebX19cn/19XV9dpfktLi5544gmNHz9ehYWFg1ImAAAAAMDoRo9xAAAAAMABberUqbr11lt14403qrS0VGeffbYyMjK0Z88ePfXUU7riiiv0wx/+MLn8mDFj9Ktf/UqlpaWaPn26HnvsMa1bt05//OMfk+OROxwOPfXUUzr99NP1mc98Rueee65OPPFEpaWlqbKyUs8884z27t2rM888M7ndO++8U/fee6+OO+44paam6qGHHupQznPOOafT2Ob7YseOHTr11FN1wQUXaMaMGbJarVq9erUeeughTZo0Sd/97ne7XffXv/61PB6PrrnmGmVkZOiSSy7R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YIFeeuklnXrqqb3u8/nnn9dXv/pVuVwuXXbZZZo1a5YikYjefvtt/e///q82bdqkxYsX65BDDkmu09raqquuukrnnHOOzj333OT0oqIiSdKSJUv0s5/9TNOmTdOVV16piRMnqrGxUS+88ILOO+88LVu2TBdffHFyvYsuukhnnHFGh3IVFBTs07EEAAAAAKC/CIwDAAAAADDEYrGYzjnnHNXW1mrlypU64YQTOsxfsmSJXnnlFcXj8eS0iy66SEuXLlV6enpy2je+8Q3NnDlTS5cu7TUwvmfPHl144YWaOHGiXn/9dZWUlCTnXXPNNdq5c6eef/55HXHEETriiCOS8xoaGnTVVVfpiCOO0CWXXNJhm//+97/1s5/9TF/5ylf08MMPy+FwJOf97//+r15++WVFo9EO6xxzzDGdtgMAAAAAwP5GKnUAAAAAALrw0EMPac6cOUpJSVFubq4uvPBClZeXd1imPQ37mjVrdPzxxyslJUWTJ0/W/fff32G5xx9/XBs3btRNN93UKSje7rTTTtMXv/jF5Ps5c+Z0CIpLUl5enk488URt2bKl1/Lfcccdam1t1V/+8pcOQfF2hxxyiL773e/2up1Puummm5Sbm6u//vWvHYLi7U4//XQtWrSoX9sEAAAAAGB/IDAOAAAAADgoeDweNTQ0dHp9uoezJN1222267LLLNG3aNP32t7/Vddddp9dee00nnXSSWlpaOizb3NysM844Q3PmzNEdd9yhcePG6aqrrtJf//rX5DLPPvusJA1Kz+mamhrl5+f3utyzzz6rKVOm6Pjjj9/nfUrSjh07tHXrVp199tnKyMjo83qBQKBPxxwAAAAAgKFEYBwAAAAAcFA49dRTVVBQ0On17rvvdliurKxMS5Ys0a233qpHH31UV111lW6++WatWLFCFRUVuvfeezssX1VVpR/96Ee6++67de211+q1117TUUcdpRtvvDEZAN66dauys7M1duzYDuv6/f4OAWOv19vjZ3jrrbe0atUqXXDBBT0u5/V6VVlZqdmzZ/f18PSqvZd6f7e5ZMmSTsf8nXfeGbRyAQAAAADQF4wxDgAAAAA4KNxzzz2aPn16p+k/+MEPOozt/eSTT8owDJ1//vlqaGhITi8uLta0adO0YsUK/fjHP05Ot9vtuvLKK5PvnU6nrrzySl111VVas2aNFixYIK/X2ykt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v6ybb75ZGzZs0AMPPJBf1/XXX6+bbrpJF198sS6++GK9/vrrOv/885VOp4cUS19fny688EJddtllev/7368//OEP+vd//3cdf/zxuuiiiyRJsVhM5557rtra2vS5z31OtbW1uueee7Ry5coh7/MeLS0t+UoL1113nYqKivSLX/xCXq93wLyH8nmZpqkLLrhAy5cv13//93/riSee0Pe//33NnDlTn/70p/PzfepTn9Kdd96pj370o7r22mvV2Nio22+/XatWrdILL7wgt9t9yPsEAAAAADgK2QAAAAAAjIBvfOMbtiT7kksu6Tf9M5/5jC3JfuONN2zbtm1JtsPhsNetW9dvvksvvdT2eDz2tm3b8tNaW1ttv99vn3nmmflp9913ny3JXrlyZb/lI5GIXVpaan/iE5/oN729vd0uKSnpN31PrHuTZHs8Hnvr1q35aW+88YYtyb7tttuGfByeeuopW5J97bXXDnjPsizbtm179erVtiT76quv7vf+l7/8ZVuS/dRTT9m2bdudnZ22x+Ox3/nOd+aXtW3b/trXvmZLsq+88sr8tJUrVw44LmeddZYtyf7f//3f/LRUKmXX1tbal19+eX7a97//fVuS/eCDD+anJRIJe968eYMe6wO55pprbMMw7FWrVuWn9fT02OXl5bYku7Gx0bbtQ/u8rrzySluS/c1vfrPfvCeccIK9dOnS/OvnnnvOlmTffffd/eZ79NFHB50OAAAAAJi46EodAAAAADCiPvvZz/Z7fc0110iS/vrXv+annXXWWVqwYEH+tWmaevzxx3XppZdqxowZ+el1dXX64Ac/qOeff17hcPiA2/3b3/6mYDCoK664Qt3d3fk/p9Op5cuXD6n183nnnaeZM2fmXy9atEiBQEDbt28/6LJ73H///TIMQ9/4xjcGvLen+/Y9x+KLX/xiv/e/9KUvSZL+8pe/SJKeeOIJpdNpXXPNNf26fv/85z8/5HiKi4v1oQ99KP/a4/Fo2bJl/fbp0Ucf1aRJk3TJJZfkp/l8Pn3iE58Y8nb2Xtcpp5yiJUuW5KeVl5frX/7lX/rNdzif17/+67/2e33GGWf024/77rtPJSUlesc73tFvnUuXLlVxcfFhtYAHAAAAAByd6EodAAAAADCiZs+e3e/1zJkz5XA4+o0tPX369H7zdHV1KR6Pa+7cuQPWN3/+fFmWpebm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G2/E+9//flx66aXYtm0bvvKVryAWi+G6665b8LeSJDGTEBERERERERERERERERFR2VQkMP6ud70L4+PjuPnmmzEyMoILL7wQ999/P/r6+iqxOSIiIiIiIiIiIiIiIiIionlVJDAOADfccANuuOGGSq2eiIiIiIiIiIiIiIiIiIioIHK1E9AsPB4PPv3pT8Pj8VQ7KURElMKymYioNrF8JiKqPSybiYhqD8tmIqLaxPK5dklCCFHtRBAREREREREREREREREREVUKe4wTEREREREREREREREREVFDY2CciIiIiIiIiIiIiIiIiIgaGgPjRERERERERERERERERETU0BgYJyIiIiIiIiIiIiIiIiKihsbAOBERERERERERERERERERNTQGxomIiIiIiIiIiIiIiIiIqKExME5ERERERERERERERERERA2NgXEiIiIiIiIiIiIiIiIiImpoDIwTEREREREREREREREREVFDY2CciIiIiIiIiIiIiIiIiIgaGgPjRERERERERERERERERETU0BgYJyIiIiIiIiIiIiIiIiKihsbAOBERERERERERERERERERNTQGxomIiIiIiIiIiIiIiIiIqKExME5ERERERERURt/73vcgSRIGBgaqnRQiIiIiIiIiSmFgnIiIiIiIiKgG7Nu3D7fccgsD6kREREREREQVIAkhRLUTQURERERERNQoLMuCYRjweDyQJKng391111249tpr8fDDD+Pyyy+vXAKJiIiIiIiImhB7jBMRERERERGVkaIo8Hq9RQXFiyWEQCKRqNj6iYiIiIiIiBoNA+NEREREREREZTR7jvF169bhLW95Cx5//HFs27YNXq8XGzZswPe///2s31x77bUAgCuuuAKSJEGSJOzYsSNrHQ888AAuvfRS+Hw+fPOb3wQAHDt2DNdeey26urrg9/vx8pe/HPfee29Wmnbs2AFJkvDjH/8Y//Iv/4JVq1bB6/Xi9a9/PY4cOVL5g0JERERERERUZRxKnYiIiIiIiKiMvve97+G6667D8ePHsW7dOqxbtw5erxfBYBB/8Rd/gf7+fnznO9/BCy+8gN27d+Pcc8/FsWPH8NWvfhX//u//jn/4h3/Ali1bAABvfOMb0dfXh3Xr1sHlcmFychIf/OAHsW7dOmzevBlbtmzB1q1bEY/H8Td/8zfo7u7GHXfcgd27d+Ouu+7C29/+dgBOYPyKK67ARRddBFmW8d73vhehUAif//zncd555+Hpp5+u5iEjIiIiIiIiqji12gkgIiIiIiIianQHDx7Eo48+issuuwwA8M53vhOrV6/Gd7/7XXzxi1/Ehg0bcNlll+Hf//3f8cY3vjHnHONHjhzB/fffjyuvvDLz2Uc/+lGMjo7isccew6tf/WoAwPXXX48LLrgAN954I972trdBls8MFpdMJrFr1y643W4AQGdnJ/7P//k/2LNnD84777wKHgEiIiIiIiKi6uJQ6kREREREREQVds4552SC4gDQ09ODzZs349ixYwWvY/369VlBcQD49a9/jW3btmWC4gAQCATwl3/5lxgYGMC+ffuylr/uuusyQXEAmTQVkw4iIiIiIiKiesTAOBEREREREVGFrVmzZs5nnZ2dmJ6eLngd69evn/PZiRMnsHnz5jmfp4diP3HiRN50dHZ2AkBR6SAiIiIiIiKqRwyMExEREREREVWYoig5PxdCFLwOn89XE+kgIiIiIiIiqkcMjBMRERERERHVAEmSiv7N2rVrcfDgwTmfHzhwIPM9ERERERERETEwTkRERERERFQTWlpaAADBYLDg31x99dV45pln8OSTT2Y+i8Vi+Na3voV169bhnHPOKXcyiYiIiIiIiOqSWu0EEBERERERERFw4YUXQlEUfO5zn0MoFILH48HrXvc69Pb2zvubm266CT/60Y9w1VVX4W/+5m/Q1dWFO+64A8ePH8dPf/pTyDLbwxMREREREREB7DFOREREREREVBOWL1+O22+/HWNjY/iLv/gLvPvd78a+ffvy/qavrw9PPPEE3vjGN+K2227DJz7xCbjdbvzyl7/E29/+9iVKOREREREREVHtk4QQotqJICIiIiIiIiIiIiIiIiIiqhT2GCciIiIiIiIiIiIiIiIioobGwDgRERERERERERERERERETU0BsaJiIiIiIiIiIiIiIiIiKihMTBOREREREREREREREREREQNjYFxIiIiIiIiIiIiIiIiIiJqaAyMExERERERERERERERERFRQyt7YPzRRx/FW9/6VvT390OSJPz85z8v6vdCCITDYQghyp00IiIiIiIiIiIiIiIiIiJqQmUPjMdiMWzduhVf//rXS/p9JBJBe3s7IpFImVNGRERERERERERERERERETNSC33Cq+6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Q1UkJHQL5/a3YUNPAJppQZYknJqK48RUHAGPihaPgg6fG7/ZP4pQ3MCjh8YRWWQjgkKpsoQtK9rwZ69YixaPihOTcXhdMnpbvbjxx7tKHjlgU28AI6HkvI0hZAlYv6wFZ/W14vBYdEl6UBERERGwqtOHN2zpw6pOHyRJgkeVEddNJA0bg9MJdAXcePb4FAxbYMvyVvS1eRHVTDw7MAXdtJEwnGeZiYi2ZM8r1Lxa3Api8/QQJyIiIqL69YYtffjP919a7WQQKhAY13Udfr8fd911F6655prM5+9///sRDAZxzz33ZC1/yy234NZbb52zHgbGK2f36RCeP7nw/NhEywIexDQTkoR5h28jaiY+t4I2rwuaacEWAuFEdSpH3aqM5W1etPlc6O/wwqMqmSEtY5qJo+NRnJjM3wOeiIiIiIiIiIiIiCpvdZcPrzu7r9rJIFRgKPWJiQlYloW+vuwT3NfXhwMHDsxZ/hOf+ARuvPHGzN/pHuNUOeevasf5q9qrnQwiIqqArhY3Vnf5q50MIiIiIiIiIiIiIqKaUpE5xovh8Xjg8XiqnQwiIiIiIiIiIiIiIiIiImpQcrlXuGzZMiiKgtHR0azPR0dHsXz58nJvrm5omoZbbrklaz51IiKqLpbNRES1ieUzEVHtYdlMRFR7WDYTEdUmls+1q+xzjAPA9u3bsW3bNtx2220AANu2sWbNGtxwww246aab8v5WCIFIJILW1lZIklTupFVNOBxGe3s7504nIqohLJuJiGoTy2ciotrDspmIqPawbCYiqk0sn2tXRYZSv/HGG/H+978fl156KbZt24avfOUriMViuO666xb8rSRJzCRERERERERERERERERERFQ2FQmMv+td78L4+DhuvvlmjIyM4MILL8T999+Pvr6+SmyOiIiIiIiIiIiIiIiIiIhoXhUJjAPADTfcgBtuuKFSqyciIiIiIiIiIiIiIiIiIiqIXO0ENAuPx4NPf/rT8Hg81U4KERGlsGwmIqpNLJ+JiGoPy2YiotrDspmIqDaxfK5dkhBCVDsRRERERERERERERERERERElcIe40RERERERERERERERERE1NAYGCciIiIiIiIiIiIiIiIioobGwDgRERERERERERERERERETU0BsaJiIiIiIiIiIiIiIiIiKihMTBOREREREREREREREREREQNjYFxIiIiIiIiIiIiIiIiIiJqaAyMExERERERERERERERERFRQ2NgnIiIiIiIiIiIiIiIiIiIGhoD40RERERERERERERERERE1NAYGCciIiIiIiIiIiIiIiIioobGwDgRERERERERERERERERETU0BsaJiIiIiIiIiIiIiIiIiKihMTBOREREREREREREREREREQNjYFxIiIiIiIiIiIiIiIiIiJqaAyMExERERERERERERERERFRQ2NgnIiIiIiIiKgAAwMDkCQJ3/ve9zKf3XLLLZAkqXqJmseOHTsgSRJ27NhR7aQQERERERER1QQGxomIiIiIiIiIiIiIiIiIqKExME5ERERERERUon/8x39EIpGodjKIiIiIiIiIaAEMjBMRERERERGVSFVVeL3eaiej7ti2jWQyWe1kEBERERERURNhYJyIiIiIiIgaWiQSwUc+8hGsW7cOHo8Hvb29eOMb34jnn38eAHD55ZfjvPPOw3PPPYdXvvKV8Pl8WL9+PW6//fYF1z3fHOP//d//jW3btsHv96OzsxOvec1r8OCDD2Ytc9999+Gyyy5DS0sLWltb8eY3vxl79+4tev9Onz6Na665Bi0tLejt7cVHP/pRaJqWc9mf/OQnuOSSS+Dz+bBs2TK8973vxeDgYNYyH/jABxAIBDA4OIhrrrkGgUAAPT09+Nu//VtYlpW1bCwWw8c+9jGsXr0aHo8Hmzdvxhe/+EUIIbKWkyQJN9xwA374wx/i3HPPhcfjwf3331/0vhIRERERERGVioFxIiIiIiIiamh/9Vd/hW984xt4xzvegf/4j//A3/7t38Ln82H//v2ZZaanp3H11Vfjkksuwec//3msWrUKf/3Xf43vfOc7RW/v1ltvxfve9z64XC585jOfwa233orVq1fjd7/7XWaZH/zgB3jzm9+MQCCAz33uc/jUpz6Fffv24dWvfjUGBgYK3lYikcDrX/96PPDAA7jhhhvwyU9+Eo899hg+/vGPz1n2e9/7Ht75zndCURR89rOfxfXXX4+7774br371qxEMBrOWtSwLV155Jbq7u/HFL34Rr33ta/GlL30J3/rWtzLLCCHwR3/0R/i3f/s3vOlNb8KXv/xlbN68GX/3d3+HG2+8cc72f/e73+GjH/0o3vWud+GrX/0q1q1bV/B+EhERERERES2WJGY34yYiIiIiIiJqIB0dHXjve9+Lr33tazm/v/zyy/HII4/gS1/6Uiagq+s6tm/fjqGhIZw+fRoulwsDAwNYv349vvvd7+IDH/gAAKfH+K233prpIX3kyBFs3rwZb3vb23DXXXdBls+0RxdCQJIkRKNRrF69Gtdee21WoHl0dBSbN2/GO9/5zqzP8/nqV7+Kj3zkI/jxj3+Ma6+9FgAQj8exdetWHDlyBA8//DAuv/xyGIaBVatWobe3F88++2xm+Pd7770Xb3nLW3DzzTfj1ltvBeD0GL/jjjvwmc98Bp/61Kcy27r44oshyzJ27twJALjnnntwzTXX4J//+Z/xyU9+MrPctddei5/+9Kc4fPgwNm7cCMDpMS7LMnbv3o1zzjmnoH0jIiIiIiIiKif2GCciIiIiIqKG1tHRgaeffhpDQ0PzLqOqKj74wQ9m/na73fjgBz+IsbExPPfccwVv6+c//zls28bNN9+cFRQHkBly/Te/+Q2CwSDe/e53Y2JiIvOfoijYvn07Hn744YK39+tf/xorVqzAn/zJn2Q+8/v9+Mu//Mus5Xbu3ImxsTF86EMfypoT/c1vfjPOPvts3HvvvXPW/Vd/9VdZf1922WU4duxY1rYVRcHf/M3fZC33sY99DEII3HfffVmfv/a1r2VQnIiIiIiIiKqGgXEiIiIiIiJqaJ///OexZ88erF69Gtu2bcMtt9ySFeAFgP7+frS0tGR9dtZZZwFAUUObHz16FLIs5w0AHz58GADwute9Dj09PVn/PfjggxgbGyt4eydOnMCmTZvmzHO+efPmOcvl+hwAzj777Mz3aV6vFz09PVmfdXZ2Ynp6Omud/f39aG1tzVpuy5YtWdtMW79+fSG7RERERERERFQRarUTQERERERERFRJ73znO3HZZZfhZz/7GR588EF84QtfwOc+9zncfffduOqqq5Y8PbZtA3DmGV++fPmc71W1+q/qiqKUfZ0+n6/s6yQiIiIiIiIqVPXftomIiIiIiIgqbMWKFfjQhz6ED33oQxgbG8PFF1+Mf/mXf8kExoeGhhCLxbJ6jR86dAgAsG7duoK3s3HjRti2jX379uHCCy+cdxkA6O3txRve8IbSdihl7dq12LNnT2b+8rSDBw/OWS79+ete97qs7w4ePJj5vtht//a3v0UkEsnqNX7gwIGsbRIRERERERHVAg6lTkRERERERA3LsiyEQqGsz3p7e9Hf3w9N0zKfmaaJb37zm5m/dV3HN7/5TfT09OCSSy4peHvXXHMNZFnGZz7zmUzP8DQhBADgyiuvRFtbG/7v//2/MAxjzjrGx8cL3t7VV1+NoaEh3HXXXZnP4vE4vvWtb2Utd+mll6K3txe333571n7fd9992L9/P9785jcXvM2Z27YsC1/72teyPv+3f/s3SJJUld74RERERERERPNhj3EiIiIiIiJqWJFIBKtWrcKf/MmfYOvWrQgEAvjtb3+LZ599Fl/60pcyy/X39+Nzn/scBgYGcNZZZ+HOO+/Erl278K1vfQsul6vg7W3atAmf/OQn8U//9E+47LLL8Md//MfweDx49tln0d/fj89+9rNoa2vDN77xDbzvfe/DxRdfjD/90z9FT08PTp48iXvvvRevetWr5gSb53P99dfja1/7Gv7sz/4Mzz33HFasWIEf/OAH8Pv9Wcu5XC587nOfw3XXXYfXvva1ePe7343R0VF89atfxbp16/DRj3604H1Me+tb34orrrgCn/zkJzEwMICtW7fiwQcfxD333IOPfOQjmZ7xRERERERERLWAgXEiIiIiIiJqWH6/Hx/60Ifw4IMP4u6774Zt29i0aRP+4z/+A3/913+dWa6zsxN33HEHPvzhD+Pb3/42+vr68LWvfQ3XX3990dv8zGc+g/Xr1+O2227DJz/5Sfj9flxwwQV43/vel1nmPe95D/r7+/Gv//qv+MIXvgBN07By5UpcdtlluO6664rav4ceeggf/vCHcdttt8Hv9+N//a//hauuugpvetObspb9wAc+AL/fj3/913/F3//936OlpQVvf/vb8bnPfQ4dHR1F76csy/jFL36Bm2++GXfeeSe++93vYt26dfjCF76Aj33sY0Wvj4iIiIiIiKiSJJEey42IiIiIiIioCV1++eWYmJjAnj17qp0UIiIiIiIiIqoQzjFOREREREREREREREREREQNjUOpExEREREREdUYXdcxNTWVd5n29nb4fL4lShERERERERFRfSt7j/FHH30Ub33rW9Hf3w9JkvDzn/+83JsgIiIiIiIiamhPPPEEVqxYkfe/O++8s9rJJCIiIiIiIqobZe8xHovFsHXrVvz5n/85/viP/7jcqyciIiIiIiIqqx07dlQ7CXNs3boVv/nNb/Iuc+655y5RaoiIiIiIiIjqnySEEBVbuSThZz/7Ga655ppKbYKIiIiIiIiIiIiIiIiIiCivqs8xrmkaNE3L/C2EgK7rWLZsGSRJqmLKiIiIiIiIiIiIiIiIiIioEZR9jvFiffazn0V7e3vmv46ODvT29iISiVQ7aURERERERERERERERERE1ACqHhj/xCc+gVAolPnv1KlT1U4SERERERERERERERERERE1kKoPpe7xeODxeKqdDCKiDCEEp3IgoqrKVw6xjCIiIiIiIiIiIiIqXtV7jBMRETUqIUS1k0BEVFW1WA7WYpqIiIiIiIiIiKjyyt5jPBqN4siRI5m/jx8/jl27dqGrqwtr1qwp9+aIiPJiz0oiIiIiosbD53wiIiIiIiIqliTK3GVix44duOKKK+Z8/v73vx/f+973Fvx9OBxGe3s7QqEQ2traypk0oppXL5U79ZJOoLS01tP+UW1jXqJS2baALHModap/tZhfazFNRFQ8XstEC+N1QkRERESUrew9xi+//HIOT0hERESUUlIDnbzrA1i/SURERERERERERFQczjFOGfM1aGBDh/LhsawPPE1EVIylLttZRFE9qcV7ai2miYiIiIiIiIiIKo+BcSJqaKVUfrO+nMqFwRciana1WAzWYpqIiIiIiIiIiKjyGBgnoobGym+qJuY/AkpsoMNWFURERHnxVklERERERETFYmCcqAC5AhSVCFrUS+VOvaSTqBgMRFKllJKz8s8xzrxKtBi8hogaA69kooXxlkdERERElI2BccrgC1PlLXSM6+UU1Es6iYhma4SAWP3vATWTRrjmqPqYj4iISsPSk4iIiIgoGwPjlDHfCxProcqHh7I+sPKViIrBIoNofrw8iIiIiIiIiIioVjAwTgtihSbVs1KC3MzzVKiF8hcbWTSHhc5ySeUQsw5RxfDyImoMfM4iIiIiIiKiYjEwTlQi1sPUB54mKlQlrmnmPwJKnWN8/l/x/kO0OLyGiBoDL2UiIiIiIiIqFgPjlMEW9/PLdWhKCnQ0SO/SekknUTGYq5sDiy8iovrDspuIqDR8dyciIiIiysbAOGXMP8c4X6TKdQQWHG63TNuptHpJJxHRbJUov5b6PpmvNzlRreFjJJUDsxERUWlYfhIRERERZWNgnBbEF6nm0KgNIErZrQY9FFQBzCsEFDLHeAnrZN6iBsGGHEREREREREREVCsYGCcqkRCiYYPJzY6V+M2plOu5EgFRajzlLlOYr4gWh/d5osbA+yEREREREREVi4FxymDFwvzKFQDnMV56rPymQlVkiG3mv5rDBk1ExGKg/rDsplz4nEW0MBafRERERETZGBinjPkqFvgitXTDyVfzWBezbeYJIqpXlZljvAIrJWoQvD6oHJiNiIhKwwYkRERERETZGBinBfFFqnwWOpbVPNbFbLme8gQr5KmS2IONgALKds4xTkRERERERERERFR1DIwTlUiAgYtGxfPanEoKXpY/GVRh9XJ911MDJCKiSquXspuIiIiIiIiIahsD40QFaIbKOPZ8pWZXiUAkLyuqBOYrosXhNVR/2FiIcuG1TERERERERMViYJwy5qtYYIVD+SrjavlYFjWUeg3vBxFRPvUSXGE5S42CeZmIiKh6eB8mIiIiIsrGwDhRDeFLa/nxmFIlMX8RsHA+KHc+qZfgPlGt4jVERERERERERNScGBgnKpEQjTW/MAN81OxKm2OcF069qUZZV0o+Yc6iRsFyksqBz6lEREREREREVA4MjBMVgJVxzYXnm4hqGcsoIiIi3g+JiIiIiIioeAyMUwbnGK+8Wj6W7NF1Bo8FlUstX/NU2wQzDzWIWszKtZgmIioen9mJiIiIiIioWAyMUwYrFppbMZXE9VShzHxNlbTg3NLMf01h6ecYJ6LF4DVERETNop7e3YmIiIiIlgID47QgBnZyExBF9+hb6FjWy0trPeWJejmmVH3MK82hEud5wbK9pHUSNQbmZSoH3qOJiEpTT+/uRERERERLgYFxohrCl1YiIloIh1knombDZ2QiIiIiIiIiKgcGximDc4zPr1zHoJaPZS2nbanxWDQnVro3h2qc51IC2SyHqFGwIQcRVQqLFyIiIiIiIioWA+NEBWDArLnwbFOhlnpuaapNPM9E9YXB+vrDU0a5MFsQLYzlJxERERFRNgbGKYPvS8URovzHrF5eWuslnQDzNRWulHxdibmlqbKqUX6VtMk8P2K+IlocXkP1h+eMiKg0LD+JiIiIiLIxME4L4otU+Sx0LKt5rIvpFV9PeYK9woio0pa6lGGxRvWE2ZWIiIiIiIiIiGoFA+O0IAYWyznHeO0eyxpOGtGS4CXQHKpxnisxGgERlY7PPEREREREREREzYmBccqo5aBttfHINBdeC1QoZhUiovxYTlI58NmMcmG+ICIiIiIiomIx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jjzySP3jH/+QJB1++OHae++99dJLL2nKlClKp9MaN26cbrnllm2uu6N3jN9zzz06+OCDlclkNHDgQH3qU5/Sn//856JlHn74YR122GGqqKhQVVWVZs6cqddee61L+5bP53XBBRfowAMPVE1NjSoqKnTYYYfpiSeeaLOs67q67rrrtM8++yiVSmno0KH63Oc+pxdffLEkaZ89e7YqKyv1zjvvaPr06aqoqNCoUaP04x//WJ7nSfLf2z506FBJ0kUXXSTDMGQYhhYsWBCt569//Wu0rQEDBuiYY47RG2+8UbSt8Dy8/vrrOvnkkzVw4EAdeuihXTqWAAAAAAC0RmAcAAAAANCnfOtb39LNN9+sL37xi7rpppt09tlnK51OFwVXN23apM9//vM68MADdcUVV2j06NH69re/rTvvvLPL27vooot06qmnKh6P68c//rEuuugijRkzRn/961+jZe6++27NnDlTlZWVWrhwoc4//3y9/vrrOvTQQ7Vy5cpOb6uurk633367Dj/8cC1cuFALFizQ+vXrNX36dC1durRo2TPOOEPz5s3TmDFjtHDhQs2fP1+pVEp///vfS5Z2x3H0uc99TsOHD9cVV1yhAw88UBdeeKEuvPBCSdLQoUN18803S5KOO+443X333br77rt1/PHHS5Ief/xxTZ8+XevWrdOCBQt01lln6ZlnntHUqVPbPU4nnHCCmpqadOmll+ob3/hGp48jAAAAAABbMrxwWjcAAAAAAH3AgAED9NWvflU33nhju98ffvjhWrJkia6++mqdddZZkvw7sSdPnqzVq1frgw8+UDwe18qVKzVu3DgtWrRIs2fPluTfqXzRRRdFd0AvX75cu+++u4455hjdf//9Ms2W+eWe58kwDDU0NGjMmDE64YQTdNttt0Xfr127VrvvvrtOPPHEos+3xnEcOY6jRCIRfVZbW6uJEydq5syZuuOOOyRJTzzxhD7zmc/ozDPP1HXXXVe0jjBd3Z322bNna/Hixfrud7+r66+/PlrP0Ucfrccee0yrVq3SkCFDtGHDBg0dOlQXXnhh0Z3ikjRp0iStXr1ab7zxhgYNGiRJ+te//qVJkybpq1/9qhYvXlx0Hk466STde++9nTp2AAAAAABsDXeMAwAAAAD6lAEDBui5557T6tWrO1wmFovpm9/8ZvR3IpHQN7/5Ta1bt04vvfRSp7f1+9//Xq7r6oILLigKLEuKHrn+2GOPqba2VieddJI2bNgQ/bMsS5MnT273MegdsSwrCoq7rquNGzfKtm0ddNBB0aPiJem3v/2tDMOI7tRuL12lSvvcuXOL1jN37lzl83k9/vjjW923Dz/8UEuXLtXs2bOjoLgk7bvvvjryyCP1v//7v21+861vfWur6wQAAAAAoLNiPZ0AAAAAAAC64oorrtCsWbM0ZswYHXjggfr85z+vr33ta9p1112jZUaNGqWKioqi302YMEGS/x7sT37yk53a1ttvvy3TNLXnnnt2uMxbb70lSfrMZz7T7vfV1dWd2lZo8eLFuvrqq/Xvf/9bhUIh+nzcuHFF6Ro1alRRgHlHpN00zaLjLBUf16159913JUm77757m+/22GMPPfroo2psbCw6b633GQAAAACAj4PAOAAAAACgTznxxBN12GGH6YEHHtCf//xnXXnllVq4cKF+97vfacaMGTs8Pa7rSvLf1T1ixIg238dine9633PPPZo9e7aOPfZYnXPOORo2bJgsy9Jll12mt99+u9vSHOrOtJdCOp3u0e0DAAAAAPoPAuMAAAAAgD5n5MiR+s53vqPvfOc7WrdunQ444AD95Cc/iQLjq1evbnP38ZtvvilJ2mWXXTq9nfHjx8t1Xb3++uvaf//9O1xGkoYNG6Zp06Zt3w4F7r//fu2666763e9+Fz3uXFKbR6aPHz9ejz76qDZu3NjhXeOlSLvrunrnnXeiu8Sltse1dbpbGzt2rCRp2bJlbb7797//rSFDhrS5yx8AAAAAgO7CO8YBAAAAAH2G4zjavHlz0WfDhg3TqFGjlMvlos9s29att94a/Z3P53Xrrbdq6NChOvDAAzu9vWOPPVamaerHP/5xdHd1yPM8SdL06dNVXV2tSy+9tOjR56H169d3enuWZRWtW5Kee+45Pfvss0XLffGLX5TnebrooovarCP8banSfuONNxat58Ybb1Q8HtdnP/tZSVImk5Ek1dbWFv1u5MiR2n///bV48eKi71599VX9+c9/1uc///k22wIAAAAAoLtwxzgAAAAAoM+or6/X6NGj9aUvfUn77befKisr9fjjj+uFF17Q1VdfHS03atQoLVy4UCtXrtSECRN03333aenSpbrtttsUj8c7vb3ddttN5557ri6++GIddthhOv7445VMJvXCCy9o1KhRuuyyy1RdXa2bb75Zp556qg444AB95Stf0dChQ/Xee+/poYce0tSpU4uCyVvzhS98Qb/73e903HHHaebMmVqxYoVuueUW7bnnnmpoaIiWO+KII3Tqqafq+uuv11tvvaXPfe5zcl1XTz31lI444gjNnTu3JGlPpVJ65JFHNGvWLE2ePFkPP/ywHnroIf3P//yPhg4dKsl//Pmee+6p++67TxMmTNCgQYO09957a++999aVV16pGTNm6JBDDtEZZ5yh5uZm3XDDDaqpqdGCBQs6fV4AAAAAAOgqAuMAAAAAgD4jk8noO9/5jv785z/rd7/7nVzX1W677aabbrpJ3/72t6PlBg4cqMWLF+u73/2ufv7zn2v48OG68cYb9Y1vfKPL2/zxj3+scePG6YYbbtC5556rTCajfffdV6eeemq0zMknn6xRo0bp8ssv15VXXqlcLqeddtpJhx12mE477bROb2v27Nlas2aNbr31Vj366KPac889dc899+g3v/mN/va3vxUtu2jRIu2777664447dM4556impkYHHXSQpkyZUrK0W5alRx55RN/+9rd1zjnnqKqqShdeeKEuuOCCouVuv/12ffe739X3v/995fN5XXjhhdp77701bdo0PfLII9Fv4vG4Pv3pT2vhwoUaN25cp48TAAAAAABdZXitn88GAAAAAEAfd/jhh2vDhg169dVXezop/crs2bN1//33F925DgAAAABAX8E7xgEAAAAAAAAAAAAA/RqPUgcAAAAAoMTy+bw2bty41WVqamqUTqd3UIoAAAAAACgvBMYBAAAAACixZ555RkccccRWl1m0aJFmz569YxIEAAAAAECZ6fZ3jD/55JO68sor9dJLL+nDDz/UAw88oGOPPbY7NwEAAAAAQJ+yadMmvfTSS1tdZq+99tLIkSN3UIoAAAAAACgv3X7HeGNjo/bbbz+dfvrpOv7447t79QAAAAAA9DkDBw7UtGnTejoZAAAAAACUrW4PjM+YMUMzZszY7t97nqf6+npVVVXJMIxuTBkAAAAAAAAAAAAAoBz1+DvGc7mccrlc9HddXZ3GjBmjzZs3q7q6ugdTBgAAAAAAAAAAAADoD8yeTsBll12mmpqa6N+YMWN6OkkAAAAAAAAAAAAAgH6kxwPjP/rRj7R58+bo3/vvv9/TSUKZ8zyvp5NQcp3Zx3I4DkBX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S7sppQBQPkpVNnfHegGgnJVyXKO1efPm6U9/+pPeeustGYax3dsCgHJQqrL5C1/4goYPH6477rgjWu6LX/yi0um07rnnno+dbgDoz0pRNjc3N6uqqkoPPvigZs6cGS134IEHasaMGbrkkku6I+noAI9S3w5/+MMfdNBBB+mEE07QsGHDNGnSJP385z/v0jruuOMOTZs2rU3ncc6cOZo5c6amTZvWnUkGgH6vlGXzW2+9pVGjRmnXXXfVKaecovfee687kw4A/VapyubuWC8AlLNStp1D+Xxe99xzj04//XSC4gDQCaUqm6dMmaK//OUvevPNNyVJL7/8sp5++mnNmDGjW9MPAP1RKcpm27blOI5SqVTRcul0Wk8//XS3pR3tIzC+Hd555x3dfPPN+sQnPqFHH31U3/72t3XmmWdq8eLFnfr96tWr9fDDD+vrX/960ee//vWv9Y9//EOXXXZZKZINAP1aqcrmyZMn66677tIjjzyim2++WStWrNBhhx2m+vr6UuwGAPQrpSqbP+56AaDclap8bu33v/+9amtrNXv27G5KNQD0b6Uqm+fPn6+vfOUrmjhxouLxuCZNmqR58+bplFNOKcVuAEC/UoqyuaqqSocccoguvvhirV69Wo7j6J577tGzzz6rDz/8sFS7ggCPUt8OiURCBx10kJ555pnoszPPPFMvvPCCnn322W3+/rLLLtPVV1+t1atXK5FISJLef/99HXTQQXrssceid4sffvjhPEodADqpFGVze2prazV27Fhdc801OuOMM7ol7QDQX5WqbP646wWAcrcj2s7Tp09XIpHQH//4x25LNwD0Z6Uqm3/961/rnHPO0ZVXXqm99tpLS5cu1bx583TNNddo1qxZJdkXAOgvSlU2v/322zr99NP15JNPyrIsHXDAAZowYYJeeuklvfHGGyXZF/i4Y3w7jBw5UnvuuWfRZ3vssUenHq3reZ7uvPNOnXrqqUUXwUsvvaR169bpgAMOUCwWUywW05IlS3T99dcrFovJcZxu3w8A6E9KUTa3Z8CAAZowYYKWL1/+sdILAOWgVGXzx1kvAKD0bed3331Xjz/++FbvKAcAFCtV2XzOOedEd43vs88+OvXUU/X973+fp5YCQCeUqmweP368lixZooaGBr3//vt6/vnnVSgUtOuuu3Zr+tEWgfHtMHXqVC1btqzoszfffLPD92q1tmTJEi1fvrzNXYaf/exn9corr2jp0qXRv4MOOkinnHKKli5dKsuyunUfAKC/KUXZ3J6Ghga9/fbbGjly5HanFQDKRanK5o+zXgBA6dvOixYt0rBhwzRz5syPnVYAKBelKpubmppkmsVhAMuy5Lrux0swAJSBUrebKyoqNHLkSG3atEmPPvqojjnmmI+dZmwdgfHt8P3vf19///vfdemll2r58uW69957ddttt2nOnDnRMj/60Y/0ta99rc1v77jjDk2ePFl777130edVVVXae++9i/5VVFRo8ODBbZYFALRVirJZks4++2wtWbJEK1eu1DPPPKPjjjtOlmXppJNOKun+AEB/UKqyuTPrBQB0rFTlsyS5rqtFixZp1qxZisViJdsHAOhvSlU2H3300frJT36ihx56SCtXrtQDDzyga665Rscdd1xJ9wcA+oNSlc2PPvqoHnnkEa1YsUKPPfaYjjjiCE2cOFGnnXZaSfcHBMa3y3/8x3/ogQce0K9+9Svtvffeuvjii3XttdfqlFNOiZb58MMP2zxKYfPmzfrtb3/LO2kBoARKVTZ/8MEHOumkk7T77rvrxBNP1ODBg/X3v/9dQ4cOLen+AEB/UKqyuTPrBQB0rJTjGo8//rjee+89nX766SVLPwD0R6Uqm2+44QZ96Utf0ne+8x3tscceOvvss/XNb35TF198cUn3BwD6g1KVzZs3b9acOXM0ceJEfe1rX9Ohhx6qRx99VPF4vKT7A8nwPM/r6UQAAAAAAAAAAAAAAFAq3DEOAAAAAAAAAAAAAOjXCIwDAAAAAAAAAAAAAPo1AuMAAAAAAAAAAAAAgH6NwDgAAAAAAAAAAAAAoF8jMA4AAAAAAAAAAAAA6NcIjAMAAAAAAAAAAAAA+jUC4wAAAAAAAAAAAACAfo3AOAAAAAAAAAAAAACgXyMwDgAAAACIrFy5UoZhaOnSpT2dFGCr8vm8dtttNz3zzDOSel/e/eQnP6nf/va3PZ0MAAAAAOhRTz75pI4++miNGjVKhmHo97//fZfX4XmerrrqKk2YMEHJZFI77bSTfvKTn3R5PQTGAQAAAADd4rXXXtMXv/hF7bLLLjIMQ9dee22bZerr6zVv3jyNHTtW6XRaU6ZM0QsvvNCp9d91113ad999lUqlNGzYMM2ZMyf6bsGCBTIMo82/ioqKdtf161//WoZh6Nhjjy363PM8XXDBBRo5cqTS6bSmTZumt956q2iZf/zjHzryyCM1YMAADR48WP/1X/+lhoaGLqVXkv71r3/psMMOUyqV0pgxY3TFFVd06jisWrVKX/3qVzV48GCl02nts88+evHFF6Pv2zsOhmHoyiuv7NI+vPfee5o5c6YymYyGDRumc845R7ZtR99/+OGHOvnkkzVhwgSZpql58+a1SWtn8sRll12m//iP/1BVVZWGDRumY489VsuWLdvmcbjllls0btw4TZkypRNHrfOefvppTZ06NTq+EydO1E9/+tOiZRzH0fnnn69x48YpnU5r/Pjxuvjii+V5XrTMeeedp/nz58t13W5NHwAAAAD0JY2Njdpvv/30s5/9bLvX8b3vfU+33367rrrqKv373//WH/7wBx188MFdXg+BcQAAAADAx+I4jlzXVVNTk3bddVddfvnlGjFiRLvLfv3rX9djjz2mu+++W6+88oqOOuooTZs2TatWrdrqNq655hqde+65mj9/vl577TU9/vjjmj59evT92WefrQ8//LDo35577qkTTjihzbpWrlyps88+W4cddlib76644gpdf/31uuWWW/Tcc8+poqJC06dPVzablSStXr1a06ZN02677abnnntOjzzyiF577TXNnj27S+mtq6vTUUcdpbFjx+qll17SlVdeqQULFui2227b6nHYtGmTpk6dqng8rocfflivv/66rr76ag0cODBaZsvjcOedd8owDH3xi1/s9D44jqOZM2cqn8/rmWee0eLFi3XXXXfpggsuiJbJ5XIaOnSozjvvPO23337tprczeWLJkiWaM2eO/v73v+uxxx5ToVDQUUcdpcbGxg6Pg+d5uvHGG3XGGWds9Xhtj4qKCs2dO1dPPvmk3njjDZ133nk677zzis7NwoULdfPNN+vGG2/UG2+8oYULF+qKK67QDTfcEC0zY8YM1dfX6+GHH+72NAIAAABAXzFjxgxdcsklOu6449r9PpfL6eyzz9ZOO+2kiooKTZ48WX/729+i79944w3dfPPNevDBB/Wf//mfGjdunA488EAdeeSRXU+MBwAAAAAoK47jeAsXLvTGjx/vJRIJb8yYMd4ll1zieZ7nrVixwpPk/fa3v/UOP/xwL51Oe/vuu6/3zDPPRL9ftGiRV1NT4z344IPeHnvs4VmW5a1YsaJoG2PHjvV++tOfFn3W1NTkWZbl/elPfyr6/IADDvDOPffcDtO7ceNGL51Oe48//nin93Hp0qWeJO/JJ58s+ty2bW/KlCne7bff7s2aNcs75phjou9c1/VGjBjhXXnlldFntbW1XjKZ9H71q195nud5t956qzds2DDPcZxomX/961+eJO+tt97qdHpvuukmb+DAgV4ul4s+++EPf+jtvvvuW92vH/7wh96hhx667QPQyjHHHON95jOfif7uzD787//+r2eaprdmzZpomZtvvtmrrq4uSnPo05/+tPe9731vq+loL0+0Z926dZ4kb8mSJR0u88ILL3imaXp1dXXRZ53Ju57nebfddps3evRoL51Oe8cee6x39dVXezU1NVtN03HHHed99atfjf6eOXOmd/rppxctc/zxx3unnHJK0WennXZa0e8AAAAAoJxJ8h544IGiz77+9a97U6ZM8Z588klv+fLl3pVXXuklk0nvzTff9DzP8xYuXOhNmDDBu+qqq7xddtnFGzt2rHfGGWd4H330UZe3zx3jAAAAAFBmfvSjH+nyyy/X+eefr9dff1333nuvhg8fXrTMueeeq7PPPltLly7VhAkTdNJJJxU9RrupqUkLFy7U7bffrtdee03Dhg3b5nZt25bjOEqlUkWfp9NpPf3009HfCxYs0C677BL9/dhjj8l1Xa1atUp77LGHRo8erRNPPFHvv/9+h9u6/fbbNWHChDZ3hf/4xz/WsGHD2r3TeMWKFVqzZo2mTZsWfVZTU6PJkyfr2WefleTPZE8kEjLNlu50Op2WpGgfOpPeZ599Vp/61KeUSCSiz6ZPn65ly5Zp06ZNHe7XH/7wBx100EE64YQTNGzYME2aNEk///nPO1x+7dq1euihh4r2tzP78Oyzz2qfffYpyhfTp09XXV2dXnvttQ631x02b94sSRo0aFCHyzz11FOaMGGCqqqq2ny3tbz7f//3f/rWt76l733ve1q6dKmOPPLIbb6X7p///KeeeeYZffrTn44+mzJliv7yl7/ozTfflCS9/PLLevrppzVjxoyi3x588MF66qmnOrfjAAAAAFBm3nvvPS1atEi/+c1vdNhhh2n8+PE6++yzdeihh2rRokWSpHfeeUfvvvuufvOb3+gXv/iF7rrrLr300kv60pe+1OXtERgHAAAAgDJSX1+v6667TldccYVmzZql8ePH69BDD9XXv/71ouXOPvtszZw5UxMmTNBFF12kd999V8uXL4++LxQKuummmzRlyhTtvvvuymQy29x2VVWVDjnkEF188cVavXq1HMfRPffco2effVYffvhhtNyQIUM0fvz46O933nlHruvq0ksv1bXXXqv7779fGzdu1JFHHql8Pt9mO9lsVr/85S/bBL+ffvpp3XHHHR0GktesWSNJbSYJDB8+PPruM5/5jNasWaMrr7xS+XxemzZt0vz58yUp2ofOpHfNmjXtbqd1Otrzzjvv6Oabb9YnPvEJPfroo/r2t7+tM888U4sXL253+cWLF6uqqkrHH3989Fln9mF70/dxua6refPmaerUqdp77707XO7dd9/VqFGj2v1ua3n3hhtu0IwZM3T22WdrwoQJ+s53vtMmmB0aPXq0ksmkDjroIM2ZM6foGpk/f76+8pWvaOLEiYrH45o0aZLmzZunU045pWgdo0aN0vvvv897xgEAAACgHa+88oocx9GECRNUWVkZ/VuyZInefvttSX4/MZfL6Re/+IUOO+wwHX744brjjjv0xBNPaNmyZV3aHoFxAAAAACgjb7zxhnK5nD772c9udbl99903+v+RI0dKktatWxd9lkgkipbprLvvvlue52mnnXZSMpnU9ddfr5NOOqno7uW5c+fqL3/5S/S367oqFAq6/vrrNX36dH3yk5/Ur371K7311lt64okn2mzjgQceUH19vWbNmhV9Vl9fr1NPPVU///nPNWTIkC6nO7TXXntp8eLFuvrqq5XJZDRixAiNGzdOw4cPj/ahq+ltz1NPPVU0KPDLX/4yWvcBBxygSy+9VJMmTdJ//dd/6Rvf+IZuueWWdtdz55136pRTTim6S78z+9BT5syZo1dffVW//vWvt7pcc3NzmycPhLaWd5ctW6aDDz64aPkt/w499dRTevHFF3XLLbfo2muv1a9+9avou//3//6ffvnLX+ree+/VP/7xDy1evFhXXXVVmwkK6XQ6GsQBAAAAABRraGiQZVl66aWXtHTp0ujfG2+8oeuuu06S36+LxWKaMGFC9Ls99thDkn/HeVfEui/pAAAAAIDeLnxk9rbE4/Ho/w3DkKSiu17T6XT0eVeMHz9eS5YsUWNjo+rq6jRy5Eh9+ctf1q677trhb8Lg5p577hl9NnToUA0ZMqTdTvDtt9+uL3zhC0V3PL/99ttauXKljj766OizcH9isZiWLVumESNGSPIfPx5uM/x7//33j/4++eSTdfLJJ2vt2rWqqKiQYRi65ppron3oTHpHjBihtWvXFqU7/HvEiBHaZZddtHTp0ui7cF9GjhxZtF7JHxD47W9/2+Y4PPXUU1q2bJnuu+++Nt9tax9GjBih559/vsP0lcLcuXP1pz/9SU8++aRGjx691WWHDBmiV155pd3vtpV3O2vcuHGSpH322Udr167VggULdNJJJ0mSzjnnnOiu8XCZd999V5dddlnRhIyNGzeqoqKi09cdAAAAAJSTSZMmyXEcrVu3rs2r0EJTp06Vbdt6++23o6fLha+1Gjt2bJe2xx3jAAAAAFBGPvGJTyidThfdkd0TKioqNHLkSG3atEmPPvqojjnmmA6XnTp1qiQVPSJt48aN2rBhQ5tO8IoVK/TEE0+0eYz6xIkT9corrxTNQP/P//xPHXHEEVq6dKnGjBmjcePGacSIEUXHpq6uTs8995wOOeSQNukaPny4Kisrdd999ymVSunII4/sdHoPOeQQPfnkkyoUCtEyjz32mHbffXcNHDhQ6XRau+22W/QvfJf21KlT2zwq7s0332x3MOCOO+7QgQceqP3226+jQ9vhPhxyyCF65ZVXip4S8Nhjj6m6urpNYP7j8jxPc+fO1QMPPKC//vWvUUB6ayZNmqR///vf8jyvS9vafffd9cILLxR9tuXf7dnyru+mpqY2d9dbltUmAP/qq69q0qRJXUojAAAAAPQnDQ0NUT9c8vvtS5cu1XvvvacJEybolFNO0de+9jX97ne/04oVK/T888/rsssu00MPPSRJmjZtmg444ACdfvrp+uc//6mXXnpJ3/zmN3XkkUcW3UXeGdwxDgAAAABlJJVK6Yc//KF+8IMfKJFIaOrUqVq/fr1ee+21NsHkrsrn83r99dej/1+1apWWLl2qyspK7bbbbpKkRx99VJ7naffdd9fy5ct1zjnnaOLEiTrttNOi9dx444164IEHogD1hAkTdMwxx+h73/uebrvtNlVXV+tHP/qRJk6cqCOOOKIoDXfeeadGjhzZ5r3RqVSqzTurBwwYIElFn8+bN0+XXHKJPvGJT2jcuHE6//zzNWrUKB177LFF6ZsyZYoqKyv12GOP6ZxzztHll18era8z6T355JN10UUX6YwzztAPf/hDvfrqq7ruuuv005/+dKvH+Pvf/76mTJmiSy+9VCeeeKKef/553XbbbbrtttuKlqurq9NvfvMbXX311e2uZ1v7cNRRR2nPPffUqaeeqiuuuEJr1qzReeedpzlz5iiZTEbrCQc2GhoatH79ei1dulSJRCIKnncmT8yZM0f33nuvHnzwQVVVVUXvMK+pqenwTusjjjhCDQ0Neu2117b6LvItffe739WnPvUpXXPNNTr66KP117/+VQ8//HDR0w9+9rOfaeedd9bEiRMlSU8++aSuuuoqnXnmmdEyRx99tH7yk59o55131l577aV//vOfuuaaa3T66acXbe+pp57SUUcd1en0AQAAAEB/8+KLLxb13c866yxJ0qxZs3TXXXdp0aJFuuSSS/Tf//3fWrVqlYYMGaJPfvKT+sIXviBJMk1Tf/zjH6P+XEVFhWbMmNFhf3erPAAAAABAWXEcx7vkkku8sWPHevF43Nt55529Sy+91PM8z1uxYoUnyfvnP/8ZLb9p0yZPkvfEE094nud5ixYt8mpqatqsN/ztlv8+/elPR8vcd9993q677uolEglvxIgR3pw5c7za2tqi9Vx44YXe2LFjiz7bvHmzd/rpp3sDBgzwBg0a5B133HHee++912a/Ro8e7f3P//xPp47DrFmzvGOOOaboM9d1vfPPP98bPny4l0wmvc9+9rPesmXLipY59dRTvUGDBnmJRMLbd999vV/84hdt1t2Z9L788sveoYce6iWTSW+nnXbyLr/88k6l+49//KO39957e8lk0ps4caJ32223tVnm1ltv9dLpdJtj25V9WLlypTdjxgwvnU57Q4YM8f77v//bKxQKRcu0d75bn7vO5In2vpfkLVq0aKvH4cQTT/Tmz5/fZltby7ue53m33Xabt9NOO3npdNo79thjvUsuucQbMWJE9P3111/v7bXXXl4mk/Gqq6u9SZMmeTfddJPnOE60TF1dnfe9733P23nnnb1UKuXtuuuu3rnnnuvlcrlomQ8++MCLx+Pe+++/v9X9AAAAAADsGIbndfG5YwAAAAAAAD3sX//6l4488ki9/fbbqqys3O71fOMb39C///1vPfXUU92YOumHP/yhNm3a1OZufgAAAABAz+Ad4wAAAAAAoM/Zd999tXDhQq1YsaJLv7vqqqv08ssva/ny5brhhhu0ePFizZo1q9vTN2zYMF188cXdvl4AAAAAwPbhjnEAAAAAAFA2TjzxRP3tb39TfX29dt11V333u9/Vt771rZ5OFgAAAACgxAiMAwAAAAAAAAAAAAD6NR6lDgAAAAAAAAAAAADo1wiMAwAAAAAAAAAAAAD6NQLjAAAAAAAAAAAAAIB+jcA4AAAAAAAAAAAAAKBfIzAOAAAAAAAAAAAAAOjXCIwDAAAAAAAAAAAAAPo1AuMAAAAAAAAAAAAAgH6NwDgAAAAAAAAAAAAAoF/7/ywMzfYf9JlJAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Build NTv3 tracks pipeline\n", + "ntv3_tracks = pipeline(\n", + " \"ntv3-tracks\",\n", + " model=model_name,\n", + " trust_remote_code=True,\n", + " device=0 if torch.cuda.is_available() else -1,\n", + ")\n", + "\n", + "# Select tracks to plot\n", + "tracks_to_plot = {\n", + " \"K562 RNA-seq\": \"ENCSR056HPM\",\n", + " \"K562 DNAse\": \"ENCSR921NMD\",\n", + " \"K562 H3k4me3\": \"ENCSR000DWD\",\n", + " \"K562 CTCF\": \"ENCSR000AKO\",\n", + " \"HepG2 RNA-seq\": \"ENCSR561FEE_P\",\n", + " \"HepG2 DNAse\": \"ENCSR000EJV\",\n", + " \"HepG2 H3k4me3\": \"ENCSR000AMP\",\n", + " \"HepG2 CTCF\": \"ENCSR000BIE\",\n", + "}\n", + "elements_to_plot = [\"protein_coding_gene\", \"exon\", \"intron\", \"splice_donor\", \"splice_acceptor\"]\n", + "\n", + "# Run pipeline: DNA -> NTv3 -> Tracks -> plot\n", + "start_time = time.time()\n", + "\n", + "ntv3_predictions = ntv3_tracks(\n", + " {\"chrom\": \"chr19\", \"start\": 6_700_000, \"end\": 6_831_072, \"species\": species},\n", + " plot=True,\n", + " tracks_to_plot=tracks_to_plot,\n", + " elements_to_plot=elements_to_plot,\n", + ")\n", + "\n", + "end_time = time.time()\n", + "\n", + "print(f\"Inference + decoding time: {end_time - start_time:.2f} seconds\")" + ] + }, + { + "cell_type": "markdown", + "id": "190ff65e", + "metadata": {}, + "source": [ + "## 4) πŸ“ Save as bigwig file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b4b3cb6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 8 tracks to save from tracks_to_plot\n", + "Input region: chr19:6700000-6831072 (length: 131,072 bp)\n", + "Prediction region: chr19:6740960-6790112 (length: 49,152 bp)\n", + "Number of positions: 49152\n", + "\n", + "Saving BigWig files to 'bigwig_outputs/' directory...\n", + " Saved 1/8: K562 RNA-seq (K562_RNA_seq.bw)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[bwClose] There was an error while finishing writing a bigWig file! The output is likely truncated.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Saved 2/8: K562 DNAse (K562_DNAse.bw)\n", + " Saved 3/8: K562 H3k4me3 (K562_H3k4me3.bw)\n", + " Saved 4/8: K562 CTCF (K562_CTCF.bw)\n", + " Saved 5/8: HepG2 RNA-seq (HepG2_RNA_seq.bw)\n", + " Saved 6/8: HepG2 DNAse (HepG2_DNAse.bw)\n", + " Saved 7/8: HepG2 H3k4me3 (HepG2_H3k4me3.bw)\n", + " Saved 8/8: HepG2 CTCF (HepG2_CTCF.bw)\n", + "\n", + "βœ… Successfully saved 8 BigWig files to 'bigwig_outputs/'\n", + " Files: K562_RNA_seq, K562_DNAse, K562_H3k4me3, K562_CTCF, HepG2_RNA_seq, HepG2_DNAse, HepG2_H3k4me3, HepG2_CTCF\n" + ] + } + ], + "source": [ + "# Load config to get track names and find indices for tracks_to_plot\n", + "cfg = AutoConfig.from_pretrained(model_name, trust_remote_code=True)\n", + "all_bigwig_names = cfg.bigwigs_per_file_assembly[assembly]\n", + "\n", + "# Find indices of tracks we want to save\n", + "# Use display names (keys) for filenames, but track IDs (values) to find indices\n", + "track_data_list = [] # List of (display_name, track_id, index) tuples\n", + "for display_name, track_id in tracks_to_plot.items():\n", + " try:\n", + " idx = all_bigwig_names.index(track_id)\n", + " track_data_list.append((display_name, track_id, idx))\n", + " except ValueError:\n", + " print(f\"Warning: Track '{track_id}' ({display_name}) not found in config. Skipping...\")\n", + "\n", + "print(f\"Found {len(track_data_list)} tracks to save from tracks_to_plot\")\n", + "\n", + "# Get predictions (shape: (49152, 7362))\n", + "bigwig_logits = ntv3_predictions.bigwig_tracks_logits\n", + "if isinstance(bigwig_logits, torch.Tensor):\n", + " bigwig_logits = bigwig_logits.detach().cpu().numpy()\n", + "\n", + "# Calculate genomic coordinates for the center 37.5% region\n", + "# The predictions cover the center 37.5% of the input sequence\n", + "input_length = end - start\n", + "center_start_offset = int(input_length * 0.3125) # (1 - 0.375) / 2 = 0.3125\n", + "center_length = int(input_length * 0.375)\n", + "center_start = start + center_start_offset\n", + "center_end = center_start + center_length\n", + "\n", + "print(f\"Input region: {chrom}:{start}-{end} (length: {input_length:,} bp)\")\n", + "print(f\"Prediction region: {chrom}:{center_start}-{center_end} (length: {center_length:,} bp)\")\n", + "print(f\"Number of positions: {bigwig_logits.shape[0]}\")\n", + "\n", + "# Create output directory\n", + "output_dir = \"bigwig_outputs\"\n", + "os.makedirs(output_dir, exist_ok=True)\n", + "\n", + "# Save each track as a separate BigWig file\n", + "print(f\"\\nSaving BigWig files to '{output_dir}/' directory...\")\n", + "for i, (display_name, track_id, track_idx) in enumerate(track_data_list):\n", + " # Get track data (logits for this track)\n", + " track_data = bigwig_logits[:, track_idx].astype(np.float32)\n", + " \n", + " # Create BigWig file using display name (key) for filename\n", + " # Clean the display name for use as filename (replace spaces, special chars)\n", + " track_clean_name = display_name.replace(\" \", \"_\").replace(\"/\", \"_\").replace(\"-\", \"_\")\n", + " bw_filename = os.path.join(output_dir, f\"{track_clean_name}.bw\")\n", + " bw = pyBigWig.open(bw_filename, \"w\")\n", + " \n", + " # Add header (chromosome and size) - as chrom size just use the end of genomic window\n", + " bw.addHeader([(chrom, end)])\n", + " \n", + " # Add entries (intervals with values)\n", + " # Each position in track_data corresponds to one base pair\n", + " starts = np.arange(center_start, center_start + len(track_data), dtype=np.int64)\n", + " ends = starts + 1\n", + " values = track_data.tolist()\n", + " \n", + " bw.addEntries(\n", + " chroms=[chrom] * len(starts),\n", + " starts=starts.tolist(),\n", + " ends=ends.tolist(),\n", + " values=values\n", + " )\n", + " \n", + " bw.close()\n", + " \n", + " print(f\" Saved {i + 1}/{len(track_data_list)}: {display_name} ({track_clean_name}.bw)\")\n", + "\n", + "print(f\"\\nβœ… Successfully saved {len(track_data_list)} BigWig files to '{output_dir}/'\")\n", + "print(f\" Files: {', '.join([name.replace(' ', '_').replace('/', '_').replace('-', '_') for name, _, _ in track_data_list])}\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "291e0710", + "metadata": {}, + "source": [ + "## 5) 🌐 Create an IGV Browser" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "84f013f6", + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": "window.igv=function(){\"use strict\";function e(e){return t(\"div\",e)}function t(e,t){const i=document.createElement(e);return t&&(t.class&&i.classList.add(t.class),t.id&&(i.id=t.id),t.style&&function(e,t){for(let i of Object.keys(t))e.style[i]=t[i]}(i,t.style)),i}function i(e){const t=getComputedStyle(e);\"none\"!==t.display&&(e._initialDisplay=t.display),e.style.display=\"none\"}function n(e){const t=e._initialDisplay||\"block\";e.style.display=t}function r(e){if(e.type.startsWith(\"touch\")){const t=e.touches[0];return{x:t.pageX,y:t.pageY}}return{x:e.pageX,y:e.pageY}}function s(){return(\"0000\"+(Math.random()*Math.pow(36,4)|0).toString(36)).slice(-4)}let o=(e,{clientX:t,clientY:i})=>{const{left:n,top:r,width:s,height:o}=e.getBoundingClientRect(),a=t-n,c=i-r;return{x:a,y:c,xNormalized:a/s,yNormalized:c/o,width:s,height:o}};function a(e,t){const{clientX:i,clientY:n}=e;return o(t,{clientX:i,clientY:n})}class c{constructor(){this.elem=t(\"div\",{class:\"igv-ui-panel-column\"})}add(t){if(t instanceof Node)this.elem.append(t);else if(\"object\"==typeof t)this.elem.append(t.elem);else{const i=e();i.innerHTML=t,this.elem.append(i),this.html=i}}}function l(e,t){return h(e,t)}function h(e,t){t=t||\"currentColor\";let i=d[e];i||(console.error(`No icon named: ${e}`),i=d.question);const n=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");n.setAttributeNS(null,\"viewBox\",\"0 0 \"+i[0]+\" \"+i[1]);const r=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");return r.setAttributeNS(null,\"fill\",t),r.setAttributeNS(null,\"d\",i[4]),n.appendChild(r),n}const d={check:[512,512,[],\"f00c\",\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"],cog:[512,512,[],\"f013\",\"M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z\"],exclamation:[192,512,[],\"f12a\",\"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"],\"exclamation-circle\":[512,512,[],\"f06a\",\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],\"exclamation-triangle\":[576,512,[],\"f071\",\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],minus:[448,512,[],\"f068\",\"M424 318.2c13.3 0 24-10.7 24-24v-76.4c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h400z\"],\"minus-circle\":[512,512,[],\"f056\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"],\"minus-square\":[448,512,[],\"f146\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"],plus:[448,512,[],\"f067\",\"M448 294.2v-76.4c0-13.3-10.7-24-24-24H286.2V56c0-13.3-10.7-24-24-24h-76.4c-13.3 0-24 10.7-24 24v137.8H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h137.8V456c0 13.3 10.7 24 24 24h76.4c13.3 0 24-10.7 24-24V318.2H424c13.3 0 24-10.7 24-24z\"],\"plus-circle\":[512,512,[],\"f055\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],\"plus-square\":[448,512,[],\"f0fe\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],question:[384,512,[],\"f128\",\"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"],save:[448,512,[],\"f0c7\",\"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"],search:[512,512,[],\"f002\",\"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"],share:[512,512,[],\"f064\",\"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"],spinner:[512,512,[],\"f110\",\"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"],square:[448,512,[],\"f0c8\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"],\"square-full\":[512,512,[],\"f45c\",\"M512 512H0V0h512v512z\"],times:[384,512,[],\"f00d\",\"M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z\"],\"times-circle\":[512,512,[],\"f057\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"],wrench:[512,512,[],\"f0ad\",\"M481.156 200c9.3 0 15.12 10.155 10.325 18.124C466.295 259.992 420.419 288 368 288c-79.222 0-143.501-63.974-143.997-143.079C223.505 65.469 288.548-.001 368.002 0c52.362.001 98.196 27.949 123.4 69.743C496.24 77.766 490.523 88 481.154 88H376l-40 56 40 56h105.156zm-171.649 93.003L109.255 493.255c-24.994 24.993-65.515 24.994-90.51 0-24.993-24.994-24.993-65.516 0-90.51L218.991 202.5c16.16 41.197 49.303 74.335 90.516 90.503zM104 432c0-13.255-10.745-24-24-24s-24 10.745-24 24 10.745 24 24 24 24-10.745 24-24z\"]};function u(e,t){var i=document.createElement(\"div\");e.appendChild(i),i.appendChild(l(\"times\")),i.addEventListener(\"click\",(function(e){e.preventDefault(),e.stopPropagation(),t()}))}let f;function p(e,t,i){t.addEventListener(\"mousedown\",function(e){e.stopPropagation(),e.preventDefault();const t=g.bind(this),n=m.bind(this),r=getComputedStyle(this),s=this.getBoundingClientRect();f={constraint:i,dragFunction:t,dragEndFunction:n,screenX:e.screenX,screenY:e.screenY,minDy:-s.top,minDx:-s.left,top:parseInt(r.top.replace(\"px\",\"\")),left:parseInt(r.left.replace(\"px\",\"\"))},document.addEventListener(\"mousemove\",t),document.addEventListener(\"mouseup\",n),document.addEventListener(\"mouseleave\",n),document.addEventListener(\"mouseexit\",n)}.bind(e))}function g(e){if(!f)return void console.error(\"No drag data!\");e.stopPropagation(),e.preventDefault();const t=Math.max(f.minDx,e.screenX-f.screenX),i=Math.max(f.minDy,e.screenY-f.screenY),n=f.left+t,r=f.top+i;this.style.left=`${n}px`,this.style.top=`${r}px`}function m(e){if(!f)return void console.error(\"No drag data!\");e.stopPropagation(),e.preventDefault();const t=f.dragFunction,i=f.dragEndFunction;document.removeEventListener(\"mousemove\",t),document.removeEventListener(\"mouseup\",i),document.removeEventListener(\"mouseleave\",i),document.removeEventListener(\"mouseexit\",i),f=void 0}class w{constructor({parent:t,label:n,content:r,okHandler:s,cancelHandler:o}){this.parent=t;const a=()=>{i(this.elem),\"function\"==typeof o&&o(this)};this.elem=e(),this.elem.classList.add(\"igv-ui-generic-dialog-container\",\"igv-ui-center-fixed\");const c=e({class:\"igv-ui-generic-dialog-header\"});if(this.elem.appendChild(c),u(c,a),n){const t=e({class:\"igv-ui-dialog-one-liner\"});this.elem.appendChild(t),t.innerHTML=n}r.elem.style.margin=\"16px\",this.elem.appendChild(r.elem),this.content=r;const l=e({class:\"igv-ui-generic-dialog-ok-cancel\"});this.elem.appendChild(l),this.ok=e(),l.appendChild(this.ok),this.ok.textContent=\"OK\",this.cancel=e(),l.appendChild(this.cancel),this.cancel.textContent=\"Cancel\",this.callback=void 0,this.ok.addEventListener(\"click\",(e=>{i(this.elem),\"function\"==typeof s?s(this):this.callback&&\"function\"==typeof this.callback&&this.callback(this)})),this.cancel.addEventListener(\"click\",a),p(this.elem,c),this.elem.addEventListener(\"click\",(e=>{e.preventDefault(),e.stopPropagation()}))}present(e,t){if(e.label&&this.label&&(this.label.textContent=e.label),e.html){this.content.html.innerHTML=e.html}if(e.text){this.content.html.innerText=e.text}e.value&&this.input&&(this.input.value=e.value),e.callback&&(this.callback=e.callback),n(this.elem)}clampLocation(e,t){let i=this.elem.getBoundingClientRect(),n=this.parent.getBoundingClientRect();const r=Math.min(Math.max(t,n.y),n.y+n.height-i.height),s=Math.min(Math.max(e,n.x),n.x+n.width-i.width);this.elem.style.left=s+\"px\",this.elem.style.top=r+\"px\"}}\n/*!\n * jQuery JavaScript Library v3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */var b=[],F=window.document,v=Object.getPrototypeOf,y=b.slice,A=b.concat,C=b.push,_=b.indexOf,x={},k=x.toString,I=x.hasOwnProperty,S=I.toString,E=S.call(Object),N={},B=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType},M=function(e){return null!=e&&e===e.window},D={type:!0,src:!0,noModule:!0};function R(e,t,i){var n,r=(t=t||F).createElement(\"script\");if(r.text=e,i)for(n in D)i[n]&&(r[n]=i[n]);t.head.appendChild(r).parentNode.removeChild(r)}function T(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?x[k.call(e)]||\"object\":typeof e}var L=\"3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\",z=function(e,t){return new z.fn.init(e,t)},H=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function P(e){var t=!!e&&\"length\"in e&&e.length,i=T(e);return!B(e)&&!M(e)&&(\"array\"===i||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}z.fn=z.prototype={jquery:L,constructor:z,length:0,toArray:function(){return y.call(this)},get:function(e){return null==e?y.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=z.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return z.each(this,e)},map:function(e){return this.pushStack(z.map(this,(function(t,i){return e.call(t,i,t)})))},slice:function(){return this.pushStack(y.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,i=+e+(e<0?t:0);return this.pushStack(i>=0&&i+~]|\"+L+\")\"+L+\"*\"),Q=new RegExp(\"=\"+L+\"*([^\\\\]'\\\"]*?)\"+L+\"*\\\\]\",\"g\"),j=new RegExp(P),W=new RegExp(\"^\"+z+\"$\"),G={ID:new RegExp(\"^#(\"+z+\")\"),CLASS:new RegExp(\"^\\\\.(\"+z+\")\"),TAG:new RegExp(\"^(\"+z+\"|[*])\"),ATTR:new RegExp(\"^\"+H),PSEUDO:new RegExp(\"^\"+P),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+L+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+L+\"*(?:([+-]|)\"+L+\"*(\\\\d+)|))\"+L+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+T+\")$\",\"i\"),needsContext:new RegExp(\"^\"+L+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+L+\"*((?:-\\\\d)?\\\\d*)\"+L+\"*\\\\)|)(?=[^-]|$)\",\"i\")},$=/^(?:input|select|textarea|button)$/i,K=/^h\\d$/i,Y=/^[^{]+\\{\\s*\\[native \\w/,X=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,Z=/[+~]/,J=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+L+\"?|(\"+L+\")|.)\",\"ig\"),ee=function(e,t,i){var n=\"0x\"+t-65536;return n!=n||i?t:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)},te=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ie=function(e,t){return t?\"\\0\"===e?\"οΏ½\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},ne=function(){u()},re=we((function(e){return!0===e.disabled&&(\"form\"in e||\"label\"in e)}),{dir:\"parentNode\",next:\"legend\"});try{M.apply(E=D.call(y.childNodes),y.childNodes),E[y.childNodes.length].nodeType}catch(e){M={apply:E.length?function(e,t){B.apply(e,D.call(t))}:function(e,t){for(var i=e.length,n=0;e[i++]=t[n++];);e.length=i-1}}}function se(e,t,n,r){var s,a,l,h,d,p,w,b=t&&t.ownerDocument,A=t?t.nodeType:9;if(n=n||[],\"string\"!=typeof e||!e||1!==A&&9!==A&&11!==A)return n;if(!r&&((t?t.ownerDocument||t:y)!==f&&u(t),t=t||f,g)){if(11!==A&&(d=X.exec(e)))if(s=d[1]){if(9===A){if(!(l=t.getElementById(s)))return n;if(l.id===s)return n.push(l),n}else if(b&&(l=b.getElementById(s))&&F(t,l)&&l.id===s)return n.push(l),n}else{if(d[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=d[3])&&i.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(i.qsa&&!k[e+\" \"]&&(!m||!m.test(e))){if(1!==A)b=t,w=e;else if(\"object\"!==t.nodeName.toLowerCase()){for((h=t.getAttribute(\"id\"))?h=h.replace(te,ie):t.setAttribute(\"id\",h=v),a=(p=o(e)).length;a--;)p[a]=\"#\"+h+\" \"+me(p[a]);w=p.join(\",\"),b=Z.test(e)&&pe(t.parentNode)||t}if(w)try{return M.apply(n,b.querySelectorAll(w)),n}catch(e){}finally{h===v&&t.removeAttribute(\"id\")}}}return c(e.replace(U,\"$1\"),t,n,r)}function oe(){var e=[];return function t(i,r){return e.push(i+\" \")>n.cacheLength&&delete t[e.shift()],t[i+\" \"]=r}}function ae(e){return e[v]=!0,e}function ce(e){var t=f.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var i=t&&e,n=i&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(n)return n;if(i)for(;i=i.nextSibling;)if(i===t)return-1;return e?1:-1}function he(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function de(e){return function(t){var i=t.nodeName.toLowerCase();return(\"input\"===i||\"button\"===i)&&t.type===e}}function ue(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&re(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function fe(e){return ae((function(t){return t=+t,ae((function(i,n){for(var r,s=e([],i.length,t),o=s.length;o--;)i[r=s[o]]&&(i[r]=!(n[r]=i[r]))}))}))}function pe(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in i=se.support={},s=se.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},u=se.setDocument=function(e){var t,r,o=e?e.ownerDocument||e:y;return o!==f&&9===o.nodeType&&o.documentElement?(p=(f=o).documentElement,g=!s(f),y!==f&&(r=f.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener(\"unload\",ne,!1):r.attachEvent&&r.attachEvent(\"onunload\",ne)),i.attributes=ce((function(e){return e.className=\"i\",!e.getAttribute(\"className\")})),i.getElementsByTagName=ce((function(e){return e.appendChild(f.createComment(\"\")),!e.getElementsByTagName(\"*\").length})),i.getElementsByClassName=Y.test(f.getElementsByClassName),i.getById=ce((function(e){return p.appendChild(e).id=v,!f.getElementsByName||!f.getElementsByName(v).length})),i.getById?(n.filter.ID=function(e){var t=e.replace(J,ee);return function(e){return e.getAttribute(\"id\")===t}},n.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var i=t.getElementById(e);return i?[i]:[]}}):(n.filter.ID=function(e){var t=e.replace(J,ee);return function(e){var i=void 0!==e.getAttributeNode&&e.getAttributeNode(\"id\");return i&&i.value===t}},n.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var i,n,r,s=t.getElementById(e);if(s){if((i=s.getAttributeNode(\"id\"))&&i.value===e)return[s];for(r=t.getElementsByName(e),n=0;s=r[n++];)if((i=s.getAttributeNode(\"id\"))&&i.value===e)return[s]}return[]}}),n.find.TAG=i.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):i.qsa?t.querySelectorAll(e):void 0}:function(e,t){var i,n=[],r=0,s=t.getElementsByTagName(e);if(\"*\"===e){for(;i=s[r++];)1===i.nodeType&&n.push(i);return n}return s},n.find.CLASS=i.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&g)return t.getElementsByClassName(e)},w=[],m=[],(i.qsa=Y.test(f.querySelectorAll))&&(ce((function(e){p.appendChild(e).innerHTML=\"\",e.querySelectorAll(\"[msallowcapture^='']\").length&&m.push(\"[*^$]=\"+L+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||m.push(\"\\\\[\"+L+\"*(?:value|\"+T+\")\"),e.querySelectorAll(\"[id~=\"+v+\"-]\").length||m.push(\"~=\"),e.querySelectorAll(\":checked\").length||m.push(\":checked\"),e.querySelectorAll(\"a#\"+v+\"+*\").length||m.push(\".#.+[+~]\")})),ce((function(e){e.innerHTML=\"\";var t=f.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&m.push(\"name\"+L+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&m.push(\":enabled\",\":disabled\"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&m.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),m.push(\",.*:\")}))),(i.matchesSelector=Y.test(b=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ce((function(e){i.disconnectedMatch=b.call(e,\"*\"),b.call(e,\"[s!='']:x\"),w.push(\"!=\",P)})),m=m.length&&new RegExp(m.join(\"|\")),w=w.length&&new RegExp(w.join(\"|\")),t=Y.test(p.compareDocumentPosition),F=t||Y.test(p.contains)?function(e,t){var i=9===e.nodeType?e.documentElement:e,n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(i.contains?i.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},I=t?function(e,t){if(e===t)return d=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!i.sortDetached&&t.compareDocumentPosition(e)===n?e===f||e.ownerDocument===y&&F(y,e)?-1:t===f||t.ownerDocument===y&&F(y,t)?1:h?R(h,e)-R(h,t):0:4&n?-1:1)}:function(e,t){if(e===t)return d=!0,0;var i,n=0,r=e.parentNode,s=t.parentNode,o=[e],a=[t];if(!r||!s)return e===f?-1:t===f?1:r?-1:s?1:h?R(h,e)-R(h,t):0;if(r===s)return le(e,t);for(i=e;i=i.parentNode;)o.unshift(i);for(i=t;i=i.parentNode;)a.unshift(i);for(;o[n]===a[n];)n++;return n?le(o[n],a[n]):o[n]===y?-1:a[n]===y?1:0},f):f},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&u(e),t=t.replace(Q,\"='$1']\"),i.matchesSelector&&g&&!k[t+\" \"]&&(!w||!w.test(t))&&(!m||!m.test(t)))try{var n=b.call(e,t);if(n||i.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){}return se(t,f,null,[e]).length>0},se.contains=function(e,t){return(e.ownerDocument||e)!==f&&u(e),F(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==f&&u(e);var r=n.attrHandle[t.toLowerCase()],s=r&&S.call(n.attrHandle,t.toLowerCase())?r(e,t,!g):void 0;return void 0!==s?s:i.attributes||!g?e.getAttribute(t):(s=e.getAttributeNode(t))&&s.specified?s.value:null},se.escape=function(e){return(e+\"\").replace(te,ie)},se.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort=function(e){var t,n=[],r=0,s=0;if(d=!i.detectDuplicates,h=!i.sortStable&&e.slice(0),e.sort(I),d){for(;t=e[s++];)t===e[s]&&(r=n.push(s));for(;r--;)e.splice(n[r],1)}return h=null,e},r=se.getText=function(e){var t,i=\"\",n=0,s=e.nodeType;if(s){if(1===s||9===s||11===s){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)i+=r(e)}else if(3===s||4===s)return e.nodeValue}else for(;t=e[n++];)i+=r(t);return i},n=se.selectors={cacheLength:50,createPseudo:ae,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(J,ee),e[3]=(e[3]||e[4]||e[5]||\"\").replace(J,ee),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,i=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":i&&j.test(i)&&(t=o(i,!0))&&(t=i.indexOf(\")\",i.length-t)-i.length)&&(e[0]=e[0].slice(0,t),e[2]=i.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(J,ee).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=_[e+\" \"];return t||(t=new RegExp(\"(^|\"+L+\")\"+e+\"(\"+L+\"|$)\"))&&_(e,(function(e){return t.test(\"string\"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute(\"class\")||\"\")}))},ATTR:function(e,t,i){return function(n){var r=se.attr(n,e);return null==r?\"!=\"===t:!t||(r+=\"\",\"=\"===t?r===i:\"!=\"===t?r!==i:\"^=\"===t?i&&0===r.indexOf(i):\"*=\"===t?i&&r.indexOf(i)>-1:\"$=\"===t?i&&r.slice(-i.length)===i:\"~=\"===t?(\" \"+r.replace(O,\" \")+\" \").indexOf(i)>-1:\"|=\"===t&&(r===i||r.slice(0,i.length+1)===i+\"-\"))}},CHILD:function(e,t,i,n,r){var s=\"nth\"!==e.slice(0,3),o=\"last\"!==e.slice(-4),a=\"of-type\"===t;return 1===n&&0===r?function(e){return!!e.parentNode}:function(t,i,c){var l,h,d,u,f,p,g=s!==o?\"nextSibling\":\"previousSibling\",m=t.parentNode,w=a&&t.nodeName.toLowerCase(),b=!c&&!a,F=!1;if(m){if(s){for(;g;){for(u=t;u=u[g];)if(a?u.nodeName.toLowerCase()===w:1===u.nodeType)return!1;p=g=\"only\"===e&&!p&&\"nextSibling\"}return!0}if(p=[o?m.firstChild:m.lastChild],o&&b){for(F=(f=(l=(h=(d=(u=m)[v]||(u[v]={}))[u.uniqueID]||(d[u.uniqueID]={}))[e]||[])[0]===A&&l[1])&&l[2],u=f&&m.childNodes[f];u=++f&&u&&u[g]||(F=f=0)||p.pop();)if(1===u.nodeType&&++F&&u===t){h[e]=[A,f,F];break}}else if(b&&(F=f=(l=(h=(d=(u=t)[v]||(u[v]={}))[u.uniqueID]||(d[u.uniqueID]={}))[e]||[])[0]===A&&l[1]),!1===F)for(;(u=++f&&u&&u[g]||(F=f=0)||p.pop())&&((a?u.nodeName.toLowerCase()!==w:1!==u.nodeType)||!++F||(b&&((h=(d=u[v]||(u[v]={}))[u.uniqueID]||(d[u.uniqueID]={}))[e]=[A,F]),u!==t)););return(F-=r)===n||F%n==0&&F/n>=0}}},PSEUDO:function(e,t){var i,r=n.pseudos[e]||n.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return r[v]?r(t):r.length>1?(i=[e,e,\"\",t],n.setFilters.hasOwnProperty(e.toLowerCase())?ae((function(e,i){for(var n,s=r(e,t),o=s.length;o--;)e[n=R(e,s[o])]=!(i[n]=s[o])})):function(e){return r(e,0,i)}):r}},pseudos:{not:ae((function(e){var t=[],i=[],n=a(e.replace(U,\"$1\"));return n[v]?ae((function(e,t,i,r){for(var s,o=n(e,null,r,[]),a=e.length;a--;)(s=o[a])&&(e[a]=!(t[a]=s))})):function(e,r,s){return t[0]=e,n(t,null,s,i),t[0]=null,!i.pop()}})),has:ae((function(e){return function(t){return se(e,t).length>0}})),contains:ae((function(e){return e=e.replace(J,ee),function(t){return(t.textContent||t.innerText||r(t)).indexOf(e)>-1}})),lang:ae((function(e){return W.test(e||\"\")||se.error(\"unsupported lang: \"+e),e=e.replace(J,ee).toLowerCase(),function(t){var i;do{if(i=g?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(i=i.toLowerCase())===e||0===i.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var i=e.location&&e.location.hash;return i&&i.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ue(!1),disabled:ue(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!n.pseudos.empty(e)},header:function(e){return K.test(e.nodeName)},input:function(e){return $.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:fe((function(){return[0]})),last:fe((function(e,t){return[t-1]})),eq:fe((function(e,t,i){return[i<0?i+t:i]})),even:fe((function(e,t){for(var i=0;i=0;)e.push(n);return e})),gt:fe((function(e,t,i){for(var n=i<0?i+t:i;++n1?function(t,i,n){for(var r=e.length;r--;)if(!e[r](t,i,n))return!1;return!0}:e[0]}function Fe(e,t,i,n,r){for(var s,o=[],a=0,c=e.length,l=null!=t;a-1&&(s[l]=!(o[l]=d))}}else w=Fe(w===o?w.splice(p,w.length):w),r?r(null,o,w,c):M.apply(o,w)}))}function ye(e){for(var t,i,r,s=e.length,o=n.relative[e[0].type],a=o||n.relative[\" \"],c=o?1:0,h=we((function(e){return e===t}),a,!0),d=we((function(e){return R(t,e)>-1}),a,!0),u=[function(e,i,n){var r=!o&&(n||i!==l)||((t=i).nodeType?h(e,i,n):d(e,i,n));return t=null,r}];c1&&be(u),c>1&&me(e.slice(0,c-1).concat({value:\" \"===e[c-2].type?\"*\":\"\"})).replace(U,\"$1\"),i,c0,r=e.length>0,s=function(s,o,a,c,h){var d,p,m,w=0,b=\"0\",F=s&&[],v=[],y=l,C=s||r&&n.find.TAG(\"*\",h),_=A+=null==y?1:Math.random()||.1,x=C.length;for(h&&(l=o===f||o||h);b!==x&&null!=(d=C[b]);b++){if(r&&d){for(p=0,o||d.ownerDocument===f||(u(d),a=!g);m=e[p++];)if(m(d,o||f,a)){c.push(d);break}h&&(A=_)}i&&((d=!m&&d)&&w--,s&&F.push(d))}if(w+=b,i&&b!==w){for(p=0;m=t[p++];)m(F,v,o,a);if(s){if(w>0)for(;b--;)F[b]||v[b]||(v[b]=N.call(c));v=Fe(v)}M.apply(c,v),h&&!s&&v.length>0&&w+t.length>1&&se.uniqueSort(c)}return h&&(A=_,l=y),F};return i?ae(s):s}(s,r)),a.selector=e}return a},c=se.select=function(e,t,i,r){var s,c,l,h,d,u=\"function\"==typeof e&&e,f=!r&&o(e=u.selector||e);if(i=i||[],1===f.length){if((c=f[0]=f[0].slice(0)).length>2&&\"ID\"===(l=c[0]).type&&9===t.nodeType&&g&&n.relative[c[1].type]){if(!(t=(n.find.ID(l.matches[0].replace(J,ee),t)||[])[0]))return i;u&&(t=t.parentNode),e=e.slice(c.shift().value.length)}for(s=G.needsContext.test(e)?0:c.length;s--&&(l=c[s],!n.relative[h=l.type]);)if((d=n.find[h])&&(r=d(l.matches[0].replace(J,ee),Z.test(c[0].type)&&pe(t.parentNode)||t))){if(c.splice(s,1),!(e=r.length&&me(c)))return M.apply(i,r),i;break}}return(u||a(e,f))(r,t,!g,i,!t||Z.test(e)&&pe(t.parentNode)||t),i},i.sortStable=v.split(\"\").sort(I).join(\"\")===v,i.detectDuplicates=!!d,u(),se}(window);z.find=O,z.expr=O.selectors,z.expr[\":\"]=z.expr.pseudos,z.uniqueSort=z.unique=O.uniqueSort,z.text=O.getText,z.isXMLDoc=O.isXML,z.contains=O.contains,z.escapeSelector=O.escape;var U=function(e,t,i){for(var n=[],r=void 0!==i;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&z(e).is(i))break;n.push(e)}return n},q=function(e,t){for(var i=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&i.push(e);return i},V=z.expr.match.needsContext;function Q(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var j=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function W(e,t,i){return B(t)?z.grep(e,(function(e,n){return!!t.call(e,n,e)!==i})):t.nodeType?z.grep(e,(function(e){return e===t!==i})):\"string\"!=typeof t?z.grep(e,(function(e){return _.call(t,e)>-1!==i})):z.filter(t,e,i)}z.filter=function(e,t,i){var n=t[0];return i&&(e=\":not(\"+e+\")\"),1===t.length&&1===n.nodeType?z.find.matchesSelector(n,e)?[n]:[]:z.find.matches(e,z.grep(t,(function(e){return 1===e.nodeType})))},z.fn.extend({find:function(e){var t,i,n=this.length,r=this;if(\"string\"!=typeof e)return this.pushStack(z(e).filter((function(){for(t=0;t1?z.uniqueSort(i):i},filter:function(e){return this.pushStack(W(this,e||[],!1))},not:function(e){return this.pushStack(W(this,e||[],!0))},is:function(e){return!!W(this,\"string\"==typeof e&&V.test(e)?z(e):e||[],!1).length}});var G,$=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(z.fn.init=function(e,t,i){var n,r;if(!e)return this;if(i=i||G,\"string\"==typeof e){if(!(n=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:$.exec(e))||!n[1]&&t)return!t||t.jquery?(t||i).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof z?t[0]:t,z.merge(this,z.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:F,!0)),j.test(n[1])&&z.isPlainObject(t))for(n in t)B(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(r=F.getElementById(n[2]))&&(this[0]=r,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):B(e)?void 0!==i.ready?i.ready(e):e(z):z.makeArray(e,this)}).prototype=z.fn,G=z(F);var K=/^(?:parents|prev(?:Until|All))/,Y={children:!0,contents:!0,next:!0,prev:!0};function X(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}z.fn.extend({has:function(e){var t=z(e,this),i=t.length;return this.filter((function(){for(var e=0;e-1:1===i.nodeType&&z.find.matchesSelector(i,e))){s.push(i);break}return this.pushStack(s.length>1?z.uniqueSort(s):s)},index:function(e){return e?\"string\"==typeof e?_.call(z(e),this[0]):_.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(z.uniqueSort(z.merge(this.get(),z(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),z.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return U(e,\"parentNode\")},parentsUntil:function(e,t,i){return U(e,\"parentNode\",i)},next:function(e){return X(e,\"nextSibling\")},prev:function(e){return X(e,\"previousSibling\")},nextAll:function(e){return U(e,\"nextSibling\")},prevAll:function(e){return U(e,\"previousSibling\")},nextUntil:function(e,t,i){return U(e,\"nextSibling\",i)},prevUntil:function(e,t,i){return U(e,\"previousSibling\",i)},siblings:function(e){return q((e.parentNode||{}).firstChild,e)},children:function(e){return q(e.firstChild)},contents:function(e){return Q(e,\"iframe\")?e.contentDocument:(Q(e,\"template\")&&(e=e.content||e),z.merge([],e.childNodes))}},(function(e,t){z.fn[e]=function(i,n){var r=z.map(this,t,i);return\"Until\"!==e.slice(-5)&&(n=i),n&&\"string\"==typeof n&&(r=z.filter(n,r)),this.length>1&&(Y[e]||z.uniqueSort(r),K.test(e)&&r.reverse()),this.pushStack(r)}}));var Z=/[^\\x20\\t\\r\\n\\f]+/g;function J(e){return e}function ee(e){throw e}function te(e,t,i,n){var r;try{e&&B(r=e.promise)?r.call(e).done(t).fail(i):e&&B(r=e.then)?r.call(e,t,i):t.apply(void 0,[e].slice(n))}catch(e){i.apply(void 0,[e])}}z.Callbacks=function(e){e=\"string\"==typeof e?function(e){var t={};return z.each(e.match(Z)||[],(function(e,i){t[i]=!0})),t}(e):z.extend({},e);var t,i,n,r,s=[],o=[],a=-1,c=function(){for(r=r||e.once,n=t=!0;o.length;a=-1)for(i=o.shift();++a-1;)s.splice(i,1),i<=a&&a--})),this},has:function(e){return e?z.inArray(e,s)>-1:s.length>0},empty:function(){return s&&(s=[]),this},disable:function(){return r=o=[],s=i=\"\",this},disabled:function(){return!s},lock:function(){return r=o=[],i||t||(s=i=\"\"),this},locked:function(){return!!r},fireWith:function(e,i){return r||(i=[e,(i=i||[]).slice?i.slice():i],o.push(i),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!n}};return l},z.extend({Deferred:function(e){var t=[[\"notify\",\"progress\",z.Callbacks(\"memory\"),z.Callbacks(\"memory\"),2],[\"resolve\",\"done\",z.Callbacks(\"once memory\"),z.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",z.Callbacks(\"once memory\"),z.Callbacks(\"once memory\"),1,\"rejected\"]],i=\"pending\",n={state:function(){return i},always:function(){return r.done(arguments).fail(arguments),this},catch:function(e){return n.then(null,e)},pipe:function(){var e=arguments;return z.Deferred((function(i){z.each(t,(function(t,n){var s=B(e[n[4]])&&e[n[4]];r[n[1]]((function(){var e=s&&s.apply(this,arguments);e&&B(e.promise)?e.promise().progress(i.notify).done(i.resolve).fail(i.reject):i[n[0]+\"With\"](this,s?[e]:arguments)}))})),e=null})).promise()},then:function(e,i,n){var r=0;function s(e,t,i,n){return function(){var o=this,a=arguments,c=function(){var c,l;if(!(e=r&&(i!==ee&&(o=void 0,a=[n]),t.rejectWith(o,a))}};e?l():(z.Deferred.getStackHook&&(l.stackTrace=z.Deferred.getStackHook()),window.setTimeout(l))}}return z.Deferred((function(r){t[0][3].add(s(0,r,B(n)?n:J,r.notifyWith)),t[1][3].add(s(0,r,B(e)?e:J)),t[2][3].add(s(0,r,B(i)?i:ee))})).promise()},promise:function(e){return null!=e?z.extend(e,n):n}},r={};return z.each(t,(function(e,s){var o=s[2],a=s[5];n[s[1]]=o.add,a&&o.add((function(){i=a}),t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),o.add(s[3].fire),r[s[0]]=function(){return r[s[0]+\"With\"](this===r?void 0:this,arguments),this},r[s[0]+\"With\"]=o.fireWith})),n.promise(r),e&&e.call(r,r),r},when:function(e){var t=arguments.length,i=t,n=Array(i),r=y.call(arguments),s=z.Deferred(),o=function(e){return function(i){n[e]=this,r[e]=arguments.length>1?y.call(arguments):i,--t||s.resolveWith(n,r)}};if(t<=1&&(te(e,s.done(o(i)).resolve,s.reject,!t),\"pending\"===s.state()||B(r[i]&&r[i].then)))return s.then();for(;i--;)te(r[i],o(i),s.reject);return s.promise()}});var ie=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;z.Deferred.exceptionHook=function(e,t){window.console&&window.console.warn&&e&&ie.test(e.name)&&window.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},z.readyException=function(e){window.setTimeout((function(){throw e}))};var ne=z.Deferred();function re(){F.removeEventListener(\"DOMContentLoaded\",re),window.removeEventListener(\"load\",re),z.ready()}z.fn.ready=function(e){return ne.then(e).catch((function(e){z.readyException(e)})),this},z.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--z.readyWait:z.isReady)||(z.isReady=!0,!0!==e&&--z.readyWait>0||ne.resolveWith(F,[z]))}}),z.ready.then=ne.then,\"complete\"===F.readyState||\"loading\"!==F.readyState&&!F.documentElement.doScroll?window.setTimeout(z.ready):(F.addEventListener(\"DOMContentLoaded\",re),window.addEventListener(\"load\",re));var se=function(e,t,i,n,r,s,o){var a=0,c=e.length,l=null==i;if(\"object\"===T(i))for(a in r=!0,i)se(e,t,a,i[a],!0,s,o);else if(void 0!==n&&(r=!0,B(n)||(o=!0),l&&(o?(t.call(e,n),t=null):(l=t,t=function(e,t,i){return l.call(z(e),i)})),t))for(;a1,null,!0)},removeData:function(e){return this.each((function(){fe.remove(this,e)}))}}),z.extend({queue:function(e,t,i){var n;if(e)return t=(t||\"fx\")+\"queue\",n=ue.get(e,t),i&&(!n||Array.isArray(i)?n=ue.access(e,t,z.makeArray(i)):n.push(i)),n||[]},dequeue:function(e,t){t=t||\"fx\";var i=z.queue(e,t),n=i.length,r=i.shift(),s=z._queueHooks(e,t);\"inprogress\"===r&&(r=i.shift(),n--),r&&(\"fx\"===t&&i.unshift(\"inprogress\"),delete s.stop,r.call(e,(function(){z.dequeue(e,t)}),s)),!n&&s&&s.empty.fire()},_queueHooks:function(e,t){var i=t+\"queueHooks\";return ue.get(e,i)||ue.access(e,i,{empty:z.Callbacks(\"once memory\").add((function(){ue.remove(e,[t+\"queue\",i])}))})}}),z.fn.extend({queue:function(e,t){var i=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",i--),arguments.length\\x20\\t\\r\\n\\f]+)/i,Ie=/^$|^module$|\\/(?:java|ecma)script/i,Se={option:[1,\"\"],thead:[1,\"\",\"
\"],col:[2,\"\",\"
\"],tr:[2,\"\",\"
\"],td:[3,\"\",\"
\"],_default:[0,\"\",\"\"]};function Ee(e,t){var i;return i=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):void 0!==e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&Q(e,t)?z.merge([e],i):i}function Ne(e,t){for(var i=0,n=e.length;i-1)r&&r.push(s);else if(l=z.contains(s.ownerDocument,s),o=Ee(d.appendChild(s),\"script\"),l&&Ne(o),i)for(h=0;s=o[h++];)Ie.test(s.type||\"\")&&i.push(s);return d}!function(){var e=F.createDocumentFragment().appendChild(F.createElement(\"div\")),t=F.createElement(\"input\");t.setAttribute(\"type\",\"radio\"),t.setAttribute(\"checked\",\"checked\"),t.setAttribute(\"name\",\"t\"),e.appendChild(t),N.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\"\",N.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var De=F.documentElement,Re=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Le=/^([^.]*)(?:\\.(.+)|)/;function ze(){return!0}function He(){return!1}function Pe(){try{return F.activeElement}catch(e){}}function Oe(e,t,i,n,r,s){var o,a;if(\"object\"==typeof t){for(a in\"string\"!=typeof i&&(n=n||i,i=void 0),t)Oe(e,a,i,n,t[a],s);return e}if(null==n&&null==r?(r=i,n=i=void 0):null==r&&(\"string\"==typeof i?(r=n,n=void 0):(r=n,n=i,i=void 0)),!1===r)r=He;else if(!r)return e;return 1===s&&(o=r,r=function(e){return z().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=z.guid++)),e.each((function(){z.event.add(this,t,r,n,i)}))}z.event={global:{},add:function(e,t,i,n,r){var s,o,a,c,l,h,d,u,f,p,g,m=ue.get(e);if(m)for(i.handler&&(i=(s=i).handler,r=s.selector),r&&z.find.matchesSelector(De,r),i.guid||(i.guid=z.guid++),(c=m.events)||(c=m.events={}),(o=m.handle)||(o=m.handle=function(t){return void 0!==z&&z.event.triggered!==t.type?z.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||\"\").match(Z)||[\"\"]).length;l--;)f=g=(a=Le.exec(t[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),f&&(d=z.event.special[f]||{},f=(r?d.delegateType:d.bindType)||f,d=z.event.special[f]||{},h=z.extend({type:f,origType:g,data:n,handler:i,guid:i.guid,selector:r,needsContext:r&&z.expr.match.needsContext.test(r),namespace:p.join(\".\")},s),(u=c[f])||((u=c[f]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,n,p,o)||e.addEventListener&&e.addEventListener(f,o)),d.add&&(d.add.call(e,h),h.handler.guid||(h.handler.guid=i.guid)),r?u.splice(u.delegateCount++,0,h):u.push(h),z.event.global[f]=!0)},remove:function(e,t,i,n,r){var s,o,a,c,l,h,d,u,f,p,g,m=ue.hasData(e)&&ue.get(e);if(m&&(c=m.events)){for(l=(t=(t||\"\").match(Z)||[\"\"]).length;l--;)if(f=g=(a=Le.exec(t[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),f){for(d=z.event.special[f]||{},u=c[f=(n?d.delegateType:d.bindType)||f]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),o=s=u.length;s--;)h=u[s],!r&&g!==h.origType||i&&i.guid!==h.guid||a&&!a.test(h.namespace)||n&&n!==h.selector&&(\"**\"!==n||!h.selector)||(u.splice(s,1),h.selector&&u.delegateCount--,d.remove&&d.remove.call(e,h));o&&!u.length&&(d.teardown&&!1!==d.teardown.call(e,p,m.handle)||z.removeEvent(e,f,m.handle),delete c[f])}else for(f in c)z.event.remove(e,f+t[l],i,n,!0);z.isEmptyObject(c)&&ue.remove(e,\"handle events\")}},dispatch:function(e){var t,i,n,r,s,o,a=z.event.fix(e),c=new Array(arguments.length),l=(ue.get(this,\"events\")||{})[a.type]||[],h=z.event.special[a.type]||{};for(c[0]=a,t=1;t=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(s=[],o={},i=0;i-1:z.find(r,this,null,[l]).length),o[r]&&s.push(n);s.length&&a.push({elem:l,handlers:s})}return l=this,c\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,qe=/\\s*$/g;function je(e,t){return Q(e,\"table\")&&Q(11!==t.nodeType?t:t.firstChild,\"tr\")&&z(e).children(\"tbody\")[0]||e}function We(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Ge(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function $e(e,t){var i,n,r,s,o,a,c,l;if(1===t.nodeType){if(ue.hasData(e)&&(s=ue.access(e),o=ue.set(t,s),l=s.events))for(r in delete o.handle,o.events={},l)for(i=0,n=l[r].length;i1&&\"string\"==typeof f&&!N.checkClone&&Ve.test(f))return e.each((function(r){var s=e.eq(r);p&&(t[0]=f.call(this,r,s.html())),Ye(s,t,i,n)}));if(d&&(s=(r=Me(t,e[0].ownerDocument,!1,e,n)).firstChild,1===r.childNodes.length&&(r=s),s||n)){for(a=(o=z.map(Ee(r,\"script\"),We)).length;h\")},clone:function(e,t,i){var n,r,s,o,a=e.cloneNode(!0),c=z.contains(e.ownerDocument,e);if(!(N.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||z.isXMLDoc(e)))for(o=Ee(a),n=0,r=(s=Ee(e)).length;n0&&Ne(o,!c&&Ee(e,\"script\")),a},cleanData:function(e){for(var t,i,n,r=z.event.special,s=0;void 0!==(i=e[s]);s++)if(he(i)){if(t=i[ue.expando]){if(t.events)for(n in t.events)r[n]?z.event.remove(i,n):z.removeEvent(i,n,t.handle);i[ue.expando]=void 0}i[fe.expando]&&(i[fe.expando]=void 0)}}}),z.fn.extend({detach:function(e){return Xe(this,e,!0)},remove:function(e){return Xe(this,e)},text:function(e){return se(this,(function(e){return void 0===e?z.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Ye(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)}))},prepend:function(){return Ye(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Ye(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Ye(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(z.cleanData(Ee(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return z.clone(this,e,t)}))},html:function(e){return se(this,(function(e){var t=this[0]||{},i=0,n=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!qe.test(e)&&!Se[(ke.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=z.htmlPrefilter(e);try{for(;i=0&&(c+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-s-c-a-.5))),c}function pt(e,t,i){var n=Je(e),r=tt(e,t,n),s=\"border-box\"===z.css(e,\"boxSizing\",!1,n),o=s;if(Ze.test(r)){if(!i)return r;r=\"auto\"}return o=o&&(N.boxSizingReliable()||r===e.style[t]),(\"auto\"===r||!parseFloat(r)&&\"inline\"===z.css(e,\"display\",!1,n))&&(r=e[\"offset\"+t[0].toUpperCase()+t.slice(1)],o=!0),(r=parseFloat(r)||0)+ft(e,t,i||(s?\"border\":\"content\"),o,n,r)+\"px\"}z.extend({cssHooks:{opacity:{get:function(e,t){if(t){var i=tt(e,\"opacity\");return\"\"===i?\"1\":i}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,i,n){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var r,s,o,a=le(t),c=ot.test(t),l=e.style;if(c||(t=dt(a)),o=z.cssHooks[t]||z.cssHooks[a],void 0===i)return o&&\"get\"in o&&void 0!==(r=o.get(e,!1,n))?r:l[t];\"string\"===(s=typeof i)&&(r=be.exec(i))&&r[1]&&(i=function(e,t,i,n){var r,s,o=20,a=n?function(){return n.cur()}:function(){return z.css(e,t,\"\")},c=a(),l=i&&i[3]||(z.cssNumber[t]?\"\":\"px\"),h=(z.cssNumber[t]||\"px\"!==l&&+c)&&be.exec(z.css(e,t));if(h&&h[3]!==l){for(c/=2,l=l||h[3],h=+c||1;o--;)z.style(e,t,h+l),(1-s)*(1-(s=a()/c||.5))<=0&&(o=0),h/=s;h*=2,z.style(e,t,h+l),i=i||[]}return i&&(h=+h||+c||0,r=i[1]?h+(i[1]+1)*i[2]:+i[2],n&&(n.unit=l,n.start=h,n.end=r)),r}(e,t,r),s=\"number\"),null!=i&&i==i&&(\"number\"===s&&(i+=r&&r[3]||(z.cssNumber[a]?\"\":\"px\")),N.clearCloneStyle||\"\"!==i||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),o&&\"set\"in o&&void 0===(i=o.set(e,i,n))||(c?l.setProperty(t,i):l[t]=i))}},css:function(e,t,i,n){var r,s,o,a=le(t);return ot.test(t)||(t=dt(a)),(o=z.cssHooks[t]||z.cssHooks[a])&&\"get\"in o&&(r=o.get(e,!0,i)),void 0===r&&(r=tt(e,t,n)),\"normal\"===r&&t in ct&&(r=ct[t]),\"\"===i||i?(s=parseFloat(r),!0===i||isFinite(s)?s||0:r):r}}),z.each([\"height\",\"width\"],(function(e,t){z.cssHooks[t]={get:function(e,i,n){if(i)return!st.test(z.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?pt(e,t,n):ye(e,at,(function(){return pt(e,t,n)}))},set:function(e,i,n){var r,s=Je(e),o=\"border-box\"===z.css(e,\"boxSizing\",!1,s),a=n&&ft(e,t,n,o,s);return o&&N.scrollboxSize()===s.position&&(a-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(s[t])-ft(e,t,\"border\",!1,s)-.5)),a&&(r=be.exec(i))&&\"px\"!==(r[3]||\"px\")&&(e.style[t]=i,i=z.css(e,t)),ut(0,i,a)}}})),z.cssHooks.marginLeft=it(N.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(tt(e,\"marginLeft\"))||e.getBoundingClientRect().left-ye(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+\"px\"})),z.each({margin:\"\",padding:\"\",border:\"Width\"},(function(e,t){z.cssHooks[e+t]={expand:function(i){for(var n=0,r={},s=\"string\"==typeof i?i.split(\" \"):[i];n<4;n++)r[e+Fe[n]+t]=s[n]||s[n-2]||s[0];return r}},\"margin\"!==e&&(z.cssHooks[e+t].set=ut)})),z.fn.extend({css:function(e,t){return se(this,(function(e,t,i){var n,r,s={},o=0;if(Array.isArray(t)){for(n=Je(e),r=t.length;o1)}}),z.fn.delay=function(e,t){return e=z.fx&&z.fx.speeds[e]||e,t=t||\"fx\",this.queue(t,(function(t,i){var n=window.setTimeout(t,e);i.stop=function(){window.clearTimeout(n)}}))},nt=F.createElement(\"input\"),rt=F.createElement(\"select\").appendChild(F.createElement(\"option\")),nt.type=\"checkbox\",N.checkOn=\"\"!==nt.value,N.optSelected=rt.selected,(nt=F.createElement(\"input\")).value=\"t\",nt.type=\"radio\",N.radioValue=\"t\"===nt.value;var gt,mt=z.expr.attrHandle;z.fn.extend({attr:function(e,t){return se(this,z.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){z.removeAttr(this,e)}))}}),z.extend({attr:function(e,t,i){var n,r,s=e.nodeType;if(3!==s&&8!==s&&2!==s)return void 0===e.getAttribute?z.prop(e,t,i):(1===s&&z.isXMLDoc(e)||(r=z.attrHooks[t.toLowerCase()]||(z.expr.match.bool.test(t)?gt:void 0)),void 0!==i?null===i?void z.removeAttr(e,t):r&&\"set\"in r&&void 0!==(n=r.set(e,i,t))?n:(e.setAttribute(t,i+\"\"),i):r&&\"get\"in r&&null!==(n=r.get(e,t))?n:null==(n=z.find.attr(e,t))?void 0:n)},attrHooks:{type:{set:function(e,t){if(!N.radioValue&&\"radio\"===t&&Q(e,\"input\")){var i=e.value;return e.setAttribute(\"type\",t),i&&(e.value=i),t}}}},removeAttr:function(e,t){var i,n=0,r=t&&t.match(Z);if(r&&1===e.nodeType)for(;i=r[n++];)e.removeAttribute(i)}}),gt={set:function(e,t,i){return!1===t?z.removeAttr(e,i):e.setAttribute(i,i),i}},z.each(z.expr.match.bool.source.match(/\\w+/g),(function(e,t){var i=mt[t]||z.find.attr;mt[t]=function(e,t,n){var r,s,o=t.toLowerCase();return n||(s=mt[o],mt[o]=r,r=null!=i(e,t,n)?o:null,mt[o]=s),r}}));var wt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;function Ft(e){return(e.match(Z)||[]).join(\" \")}function vt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function yt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(Z)||[]}z.fn.extend({prop:function(e,t){return se(this,z.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[z.propFix[e]||e]}))}}),z.extend({prop:function(e,t,i){var n,r,s=e.nodeType;if(3!==s&&8!==s&&2!==s)return 1===s&&z.isXMLDoc(e)||(t=z.propFix[t]||t,r=z.propHooks[t]),void 0!==i?r&&\"set\"in r&&void 0!==(n=r.set(e,i,t))?n:e[t]=i:r&&\"get\"in r&&null!==(n=r.get(e,t))?n:e[t]},propHooks:{tabIndex:{get:function(e){var t=z.find.attr(e,\"tabindex\");return t?parseInt(t,10):wt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),N.optSelected||(z.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),z.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){z.propFix[this.toLowerCase()]=this})),z.fn.extend({addClass:function(e){var t,i,n,r,s,o,a,c=0;if(B(e))return this.each((function(t){z(this).addClass(e.call(this,t,vt(this)))}));if((t=yt(e)).length)for(;i=this[c++];)if(r=vt(i),n=1===i.nodeType&&\" \"+Ft(r)+\" \"){for(o=0;s=t[o++];)n.indexOf(\" \"+s+\" \")<0&&(n+=s+\" \");r!==(a=Ft(n))&&i.setAttribute(\"class\",a)}return this},removeClass:function(e){var t,i,n,r,s,o,a,c=0;if(B(e))return this.each((function(t){z(this).removeClass(e.call(this,t,vt(this)))}));if(!arguments.length)return this.attr(\"class\",\"\");if((t=yt(e)).length)for(;i=this[c++];)if(r=vt(i),n=1===i.nodeType&&\" \"+Ft(r)+\" \"){for(o=0;s=t[o++];)for(;n.indexOf(\" \"+s+\" \")>-1;)n=n.replace(\" \"+s+\" \",\" \");r!==(a=Ft(n))&&i.setAttribute(\"class\",a)}return this},toggleClass:function(e,t){var i=typeof e,n=\"string\"===i||Array.isArray(e);return\"boolean\"==typeof t&&n?t?this.addClass(e):this.removeClass(e):B(e)?this.each((function(i){z(this).toggleClass(e.call(this,i,vt(this),t),t)})):this.each((function(){var t,r,s,o;if(n)for(r=0,s=z(this),o=yt(e);t=o[r++];)s.hasClass(t)?s.removeClass(t):s.addClass(t);else void 0!==e&&\"boolean\"!==i||((t=vt(this))&&ue.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":ue.get(this,\"__className__\")||\"\"))}))},hasClass:function(e){var t,i,n=0;for(t=\" \"+e+\" \";i=this[n++];)if(1===i.nodeType&&(\" \"+Ft(vt(i))+\" \").indexOf(t)>-1)return!0;return!1}});var At=/\\r/g;z.fn.extend({val:function(e){var t,i,n,r=this[0];return arguments.length?(n=B(e),this.each((function(i){var r;1===this.nodeType&&(null==(r=n?e.call(this,i,z(this).val()):e)?r=\"\":\"number\"==typeof r?r+=\"\":Array.isArray(r)&&(r=z.map(r,(function(e){return null==e?\"\":e+\"\"}))),(t=z.valHooks[this.type]||z.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,r,\"value\")||(this.value=r))}))):r?(t=z.valHooks[r.type]||z.valHooks[r.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(i=t.get(r,\"value\"))?i:\"string\"==typeof(i=r.value)?i.replace(At,\"\"):null==i?\"\":i:void 0}}),z.extend({valHooks:{option:{get:function(e){var t=z.find.attr(e,\"value\");return null!=t?t:Ft(z.text(e))}},select:{get:function(e){var t,i,n,r=e.options,s=e.selectedIndex,o=\"select-one\"===e.type,a=o?null:[],c=o?s+1:r.length;for(n=s<0?c:o?s:0;n-1)&&(i=!0);return i||(e.selectedIndex=-1),s}}}}),z.each([\"radio\",\"checkbox\"],(function(){z.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=z.inArray(z(e).val(),t)>-1}},N.checkOn||(z.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})})),N.focusin=\"onfocusin\"in window;var Ct=/^(?:focusinfocus|focusoutblur)$/,_t=function(e){e.stopPropagation()};z.extend(z.event,{trigger:function(e,t,i,n){var r,s,o,a,c,l,h,d,u=[i||F],f=I.call(e,\"type\")?e.type:e,p=I.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(s=d=o=i=i||F,3!==i.nodeType&&8!==i.nodeType&&!Ct.test(f+z.event.triggered)&&(f.indexOf(\".\")>-1&&(p=f.split(\".\"),f=p.shift(),p.sort()),c=f.indexOf(\":\")<0&&\"on\"+f,(e=e[z.expando]?e:new z.Event(f,\"object\"==typeof e&&e)).isTrigger=n?2:3,e.namespace=p.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=i),t=null==t?[e]:z.makeArray(t,[e]),h=z.event.special[f]||{},n||!h.trigger||!1!==h.trigger.apply(i,t))){if(!n&&!h.noBubble&&!M(i)){for(a=h.delegateType||f,Ct.test(a+f)||(s=s.parentNode);s;s=s.parentNode)u.push(s),o=s;o===(i.ownerDocument||F)&&u.push(o.defaultView||o.parentWindow||window)}for(r=0;(s=u[r++])&&!e.isPropagationStopped();)d=s,e.type=r>1?a:h.bindType||f,(l=(ue.get(s,\"events\")||{})[e.type]&&ue.get(s,\"handle\"))&&l.apply(s,t),(l=c&&s[c])&&l.apply&&he(s)&&(e.result=l.apply(s,t),!1===e.result&&e.preventDefault());return e.type=f,n||e.isDefaultPrevented()||h._default&&!1!==h._default.apply(u.pop(),t)||!he(i)||c&&B(i[f])&&!M(i)&&((o=i[c])&&(i[c]=null),z.event.triggered=f,e.isPropagationStopped()&&d.addEventListener(f,_t),i[f](),e.isPropagationStopped()&&d.removeEventListener(f,_t),z.event.triggered=void 0,o&&(i[c]=o)),e.result}},simulate:function(e,t,i){var n=z.extend(new z.Event,i,{type:e,isSimulated:!0});z.event.trigger(n,null,t)}}),z.fn.extend({trigger:function(e,t){return this.each((function(){z.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var i=this[0];if(i)return z.event.trigger(e,t,i,!0)}}),N.focusin||z.each({focus:\"focusin\",blur:\"focusout\"},(function(e,t){var i=function(e){z.event.simulate(t,e.target,z.event.fix(e))};z.event.special[t]={setup:function(){var n=this.ownerDocument||this,r=ue.access(n,t);r||n.addEventListener(e,i,!0),ue.access(n,t,(r||0)+1)},teardown:function(){var n=this.ownerDocument||this,r=ue.access(n,t)-1;r?ue.access(n,t,r):(n.removeEventListener(e,i,!0),ue.remove(n,t))}}}));var xt,kt=/\\[\\]$/,It=/\\r?\\n/g,St=/^(?:submit|button|image|reset|file)$/i,Et=/^(?:input|select|textarea|keygen)/i;function Nt(e,t,i,n){var r;if(Array.isArray(t))z.each(t,(function(t,r){i||kt.test(e)?n(e,r):Nt(e+\"[\"+(\"object\"==typeof r&&null!=r?t:\"\")+\"]\",r,i,n)}));else if(i||\"object\"!==T(t))n(e,t);else for(r in t)Nt(e+\"[\"+r+\"]\",t[r],i,n)}z.param=function(e,t){var i,n=[],r=function(e,t){var i=B(t)?t():t;n[n.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==i?\"\":i)};if(Array.isArray(e)||e.jquery&&!z.isPlainObject(e))z.each(e,(function(){r(this.name,this.value)}));else for(i in e)Nt(i,e[i],t,r);return n.join(\"&\")},z.fn.extend({serialize:function(){return z.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=z.prop(this,\"elements\");return e?z.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!z(this).is(\":disabled\")&&Et.test(this.nodeName)&&!St.test(e)&&(this.checked||!xe.test(e))})).map((function(e,t){var i=z(this).val();return null==i?null:Array.isArray(i)?z.map(i,(function(e){return{name:t.name,value:e.replace(It,\"\\r\\n\")}})):{name:t.name,value:i.replace(It,\"\\r\\n\")}})).get()}}),z.fn.extend({wrapAll:function(e){var t;return this[0]&&(B(e)&&(e=e.call(this[0])),t=z(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return B(e)?this.each((function(t){z(this).wrapInner(e.call(this,t))})):this.each((function(){var t=z(this),i=t.contents();i.length?i.wrapAll(e):t.append(e)}))},wrap:function(e){var t=B(e);return this.each((function(i){z(this).wrapAll(t?e.call(this,i):e)}))},unwrap:function(e){return this.parent(e).not(\"body\").each((function(){z(this).replaceWith(this.childNodes)})),this}}),z.expr.pseudos.hidden=function(e){return!z.expr.pseudos.visible(e)},z.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},N.createHTMLDocument=((xt=F.implementation.createHTMLDocument(\"\").body).innerHTML=\"
\",2===xt.childNodes.length),z.parseHTML=function(e,t,i){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(i=t,t=!1),t||(N.createHTMLDocument?((n=(t=F.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=F.location.href,t.head.appendChild(n)):t=F),s=!i&&[],(r=j.exec(e))?[t.createElement(r[1])]:(r=Me([e],t,s),s&&s.length&&z(s).remove(),z.merge([],r.childNodes)));var n,r,s},z.offset={setOffset:function(e,t,i){var n,r,s,o,a,c,l=z.css(e,\"position\"),h=z(e),d={};\"static\"===l&&(e.style.position=\"relative\"),a=h.offset(),s=z.css(e,\"top\"),c=z.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&(s+c).indexOf(\"auto\")>-1?(o=(n=h.position()).top,r=n.left):(o=parseFloat(s)||0,r=parseFloat(c)||0),B(t)&&(t=t.call(e,i,z.extend({},a))),null!=t.top&&(d.top=t.top-a.top+o),null!=t.left&&(d.left=t.left-a.left+r),\"using\"in t?t.using.call(e,d):h.css(d)}},z.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){z.offset.setOffset(this,e,t)}));var t,i,n=this[0];return n?n.getClientRects().length?(t=n.getBoundingClientRect(),i=n.ownerDocument.defaultView,{top:t.top+i.pageYOffset,left:t.left+i.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,i,n=this[0],r={top:0,left:0};if(\"fixed\"===z.css(n,\"position\"))t=n.getBoundingClientRect();else{for(t=this.offset(),i=n.ownerDocument,e=n.offsetParent||i.documentElement;e&&(e===i.body||e===i.documentElement)&&\"static\"===z.css(e,\"position\");)e=e.parentNode;e&&e!==n&&1===e.nodeType&&((r=z(e).offset()).top+=z.css(e,\"borderTopWidth\",!0),r.left+=z.css(e,\"borderLeftWidth\",!0))}return{top:t.top-r.top-z.css(n,\"marginTop\",!0),left:t.left-r.left-z.css(n,\"marginLeft\",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&\"static\"===z.css(e,\"position\");)e=e.offsetParent;return e||De}))}}),z.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},(function(e,t){var i=\"pageYOffset\"===t;z.fn[e]=function(n){return se(this,(function(e,n,r){var s;if(M(e)?s=e:9===e.nodeType&&(s=e.defaultView),void 0===r)return s?s[t]:e[n];s?s.scrollTo(i?s.pageXOffset:r,i?r:s.pageYOffset):e[n]=r}),e,n,arguments.length)}})),z.each([\"top\",\"left\"],(function(e,t){z.cssHooks[t]=it(N.pixelPosition,(function(e,i){if(i)return i=tt(e,t),Ze.test(i)?z(e).position()[t]+\"px\":i}))})),z.each({Height:\"height\",Width:\"width\"},(function(e,t){z.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},(function(i,n){z.fn[n]=function(r,s){var o=arguments.length&&(i||\"boolean\"!=typeof r),a=i||(!0===r||!0===s?\"margin\":\"border\");return se(this,(function(t,i,r){var s;return M(t)?0===n.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(s=t.documentElement,Math.max(t.body[\"scroll\"+e],s[\"scroll\"+e],t.body[\"offset\"+e],s[\"offset\"+e],s[\"client\"+e])):void 0===r?z.css(t,i,a):z.style(t,i,r,a)}),t,o?r:void 0,o)}}))})),z.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),(function(e,t){z.fn[t]=function(e,i){return arguments.length>0?this.on(t,null,e,i):this.trigger(t)}})),z.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),z.fn.extend({bind:function(e,t,i){return this.on(e,null,t,i)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,i,n){return this.on(t,e,i,n)},undelegate:function(e,t,i){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",i)}}),z.proxy=function(e,t){var i,n,r;if(\"string\"==typeof t&&(i=e[t],t=e,e=i),B(e))return n=y.call(arguments,2),r=function(){return e.apply(t||this,n.concat(y.call(arguments)))},r.guid=e.guid=e.guid||z.guid++,r},z.holdReady=function(e){e?z.readyWait++:z.ready(!0)},z.isArray=Array.isArray,z.parseJSON=JSON.parse,z.nodeName=Q,z.isFunction=B,z.isWindow=M,z.camelCase=le,z.type=T,z.now=Date.now,z.isNumeric=function(e){var t=z.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))};const Bt=z;function Mt(e){return\"string\"==typeof e||e instanceof String}function Dt(e){var t=String(e).split(/[.,]/);return t[0].split(\"\").reverse().reduce((function(e,t,i){return i%3==0?e+\",\"+t:e+t})).split(\"\").reverse().join(\"\")+(t[1]?\".\"+t[1]:\"\")}const Rt=function(e){return e.split(/\\n|\\r\\n|\\r/g)};function Tt(e,t){var i,n,r=[],s=e.length,o=0,a=!1;if(s>0)for(r[o]=e.charAt(0),i=1;i0?e.charAt(0).toUpperCase()+e.slice(1):e}function zt(e){if(void 0!==e.name)return e.name;if(Mt(e)){let t=e.lastIndexOf(\"/\"),i=t<0?e:e.substr(t+1);return t=i.indexOf(\"?\"),t>0&&(i=i.substr(0,t)),i}throw Error(\"Expected File or string, got \"+typeof e)}function Ht(e){return!!e&&(\"function\"!=typeof e&&(e instanceof File||e.hasOwnProperty(\"name\")&&\"function\"==typeof e.slice&&\"function\"==typeof e.arrayBuffer))}function Pt(e,t){const i=document.createElement(\"a\");i.setAttribute(\"href\",t),i.setAttribute(\"download\",e),i.style.display=\"none\",document.body.appendChild(i),i.click(),document.body.removeChild(i)}function Ot(e){for(var t=Ut,i=t.parser.loose.exec(e),n={},r=14;r--;)n[t.key[r]]=i[r]||\"\";return n[t.q.name]={},n[t.key[12]].replace(t.q.parser,(function(e,i,r){i&&(n[t.q.name][i]=r)})),n}\"object\"==typeof process&&\"undefined\"==typeof window&&(global.atob=function(e){return Buffer.from(e,\"base64\").toString(\"binary\")});const Ut={strictMode:!1,key:[\"source\",\"protocol\",\"authority\",\"userInfo\",\"user\",\"password\",\"host\",\"port\",\"relative\",\"path\",\"directory\",\"file\",\"query\",\"anchor\"],q:{name:\"queryKey\",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/}};function qt(e){let t=e.length;for(;--t>=0;)e[t]=0}const Vt=256,Qt=286,jt=30,Wt=15,Gt=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),$t=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),Kt=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),Yt=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Xt=new Array(576);qt(Xt);const Zt=new Array(60);qt(Zt);const Jt=new Array(512);qt(Jt);const ei=new Array(256);qt(ei);const ti=new Array(29);qt(ti);const ii=new Array(jt);function ni(e,t,i,n,r){this.static_tree=e,this.extra_bits=t,this.extra_base=i,this.elems=n,this.max_length=r,this.has_stree=e&&e.length}let ri,si,oi;function ai(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}qt(ii);const ci=e=>e<256?Jt[e]:Jt[256+(e>>>7)],li=(e,t)=>{e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255},hi=(e,t,i)=>{e.bi_valid>16-i?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=i-16):(e.bi_buf|=t<{hi(e,i[2*t],i[2*t+1])},ui=(e,t)=>{let i=0;do{i|=1&e,e>>>=1,i<<=1}while(--t>0);return i>>>1},fi=(e,t,i)=>{const n=new Array(16);let r,s,o=0;for(r=1;r<=Wt;r++)o=o+i[r-1]<<1,n[r]=o;for(s=0;s<=t;s++){let t=e[2*s+1];0!==t&&(e[2*s]=ui(n[t]++,t))}},pi=e=>{let t;for(t=0;t{e.bi_valid>8?li(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},mi=(e,t,i,n)=>{const r=2*t,s=2*i;return e[r]{const n=e.heap[i];let r=i<<1;for(;r<=e.heap_len&&(r{let n,r,s,o,a=0;if(0!==e.sym_next)do{n=255&e.pending_buf[e.sym_buf+a++],n+=(255&e.pending_buf[e.sym_buf+a++])<<8,r=e.pending_buf[e.sym_buf+a++],0===n?di(e,r,t):(s=ei[r],di(e,s+Vt+1,t),o=Gt[s],0!==o&&(r-=ti[s],hi(e,r,o)),n--,s=ci(n),di(e,s,i),o=$t[s],0!==o&&(n-=ii[s],hi(e,n,o)))}while(a{const i=t.dyn_tree,n=t.stat_desc.static_tree,r=t.stat_desc.has_stree,s=t.stat_desc.elems;let o,a,c,l=-1;for(e.heap_len=0,e.heap_max=573,o=0;o>1;o>=1;o--)wi(e,i,o);c=s;do{o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],wi(e,i,1),a=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=a,i[2*c]=i[2*o]+i[2*a],e.depth[c]=(e.depth[o]>=e.depth[a]?e.depth[o]:e.depth[a])+1,i[2*o+1]=i[2*a+1]=c,e.heap[1]=c++,wi(e,i,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],((e,t)=>{const i=t.dyn_tree,n=t.max_code,r=t.stat_desc.static_tree,s=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,a=t.stat_desc.extra_base,c=t.stat_desc.max_length;let l,h,d,u,f,p,g=0;for(u=0;u<=Wt;u++)e.bl_count[u]=0;for(i[2*e.heap[e.heap_max]+1]=0,l=e.heap_max+1;l<573;l++)h=e.heap[l],u=i[2*i[2*h+1]+1]+1,u>c&&(u=c,g++),i[2*h+1]=u,h>n||(e.bl_count[u]++,f=0,h>=a&&(f=o[h-a]),p=i[2*h],e.opt_len+=p*(u+f),s&&(e.static_len+=p*(r[2*h+1]+f)));if(0!==g){do{for(u=c-1;0===e.bl_count[u];)u--;e.bl_count[u]--,e.bl_count[u+1]+=2,e.bl_count[c]--,g-=2}while(g>0);for(u=c;0!==u;u--)for(h=e.bl_count[u];0!==h;)d=e.heap[--l],d>n||(i[2*d+1]!==u&&(e.opt_len+=(u-i[2*d+1])*i[2*d],i[2*d+1]=u),h--)}})(e,t),fi(i,l,e.bl_count)},vi=(e,t,i)=>{let n,r,s=-1,o=t[1],a=0,c=7,l=4;for(0===o&&(c=138,l=3),t[2*(i+1)+1]=65535,n=0;n<=i;n++)r=o,o=t[2*(n+1)+1],++a{let n,r,s=-1,o=t[1],a=0,c=7,l=4;for(0===o&&(c=138,l=3),n=0;n<=i;n++)if(r=o,o=t[2*(n+1)+1],!(++a{hi(e,0+(n?1:0),3),gi(e),li(e,i),li(e,~i),i&&e.pending_buf.set(e.window.subarray(t,t+i),e.pending),e.pending+=i};var _i=e=>{Ai||((()=>{let e,t,i,n,r;const s=new Array(16);for(i=0,n=0;n<28;n++)for(ti[n]=i,e=0;e<1<>=7;n{let r,s,o=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=(e=>{let t,i=4093624447;for(t=0;t<=31;t++,i>>>=1)if(1&i&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t{let t;for(vi(e,e.dyn_ltree,e.l_desc.max_code),vi(e,e.dyn_dtree,e.d_desc.max_code),Fi(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*Yt[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(e),r=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=r&&(r=s)):r=s=i+5,i+4<=r&&-1!==t?Ci(e,t,i,n):4===e.strategy||s===r?(hi(e,2+(n?1:0),3),bi(e,Xt,Zt)):(hi(e,4+(n?1:0),3),((e,t,i,n)=>{let r;for(hi(e,t-257,5),hi(e,i-1,5),hi(e,n-4,4),r=0;r(e.pending_buf[e.sym_buf+e.sym_next++]=t,e.pending_buf[e.sym_buf+e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+e.sym_next++]=i,0===t?e.dyn_ltree[2*i]++:(e.matches++,t--,e.dyn_ltree[2*(ei[i]+Vt+1)]++,e.dyn_dtree[2*ci(t)]++),e.sym_next===e.sym_end),_tr_align:e=>{hi(e,2,3),di(e,256,Xt),(e=>{16===e.bi_valid?(li(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)})(e)}};var Ii=(e,t,i,n)=>{let r=65535&e,s=e>>>16&65535,o=0;for(;0!==i;){o=i>2e3?2e3:i,i-=o;do{r=r+t[n++]|0,s=s+r|0}while(--o);r%=65521,s%=65521}return r|s<<16};const Si=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var Ei=(e,t,i,n)=>{const r=Si,s=n+i;e^=-1;for(let i=n;i>>8^r[255&(e^t[i])];return~e},Ni={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"},Bi={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Mi,_tr_stored_block:Di,_tr_flush_block:Ri,_tr_tally:Ti,_tr_align:Li}=ki,{Z_NO_FLUSH:zi,Z_PARTIAL_FLUSH:Hi,Z_FULL_FLUSH:Pi,Z_FINISH:Oi,Z_BLOCK:Ui,Z_OK:qi,Z_STREAM_END:Vi,Z_STREAM_ERROR:Qi,Z_DATA_ERROR:ji,Z_BUF_ERROR:Wi,Z_DEFAULT_COMPRESSION:Gi,Z_FILTERED:$i,Z_HUFFMAN_ONLY:Ki,Z_RLE:Yi,Z_FIXED:Xi,Z_DEFAULT_STRATEGY:Zi,Z_UNKNOWN:Ji,Z_DEFLATED:en}=Bi,tn=258,nn=262,rn=42,sn=113,on=666,an=(e,t)=>(e.msg=Ni[t],t),cn=e=>2*e-(e>4?9:0),ln=e=>{let t=e.length;for(;--t>=0;)e[t]=0},hn=e=>{let t,i,n,r=e.w_size;t=e.hash_size,n=t;do{i=e.head[--n],e.head[n]=i>=r?i-r:0}while(--t);t=r,n=t;do{i=e.prev[--n],e.prev[n]=i>=r?i-r:0}while(--t)};let dn=(e,t,i)=>(t<{const t=e.state;let i=t.pending;i>e.avail_out&&(i=e.avail_out),0!==i&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+i),e.next_out),e.next_out+=i,t.pending_out+=i,e.total_out+=i,e.avail_out-=i,t.pending-=i,0===t.pending&&(t.pending_out=0))},fn=(e,t)=>{Ri(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,un(e.strm)},pn=(e,t)=>{e.pending_buf[e.pending++]=t},gn=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t},mn=(e,t,i,n)=>{let r=e.avail_in;return r>n&&(r=n),0===r?0:(e.avail_in-=r,t.set(e.input.subarray(e.next_in,e.next_in+r),i),1===e.state.wrap?e.adler=Ii(e.adler,t,r,i):2===e.state.wrap&&(e.adler=Ei(e.adler,t,r,i)),e.next_in+=r,e.total_in+=r,r)},wn=(e,t)=>{let i,n,r=e.max_chain_length,s=e.strstart,o=e.prev_length,a=e.nice_match;const c=e.strstart>e.w_size-nn?e.strstart-(e.w_size-nn):0,l=e.window,h=e.w_mask,d=e.prev,u=e.strstart+tn;let f=l[s+o-1],p=l[s+o];e.prev_length>=e.good_match&&(r>>=2),a>e.lookahead&&(a=e.lookahead);do{if(i=t,l[i+o]===p&&l[i+o-1]===f&&l[i]===l[s]&&l[++i]===l[s+1]){s+=2,i++;do{}while(l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&so){if(e.match_start=t,o=n,n>=a)break;f=l[s+o-1],p=l[s+o]}}}while((t=d[t&h])>c&&0!=--r);return o<=e.lookahead?o:e.lookahead},bn=e=>{const t=e.w_size;let i,n,r;do{if(n=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-nn)&&(e.window.set(e.window.subarray(t,t+t-n),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),hn(e),n+=t),0===e.strm.avail_in)break;if(i=mn(e.strm,e.window,e.strstart+e.lookahead,n),e.lookahead+=i,e.lookahead+e.insert>=3)for(r=e.strstart-e.insert,e.ins_h=e.window[r],e.ins_h=dn(e,e.ins_h,e.window[r+1]);e.insert&&(e.ins_h=dn(e,e.ins_h,e.window[r+3-1]),e.prev[r&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=r,r++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead{let i,n,r,s=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,o=0,a=e.strm.avail_in;do{if(i=65535,r=e.bi_valid+42>>3,e.strm.avail_outn+e.strm.avail_in&&(i=n+e.strm.avail_in),i>r&&(i=r),i>8,e.pending_buf[e.pending-2]=~i,e.pending_buf[e.pending-1]=~i>>8,un(e.strm),n&&(n>i&&(n=i),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+n),e.strm.next_out),e.strm.next_out+=n,e.strm.avail_out-=n,e.strm.total_out+=n,e.block_start+=n,i-=n),i&&(mn(e.strm,e.strm.output,e.strm.next_out,i),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i)}while(0===o);return a-=e.strm.avail_in,a&&(a>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=a&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-a,e.strm.next_in),e.strstart),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.block_start=e.strstart),e.high_waterr&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,r+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),r>e.strm.avail_in&&(r=e.strm.avail_in),r&&(mn(e.strm,e.window,e.strstart,r),e.strstart+=r,e.insert+=r>e.w_size-e.insert?e.w_size-e.insert:r),e.high_water>3,r=e.pending_buf_size-r>65535?65535:e.pending_buf_size-r,s=r>e.w_size?e.w_size:r,n=e.strstart-e.block_start,(n>=s||(n||t===Oi)&&t!==zi&&0===e.strm.avail_in&&n<=r)&&(i=n>r?r:n,o=t===Oi&&0===e.strm.avail_in&&i===n?1:0,Di(e,e.block_start,i,o),e.block_start+=i,un(e.strm)),o?3:1)},vn=(e,t)=>{let i,n;for(;;){if(e.lookahead=3&&(e.ins_h=dn(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==i&&e.strstart-i<=e.w_size-nn&&(e.match_length=wn(e,i)),e.match_length>=3)if(n=Ti(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=dn(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=dn(e,e.ins_h,e.window[e.strstart+1]);else n=Ti(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(fn(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,t===Oi?(fn(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(fn(e,!1),0===e.strm.avail_out)?1:2},yn=(e,t)=>{let i,n,r;for(;;){if(e.lookahead=3&&(e.ins_h=dn(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==i&&e.prev_length4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){r=e.strstart+e.lookahead-3,n=Ti(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=r&&(e.ins_h=dn(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,n&&(fn(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(n=Ti(e,0,e.window[e.strstart-1]),n&&fn(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=Ti(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,t===Oi?(fn(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(fn(e,!1),0===e.strm.avail_out)?1:2};function An(e,t,i,n,r){this.good_length=e,this.max_lazy=t,this.nice_length=i,this.max_chain=n,this.func=r}const Cn=[new An(0,0,0,0,Fn),new An(4,4,8,4,vn),new An(4,5,16,8,vn),new An(4,6,32,32,vn),new An(4,4,16,16,yn),new An(8,16,32,32,yn),new An(8,16,128,128,yn),new An(8,32,128,256,yn),new An(32,128,258,1024,yn),new An(32,258,258,4096,yn)];function _n(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=en,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),ln(this.dyn_ltree),ln(this.dyn_dtree),ln(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),ln(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),ln(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const xn=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.status!==rn&&57!==t.status&&69!==t.status&&73!==t.status&&91!==t.status&&103!==t.status&&t.status!==sn&&t.status!==on?1:0},kn=e=>{if(xn(e))return an(e,Qi);e.total_in=e.total_out=0,e.data_type=Ji;const t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=2===t.wrap?57:t.wrap?rn:sn,e.adler=2===t.wrap?0:1,t.last_flush=-2,Mi(t),qi},In=e=>{const t=kn(e);var i;return t===qi&&((i=e.state).window_size=2*i.w_size,ln(i.head),i.max_lazy_match=Cn[i.level].max_lazy,i.good_match=Cn[i.level].good_length,i.nice_match=Cn[i.level].nice_length,i.max_chain_length=Cn[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),t},Sn=(e,t,i,n,r,s)=>{if(!e)return Qi;let o=1;if(t===Gi&&(t=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),r<1||r>9||i!==en||n<8||n>15||t<0||t>9||s<0||s>Xi||8===n&&1!==o)return an(e,Qi);8===n&&(n=9);const a=new _n;return e.state=a,a.strm=e,a.status=rn,a.wrap=o,a.gzhead=null,a.w_bits=n,a.w_size=1<{let i=t.length;if(xn(e))return Qi;const n=e.state,r=n.wrap;if(2===r||1===r&&n.status!==rn||n.lookahead)return Qi;if(1===r&&(e.adler=Ii(e.adler,t,i,0)),n.wrap=0,i>=n.w_size){0===r&&(ln(n.head),n.strstart=0,n.block_start=0,n.insert=0);let e=new Uint8Array(n.w_size);e.set(t.subarray(i-n.w_size,i),0),t=e,i=n.w_size}const s=e.avail_in,o=e.next_in,a=e.input;for(e.avail_in=i,e.next_in=0,e.input=t,bn(n);n.lookahead>=3;){let e=n.strstart,t=n.lookahead-2;do{n.ins_h=dn(n,n.ins_h,n.window[e+3-1]),n.prev[e&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=e,e++}while(--t);n.strstart=e,n.lookahead=2,bn(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,e.next_in=o,e.input=a,e.avail_in=s,n.wrap=r,qi},Nn={deflateInit:(e,t)=>Sn(e,t,en,15,8,Zi),deflateInit2:Sn,deflateReset:In,deflateResetKeep:kn,deflateSetHeader:(e,t)=>xn(e)||2!==e.state.wrap?Qi:(e.state.gzhead=t,qi),deflate:(e,t)=>{if(xn(e)||t>Ui||t<0)return e?an(e,Qi):Qi;const i=e.state;if(!e.output||0!==e.avail_in&&!e.input||i.status===on&&t!==Oi)return an(e,0===e.avail_out?Wi:Qi);const n=i.last_flush;if(i.last_flush=t,0!==i.pending){if(un(e),0===e.avail_out)return i.last_flush=-1,qi}else if(0===e.avail_in&&cn(t)<=cn(n)&&t!==Oi)return an(e,Wi);if(i.status===on&&0!==e.avail_in)return an(e,Wi);if(i.status===rn&&0===i.wrap&&(i.status=sn),i.status===rn){let t=en+(i.w_bits-8<<4)<<8,n=-1;if(n=i.strategy>=Ki||i.level<2?0:i.level<6?1:6===i.level?2:3,t|=n<<6,0!==i.strstart&&(t|=32),t+=31-t%31,gn(i,t),0!==i.strstart&&(gn(i,e.adler>>>16),gn(i,65535&e.adler)),e.adler=1,i.status=sn,un(e),0!==i.pending)return i.last_flush=-1,qi}if(57===i.status)if(e.adler=0,pn(i,31),pn(i,139),pn(i,8),i.gzhead)pn(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),pn(i,255&i.gzhead.time),pn(i,i.gzhead.time>>8&255),pn(i,i.gzhead.time>>16&255),pn(i,i.gzhead.time>>24&255),pn(i,9===i.level?2:i.strategy>=Ki||i.level<2?4:0),pn(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(pn(i,255&i.gzhead.extra.length),pn(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=Ei(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(pn(i,0),pn(i,0),pn(i,0),pn(i,0),pn(i,0),pn(i,9===i.level?2:i.strategy>=Ki||i.level<2?4:0),pn(i,3),i.status=sn,un(e),0!==i.pending)return i.last_flush=-1,qi;if(69===i.status){if(i.gzhead.extra){let t=i.pending,n=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+n>i.pending_buf_size;){let r=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+r),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>t&&(e.adler=Ei(e.adler,i.pending_buf,i.pending-t,t)),i.gzindex+=r,un(e),0!==i.pending)return i.last_flush=-1,qi;t=0,n-=r}let r=new Uint8Array(i.gzhead.extra);i.pending_buf.set(r.subarray(i.gzindex,i.gzindex+n),i.pending),i.pending+=n,i.gzhead.hcrc&&i.pending>t&&(e.adler=Ei(e.adler,i.pending_buf,i.pending-t,t)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let t,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(e.adler=Ei(e.adler,i.pending_buf,i.pending-n,n)),un(e),0!==i.pending)return i.last_flush=-1,qi;n=0}t=i.gzindexn&&(e.adler=Ei(e.adler,i.pending_buf,i.pending-n,n)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let t,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(e.adler=Ei(e.adler,i.pending_buf,i.pending-n,n)),un(e),0!==i.pending)return i.last_flush=-1,qi;n=0}t=i.gzindexn&&(e.adler=Ei(e.adler,i.pending_buf,i.pending-n,n))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(un(e),0!==i.pending))return i.last_flush=-1,qi;pn(i,255&e.adler),pn(i,e.adler>>8&255),e.adler=0}if(i.status=sn,un(e),0!==i.pending)return i.last_flush=-1,qi}if(0!==e.avail_in||0!==i.lookahead||t!==zi&&i.status!==on){let n=0===i.level?Fn(i,t):i.strategy===Ki?((e,t)=>{let i;for(;;){if(0===e.lookahead&&(bn(e),0===e.lookahead)){if(t===zi)return 1;break}if(e.match_length=0,i=Ti(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,i&&(fn(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Oi?(fn(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(fn(e,!1),0===e.strm.avail_out)?1:2})(i,t):i.strategy===Yi?((e,t)=>{let i,n,r,s;const o=e.window;for(;;){if(e.lookahead<=tn){if(bn(e),e.lookahead<=tn&&t===zi)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(r=e.strstart-1,n=o[r],n===o[++r]&&n===o[++r]&&n===o[++r])){s=e.strstart+tn;do{}while(n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&re.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(i=Ti(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(i=Ti(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),i&&(fn(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Oi?(fn(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(fn(e,!1),0===e.strm.avail_out)?1:2})(i,t):Cn[i.level].func(i,t);if(3!==n&&4!==n||(i.status=on),1===n||3===n)return 0===e.avail_out&&(i.last_flush=-1),qi;if(2===n&&(t===Hi?Li(i):t!==Ui&&(Di(i,0,0,!1),t===Pi&&(ln(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),un(e),0===e.avail_out))return i.last_flush=-1,qi}return t!==Oi?qi:i.wrap<=0?Vi:(2===i.wrap?(pn(i,255&e.adler),pn(i,e.adler>>8&255),pn(i,e.adler>>16&255),pn(i,e.adler>>24&255),pn(i,255&e.total_in),pn(i,e.total_in>>8&255),pn(i,e.total_in>>16&255),pn(i,e.total_in>>24&255)):(gn(i,e.adler>>>16),gn(i,65535&e.adler)),un(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?qi:Vi)},deflateEnd:e=>{if(xn(e))return Qi;const t=e.state.status;return e.state=null,t===sn?an(e,ji):qi},deflateSetDictionary:En,deflateInfo:\"pako deflate (from Nodeca project)\"};const Bn=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Mn={assign:function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if(\"object\"!=typeof i)throw new TypeError(i+\"must be non-object\");for(const t in i)Bn(i,t)&&(e[t]=i[t])}}return e},flattenChunks:e=>{let t=0;for(let i=0,n=e.length;i=252?6:WA>=248?5:WA>=240?4:WA>=224?3:WA>=192?2:1;Rn[254]=Rn[254]=1;var Tn={string2buf:e=>{if(\"function\"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,i,n,r,s,o=e.length,a=0;for(r=0;r>>6,t[s++]=128|63&i):i<65536?(t[s++]=224|i>>>12,t[s++]=128|i>>>6&63,t[s++]=128|63&i):(t[s++]=240|i>>>18,t[s++]=128|i>>>12&63,t[s++]=128|i>>>6&63,t[s++]=128|63&i);return t},buf2string:(e,t)=>{const i=t||e.length;if(\"function\"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let n,r;const s=new Array(2*i);for(r=0,n=0;n4)s[r++]=65533,n+=o-1;else{for(t&=2===o?31:3===o?15:7;o>1&&n1?s[r++]=65533:t<65536?s[r++]=t:(t-=65536,s[r++]=55296|t>>10&1023,s[r++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&Dn)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i=\"\";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+Rn[e[i]]>t?i:t}};var Ln=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0};const zn=Object.prototype.toString,{Z_NO_FLUSH:Hn,Z_SYNC_FLUSH:Pn,Z_FULL_FLUSH:On,Z_FINISH:Un,Z_OK:qn,Z_STREAM_END:Vn,Z_DEFAULT_COMPRESSION:Qn,Z_DEFAULT_STRATEGY:jn,Z_DEFLATED:Wn}=Bi;function Gn(e){this.options=Mn.assign({level:Qn,method:Wn,chunkSize:16384,windowBits:15,memLevel:8,strategy:jn},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new Ln,this.strm.avail_out=0;let i=Nn.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(i!==qn)throw new Error(Ni[i]);if(t.header&&Nn.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e=\"string\"==typeof t.dictionary?Tn.string2buf(t.dictionary):\"[object ArrayBuffer]\"===zn.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,i=Nn.deflateSetDictionary(this.strm,e),i!==qn)throw new Error(Ni[i]);this._dict_set=!0}}function $n(e,t){const i=new Gn(t);if(i.push(e,!0),i.err)throw i.msg||Ni[i.err];return i.result}Gn.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize;let r,s;if(this.ended)return!1;for(s=t===~~t?t:!0===t?Un:Hn,\"string\"==typeof e?i.input=Tn.string2buf(e):\"[object ArrayBuffer]\"===zn.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),(s===Pn||s===On)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(r=Nn.deflate(i,s),r===Vn)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),r=Nn.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===qn;if(0!==i.avail_out){if(s>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},Gn.prototype.onData=function(e){this.chunks.push(e)},Gn.prototype.onEnd=function(e){e===qn&&(this.result=Mn.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var Kn=function(e,t){return(t=t||{}).raw=!0,$n(e,t)},Yn=function(e,t){return(t=t||{}).gzip=!0,$n(e,t)},Xn={Deflate:Gn,deflate:$n,deflateRaw:Kn,gzip:Yn,constants:Bi};const Zn=16209;var Jn=function(e,t){let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_,x;const k=e.state;i=e.next_in,_=e.input,n=i+(e.avail_in-5),r=e.next_out,x=e.output,s=r-(t-e.avail_out),o=r+(e.avail_out-257),a=k.dmax,c=k.wsize,l=k.whave,h=k.wnext,d=k.window,u=k.hold,f=k.bits,p=k.lencode,g=k.distcode,m=(1<>>24,u>>>=F,f-=F,F=b>>>16&255,0===F)x[r++]=65535&b;else{if(!(16&F)){if(64&F){if(32&F){k.mode=16191;break e}e.msg=\"invalid literal/length code\",k.mode=Zn;break e}b=p[(65535&b)+(u&(1<>>=F,f-=F),f<15&&(u+=_[i++]<>>24,u>>>=F,f-=F,F=b>>>16&255,16&F){if(y=65535&b,F&=15,fa){e.msg=\"invalid distance too far back\",k.mode=Zn;break e}if(u>>>=F,f-=F,F=r-s,y>F){if(F=y-F,F>l&&k.sane){e.msg=\"invalid distance too far back\",k.mode=Zn;break e}if(A=0,C=d,0===h){if(A+=c-F,F2;)x[r++]=C[A++],x[r++]=C[A++],x[r++]=C[A++],v-=3;v&&(x[r++]=C[A++],v>1&&(x[r++]=C[A++]))}else{A=r-y;do{x[r++]=x[A++],x[r++]=x[A++],x[r++]=x[A++],v-=3}while(v>2);v&&(x[r++]=x[A++],v>1&&(x[r++]=x[A++]))}break}if(64&F){e.msg=\"invalid distance code\",k.mode=Zn;break e}b=g[(65535&b)+(u&(1<>3,i-=v,f-=v<<3,u&=(1<{const c=a.bits;let l,h,d,u,f,p,g=0,m=0,w=0,b=0,F=0,v=0,y=0,A=0,C=0,_=0,x=null;const k=new Uint16Array(16),I=new Uint16Array(16);let S,E,N,B=null;for(g=0;g<=er;g++)k[g]=0;for(m=0;m=1&&0===k[b];b--);if(F>b&&(F=b),0===b)return r[s++]=20971520,r[s++]=20971520,a.bits=1,0;for(w=1;w0&&(0===e||1!==b))return-1;for(I[1]=0,g=1;g852||2===e&&C>592)return 1;for(;;){S=g-y,o[m]+1=p?(E=B[o[m]-p],N=x[o[m]-p]):(E=96,N=0),l=1<>y)+h]=S<<24|E<<16|N}while(0!==h);for(l=1<>=1;if(0!==l?(_&=l-1,_+=l):_=0,m++,0==--k[g]){if(g===b)break;g=t[i+o[m]]}if(g>F&&(_&u)!==d){for(0===y&&(y=F),f+=w,v=g-y,A=1<852||2===e&&C>592)return 1;d=_&u,r[d]=F<<24|v<<16|f-s}}return 0!==_&&(r[f+_]=g-y<<24|64<<16),a.bits=F,0};const{Z_FINISH:or,Z_BLOCK:ar,Z_TREES:cr,Z_OK:lr,Z_STREAM_END:hr,Z_NEED_DICT:dr,Z_STREAM_ERROR:ur,Z_DATA_ERROR:fr,Z_MEM_ERROR:pr,Z_BUF_ERROR:gr,Z_DEFLATED:mr}=Bi,wr=16180,br=16190,Fr=16191,vr=16192,yr=16194,Ar=16199,Cr=16200,_r=16206,xr=16209,kr=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function Ir(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Sr=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.mode16211?1:0},Er=e=>{if(Sr(e))return ur;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=wr,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,lr},Nr=e=>{if(Sr(e))return ur;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,Er(e)},Br=(e,t)=>{let i;if(Sr(e))return ur;const n=e.state;return t<0?(i=0,t=-t):(i=5+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?ur:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,Nr(e))},Mr=(e,t)=>{if(!e)return ur;const i=new Ir;e.state=i,i.strm=e,i.window=null,i.mode=wr;const n=Br(e,t);return n!==lr&&(e.state=null),n};let Dr,Rr,Tr=!0;const Lr=e=>{if(Tr){Dr=new Int32Array(512),Rr=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(sr(1,e.lens,0,288,Dr,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;sr(2,e.lens,0,32,Rr,0,e.work,{bits:5}),Tr=!1}e.lencode=Dr,e.lenbits=9,e.distcode=Rr,e.distbits=5},zr=(e,t,i,n)=>{let r;const s=e.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(t.subarray(i-s.wsize,i),0),s.wnext=0,s.whave=s.wsize):(r=s.wsize-s.wnext,r>n&&(r=n),s.window.set(t.subarray(i-n,i-n+r),s.wnext),(n-=r)?(s.window.set(t.subarray(i-n,i),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave{let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_=0;const x=new Uint8Array(4);let k,I;const S=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Sr(e)||!e.output||!e.input&&0!==e.avail_in)return ur;i=e.state,i.mode===Fr&&(i.mode=vr),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,d=a,u=c,C=lr;e:for(;;)switch(i.mode){case wr:if(0===i.wrap){i.mode=vr;break}for(;h<16;){if(0===a)break e;a--,l+=n[s++]<>>8&255,i.check=Ei(i.check,x,2,0),l=0,h=0,i.mode=16181;break}if(i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg=\"incorrect header check\",i.mode=xr;break}if((15&l)!==mr){e.msg=\"unknown compression method\",i.mode=xr;break}if(l>>>=4,h-=4,A=8+(15&l),0===i.wbits&&(i.wbits=A),A>15||A>i.wbits){e.msg=\"invalid window size\",i.mode=xr;break}i.dmax=1<>8&1),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,i.check=Ei(i.check,x,2,0)),l=0,h=0,i.mode=16182;case 16182:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<>>8&255,x[2]=l>>>16&255,x[3]=l>>>24&255,i.check=Ei(i.check,x,4,0)),l=0,h=0,i.mode=16183;case 16183:for(;h<16;){if(0===a)break e;a--,l+=n[s++]<>8),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,i.check=Ei(i.check,x,2,0)),l=0,h=0,i.mode=16184;case 16184:if(1024&i.flags){for(;h<16;){if(0===a)break e;a--,l+=n[s++]<>>8&255,i.check=Ei(i.check,x,2,0)),l=0,h=0}else i.head&&(i.head.extra=null);i.mode=16185;case 16185:if(1024&i.flags&&(f=i.length,f>a&&(f=a),f&&(i.head&&(A=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(n.subarray(s,s+f),A)),512&i.flags&&4&i.wrap&&(i.check=Ei(i.check,n,f,s)),a-=f,s+=f,i.length-=f),i.length))break e;i.length=0,i.mode=16186;case 16186:if(2048&i.flags){if(0===a)break e;f=0;do{A=n[s+f++],i.head&&A&&i.length<65536&&(i.head.name+=String.fromCharCode(A))}while(A&&f>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=Fr;break;case 16189:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<>>=7&h,h-=7&h,i.mode=_r;break}for(;h<3;){if(0===a)break e;a--,l+=n[s++]<>>=1,h-=1,3&l){case 0:i.mode=16193;break;case 1:if(Lr(i),i.mode=Ar,t===cr){l>>>=2,h-=2;break e}break;case 2:i.mode=16196;break;case 3:e.msg=\"invalid block type\",i.mode=xr}l>>>=2,h-=2;break;case 16193:for(l>>>=7&h,h-=7&h;h<32;){if(0===a)break e;a--,l+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",i.mode=xr;break}if(i.length=65535&l,l=0,h=0,i.mode=yr,t===cr)break e;case yr:i.mode=16195;case 16195:if(f=i.length,f){if(f>a&&(f=a),f>c&&(f=c),0===f)break e;r.set(n.subarray(s,s+f),o),a-=f,s+=f,c-=f,o+=f,i.length-=f;break}i.mode=Fr;break;case 16196:for(;h<14;){if(0===a)break e;a--,l+=n[s++]<>>=5,h-=5,i.ndist=1+(31&l),l>>>=5,h-=5,i.ncode=4+(15&l),l>>>=4,h-=4,i.nlen>286||i.ndist>30){e.msg=\"too many length or distance symbols\",i.mode=xr;break}i.have=0,i.mode=16197;case 16197:for(;i.have>>=3,h-=3}for(;i.have<19;)i.lens[S[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,k={bits:i.lenbits},C=sr(0,i.lens,0,19,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg=\"invalid code lengths set\",i.mode=xr;break}i.have=0,i.mode=16198;case 16198:for(;i.have>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<>>=m,h-=m,i.lens[i.have++]=b;else{if(16===b){for(I=m+2;h>>=m,h-=m,0===i.have){e.msg=\"invalid bit length repeat\",i.mode=xr;break}A=i.lens[i.have-1],f=3+(3&l),l>>>=2,h-=2}else if(17===b){for(I=m+3;h>>=m,h-=m,A=0,f=3+(7&l),l>>>=3,h-=3}else{for(I=m+7;h>>=m,h-=m,A=0,f=11+(127&l),l>>>=7,h-=7}if(i.have+f>i.nlen+i.ndist){e.msg=\"invalid bit length repeat\",i.mode=xr;break}for(;f--;)i.lens[i.have++]=A}}if(i.mode===xr)break;if(0===i.lens[256]){e.msg=\"invalid code -- missing end-of-block\",i.mode=xr;break}if(i.lenbits=9,k={bits:i.lenbits},C=sr(1,i.lens,0,i.nlen,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg=\"invalid literal/lengths set\",i.mode=xr;break}if(i.distbits=6,i.distcode=i.distdyn,k={bits:i.distbits},C=sr(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,k),i.distbits=k.bits,C){e.msg=\"invalid distances set\",i.mode=xr;break}if(i.mode=Ar,t===cr)break e;case Ar:i.mode=Cr;case Cr:if(a>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,Jn(e,u),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,i.mode===Fr&&(i.back=-1);break}for(i.back=0;_=i.lencode[l&(1<>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,i.length=b,0===w){i.mode=16205;break}if(32&w){i.back=-1,i.mode=Fr;break}if(64&w){e.msg=\"invalid literal/length code\",i.mode=xr;break}i.extra=15&w,i.mode=16201;case 16201:if(i.extra){for(I=i.extra;h>>=i.extra,h-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=16202;case 16202:for(;_=i.distcode[l&(1<>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,64&w){e.msg=\"invalid distance code\",i.mode=xr;break}i.offset=b,i.extra=15&w,i.mode=16203;case 16203:if(i.extra){for(I=i.extra;h>>=i.extra,h-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg=\"invalid distance too far back\",i.mode=xr;break}i.mode=16204;case 16204:if(0===c)break e;if(f=u-c,i.offset>f){if(f=i.offset-f,f>i.whave&&i.sane){e.msg=\"invalid distance too far back\",i.mode=xr;break}f>i.wnext?(f-=i.wnext,p=i.wsize-f):p=i.wnext-f,f>i.length&&(f=i.length),g=i.window}else g=r,p=o-i.offset,f=i.length;f>c&&(f=c),c-=f,i.length-=f;do{r[o++]=g[p++]}while(--f);0===i.length&&(i.mode=Cr);break;case 16205:if(0===c)break e;r[o++]=i.length,c--,i.mode=Cr;break;case _r:if(i.wrap){for(;h<32;){if(0===a)break e;a--,l|=n[s++]<Mr(e,15),inflateInit2:Mr,inflate:Hr,inflateEnd:e=>{if(Sr(e))return ur;let t=e.state;return t.window&&(t.window=null),e.state=null,lr},inflateGetHeader:(e,t)=>{if(Sr(e))return ur;const i=e.state;return 2&i.wrap?(i.head=t,t.done=!1,lr):ur},inflateSetDictionary:(e,t)=>{const i=t.length;let n,r,s;return Sr(e)?ur:(n=e.state,0!==n.wrap&&n.mode!==br?ur:n.mode===br&&(r=1,r=Ii(r,t,i,0),r!==n.check)?fr:(s=zr(e,t,i,i),s?(n.mode=16210,pr):(n.havedict=1,lr)))},inflateInfo:\"pako inflate (from Nodeca project)\"};var Or=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1};const Ur=Object.prototype.toString,{Z_NO_FLUSH:qr,Z_FINISH:Vr,Z_OK:Qr,Z_STREAM_END:jr,Z_NEED_DICT:Wr,Z_STREAM_ERROR:Gr,Z_DATA_ERROR:$r,Z_MEM_ERROR:Kr}=Bi;function Yr(e){this.options=Mn.assign({chunkSize:65536,windowBits:15,to:\"\"},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new Ln,this.strm.avail_out=0;let i=Pr.inflateInit2(this.strm,t.windowBits);if(i!==Qr)throw new Error(Ni[i]);if(this.header=new Or,Pr.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=Tn.string2buf(t.dictionary):\"[object ArrayBuffer]\"===Ur.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=Pr.inflateSetDictionary(this.strm,t.dictionary),i!==Qr)))throw new Error(Ni[i])}function Xr(e,t){const i=new Yr(t);if(i.push(e),i.err)throw i.msg||Ni[i.err];return i.result}Yr.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,r=this.options.dictionary;let s,o,a;if(this.ended)return!1;for(o=t===~~t?t:!0===t?Vr:qr,\"[object ArrayBuffer]\"===Ur.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),s=Pr.inflate(i,o),s===Wr&&r&&(s=Pr.inflateSetDictionary(i,r),s===Qr?s=Pr.inflate(i,o):s===$r&&(s=Wr));i.avail_in>0&&s===jr&&i.state.wrap>0&&0!==e[i.next_in];)Pr.inflateReset(i),s=Pr.inflate(i,o);switch(s){case Gr:case $r:case Wr:case Kr:return this.onEnd(s),this.ended=!0,!1}if(a=i.avail_out,i.next_out&&(0===i.avail_out||s===jr))if(\"string\"===this.options.to){let e=Tn.utf8border(i.output,i.next_out),t=i.next_out-e,r=Tn.buf2string(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(r)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(s!==Qr||0!==a){if(s===jr)return s=Pr.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},Yr.prototype.onData=function(e){this.chunks.push(e)},Yr.prototype.onEnd=function(e){e===Qr&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=Mn.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var Zr=function(e,t){return(t=t||{}).raw=!0,Xr(e,t)},Jr={Inflate:Yr,inflate:Xr,inflateRaw:Zr,ungzip:Xr,constants:Bi};const{Deflate:es,deflate:ts,deflateRaw:is,gzip:ns}=Xn,{Inflate:rs,inflate:ss,inflateRaw:os,ungzip:as}=Jr;var cs=is,ls=ss,hs=os,ds=as;const us=4;function fs(e){const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 31===t[0]&&139===t[1]}function ps(e){const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 0!==(t[3]&us)&&66===t[12]&&67===t[13]?gs(t.buffer):ds(t)}function gs(e,t){const i=[];let n=0,r=0;for(t=t||e.byteLength-18;n100?Fs(new Uint8Array(e.buffer,e.byteOffset+t,r),i,n):function(e,t,i,n,r){for(let s=0;s=0){r=atob(r);const e=new Uint8Array(r.length);for(let t=0;t0?ds(e):e,i}return decodeURIComponent(r)}const ys={lerp:(e,t,i)=>(1-i)*e+i*t,mean:function(e){var t,i=0,n=0;for(t=0;t0?i/n:0},meanAndStdev:function(e){var t,i,n=0,r=0,s=0;for(i=0;i0?{mean:n/s,stdev:Math.sqrt(r-n*n/s)}:{mean:0,stdev:0}},median:function(e){var t=e.length;return e.sort(),t%2==0?(e[t/2-1]+e[t/2])/2:e[(t-1)/2]},percentile:function(e,t){if(0!==e.length){var i=Math.floor(e.length*((100-t)/100));return 0===i?(e.sort((function(e,t){return t-e})),e[i]):function(e,t){var i,n=new As;for(i=0;in.content[0])&&(n.content.length===t&&n.pop(),n.push(r))}return n.content[0]}(e,i)}},clamp:function(e,t,i){return Math.min(Math.max(e,t),i)},log2:function(e){return Math.log(e)/Math.LN2}};function As(){this.content=[]}function Cs(e,t){return Math.random()*(t-e)+e}As.prototype={push:function(e){this.content.push(e),this.bubbleUp(this.content.length-1)},pop:function(){var e=this.content[0],t=this.content.pop();return this.content.length>0&&(this.content[0]=t,this.sinkDown(0)),e},remove:function(e){for(var t=this.content.length,i=0;i0;){var n=Math.floor((e+1)/2)-1,r=this.content[n];if(i>=r)break;this.content[n]=t,this.content[e]=r,e=n}},sinkDown:function(e){for(var t=this.content.length,i=this.content[e],n=i;;){var r=2*(e+1),s=r-1,o=null;if(s{let e=[];for(let t=1;t>=.5;t-=.1)for(let i=0;i<1;i+=1/28){const n=\"rgb(\"+_s.hsvToRgb(i,1,t).join(\",\")+\")\";e.push(n)}return e.pop(),e.push(_s.rgbColor(16,16,16)),e},rgbToHex:function(e){return(e=e.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i))&&4===e.length?\"#\"+(\"0\"+parseInt(e[1],10).toString(16)).slice(-2)+(\"0\"+parseInt(e[2],10).toString(16)).slice(-2)+(\"0\"+parseInt(e[3],10).toString(16)).slice(-2):\"\"},hexToRgb:function(e){var t=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(e);if(null!==t)return\"rgb(\"+parseInt(t[1],16)+\",\"+parseInt(t[2],16)+\",\"+parseInt(t[3],16)+\")\"},hsvToRgb:function(e,t,i){var n,r,s,o=Math.floor(6*e),a=6*e-o,c=i*(1-t),l=i*(1-a*t),h=i*(1-(1-a)*t);switch(o%6){case 0:n=i,r=h,s=c;break;case 1:n=l,r=i,s=c;break;case 2:n=c,r=i,s=h;break;case 3:n=c,r=l,s=i;break;case 4:n=h,r=c,s=i;break;case 5:n=i,r=c,s=l}return[Math.floor(255*n),Math.floor(255*r),Math.floor(255*s)]},hslToRgb:function(e,t,i){var n,r,s;if(0===t)n=r=s=i;else{var o=i<.5?i*(1+t):i+t-i*t,a=2*i-o;n=_s.hue2rgb(a,o,e+1/3),r=_s.hue2rgb(a,o,e),s=_s.hue2rgb(a,o,e-1/3)}return[255*n,255*r,255*s]},hue2rgb:(e,t,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e),rgbaColor:function(e,t,i,n){return\"rgba(\"+(e=ys.clamp(e,0,255))+\",\"+(t=ys.clamp(t,0,255))+\",\"+(i=ys.clamp(i,0,255))+\",\"+(n=ys.clamp(n,0,1))+\")\"},rgbColor:function(e,t,i){return\"rgb(\"+(e=ys.clamp(e,0,255))+\",\"+(t=ys.clamp(t,0,255))+\",\"+(i=ys.clamp(i,0,255))+\")\"},greyScale:function(e){var t=ys.clamp(e,0,255);return\"rgb(\"+t+\",\"+t+\",\"+t+\")\"},randomGrey:function(e,t){e=ys.clamp(e,0,255),t=ys.clamp(t,0,255);var i=Math.round(Cs(e,t)).toString(10);return\"rgb(\"+i+\",\"+i+\",\"+i+\")\"},randomRGB:function(e,t){return e=ys.clamp(e,0,255),t=ys.clamp(t,0,255),\"rgb(\"+Math.round(Cs(e,t)).toString(10)+\",\"+Math.round(Cs(e,t)).toString(10)+\",\"+Math.round(Cs(e,t)).toString(10)+\")\"},randomRGBConstantAlpha:function(e,t,i){return e=ys.clamp(e,0,255),t=ys.clamp(t,0,255),\"rgba(\"+Math.round(Cs(e,t)).toString(10)+\",\"+Math.round(Cs(e,t)).toString(10)+\",\"+Math.round(Cs(e,t)).toString(10)+\",\"+i+\")\"},addAlpha:function(e,t){if(\"0\"===e||\".\"===e)e=\"rgb(0,0,0)\";else{const t=this.colorNameToHex(e);t&&(e=t)}var i=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e);if(e.startsWith(\"rgba\")){const i=e.lastIndexOf(\",\");return e.substring(0,i+1)+t.toString()+\")\"}return i&&(e=_s.hexToRgb(e)),e.startsWith(\"rgb\")?e.replace(\"rgb\",\"rgba\").replace(\")\",\", \"+t+\")\"):(console.log(e+\" is not an rgb style string\"),e)},rgbComponents:function(e){if(\"0\"===e||\".\"===e)return[0,0,0];if(/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e))e=_s.hexToRgb(e);else if(!e.startsWith(\"rgb\")){const t=this.colorNameToHex(e);e=this.hexToRgb(t)}if(e.startsWith(\"rgb(\"))return e.substring(4,e.length-1).split(\",\").map((e=>Number.parseInt(e.trim())));if(e.startsWith(\"rgba(\"))return e.substring(5,e.length-1).split(\",\").map(((e,t)=>(e=e.trim(),3===t?Number.parseFloat(e):Number.parseInt(e))));throw Error(\"Unrecognized color string: color\")},getCompositeColor:function(e,t,i){return\"rgb(\"+Math.floor(i*t[0]+(1-i)*e[0])+\",\"+Math.floor(i*t[1]+(1-i)*e[1])+\",\"+Math.floor(i*t[2]+(1-i)*e[2])+\")\"},createColorString:function(e){const t=this.createColorStringSafe(e);return t||e},createColorStringSafe:function(e){if((e=function(e){return void 0===e||((e.startsWith(\"'\")||e.startsWith('\"'))&&(e=e.substring(1)),(e.endsWith(\"'\")||e.endsWith('\"'))&&(e=e.substring(0,e.length-1))),e}(e)).startsWith(\"rgb(\")&&e.endsWith(\")\"))return e;if(e.startsWith(\"#\")&&e.length<8)return e;const t=this.colorNameToHex(e);if(t)return t;const i=e.split(\",\");return 3===i.length&&xs(i[0])&&xs(i[1])&&xs(i[2])?`rgb(${e})`:void 0},darkenLighten:function(e,t){let i,n=this.colorNameToHex(e);i=n?_s.hexToRgb(n):e.startsWith(\"rgb(\")?e:_s.hexToRgb(e);const r=i.replace(\")\",\"\").substring(4).split(\",\"),s=Math.max(0,Math.min(255,Number.parseInt(r[0].trim())+t)),o=Math.max(0,Math.min(255,Number.parseInt(r[1].trim())+t)),a=Math.max(0,Math.min(255,Number.parseInt(r[2].trim())+t));return\"rgb(\"+s.toString()+\",\"+o.toString()+\",\"+a.toString()+\")\"},colorNameToHex:function(e){return{aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",\"indianred \":\"#cd5c5c\",\"indigo \":\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\",darkgrey:\"#a9a9a9\",darkslategrey:\"#2f4f4f\",dimgrey:\"#696969\",grey:\"#808080\",lightgray:\"#d3d3d3\",lightslategrey:\"#778899\",slategrey:\"#708090\"}[e]}};function xs(e){const t=Number.parseInt(e);return!Number.isNaN(t)&&t>=0&&t<=255}const ks=\"googleapis\";class Is{constructor(){this.oauthTokens={}}setToken(e,t){t=t||ks,this.oauthTokens[t]=e}getToken(e){let t;e=e||ks;for(let i of Object.keys(this.oauthTokens)){if(Ss(i).test(e)){t=this.oauthTokens[i];break}}return t}removeToken(e){e=e||ks;for(let t of Object.keys(this.oauthTokens)){Ss(t).test(e)&&(this.oauthTokens[t]=void 0)}}}function Ss(e){return new RegExp(\"^\"+e.split(/\\*+/).map(Es).join(\".*\")+\"$\")}function Es(e){return e.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\")}function Ns(e){return e.includes(\"googleapis\")&&!e.includes(\"urlshortener\")||Bs(e)||Ms(e)}function Bs(e){return e.startsWith(\"gs://\")||e.startsWith(\"https://www.googleapis.com/storage\")||e.startsWith(\"https://storage.cloud.google.com\")||e.startsWith(\"https://storage.googleapis.com\")}function Ms(e){return e.indexOf(\"drive.google.com\")>=0||e.indexOf(\"www.googleapis.com/drive\")>0}function Ds(e){let{bucket:t,object:i}=function(e){let t,i;if(e.startsWith(\"gs://\")){const n=e.indexOf(\"/\",5);if(n>=0){t=e.substring(5,n);const r=e.indexOf(\"?\");i=r<0?e.substring(n+1):e.substring(n+1,r)}}else if(e.startsWith(\"https://storage.googleapis.com\")||e.startsWith(\"https://storage.cloud.google.com\")){const n=e.indexOf(\"/v1/b/\",8);if(n>0){const r=e.indexOf(\"/o/\",n);if(r>0){const s=e.indexOf(\"?\",r);t=e.substring(n+6,r),i=s>0?e.substring(r+3,s):e.substring(r+3)}}else{const n=e.indexOf(\"/\",8),r=e.indexOf(\"/\",n+1),s=e.indexOf(\"?\",r);r>0&&(t=e.substring(n+1,r),i=s<0?e.substring(r+1):e.substring(r+1,s))}}else if(e.startsWith(\"https://www.googleapis.com/storage/v1/b\")){const n=e.indexOf(\"/v1/b/\",8),r=e.indexOf(\"/o/\",n);if(r>0){const s=e.indexOf(\"?\",r);t=e.substring(n+6,r),i=s>0?e.substring(r+3,s):e.substring(r+3)}}if(t&&i)return{bucket:t,object:i};throw Error(`Unrecognized Google Storage URI: ${e}`)}(e);i=function(e){let t=\"\";return e.split(\"\").forEach((function(e){Rs.has(e)?t+=Rs.get(e):t+=e})),t}(i);const n=e.indexOf(\"?\");return`https://storage.googleapis.com/storage/v1/b/${t}/o/${i}${n>0?e.substring(n)+\"&alt=media\":\"?alt=media\"}`}const Rs=new Map;function Ts(){return window.google&&window.google.igv}async function Ls(e){if(!Ts())throw Error(\"Google oAuth has not been initialized\");if(google.igv.tokenResponse&&Date.now(){try{t.callback=e=>{void 0!==e.error&&n(e),google.igv.tokenResponse=e,google.igv.tokenExpiresAt=Date.now()+1e3*e.expires_in,i(e.access_token)},t.requestAccessToken({scope:e})}catch(e){console.log(e)}}))}}function zs(){return google.igv.apiKey}function Hs(e){var t=Ps(e);return t?\"https://www.googleapis.com/drive/v3/files/\"+t+\"?alt=media&supportsTeamDrives=true\":e}function Ps(e){if(e.includes(\"/open?id=\")){const t=e.indexOf(\"/open?id=\")+9,i=e.indexOf(\"&\");if(t>0&&i>t)return e.substring(t,i);if(t>0)return e.substring(t)}else{if(e.includes(\"/file/d/\")){const t=e.indexOf(\"/file/d/\")+8,i=e.lastIndexOf(\"/\");return e.substring(t,i)}if(e.startsWith(\"https://www.googleapis.com/drive\")){let t=e.indexOf(\"/files/\");const i=e.indexOf(\"?\");if(t>0)return t+=7,i>0?e.substring(t,i):e.substring(t)}}throw Error(\"Unknown Google Drive url format: \"+e)}Rs.set(\"!\",\"%21\"),Rs.set(\"#\",\"%23\"),Rs.set(\"$\",\"%24\"),Rs.set(\"%\",\"%25\"),Rs.set(\"&\",\"%26\"),Rs.set(\"'\",\"%27\"),Rs.set(\"(\",\"%28\"),Rs.set(\")\",\"%29\"),Rs.set(\"*\",\"%2A\"),Rs.set(\"+\",\"%2B\"),Rs.set(\",\",\"%2C\"),Rs.set(\"/\",\"%2F\"),Rs.set(\":\",\"%3A\"),Rs.set(\";\",\"%3B\"),Rs.set(\"=\",\"%3D\"),Rs.set(\"?\",\"%3F\"),Rs.set(\"@\",\"%40\"),Rs.set(\"[\",\"%5B\"),Rs.set(\"]\",\"%5D\"),Rs.set(\" \",\"%20\");class Os{constructor(e){this.requestsPerSecond=e.requestsPerSecond||10,this.lastStartTime=0,this.queued=[]}add(e,t){var i=this;return new Promise((function(t,n){i.queued.push({resolve:t,reject:n,asyncFunction:e}),i.dequeue()}))}addAll(e,t){var i=e.map(function(e){return this.add(e,t)}.bind(this));return Promise.all(i)}dequeue(){if(this.queued.length>0){var e=new Date,t=1e3/this.requestsPerSecond+1,i=e-this.lastStartTime;i>=t?this._execute():setTimeout(function(){this.dequeue()}.bind(this),t-i)}}async _execute(){this.lastStartTime=new Date;var e=this.queued.shift();const t=e.asyncFunction;try{const i=await t();e.resolve(i)}catch(t){e.reject(t)}}}function Us(){if(Ts()){return Ts()&&google.igv.tokenResponse&&Date.now()0)for(var o=0;othis._loadURL(e,t))):this._loadURL(e,t)}throw Error(`url must be either a 'File', 'string', 'function', or 'Promise'. Actual type: ${i}`)}async _loadURL(e,t){const i=this,n=e;e=function(e){return e.startsWith(\"https://www.dropbox.com\")?e.replace(\"//www.dropbox.com\",\"//dl.dropboxusercontent.com\"):e.startsWith(\"https://drive.google.com\")?Hs(e):e.includes(\"//www.broadinstitute.org/igvdata\")?e.replace(\"//www.broadinstitute.org/igvdata\",\"//data.broadinstitute.org/igvdata\"):e.includes(\"//igvdata.broadinstitute.org\")?e.replace(\"//igvdata.broadinstitute.org\",\"//s3.amazonaws.com/igv.broadinstitute.org\"):e.includes(\"//igv.genepattern.org\")?e.replace(\"//igv.genepattern.org\",\"//igv-genepattern-org.s3.amazonaws.com\"):e.startsWith(\"ftp://ftp.ncbi.nlm.nih.gov/geo\")?e.replace(\"ftp://\",\"https://\"):e}(e);let r=(t=t||{}).oauthToken||this.getOauthToken(e);return r&&(r=await(\"function\"==typeof r?r():r)),new Promise((function(s,o){Ns(e)&&!function(e){return e.indexOf(\"X-Goog-Signature\")>-1}(e)&&(Bs(e)&&(e=Ds(e)),Ms(e=function(e){let t=Vs.apiKey;t||\"undefined\"==typeof gapi||(t=gapi.apiKey);if(void 0!==t&&!e.includes(\"key=\")){const i=e.includes(\"?\")?\"&\":\"?\";e=e+i+\"key=\"+t}return e}(e))&&function(e){if(e.includes(\"supportsTeamDrive\"))return e;{const t=e.includes(\"?\")?\"&\":\"?\";e=e+t+\"supportsTeamDrive=true\"}}(e),r||(r=Us()));const a=t.headers||{};r&&function(e,t){t&&(e[\"Cache-Control\"]=\"no-cache\",e.Authorization=\"Bearer \"+t)}(a,r);const c=t.range,l=new XMLHttpRequest,h=t.sendData||t.body,d=t.method||(h?\"POST\":\"GET\"),u=t.responseType,f=t.contentType,p=t.mimeType;if(l.open(d,e),t.timeout&&(l.timeout=t.timeout),c){let e=\"\";c.size&&(e=c.start+c.size-1),l.setRequestHeader(\"Range\",\"bytes=\"+c.start+\"-\"+e)}if(f&&l.setRequestHeader(\"Content-Type\",f),p&&l.overrideMimeType(p),u&&(l.responseType=u),a)for(let e of Object.keys(a)){const t=a[e];l.setRequestHeader(e,t)}!0===t.withCredentials&&(l.withCredentials=!0),l.onload=async function(n){if(0===l.status||l.status>=200&&l.status<=300)if(\"HEAD\"===t.method){const e=t.requestedHeaders||[\"content-length\"],i={};for(let t of e)i[t]=l.getResponseHeader(t);s(i)}else c&&206!==l.status&&0!==c.start?(l.response.length>1e5&&!i.RANGE_WARNING_GIVEN&&alert(`Warning: Range header ignored for URL: ${e}. This can have severe performance impacts.`),s(l.response.slice(c.start,c.start+c.size))):s(l.response);else 416===l.status?g(Error(\"416 Unsatisfiable Range\")):!Ts()||404!==l.status&&401!==l.status&&403!==l.status||!Ns(e)||t.retries?403===l.status?g(\"Access forbidden: \"+e):g(l.status):m()},l.onerror=function(i){Ns(e)&&!t.retries?m():g(\"Error accessing resource: \"+e+\" Status: \"+l.status)},l.ontimeout=function(e){g(\"Timed out\")},l.onabort=function(e){console.log(\"Aborted\"),o(e)};try{l.send(h)}catch(i){Ns(e)&&!t.retries?m():g(i)}function g(e){if(!o)throw e;o(e)}async function m(){try{const e=await async function(e){if(Ts()){const t=function(e){return Ms(e)?\"https://www.googleapis.com/auth/drive.file\":Bs(e)?\"https://www.googleapis.com/auth/devstorage.read_only\":\"https://www.googleapis.com/auth/userinfo.profile\"}(e);return await Ls(t)}throw Error(\"Authorization is required, but Google oAuth has not been initalized. Contact your site administrator for assistance.\")}(n);t.retries=1,t.oauthToken=e;const r=await i.load(n,t);s(r)}catch(e){if(e.error){const t=e.error.startsWith(\"popup_blocked\")?\"Google login popup blocked by browser.\":e.error;alert(t)}else g(e)}}}))}async _loadFileSlice(e,t){let i=t&&t.range?e.slice(t.range.start,t.range.start+t.range.size):e;const n=await i.arrayBuffer();return\"arraybuffer\"===t.responseType?n:qs(n)}async _loadStringFromFile(e,t){const i=t.range?e.slice(t.range.start,t.range.start+t.range.size):e;return qs(await i.arrayBuffer())}async _loadStringFromUrl(e,t){(t=t||{}).responseType=\"arraybuffer\";return qs(await this.load(e,t))}setOauthToken(e,t){this.oauth.setToken(e,t)}getOauthToken(e){const t=Ns(e)?void 0:Ot(e).host;let i=this.oauth.getToken(t);if(i)return i;if(void 0===t){const e=Us();if(e&&e.expires_at>Date.now())return e.access_token}}async getContentLength(e,t){(t=t||{}).method=\"HEAD\",t.requestedHeaders=[\"content-length\"];const i=(await this._loadURL(e,t))[\"content-length\"];return i?Number.parseInt(i):0}};var Qs={color:1};Qs.parent=Qs,Qs.left=Qs,Qs.right=Qs;class js{constructor(){this.root=Qs}insert(e,t,i){var n=new Xs(new Ys(e,t,i));for(this.treeInsert(n),n.color=2;n!==this.root&&2===n.parent.color;)if(n.parent===n.parent.parent.left){let e=n.parent.parent.right;2===e.color?(n.parent.color=1,e.color=1,n.parent.parent.color=2,n=n.parent.parent):(n===n.parent.right&&(n=n.parent,Gs.call(this,n)),n.parent.color=1,n.parent.parent.color=2,$s.call(this,n.parent.parent))}else{let e=n.parent.parent.left;2===e.color?(n.parent.color=1,e.color=1,n.parent.parent.color=2,n=n.parent.parent):(n===n.parent.left&&(n=n.parent,$s.call(this,n)),n.parent.color=1,n.parent.parent.color=2,Gs.call(this,n.parent.parent))}this.root.color=1}findOverlapping(e,t){var i=new Ys(e,t,0);if(this.root===Qs)return[];var n=Ws.call(this,i,this.root,[]);return n.length>1&&n.sort((function(e,t){return e.low-t.low})),n}logIntervals(){!function e(t,i){for(var n=\"\",r=0;r=e.low&&Ws.call(this,e,t.left,i),t.right!==Qs&&t.right.min<=e.high&&Ws.call(this,e,t.right,i),i}function Gs(e){var t=e.right;e.right=t.left,t.left!==Qs&&(t.left.parent=e),t.parent=e.parent,e.parent===Qs?this.root=t:e.parent.left===e?e.parent.left=t:e.parent.right=t,t.left=e,e.parent=t,Ks.call(this,e)}function $s(e){var t=e.left;e.left=t.right,t.right!==Qs&&(t.right.parent=e),t.parent=e.parent,e.parent===Qs?this.root=t:e.parent.right===e?e.parent.right=t:e.parent.left=t,t.right=e,e.parent=t,Ks.call(this,e)}function Ks(e){for(;e!==Qs;){var t=e.left.max>e.right.max?e.left.max:e.right.max,i=e.interval.high;e.max=t>i?t:i;var n=e.left.mine.low?1:this.highe.high?1:0}overlaps(e){return this.low<=e.high&&e.low<=this.high}}function Xs(e){this.parent=Qs,this.left=Qs,this.right=Qs,this.interval=e,this.color=2}class Zs{constructor(e,t,i){e=e||[],this.treeMap=this.buildTreeMap(e,t),this.range=i,this.count=e.length}containsRange(e){return void 0===this.range||this.range.contains(e.chr,e.start,e.end)}findFeatures(e){const t=[];for(let i of Object.values(this.allFeatures))for(let n of i)e(n)&&t.push(n);return t}queryFeatures(e,t,i){const n=this.treeMap[e];if(!n)return[];const r=n.findOverlapping(t,i);if(0===r.length)return[];{const n=[],s=this.allFeatures[e];if(s){for(let e of r){const r=e.value;for(let e=r.start;ei)break;r.end>=t&&n.push(r)}}n.sort((function(e,t){return e.start-t.start}))}return n}}getAllFeatures(){return this.allFeatures}buildTreeMap(e,t){const i={},n=[];if(this.allFeatures={},e){for(let i of e){let e=i.chr;t&&(e=t.getChromosomeName(e));let r=this.allFeatures[e];r||(n.push(e),r=[],this.allFeatures[e]=r),r.push(i)}for(let e of n){const t=this.allFeatures[e];t.sort((function(e,t){return e.start===t.start?0:e.start>t.start?1:-1})),i[e]=Js(t)}}return i}}function Js(e){const t=new js,i=e.length,n=Math.max(10,Math.round(i/10));for(let r=0;rt.start?1:-1}));for(let r=0;ri)break;s.end>t&&e.push(s)}})),e.sort((function(e,t){return e.start-t.start})),e)}return[]};function io(e){if(3===(e=e.replace(/^#/,\"\")).length&&(e=e.split(\"\").map((e=>e+e)).join(\"\")),6!==e.length)throw new Error(\"Invalid HEX color.\");let t=parseInt(e,16);return`rgb(${t>>16&255}, ${t>>8&255}, ${255&t})`}const no={licorice:\"#000000\",steel:\"#6e6e6e\",magnesium:\"#b8b8b8\",mercury:\"#e8e8e8\",cayenne:\"#891100\",mocha:\"#894800\",aspargus:\"#888501\",fern:\"#458401\",teal:\"#008688\",salmon:\"#ff726e\",tangerine:\"#ff8802\",cantaloupe:\"#ffce6e\",lemon:\"#fffa03\",lime:\"#83f902\",honeydew:\"#cefa6e\",ice:\"#68fdff\",aqua:\"#008cff\",blueberry:\"#002eff\",midnight:\"#001888\",grape:\"#8931ff\",lavender:\"#d278ff\",orchid:\"#6e76ff\",strawberry:\"#ff2987\",magenta:\"#ff39ff\",carnation:\"#ff7fd3\"},ro={cantaloupe:{r:255,g:206,b:110},honeydew:{r:206,g:250,b:110},spindrift:{r:104,g:251,b:208},sky:{r:106,g:207,b:255},lavender:{r:210,g:120,b:255},carnation:{r:255,g:127,b:211},licorice:{r:0,g:0,b:0},snow:{r:255,g:255,b:255},salmon:{r:255,g:114,b:110},banana:{r:255,g:251,b:109},flora:{r:104,g:249,b:110},ice:{r:104,g:253,b:255},orchid:{r:110,g:118,b:255},bubblegum:{r:255,g:122,b:255},lead:{r:30,g:30,b:30},mercury:{r:232,g:232,b:232},tangerine:{r:255,g:136,b:2},lime:{r:131,g:249,b:2},sea_foam:{r:3,g:249,b:135},aqua:{r:0,g:140,b:255},grape:{r:137,g:49,b:255},strawberry:{r:255,g:41,b:135},tungsten:{r:58,g:58,b:58},silver:{r:208,g:208,b:208},maraschino:{r:255,g:33,b:1},lemon:{r:255,g:250,b:3},spring:{r:5,g:248,b:2},turquoise:{r:0,g:253,b:255},blueberry:{r:0,g:46,b:255},magenta:{r:255,g:57,b:255},iron:{r:84,g:84,b:83},magnesium:{r:184,g:184,b:184},mocha:{r:137,g:72,b:0},fern:{r:69,g:132,b:1},moss:{r:1,g:132,b:72},ocean:{r:0,g:74,b:136},eggplant:{r:73,g:26,b:136},maroon:{r:137,g:22,b:72},steel:{r:110,g:110,b:110},aluminum:{r:160,g:159,b:160},cayenne:{r:137,g:17,b:0},aspargus:{r:136,g:133,b:1},clover:{r:2,g:132,b:1},teal:{r:0,g:134,b:136},midnight:{r:0,g:24,b:136},plum:{r:137,g:30,b:136},tin:{r:135,g:134,b:135},nickel:{r:136,g:135,b:135}};function so(e){const{r:t,g:i,b:n}=ro[e];return`rgb(${t},${i},${n})`}const oo={Set1:[\"rgb(228,26,28)\",\"rgb(55,126,184)\",\"rgb(77,175,74)\",\"rgb(166,86,40)\",\"rgb(152,78,163)\",\"rgb(255,127,0)\",\"rgb(247,129,191)\",\"rgb(153,153,153)\",\"rgb(255,255,51)\"],Dark2:[\"rgb(27,158,119)\",\"rgb(217,95,2)\",\"rgb(117,112,179)\",\"rgb(231,41,138)\",\"rgb(102,166,30)\",\"rgb(230,171,2)\",\"rgb(166,118,29)\",\"rgb(102,102,102)\"],Set2:[\"rgb(102, 194,165)\",\"rgb(252,141,98)\",\"rgb(141,160,203)\",\"rgb(231,138,195)\",\"rgb(166,216,84)\",\"rgb(255,217,47)\",\"rgb(229,196,148)\",\"rgb(179,179,179)\"],Set3:[\"rgb(141,211,199)\",\"rgb(255,255,179)\",\"rgb(190,186,218)\",\"rgb(251,128,114)\",\"rgb(128,177,211)\",\"rgb(253,180,98)\",\"rgb(179,222,105)\",\"rgb(252,205,229)\",\"rgb(217,217,217)\",\"rgb(188,128,189)\",\"rgb(204,235,197)\",\"rgb(255,237,111)\"],Pastel1:[\"rgb(251,180,174)\",\"rgb(179,205,227)\",\"rgb(204,235,197)\",\"rgb(222,203,228)\",\"rgb(254,217,166)\",\"rgb(255,255,204)\",\"rgb(229,216,189)\",\"rgb(253,218,236)\"],Pastel2:[\"rgb(173,226,207)\",\"rgb(253,205,172)\",\"rgb(203,213,232)\",\"rgb(244,202,228)\",\"rgb(230,245,201)\",\"rgb(255,242,174)\",\"rgb(243,225,206)\"],Accent:[\"rgb(127,201,127)\",\"rgb(190,174,212)\",\"rgb(253,192,134)\",\"rgb(255,255,153)\",\"rgb(56,108,176)\",\"rgb(240,2,127)\",\"rgb(191,91,23)\"]};class ao{constructor(e){this.colors=oo[e],Array.isArray(this.colors)||(this.colors=[]),this.colorTable=new Map,this.nextIdx=0,this.colorGenerator=new lo}getColor(e){return this.colorTable.has(e)||(this.nextIdxparseInt(e)))}}lo.prototype.hsvToRgb=function(e,t,i){var n=Math.floor(6*e),r=6*e-n,s=i*(1-t),o=i*(1-r*t),a=i*(1-(1-r)*t),c=255,l=255,h=255;switch(n){case 0:c=i,l=a,h=s;break;case 1:c=o,l=i,h=s;break;case 2:c=s,l=i,h=a;break;case 3:c=s,l=o,h=i;break;case 4:c=a,l=s,h=i;break;case 5:c=i,l=s,h=o}return[Math.floor(256*c),Math.floor(256*l),Math.floor(256*h)]},lo.prototype.padHex=function(e){return e.length>this.hexwidth?e:new Array(this.hexwidth-e.length+1).join(\"0\")+e},lo.prototype.get=function(e,t){this.hue+=this.goldenRatio,this.hue%=1,\"number\"!=typeof e&&(e=.5),\"number\"!=typeof t&&(t=.95);var i=this.hsvToRgb(this.hue,e,t);return\"#\"+this.padHex(i[0].toString(16))+this.padHex(i[1].toString(16))+this.padHex(i[2].toString(16))},new lo;function po(e,t,i){if(i<.005)return e;if(i>.995)return t;{let n,r,s,o,a,c;i<.5?(i/=.5,[n,r,s]=fo(e),[o,a,c]=fo(so(\"snow\"))):(i=(i-.5)/.5,[n,r,s]=fo(so(\"snow\")),[o,a,c]=fo(t));const[l,h,d]=[Math.floor(ys.lerp(n,o,i)),Math.floor(ys.lerp(r,a,i)),Math.floor(ys.lerp(s,c,i))];return function(e,t,i){return`rgb(${e=ys.clamp(e,0,255)}, ${t=ys.clamp(t,0,255)}, ${i=ys.clamp(i,0,255)})`}(l,h,d)}}const go=new Set([\"bedtype\",\"alignment\",\"annotation\",\"variant\",\"wig\",\"interact\",\"shoebox\"]),mo=new Set([\"alignment\",\"annotation\",\"variant\",\"eqtl\",\"qtl\",\"snp\",\"shoebox\",\"wig\"]),wo=new Set([\"sequence\",\"ruler\",\"ideogram\"]),bo={};class Fo{constructor(e){this.browser=e,this.initialize()}initialize(){const e=new c;e.add(\"...\");const t={parent:this.browser.root,content:e};this.dialog=new w(t),this.browser.root.appendChild(this.dialog.elem),i(this.dialog.elem)}trackMenuItemList(e){const t=[];return\"sequence\"!==e.track.config.type&&t.push(function(){const e=Bt(\"
\");function t(e){const t=()=>{const e=parseInt(this.browser.inputDialog.value,10);if(void 0!==e){const t=[];this.trackView.track.selected?t.push(...this.trackView.browser.getSelectedTrackViews().map((({track:e})=>e))):t.push(this);for(const i of t)i.trackView.autoHeight=!1,void 0!==i.minHeight&&i.minHeight>e&&(i.minHeight=e),void 0!==i.maxHeight&&i.maxHeight1&&new Set(t).has(e)}(e)?t.push(...this.multiSelectMenuItems(e)):(\"sequence\"!==e.track.config.type&&t.push(function(){const e=Bt(\"
\");function t(e){const t=()=>{let e=this.browser.inputDialog.value;e=\"\"===e||void 0===e?\"untitled\":e.trim(),this.name=e},i={label:\"Track Name\",value:Co(this)||\"unnamed\",callback:t};this.browser.inputDialog.present(i,e)}return e.text(\"Set track name\"),{object:e,click:t}}()),t.push(...this.defaultMenuItems(e))),!1!==e.track.removable&&(t.push(\"
\"),t.push(function(e){const t=e.track.selected?\"Remove tracks\":\"Remove track\",i=Bt(\"
\");function n(e){this.trackView.browser._removeTrack(this)}return i.text(t),{object:i,click:n,menuItemType:\"removeTrack\"}}(e))),t}defaultMenuItems(e){const t=[];return _o(e.track)&&(t.push(\"
\"),t.push(vo({trackView:e,label:\"Set track color\",option:\"color\"})),t.push(yo({trackView:e,label:\"Unset track color\"})),\"wig\"!==e.track.config.type&&\"annotation\"!==e.track.config.type||(t.push(vo({trackView:e,label:\"Set alt color\",option:\"altColor\"})),t.push(Ao({trackView:e,label:\"Unset alt color\"})))),e.track.menuItemList&&t.push(...e.track.menuItemList()),function(e){const t=e.track;return t&&t.config&&void 0!==t.config.visibilityWindow||t&&mo.has(t.type)}(e)&&(t.push(\"
\"),t.push(function(e){const t=Bt(\"
\");function i(t){const i=()=>{let e=this.browser.inputDialog.value;e=\"\"===e||void 0===e?-1:e.trim(),this.visibilityWindow=Number.parseInt(e),this.config.visibilityWindow=Number.parseInt(e),this.trackView.updateViews()},n={label:\"wig\"===e?\"Visibility window (bp). Enter 0 for whole chromosome, -1 for whole genome.\":\"Visibility window (bp). Enter 0 for whole chromosome.\",value:this.visibilityWindow,callback:i};this.browser.inputDialog.present(n,t)}return t.text(\"Set visibility window\"),{object:t,click:i}}(e.track.type))),t}multiSelectMenuItems(e){const t=[],i=e.browser.getSelectedTrackViews();var n;return!0===(n=i.map((({track:e})=>e.type)),1===[...new Set(n)].length)?(t.push(...this.defaultMenuItems(e)),\"wig\"===e.track.type&&(t.push(\"
\"),t.push(function(){const e=Bt(\"
\");function t(e){const t=oo.Dark2,i=Math.floor(Math.random()*t.length),n=`auto-scale-group-${s()}`;bo[n]=t[i];const r=this.browser.getSelectedTrackViews();for(const{track:e}of r)e.autoscaleGroup=n;this.browser.updateViews()}return e.text(\"Group autoscale\"),{object:e,doAllMultiSelectedTracks:!0,click:t}}()))):_o(e.track)&&(t.push(\"
\"),t.push(vo({trackView:e,label:\"Set track color\",option:\"color\"})),t.push(yo({trackView:e,label:\"Unset track color\"})),\"wig\"!==e.track.config.type&&\"annotation\"!==e.track.config.type||(t.push(vo({trackView:e,label:\"Set alt color\",option:\"altColor\"})),t.push(Ao({trackView:e,label:\"Unset alt color\"})))),t}}function vo({trackView:e,label:t,option:i}){const n=Bt(\"
\");n.text(t);return{object:n,click:()=>{e.presentColorPicker(i)}}}function yo({trackView:e,label:t}){const i=Bt(\"
\");return i.text(t),{object:i,click:()=>{e.track.color=e.track._initialColor||e.track.constructor.defaultColor,e.repaintViews()}}}function Ao({trackView:e,label:t}){const i=Bt(\"
\");return i.text(t),{object:i,click:()=>{e.track.altColor=e.track._initialAltColor||e.track.constructor.defaultColor,e.repaintViews()}}}function Co(e){return e.name}function _o(e){return void 0===e.type||go.has(e.type)&&\"heatmap\"!==e.graphType}class xo{constructor(e,t){this.browser=e,this.$container=Bt(\"
\",{class:\"igv-generic-dialog-container\"}),t.append(this.$container),this.$container.offset({left:0,top:0});const i=Bt(\"
\",{class:\"igv-generic-dialog-header\"});this.$container.append(i),u(i[0],(()=>{this.$minimum_input.val(\"\"),this.$maximum_input.val(\"\"),this.$container.offset({left:0,top:0}),this.$container.hide()})),this.$minimum=Bt(\"
\",{class:\"igv-generic-dialog-label-input\"}),this.$container.append(this.$minimum);const n=Bt(\"
\");n.text(\"Minimum\"),this.$minimum.append(n),this.$minimum_input=Bt(\"\"),this.$minimum.append(this.$minimum_input),this.$maximum=Bt(\"
\",{class:\"igv-generic-dialog-label-input\"}),this.$container.append(this.$maximum);const r=Bt(\"
\");r.text(\"Maximum\"),this.$maximum.append(r),this.$maximum_input=Bt(\"\"),this.$maximum.append(this.$maximum_input);const s=Bt(\"
\",{class:\"igv-generic-dialog-ok-cancel\"});this.$container.append(s),this.$ok=Bt(\"
\"),s.append(this.$ok),this.$ok.text(\"OK\"),this.$cancel=Bt(\"
\"),s.append(this.$cancel),this.$cancel.text(\"Cancel\"),this.$cancel.on(\"click\",(()=>{this.$minimum_input.val(\"\"),this.$maximum_input.val(\"\"),this.$container.offset({left:0,top:0}),this.$container.hide()})),p(this.$container.get(0),i.get(0)),this.$container.hide()}configure(e){let t;if(Array.isArray(e)){t={min:Number.MAX_SAFE_INTEGER,max:-Number.MAX_SAFE_INTEGER};for(const i of e)i.track.dataRange&&(t.min=Math.min(i.track.dataRange.min,t.min),t.max=Math.max(i.track.dataRange.max,t.max))}else t=e.track.dataRange;t&&(this.$minimum_input.val(t.min),this.$maximum_input.val(t.max)),this.$minimum_input.unbind(),this.$minimum_input.on(\"keyup\",(t=>{13===t.keyCode&&this.processResults(e),t.stopImmediatePropagation()})),this.$maximum_input.unbind(),this.$maximum_input.on(\"keyup\",(t=>{13===t.keyCode&&(t.stopImmediatePropagation(),this.processResults(e))})),this.$ok.unbind(),this.$ok.on(\"click\",(t=>{this.processResults(e)}))}processResults(e){if(\"\"!==this.$minimum_input.val()&&\"\"!==this.$maximum_input.val()){const t=Number(this.$minimum_input.val()),i=Number(this.$maximum_input.val());if(isNaN(t)||isNaN(i))this.browser.alert.present(new Error(\"Must input numeric values\"),void 0);else{const n=Array.isArray(e)?e:[e];for(const e of n)e.track.setDataRange({min:t,max:i})}this.$minimum_input.val(\"\"),this.$maximum_input.val(\"\")}this.$container.offset({left:0,top:0}),this.$container.hide()}present(e){const t=e.offset().top,i=Bt(\"body\").scrollTop();this.$container.offset({left:e.width()-this.$container.width(),top:t+i}),this.$container.show()}}const ko={configureHighDPICanvas:function(e,t,i){const n=window.devicePixelRatio;e.canvas.style.width=`${t}px`,e.canvas.width=Math.floor(n*t),e.canvas.style.height=`${i}px`,e.canvas.height=Math.floor(n*i),e.scale(n,n)},setProperties:function(e,t){for(var i in t)if(t.hasOwnProperty(i)){var n=t[i];e[i]=n}},strokeLine:function(e,t,i,n,r,s){t=Math.floor(t)+.5,i=Math.floor(i)+.5,n=Math.floor(n)+.5,r=Math.floor(r)+.5,s&&(e.save(),ko.setProperties(e,s)),e.beginPath(),e.moveTo(t,i),e.lineTo(n,r),e.stroke(),s&&e.restore()},fillRect:function(e,t,i,n,r,s){s&&(e.save(),ko.setProperties(e,s)),e.fillRect(t,i,n,r),s&&e.restore()},fillPolygon:function(e,t,i,n){n&&(e.save(),ko.setProperties(e,n)),Io(e,t,i),e.fill(),n&&e.restore()},strokePolygon:function(e,t,i,n){n&&(e.save(),ko.setProperties(e,n)),Io(e,t,i),e.stroke(),n&&e.restore()},fillText:function(e,t,i,n,r,s){if((r||s)&&e.save(),r&&ko.setProperties(e,r),s){for(var o in e.translate(i,n),s){var a=s[o];\"translate\"===o&&e.translate(a.x,a.y),\"rotate\"===o&&e.rotate(a.angle*Math.PI/180)}e.fillText(t,0,0)}else e.fillText(t,i,n);(r||s)&&e.restore()},strokeText:function(e,t,i,n,r,s){if((r||s)&&e.save(),r&&ko.setProperties(e,r),s){for(var o in e.translate(i,n),s){var a=s[o];\"translate\"===o&&e.translate(a.x,a.y),\"rotate\"===o&&e.rotate(a.angle*Math.PI/180)}e.strokeText(t,0,0)}else e.strokeText(t,i,n);(r||s)&&e.restore()},strokeCircle:function(e,t,i,n,r){r&&(e.save(),ko.setProperties(e,r)),e.beginPath(),e.arc(t,i,n,0,2*Math.PI),e.stroke(),r&&e.restore()},fillCircle:function(e,t,i,n,r){r&&(e.save(),ko.setProperties(e,r)),e.beginPath(),e.arc(t,i,n,0,2*Math.PI),e.fill(),r&&e.restore()},drawArrowhead:function(e,t,i,n,r){e.save(),n||(n=5),r&&(e.lineWidth=r),e.beginPath(),e.moveTo(t,i-n/2),e.lineTo(t,i+n/2),e.lineTo(t+n,i),e.lineTo(t,i-n/2),e.closePath(),e.fill(),e.restore()},dashedLine:function(e,t,i,n,r,s,o={}){void 0===s&&(s=2),e.setLineDash([s,s]),ko.strokeLine(e,t,i,n,r,o),e.setLineDash([])},roundRect:function(e,t,i,n,r,s,o,a){void 0===a&&(a=!0),void 0===s&&(s=5),e.beginPath(),e.moveTo(t+s,i),e.lineTo(t+n-s,i),e.quadraticCurveTo(t+n,i,t+n,i+s),e.lineTo(t+n,i+r-s),e.quadraticCurveTo(t+n,i+r,t+n-s,i+r),e.lineTo(t+s,i+r),e.quadraticCurveTo(t,i+r,t,i+r-s),e.lineTo(t,i+s),e.quadraticCurveTo(t,i,t+s,i),e.closePath(),a&&e.stroke(),o&&e.fill()},polygon:function(e,t,i,n,r){void 0===r&&(r=!0),e.beginPath();var s=t.length;e.moveTo(t[0],i[0]);for(var o=1;o{for(let t=0;t{e.translate(t,0),e.scale(-1,1),e.translate(-t,0)}};function Io(e,t,i){var n,r=t.length;for(e.beginPath(),e.moveTo(t[0],i[0]),n=1;n1?i-1:0),r=1;r2&&void 0!==arguments[2]?arguments[2]:Uo;Eo&&Eo(e,null);let n=t.length;for(;n--;){let r=t[n];if(\"string\"==typeof r){const e=i(r);e!==r&&(No(t)||(t[n]=e),r=e)}e[r]=!0}return e}function Jo(e){for(let t=0;t/gm),ga=Ro(/\\${[\\w\\W]*}/gm),ma=Ro(/^data-[\\-\\w.\\u00B7-\\uFFFF]/),wa=Ro(/^aria-[\\-\\w]+$/),ba=Ro(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i),Fa=Ro(/^(?:\\w+script|data):/i),va=Ro(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g),ya=Ro(/^html$/i),Aa=Ro(/^[a-z][.\\w]*(-[.\\w]+)+$/i);var Ca=Object.freeze({__proto__:null,MUSTACHE_EXPR:fa,ERB_EXPR:pa,TMPLIT_EXPR:ga,DATA_ATTR:ma,ARIA_ATTR:wa,IS_ALLOWED_URI:ba,IS_SCRIPT_OR_DATA:Fa,ATTR_WHITESPACE:va,DOCTYPE_NAME:ya,CUSTOM_ELEMENT:Aa});const _a=1,xa=3,ka=7,Ia=8,Sa=9,Ea=function(){return\"undefined\"==typeof window?null:window};var Na=function e(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ea();const i=t=>e(t);if(i.version=\"3.1.6\",i.removed=[],!t||!t.document||t.document.nodeType!==Sa)return i.isSupported=!1,i;let{document:n}=t;const r=n,s=r.currentScript,{DocumentFragment:o,HTMLTemplateElement:a,Node:c,Element:l,NodeFilter:h,NamedNodeMap:d=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:u,DOMParser:f,trustedTypes:p}=t,g=l.prototype,m=ta(g,\"cloneNode\"),w=ta(g,\"remove\"),b=ta(g,\"nextSibling\"),F=ta(g,\"childNodes\"),v=ta(g,\"parentNode\");if(\"function\"==typeof a){const e=n.createElement(\"template\");e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let y,A=\"\";const{implementation:C,createNodeIterator:_,createDocumentFragment:x,getElementsByTagName:k}=n,{importNode:I}=r;let S={};i.isSupported=\"function\"==typeof So&&\"function\"==typeof v&&C&&void 0!==C.createHTMLDocument;const{MUSTACHE_EXPR:E,ERB_EXPR:N,TMPLIT_EXPR:B,DATA_ATTR:M,ARIA_ATTR:D,IS_SCRIPT_OR_DATA:R,ATTR_WHITESPACE:T,CUSTOM_ELEMENT:L}=Ca;let{IS_ALLOWED_URI:z}=Ca,H=null;const P=Zo({},[...ia,...na,...ra,...oa,...ca]);let O=null;const U=Zo({},[...la,...ha,...da,...ua]);let q=Object.seal(To(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),V=null,Q=null,j=!0,W=!0,G=!1,$=!0,K=!1,Y=!0,X=!1,Z=!1,J=!1,ee=!1,te=!1,ie=!1,ne=!0,re=!1,se=!0,oe=!1,ae={},ce=null;const le=Zo({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]);let he=null;const de=Zo({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]);let ue=null;const fe=Zo({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"role\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),pe=\"http://www.w3.org/1998/Math/MathML\",ge=\"http://www.w3.org/2000/svg\",me=\"http://www.w3.org/1999/xhtml\";let we=me,be=!1,Fe=null;const ve=Zo({},[pe,ge,me],qo);let ye=null;const Ae=[\"application/xhtml+xml\",\"text/html\"];let Ce=null,_e=null;const xe=n.createElement(\"form\"),ke=function(e){return e instanceof RegExp||e instanceof Function},Ie=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!_e||_e!==e){if(e&&\"object\"==typeof e||(e={}),e=ea(e),ye=-1===Ae.indexOf(e.PARSER_MEDIA_TYPE)?\"text/html\":e.PARSER_MEDIA_TYPE,Ce=\"application/xhtml+xml\"===ye?qo:Uo,H=Go(e,\"ALLOWED_TAGS\")?Zo({},e.ALLOWED_TAGS,Ce):P,O=Go(e,\"ALLOWED_ATTR\")?Zo({},e.ALLOWED_ATTR,Ce):U,Fe=Go(e,\"ALLOWED_NAMESPACES\")?Zo({},e.ALLOWED_NAMESPACES,qo):ve,ue=Go(e,\"ADD_URI_SAFE_ATTR\")?Zo(ea(fe),e.ADD_URI_SAFE_ATTR,Ce):fe,he=Go(e,\"ADD_DATA_URI_TAGS\")?Zo(ea(de),e.ADD_DATA_URI_TAGS,Ce):de,ce=Go(e,\"FORBID_CONTENTS\")?Zo({},e.FORBID_CONTENTS,Ce):le,V=Go(e,\"FORBID_TAGS\")?Zo({},e.FORBID_TAGS,Ce):{},Q=Go(e,\"FORBID_ATTR\")?Zo({},e.FORBID_ATTR,Ce):{},ae=!!Go(e,\"USE_PROFILES\")&&e.USE_PROFILES,j=!1!==e.ALLOW_ARIA_ATTR,W=!1!==e.ALLOW_DATA_ATTR,G=e.ALLOW_UNKNOWN_PROTOCOLS||!1,$=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,K=e.SAFE_FOR_TEMPLATES||!1,Y=!1!==e.SAFE_FOR_XML,X=e.WHOLE_DOCUMENT||!1,ee=e.RETURN_DOM||!1,te=e.RETURN_DOM_FRAGMENT||!1,ie=e.RETURN_TRUSTED_TYPE||!1,J=e.FORCE_BODY||!1,ne=!1!==e.SANITIZE_DOM,re=e.SANITIZE_NAMED_PROPS||!1,se=!1!==e.KEEP_CONTENT,oe=e.IN_PLACE||!1,z=e.ALLOWED_URI_REGEXP||ba,we=e.NAMESPACE||me,q=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&ke(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(q.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&ke(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(q.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&\"boolean\"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(q.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),K&&(W=!1),te&&(ee=!0),ae&&(H=Zo({},ca),O=[],!0===ae.html&&(Zo(H,ia),Zo(O,la)),!0===ae.svg&&(Zo(H,na),Zo(O,ha),Zo(O,ua)),!0===ae.svgFilters&&(Zo(H,ra),Zo(O,ha),Zo(O,ua)),!0===ae.mathMl&&(Zo(H,oa),Zo(O,da),Zo(O,ua))),e.ADD_TAGS&&(H===P&&(H=ea(H)),Zo(H,e.ADD_TAGS,Ce)),e.ADD_ATTR&&(O===U&&(O=ea(O)),Zo(O,e.ADD_ATTR,Ce)),e.ADD_URI_SAFE_ATTR&&Zo(ue,e.ADD_URI_SAFE_ATTR,Ce),e.FORBID_CONTENTS&&(ce===le&&(ce=ea(ce)),Zo(ce,e.FORBID_CONTENTS,Ce)),se&&(H[\"#text\"]=!0),X&&Zo(H,[\"html\",\"head\",\"body\"]),H.table&&(Zo(H,[\"tbody\"]),delete V.tbody),e.TRUSTED_TYPES_POLICY){if(\"function\"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw Ko('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');if(\"function\"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw Ko('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');y=e.TRUSTED_TYPES_POLICY,A=y.createHTML(\"\")}else void 0===y&&(y=function(e,t){if(\"object\"!=typeof e||\"function\"!=typeof e.createPolicy)return null;let i=null;const n=\"data-tt-policy-suffix\";t&&t.hasAttribute(n)&&(i=t.getAttribute(n));const r=\"dompurify\"+(i?\"#\"+i:\"\");try{return e.createPolicy(r,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn(\"TrustedTypes policy \"+r+\" could not be created.\"),null}}(p,s)),null!==y&&\"string\"==typeof A&&(A=y.createHTML(\"\"));Do&&Do(e),_e=e}},Se=Zo({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),Ee=Zo({},[\"foreignobject\",\"annotation-xml\"]),Ne=Zo({},[\"title\",\"style\",\"font\",\"a\",\"script\"]),Be=Zo({},[...na,...ra,...sa]),Me=Zo({},[...oa,...aa]),De=function(e){Oo(i.removed,{element:e});try{v(e).removeChild(e)}catch(t){w(e)}},Re=function(e,t){try{Oo(i.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){Oo(i.removed,{attribute:null,from:t})}if(t.removeAttribute(e),\"is\"===e&&!O[e])if(ee||te)try{De(t)}catch(e){}else try{t.setAttribute(e,\"\")}catch(e){}},Te=function(e){let t=null,i=null;if(J)e=\"\"+e;else{const t=Vo(e,/^[\\r\\n\\t ]+/);i=t&&t[0]}\"application/xhtml+xml\"===ye&&we===me&&(e=''+e+\"\");const r=y?y.createHTML(e):e;if(we===me)try{t=(new f).parseFromString(r,ye)}catch(e){}if(!t||!t.documentElement){t=C.createDocument(we,\"template\",null);try{t.documentElement.innerHTML=be?A:r}catch(e){}}const s=t.body||t.documentElement;return e&&i&&s.insertBefore(n.createTextNode(i),s.childNodes[0]||null),we===me?k.call(t,X?\"html\":\"body\")[0]:X?t.documentElement:s},Le=function(e){return _.call(e.ownerDocument||e,e,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},ze=function(e){return e instanceof u&&(\"string\"!=typeof e.nodeName||\"string\"!=typeof e.textContent||\"function\"!=typeof e.removeChild||!(e.attributes instanceof d)||\"function\"!=typeof e.removeAttribute||\"function\"!=typeof e.setAttribute||\"string\"!=typeof e.namespaceURI||\"function\"!=typeof e.insertBefore||\"function\"!=typeof e.hasChildNodes)},He=function(e){return\"function\"==typeof c&&e instanceof c},Pe=function(e,t,n){S[e]&&Ho(S[e],(e=>{e.call(i,t,n,_e)}))},Oe=function(e){let t=null;if(Pe(\"beforeSanitizeElements\",e,null),ze(e))return De(e),!0;const n=Ce(e.nodeName);if(Pe(\"uponSanitizeElement\",e,{tagName:n,allowedTags:H}),e.hasChildNodes()&&!He(e.firstElementChild)&&$o(/<[/\\w]/g,e.innerHTML)&&$o(/<[/\\w]/g,e.textContent))return De(e),!0;if(e.nodeType===ka)return De(e),!0;if(Y&&e.nodeType===Ia&&$o(/<[/\\w]/g,e.data))return De(e),!0;if(!H[n]||V[n]){if(!V[n]&&qe(n)){if(q.tagNameCheck instanceof RegExp&&$o(q.tagNameCheck,n))return!1;if(q.tagNameCheck instanceof Function&&q.tagNameCheck(n))return!1}if(se&&!ce[n]){const t=v(e)||e.parentNode,i=F(e)||e.childNodes;if(i&&t){for(let n=i.length-1;n>=0;--n){const r=m(i[n],!0);r.__removalCount=(e.__removalCount||0)+1,t.insertBefore(r,b(e))}}}return De(e),!0}return e instanceof l&&!function(e){let t=v(e);t&&t.tagName||(t={namespaceURI:we,tagName:\"template\"});const i=Uo(e.tagName),n=Uo(t.tagName);return!!Fe[e.namespaceURI]&&(e.namespaceURI===ge?t.namespaceURI===me?\"svg\"===i:t.namespaceURI===pe?\"svg\"===i&&(\"annotation-xml\"===n||Se[n]):Boolean(Be[i]):e.namespaceURI===pe?t.namespaceURI===me?\"math\"===i:t.namespaceURI===ge?\"math\"===i&&Ee[n]:Boolean(Me[i]):e.namespaceURI===me?!(t.namespaceURI===ge&&!Ee[n])&&!(t.namespaceURI===pe&&!Se[n])&&!Me[i]&&(Ne[i]||!Be[i]):!(\"application/xhtml+xml\"!==ye||!Fe[e.namespaceURI]))}(e)?(De(e),!0):\"noscript\"!==n&&\"noembed\"!==n&&\"noframes\"!==n||!$o(/<\\/no(script|embed|frames)/i,e.innerHTML)?(K&&e.nodeType===xa&&(t=e.textContent,Ho([E,N,B],(e=>{t=Qo(t,e,\" \")})),e.textContent!==t&&(Oo(i.removed,{element:e.cloneNode()}),e.textContent=t)),Pe(\"afterSanitizeElements\",e,null),!1):(De(e),!0)},Ue=function(e,t,i){if(ne&&(\"id\"===t||\"name\"===t)&&(i in n||i in xe))return!1;if(W&&!Q[t]&&$o(M,t));else if(j&&$o(D,t));else if(!O[t]||Q[t]){if(!(qe(e)&&(q.tagNameCheck instanceof RegExp&&$o(q.tagNameCheck,e)||q.tagNameCheck instanceof Function&&q.tagNameCheck(e))&&(q.attributeNameCheck instanceof RegExp&&$o(q.attributeNameCheck,t)||q.attributeNameCheck instanceof Function&&q.attributeNameCheck(t))||\"is\"===t&&q.allowCustomizedBuiltInElements&&(q.tagNameCheck instanceof RegExp&&$o(q.tagNameCheck,i)||q.tagNameCheck instanceof Function&&q.tagNameCheck(i))))return!1}else if(ue[t]);else if($o(z,Qo(i,T,\"\")));else if(\"src\"!==t&&\"xlink:href\"!==t&&\"href\"!==t||\"script\"===e||0!==jo(i,\"data:\")||!he[e]){if(G&&!$o(R,Qo(i,T,\"\")));else if(i)return!1}else;return!0},qe=function(e){return\"annotation-xml\"!==e&&Vo(e,L)},Ve=function(e){Pe(\"beforeSanitizeAttributes\",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:O};let r=t.length;for(;r--;){const s=t[r],{name:o,namespaceURI:a,value:c}=s,l=Ce(o);let h=\"value\"===o?c:Wo(c);if(n.attrName=l,n.attrValue=h,n.keepAttr=!0,n.forceKeepAttr=void 0,Pe(\"uponSanitizeAttribute\",e,n),h=n.attrValue,Y&&$o(/((--!?|])>)|<\\/(style|title)/i,h)){Re(o,e);continue}if(n.forceKeepAttr)continue;if(Re(o,e),!n.keepAttr)continue;if(!$&&$o(/\\/>/i,h)){Re(o,e);continue}K&&Ho([E,N,B],(e=>{h=Qo(h,e,\" \")}));const d=Ce(e.nodeName);if(Ue(d,l,h)){if(!re||\"id\"!==l&&\"name\"!==l||(Re(o,e),h=\"user-content-\"+h),y&&\"object\"==typeof p&&\"function\"==typeof p.getAttributeType)if(a);else switch(p.getAttributeType(d,l)){case\"TrustedHTML\":h=y.createHTML(h);break;case\"TrustedScriptURL\":h=y.createScriptURL(h)}try{a?e.setAttributeNS(a,o,h):e.setAttribute(o,h),ze(e)?De(e):Po(i.removed)}catch(e){}}}Pe(\"afterSanitizeAttributes\",e,null)},Qe=function e(t){let i=null;const n=Le(t);for(Pe(\"beforeSanitizeShadowDOM\",t,null);i=n.nextNode();)Pe(\"uponSanitizeShadowNode\",i,null),Oe(i)||(i.content instanceof o&&e(i.content),Ve(i));Pe(\"afterSanitizeShadowDOM\",t,null)};return i.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,a=null,l=null;if(be=!e,be&&(e=\"\\x3c!--\\x3e\"),\"string\"!=typeof e&&!He(e)){if(\"function\"!=typeof e.toString)throw Ko(\"toString is not a function\");if(\"string\"!=typeof(e=e.toString()))throw Ko(\"dirty is not a string, aborting\")}if(!i.isSupported)return e;if(Z||Ie(t),i.removed=[],\"string\"==typeof e&&(oe=!1),oe){if(e.nodeName){const t=Ce(e.nodeName);if(!H[t]||V[t])throw Ko(\"root node is forbidden and cannot be sanitized in-place\")}}else if(e instanceof c)n=Te(\"\\x3c!----\\x3e\"),s=n.ownerDocument.importNode(e,!0),s.nodeType===_a&&\"BODY\"===s.nodeName||\"HTML\"===s.nodeName?n=s:n.appendChild(s);else{if(!ee&&!K&&!X&&-1===e.indexOf(\"<\"))return y&&ie?y.createHTML(e):e;if(n=Te(e),!n)return ee?null:ie?A:\"\"}n&&J&&De(n.firstChild);const h=Le(oe?e:n);for(;a=h.nextNode();)Oe(a)||(a.content instanceof o&&Qe(a.content),Ve(a));if(oe)return e;if(ee){if(te)for(l=x.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(O.shadowroot||O.shadowrootmode)&&(l=I.call(r,l,!0)),l}let d=X?n.outerHTML:n.innerHTML;return X&&H[\"!doctype\"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&$o(ya,n.ownerDocument.doctype.name)&&(d=\"\\n\"+d),K&&Ho([E,N,B],(e=>{d=Qo(d,e,\" \")})),y&&ie?y.createHTML(d):d},i.setConfig=function(){Ie(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Z=!0},i.clearConfig=function(){_e=null,Z=!1},i.isValidAttribute=function(e,t,i){_e||Ie({});const n=Ce(e),r=Ce(t);return Ue(n,r,i)},i.addHook=function(e,t){\"function\"==typeof t&&(S[e]=S[e]||[],Oo(S[e],t))},i.removeHook=function(e){if(S[e])return Po(S[e])},i.removeHooks=function(e){S[e]&&(S[e]=[])},i.removeAllHooks=function(){S={}},i}();class Ba{constructor(t){this.parent=t,this.container=e({class:\"igv-ui-generic-dialog-container\"}),t.appendChild(this.container);const n=e({class:\"igv-ui-generic-dialog-header\"});this.container.appendChild(n),this.label=e({class:\"igv-ui-generic-dialog-one-liner\"}),this.container.appendChild(this.label),this.label.text=\"Unlabeled\",this.input_container=e({class:\"igv-ui-generic-dialog-input\"}),this.container.appendChild(this.input_container),this._input=document.createElement(\"input\"),this.input_container.appendChild(this._input);const r=e({class:\"igv-ui-generic-dialog-ok-cancel\"});this.container.appendChild(r),this.ok=e(),r.appendChild(this.ok),this.ok.textContent=\"OK\",this.cancel=e(),r.appendChild(this.cancel),this.cancel.textContent=\"Cancel\",i(this.container),this._input.addEventListener(\"keyup\",(e=>{\"Enter\"===e.code&&(\"function\"==typeof this.callback&&(this.callback(this._input.value),this.callback=void 0),this._input.value=void 0,i(this.container)),e.stopImmediatePropagation()})),this.ok.addEventListener(\"click\",(()=>{\"function\"==typeof this.callback&&(this.callback(this._input.value),this.callback=void 0),this._input.value=void 0,i(this.container)}));const s=()=>{this._input.value=\"\",i(this.container)};this.cancel.addEventListener(\"click\",s),u(n,s),p(this.container,n)}get value(){return Na.sanitize(this._input.value)}present(e,t){this.label.textContent=e.label,this._input.value=e.value,this.callback=e.callback||e.click,n(this.container),this.clampLocation(t.clientX,t.clientY)}clampLocation(e,t){const{width:i,height:n}=this.container.getBoundingClientRect(),r=window.innerHeight,s=window.innerWidth,o=Math.min(r-n,t),a=Math.min(s-i,e);this.container.style.left=`${a}px`,this.container.style.top=`${o}px`}}\n/*!\n * vanilla-picker v2.12.3\n * https://vanilla-picker.js.org\n *\n * Copyright 2017-2024 Andreas Borgen (https://github.com/Sphinxxxx), Adam Brooks (https://github.com/dissimulate)\n * Released under the ISC license.\n */var Ma=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")},Da=function(){function e(e,t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:1;return(t>0?e.toFixed(t).replace(/0+$/,\"\").replace(/\\.$/,\"\"):e.toString())||\"0\"}var za=function(){function e(t,i,n,r){Ma(this,e);var s=this;if(void 0===t);else if(Array.isArray(t))this.rgba=t;else if(void 0===n){var o=t&&\"\"+t;o&&function(t){if(t.startsWith(\"hsl\")){var i=t.match(/([\\-\\d\\.e]+)/g).map(Number),n=Ra(i,4),r=n[0],o=n[1],a=n[2],c=n[3];void 0===c&&(c=1),r/=360,o/=100,a/=100,s.hsla=[r,o,a,c]}else if(t.startsWith(\"rgb\")){var l=t.match(/([\\-\\d\\.e]+)/g).map(Number),h=Ra(l,4),d=h[0],u=h[1],f=h[2],p=h[3];void 0===p&&(p=1),s.rgba=[d,u,f,p]}else t.startsWith(\"#\")?s.rgba=e.hexToRgb(t):s.rgba=e.nameToRgb(t)||e.hexToRgb(t)}(o.toLowerCase())}else this.rgba=[t,i,n,void 0===r?1:r]}return Da(e,[{key:\"printRGB\",value:function(e){var t=(e?this.rgba:this.rgba.slice(0,3)).map((function(e,t){return La(e,3===t?3:0)}));return e?\"rgba(\"+t+\")\":\"rgb(\"+t+\")\"}},{key:\"printHSL\",value:function(e){var t=[360,100,100,1],i=[\"\",\"%\",\"%\",\"\"],n=(e?this.hsla:this.hsla.slice(0,3)).map((function(e,n){return La(e*t[n],3===n?3:1)+i[n]}));return e?\"hsla(\"+n+\")\":\"hsl(\"+n+\")\"}},{key:\"printHex\",value:function(e){var t=this.hex;return e?t:t.substring(0,7)}},{key:\"rgba\",get:function(){if(this._rgba)return this._rgba;if(!this._hsla)throw new Error(\"No color is set\");return this._rgba=e.hslToRgb(this._hsla)},set:function(e){3===e.length&&(e[3]=1),this._rgba=e,this._hsla=null}},{key:\"rgbString\",get:function(){return this.printRGB()}},{key:\"rgbaString\",get:function(){return this.printRGB(!0)}},{key:\"hsla\",get:function(){if(this._hsla)return this._hsla;if(!this._rgba)throw new Error(\"No color is set\");return this._hsla=e.rgbToHsl(this._rgba)},set:function(e){3===e.length&&(e[3]=1),this._hsla=e,this._rgba=null}},{key:\"hslString\",get:function(){return this.printHSL()}},{key:\"hslaString\",get:function(){return this.printHSL(!0)}},{key:\"hex\",get:function(){var e=this.rgba.map((function(e,t){return t<3?e.toString(16):Math.round(255*e).toString(16)}));return\"#\"+e.map((function(e){return e.padStart(2,\"0\")})).join(\"\")},set:function(t){this.rgba=e.hexToRgb(t)}}],[{key:\"hexToRgb\",value:function(e){var t=(e.startsWith(\"#\")?e.slice(1):e).replace(/^(\\w{3})$/,\"$1F\").replace(/^(\\w)(\\w)(\\w)(\\w)$/,\"$1$1$2$2$3$3$4$4\").replace(/^(\\w{6})$/,\"$1FF\");if(!t.match(/^([0-9a-fA-F]{8})$/))throw new Error(\"Unknown hex color; \"+e);var i=t.match(/^(\\w\\w)(\\w\\w)(\\w\\w)(\\w\\w)$/).slice(1).map((function(e){return parseInt(e,16)}));return i[3]=i[3]/255,i}},{key:\"nameToRgb\",value:function(t){var i=t.toLowerCase().replace(\"at\",\"T\").replace(/[aeiouyldf]/g,\"\").replace(\"ght\",\"L\").replace(\"rk\",\"D\").slice(-5,4),n=Ta[i];return void 0===n?n:e.hexToRgb(n.replace(/\\-/g,\"00\").padStart(6,\"f\"))}},{key:\"rgbToHsl\",value:function(e){var t=Ra(e,4),i=t[0],n=t[1],r=t[2],s=t[3];i/=255,n/=255,r/=255;var o=Math.max(i,n,r),a=Math.min(i,n,r),c=void 0,l=void 0,h=(o+a)/2;if(o===a)c=l=0;else{var d=o-a;switch(l=h>.5?d/(2-o-a):d/(o+a),o){case i:c=(n-r)/d+(n1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e},h=r<.5?r*(1+n):r+n-r*n,d=2*r-h;o=l(d,h,i+1/3),a=l(d,h,i),c=l(d,h,i-1/3)}var u=[255*o,255*a,255*c].map(Math.round);return u[3]=s,u}}]),e}(),Ha=function(){function e(){Ma(this,e),this._events=[]}return Da(e,[{key:\"add\",value:function(e,t,i){e.addEventListener(t,i,!1),this._events.push({target:e,type:t,handler:i})}},{key:\"remove\",value:function(t,i,n){this._events=this._events.filter((function(r){var s=!0;return t&&t!==r.target&&(s=!1),i&&i!==r.type&&(s=!1),n&&n!==r.handler&&(s=!1),s&&e._doRemove(r.target,r.type,r.handler),!s}))}},{key:\"destroy\",value:function(){this._events.forEach((function(t){return e._doRemove(t.target,t.type,t.handler)})),this._events=[]}}],[{key:\"_doRemove\",value:function(e,t,i){e.removeEventListener(t,i,!1)}}]),e}();function Pa(e,t,i){var n=!1;function r(e,t,i){return Math.max(t,Math.min(e,i))}function s(e,s,o){if(o&&(n=!0),n){e.preventDefault();var a=t.getBoundingClientRect(),c=a.width,l=a.height,h=s.clientX,d=s.clientY,u=r(h-a.left,0,c),f=r(d-a.top,0,l);i(u/c,f/l)}}function o(e,t){1===(void 0===e.buttons?e.which:e.buttons)?s(e,e,t):n=!1}function a(e,t){1===e.touches.length?s(e,e.touches[0],t):n=!1}e.add(t,\"mousedown\",(function(e){o(e,!0)})),e.add(t,\"touchstart\",(function(e){a(e,!0)})),e.add(window,\"mousemove\",o),e.add(t,\"touchmove\",a),e.add(window,\"mouseup\",(function(e){n=!1})),e.add(t,\"touchend\",(function(e){n=!1})),e.add(t,\"touchcancel\",(function(e){n=!1}))}var Oa=\"keydown\",Ua=\"mousedown\",qa=\"focusin\";function Va(e,t){return(t||document).querySelector(e)}function Qa(e){e.preventDefault(),e.stopPropagation()}function ja(e,t,i,n,r){e.add(t,Oa,(function(e){i.indexOf(e.key)>=0&&(r&&Qa(e),n(e))}))}var Wa=function(){function e(t){Ma(this,e),this.settings={popup:\"right\",layout:\"default\",alpha:!0,editor:!0,editorFormat:\"hex\",cancelButton:!1,defaultColor:\"#0cf\"},this._events=new Ha,this.onChange=null,this.onDone=null,this.onOpen=null,this.onClose=null,this.setOptions(t)}return Da(e,[{key:\"setOptions\",value:function(e){var t=this;if(e){var i=this.settings;if(e instanceof HTMLElement)i.parent=e;else{i.parent&&e.parent&&i.parent!==e.parent&&(this._events.remove(i.parent),this._popupInited=!1),function(e,t,i){for(var n in e)i&&i.indexOf(n)>=0||(t[n]=e[n])}(e,i),e.onChange&&(this.onChange=e.onChange),e.onDone&&(this.onDone=e.onDone),e.onOpen&&(this.onOpen=e.onOpen),e.onClose&&(this.onClose=e.onClose);var n=e.color||e.colour;n&&this._setColor(n)}var r=i.parent;if(r&&i.popup&&!this._popupInited){var s=function(e){return t.openHandler(e)};this._events.add(r,\"click\",s),ja(this._events,r,[\" \",\"Spacebar\",\"Enter\"],s),this._popupInited=!0}else e.parent&&!i.popup&&this.show()}}},{key:\"openHandler\",value:function(e){if(this.show()){e&&e.preventDefault(),this.settings.parent.style.pointerEvents=\"none\";var t=e&&e.type===Oa?this._domEdit:this.domElement;setTimeout((function(){return t.focus()}),100),this.onOpen&&this.onOpen(this.colour)}}},{key:\"closeHandler\",value:function(e){var t=e&&e.type,i=!1;if(e)if(t===Ua||t===qa){var n=(this.__containedEvent||0)+100;e.timeStamp>n&&(i=!0)}else Qa(e),i=!0;else i=!0;i&&this.hide()&&(this.settings.parent.style.pointerEvents=\"\",t!==Ua&&this.settings.parent.focus(),this.onClose&&this.onClose(this.colour))}},{key:\"movePopup\",value:function(e,t){this.closeHandler(),this.setOptions(e),t&&this.openHandler()}},{key:\"setColor\",value:function(e,t){this._setColor(e,{silent:t})}},{key:\"_setColor\",value:function(e,t){if(\"string\"==typeof e&&(e=e.trim()),e){t=t||{};var i=void 0;try{i=new za(e)}catch(e){if(t.failSilently)return;throw e}if(!this.settings.alpha){var n=i.hsla;n[3]=1,i.hsla=n}this.colour=this.color=i,this._setHSLA(null,null,null,null,t)}}},{key:\"setColour\",value:function(e,t){this.setColor(e,t)}},{key:\"show\",value:function(){if(!this.settings.parent)return!1;if(this.domElement){var e=this._toggleDOM(!0);return this._setPosition(),e}var t=function(e){var t=document.createElement(\"div\");return t.innerHTML=e,t.firstElementChild}(this.settings.template||'
');return this.domElement=t,this._domH=Va(\".picker_hue\",t),this._domSL=Va(\".picker_sl\",t),this._domA=Va(\".picker_alpha\",t),this._domEdit=Va(\".picker_editor input\",t),this._domSample=Va(\".picker_sample\",t),this._domOkay=Va(\".picker_done button\",t),this._domCancel=Va(\".picker_cancel button\",t),t.classList.add(\"layout_\"+this.settings.layout),this.settings.alpha||t.classList.add(\"no_alpha\"),this.settings.editor||t.classList.add(\"no_editor\"),this.settings.cancelButton||t.classList.add(\"no_cancel\"),this._ifPopup((function(){return t.classList.add(\"popup\")})),this._setPosition(),this.colour?this._updateUI():this._setColor(this.settings.defaultColor),this._bindEvents(),!0}},{key:\"hide\",value:function(){return this._toggleDOM(!1)}},{key:\"destroy\",value:function(){this._events.destroy(),this.domElement&&this.settings.parent.removeChild(this.domElement)}},{key:\"_bindEvents\",value:function(){var e=this,t=this,i=this.domElement,n=this._events;function r(e,t,i){n.add(e,t,i)}r(i,\"click\",(function(e){return e.preventDefault()})),Pa(n,this._domH,(function(e,i){return t._setHSLA(e)})),Pa(n,this._domSL,(function(e,i){return t._setHSLA(null,e,1-i)})),this.settings.alpha&&Pa(n,this._domA,(function(e,i){return t._setHSLA(null,null,null,1-i)}));var s=this._domEdit;r(s,\"input\",(function(e){t._setColor(this.value,{fromEditor:!0,failSilently:!0})})),r(s,\"focus\",(function(e){var t=this;t.selectionStart===t.selectionEnd&&t.select()})),this._ifPopup((function(){var t=function(t){return e.closeHandler(t)};r(window,Ua,t),r(window,qa,t),ja(n,i,[\"Esc\",\"Escape\"],t);var s=function(t){e.__containedEvent=t.timeStamp};r(i,Ua,s),r(i,qa,s),r(e._domCancel,\"click\",t)}));var o=function(t){e._ifPopup((function(){return e.closeHandler(t)})),e.onDone&&e.onDone(e.colour)};r(this._domOkay,\"click\",o),ja(n,i,[\"Enter\"],o)}},{key:\"_setPosition\",value:function(){var e=this.settings.parent,t=this.domElement;e!==t.parentNode&&e.appendChild(t),this._ifPopup((function(i){\"static\"===getComputedStyle(e).position&&(e.style.position=\"relative\");var n=!0===i?\"popup_right\":\"popup_\"+i;[\"popup_top\",\"popup_bottom\",\"popup_left\",\"popup_right\"].forEach((function(e){e===n?t.classList.add(e):t.classList.remove(e)})),t.classList.add(n)}))}},{key:\"_setHSLA\",value:function(e,t,i,n,r){r=r||{};var s=this.colour,o=s.hsla;[e,t,i,n].forEach((function(e,t){(e||0===e)&&(o[t]=e)})),s.hsla=o,this._updateUI(r),this.onChange&&!r.silent&&this.onChange(s)}},{key:\"_updateUI\",value:function(e){if(this.domElement){e=e||{};var t=this.colour,i=t.hsla,n=\"hsl(\"+360*i[0]+\", 100%, 50%)\",r=t.hslString,s=t.hslaString,o=this._domH,a=this._domSL,c=this._domA,l=Va(\".picker_selector\",o),h=Va(\".picker_selector\",a),d=Va(\".picker_selector\",c);b(0,l,i[0]),this._domSL.style.backgroundColor=this._domH.style.color=n,b(0,h,i[1]),F(0,h,1-i[2]),a.style.color=r,F(0,d,1-i[3]);var u=r,f=u.replace(\"hsl\",\"hsla\").replace(\")\",\", 0)\"),p=\"linear-gradient(\"+[u,f]+\")\";if(this._domA.style.background=p+\", linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0 / 2em 2em,\\n linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em / 2em 2em\",!e.fromEditor){var g=this.settings.editorFormat,m=this.settings.alpha,w=void 0;switch(g){case\"rgb\":w=t.printRGB(m);break;case\"hsl\":w=t.printHSL(m);break;default:w=t.printHex(m)}this._domEdit.value=w}this._domSample.style.color=s}function b(e,t,i){t.style.left=100*i+\"%\"}function F(e,t,i){t.style.top=100*i+\"%\"}}},{key:\"_ifPopup\",value:function(e,t){this.settings.parent&&this.settings.popup?e&&e(this.settings.popup):t&&t()}},{key:\"_toggleDOM\",value:function(e){var t=this.domElement;if(!t)return!1;var i=e?\"\":\"none\",n=t.style.display!==i;return n&&(t.style.display=i),n}}]),e}();class Ga{constructor({parent:t,top:n,left:r,width:s,height:o,border:a,closeHandler:c}){let l=e({class:\"igv-ui-generic-container\"});t.appendChild(l),i(l),this.container=l,void 0!==n&&(this.container.style.top=`${n}px`),void 0!==r&&(this.container.style.left=`${r}px`),void 0!==s&&(this.container.style.width=`${s}px`),void 0!==o&&(this.container.style.height=`${o}px`),a&&(this.container.style.border=a);const h=e();this.container.appendChild(h),u(h,(e=>{i(this.container),\"function\"==typeof c&&c(e)})),p(this.container,h)}show(){n(this.container)}hide(){i(this.container)}dispose(){this.container.parent&&this.container.parent.removeChild(this.container)}}class $a extends Ga{static maxRecentColors=10;constructor({parent:t,width:i}){super({parent:t,width:i,border:\"1px solid gray\"}),this.colorSwatchContainer=e(),this.container.appendChild(this.colorSwatchContainer),this.moreColorsContainer=e(),this.container.appendChild(this.moreColorsContainer),this.recentColorsSwatches=e(),this.container.appendChild(this.recentColorsSwatches),this.recentColors=[],this.moreColorsPresentationColor=void 0}configure(t,i,n){this.moreColorsPresentationColor=n,this.colorSwatchContainer.innerHTML=\"\",this.recentColorsSwatches.innerHTML=\"\";const r=Object.values(no);for(const t of r){const n=e({class:\"igv-ui-color-swatch\"});this.colorSwatchContainer.appendChild(n),this.decorateSwatch(n,t,i)}if(this.recentColors.length>0)for(const t of this.recentColors){const n=e({class:\"igv-ui-color-swatch\"});this.recentColorsSwatches.appendChild(n),this.decorateSwatch(n,t,i)}this.decorateMoreColorsButton(this.moreColorsContainer,i)}decorateSwatch(e,t,i){e.style.backgroundColor=t,e.addEventListener(\"click\",(e=>{e.stopPropagation(),i(t),this.moreColorsPresentationColor=t})),e.addEventListener(\"touchend\",(e=>{e.stopPropagation(),i(t),this.moreColorsPresentationColor=t}))}decorateMoreColorsButton(e,t){e.innerText=\"More Colors ...\",e.addEventListener(\"click\",(i=>{i.stopPropagation(),this.createAndPresentMoreColorsPicker(e,(e=>t(e)))}))}updateRecentColorsSwatches(t){this.recentColorsSwatches.innerHTML=\"\";for(const i of this.recentColors){const n=e({class:\"igv-ui-color-swatch\"});this.recentColorsSwatches.appendChild(n),this.decorateSwatch(n,i,t)}}createAndPresentMoreColorsPicker(e,t){let i;e.innerHTML=\"\",e.innerText=\"More Colors ...\";const n=document.createElement(\"div\");n.style.position=\"absolute\",e.appendChild(n);const{width:r,height:s}=e.getBoundingClientRect();n.style.right=\"0px\",n.style.top=\"0px\",n.style.width=`${r}px`,n.style.height=`${s}px`,n.addEventListener(\"click\",(e=>{e.stopPropagation()})),i=new Wa;const o={parent:n,popup:\"top\",editor:!1,editorFormat:\"rgb\",alpha:!1,color:this.moreColorsPresentationColor};i.setOptions(o),i.setColor(this.moreColorsPresentationColor,!0),i.onOpen=()=>{console.log(\"picker - onOpen\")},i.onChange=t=>e.style.backgroundColor=t.rgba,i.onDone=e=>{const r=e.hex.substring(0,7);this.recentColors.unshift(r);const s=this.recentColors.slice(0);this.recentColors=[...new Set(s)].slice(0,$a.maxRecentColors),t(r),this.updateRecentColorsSwatches(t),this.moreColorsPresentationColor=r,i.destroy(),n.remove()},i.show()}}const Ka={401:\"Access unauthorized\",403:\"Access forbidden\",404:\"Not found\"};class Ya{constructor(t,n){this.alertProps=Object.assign({shouldFocus:!0,preventScroll:!1},n),this.container=e({class:\"igv-ui-alert-dialog-container\"}),t.appendChild(this.container),this.container.setAttribute(\"tabIndex\",\"-1\");const r=e();this.container.appendChild(r),this.errorHeadline=e(),r.appendChild(this.errorHeadline),this.errorHeadline.textContent=\"\";let s=e({class:\"igv-ui-alert-dialog-body\"});this.container.appendChild(s),this.body=e({class:\"igv-ui-alert-dialog-body-copy\"}),s.appendChild(this.body);let o=e();this.container.appendChild(o),this.ok=e(),o.appendChild(this.ok),this.ok.textContent=\"OK\";const a=()=>{\"function\"==typeof this.callback&&(this.callback(\"OK\"),this.callback=void 0),this.body.innerHTML=\"\",i(this.container)};this.ok.addEventListener(\"click\",(e=>{e.stopPropagation(),a()})),this.container.addEventListener(\"keypress\",(e=>{e.stopPropagation(),\"Enter\"===e.key&&a()})),p(this.container,r),i(this.container)}present(e,t){this.errorHeadline.textContent=e.message?\"ERROR\":\"\";let i=e.message||e;Ka.hasOwnProperty(i)&&(i=Ka[i]);const r=Na.sanitize(i);this.body.innerHTML=r,this.callback=t,n(this.container),this.alertProps.shouldFocus&&this.container.focus({preventScroll:this.alertProps.preventScroll})}}class Xa{constructor(e){this.dialog=new Ya(e)}present(e,t){this.dialog.present(e,t)}}function Za(e){if(e)switch(e.toLowerCase()){case\"bw\":case\"bigwig\":case\"wig\":case\"bedgraph\":case\"tdf\":return\"wig\";case\"vcf\":return\"variant\";case\"seg\":return\"seg\";case\"mut\":case\"maf\":return\"mut\";case\"bam\":case\"cram\":return\"alignment\";case\"hiccups\":case\"bedpe\":case\"bedpe-loop\":case\"biginteract\":return\"interact\";case\"bp\":return\"arc\";case\"gwas\":return\"gwas\";case\"bed\":case\"bigbed\":case\"bb\":case\"biggenepred\":case\"bignarrowpeak\":return\"bedtype\";case\"fasta\":return\"sequence\";case\"pytor\":return\"cnvpytor\";case\"qtl\":return\"qtl\";default:return\"annotation\"}}function Ja(e){e.featureType&&(e.type=e.type||e.featureType,e.featureType=void 0),\"junctions\"===e.type?e.type=\"junction\":\"bed\"===e.type?(e.type=\"annotation\",e.format=e.format||\"bed\"):\"annotations\"===e.type?e.type=\"annotation\":\"alignments\"===e.type?e.type=\"alignment\":\"bam\"===e.type?(e.type=\"alignment\",e.format=\"bam\"):\"vcf\"===e.type?(e.type=\"variant\",e.format=\"vcf\"):\"t2d\"===e.type?e.type=\"gwas\":\"FusionJuncSpan\"!==e.type||e.format?\"aed\"===e.type&&(e.type=\"annotation\",e.format=e.format||\"aed\"):e.format=\"fusionjuncspan\"}var ec=Object.freeze({__proto__:null,inferTrackType:Za,translateDeprecatedTypes:Ja});function tc(e){const t=new Set([\"boolean\",\"number\",\"string\",\"symbol\"]),i=typeof e;return void 0!==e&&(t.has(i)||e.substring||e.toFixed)}function ic(e,t){var i={oauthToken:e.oauthToken,headers:e.headers,withCredentials:e.withCredentials,filename:e.filename};return Object.assign(i,t)}const nc=function(e){var t,i;if(e&&e.length>0){t=Number.MAX_VALUE,i=-Number.MAX_VALUE;for(let n of e)Number.isNaN(n.value)||(t=Math.min(t,n.value),i=Math.max(i,n.value));i>0&&(t=Math.min(0,t)),i<0&&(i=0)}else t=0,i=100;return{min:t,max:i}},rc=function(e,t,i){let n=t.start,r=t.end;if(void 0===r)n-=i/2,r=n+i,r>e?(r=e,n=r-i):n<0&&(n=0,r=i);else if(r-ne?(r=e,n=r-i):(n=t-i/2,r=n+i)}t.start=Math.ceil(n),t.end=Math.floor(r)},sc=function(e){return\"number\"==typeof e?e-e==0:\"string\"==typeof e&&\"\"!==e.trim()&&Number.isFinite(+e)};async function oc(e){if(Mt(e)&&e.startsWith(\"https://drive.google.com\")){if(void 0===zs())throw Error(\"Google drive is referenced, but API key is not defined. An API key is required for Google Drive access\");const t=await async function(e){let t=\"https://www.googleapis.com/drive/v3/files/\"+Ps(e)+\"?supportsTeamDrives=true\";const i=zs();i&&(t+=\"&key=\"+i);const n=await fetch(t);let r=await n.json();if(r.error&&404===r.error.code){let e=\"https://www.googleapis.com/auth/drive.readonly\";const i=await Ls(e);if(!i)throw Error(r.error);{const e=await fetch(t,{headers:{Authorization:`Bearer ${i}`}});if(r=await e.json(),r.error)throw Error(r.error)}}return r}(e);return t.originalFileName||t.name}return zt(e)}function ac(e){var t,i;return e>1e7?(t=\" mb\",i=e/1e6,Math.floor(i).toString()+t):e>1e4?(t=\" kb\",i=e/1e3,Dt(Math.floor(i))+t):Dt(e)+\" bp\"}function cc(e){return Mt(e)&&e.startsWith(\"data:\")}function lc(t,i){const n=e({class:i});t.appendChild(n)}function hc(e,t){t.parentNode.insertBefore(e,t)}function dc(e,t){t.parentNode.insertBefore(e,t.nextSibling)}function uc(){return\"https:\"===window.location.protocol||\"localhost\"===window.location.hostname}class fc{constructor(t,i,n,r){this.parent=t,this.popover=e({class:\"igv-ui-popover\"}),t.appendChild(this.popover),this.popoverHeader=e(),this.popover.appendChild(this.popoverHeader);const s=e();this.popoverHeader.appendChild(s),n&&(s.textContent=n);const o=e();this.popoverHeader.appendChild(o),o.appendChild(l(\"times\")),o.addEventListener(\"click\",(e=>{e.stopPropagation(),e.preventDefault(),r?r():this.dismiss()})),!0===i&&p(this.popover,this.popoverHeader,{minX:0,minY:0}),this.popoverContent=e(),this.popover.appendChild(this.popoverContent),this.popover.style.display=\"none\"}configure(e){if(0===e.length)return;const t=gc(e,this.popover);for(const{object:e}of t)this.popoverContent.appendChild(e)}present(e){this.popover.style.display=\"block\";const t=this.popover.parentNode,{x:i,y:n,width:r}=a(e,t);this.popover.style.top=`${n}px`;const{width:s}=this.popover.getBoundingClientRect(),o=i+s,c=o-r;this.popover.style.left=`${o>r?i-c:i}px`,this.popoverContent.style.maxWidth=`${Math.min(s,r)}px`}presentContentWithEvent(e,t){this.popover.style.display=\"block\",this.popoverContent.innerHTML=t,pc(e,this.popover,this.popoverContent)}presentMenu(e,t){if(0===t.length)return;this.popover.style.display=\"block\";const i=gc(t,this.popover);for(let e of i)this.popoverContent.appendChild(e.object);pc(e,this.popover,this.popoverContent)}dismiss(){this.popover.style.display=\"none\"}hide(){this.popover.style.display=\"none\",this.dispose()}dispose(){this.popover&&this.popover.parentNode.removeChild(this.popover);const e=Object.keys(this);for(let t of e)this[t]=void 0}}function pc(e,t,i){const{x:n,y:r,width:s}=a(e,t.parentNode);t.style.top=`${r}px`;const{width:o}=t.getBoundingClientRect(),c=n+o,l=c-s;t.style.left=`${c>s?n-l:n}px`,i.style.maxWidth=`${Math.min(o,s)}px`}function gc(t,n){const r=t.map((function(t,r){let s;if(\"string\"==typeof t)s=e(),s.innerHTML=t;else if(\"Node\"==typeof t)s=t;else if(\"function\"==typeof t.init&&t.init(),\"checkbox\"===t.type?s=function(t,i){const n=e({class:\"igv-ui-trackgear-popover-check-container\"}),r=h(\"check\",!0===i?\"#444\":\"transparent\");r.style.borderColor=\"gray\",r.style.borderWidth=\"1px\",r.style.borderStyle=\"solid\",n.appendChild(r);let s=e();return s.textContent=t,n.appendChild(s),n}(\"Show all bases\",t.value):(s=e(),\"string\"==typeof t.label&&(s.innerHTML=t.label)),t.click&&\"color\"!==t.type){function o(e){t.click(),i(n),e.preventDefault(),e.stopPropagation()}s.addEventListener(\"click\",o),s.addEventListener(\"touchend\",o),s.addEventListener(\"mouseup\",(function(e){e.preventDefault(),e.stopPropagation()}))}return{object:s,init:t.init}}));return r}const mc=[[\"A\",\"T\"],[\"G\",\"C\"],[\"Y\",\"R\"],[\"W\",\"S\"],[\"K\",\"M\"],[\"D\",\"H\"],[\"B\",\"V\"]],wc=new Map;for(let GA of mc){const $A=GA[0],KA=GA[1];wc.set($A,KA),wc.set(KA,$A),wc.set($A.toLowerCase(),KA.toLowerCase()),wc.set(KA.toLowerCase(),$A.toLowerCase())}function bc(e){return wc.has(e)?wc.get(e):e}function Fc(e){let t=\"\";for(let i of e)t+=wc.has(i)?wc.get(i):i;return t}function vc(e){let t=\"\",i=e.length;for(;i-- >0;){const n=e[i];t+=wc.has(n)?wc.get(n):n}return t}class yc{constructor(e,t,i,n){this.name=e,this.order=t,this.bpLength=i,this.altNames=n}getAltName(e){return this.altNames&&this.altNames.has(e)?this.altNames.get(e):this.name}}class Ac{constructor(e,t,i,n){this.chr=e,this.start=t,this.end=i,this.features=n}contains(e,t,i){return this.chr===e&&this.start<=t&&this.end>=i}containsRange(e){return this.chr===e.chr&&this.start<=e.start&&this.end>=e.end}get locusString(){return`${this.chr}:${this.start+1}-${this.end}`}}class Cc extends Ac{constructor(e,t,i,n){super(e,t,i,n)}getSequence(e,t){if(ethis.end)return null;const i=e-this.start,n=t-e;return this.features?this.features.substring(i,i+n):null}hasSequence(e,t){return e>=this.start&&t<=this.end}}const _c=Rt,xc=new Set([\"fastaURL\",\"indexURL\",\"cytobandURL\",\"indexed\"]);class kc{#e;chromosomes=new Map;sequences=new Map;constructor(e){this.fastaURL=e.fastaURL,this.withCredentials=e.withCredentials;const t={};for(let i in e)e.hasOwnProperty(i)&&!xc.has(i)&&(t[i]=e[i]);this.config=t}async init(){return this.loadAll()}getSequenceRecord(e){return this.chromosomes.get(e)}get chromosomeNames(){return this.#e||(this.#e=Array.from(this.chromosomes.keys())),this.#e}getFirstChromosomeName(){return this.chromosomeNames[0]}async getSequence(e,t,i){if(0===this.sequences.size&&await this.loadAll(),!this.sequences.has(e))return;let n=this.sequences.get(e).find((e=>e.contains(t,i)));if(!n&&(n=this.sequences.get(e).find((e=>e.overlaps(t,i))),!n))return;t-=n.offset,i-=n.offset;let r=\"\";if(t<0)for(let e=t;e\")){a&&a.seq&&c.call(this,a,o++);const e=r.substr(1).split(/\\s+/),t=e[0].split(\":\");if(a.chr=t[0],a.seq=\"\",a.offset=0,t.length>1&&t[1].indexOf(\"-\")>0){const i=t[1].split(\"-\");2===i.length&&/^[0-9]+$/.test(i[0])&&/^[0-9]+$/.test(i[1]);const n=Number.parseInt(i[0]);if(Number.parseInt(i[1])>n&&(a.offset=n-1),e.length>1&&e[1].startsWith(\"@len=\"))try{a.length=parseInt(e[1].trim().substring(5))}catch(e){a.length=void 0,console.error(`Error parsing sequence length for ${r}`)}else a.length=void 0}}else a.seq+=r;a&&a.seq&&c.call(this,a,o)}function c(e,i){const n=e.length||e.offset+e.seq.length;if(t.has(e.chr)){const t=this.chromosomes.get(e.chr);t.bpLength=Math.max(t.bpLength,n)}else this.sequences.set(e.chr,[]),this.chromosomes.set(e.chr,new yc(e.chr,i,n)),t.add(e.chr);this.sequences.get(e.chr).push(new Ic(e.offset,e.seq))}}getSequenceInterval(e,t,i){const n=this.sequences.get(e);if(n)for(let r of n){const n=r.sequence,s=r.offset,o=s+n.length;if(s<=t&&o>=i)return new Cc(e,s,o,n)}}}class Ic{constructor(e,t){this.offset=e,this.sequence=t}contains(e,t){return this.offset<=e&&this.end>=t}overlaps(e,t){return this.offsete}get end(){return this.offset+this.sequence.length}}const Sc=Rt,Ec=new Set([\"fastaURL\",\"indexURL\",\"compressedIndexURL\",\"cytobandURL\",\"indexed\"]);class Nc{#e;chromosomes=new Map;constructor(e){this.file=e.fastaURL,this.indexFile=e.indexURL,this.compressedIndexFile=e.compressedIndexURL,this.withCredentials=e.withCredentials;const t={};for(let i in e)e.hasOwnProperty(i)&&!Ec.has(i)&&(t[i]=e[i]);this.config=t}getSequenceRecord(e){return this.chromosomes.get(e)}async init(){return this.getIndex()}get chromosomeNames(){return this.#e||(this.#e=Array.from(this.chromosomes.keys())),this.#e}getFirstChromosomeName(){return this.chromosomeNames[0]}async getIndex(){if(this.index)return this.index;{const e=await Vs.load(this.indexFile,ic(this.config)),t=Sc(e),i=t.length;let n=0,r=0;for(this.index={};nthis.compressedIndex[n][1])return[n];let r=0,s=n,o=Math.floor(this.compressedIndex.length/2),a=this.compressedIndex.length+1,c=!1;for(let t=0;te){c=!0;break}t=t)break}const l=i[i.length-1];return l===this.compressedIndex.length-1&&this.compressedIndex[l][1]0&&(w=Math.min(s-r,a-u),b+=m.substr(F,w),F+=w+l);F1){const e=Number.parseInt(t[1]),n=new yc(t[0],i++,e);this.chromosomes.set(t[0],n)}}}}class Dc{constructor(e,t=!0){this.littleEndian=t,this.position=0,this.view=e,this.length=e.byteLength}dumpBytes(e=100){const t=this.position,i=[];for(let t=0;t<=e;t++)i.push(this.getByte());console.log(i.join(\" \")),this.setPosition(t)}setPosition(e){this.position=e}available(){return this.length-this.position}remLength(){return this.length-this.position}hasNext(){return this.position=0;i--)t=256*t+e[i];else for(let i=0;i0&&(t+=String.fromCharCode(e))}return t}getFloat(){var e=this.view.getFloat32(this.position,this.littleEndian);return this.position+=4,e}getDouble(){var e=this.view.getFloat64(this.position,this.littleEndian);return this.position+=8,e}skip(e){return this.position+=e,this.position}getVPointer(){var e=this.position,t=this.view.getUint8(e+1)<<8|this.view.getUint8(e),i=4294967296*(255&this.view.getUint8(e+6))+16777216*(255&this.view.getUint8(e+5))+65536*(255&this.view.getUint8(e+4))+256*(255&this.view.getUint8(e+3))+(255&this.view.getUint8(e+2));return this.position+=8,new Rc(i,t)}}class Rc{constructor(e,t){this.block=e,this.offset=t}isLessThan(e){return this.blocke.block||this.block===e.block&&this.offset>e.offset}isEqualTo(e){return this.block===e.block&&this.offset===e.offset}print(){return this.block+\":\"+this.offset}}class Tc{static magic=2026540177;littleEndian=!0;nodeCache=new Map;static async loadBpTree(e,t,i){return new Tc(e,t,i).init()}constructor(e,t,i){this.path=e,this.config=t,this.startOffset=i}async init(){const e=await this.#t(this.startOffset,32);let t=e.getInt();if(t!==Tc.magic&&(e.setPosition(0),this.littleEndian=!this.littleEndian,e.littleEndian=this.littleEndian,t=e.getInt(),t!==Tc.magic))throw Error(`Bad magic number ${t}`);const i=e.getInt(),n=e.getInt(),r=e.getInt(),s=e.getLong(),o=e.getLong(),a=this.startOffset+32;return this.header={magic:t,blockSize:i,keySize:n,valSize:r,itemCount:s,reserved:o,nodeOffset:a},this}async search(e){this.header||await this.init();const{keySize:t,valSize:i}=this.header;if(16!==i&&8!==i)throw Error(`Unexpected valSize ${i}`);const n=async e=>{if(this.nodeCache.has(e))return this.nodeCache.get(e);{let n=await this.#t(e,4);const r=n.getByte();n.getByte();const s=n.getUShort(),o=[];if(1===r){const r=s*(t+i);n=await this.#t(e+4,r);for(let e=0;e{const i=await n(t);if(1!==i.type){let t=i.items[0].offset;for(let n=1;n>6&3]+Lc[YA>>4&3]+Lc[YA>>2&3]+Lc[3&YA]);const Hc=zc.map((e=>e.toLowerCase()));class Pc{littleEndian;metaIndex=new Map;constructor(e){this.url=e.twoBitURL||e.fastaURL,this.config=e,e.twoBitBptURL&&(this.bptURL=e.twoBitBptURL)}async init(){if(this.bptURL)this.index=await Tc.loadBpTree(this.bptURL,this.config,0);else{const e=await this._readIndex();this.index={search:async t=>e.has(t)?{offset:e.get(t)}:void 0}}}async readSequence(e,t,i){this.index||await this.init();const n=await this.getSequenceRecord(e);if(!n)return null;if(t<0)throw new TypeError(\"regionStart cannot be less than 0\");(void 0===i||i>n.dnaSize)&&(i=n.dnaSize);const r=this._getOverlappingBlocks(t,i,n.nBlocks),s=this._getOverlappingBlocks(t,i,n.maskBlocks),o=Math.floor(t/4),a=n.packedPos+o,c=Math.floor(i/4)-o+1,l=await Vs.loadArrayBuffer(this.url,{range:{start:a,size:c}}),h=new Uint8Array(l);let d=\"\";for(let e=t;ee;if(r[0]&&e>=r[0].start&&et)break;r.endn.contains(e,t,i)));if(n||(n=await this.#o(e,t,i),this.#a(n),this.#r.push(n)),n){const e=t-n.start,r=i-t;return n.features?n.features.substring(e,e+r):null}}#a(e){this.#r=this.#r.filter((t=>!e.contains(t))),this.#r.length===this.#s&&this.#r.shift(),this.browser&&this.browser.referenceFrameList.length<100&&(this.#r=this.#r.filter((e=>void 0!==this.browser.referenceFrameList.find((t=>t.overlaps(e))))))}getSequenceInterval(e,t,i){return this.#r.find((n=>n.contains(e,t,i)))}async#o(e,t,i){let n=t,r=i;if(i-t{s.features=await this.sequenceReader.readSequence(e,n,r),t(s)}));return this.#n=[s,t],t}}async init(){return this.sequenceReader.init()}get chromosomeNames(){return this.sequenceReader.chromosomeNames}getFirstChromosomeName(){return\"function\"==typeof this.sequenceReader.getFirstChromosomeName?this.sequenceReader.getFirstChromosomeName():void 0}#c(e){this.browser.referenceFrameList}}async function qc(e,t){let i;return\"chromsizes\"===e.format?i=new Mc(e.fastaURL||e.url):\"2bit\"===e.format||e.twoBitURL?i=new Uc(new Pc(e),t):cc(e.fastaURL)||!e.indexURL?i=new kc(e):\"gbk\"===e.format||e.gbkURL||(i=new Uc(new Nc(e),t)),await i.init(),i}const Vc={A:\"rgb( 0, 200, 0)\",C:\"rgb( 0,0,200)\",T:\"rgb(255,0,0)\",G:\"rgb(209,113, 5)\",N:\"rgb(80,80,80)\"};function Qc(e,t){if(e.length<6)return void console.log(\"Skipping line: \"+e.join(\" \"));var i={chr1:e[0],start1:Number.parseInt(e[1]),end1:Number.parseInt(e[2]),chr2:e[3],start2:Number.parseInt(e[4]),end2:Number.parseInt(e[5])};if(isNaN(i.start1)||isNaN(i.end1)||isNaN(i.start2)||isNaN(i.end2))return;t&&void 0===t.hiccups&&(t.hiccups=!!t.columnNames&&Wc(t.columnNames));const n=t&&t.hiccups,r=n?6:10;if(n||(e.length>6&&\".\"!==e[6]&&(i.name=e[6]),e.length>7&&\".\"!==e[7]&&(i.score=Number(e[7])),e.length>8&&\".\"!==e[8]&&(i.strand1=e[8]),e.length>9&&\".\"!==e[9]&&(i.strand2=e[9])),t){const n=t.colorColumn;n&&nr&&t.columnNames&&t.columnNames.length===e.length&&(i.extras=e.slice(r))}return i.chr1===i.chr2&&(i.chr=i.chr1,i.start=Math.min(i.start1,i.start2),i.end=Math.max(i.end1,i.end2)),i}function jc(e,t){if(!(e.length<8))return{chr:e[0],start:Number.parseInt(e[1]),end:Number.parseInt(e[2]),color:_s.createColorString(e[6]),value:Number(e[7])}}function Wc(e){return e&&(e.includes(\"fdrDonut\")||e.includes(\"fdr_donut\"))}function Gc(e,t){if(!(e.length<6))return{chr:e[0],start:Number.parseInt(e[1]),end:Number.parseInt(e[2]),chr1:e[8],start1:Number.parseInt(e[9]),end1:Number.parseInt(e[10]),chr2:e[13],start2:Number.parseInt(e[14]),end2:Number.parseInt(e[15]),name:e[3],score:Number(e[4]),value:Number(e[5]),color:\".\"===e[7]?void 0:\"0\"===e[7]?\"rgb(0,0,0)\":e[7]};console.log(\"Skipping line: \"+e.join(\" \"))}class $c{constructor(e){this.message=e}}const Kc=new Map([[\"%09\",\"\\t\"],[\"%0A\",\"\\n\"],[\"%0D\",\"\\r\"],[\"%25\",\"%\"],[\"%3B\",\";\"],[\"%3D\",\"=\"],[\"%26\",\"&\"],[\"%2C\",\",\"]]);function Yc(e){if(!e.includes(\"%\"))return e;let t=\"\";for(let i=0;i0&&e\"),this.name&&t.push({name:\"Name\",value:this.name}),t.push({name:\"Type\",value:this.type}),t.push({name:\"Source\",value:this.source}),void 0!==this.score&&t.push({name:\"Score\",value:this.score}),t.push({name:\"Phase\",value:this.phase}),this.attributeString){const e=Xc(this.attributeString,this.delim);for(let[i,n]of e)void 0!==n&&n.length>0&&!hl.has(i.toLowerCase())&&t.push({name:i+\":\",value:n})}return t.push({name:\"Location\",value:`${this.chr}:${Dt(this.start+1)}-${Dt(this.end)}`}),t}getAttributeValue(e){if(this.hasOwnProperty(e))return this[e];if(this._attributeCache||(this._attributeCache=new Map),this._attributeCache.has(e))return this._attributeCache.get(e);{const t=Xc(this.attributeString,this.delim);let i;for(let[n,r]of t)if(n===e){i=r;break}return this._attributeCache.set(e,i),i}}}class ul extends dl{constructor(e){super(e),this.exons=[],this.parts=[]}addExon(e){this.exons.push(e),this.start=Math.min(this.start,e.start),this.end=Math.max(this.end,e.end)}addPart(e){this.parts.push(e)}assembleParts(){if(0===this.parts.length)return;this.parts.sort((function(e,t){return e.start-t.start}));let e=this.parts[0].start,t=this.parts[0].end;for(let i=1;i=t&&i.start<=e)return i}addCDS(e){let t;const i=this.exons;for(let n of i)if(n.start<=e.start&&n.end>=e.end){t=n;break}t?(t.cdStart=t.cdStart?Math.min(e.start,t.cdStart):e.start,t.cdEnd=t.cdEnd?Math.max(e.end,t.cdEnd):e.end,t.readingFrame=e.readingFrame):console.error(\"No exon found spanning \"+e.start+\"-\"+e.end),this.cdStart=this.cdStart?Math.min(e.start,this.cdStart):e.start,this.cdEnd=this.cdEnd?Math.max(e.end,this.cdEnd):e.end}addUTR(e){let t;const i=this.exons;for(let n=0;n=e.end){t=i[n];break}t?e.start===t.start&&e.end===t.end?t.utr=!0:(e.endt.start&&(t.cdEnd=e.start)):console.error(\"No exon found spanning \"+cds.start+\"-\"+cds.end)}finish(){this.assembleParts();var e=this.cdStart,t=this.cdEnd;this.exons.sort((function(e,t){return e.start-t.start})),e&&this.exons.forEach((function(i){(i.endt)&&(i.utr=!0)}))}popupData(e){const t=super.popupData(e);for(let i of this.exons)if(!i.pseudo&&e>=i.start&&e\");const n=i.popupData(e);for(let e of n)t.push(e)}for(let i of this.parts)if(e>=i.start&&e\");const n=i.popupData(e);for(let e of n)t.push(e)}return t}}class fl{static gffNameFields=new Set([\"Name\",\"transcript_id\",\"gene_name\",\"gene\",\"gene_id\",\"alias\",\"locus\",\"name\"]);constructor(e){this.format=e.format,this.nameField=e.nameField,this.filterTypes=void 0===e.filterTypes?new Set([\"chromosome\"]):new Set(e.filterTypes)}combineFeatures(e,t){let i;const n=this.filterTypes;if(e=e.filter((e=>void 0===n||!n.has(e.type))),\"gff3\"===this.format){const t=this.combineFeaturesById(e);i=this.combineFeaturesByType(t)}else i=this.combineFeaturesByType(e);return this.numberExons(i,t),this.nameFeatures(i),i}combineFeaturesById(e){const t=new Map,i=[];for(let n of e)if(ll(n.type)||cl(n.type)||!n.id)i.push(n);else{let e=t.get(n.chr);e||(e=new Map,t.set(n.chr,e));let i=e.get(n.id);i?i.push(n):e.set(n.id,[n])}for(let e of t.values())for(let t of e.values())if(t.length>1){const e=t[0];e.exons=[];for(let i of t)e.start=Math.min(e.start,i.start),e.end=Math.max(e.end,i.end),e.exons.push({start:i.start,end:i.end});i.push(e)}else i.push(t[0]);return i}combineFeaturesByType(e){const t=e.filter((e=>\"gene\"===e.type||e.type.endsWith(\"_gene\"))),i=Object.create(null);for(let e of t)i[e.id]=e;const n=Object.create(null),r=[],s=new Set,o=this.filterTypes;e=e.filter((e=>void 0===o||!o.has(e.type)));for(let t of e)if(cl(t.type)){const e=t.id;if(void 0!==e){const o=new ul(t);n[e]=o,r.push(o),s.add(t);const a=i[t.parent];a&&(o.geneObject=a,s.add(a))}}for(let t of e)if(ll(t.type)){const e=l(t);if(e)for(let i of e){let o=n[i];if(!o&&\"gtf\"===this.format){const e=Object.assign({},t);e.type=\"transcript\",o=new ul(e),n[i]=o,r.push(o)}if(void 0!==o){if(a=t.type,nl.has(a))if(e.length>1){const e=new dl(t);o.addExon(e)}else o.addExon(t);else o.addPart(t);s.add(t)}}}var a;r.forEach((function(e){\"function\"==typeof e.finish&&e.finish()}));const c=e.filter((e=>!s.has(e)));for(let e of c)r.push(e);return r;function l(e){return e.parent&&\"\"!==e.parent.trim()?e.parent.trim().split(\",\"):null}}numberExons(e,t){for(let i of e)if(i.exons&&(!t||i.end<=t.end&&i.start>t.start))for(let e=0;e2?parseInt(e[2]):s+1;if(isNaN(s)||isNaN(o))return new $c(\"Unparsable bed record.\");const a=new El({chr:r,start:s,end:o,score:1e3});let c=3;try{if(e.length>3&&c++0&&e[3].indexOf(\"=\")>0){const i=Xc(e[3],\"=\");a.attributes={};for(let e of i)a.attributes[e[0]]=e[1],n&&(null!=t.nameField&&e[0]===t.nameField||!a.name&&fl.gffNameFields.has(e[0]))&&(a.name=e[1])}a.name||n||(a.name=\".\"===e[3]?\"\":e[3])}if(e.length>4&&c++5&&c++6&&c++7&&c++8&&c++11&&c++1e3)return a;const i=e[10].replace(/,$/,\"\").split(\",\"),n=e[11].replace(/,$/,\"\").split(\",\");if(i.length!==n.length||t!==i.length)return a;const r=[];for(let e=0;e0&&(Cl(r,a.cdStart,a.cdEnd),a.exons=r)}if(t){let i=t.thicknessColumn,n=t.colorColumn;n&&n14&&(i.signal=Number(e[12]),i.pValue=Number(e[13]),i.qValue=Number(e[14])),i}function ml(e,t){const i=pl(e,t,9);if(i){const t=[\"Coverage\",\"% Showing Methylation\",\"N-mod\",\"N-canonical\",\"N-other mod\",\"N-delete\",\"N-fail\",\"N-dff\",\"N-nocall\"];for(let n=9;ni?n.utr=!0:(t>=r&&t<=e&&(n.cdStart=t),i>=r&&i<=e&&(n.cdEnd=i))}}function _l(e,t){var i,n,r,s,o,a,c;if(!(e.length<9))return i=e[0],n=parseInt(e[1]),r=parseInt(e[2]),o=e[3],a=Number(e[4]),s=e[5].trim(),c=Number(e[6]),0===a&&(a=c),{chr:i,start:n,end:r,name:o,score:a,strand:s,signal:c,pValue:Number(e[7]),qValue:Number(e[8])}}function xl(e,t){const i=_l(e);return e.length>9&&(i.peak=Number(e[9])),i}function kl(e,t){if(e.length<=3)return;const i={chr:e[0],start:parseInt(e[1]),end:parseInt(e[2]),value:Number(e[3])};if(t){let n=t.colorColumn;n&&n0)for(var u=c.split(\",\"),f=0;fd&&(d=m),l.spanning_frag_coords.push({left:g,right:m})}return l.start=h,l.end=d,l}}function Tl(e,t){if(e.length<7)return null;const i={chr:e[0],start:parseInt(e[1])-1,end:parseInt(e[2]),\"Strongest SNP-risk allele\":e[3],\"Disease/Phenotype\":e[4],\"P-value\":e[5],\"Odds ratio or beta\":e[6]};return e.length>6&&(i.PUBMEDID=`${e[7]}`),i}function Ll(e,t){const i=t.customFormat;if(e.length1&&(t=e)}else{this.setDecoder(n.format);const e=i.split(this.delimiter||\"\\t\");try{const i=Object.assign({columnNames:t},n);let r;if(r=this.decode(e,i)){n.firstFeature=r;break}e.length>1&&(t=e)}catch(i){e.length>1&&(t=e)}}}if(t){n.columnNames=t;for(let e=0;e0&&console.error(`Error parsing line '${s}': ${c.message}`)):c&&t.push(c)}return i===Qc&&function(e){if(0==e.length)return;const t=e[0];if(void 0===t.score&&void 0!==t.name){for(let t of e)if(!sc(t.name)&&\".\"!==t.name)return;for(let t of e)t.score=Number(t.name),delete t.name}const i=e.filter((e=>e.chr1!==e.chr2));for(let t of i){const i=Object.assign({},t);i.dup=!0,e.push(i),t.chr=t.chr1,t.start=t.start1,t.end=t.end1,i.chr=i.chr2,i.start=i.start2,i.end=i.end2}}(t),\"gtf\"!==this.config.format&&\"gff3\"!==this.config.format&&\"gff\"!==this.config.format||!1===this.config.assembleGFF?t:new fl(this.config).combineFeatures(t)}setDecoder(e){switch(e){case\"broadpeak\":case\"regionpeak\":case\"peaks\":this.decode=_l,this.delimiter=this.config.delimiter||/\\s+/;break;case\"narrowpeak\":this.decode=xl,this.delimiter=this.config.delimiter||/\\s+/;break;case\"bedgraph\":this.decode=kl,this.delimiter=/\\s+/;break;case\"wig\":this.decode=Il,this.delimiter=this.config.delimiter||/\\s+/;break;case\"gff3\":case\"gff\":this.decode=Ml,this.delimiter=\"\\t\";break;case\"gtf\":this.decode=Dl,this.delimiter=\"\\t\";break;case\"fusionjuncspan\":this.decode=Rl,this.delimiter=this.config.delimiter||/\\s+/;break;case\"gtexgwas\":this.skipRows=1,this.decode=Tl,this.delimiter=\"\\t\";break;case\"refflat\":this.decode=vl,this.delimiter=this.config.delimiter||/\\s+/;break;case\"genepred\":this.decode=bl,this.delimiter=this.config.delimiter||/\\s+/;break;case\"genepredext\":this.decode=Fl,this.delimiter=this.config.delimiter||/\\s+/;break;case\"ensgene\":this.decode=bl,this.header.shift=1,this.delimiter=this.config.delimiter||/\\s+/;break;case\"refgene\":this.decode=Fl,this.delimiter=this.config.delimiter||/\\s+/,this.header.shift=1;break;case\"bed\":this.decode=pl,this.delimiter=this.config.delimiter||/\\s+/;break;case\"gappedpeak\":this.decode=gl,this.delimiter=this.config.delimiter||/\\s+/;break;case\"bedmethyl\":this.decode=ml,this.delimiter=this.config.delimiter||/\\s+/;break;case\"bedpe\":case\"hiccups\":this.decode=Qc,this.delimiter=this.config.delimiter||\"\\t\";break;case\"bedpe-domain\":this.decode=jc,this.headerLine=!0,this.delimiter=this.config.delimiter||\"\\t\";break;case\"bedpe-loop\":this.decode=Qc,this.delimiter=this.config.delimiter||\"\\t\",this.header={colorColumn:7};break;case\"interact\":this.decode=Gc,this.delimiter=this.config.delimiter||/\\s+/;break;case\"snp\":this.decode=Sl,this.delimiter=\"\\t\";break;case\"rmsk\":this.decode=wl,this.delimiter=\"\\t\";break;case\"gcnv\":this.decode=zl,this.delimiter=\"\\t\";break;case\"shoebox\":this.decode=Hl,this.delimiter=\"\\t\";break;default:const t=function(e){return Pl&&Pl[e]?function(e){const t=e.fields,i=[\"chr\",\"start\",\"end\"];for(let n=0;n4?parseInt(t[4].split(\"=\")[1],10):1,index:0}}function Ql(e){const t=e.split(/\\s+/);return{format:\"variableStep\",chrom:t[1].split(\"=\")[1],span:t.length>2?parseInt(t[2].split(\"=\")[1],10):1}}function jl(t,i){const n=e({class:\"igv-menu-popup-check-container\"}),r=e();n.appendChild(r);const s=l(\"check\",!0===i?\"#444\":\"transparent\");r.appendChild(s);const o=e();return o.innerText=t,n.appendChild(o),n}function Wl(e,t){t=t||Number.MAX_SAFE_INTEGER;const i=[];e.sort((function(e,t){return e.start-t.start})),i.push(-1e3);for(let n of e){let e=0;const r=Math.min(i.length,t);for(e=0;e=i[e]){n.row=e,i[e]=n.end;break}n.row=e,i[e]=n.end}}async function Gl(e,t,i){const n=e=>{const i=Object.assign({},e);return i.chr=\"all\",i.start=t.getGenomeCoordinate(e.chr,e.start),i.end=t.getGenomeCoordinate(e.chr,e.end),i._f=e,i.exons&&delete i.exons,i},r=new Set(t.wgChromosomeNames),s=[];let o=0;for(let a of t.wgChromosomeNames){if(Array.isArray(e)){const i={};for(let n of e){const e=t.getChromosomeName(n.chr);i.hasOwnProperty(e)||(i[e]=[]),i[e].push(n)}e=i}const c=e[a];if(c){const e=i||1e4;for(let i of c){let a=t.getChromosomeName(i.chr);if(r.has(a))if(s.length0&&!i.startsWith(\"rgb(\")&&!i.startsWith(\"rgba(\")?`rgb(${i})`:i);var i;e.name||e.label?this.name=e.name||e.label:Ht(e.url)?this.name=e.url.name:Mt(e.url)&&!e.url.startsWith(\"data:\")&&(this.name=zt(e.url)),this.url=e.url,this.config.type&&(this.type=this.config.type),this.id=void 0===this.config.id?this.name:this.config.id,this.order=e.order,this.autoscaleGroup=e.autoscaleGroup,this.removable=void 0===e.removable||e.removable,this.minHeight=e.minHeight||Math.min(25,this.height),this.maxHeight=e.maxHeight||Math.max(1e3,this.height),e.onclick&&(this.onclick=e.onclick,e.onclick=void 0),e.description&&(\"function\"==typeof e.description?this.description=e.description:this.description=()=>e.description),e.hoverTextFields?this.hoverText=Yl.bind(this):\"function\"==typeof this.config.hoverText&&(this.hoverText=this.config.hoverText)}async postInit(){return console.log(`TrackBase - track(${this.type}) - postInit()`),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get name(){return this._name}set name(e){this._name=e,this.trackView&&this.trackView.setTrackLabelName(e)}clearCachedFeatures(){this.trackView&&this.trackView.clearCachedFeatures()}updateViews(){this.trackView&&this.trackView.updateViews()}repaintViews(){this.trackView&&this.trackView.repaintViews()}getState(){const e={},t=Object.keys(this.config).filter((e=>{return!(void 0===(t=this.config[e])||\"function\"==typeof t||t instanceof Promise);var t}));for(const i of t)i.startsWith(\"_\")||(e[i]=this.config[i]);for(let t of Object.keys(e)){if(t.startsWith(\"_\"))continue;const i=this[t];void 0===i||!tc(i)&&\"boolean\"!=typeof i&&\"metadata\"!==t||(e[t]=i)}const i=Object.assign({},Kl.defaults);if(this.constructor.defaults)for(let e of Object.keys(this.constructor.defaults))i[e]=this.constructor.defaults[e];for(let t of Object.keys(i))void 0!==this[t]&&i[t]!==this[t]&&(e[t]=this[t]);return!this.autoscale&&this.dataRange&&(e.min=this.dataRange.min,e.max=this.dataRange.max),this.autoscaleGroup&&(e.autoscaleGroup=this.autoscaleGroup),e}get supportsWholeGenome(){return!0===this.config.supportsWholeGenome}hasSamples(){return!1}getGenomeId(){return this.browser.genome?this.browser.genome.id:void 0}setTrackProperties(e){if(this.disposed)return;const t={};let i;for(let n of Object.keys(e))switch(n.toLowerCase()){case\"usescore\":t.useScore=1===e[n]||\"1\"===e[n]||\"on\"===e[n]||!0===e[n];break;case\"visibility\":switch(e[n]){case\"2\":case\"3\":case\"pack\":case\"full\":t.displayMode=\"EXPANDED\";break;case\"4\":case\"squish\":t.displayMode=\"SQUISHED\";break;case\"1\":case\"dense\":t.displayMode=\"COLLAPSED\"}break;case\"color\":case\"altcolor\":t[n]=e[n].startsWith(\"rgb(\")?e[n]:\"rgb(\"+e[n]+\")\";break;case\"featurevisiblitywindow\":case\"visibilitywindow\":t.visibilityWindow=Number.parseInt(e[n]);break;case\"maxheightpixels\":i=e[n].split(\":\"),3===i.length&&(t.minHeight=Number.parseInt(i[2]),t.height=Number.parseInt(i[1]),t.maxHeight=Number.parseInt(i[0]));break;case\"viewlimits\":if(!this.config.autoscale&&!this.config.max){i=e[n].split(\":\");let r,s=0;1==i.length?r=Number(i[0]):2==i.length&&(s=Number(i[0]),r=Number(i[1])),Number.isNaN(r)||Number.isNaN(s)?console.warn(`Unexpected viewLimits value in track line: ${e.viewLimits}`):(t.autoscale=!1,t.dataRange={min:s,max:r},this.viewLimitMin=s,this.viewLimitMax=r)}case\"name\":t[n]=e[n];break;case\"url\":t.infoURL=e[n];break;case\"type\":const r=e[n];Xl.has(r)?t[n]=Xl.get(r):t[n]=r;break;case\"graphtype\":t.graphType=e[n];break;default:t[n]=e[n]}for(let e of Object.keys(t))if(!this.config.hasOwnProperty(e)||\"name\"===e&&this.config._derivedName){let i=t[e];if(\"true\"===i&&(i=!0),\"false\"===i&&(i=!1),this[e]=i,\"height\"===e&&this.trackView)try{const e=Number.parseInt(i);this.trackView.setTrackHeight(e)}catch(e){console.error(e)}}}clickedFeatures(e){const t=e.viewport.cachedFeatures;if(!t||!Array.isArray(t)||0===t.length)return[];const i=e.genomicLocation,n=e.referenceFrame.bpPerPixel>.2?3*e.referenceFrame.bpPerPixel:.2;return to(t,i-n,i+n)}extractPopupData(e,t){const i=new Set([\"row\",\"color\",\"chr\",\"start\",\"end\",\"cdStart\",\"cdEnd\",\"strand\",\"alpha\"]),n=[];let r,s;for(let t in e)if(e.hasOwnProperty(t)&&!i.has(t)&&tc(e[t])){let i=e[t];n.push({name:Lt(t),value:i}),\"alleles\"===t?r=e[t]:\"alleleFreqs\"===t&&(s=e[t])}if(r&&s){r.endsWith(\",\")&&(r=r.substr(0,r.length-1)),s.endsWith(\",\")&&(s=s.substr(0,s.length-1));let i=r.split(\",\"),o=s.split(\",\");if(o.length>1){let r=[];for(let e=0;e=0;i--){let o=r[i].a;if(1===o.length){t||(t=this.getGenomeId());const i=Kl.getCravatLink(e.chr,e.start+1,s,o,t);console.log(i),i&&(n.push(\"
\"),n.push({html:i}),n.push(\"
\"))}}}}if(e.attributes)for(let t of Object.keys(e.attributes))n.push({name:t,value:e.attributes[t]});let o=`${e.chr}:${Dt(e.start+1)}-${Dt(e.end)}`;return e.strand&&(o+=` (${e.strand})`),n.push({name:\"Location\",value:o}),n}description(){const e=(e,t)=>`
${e}: ${t}
`;let t='
';if(this.url?Ht(this.url)?t+=e(\"Filename\",this.url.name):t+=e(\"URL\",this.url):t=this.name,this.config){if(this.config.metadata)for(let i of Object.keys(this.config.metadata)){t+=e(i,this.config.metadata[i])}for(let i of Object.keys(this.config)){if(i.startsWith(\"_\"))continue;let n=i.substr(0,1);if(n!==n.toLowerCase()){const n=this.config[i];n&&tc(n)&&(t+=e(i,n))}}}return t+=\"
\",t}getColorForFeature(e){return\"function\"==typeof this.color?this.color(feature):this.color}numericDataMenuItems(){const e=[];if(\"heatmap\"!==this.graphType){function t(){this.trackView.track.selected?this.browser.dataRangeDialog.configure(this.trackView.browser.getSelectedTrackViews()):this.browser.dataRangeDialog.configure(this.trackView),this.browser.dataRangeDialog.present(Bt(this.browser.columnContainer))}if(e.push(\"
\"),e.push({label:\"Set data range\",dialog:t}),void 0!==this.logScale){function n(){this.logScale=!this.logScale,this.trackView.repaintViews()}e.push({object:Bt(jl(\"Log scale\",this.logScale)),click:n})}function i(){this.autoscaleGroup=void 0,this.autoscale=!this.autoscale,this.browser.updateViews()}e.push({object:Bt(jl(\"Autoscale\",this.autoscale)),click:i})}return e}setDataRange({min:e,max:t}){this.dataRange={min:e,max:t},this.autoscale=!1,this.autoscaleGroup=void 0,this.trackView.repaintViews()}async nextFeatureAfter(e,t,i){let n=this.trackView.viewports[0].cachedFeatures;if(n&&Array.isArray(n)&&n.length>0){if(this.browser.genome.getChromosomeName(n[0].chr)===e){const e=function(e,t,i=!0){const n=e=>(e.start+e.end)/2,r=i?(e,t)=>e.start-t.start+e.end-t.end:(e,t)=>t.start-e.start+t.end-e.end,s=Array.from(e);s.sort(r);let o=0,a=s.length;for(;o=t?o=e+1:a=e}return s[o]}(n,t,i);if(e)return e}}if(\"function\"==typeof this.featureSource.nextFeature)return this.featureSource.nextFeature(e,t,i,this.visibilityWindow)}dispose(){this.disposed=!0;for(let e of Object.keys(this))this[e]=void 0}static getCravatLink(e,t,i,n,r){if(\"hg38\"===r||\"GRCh38\"===r){return`Cravat ${i}->${n}`}}static localFileInspection(e){const t=Object.assign({},e),i={url:\"file\",indexURL:\"indexFile\"};for(const e of[\"url\",\"indexURL\"])t[e]&&t[e]instanceof File&&(t[i[e]]=t[e].name,delete t[e]);return t}}function Yl(e){if(!this.hoverTextFields)return;const t=this.clickedFeatures(e);if(t&&t.length>0){let e=\"\";for(let i=0;i0&&(e+=\"\\n\"),e=\"\";for(let t of this.hoverTextFields)e.length>0&&(e+=\"\\n\"),n.hasOwnProperty(t)?e+=n[t]:\"function\"==typeof n.getAttribute&&(e+=n.getAttribute(t))}return e}}const Xl=new Map([[\"wiggle_0\",\"wig\"],[\"bed\",\"bed\"],[\"bigBed\",\"bigBed\"],[\"bigWig\",\"bigWig\"]]);class Zl{constructor(e){switch(this.type=e||\"seg\",this.type){case\"mut\":this.sampleColumn=3,this.chrColumn=0,this.startColumn=1,this.endColumn=2,this.dataColumn=4;break;case\"maf\":this.sampleColumn=15,this.chrColumn=4,this.startColumn=5,this.endColumn=6,this.dataColumn=8;break;default:this.sampleColumn=0,this.chrColumn=1,this.startColumn=2,this.endColumn=3}}async parseHeader(e){let t;for(;void 0!==(t=await e.nextLine());)if(!t.startsWith(\"#\")){const e=t.split(\"\\t\");this.header={headings:e};break}return this.header}async parseFeatures(e){const t=[];let i;this.header||(this.header=await this.parseHeader(e)),\"seg\"===this.type&&(this.dataColumn=this.header.headings.length-1),this.header.headings.length>5&&(i=this.extractExtraColumns(this.header.headings));const n=this.header.headings[this.dataColumn];let r;for(;void 0!==(r=await e.nextLine());){const e=r.split(\"\\t\"),s=\"seg\"===this.type?Number(e[this.dataColumn]):e[this.dataColumn];if(e.length>this.dataColumn){const r=new Jl({sample:e[this.sampleColumn],chr:e[this.chrColumn],start:parseInt(e[this.startColumn])-1,end:parseInt(e[this.endColumn]),value:s,valueColumnName:n});if(i){const t=this.extractExtraColumns(e);r.setAttributes({names:i,values:t})}t.push(r)}}return t}extractExtraColumns(e){const t=[];for(let i=0;i=0)return this.attributeValues[t]}}popupData(e,t){const i=new Set([\"chr\",\"start\",\"end\",\"sample\",\"value\",\"row\",\"color\",\"sampleKey\",\"uniqueSampleKey\",\"sampleId\",\"chromosome\",\"uniquePatientKey\"]),n=this.chr+\":\"+Dt(this.start+1)+\"-\"+Dt(this.end),r=[{name:\"Sample\",value:this.sample},{name:\"Location\",value:n},{name:this.valueColumnName?Lt(this.valueColumnName):\"Value\",value:this.value}];if(\"mut\"===e&&\"hg38\"===t){const e=this.extractCravatLink(t);e&&(r.push(\"
\"),r.push({html:e}),r.push(\"
\"))}if(this.attributeNames&&this.attributeNames.length>0)for(let e=0;e0)for(let n=0;n\"===t||\"<*>\"===t||\".\"===t)return\"NONVARIANT\";{const e=t.split(\",\").map((function(e){return 1===i&&1===e.length?\"SNP\":\"\"===e?\"NONVARIANT\":e.length>i&&sh(e)?\"INSERTION\":e.lengthe.length>0));this.alleles=[],this.start=void 0,this.end=void 0;for(let t of i)if(this.alleles.push(t),\"SV\"!==this.type&&sh(t)){let i=t.length,n=e.length;const r=Math.min(i,n);let s=0;for(;s0&&n>0;){const r=s+i-1,o=s+n-1;if(t.charCodeAt(r)!==e.charCodeAt(o))break;i--,n--}for(;i>0&&n>0;){const r=s,o=s;if(t.charCodeAt(r)!==e.charCodeAt(o))break;s++,i--,n--}const o=this.pos+s-1,a=o+n;this.start=void 0===this.start?o:Math.min(this.start,o),this.end=void 0===this.end?a:Math.max(this.end,a)}void 0===this.start&&(this.start=this.pos-1,this.end=this.pos),this.start===this.end&&(this.start-=.5,this.end+=.5)}}popupData(e,t){const i=`${Dt(this.pos)}`,n=this.start===this.end?`${Dt(this.start)} | ${Dt(this.start+1)}`:`${Dt(this.start+1)}-${Dt(this.end)}`,r=[{name:\"Chr\",value:this.chr},{name:\"Pos\",value:i},{name:\"Loc\",value:n},{name:\"ID\",value:this.names?this.names:\"\"},{name:\"Ref\",value:this.referenceBases},{name:\"Alt\",value:this.alternateBases.replace(\"<\",\"<\")},{name:\"Qual\",value:this.quality},{name:\"Filter\",value:this.filter}];if(this.type&&r.push({name:\"Type\",value:this.type}),\"SNP\"===this.type){let e=this.referenceBases;if(1===e.length){let i=this.alternateBases.split(\",\");for(let n of i)if(1===n.length){let i=Kl.getCravatLink(this.chr,this.pos,e,n,t);i&&(r.push(\"
\"),r.push({html:i}))}}}const s=Object.keys(this.info);if(this.info&&s.length>0){r.push({html:'
'});for(let e of s)r.push({name:e,value:oh(decodeURIComponent(this.info[e]))})}return r}getInfo(e){return this.info?this.info[e]:void 0}isRefBlock(){return\"NONVARIANT\"===this.type}isFiltered(){return!(\".\"===this.filter||\"PASS\"===this.filter)}alleleFreq(){return this.info?this.info.AF:void 0}}class ih{constructor(e){this.mate=e,this.chr=e.info.CHR2,this.pos=Number.parseInt(e.info.END),this.start=this.pos-1,this.end=this.pos}get info(){return this.mate.info}get names(){return this.mate.names}get referenceBases(){return this.mate.referenceBases}get alternateBases(){return this.mate.alternateBases}get quality(){return this.mate.quality}get filter(){return this.mate.filter}get calls(){return this.mate.calls}getAttributeValue(e){return this.mate.getAttributeValue(e)}getInfo(e){this.mate.getInfo(e)}isFiltered(){return this.mate.isFiltered()}alleleFreq(){return this.mate.alleleFreq()}popupData(e,t){const i=[];return i.push(\"SV Breakpoint\"),i.push({name:\"Chr\",value:this.chr}),i.push({name:\"Pos\",value:`${Dt(this.pos)}`}),i.push({html:'
'}),i.push(\"SV\"),i.push(...this.mate.popupData(e,t)),i}}class nh{constructor({formatFields:e,sample:t,token:i}){this.info={},this.sample=t;const n=i.split(\":\");for(let t=0;t\");for(let e of r)i.push({name:e,value:decodeURIComponent(this.info[e])});return i}}const rh=new Set([\"A\",\"C\",\"T\",\"G\"].map((e=>e.charCodeAt(0))));function sh(e){for(let t=0;t\");if(!(t>2&&o>0)){console.log(\"Malformed VCF header line: \"+n);continue}const a=n.substring(2,t-1);i[a]||(i[a]={});const c=Tt(n.substring(t+1,o-1),\",\");for(let t of c){var r=t.split(\"=\");r.length>1&&(\"ID\"===r[0]?e=r[1]:s[r[0]]=r[1])}e&&(i[a][e]=s)}else if(n.startsWith(\"##contig\")&&t){const e=n.indexOf(\"\",e));const s=n.substring(e+4,r),o=t.getChromosomeName(s);i.chrAliasTable.set(o,s)}}else if(n.startsWith(\"#CHROM\")){const e=n.split(\"\\t\");if(e.length>8){i.sampleNameMap=new Map;for(let t=9;t9){const r=ch(e[8].split(\":\"));n.calls=[];for(let t=9;t{const t=e.indexOf(\"E\");if(t>0){if(Number.parseInt(e.substring(t+1))0||0==i.length||i.indexOf(\"x\")>0)continue;const s=e[this.chrCol],o=r(e[this.valueCol]),a=parseInt(i)-1,c=a+1;t.push(new dh({chr:s,start:a,end:c,value:o,line:n,columns:this.columns}))}}return t}static isGWAS(e){const t=e.split(\"\\t\");if(t.length<5)return!1;const i=[[\"chr\",\"chromosome\",\"chr_id\",\"chrom\"],[\"bp\",\"pos\",\"position\",\"chr_pos\",\"chromEnd\"],[\"p\",\"pval\",\"p-value\",\"p.value\"]];for(let e of i)if(!t.some((t=>e.includes(t.toLowerCase()))))return!1;return!0}}class dh{constructor({chr:e,start:t,end:i,value:n,line:r,columns:s}){this.chr=e,this.start=t,this.end=i,this.value=n,this.line=r,this.columns=s}popupData(){const e=this.line.split(/\\t/);return this.columns.map((function(t,i){return{name:t,value:e[i]}}))}getAttribute(e){const t=this.line.split(/\\t/);for(let i=0;i0?n=e:n?(r.push(n+e),n=void 0):r.push(e));for(let e of r){if(!e)return;var s=e.split(\"=\",2);if(2===s.length){const e=s[0].trim(),i=s[1].trim();t[e]=i}}return t}function bh(e){let t={},i=e.split(/\\s+/);if(2===i.length){i[1].split(\";\").forEach((function(e){let i=e.split(\"=\");\"color\"===i[0]?t.colorColumn=Number.parseInt(i[1])-1:\"thickness\"===i[0]&&(t.thicknessColumn=Number.parseInt(i[1])-1)}))}return t}function Fh(e,t){var i,n,r=e.columns;this.aed=e,this.allColumns=t,this.chr=null,this.start=null,this.end=null,this.score=1e3,this.strand=\".\",this.cdStart=null,this.cdEnd=null,this.name=null,this.color=null;for(let e=0;e0)for(let e=0;ee.maxv.isGreaterThan(t))));const i=[];let n;for(let t of e)n&&Ah(n,t)?t.maxv.isGreaterThan(n.maxv)&&(n.maxv=t.maxv):(i.push(t),n=t);return i}function Ah(e,t){const i=t.minv.block-e.maxv.block;return t.maxv.block-e.minv.block<5e6&&i<65e3}Fh.prototype.popupData=function(){for(var e=[],t=this.aed,i=0;i=28){t.getInt(),t.getInt(),t.getInt(),t.getInt(),t.getInt(),t.getInt();const e=t.getInt(),i=t.position+e;let r=0;for(;t.positions)t.getInt(),t.getVPointer(),t.getVPointer(),t.getLong(),t.getLong();else{i[e]=[];const n=t.getInt();for(let s=0;sr&&(r=s.block),i[e].push([n,s]))}}}o>0&&(this.indices[e]={binIndex:i,loffset:n})}this.lastBlockPosition=r}get sequenceNames(){return Object.keys(this.sequenceIndexMap)}chunksForRange(e,t,i){const n=this.indices[e];if(n){const e=this.reg2bins(t,i);if(0==e.length)return[];const r=[];for(let t of e)for(let e=t[0];e<=t[1];e++)if(n.binIndex[e]){const t=n.binIndex[e];for(let i of t){const t=i[0],n=i[1];r.push({minv:t,maxv:n,bin:e})}}let s=e[this.depth][0];do{if(n.binIndex[s])break;s>1+(this.getParentBin(s)<<3)?s--:s=this.getParentBin(s)}while(0!=s);return yh(r,n.loffset[s])}return[]}getParentBin(e){return 0==e?0:e-1>>3}reg2bins(e,t){(e-=1)<1&&(e=1),t>2**34&&(t=2**34),t-=1;let i=0,n=0,r=this.minShift+3*this.depth;const s=[];for(;i<=this.depth;r-=3,n+=1<<3*i,i+=1){const i=n+(e>>r),o=n+(t>>r);s.push([i,o])}return s}bin_limit(){return((1<<3*(this.depth+1))-1)/7}}class _h{constructor(){}async parse(e,t){const i=[];let n=Number.MAX_SAFE_INTEGER,r=0;const s=new Dc(new DataView(e)),o=s.getInt(),a={};if(!(21578050===o||t&&21578324===o))throw new Error(indexURL+\" is not a \"+(t?\"tabix\":\"bai\")+\" file\");{const e=s.getInt();if(t){s.getInt(),s.getInt(),s.getInt(),s.getInt(),s.getInt(),s.getInt(),s.getInt();for(let t=0;tr&&(r=o.block),e[t].push([i,o]))}}}const c=s.getInt();for(let e=0;e0&&(i[t]={binIndex:e,linearIndex:o})}this.firstBlockPosition=n,this.lastBlockPosition=r,this.indices=i,this.sequenceIndexMap=a,this.tabix=t}}get sequenceNames(){return Object.keys(this.sequenceIndexMap)}chunksForRange(e,t,i){const n=this.indices[e];if(n){const e=function(e,t){const i=[];t>=1<<29&&(t=1<<29);return--t,i.push([0,0]),i.push([1+(e>>26),1+(t>>26)]),i.push([9+(e>>23),9+(t>>23)]),i.push([73+(e>>20),73+(t>>20)]),i.push([585+(e>>17),585+(t>>17)]),i.push([4681+(e>>14),4681+(t>>14)]),i}(t,i),r=[];for(let t of e)for(let e=t[0];e<=t[1];e++)if(n.binIndex[e]){const t=n.binIndex[e];for(let e of t){const t=e[0],i=e[1];r.push({minv:t,maxv:i})}}const s=n.linearIndex.length;let o;const a=Math.min(t>>14,s-1),c=Math.min(i>>14,s-1);for(let e=a;e<=c;e++){const t=n.linearIndex[e];if(t){o=t;break}}return yh(r,o)}return[]}}class xh{constructor(){this.tribble=!0}async parse(e){let t=0;this.chrIndex={},this.lastBlockPosition=[];const i=new Dc(new DataView(e));!function(e){e.getInt(),e.getInt();const t=e.getInt();if(e.getString(),e.getLong(),e.getLong(),e.getString(),e.getInt(),t>=3){let t=e.getInt();for(;t-- >0;)e.getString(),e.getString()}}(i);let n=i.getInt();for(;n-- >0;){let e=i.getString();const n=i.getInt(),r=i.getInt(),s=i.getInt();i.getInt(),i.getInt();let o=i.getLong();const a=[];for(let e=0;et&&(t=e)}this.chrIndex[e]={chr:e,blocks:a,longestFeature:s,binWidth:n}}this.lastBlockPosition=t}get sequenceNames(){return Object.keys(this.chrIndex)}chunksForRange(e,t,i){const n=this.chrIndex[e];if(n){const e=n.blocks,r=n.longestFeature,s=n.binWidth,o=Math.max(t-r,0),a=Math.floor(o/s);if(a>=e.length)return[];{const t=Math.min(Math.floor((i-1)/s),e.length-1),n=e[a].min,r=e[t].max;if(0===r-n)return[];return[{minv:{block:n,offset:0},maxv:{block:r,offset:0}}]}}}}async function kh(e,t){let i=await Vs.loadArrayBuffer(e,ic(t)),n=new DataView(i);if(31===n.getUint8(0)&&139===n.getUint8(1)){i=gs(i).buffer,n=new DataView(i)}switch(n.getInt32(0,!0)){case 21578050:return async function(e){const t=new _h;return await t.parse(e,!1),t}(i);case 21578324:return async function(e){const t=new _h;return await t.parse(e,!0),t}(i);case 21582659:return async function(e){const t=new Ch;return t.parse(e),t}(i);case 1480870228:return async function(e){const t=new xh;return t.parse(e),t}(i);case 38359875:throw Error(\"CSI version 2 is not supported.\");default:throw Error(`Unrecognized index type: ${e}`)}}function Ih(e){return\"string\"==typeof e||e instanceof String?new Sh(e):new Eh(e)}class Sh{constructor(e){this.data=e,this.ptr=0}nextLine(){var e=this.ptr,t=this.data.indexOf(\"\\n\",e),i=this.data;if(t>0)return this.ptr=t+1,t>e&&\"\\r\"===i.charAt(t-1)?i.substring(e,t-1):i.substring(e,t);var n=i.length;return this.ptr=n,e>=n?void 0:i.substring(e)}}class Eh{constructor(e){this.data=e,this.length=this.data.length,this.ptr=0}nextLine(){if(this.ptr>=this.data.length)return;let e=this.ptr;const t=this.data;let i=\"\",n=!1;for(;e0)for(var a=0;a{const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 1+(t[17]<<8|t[16])};class Mh{constructor(e){this.config=e,this.cacheBlocks=0!=e.cacheBlocks,this.cache=void 0}async getData(e,t){const i=e.block,n=t.block,r=0===t.offset,s=await this.getInflatedBlocks(i,n,r);if(1===s.length)return s[0];let o=0;for(const e of s)o+=e.byteLength;const a=new Uint8Array(o);let c=0;for(const e of s)a.set(e,c),c+=e.byteLength;return a}async getInflatedBlocks(e,t,i){if(this.cacheBlocks){const n=this.cache;if(n&&n.startBlock<=e&&(n.endBlock>=t||i&&n.nextEndBlock===t)){const i=e-n.startBlock,r=t-n.startBlock;return Rh(n.buffer,i,r)}{let r;if(!n||n.startBlock>t||n.endBlock=n.endBlock)o=n.buffer;else{const i=Math.max(0,e-n.startBlock);let r;if(t>=n.endBlock)r=n.buffer.byteLength;else{const e=Dh(n.buffer);for(let i=0;in.endBlock){const e=await this.loadBLockData(n.endBlock,t,{skipStart:!0,skipEnd:i});s.push(e)}r=function(e){if(1===e.length)return e[0];let t=0;for(const i of e)t+=i.byteLength;const i=new Uint8Array(t);let n=0;for(const t of e)i.set(new Uint8Array(t),n),n+=t.byteLength;return i.buffer}(s)}let s=t;if(i){const e=Dh(r);t=e[e.length-1]}return this.cache={startBlock:e,endBlock:t,nextEndBlock:s,buffer:r},Rh(r)}}return Rh(await this.loadBLockData(e,t,{skipEnd:i}))}async loadBLockData(e,t,i){const n=this.config,r=i&&i.skipStart;let s=0;if(!(i&&i.skipEnd)){const e=ic(n,{range:{start:t,size:26}}),i=await Vs.loadArrayBuffer(n.url,e);s=Bh(i)}if(r){const t=ic(n,{range:{start:e,size:26}}),i=await Vs.loadArrayBuffer(n.url,t);e+=Bh(i)}const o=ic(n,{range:{start:e,size:t+s-e}});return Vs.loadArrayBuffer(n.url,o)}}function Dh(e){const t=e.byteLength;let i=0;const n=[0];for(;i{const t=e.indexOf(\"E\");if(t>0){if(Number.parseInt(e.substring(t+1))0||0==i.length||i.indexOf(\"x\")>0)continue;const n=e[this.chrColumn],s=r(e[this.pValueColumn]),o=parseInt(i)-1,a=o+1,c=e[this.snpColumn],l=e[this.phenotypeColumn],h=new zh({chr:n,start:o,end:a,pValue:s,snp:c,phenotype:l},this.columns,e);t.push(h)}}return t}static isQTL(e){const t=e.split(\"\\t\");if(t.length<5)return!1;const i=[[\"chr\",\"chromosome\",\"chr_id\",\"chrom\"],[\"bp\",\"pos\",\"position\",\"chr_pos\",\"chromEnd\"],[\"p\",\"pval\",\"p-value\",\"p.value\"],[\"rsid\",\"variant\",\"snp\"],[\"phenotype\",\"gene\",\"gene_id\",\"molecular_trait_id\"]];for(let e of i)if(!t.some((t=>e.includes(t.toLowerCase()))))return!1;return!0}}class zh{constructor({chr:e,start:t,end:i,pValue:n,snp:r,phenotype:s},o,a){this.chr=e,this.start=t,this.end=i,this.pValue=n,this.snp=r,this.phenotype=s,this.headers=o,this.tokens=a}popupData(){const e=[];for(let t=0;te.blocks)).map((e=>e.max)).reduce(((e,t)=>Math.min(e,t)),Number.MAX_SAFE_INTEGER),n=ic(this.config,{bgz:e.tabix,range:{start:0,size:i}});t=Ih(await Vs.loadString(this.config.url,n))}return this.header=await this.parser.parseHeader(t),this.header}if(\"service\"!==this.config.sourceType){let e;if(this.config._filecontents)e=this.config._filecontents,delete this.config._filecontents;else{const t=ic(this.config);e=await Vs.loadByteArray(this.config.url,t)}e.length<5e8&&(e=(new TextDecoder).decode(e));let t=Ih(e);this.header=await this.parser.parseHeader(t),t=Ih(e),this.features=await this.parser.parseFeatures(t),this.sequenceNames=new Set;for(let e of this.features)this.sequenceNames.add(e.chr);return this.header}if(this.config.seqnamesURL){const e=ic(this.config,{}),t=await Vs.loadString(this.config.seqnamesURL,e);t&&(this.sequenceNames=new Set(t.split(\",\").map((e=>e.trim())).filter((e=>e))))}if(this.config.headerURL){const e=ic(this.config,{}),t=Ih(await Vs.loadString(this.config.headerURL,e));return this.header=await this.parser.parseHeader(t),this.header}}getParser(e){switch(e.format){case\"vcf\":return new ah(e);case\"seg\":return new Zl(\"seg\");case\"mut\":return new Zl(\"mut\");case\"maf\":return new Zl(\"maf\");case\"gwas\":return new hh(e);case\"qtl\":return new Lh(e);case\"aed\":return new ph(e);default:return new Ol(e)}}async loadFeaturesNoIndex(){if(this.features){const e=this.features;return delete this.features,e}{const e=ic(this.config),t=await Vs.loadByteArray(this.config.url,e);if(!this.header){const e=Ih(t);this.header=await this.parser.parseHeader(e)}const i=Ih(t),n=[];return await this._parse(n,i),n}}async loadFeaturesWithIndex(e,t,i){const n=this.config;this.parser;const r=this.index.tabix,s=r?this.index.sequenceIndexMap[e]:e;if(void 0===s)return[];const o=this.index.chunksForRange(s,t,i);if(o&&0!==o.length){const s=[];for(let a of o){let o;if(r)o=await this._blockLoader.getData(a.minv,a.maxv);else{const e=ic(n,{range:{start:a.minv.block,size:a.maxv.block-a.minv.block+1}});o=await Vs.loadString(n.url,e)}const c=Ih(a.minv.offset?o.slice(a.minv.offset):o);await this._parse(s,c,e,i,t)}return s}return[]}async loadFeaturesFromService(e,t,i){let n;n=\"function\"==typeof this.config.url?this.config.url({chr:e,start:t,end:i}):this.config.url.replace(\"$CHR\",e).replace(\"$START\",t).replace(\"$END\",i);const r=ic(this.config),s=Ih(await Vs.loadString(n,r)),o=[];return await this._parse(o,s),o}async _parse(e,t,i,n,r){let s=await this.parser.parseFeatures(t);if(s.sort((function(e,t){return e.chr===t.chr?e.start-t.start:e.chr.localeCompare(t.chr)})),void 0===i)for(let t of s)e.push(t);else{let t=!1;for(let o=0;on){e.push(a);break}a.end>=r&&a.start<=n&&(t||(t=!0,o>0&&e.push(s[o-1])),e.push(a))}}}}async getIndex(){return this.index?this.index:this.config.indexURL?(this.index=await this.loadIndex(),this.index):void 0}async loadIndex(){return kh(this.config.indexURL,this.config)}async loadFeaturesFromDataURI(){if(this.features){const e=this.features;return delete this.features,e}{const e=vs(this.dataURI);let t=Ih(e);this.header=await this.parser.parseHeader(t),this.header instanceof String&&this.header.startsWith(\"##gff-version 3\")&&(this.format=\"gff3\"),t=Ih(e);const i=[];return await this._parse(i,t),i}}}const Ph=Mt;class Oh{constructor(e){this.config=e}async readFeatures(e,t,i){let n;n=\"function\"==typeof this.config.url?this.config.url({chr:e,start:t,end:i}):this.config.url.replace(\"$CHR\",e).replace(\"$START\",t).replace(\"$END\",i);let r,s=Object.assign({},this.config);void 0!==this.config.body&&(\"function\"==typeof this.config.body?s.body=this.config.body({chr:e,start:t,end:i}):s.body=this.config.body.replace(\"$CHR\",e).replace(\"$START\",t).replace(\"$END\",i));const o=await Vs.load(n,s);if(o&&(r=\"function\"==typeof this.config.parser?this.config.parser(o):Ph(o)?JSON.parse(o):o),this.config.mappings){let e=Object.keys(this.config.mappings);for(let t of r)for(let i of e)t[i]=t[this.config.mappings[i]]}return r}}const Uh=function(e,t){this.config=e,this.genome=t,this.expandQueryInterval=!1};Uh.prototype.readFeatures=function(e,t,i){const n=Math.max(0,Math.floor(t));let r=Math.ceil(i);if(this.genome){const t=this.genome.getChromosome(e);t&&r>t.bpLength&&(r=t.bpLength)}const s=this.config.url+\"?db=\"+this.config.db+\"&table=\"+this.config.tableName+\"&chr=\"+e+\"&start=\"+n+\"&end=\"+r;return Vs.loadJson(s,this.config).then((function(e){return e?(e.forEach((function(e){e.hasOwnProperty(\"exonStarts\")&&e.hasOwnProperty(\"exonEnds\")&&e.hasOwnProperty(\"exonCount\")&&e.hasOwnProperty(\"cdsStart\")&&e.hasOwnProperty(\"cdsEnd\")&&function(e){var t,i,n,r,s,o;t=e.exonCount,i=e.exonStarts.split(\",\"),n=e.exonEnds.split(\",\"),r=[];for(var a=0;ao||e.cdsEnd=s&&e.cdsStart<=o&&(c.cdStart=e.cdsStart),e.cdsEnd>=s&&e.cdsEnd<=o&&(c.cdEnd=e.cdsEnd),r.push(c)}e.exons=r}(e)})),e):null}))};class qh{featureCaches=[];gtexChrs=new Set([\"chr1\",\"chr10\",\"chr11\",\"chr12\",\"chr13\",\"chr14\",\"chr15\",\"chr16\",\"chr17\",\"chr18\",\"chr19\",\"chr2\",\"chr20\",\"chr21\",\"chr22\",\"chr3\",\"chr4\",\"chr5\",\"chr6\",\"chr7\",\"chr8\",\"chr9\",\"chrM\",\"chrX\",\"chrY\"]);constructor(e){this.config=e,this.url=e.url,this.tissueId=e.tissueSiteDetailId,this.datasetId=e.datasetId||\"gtex_v8\"}async readFeatures(e,t,i){const n=e.startsWith(\"chr\")?e:\"MT\"===e?\"chrM\":\"chr\"+e;if(!this.gtexChrs.has(n))return[];const r=Math.floor(t),s=Math.ceil(i),o=this.datasetId,a=this.url+\"?chromosome=\"+n+\"&start=\"+r+\"&end=\"+s+\"&tissueSiteDetailId=\"+this.tissueId+\"&datasetId=\"+o,c=await Vs.loadJson(a,{withCredentials:this.config.withCredentials});return c&&c.singleTissueEqtl?c.singleTissueEqtl.map((e=>new Vh(e))):[]}}class Vh{constructor(e){this.chr=e.chromosome,this.start=e.pos-1,this.end=this.start+1,this.snp=e.snpId,this.phenotype=e.geneSymbol,this.pValue=e.pValue,this.json=e}popupData(){return Object.keys(this.json).map((e=>({name:e,value:this.json[e]})))}}class Qh{constructor(e,t){if(this.config=e,this.genome=t,!e.format)throw Error('Format is required, and must be either \"bam\" or \"cram\"');if(this.format=e.format.toUpperCase(),\"BAM\"!==this.format&&\"VCF\"!==this.format)throw Error(`htsget format ${e.format} is not supported`)}async readHeaderData(){const e=`${jh(this.config)}?class=header&format=${this.format}`,t=await Vs.loadJson(e,ic(this.config));return await this.loadUrls(t.htsget.urls)}async readData(e,t,i){const n=`${jh(this.config)}?format=${this.format}&referenceName=${e}&start=${Math.floor(t)}&end=${Math.ceil(i)}`,r=await Vs.loadJson(n,ic(this.config));return this.loadUrls(r.htsget.urls)}async loadUrls(e){const t=[];for(let i of e)if(i.url.startsWith(\"data:\"))t.push(Promise.resolve(Wh(i.url)));else{const e={headers:i.headers||{}};t.push(Vs.loadArrayBuffer(i.url,e))}return function(e){let t=0;for(let i of e)t+=i.byteLength;let i=0;const n=new Uint8Array(t);for(let t of e){const e=new Uint8Array(t);n.set(e,i),i+=e.length}return n}(await Promise.all(t))}static async inferFormat(e){try{const t=jh(e),i=`${t}${t.includes(\"?\")?\"&\":\"?\"}class=header`,n=await Vs.loadJson(i,ic(e));if(n.htsget){const t=n.htsget.format;if(\"BAM\"!==t&&\"VCF\"!==t)throw Error(`htsget format ${t} is not supported`);e.format=t.toLowerCase(),e.sourceType=\"htsget\",e.name||(e.name=await oc(e.url))}}catch(e){}}}function jh(e){if(e.url&&e.endpoint&&e.id)return e.url+e.endpoint+e.id;if(e.endpoint&&e.id)return e.endpoint+e.id;if(e.url)return e.url.startsWith(\"htsget://\")?e.url.replace(\"htsget://\",\"https://\"):e.url;throw Error(\"Must specify either 'url', or 'endpoint' and 'id\")}function Wh(e){const t=e.split(\",\"),i=t[0].split(\":\")[1];let n=t[1];n=i.indexOf(\"base64\")>=0?atob(n):decodeURI(n);const r=new Uint8Array(n.length);for(var s=0;s\"start\"!==e&&\"end\"!==e)).map((e=>t[e])).filter((e=>this.sequenceNames.has(e)));n.length>0&&(i=n[0]),this.chrAliasTable.set(e,i)}else this.chrAliasTable.set(e,void 0)}return this.chrAliasTable.get(e)}}class Kh{constructor(e){this.genome=e}async nextFeature(e,t,i,n){let r=this.genome.chromosomeNames||[e],s=r.indexOf(e);if(s<0)return;const o=Math.min(1e4,n||1e4);let a=i?t:Math.max(t-o,0);for(;s=0;){e=r[s];const c=this.genome.getChromosome(e).bpLength;for(;a=0;){let r=i?a+o:Math.min(t,a+o);const s=await this.getFeatures({chr:e,start:a,end:r,visibilityWindow:n});if(s){const e=(e,t)=>e.start-t.start+e.end-t.end,n=Array.from(s);n.sort(e);let r=i?0:n.length-1;for(;r>=0&&rt)return e;r++}else{if(s=0;){e=r[s];const c=this.genome.getChromosome(e).bpLength;for(;a=0;){let r=Math.min(t,a+o);const s=await this.getFeatures({chr:e,start:a,end:r,visibilityWindow:n});if(s){const e=(e,t)=>e.start-t.start+e.end-t.end,n=Array.from(s);n.sort(e);let r=i?0:n.length-1;for(;r>=0&&rt)return e;r++}else{if(s=2){let e=t.getInt();for(this.windowFunctions=[];e-- >0;)this.windowFunctions.push(t.getString())}this.trackType=t.getString(),this.trackLine=t.getString();let i=t.getInt();for(this.trackNames=[];i-- >0;)this.trackNames.push(t.getString());this.genomeID=t.getString(),this.flags=t.getInt(),this.compressed=!!(1&this.flags),e=await Vs.loadArrayBuffer(this.path,ic(this.config,{range:{start:this.indexPos,size:this.indexSize}})),t=new Dc(new DataView(e)),this.datasetIndex={};let n=t.getInt();for(;n-- >0;){const e=t.getString(),i=t.getLong(),n=t.getInt();this.datasetIndex[e]={position:i,size:n}}for(this.groupIndex={},n=t.getInt();n-- >0;){const e=t.getString(),i=t.getLong(),n=t.getInt();this.groupIndex[e]={position:i,size:n}}return this}async readDataset(e,t,i){const n=e+\"_\"+t+\"_\"+i;if(this.datasetCache[n])return this.datasetCache[n];{await this.readHeader();const r=this.version<2?\"\":\"/\"+t,s=\"all\"===e.toLowerCase()||void 0===i?\"0\":i.toString();let o;o=\"raw\"===t?\"/\"+e+\"/raw\":\"/\"+e+\"/z\"+s+r;const a=this.datasetIndex[o];if(void 0===a)return;const c=await Vs.loadArrayBuffer(this.path,ic(this.config,{range:{start:a.position,size:a.size}}));if(!c)return;const l=new Dc(new DataView(c));let h=l.getInt();const d={};for(;h-- >0;)d[l.getString()]=l.getString();const u=l.getString(),f=l.getFloat();let p=l.getInt();const g=[];for(;p-- >0;)g.push({position:l.getLong(),size:l.getInt()});const m={name:o,attributes:d,dataType:u,tileWidth:f,tiles:g};return this.datasetCache[n]=m,m}}async readRootGroup(){const e=this.genome,t=this.groupCache[\"/\"];if(t)return t;{const t=await this.readGroup(\"/\"),i=t.chromosomes,n=t.maxZoom;n&&(this.maxZoom=Number(n));const r=t.totalCount;r&&(t.totalCount=Number(r));const s={};return i&&i.split(\",\").forEach((function(t){const i=e.getChromosomeName(t);s[i]=t})),this.chrAliasTable=s,this.groupCache[\"/\"]=t,t}}async readGroup(e){const t=this.groupCache[e];if(t)return t;{await this.readHeader();const t=this.groupIndex[e];if(void 0===t)return;const i=await Vs.loadArrayBuffer(this.path,ic(this.config,{range:{start:t.position,size:t.size}}));if(!i)return;const n=new Dc(new DataView(i)),r={name:e};let s=n.getInt();for(;s-- >0;){const e=n.getString(),t=n.getString();r[e]=t}return this.groupCache[e]=r,r}}async readTiles(e,t){if(e.sort((function(e,t){return e.position-t.position})),0===(e=e.filter((function(e){return e.size>0}))).length)return[];const i=[];for(let n of e){const e=await Vs.loadArrayBuffer(this.path,ic(this.config,{range:{start:n.position,size:n.size}}));let r;try{r=this.compressed?ls(e).buffer:e}catch(e){console.error(e);continue}const s=new Dc(new DataView(r)),o=s.getString();let a;switch(o){case\"fixedStep\":a=Xh(s,t);break;case\"variableStep\":a=Zh(s,t);break;case\"bed\":case\"bedWithName\":a=Jh(s,t,o);break;default:throw\"Unknown tile type: \"+o}i.push(a)}return i}async readTile(e,t){let i=await Vs.loadArrayBuffer(this.path,ic(this.config,{range:{start:e.position,size:e.size}}));if(this.compressed){i=ls(i).buffer}const n=new Dc(new DataView(i)),r=n.getString();switch(r){case\"fixedStep\":return Xh(n,t);case\"variableStep\":return Zh(n,t);case\"bed\":case\"bedWithName\":return Jh(n,t,r);default:throw\"Unknown tile type: \"+r}}}function Xh(e,t){const i=e.getInt(),n=e.getInt(),r=e.getFloat(),s=[];let o=t;for(;o-- >0;){let t=i;const n=[];for(;t-- >0;)n.push(e.getFloat());s.push(n)}return{type:\"fixedStep\",start:n,span:r,data:s,nTracks:t,nPositions:i}}function Zh(e,t){const i=e.getInt(),n=e.getFloat(),r=e.getInt(),s=[];let o=r;for(;o-- >0;)s.push(e.getInt());e.getInt();const a=[];let c=t;for(;c-- >0;){o=r;const t=[];for(;o-- >0;)t.push(e.getFloat());a.push(t)}return{type:\"variableStep\",tileStart:i,span:n,start:s,data:a,nTracks:t,nPositions:r}}function Jh(e,t,i){const n=e.getInt();let r=n;const s=[];for(;r-- >0;)s.push(e.getInt());r=n;const o=[];for(;r-- >0;)o.push(e.getInt());e.getInt();const a=[];let c=t;for(;c-- >0;){let t=n;const i=[];for(;t-- >0;)i.push(e.getFloat());a.push(i)}if(\"bedWithName\"===i){r=n;const t=[];for(;r-- >0;)t.push(e.getString())}return{type:i,start:s,end:o,data:a,nTracks:t,nPositions:n}}class ed extends Kh{#h={};searchable=!1;constructor(e,t){super(t),this.genome=t,this.reader=new Yh(e,t),this.queryable=!0}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,windowFunction:r=\"mean\"}){return\"all\"===e.toLowerCase()?this.getWGValues(r,n):this._getFeatures(e,t,i,n,r)}async _getFeatures(e,t,i,n,r){const s=new Ac(e,t,i),o=this.genome;if(!this.rootGroup&&(this.rootGroup=await this.reader.readRootGroup(),!this.normalizationFactor)){const e=this.rootGroup.totalCount;e&&(this.normalizationFactor=1e6/e)}s.bpPerPixel=n;const a=function(e,t,i){var n=i.getChromosome(e).bpLength;return Math.ceil(Math.log(Math.max(0,n/(700*t)))/rd)}(e,n,o);let c=this.reader.chrAliasTable[e],l=this.reader.maxZoom;void 0===c&&(c=e),void 0===l&&(l=-1);const h=a>l?\"raw\":r,d=await this.reader.readDataset(c,h,a);if(null==d)return[];const u=d.tileWidth,f=Math.floor(t/u),p=Math.floor(i/u),g=await this.reader.readTiles(d.tiles.slice(f,p+1),1),m=[];for(let r of g)switch(r.type){case\"bed\":td(r,e,t,i,n,m);break;case\"variableStep\":id(r,e,t,i,n,m);break;case\"fixedStep\":nd(r,e,t,i,n,m);break;default:throw\"Unknown tile type: \"+r.type}return m.sort((function(e,t){return e.start-t.start})),m}get supportsWholeGenome(){return!0}get windowFunctions(){return this.reader.windowFunctions}async getWGValues(e,t){const i=this.#h[e];if(i&&i.bpPerPixel>.8*t&&i.bpPerPixel<1.2*t)return i.values;{const i=[],n=this.genome;if(this.genome.wgChromosomeNames)for(let r of n.wgChromosomeNames){const s=n.getChromosome(r).bpLength;t=s/1e3;const o=await this._getFeatures(r,0,s,t,e);if(o)for(let e of o){const t=Object.assign({},e);t.chr=\"all\",t.start=n.getGenomeCoordinate(e.chr,e.start),t.end=n.getGenomeCoordinate(e.chr,e.end),t._f=e,i.push(t)}}return this.#h[e]={values:i,bpPerPixel:t},i}}}function td(e,t,i,n,r,s){const o=e.nPositions,a=e.start,c=e.end,l=e.data[0];for(let e=0;en)break;s.push({chr:t,start:r,end:o,value:l[e]})}}}function id(e,t,i,n,r,s){const o=e.nPositions,a=e.start,c=e.span,l=e.data[0];for(let e=0;en)break;s.push({chr:t,start:r,end:o,value:l[e]})}}}function nd(e,t,i,n,r,s){const o=e.nPositions;let a=e.start;const c=e.span,l=e.data[0];for(let e=0;en)break;r>=i&&(Number.isNaN(l[e])||s.push({chr:t,start:a,end:r,value:l[e]})),a=r}}var rd=Math.log(2);class sd{constructor(e,t,i,n){this.header=e,this.nameToId=t,this.idToName=i,this.sumLengths=n}static parseTree(e,t,i=!1){{const n=e.getInt(),r=e.getInt(),s=e.getInt(),o=e.getInt(),a=e.getLong(),c=e.getLong(),l={magic:n,blockSize:r,keySize:s,valSize:o,itemCount:a,reserved:c},h=new Map,d=[];let u=0;const f=n=>{n>=0&&(e.position=n);const r=e.getByte();e.getByte();const a=e.getUShort();if(1===r)for(let t=0;t{const a=await this.readNode(o);for(let o of a.items)ad(o,e,t,i,n)&&(1===a.type?r.push(o):await s(o.childOffset))};return await s(this.header.rootNodeOffset),r}async readNode(e){const t=e;if(this.nodeCache.has(t))return this.nodeCache.get(t);let i=await this.#t(e,4);const n=i.getByte(),r=1===n;i.getByte();const s=i.getUShort();let o=s*(r?32:24);i=await this.#t(e+4,o);const a=[];for(let e=0;ee.startChrom||n===e.startChrom&&r>=e.startBase)&&(t!!e)),s=[];for(let e of r){const t=e.split(\" \")[0];if(t.startsWith(i)&&s.push(e),t.slice(0,i.length)>i)break}if(0!==s.length){const e=new Map;for(let t of s){const[i,...n]=t.split(\" \");e.set(i,n.map((e=>e.split(\",\")[0])))}return e}}async getIndex(e){return this.index||(this.index=await this._readIndex()),this.index}async _readIndex(e){return(await Vs.loadString(this.ixxFile)).split(\"\\n\").filter((e=>!!e)).map((e=>{const t=e.length-10,i=e.slice(0,t),n=e.slice(t);return[i,Number.parseInt(n,16)]}))}async _getBuffer(e,t){let i=0,n=65536;const r=await this.getIndex(t);for(let t=0;t0?ls(r):r,a.call(this,new DataView(d.buffer),c,t,l,n,h,this.chromTree.idToName,s,this.littleEndian)}return h.sort((function(e,t){return e.start-t.start})),h}return[]}async#d(e){if(this.chrAliasTable.has(e)&&void 0===(e=this.chrAliasTable.get(e)))return;let t=this.chromTree.nameToId.get(e);if(void 0===t&&this.genome){const i=await this.genome.getAliasRecord(e);let n;if(i){const e=Object.keys(i).filter((e=>\"start\"!==e&&\"end\"!==e)).map((e=>i[e])).filter((e=>this.chromTree.nameToId.has(e)));e.length>0&&(n=e[0],t=this.chromTree.nameToId.get(e[0]))}this.chrAliasTable.set(e,n)}return t}get searchable(){return\"bigbed\"===this.type}async search(e){if(this.header||await this.loadHeader(),!this.header||!this.header.extraIndexCount)return;const t=await this._searchForRegions(e);if(t){const i=await this._loadFeaturesForRange(t.offset,t.length);if(i){const t=i.filter((t=>{for(let i of Object.keys(t)){const n=t[i];if(Mt(n)&&n.toLowerCase()===e.toLowerCase())return!0}return!1}));return t.length>0?t.reduce(((e,t)=>e.end-e.start>t.end-t.start?e:t),i[0]):void 0}}}async _searchForRegions(e){const t=await this.#u();if(t){if(this._trix){const t=e.toLowerCase(),i=await this._trix.search(t);i&&i.has(t)&&(e=i.get(t)[0])}for(let i of t){const t=await i.search(e);if(t)return t}}}async#u(){if(void 0===this._searchTrees&&this.header.extraIndexOffsets&&this.header.extraIndexOffsets.length>0){this._searchTrees=[];for(let e of this.header.extraIndexOffsets){const t=await Tc.loadBpTree(this.path,this.config,e);this._searchTrees.push(t)}}return this._searchTrees}async getZoomHeaders(){return this.zoomLevelHeaders||await this.loadHeader(),this.zoomLevelHeaders}async loadHeader(){if(this.header)return this.header;{let e,t=await this.loader.loadArrayBuffer(this.path,ic(this.config,{range:{start:0,size:64}}));this.littleEndian=!0;const i=new Dc(new DataView(t),this.littleEndian);let n=i.getUInt();if(2291137574===n)this.type=\"bigwig\";else if(2273964779===n)this.type=\"bigbed\";else{this.littleEndian=!1,i.littleEndian=!1,i.position=0;let e=i.getUInt();654085990===e?this.type=\"bigwig\":3958540679===e&&(this.type=\"bigbed\")}e={bwVersion:i.getUShort(),nZoomLevels:i.getUShort(),chromTreeOffset:i.getLong(),fullDataOffset:i.getLong(),fullIndexOffset:i.getLong(),fieldCount:i.getUShort(),definedFieldCount:i.getUShort(),autoSqlOffset:i.getLong(),totalSummaryOffset:i.getLong(),uncompressBuffSize:i.getInt(),extensionOffset:i.getLong()};const r=64;let s={start:r,size:e.totalSummaryOffset>0?e.totalSummaryOffset-r+40:Math.min(e.fullDataOffset,e.chromTreeOffset)-r};t=await this.loader.loadArrayBuffer(this.path,ic(this.config,{range:s}));const o=new Dc(new DataView(t),this.littleEndian),a=e.nZoomLevels;this.zoomLevelHeaders=[],this.firstZoomDataOffset=Number.MAX_SAFE_INTEGER;for(let e=1;e<=a;e++){const t=a-e,i=new hd(t,o);this.firstZoomDataOffset=Math.min(i.dataOffset,this.firstZoomDataOffset),this.zoomLevelHeaders[t]=i}if(e.autoSqlOffset>0){o.position=e.autoSqlOffset-r;const t=o.getString();t&&(this.autoSql=function(e){let t;const i=[];let n=!1;const r=e.trim().split(/\\s*[\\r\\n]+\\s*/g);for(let e of r)if(e=e.trim(),e.length>0){if(e.startsWith(\"#\"))continue;if(e.startsWith(\"table\"))t=e.split(/\\s+/)[1].trim();else if(e.startsWith(\"(\"))n=!0;else if(e.startsWith(\")\"));else if(n){const t=e.indexOf(\";\");if(t>0){const n=e.substr(0,t).split(/\\s+/),r=e.substr(t+1).replace(/\"/g,\"\").trim();i.push({type:n[0],name:n[1],description:r})}}}return{table:t,fields:i}}(t))}e.totalSummaryOffset>0&&(o.position=e.totalSummaryOffset-r,this.totalSummary=new dd(o));const c=Math.min(2e5,Math.max(1e4,e.fullDataOffset-e.chromTreeOffset));if(this.chromTree=await this.#f(e.chromTreeOffset,c),this.chrNames=new Set(this.chromTree.idToName),\"bigbed\"===this.type){const t=await this.#p(e.fullDataOffset);this.featureDensity=t/this.chromTree.sumLengths}return this.header=e,e.extensionOffset>0&&await this.loadExtendedHeader(e.extensionOffset),this.header}}async#p(e){const t=await this.loader.loadArrayBuffer(this.path,ic(this.config,{range:{start:e,size:4}}));return new Dc(new DataView(t),this.littleEndian).getInt()}async#f(e,t){let i=t;const n=async()=>{const t=await this.loader.loadArrayBuffer(this.path,ic(this.config,{range:{start:e,size:i}})),n=new Dc(new DataView(t),this.littleEndian);return sd.parseTree(n,e,this.genome)};let r;for(;i<1e6;)try{return await n()}catch(e){r=e,i*=2}throw r}async loadExtendedHeader(e){let t=await this.loader.loadArrayBuffer(this.path,ic(this.config,{range:{start:e,size:64}})),i=new Dc(new DataView(t),this.littleEndian);i.getUShort();const n=i.getUShort(),r=i.getLong();if(0===n)return;let s=56*n;t=await this.loader.loadArrayBuffer(this.path,ic(this.config,{range:{start:r,size:s}})),i=new Dc(new DataView(t),this.littleEndian);const o=[],a=[],c=[];for(let e=0;e0?ls(n):n,s=[];return pd.call(this).call(this,new DataView(r.buffer),0,0,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,s,this.chromTree.idToName),s}}class hd{constructor(e,t){this.index=e,this.reductionLevel=t.getInt(),this.reserved=t.getInt(),this.dataOffset=t.getLong(),this.indexOffset=t.getLong()}}class dd{constructor(e){e?(this.basesCovered=e.getLong(),this.minVal=e.getDouble(),this.maxVal=e.getDouble(),this.sumData=e.getDouble(),this.sumSquares=e.getDouble(),ud.call(this)):(this.basesCovered=0,this.minVal=0,this.maxVal=0,this.sumData=0,this.sumSquares=0,this.mean=0,this.stddev=0)}}function ud(){let e=this.basesCovered;if(e>0){this.mean=this.sumData/e,this.stddev=Math.sqrt(this.sumSquares/(e-1));let t=this.minVal<0?this.mean-2*this.stddev:0,i=this.maxVal>0?this.mean+2*this.stddev:0;this.defaultRange={min:t,max:i}}}function fd(e,t,i,n,r,s,o,a,c){const l=new Dc(e,c),h=l.getInt(),d=l.getInt();let u=d,f=l.getInt();const p=l.getInt(),g=l.getInt(),m=l.getByte();l.getByte();let w=l.getUShort();if(h>=t&&h<=n){let e=0;for(;w-- >0;){let a;switch(m){case 1:u=l.getInt(),f=l.getInt(),a=l.getFloat();break;case 2:u=l.getInt(),a=l.getFloat(),f=u+g;break;case 3:a=l.getFloat(),u=d+e*p,f=u+g,e++}if(!(hn||h===n&&u>=r)break;if(Number.isFinite(a)){const e=o[h];s.push({chr:e,start:u,end:f,value:a})}}}}}function pd(){const e=function(e,t,i,n){if(\"biginteract\"===n||i&&(\"chromatinInteract\"===i.table||\"interact\"===i.table))return function(e,t){return e.chr1=t[5],e.start1=Number.parseInt(t[6]),e.end1=Number.parseInt(t[7]),e.chr2=t[10],e.start2=Number.parseInt(t[11]),e.end2=Number.parseInt(t[12]),e.name=t[0],e.score=Number(t[1]),e.value=Number(t[2]),e.color=\".\"===t[4]?void 0:\"0\"===t[4]?\"rgb(0,0,0)\":t[4],e};{const n=e-3;return function(r,s){if(n>0&&(r.name=s[0]),n>1&&(r.score=Number(s[1])),n>2&&(r.strand=s[2]),n>3&&(r.cdStart=parseInt(s[3])),n>4&&(r.cdEnd=parseInt(s[4])),n>5&&\".\"!==s[5]&&\"0\"!==s[5]&&\"-1\"!==s[5]){const e=_s.createColorString(s[5]);r.color=e.startsWith(\"rgb\")?e:void 0}if(n>8){const e=parseInt(s[6]),t=s[7].split(\",\"),i=s[8].split(\",\"),n=[];for(let s=0;si?n.utr=!0:(t>=r&&t<=e&&(n.cdStart=t),i>=r&&i<=e&&(n.cdEnd=i))}}(n,r.cdStart,r.cdEnd),r.exons=n}if(i)for(let n=e;n=13;){const t=h.getInt(),c=a[t],l=h.getInt(),d=h.getInt(),u=h.getString();if(!(tr||t===r&&l>=s)break;if(d>0){const t={chr:c,start:l,end:d};o.push(t);const i=u.split(\"\\t\");e(t,i)}}}}}function gd(e,t,i,n,r,s,o,a,c){const l=new Dc(e,c);for(;l.remLength()>=32;){const e=l.getInt(),c=l.getInt(),h=l.getInt(),d=l.getInt(),u=l.getFloat(),f=l.getFloat(),p=l.getFloat();let g;switch(l.getFloat(),a){case\"min\":g=u;break;case\"max\":g=f;break;default:g=0===d?0:p/d}if(!(en||e===n&&c>=r)break;if(Number.isFinite(g)){const t=o[e];s.push({chr:t,start:c,end:h,value:g})}}}}class md{constructor(e){this.data=e}loadArrayBuffer(e,t){const i=t.range;return i?this.data.slice(i.start,i.start+i.size):this.data}async dataViewForRange(e,t){const i=Math.min(this.data.byteLength-e.start,e.size);return t?new Uint8Array(this.data,e.start,i):new DataView(this.data,e.start,i)}}class wd extends Kh{queryable=!0;#h={};windowFunctions=[\"mean\",\"min\",\"max\",\"none\"];constructor(e,t){super(t),this.reader=new ld(e,t),this.genome=t,this.format=e.format||\"bigwig\"}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,windowFunction:r}){await this.reader.loadHeader();const s=\"bigwig\"===this.reader.type;let o;return o=\"all\"===e.toLowerCase()?s?await this.getWGValues(r,n):[]:await this.reader.readFeatures(e,t,e,i,n,r),s||Wl(o),o}async getHeader(){return this.reader.loadHeader()}async defaultVisibilityWindow(){return\"bigwig\"===this.reader.type?-1:this.reader.featureDensity?Math.floor(1e4/this.reader.featureDensity):-1}async getWGValues(e,t){const i=this.genome,n=this.#h[e];if(n&&n.bpPerPixel>.8*t&&n.bpPerPixel<1.2*t)return n.values;{const n=await this.reader.readWGFeatures(t,e);let r=[];for(let e of n){const t=e.chr,n=i.getCumulativeOffset(t);if(void 0===n)continue;const s=Object.assign({},e);s.chr=\"all\",s.start=n+e.start,s.end=n+e.end,s._f=e,r.push(s)}return r.sort(((e,t)=>e.start-t.start)),this.#h[e]={values:r,bpPerPixel:t},r}}supportsWholeGenome(){return\"bigwig\"===this.reader.type}async trackType(){return this.reader.getTrackType()}get searchable(){return this.reader.searchable}async search(e){return this.reader.search(e)}}const bd=.01;function Fd(e,t,i,n){let r=this.axisMin,s=this.axisMax;if(void 0===s&&this.dataRange&&(r=this.dataRange.min||0,s=this.dataRange.max),void 0===s)return;ko.fillRect(e,0,0,t,i,{fillStyle:\"white\"}),n&&ko.fillRect(e,t-4-2,0,4,i,{fillStyle:n});const o=void 0!==this.flipAxis&&this.flipAxis,a=.95*t-8-5,c=.95*t-5,l={font:\"normal 10px Arial\",textAlign:\"right\",fillStyle:\"black\",strokeStyle:\"black\"};ko.strokeLine(e,a,bd*i,c,bd*i,l),ko.fillText(e,d(o?r:s),a+4,bd*i+12,l);const h=.99*i;function d(e){return Number.isInteger(e)||e%1==0?e:Math.abs(e)>=10?e.toFixed():Math.abs(e)>=1?e.toFixed(1):Math.abs(e)>=.1?e.toFixed(2):e.toExponential(1)}ko.strokeLine(e,a,h,c,h,l),ko.fillText(e,d(o?s:r),a+4,h-4,l),ko.strokeLine(e,c,bd*i,c,h,l)}const vd=e=>{switch(e.type){case\"gradient\":return new _d(e);case\"doubleGradient\":case\"diverging\":return new xd(e);default:throw Error(\"Unknown color scale type: \"+e)}},yd=function(e,t){return new _d({type:\"doubleGradient\",min:e,max:t,minColor:\"rgb(46,56,183)\",maxColor:\"rgb(164,0,30)\"})},Ad=function(e,t,i){return new xd({type:\"doubleGradient\",min:0,mid:.25,max:.5,minColor:\"rgb(46,56,183)\",midColor:\"white\",maxColor:\"rgb(164,0,30)\"})};class Cd{constructor(e){this.thresholds=e.thresholds,this.colors=e.colors}getColor(e){for(let t of this.thresholds)if(e=this.max)return this.maxColor;const t=(e-this.min)/(this.max-this.min);return\"rgb(\"+Math.floor(this.lowComponents[0]+t*(this.highComponents[0]-this.lowComponents[0]))+\",\"+Math.floor(this.lowComponents[1]+t*(this.highComponents[1]-this.lowComponents[1]))+\",\"+Math.floor(this.lowComponents[2]+t*(this.highComponents[2]-this.lowComponents[2]))+\")\"}toJson(){return{type:this.type,min:this.min,max:this.max,minColor:this.minColor,maxColor:this.maxColor}}clone(){return new _d(this.toJson())}}class xd{constructor(e){this.type=\"diverging\",this.lowGradientScale=new _d({minColor:e.minColor||e.lowColor,maxColor:e.midColor,min:void 0!==e.min?e.min:e.low,max:e.mid}),this.highGradientScale=new _d({minColor:e.midColor,maxColor:e.maxColor||e.highColor,min:e.mid,max:void 0!==e.max?e.max:e.high})}getColor(e){return e{e.preventDefault(),e.stopPropagation();const t=!this.state;this.selected=t,\"function\"==typeof this.onchange&&this.onchange(t)};this.elem.addEventListener(\"click\",s),this.elem.addEventListener(\"touchend\",s)}set selected(e){this.state=e;this.svg.querySelector(\"path\").setAttributeNS(null,\"fill\",!0===e?\"#444\":\"transparent\")}get selected(){return this.state}onchange(e){this.onchange=e}}function Ed(e,t){const i=e.getContext(\"2d\"),n=e.width,r=(t.max-t.min)/n;for(let s=0;s{r.min=Number.parseFloat(e),Ed(o,r)}});s.append(a.row);const c=new Md({label:\"Mid value\",value:(r.mid||r.min).toString(),onchange:e=>{r.mid=Number.parseFloat(e),Ed(o,r)}});s.append(c.row);const l=new Md({label:\"Max value\",value:r.max.toString(),onchange:e=>{r.max=Number.parseFloat(e),Ed(o,r)}});s.append(l.row);const h=new Dd({label:\"Min color\",value:r.minColor,onchange:e=>{r.minColor=e,Ed(o,r)}});s.append(h.row);const d=new Dd({label:\"Mid color\",value:r.midColor||r.minColor,onchange:e=>{r.midColor=e,Ed(o,r)}});s.append(d.row);const u=new Dd({label:\"Max color\",value:r.maxColor,onchange:e=>{r.maxColor=e,Ed(o,r)}});s.append(u.row);const f=new Sd({selected:\"diverging\"===e.type,label:\"Diverging Scale\",onchange:e=>{e?(r.mid=r.min<0&&r.max>0?0:(r.min+r.max)/2,r.midColor=\"rgb(255,255,255)\",r=new xd(r),c.value=r.mid,c.show(),d.value=r.midColor,d.show(),Ed(o,r)):(r=new _d(r),c.hide(),d.hide(),Ed(o,r))}});f.elem.style.marginBottom=\"20px\",\"diverging\"!==e.type&&(c.hide(),d.hide());const p=document.createElement(\"div\");p.appendChild(f.elem),p.appendChild(s),p.appendChild(o);const g=new w({parent:t,content:{elem:p},okHandler:()=>{i&&i(r)}});t.append(g.elem),n(g.elem),Ed(o,r)}}class Bd{constructor({label:e,value:t,onchange:i}){this.row=document.createElement(\"tr\");const n=document.createElement(\"td\");this.row.appendChild(n);const r=document.createElement(\"div\");r.innerHTML=e,n.appendChild(r)}hide(){this.row.style.display=\"none\"}show(){this.row.style.display=\"table-row\"}}class Md extends Bd{constructor({label:e,value:t,onchange:i}){super({label:e,value:t,onchange:i});const n=document.createElement(\"td\");this.row.appendChild(n),this.input=document.createElement(\"input\"),t=t||\"0\",this.input.value=Na.sanitize(t),n.appendChild(this.input),i&&this.input.addEventListener(\"change\",(e=>i(this.input.value)))}get value(){return this.input.value}set value(e){this.input.value=e}}class Dd extends Bd{constructor({label:e,value:t,onchange:i}){super({label:e,value:t,onchange:i});const n=document.createElement(\"td\");this.row.appendChild(n);const r=document.createElement(\"div\");n.appendChild(r),r.style.width=\"20px\",r.style.height=\"20px\",r.style.border=\"1px solid black\",this.colorButton=r,t=t||\"white\",r.style.background=t;const s=new Wa(r);s.setOptions({alpha:!1,color:t}),s.onDone=e=>{r.style.background=e.rgbString,i&&i(e.rgbString)}}set value(e){this.colorButton.style.background=e}}class Rd extends Kl{static defaultColor=\"rgb(150, 150, 150)\";static defaults={height:50,flipAxis:!1,logScale:!1,windowFunction:\"mean\",graphType:\"bar\",normalize:void 0,scaleFactor:void 0,overflowColor:\"rgb(255, 32, 255)\",baselineColor:\"lightGray\",summarize:!0,visibilityWindow:void 0};constructor(e,t){super(e,t)}init(e){super.init(e),this.type=\"wig\",this.featureType=\"numeric\",this.resolutionAware=!0,this._paintAxis=Fd.bind(this);const t=e.format?e.format.toLowerCase():e.format;e.featureSource?(this.featureSource=e.featureSource,delete e.featureSource):this.featureSource=\"bigwig\"===t?new wd(e,this.browser.genome):\"tdf\"===t?new ed(e,this.browser.genome):Gd(e,this.browser.genome),void 0===e.max||!0===e.autoscale?this.autoscale=!0:this.dataRange={min:e.min||0,max:e.max},e.colorScale&&(this._colorScale=vd(e.colorScale)),\"heatmap\"!==e.graphType||e.height||(this.height=20)}async postInit(){const e=await this.getHeader();this.disposed||(e&&this.setTrackProperties(e),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor)}get supportsWholeGenome(){return!this.config.indexURL&&!1!==this.config.supportsWholeGenome}get paintAxis(){return\"heatmap\"===this.graphType?()=>{}:this._paintAxis}get colorScale(){return this._colorScale}async getFeatures(e,t,i,n){const r=this.windowFunction,s=await this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:this.visibilityWindow,windowFunction:r});if(this.normalize&&this.featureSource.normalizationFactor){const e=this.featureSource.normalizationFactor;for(let t of s)t.value*=e}if(this.scaleFactor){const e=this.scaleFactor;for(let t of s)t.value*=e}return!this.summarize||\"mean\"!==r&&\"min\"!==r&&\"max\"!==r?s:Td(s,t,n,r)}menuItemList(){const e=[];return\"heatmap\"===this.graphType?(e.push(\"
\"),e.push({label:\"Set color scale\",click:function(){Nd.open(this.colorScale,this.browser.columnContainer,(e=>{this._colorScale=e,this.trackView.repaintViews()}))}})):void 0!==this.flipAxis&&(e.push(\"
\"),e.push({label:\"Flip y-axis\",click:function(){this.flipAxis=!this.flipAxis,this.trackView.repaintViews()}})),e.push(...this.graphTypeItems()),this.featureSource.windowFunctions&&e.push(...this.wigSummarizationItems()),e.push(...this.numericDataMenuItems()),e}wigSummarizationItems(){const e=this.featureSource.windowFunctions,t=[];t.push(\"
\"),t.push(\"
Windowing function
\");for(const i of e){const n=Bt(jl(i,this.windowFunction===i));function r(){this.windowFunction=i,this.trackView.updateViews()}t.push({object:n,click:r})}return t}graphTypeItems(){const e=[\"bar\",\"line\",\"points\",\"heatmap\"],t=[];t.push(\"
\"),t.push(\"
Graph type
\");for(const i of e){const n=Bt(jl(i,this.graphType===i));function r(){this.graphType=i,this.trackView.repaintViews()}t.push({object:n,click:r})}return t}async getHeader(){return\"function\"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader()),this.header}getScaleFactor(e,t,i,n){const r=!0===n?e<0?-Math.log10(Math.abs(e)+1):Math.log10(Math.abs(e)+1):e;return i/((!0===n?Math.log10(Math.abs(t)+1):t)-r)}computeYPixelValue(e,t){return(this.flipAxis?e-this.dataRange.min:this.dataRange.max-e)*t}computeYPixelValueInLogScale(e,t){let i=this.dataRange.max,n=this.dataRange.min;return n=n<0?-Math.log10(Math.abs(n)+1):Math.log10(Math.abs(n)+1),i=i<0?-Math.log10(Math.abs(i)+1):Math.log10(Math.abs(i)+1),e=e<0?-Math.log10(Math.abs(e)+1):Math.log10(e+1),(this.flipAxis?e-n:i-e)*t}draw(e){const t=e.features,i=e.context,n=e.bpPerPixel,r=e.bpStart,s=e.pixelWidth,o=e.pixelHeight-1,a=r+s*n+1,c=this.getScaleFactor(this.dataRange.min,this.dataRange.max,o,this.logScale),l=e=>this.logScale?this.computeYPixelValueInLogScale(e,c):this.computeYPixelValue(e,c);if(t&&t.length>0&&(void 0===this.dataRange.min&&(this.dataRange.min=0),this.dataRange.max>this.dataRange.min)){let s,c=-1;const h=l(0);for(let d of t){if(d.enda)break;const t=(d.start-r)/n;if(Number.isNaN(t))continue;let u=l(d.value);const f=(d.end-r)/n-t,p=e.alpha?_s.addAlpha(this.getColorForFeature(d),e.alpha):this.getColorForFeature(d);if(\"line\"===this.graphType)void 0!==s&&ko.strokeLine(i,c,s,t,u,{fillStyle:p,strokeStyle:p}),ko.strokeLine(i,t,u,t+f,u,{fillStyle:p,strokeStyle:p});else if(\"points\"===this.graphType){const e=this.config.pointSize||3,n=t+f/2;ko.fillCircle(i,n,u,e/2,{fillStyle:p,strokeStyle:p}),d.value>this.dataRange.max?ko.fillCircle(i,n,e/2,e/2,3,{fillStyle:this.overflowColor}):d.value0?Ad(this.dataRange.min,0,this.dataRange.max):yd(this.dataRange.min,this.dataRange.max));const e=this._colorScale.getColor(d.value);ko.fillRect(i,t,0,f,o,{fillStyle:e})}else{const e=Math.min(o,u-h);ko.fillRect(i,t,h,f,e,{fillStyle:p}),d.value>this.dataRange.max?ko.fillRect(i,t,0,f,3,{fillStyle:this.overflowColor}):d.value0){const i=e.genomicLocation,n=[];t.sort((function(e,t){return Math.abs((e.start+e.end)/2-i)-Math.abs((t.start+t.end)/2-i)}));const r=t.length>10?t.slice(0,10):t;r.sort((function(e,t){return e.start-t.start}));for(let e of r)if(e){n.length>0&&n.push(\"
\");let t=e.end-e.start==1?Dt(Math.floor(e.start)+1):Dt(Math.floor(e.start)+1)+\"-\"+Dt(Math.floor(e.end));n.push({name:\"Position:\",value:t}),n.push({name:\"Value:     \",value:Dt(e.value.toFixed(4))})}return r.length...\"),n}return[]}getColorForFeature(e){let t=e.value<0&&this.altColor?this.altColor:this.color||Rd.defaultColor;return\"function\"==typeof t?t(e.value):t}getState(){const e=super.getState();return this._colorScale&&(e.colorScale=this._colorScale.toJson()),e}dispose(){this.trackView=void 0}}function Td(e,t,i,n=\"mean\"){if(i<=1||!e||0===e.length||\"none\"===n)return e;const r=e[0].chr,s=i,o=[],a=e=>{const i=t+e.bin*s,a=i+s;let c;switch(n){case\"mean\":c=e.sumData/e.count;break;case\"max\":c=e.max;break;case\"min\":c=e.min;break;default:throw Error(`Unknown window function: ${n}`)}const l=`${n} of ${e.count} values`;o.push({chr:r,start:i,end:a,value:c,description:l})};let c;for(let i of e){let e=Math.floor((i.start-t)/s);const n=Math.floor((i.end-t)/s);if(c&&e===c.bin&&(c.add(i),e++),!c||n>c.bin){if(c&&a(c),n>e){const e=t+n*s;o.push({chr:r,start:i.start,end:e,value:i.value})}c=new Ld(n,i)}}c&&a(c);const l=[];let h=o[0];for(let e of o)h.value===e.value&&e.start<=h.end?h.end=e.end:(l.push(h),h=e);return l.push(h),l}class Ld{constructor(e,t){this.bin=e,this.sumData=t.value,this.count=1,this.min=t.value,this.max=t.value}add(e){this.sumData+=e.value,this.max=Math.max(e.value,this.max),this.min=Math.min(e.value,this.min),this.count++}get mean(){return this.sumData/this.count}}class zd extends Kh{constructor(e,t){super(t),this.config=e||{},this.genome=t,this.sourceType=void 0===e.sourceType?\"file\":e.sourceType,this.maxWGCount=e.maxWGCount||1e4,this.windowFunctions=[\"mean\",\"min\",\"max\",\"none\"];const i=new Set([\"bigwig\",\"bw\",\"bigbed\",\"bb\",\"biginteract\",\"biggenepred\",\"bignarrowpeak\",\"tdf\"]);if(this.queryable=e.indexURL||!0===e.queryable,e.reader)this.reader=e.reader,this.queryable=!1!==e.queryable;else{if(\"ga4gh\"===e.sourceType)throw Error(\"Unsupported source type 'ga4gh'\");\"eqtl\"!==e.type&&\"qtl\"!==e.type||\"gtex-ws\"!==e.sourceType?\"htsget\"===e.sourceType?(this.reader=new Gh(e,t),this.queryable=!0):\"ucscservice\"===e.sourceType?(this.reader=new Uh(e.source),this.queryable=!0):\"custom\"===e.sourceType?(this.reader=new Oh(e.source),this.queryable=!1!==e.source.queryable):\"service\"===e.sourceType?(this.reader=new Hh(e,t),this.queryable=!0):(this.reader=new Hh(e,t),void 0!==e.queryable?this.queryable=e.queryable:(i.has(e.format)||this.reader.indexed)&&(this.queryable=!0)):(this.reader=new qh(e),this.queryable=!0)}this.searchable=!1!==e.searchable}async defaultVisibilityWindow(){if(this.reader&&\"function\"==typeof this.reader.defaultVisibilityWindow)return this.reader.defaultVisibilityWindow()}async trackType(){const e=await this.getHeader();return e?e.type:void 0}async getHeader(){if(!this.header)if(this.reader&&\"function\"==typeof this.reader.readHeader){const e=await this.reader.readHeader();e?(this.header=e,e.format&&(this.config.format=e.format)):this.header={}}else this.header={};return this.header}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r,windowFunction:s}){const o=\"all\"===e.toLowerCase();if(t=t||0,i=i||Number.MAX_SAFE_INTEGER,(o&&!this.wgFeatures&&this.supportsWholeGenome()||this.config.disableCache||!this.featureCache||!this.featureCache.containsRange(new Ac(e,t,i)))&&await this.loadFeatures(e,t,i,r),o){if(!this.wgFeatures)if(this.supportsWholeGenome())if(\"wig\"===this.config.type){const e=await Gl(this.featureCache.getAllFeatures(),this.genome,1e6);this.wgFeatures=Td(e,0,n,s)}else this.wgFeatures=await Gl(this.featureCache.getAllFeatures(),this.genome,this.maxWGCount);else this.wgFeatures=[];return this.wgFeatures}return this.featureCache.queryFeatures(e,t,i)}async findFeatures(e){return this.featureCache?this.featureCache.findFeatures(e):[]}supportsWholeGenome(){return!this.queryable}getAllFeatures(){return this.queryable||!this.featureCache?[]:this.featureCache.getAllFeatures()}async loadFeatures(e,t,i,n){await this.getHeader();const r=this.reader;let s=t,o=i,a=e;if(!this.chrAliasManager&&this.reader&&this.reader.sequenceNames&&(this.chrAliasManager=new $h(this.reader.sequenceNames,this.genome)),this.chrAliasManager&&(a=await this.chrAliasManager.getAliasName(e)),(!n||n<=0)&&!1!==this.config.expandQuery){const t=this.genome?this.genome.getChromosome(e):void 0;s=0,o=Math.max(t?t.bpLength:Number.MAX_SAFE_INTEGER,i)}else if(n>i-t&&!1!==this.config.expandQuery){let e=Math.min(4.1*(i-t),n);this.config.minQuerySize&&et.end-t.start)continue;this.featureMap.set(i.toUpperCase(),t)}}}search(e){if(this.featureMap)return this.featureMap.get(e.toUpperCase())}}class Pd{constructor({chr:e,locus:t,accession:i,aliases:n,features:r,sequence:s}){this.chr=e,this.locus=t,this.accession=i,this.aliases=n,this.features=r,this.sequence=s,this.bpLength=s.length}toJSON(){return{gbkURL:this.url}}getSequenceRecord(e){return{chr:this.chr,bpLength:this.bpLength}}get chromosomeNames(){return[this.chr]}getFirstChromosomeName(){return this.chr}get id(){return this.accession}get name(){return this.locus}get initialLocus(){return this.chr}get description(){return this.locus}get infoURL(){return this.url}showWholeGenomeView(){return!1}getHomeChromosomeName(){return this.chr}getChromosomeName(e){return e}getChromosomeDisplayName(e){return this.chr}getChromosome(e){if(e===this.chr)return{name:this.chr,bpLength:this.bpLength}}async loadChromosome(e){return this.getChromosome(e)}async getAliasRecord(e){}getCytobands(e){return[]}getChromosomes(){return[this.getChromosome(this.chr)]}get wgChromosomeNames(){}getGenomeCoordinate(e,t){if(e===this.chr)return t}getChromosomeCoordinate(e){return{chr:this.chr,position:e}}getCumulativeOffset(e){return 0}getGenomeLength(){return this.bpLength}async getSequence(e,t,i){return e===this.chr?this.sequence.substring(t,i):void 0}getSequenceInterval(e,t,i){return e===this.chr?new Cc(this.chr,0,this.sequence.length,this.sequence):void 0}}const Od=/\\s+/,Ud=new Map;async function qd(e){let t=Ud.get(e);if(!t){t=function(e){if(!e)return null;const t=Ih(e);let i=t.nextLine();const n=i.split(/\\s+/);if(\"LOCUS\"!==n[0].toUpperCase())throw Error(\"Expected `LOCUS` line. Found: \"+i);const r=n[1].trim();let s,o;do{if(i=t.nextLine(),i.startsWith(\"ACCESSION\")){const e=i.split(Od);if(e.length<2)throw Error(\"Genbank file missing ACCESSION number.\");s=e[1].trim()}else if(i.startsWith(\"ALIASES\")){const e=i.split(Od);e.length>1&&(o=e[1].split(\",\"))}}while(i&&!i.startsWith(\"FEATURES\"));const a=s||r,c=function(e,t){const i=[];let n,r,s,o=0;for(;;)if(r=t.nextLine(),\"\"!==r){if(!r||r.startsWith(\"ORIGIN\"))break;if(r.length<6)o<10&&console(\"Unexpected line in genbank file (skipping): \"+r),o++;else if(\" \"!==r.charAt(5)){let t=r.substring(5,21).trim();s={chr:e,type:t,attributes:{},getAttributeValue:function(e){return this.attributes[e]}},n=r.substring(21),\"source\"!==t.toLowerCase()&&i.push(s)}else{let t=r.substring(21).trim();if(t.length>0)if(47===t.charCodeAt(0)){if(47===n.charCodeAt(0)){let e=n.split(\"=\",2);if(e.length>1){let t=e[0].length>1?e[0].substring(1):\"\",i=Qd(e[1]);s.attributes[t]=i}}else{const t=n.includes(\"complement\")?\"-\":\"+\";s.strand=t;let i=n.replace(\"join\",\"\").replace(\"order\",\"\").replace(\"complement\",\"\").replace(\"(\",\"\").replace(\")\",\"\");if(i.includes(\"..\")){i=i.replace(\"<\",\"\").replace(\">\",\"\");const n=Vd(i,e,t),r=n[0];s.start=r.start;const o=n[n.length-1];s.end=o.end,n.length>1&&(s.exons=n)}else s.start=parseInt(i)-1,s.end=s.start+1}n=t}else n+=t}}return i}(a,t),l=function(e){let t,i=\"\";for(;(t=e.nextLine())&&!t.startsWith(\"//\");){t=t.trim();const e=t.split(/\\s+/);for(let t=1;t1&&(o=parseInt(n[1])),r.push({chr:t,start:s,end:o,strand:i})}return r.sort((function(e,t){return e.start-t.start})),r}function Qd(e){return e.startsWith('\"')&&e.endsWith('\"')&&(e=e.substring(1,e.length-2)),e}class jd extends Kh{constructor(e,t){super(t),this.config=e,this.searchable=!0}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r}){if(!this.featureSource){const e=await qd(this.config.url);this.featureSource=new Hd({genome:this.config.genome,features:e.features,searchableFields:[\"gene\",\"db_xref\",\"locus_tag\",\"transcript_id\"]})}return this.featureSource.getFeatures({chr:e,start:t,end:i})}supportsWholeGenome(){return!1}search(e){return this.featureSource.search(e)}}const Wd=new Set([\"bigwig\",\"bw\",\"bigbed\",\"bb\",\"biginteract\",\"biggenepred\",\"bignarrowpeak\"]);function Gd(e,t){const i=e.format?e.format.toLowerCase():void 0;return e.features?new Hd(e,t):Wd.has(i)?new wd(e,t):\"tdf\"===i?new ed(e,t):\"gbk\"===i?new jd(e,t):new zd(e,t)}function $d(e){return(3-e.readingFrame)%3}function Kd(e){return e.cdStart||e.start}function Yd(e){return e.cdEnd||e.end}const Xd=.25;function Zd(e,t,i){let n=(e.start-t)/i,r=(e.end-t)/i,s=r-n;return s<3&&(s=3,n-=1.5),{px:n,px1:r,pw:s}}function Jd(e,t,i,n,r,s){try{r.save(),r.fillStyle=this.color,r.strokeStyle=this.color;const n=this.getColorForFeature(e);let o,a;r.fillStyle=n,r.strokeStyle=n,\"SQUISHED\"===this.displayMode&&void 0!==e.row?(o=this.featureHeight/2,a=this.margin+this.squishedRowHeight*e.row):\"EXPANDED\"===this.displayMode&&void 0!==e.row?(o=this.featureHeight,a=this.margin+this.expandedRowHeight*e.row):(o=this.featureHeight,a=this.margin);const c=s.pixelWidth,l=a+o/2,h=o/2,d=l-h/2,u=e.exons?e.exons.length:0,f=Zd(e,t,i),p=this.arrowSpacing,g=\"+\"===e.strand?1:\"-\"===e.strand?-1:0;if(0===u){const e=Math.max(0,f.px),t=Math.min(c,f.px1),i=t-e;if(r.fillRect(e,a,i,o),0!==g){r.fillStyle=\"white\",r.strokeStyle=\"white\";for(let i=e+p/2;ic)break;if(f.utr)r.fillRect(w,d,F,h);else{if(f.cdStart&&(m=Math.round((f.cdStart-t)/i),r.fillRect(w,d,m-w,h),F-=m-w,w=m),f.cdEnd&&(m=Math.round((f.cdEnd-t)/i),r.fillRect(m,d,b-m,h),F-=b-m,b=m),F=Math.max(F,1),r.fillRect(w,a,F,o),void 0!==f.readingFrame&&s.bpPerPixel0&&void 0!==e.exons[u-1].readingFrame?e.exons[u-1]:void 0,n=up+5&&0!==g&&s.bpPerPixel>Xd){r.fillStyle=\"white\",r.strokeStyle=\"white\";for(let e=w+p/2;e{const f=Math.round((i-s)/o),p=Math.round((n-s)/o)-f;let g;if(void 0===r){if(l.hasSequence(i,n)){const e=l.getSequence(i,n);if(e&&3===e.length){const i=\"+\"===t?e:Fc(e.split(\"\").reverse().join(\"\"));g=bu[i]}}}else g=r;e.fillStyle=\"M\"===r||\"M\"===g&&0===u?\"#83f902\":\"STOP\"===g?\"#ff2101\":h[d],e.fillRect(f,a,p,c),g&&(e.save(),((t,i,n,r,s)=>{\"STOP\"===s&&(s=\"*\");const o=e.measureText(s).width;ko.fillText(e,s,n+(i-o)/2,r-4,{fillStyle:\"#ffffff\"})})(0,p,f,a+c,g),e.restore());const m=n-i;return m>0&&m<3?{start:i,end:n}:void 0},u=$d(n);let f,p,g,m,w,b=Kd(n),F=Yd(n),v=1;if(\"+\"===t){for(u>0&&(b+=u),v=1,w=0,f=b;f0||g){const e=u>0?iu.call(this,t,u,b-u,b,g,i,n,r,l):iu.call(this,t,void 0,void 0,void 0,g,i,n,r,l);if(e){const{left:i,rite:n}=e;i&&d(t,b-u,b,i.aminoAcidLetter,0,void 0),n&&d(t,g.start,g.end,n.aminoAcidLetter,m,void 0)}}}else{for(u>0&&(F-=u),v=1,w=0,w=0,p=F;p>b;w++,p-=3)m=v%2,f=Math.max(b,p-3),g=d(t,f,p,void 0,v%2,w),++v;if(u>0||g){const e=u>0?iu.call(this,t,u,F,F+u,g,i,n,r,l):iu.call(this,t,void 0,void 0,void 0,g,i,n,r,l);if(e){const{left:i,rite:n}=e;n&&d(t,F,F+u,n.aminoAcidLetter,0,void 0),i&&d(t,g.start,g.end,i.aminoAcidLetter,m,void 0)}}}e.restore()}function tu(e,t,i,n,r,s,o){try{e.save();let s=t.name;if(void 0===s&&t.gene&&(s=t.gene.name),void 0===s&&(s=t.id||t.ID),!s||\".\"===s)return;let a=o.pixelXOffset||0;const c=Math.max(i,-a);let l,h=(c+Math.min(n,-a+o.viewportWidth))/2;\"COLLAPSED\"===this.displayMode&&\"SLANT\"===this.labelDisplayMode&&(l={rotate:{angle:45}});const d=function(e,t){return t?e+20:e+25}(r,l);let u=this.getColorForFeature(t),f=this.browser.qtlSelections.hasPhenotype(t.name);const p={textAlign:\"SLANT\"===this.labelDisplayMode?void 0:\"center\",fillStyle:u,strokeStyle:u},g=e.measureText(s),m=h-g.width/2,w=h+g.width/2,b=o.rowLastLabelX[t.row]||-Number.MAX_SAFE_INTEGER;(o.labelAllFeatures||m>b||f)&&(o.rowLastLabelX[t.row]=w,\"y\"===o.axis?(e.save(),ko.labelTransformWithContext(e,h),ko.fillText(e,s,h,d,p,l),e.restore()):(e.clearRect(h-g.width/2-1,d-g.actualBoundingBoxAscent-1,g.width+2,g.actualBoundingBoxAscent+g.actualBoundingBoxDescent+2),ko.fillText(e,s,h,d,p,l)))}finally{e.restore()}}function iu(e,t,i,n,r,s,o,a,c){let l,h,d=\"\",u=\"\",f=\"\";const p={left:void 0,rite:void 0};if(\"+\"===e){if(t){if(u=c.getSequence(i,n),!u)return;if([l,h]=[Yd(s)-(3-t),Yd(s)],d=c.getSequence(l,h),!d)return;f=d+u,p.left={triplet:f,aminoAcidLetter:bu[f]}}if(r){if(d=c.getSequence(r.start,r.end),!d)return;const e=$d(a),t=Kd(a);if(u=c.getSequence(t,t+e),!u)return;f=d+u,p.rite={triplet:f,aminoAcidLetter:bu[f]}}}else{if(t){if(d=c.getSequence(i,n),void 0===d)return;if([l,h]=[Kd(a),Kd(a)+(3-t)],u=c.getSequence(l,h),void 0===u)return;f=d+u,f=Fc(f.split(\"\").reverse().join(\"\")),p.rite={triplet:f,aminoAcidLetter:bu[f]}}if(r){if(u=c.getSequence(r.start,r.end),void 0===u)return;const e=$d(s),t=Yd(s);if(d=c.getSequence(t-e,t),void 0===d)return;f=d+u,f=Fc(f.split(\"\").reverse().join(\"\")),p.left={triplet:f,aminoAcidLetter:bu[f]}}}return p}const nu=new Set([\"nonsense\",\"missense\",\"stop-loss\",\"frameshift\",\"cds-indel\"]),ru=new Set([\"coding-synon\"]),su=new Set([\"splice-3\",\"splice-5\"]),ou=new Set([\"untranslated-5\",\"untranslated-3\"]);function au(e,t,i,n,r){var s,o,a,c,l,h,d=Zd(e,t,i),u=this.margin,f=this.snpColors.length;switch(s=\"squished\"===this.displayMode?this.squishedRowHeight:this.expandedRowHeight,this.colorBy){case\"function\":c=e.func,h=c.split(\",\"),l=h.map((function(e){return nu.has(e)||su.has(e)?f-1:ru.has(e)?f-2:ou.has(e)?f-3:0})),o=l.reduce((function(e,t){return Math.max(e,t)}));break;case\"class\":o=\"deletion\"===(a=e.class)?f-1:\"mnp\"===a?f-2:\"microsatellite\"===a||\"named\"===a?f-3:0}r.fillStyle=this.snpColors[o],r.fillRect(d.px,u,d.pw,s)}function cu(e,t,i,n,r){const s=\"EXPANDED\"===this.displayMode?this.expandedRowHeight:this.squishedRowHeight;let o=this.margin;\"COLLAPSED\"!==this.displayMode&&void 0!==e.row&&(o+=e.row*s);const a=o+.5*s,c=a-.5*s,l=a+.5*s,h=Math.round((e.junction_left-t)/i),d=Math.round((e.junction_right-t)/i);r.beginPath(),r.moveTo(h,a),r.bezierCurveTo(h,c,d,c,d,a),r.lineWidth=1+Math.log(e.num_junction_reads)/Math.log(2),r.strokeStyle=\"blue\",r.stroke();const u=e.spanning_frag_coords;for(let e=0;et&&(t=i.row);return this.margin+(t+1)*(\"SQUISHED\"===this.displayMode?this.squishedRowHeight:this.expandedRowHeight)}}draw(e){const{features:t,context:i,bpPerPixel:n,bpStart:r,bpEnd:s,pixelWidth:o,pixelHeight:a,referenceFrame:c}=e;if(nr&&i.end!isNaN(e)))));let h=[];const d=[];for(let o of t){if(o.ends)break;\"COLLAPSED\"===this.displayMode&&this.browser.qtlSelections.hasPhenotype(o.name)&&d.push(o);const t=\"COLLAPSED\"===this.displayMode?0:o.row;e.drawLabel=e.labelAllFeatures||l>10;const c=Math.ceil((o.end-r)/n),u=h[t];if(!u||c>u){this.render.call(this,o,r,n,a,i,e);const s=Math.floor((o.start-r)/n);u&&s-u<=0&&(i.globalAlpha=.5,ko.strokeLine(i,s,0,s,a,{strokeStyle:\"rgb(255, 255, 255)\"}),i.globalAlpha=1),h[t]=c}}for(let t of d)e.drawLabel=!0,this.render.call(this,t,r,n,a,i,e)}else console.log(\"No feature list\")}clickedFeatures(e){const t=e.y-this.margin,i=super.clickedFeatures(e);let n;switch(this.displayMode){case\"SQUISHED\":n=Math.floor(t/this.squishedRowHeight);break;case\"EXPANDED\":n=Math.floor(t/this.expandedRowHeight);break;default:n=void 0}return i.filter((function(e){return void 0===n||void 0===e.row||n===e.row}))}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=e.genomicLocation,n=[];for(let e of t){const t=e._f||e,r=\"function\"==typeof t.popupData?t.popupData(i):this.extractPopupData(t);if(r){n.length>0&&n.push(\"

\");const s=this.infoURL||this.config.infoURL;for(let t of r)if(n.push(t),s&&t.name&&\"name\"===t.name.toLowerCase()&&t.value&&Mt(t.value)&&!t.value.startsWith(\"<\")){const i=s.replace(\"$$\",e.name);t.value=`${t.value}`}const o=\"gff\"===this.config.format||\"gff3\"===this.config.format||\"gtf\"===this.config.format;if(t.exons&&t.exons.length>1)for(let e=0;e=r.start&&i<=r.end){const i=o?r.number:\"-\"===t.strand?t.exons.length-e:e+1;i&&(n.push(\"
\"),n.push({name:\"Exon Number\",value:i}));break}}}}return n}menuItemList(){const e=[];if(this.render===au){e.push(\"
\");for(const i of[\"function\",\"class\"]){const n=Bt(jl(`Color by ${i}`,i===this.colorBy));function r(){this.colorBy=i,this.trackView.repaintViews()}e.push({object:n,click:r})}}e.push(\"
\");const t={COLLAPSED:\"Collapse\",SQUISHED:\"Squish\",EXPANDED:\"Expand\"};for(const s of[\"COLLAPSED\",\"SQUISHED\",\"EXPANDED\"]){const o=Bt(jl(t[s],s===this.displayMode));function a(){this.displayMode=s,this.config.displayMode=s,this.trackView.checkContentHeight(),this.trackView.repaintViews()}e.push({object:o,click:a})}return e}contextMenuItemList(e){const t=this.clickedFeatures(e);if(void 0===t||0===t.length)return;t.length>1&&t.sort(((e,t)=>t.end-t.start-(e.end-e.start)));const i=t[0];if(i.end-i.start<=1e6){const e=[{label:\"View feature sequence\",click:async()=>{let e=await this.browser.genome.getSequence(i.chr,i.start,i.end);e?\"-\"===i.strand&&(e=vc(e)):e=\"Unknown sequence\",this.browser.alert.present(e)}}];return uc()&&void 0!==navigator.clipboard&&e.push({label:\"Copy feature sequence\",click:async()=>{let e=await this.browser.genome.getSequence(i.chr,i.start,i.end);e?\"-\"===i.strand&&(e=vc(e)):e=\"Unknown sequence\";try{await navigator.clipboard.writeText(e)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}}),e.push(\"
\"),e}}description(){if(au===this.render){let e=\"\"+this.name+\"
\";return e+=\"Color By Function:
\",e+='Red: Coding-Non-Synonymous, Splice Site
',e+='Green: Coding-Synonymous
',e+='Blue: Untranslated
',e+='Black: Intron, Locus, Unknown

',e+=\"Color By Class:
\",e+='Red: Deletion
',e+='Green: MNP
',e+='Blue: Microsatellite, Named
',e+='Black: Indel, Insertion, SNP',e+=\"\",e}return super.description()}getColorForFeature(e){const t=e._f||e;let i;if(e.name&&this.browser.qtlSelections.hasPhenotype(e.name))i=this.browser.qtlSelections.colorForGene(e.name);else if(this.altColor&&\"-\"===t.strand)i=\"function\"==typeof this.altColor?this.altColor(t):this.altColor;else if(this.color)i=\"function\"==typeof this.color?this.color(t):this.color;else if(this.colorBy){const e=t.getAttributeValue?t.getAttributeValue(this.colorBy):t[this.colorBy];i=this.colorTable.getColor(e)}else t.color&&(i=t.color);if(i||(i=lu.defaultColor),t.alpha&&1!==t.alpha)i=_s.addAlpha(i,t.alpha);else if(this.useScore&&t.score&&!Number.isNaN(t.score)){const e=function(e,t,i){const n=(t-e)/9,r=Math.floor((i-e)/n);return Math.min(1,.2+.8*r/9)}(this.config.min?this.config.min:this.viewLimitMin?this.viewLimitMin:0,this.config.max?this.config.max:this.viewLimitMax?this.viewLimitMax:1e3,t.score);t.alpha=e,i=_s.addAlpha(i,e)}return i}dispose(){this.trackView=void 0}}class hu{constructor(t){if(this.config=t,this.browser=t.browser,this.columnFormat=t.columnFormat,this.tableRowSelectionList=[],this.tableDOM=e({class:\"igv-roi-table\"}),t.width){let[e]=t.width.split(\"px\");e=parseInt(e,10),this.tableDOM.style.width=`${Math.min(e,1600)}px`}t.parent.appendChild(this.tableDOM),this.headerDOM=t,this.tableColumnTitles=this.tableDOM,this.tableRowContainer=this.tableDOM,this.footerDOM=t.gotoButtonHandler}set headerDOM({browser:t,parent:i,headerTitle:n,dismissHandler:r}){const s=e();this.tableDOM.appendChild(s);const o=e();s.appendChild(o),o.innerHTML=n;const a=e();s.appendChild(a),a.appendChild(l(\"times\")),this.boundDismissHandler=function(e){e.stopPropagation(),r()}.bind(this),a.addEventListener(\"click\",this.boundDismissHandler);const{y:c}=t.root.getBoundingClientRect(),{y:h}=i.getBoundingClientRect(),d=-(h-c);p(this.tableDOM,s,{minX:0,minY:d}),this.tableDOM.style.display=\"none\",this._headerDOM=s}set tableColumnTitles(t){const i=e({class:\"igv-roi-table-column-titles\"});t.appendChild(i);for(const{label:t,width:n}of this.columnFormat){const r=e();i.appendChild(r),r.style.width=n,r.innerText=t}this._tableColumnTitlesDOM=i}get tableColumnTitles(){return this._tableColumnTitlesDOM}set tableRowContainer(t){const i=e({class:\"igv-roi-table-row-container\"});t.appendChild(i),this._tableRowContainerDOM=i}get tableRowContainer(){return this._tableRowContainerDOM}set footerDOM(t){const i=e();this.tableDOM.appendChild(i);const n=e({class:\"igv-roi-table-button\"});i.appendChild(n),n.id=\"igv-roi-table-view-button\",n.textContent=\"Go To\",n.style.pointerEvents=\"none\",this._footerDOM=i,this.gotoButton=n,this.boundGotoButtonHandler=t.bind(this),this.gotoButton.addEventListener(\"click\",this.boundGotoButtonHandler)}tableRowDOMHelper(e){e.addEventListener(\"mousedown\",(t=>{t.stopPropagation(),e.classList.toggle(\"igv-roi-table-row-selected\"),e.classList.contains(\"igv-roi-table-row-selected\")?e.classList.remove(\"igv-roi-table-row-hover\"):e.classList.add(\"igv-roi-table-row-hover\"),this.setTableRowSelectionState(e.classList.contains(\"igv-roi-table-row-selected\"))})),e.addEventListener(\"mouseover\",(t=>{e.classList.contains(\"igv-roi-table-row-selected\")?e.classList.remove(\"igv-roi-table-row-hover\"):e.classList.add(\"igv-roi-table-row-hover\")})),e.addEventListener(\"mouseout\",(t=>{e.classList.remove(\"igv-roi-table-row-hover\")}))}clearTable(){const e=this.tableRowContainer.querySelectorAll(\".igv-roi-table-row\");for(let t of e)t.remove()}setTableRowSelectionState(e){e?this.tableRowSelectionList.push(1):this.tableRowSelectionList.pop(),this.gotoButton.style.pointerEvents=this.tableRowSelectionList.length>0?\"auto\":\"none\"}present(){this.tableDOM.style.left=\"0px\";const{y:e}=this.browser.root.getBoundingClientRect(),{y:t}=this.config.parent.getBoundingClientRect();this.tableDOM.style.top=e-t+\"px\",this.tableDOM.style.display=\"flex\"}dismiss(){this.tableDOM.style.display=\"none\"}isVisible(){return\"none\"!==this.tableDOM.style.display}dispose(){this.tableDOM.innerHTML=\"\",this.tableDOM.remove();for(const e of Object.keys(this))this[e]=void 0;document.removeEventListener(\"click\",this.boundDismissHandler)}}class du extends hu{constructor(e){super(Object.assign({width:\"1024px\"},e)),this.descriptionDOM=e}set descriptionDOM(t){if(t.description){let i;i=e({class:\"igv-roi-table-description\"}),this.tableDOM.insertBefore(i,this.tableColumnTitles),i.style.height=\"auto\",i.innerHTML=\"BLAT result for query sequence:\",i=e({class:\"igv-roi-table-description\"}),this.tableDOM.insertBefore(i,this.tableColumnTitles),i.style.height=\"auto\",i.style.maxHeight=\"128px\",i.innerHTML=t.description,i=e({class:\"igv-roi-table-goto-explainer\"}),this.tableDOM.insertBefore(i,this.tableColumnTitles),i.innerHTML=\"Select one or more rows and click Go To to view the regions\"}}tableRowDOM(t){const i=e({class:\"igv-roi-table-row\"}),n=t.map((e=>isFinite(e)?Dt(e):e));for(let t=0;te.remove())),e.length>0)for(let t of e){const e=this.tableRowDOM(t);this.tableRowContainer.appendChild(e)}}static getColumnFormatConfiguration(){return[{label:\"chr\",width:\"7%\"},{label:\"start\",width:\"12%\"},{label:\"end\",width:\"12%\"},{label:\"strand\",width:\"5%\"},{label:\"score\",width:\"5%\"},{label:\"match\",width:\"5%\"},{label:\"mis-match\",width:\"7%\"},{label:\"rep. match\",width:\"7%\"},{label:\"N's\",width:\"3%\"},{label:\"Q gap count\",width:\"9%\"},{label:\"Q gap bases\",width:\"9%\"},{label:\"T gap count\",width:\"9%\"},{label:\"T gap bases\",width:\"9%\"}]}static gotoButtonHandler(e){e.stopPropagation();const t=this.tableDOM.querySelectorAll(\".igv-roi-table-row-selected\"),i=[];for(const e of t){const t=[];e.querySelectorAll(\"div\").forEach((e=>t.push(e.innerText)));const[n,r,s]=t;i.push(`${n}:${r}-${s}`)}for(const e of this.tableDOM.querySelectorAll(\".igv-roi-table-row\"))e.classList.remove(\"igv-roi-table-row-selected\");this.setTableRowSelectionState(!1),this.browser.search(i.join(\" \"))}}const uu=\"https://igv.org/services/blatUCSC.php\";async function fu({url:e,userSeq:t,db:i}){if(e=e||uu,!i)throw Error(\"Blat database is not defined\");const n=await async function(e=\"\",t,i){const n=new URLSearchParams;n.append(\"userSeq\",t),n.append(\"db\",i);const r=await fetch(e,{method:\"post\",body:n});return r.json()}(e,t,i);n.fields;return n.blat.map(yl)}const pu=25e3;class gu extends lu{constructor(e,t){super(e,t),this.name||(this.name=\"Blat Results\"),this.sequence=e.sequence,this.table=void 0,e.features&&(this._features=e.features,this.featureSource=new Hd({features:e.features},this.browser.genome),delete e.features)}async postInit(){if(!this.featureSource){const e=this.browser.genome.id,t=this.browser.config.blatServerURL,i=await fu({url:t,userSeq:this.sequence,db:e});this._features=i,this.featureSource=new Hd({features:i},this.browser.genome)}this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor}openTableView(){if(void 0===this.table){const e=this._features.map((e=>[e.chr,e.start+1,e.end,e.strand,e.score,e.matches,e.misMatches,e.repMatches,e.nCount,e.qNumInsert,e.qBaseInsert,e.tNumInsert,e.tBaseInsert])),t={browser:this.browser,parent:this.browser.columnContainer,headerTitle:this.config.title,description:this.sequence,dismissHandler:()=>{this.table.dismiss(),this.table.dispose(),this.table=void 0},columnFormat:du.getColumnFormatConfiguration(),gotoButtonHandler:du.gotoButtonHandler};this.table=new du(t),this.table.renderTable(e)}this.table.present()}menuItemList(){const e=super.menuItemList();return e.push(\"
\"),e.push({label:\"Open table view\",click:function(){this.openTableView()}}),e}dispose(){super.dispose(),this.table&&this.table.popover.parentElement.removeChild(this.table.popover)}}async function mu({sequence:e,browser:t,name:i,title:n}){if(e.length>pu)t.alert.present(`Sequence size exceeds maximum allowed length (${e.length} > 25000)`);else try{const r=t.genome.id,s=t.config.blatServerURL||\"https://igv.org/services/blatUCSC.php\",o={type:\"blat\",name:i||\"blat results\",title:n||\"blat results\",sequence:e,altColor:\"rgb(176, 176, 236)\",color:\"rgb(236, 176, 176)\",searchable:!1,features:await fu({url:s,userSeq:e,db:r})};(await t.loadTrack(o)).openTableView()}catch(e){t.alert.present(`Error performing blat search: ${e}`)}}const wu=Number.MIN_SAFE_INTEGER,bu={TTT:\"F\",TTC:\"F\",TTA:\"L\",TTG:\"L\",CTT:\"L\",CTC:\"L\",CTA:\"L\",CTG:\"L\",ATT:\"I\",ATC:\"I\",ATA:\"I\",ATG:\"M\",GTT:\"V\",GTC:\"V\",GTA:\"V\",GTG:\"V\",TCT:\"S\",TCC:\"S\",TCA:\"S\",TCG:\"S\",CCT:\"P\",CCC:\"P\",CCA:\"P\",CCG:\"P\",ACT:\"T\",ACC:\"T\",ACA:\"T\",ACG:\"T\",GCT:\"A\",GCC:\"A\",GCA:\"A\",GCG:\"A\",TAT:\"Y\",TAC:\"Y\",TAA:\"STOP\",TAG:\"STOP\",CAT:\"H\",CAC:\"H\",CAA:\"Q\",CAG:\"Q\",AAT:\"N\",AAC:\"N\",AAA:\"K\",AAG:\"K\",GAT:\"D\",GAC:\"D\",GAA:\"E\",GAG:\"E\",TGT:\"C\",TGC:\"C\",TGA:\"STOP\",TGG:\"W\",CGT:\"R\",CGC:\"R\",CGA:\"R\",CGG:\"R\",AGT:\"S\",AGC:\"S\",AGA:\"R\",AGG:\"R\",GGT:\"G\",GGC:\"G\",GGA:\"G\",GGG:\"G\"},Fu={},vu=[\"A\",\"G\",\"C\",\"T\",\"Y\",\"R\",\"W\",\"S\",\"K\",\"M\",\"D\",\"V\",\"H\",\"B\",\"N\",\"X\"],yu=[\"T\",\"C\",\"G\",\"A\",\"R\",\"Y\",\"W\",\"S\",\"M\",\"K\",\"H\",\"B\",\"D\",\"V\",\"N\",\"X\"];for(let JA=0;JA{this.reversed=!this.reversed,this.trackView.repaintViews()}},{name:this.frameTranslate?\"Close Translation\":\"Three-frame Translate\",click:()=>{if(this.frameTranslate=!this.frameTranslate,this.frameTranslate){for(let e of this.trackView.viewports)e.setContentHeight(Au);this.trackView.setTrackHeight(Au)}else{for(let e of this.trackView.viewports)e.setContentHeight(25);this.trackView.setTrackHeight(25)}this.trackView.repaintViews()}}]}contextMenuItemList(e){const t=e.viewport;if(t.referenceFrame.bpPerPixel<=1){const e=t.getWidth()*t.referenceFrame.bpPerPixel,i=t.referenceFrame.chr,n=Math.floor(t.referenceFrame.start),r=Math.ceil(n+e),s=[{label:this.reversed?\"View visible sequence (reversed)...\":\"View visible sequence...\",click:async()=>{let e=await this.browser.genome.getSequence(i,n,r);e?this.reversed&&(e=vc(e)):e=\"Unknown sequence\",this.browser.alert.present(e)}}];return uc()&&s.push({label:\"Copy visible sequence\",click:async()=>{let e=await this.browser.genome.getSequence(i,n,r);e?this.reversed&&(e=vc(e)):e=\"Unknown sequence\";try{await navigator.clipboard.writeText(e)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}}),s.push({label:\"BLAT read sequence\",click:async()=>{let e=await this.browser.genome.getSequence(i,n,r);if(e){this.reversed&&(e=vc(e));const t=`blat: ${i}:${n+1}-${r}`,s=`blat: ${i}:${n+1}-${r}`;mu({sequence:e,browser:this.browser,name:t,title:s})}}}),s.push(\"
\"),s}}translateSequence(e){const t=[[],[],[]];for(let i of[0,1,2]){let n=i;for(;e.length-n>=3;){let r=e.slice(n,n+3);this.reversed&&(r=r.split(\"\").reverse().join(\"\"));const s=bu[r.toUpperCase()]||\"\";t[i].push({codons:r,aminoA:s}),n+=3}}return t}async getSequenceSource(){return this.config.fastaURL?(this.fasta||(this.fasta=new _u(this.config,this.browser.genome),await this.fasta.init()),this.fasta):this.browser.genome}async getFeatures(e,t,i,n){if(t=Math.floor(t),i=Math.floor(i),n&&n>10)return null;{const n=await this.getSequenceSource();return{bpStart:t,sequence:await n.getSequence(e,t,i)}}}draw(e){const t=e.context;if(e.features){let i=e.features.sequence;if(!i)return;this.reversed&&(i=i.split(\"\").map((function(e){return Fu[e]})).join(\"\"));const n=e.features.bpStart,r=1+e.bpStart+e.pixelWidth*e.bpPerPixel;for(let s=Math.floor(e.bpStart);s<=r;s++){const r=Math.floor(s-n);if(r>=0&&r.1)ko.fillRect(t,n,5,o,10,{fillStyle:c});else{const i=n+.5*(o-t.measureText(a).width);\"y\"===e.axis?(t.save(),ko.labelTransformWithContext(t,i),ko.strokeText(t,a,i,15,{strokeStyle:c}),t.restore()):ko.strokeText(t,a,i,15,{strokeStyle:c})}}}if(this.frameTranslate){let r=25;const s=this.translateSequence(i);for(let i=0;ie.pixelWidth)break;let f=c.aminoA;c.aminoA.indexOf(\"STOP\")>-1?(a=\"rgb(255, 0, 0)\",f=\"STOP\"):\"M\"===c.aminoA&&(a=\"rgb(0, 153, 0)\",f=\"START\"),ko.fillRect(t,h,r,d-h,25,{fillStyle:a}),e.bpPerPixel<=.1&&ko.strokeText(t,f,u-t.measureText(f).width/2,r+15)}r+=30}}}}get supportsWholeGenome(){return!1}computePixelHeight(e){return this.height=this.frameTranslate?Au:25,this.height}fillColor(e){return this.color?this.color:\"dna\"===this.sequenceType?this.browser.nucleotideColors[e]||\"gray\":\"rgb(0, 0, 150)\"}getState(){const e={type:\"sequence\"};return this.order!==wu&&(e.order=this.order),this.reversed&&(e.revealed=!0),e}}class _u{constructor(e,t){this.config=e,this.genome=t}async init(){this.fasta=await qc(this.config),this.chrNameMap=new Map;for(let e of this.fasta.chromosomeNames)this.chrNameMap.set(this.genome.getChromosomeName(e),e)}async getSequence(e,t,i){const n=this.chrNameMap.has(e)?this.chrNameMap.get(e):e;return this.fasta.getSequence(n,t,i)}}class xu{constructor(e,t,i,n){this.guid=s(),this.trackView=e,this.referenceFrame=i,this.browser=e.browser,this.$viewport=Bt('
'),t.appendChild(this.$viewport.get(0)),e.track.height&&this.setHeight(e.track.height),e.track instanceof Cu&&(this.alert=new Ya(this.$viewport.get(0))),this.contentTop=0,this.contentHeight=this.$viewport.height(),this.$viewport.width(n),this.initializationHelper()}initializationHelper(){}showMessage(e){this.messageDiv||(this.messageDiv=document.createElement(\"div\"),this.messageDiv.className=\"igv-viewport-message\",this.$viewport.append(Bt(this.messageDiv))),this.messageDiv.textContent=e,this.messageDiv.style.display=\"inline-block\"}hideMessage(e){this.messageDiv&&(this.messageDiv.style.display=\"none\")}setTrackLabel(e){}startSpinner(){}stopSpinner(){}checkZoomIn(){return!0}shift(){}setTop(e){this.contentTop=e,this.$viewport.height()}async loadFeatures(){}clearCache(){}repaint(){}draw(e,t,i){console.log(\"Viewport - draw(drawConfiguration, features, roiFeatures)\")}checkContentHeight(e){let t=this.trackView.track;if(e=e||this.cachedFeatures,\"FILL\"===t.displayMode)this.setContentHeight(this.$viewport.height());else if(\"function\"==typeof t.computePixelHeight&&e&&e.length>0){let i=t.computePixelHeight(e);i!==this.contentHeight&&this.setContentHeight(i)}}getContentHeight(){return this.contentHeight}setContentHeight(e){this.contentHeight=e}isLoading(){return!1}saveSVG(){}isVisible(){return this.$viewport.width()}setWidth(e){this.$viewport.width(e)}getWidth(){return this.$viewport.width()}setHeight(e){this.$viewport.height(e)}getContentTop(){return this.contentTop}containsPosition(e,t){console.log(\"Viewport - containsPosition(chr, position)\")}addMouseHandlers(){}removeMouseHandlers(){}dispose(){this.$viewport.get(0).remove();for(let e of Object.keys(this))this[e]=void 0}}\n/*!!\n * Canvas 2 Svg v1.0.19\n * A low level canvas to SVG converter. Uses a mock canvas context to build an SVG document.\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n * Author:\n * Kerry Liu\n *\n * Copyright (c) 2014 Gliffy Inc.\n */function ku(e,t){var i,n=Object.keys(t);for(i=0;i0){\"path\"===this.__currentElement.nodeName&&(this.__currentElementsToStyle||(this.__currentElementsToStyle={element:t,children:[]}),this.__currentElementsToStyle.children.push(this.__currentElement),this.__applyCurrentDefaultPath());var i=this.__createElement(\"g\");t.appendChild(i),this.__currentElement=i}var n=this.__currentElement.getAttribute(\"transform\");n?n+=\" \":n=\"\",n+=e,this.__currentElement.setAttribute(\"transform\",n)}addTrackGroupWithTranslationAndClipRect(e,t,i,n,r,s){const o=e+\"_clip_rect\";let a=this.__createElement(\"clipPath\",{id:o});this.__defs.appendChild(a),a.appendChild(this.__createElement(\"rect\",{x:\"0\",y:s.toString(),width:n.toString(),height:r.toString()}));let c=this.__createElement(\"g\");this.__rootGroup.appendChild(c),c.setAttribute(\"transform\",ku(\"translate({x},{y})\",{x:t,y:i})),c.setAttribute(\"id\",e+\"_group\"),c.setAttribute(\"clip-path\",ku(\"url(#{id})\",{id:o})),this.__currentElement=c}scale(e,t){void 0===t&&(t=e),this.__addTransform(ku(\"scale({x},{y})\",{x:e,y:t}))}rotate(e){var t=180*e/Math.PI;this.__addTransform(ku(\"rotate({angle},{cx},{cy})\",{angle:t,cx:0,cy:0}))}translate(e,t){this.__addTransform(ku(\"translate({x},{y})\",{x:e,y:t}))}transform(e,t,i,n,r,s){this.__addTransform(ku(\"matrix({a},{b},{c},{d},{e},{f})\",{a:e,b:t,c:i,d:n,e:r,f:s}))}beginPath(){var e;this.__currentDefaultPath=\"\",this.__currentPosition={},e=this.__createElement(\"path\",{},!0),this.__closestGroupOrSvg().appendChild(e),this.__currentElement=e}__applyCurrentDefaultPath(){var e=this.__currentElement;\"path\"===e.nodeName?e.setAttribute(\"d\",this.__currentDefaultPath):console.error(\"Attempted to apply path command to node\",e.nodeName)}__addPathCommand(e){this.__currentDefaultPath+=\" \",this.__currentDefaultPath+=e}moveTo(e,t){\"path\"!==this.__currentElement.nodeName&&this.beginPath(),this.__currentPosition={x:e,y:t},this.__addPathCommand(ku(\"M {x} {y}\",{x:e,y:t}))}closePath(){this.__currentDefaultPath&&this.__addPathCommand(\"Z\")}lineTo(e,t){this.__currentPosition={x:e,y:t},this.__currentDefaultPath&&this.__currentDefaultPath.indexOf(\"M\")>-1?this.__addPathCommand(ku(\"L {x} {y}\",{x:e,y:t})):this.__addPathCommand(ku(\"M {x} {y}\",{x:e,y:t}))}bezierCurveTo(e,t,i,n,r,s){this.__currentPosition={x:r,y:s},this.__addPathCommand(ku(\"C {cp1x} {cp1y} {cp2x} {cp2y} {x} {y}\",{cp1x:e,cp1y:t,cp2x:i,cp2y:n,x:r,y:s}))}quadraticCurveTo(e,t,i,n){this.__currentPosition={x:i,y:n},this.__addPathCommand(ku(\"Q {cpx} {cpy} {x} {y}\",{cpx:e,cpy:t,x:i,y:n}))}arcTo(e,t,i,n,r){var s=this.__currentPosition&&this.__currentPosition.x,o=this.__currentPosition&&this.__currentPosition.y;if(void 0!==s&&void 0!==o){if(r<0)throw new Error(\"IndexSizeError: The radius provided (\"+r+\") is negative.\");if(s===e&&o===t||e===i&&t===n||0===r)this.lineTo(e,t);else{var a=Eu([s-e,o-t]),c=Eu([i-e,n-t]);if(a[0]*c[1]!=a[1]*c[0]){var l=a[0]*c[0]+a[1]*c[1],h=Math.acos(Math.abs(l)),d=Eu([a[0]+c[0],a[1]+c[1]]),u=r/Math.sin(h/2),f=e+u*d[0],p=t+u*d[1],g=[-a[1],a[0]],m=[c[1],-c[0]],w=function(e){var t=e[0];return e[1]>=0?Math.acos(t):-Math.acos(t)},b=w(g),F=w(m);this.lineTo(f+g[0]*r,p+g[1]*r),this.arc(f,p,r,b,F)}else this.lineTo(e,t)}}}stroke(){\"path\"===this.__currentElement.nodeName&&this.__currentElement.setAttribute(\"paint-order\",\"fill stroke markers\"),this.__applyCurrentDefaultPath(),this.__applyStyleToCurrentElement(\"stroke\")}fill(){\"path\"===this.__currentElement.nodeName&&this.__currentElement.setAttribute(\"paint-order\",\"stroke fill markers\"),this.__applyCurrentDefaultPath(),this.__applyStyleToCurrentElement(\"fill\")}rect(e,t,i,n){\"path\"!==this.__currentElement.nodeName&&this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.lineTo(e,t),this.closePath()}fillRect(e,t,i,n){n<0&&(t+=n,n=-n),i<0&&(e+=i,i=-i);var r,s,o,a={x:e,y:t,width:i,height:n};(!this.viewbox||(r=this.viewbox,s=a,r.xs.x&&r.ys.y))&&(o=this.__createElement(\"rect\",a,!0),this.__closestGroupOrSvg().appendChild(o),this.__currentElement=o,this.__applyStyleToCurrentElement(\"fill\"))}strokeRect(e,t,i,n){var r;r=this.__createElement(\"rect\",{x:e,y:t,width:i,height:n},!0),this.__closestGroupOrSvg().appendChild(r),this.__currentElement=r,this.__applyStyleToCurrentElement(\"stroke\")}strokeEllipse(e,t,i,n,r,s,o,a){this.__ellipse(e,t,i,n,r,s,o,a,\"stroke\")}fillEllipse(e,t,i,n,r,s,o,a){this.__ellipse(e,t,i,n,r,s,o,a,\"fill\")}__ellipse(e,t,i,n,r,s,o,a,c){const l={cx:e,cy:t,rx:i,ry:n},h=this.__createElement(\"ellipse\",l,!0);this.__closestGroupOrSvg().appendChild(h),this.__currentElement=h,this.__applyStyleToCurrentElement(c)}__clearCanvas(){for(var e=this.__closestGroupOrSvg().getAttribute(\"transform\"),t=this.__root.childNodes[1],i=t.childNodes,n=i.length-1;n>=0;n--)i[n]&&t.removeChild(i[n]);this.__currentElement=t,this.__groupStack=[],e&&this.__addTransform(e)}clearRect(e,t,i,n){if(0!==e||0!==t||i!==this.width||n!==this.height){var r,s=this.__closestGroupOrSvg();r=this.__createElement(\"rect\",{x:e,y:t,width:i,height:n,fill:\"#FFFFFF\"},!0),s.appendChild(r)}else this.__clearCanvas()}createLinearGradient(e,t,i,n){var r=this.__createElement(\"linearGradient\",{id:Iu(this.__ids),x1:e+\"px\",x2:i+\"px\",y1:t+\"px\",y2:n+\"px\",gradientUnits:\"userSpaceOnUse\"},!1);return this.__defs.appendChild(r),new Mu(r,this)}createRadialGradient(e,t,i,n,r,s){var o=this.__createElement(\"radialGradient\",{id:Iu(this.__ids),cx:n+\"px\",cy:r+\"px\",r:s+\"px\",fx:e+\"px\",fy:t+\"px\",gradientUnits:\"userSpaceOnUse\"},!1);return this.__defs.appendChild(o),new Mu(o,this)}__parseFont(){var e=/^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-,\\'\\\"\\sa-z0-9]+?)\\s*$/i.exec(this.font),t={style:e[1]||\"normal\",size:e[4]||\"10px\",family:e[6]||\"sans-serif\",weight:e[3]||\"normal\",decoration:e[2]||\"normal\",href:null};return\"underline\"===this.__fontUnderline&&(t.decoration=\"underline\"),this.__fontHref&&(t.href=this.__fontHref),t}__wrapTextLink(e,t){if(e.href){var i=this.__createElement(\"a\");return i.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",e.href),i.appendChild(t),i}return t}__applyText(e,t,i,n){var r,s,o=this.__parseFont(),a=this.__closestGroupOrSvg(),c=this.__createElement(\"text\",{\"font-family\":o.family,\"font-size\":o.size,\"font-style\":o.style,\"font-weight\":o.weight,\"text-decoration\":o.decoration,x:t,y:i,\"text-anchor\":(r=this.textAlign,s={left:\"start\",right:\"end\",center:\"middle\",start:\"start\",end:\"end\"},s[r]||s.start),\"dominant-baseline\":Su(this.textBaseline)},!0);c.appendChild(this.__document.createTextNode(e)),this.__currentElement=c,this.__applyStyleToCurrentElement(n),a.appendChild(this.__wrapTextLink(o,c))}fillText(e,t,i){this.__applyText(e,t,i,\"fill\")}strokeText(e,t,i){this.__applyText(e,t,i,\"stroke\")}measureText(e){return this.__ctx.font=this.font,this.__ctx.measureText(e)}arc(e,t,i,n,r,s){if(n!==r){(n%=2*Math.PI)===(r%=2*Math.PI)&&(r=(r+2*Math.PI-.001*(s?-1:1))%(2*Math.PI));var o=e+i*Math.cos(r),a=t+i*Math.sin(r),c=e+i*Math.cos(n),l=t+i*Math.sin(n),h=s?0:1,d=0,u=r-n;u<0&&(u+=2*Math.PI),d=s?u>Math.PI?0:1:u>Math.PI?1:0,this.lineTo(c,l),this.__addPathCommand(ku(\"A {rx} {ry} {xAxisRotation} {largeArcFlag} {sweepFlag} {endX} {endY}\",{rx:i,ry:i,xAxisRotation:0,largeArcFlag:d,sweepFlag:h,endX:o,endY:a})),this.__currentPosition={x:o,y:a}}}clip(){var e=this.__closestGroupOrSvg(),t=this.__createElement(\"clipPath\"),i=Iu(this.__ids),n=this.__createElement(\"g\");this.__applyCurrentDefaultPath(),e.removeChild(this.__currentElement),t.setAttribute(\"id\",i),t.appendChild(this.__currentElement),this.__defs.appendChild(t),e.setAttribute(\"clip-path\",ku(\"url(#{id})\",{id:i})),e.appendChild(n),this.__currentElement=n}drawImage(){var e,t,i,n,r,s,o,a,c,l,h,d,u,f=Array.prototype.slice.call(arguments),p=f[0],g=0,m=0;if(3===f.length)e=f[1],t=f[2],i=r=p.width,n=s=p.height;else if(5===f.length)e=f[1],t=f[2],i=f[3],n=f[4],r=p.width,s=p.height;else{if(9!==f.length)throw new Error(\"Invalid number of arguments passed to drawImage: \"+arguments.length);g=f[1],m=f[2],r=f[3],s=f[4],e=f[5],t=f[6],i=f[7],n=f[8]}o=this.__closestGroupOrSvg(),this.__currentElement;var w=\"translate(\"+e+\", \"+t+\")\";if(p instanceof Ru){if((a=p.getSvg().cloneNode(!0)).childNodes&&a.childNodes.length>1){for(c=a.childNodes[0];c.childNodes.length;)u=c.childNodes[0].getAttribute(\"id\"),this.__ids[u]=u,this.__defs.appendChild(c.childNodes[0]);if(l=a.childNodes[1]){var b,F=l.getAttribute(\"transform\");b=F?F+\" \"+w:w,l.setAttribute(\"transform\",b),o.appendChild(l)}}}else\"CANVAS\"!==p.nodeName&&\"IMG\"!==p.nodeName||((h=this.__createElement(\"image\")).setAttribute(\"width\",i),h.setAttribute(\"height\",n),h.setAttribute(\"preserveAspectRatio\",\"none\"),(g||m||r!==p.width||s!==p.height)&&((d=this.__document.createElement(\"canvas\")).width=i,d.height=n,d.getContext(\"2d\").drawImage(p,g,m,r,s,0,0,i,n),p=d),h.setAttribute(\"transform\",w),h.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",\"CANVAS\"===p.nodeName?p.toDataURL():p.getAttribute(\"src\")),o.appendChild(h))}createPattern(e,t){let i,n=this.__document.__createElement(\"pattern\"),r=Iu(this.__ids);return n.setAttribute(\"id\",r),n.setAttribute(\"width\",e.width),n.setAttribute(\"height\",e.height),\"CANVAS\"===e.nodeName||\"IMG\"===e.nodeName?(i=this.__createElement(\"image\"),i.setAttribute(\"width\",e.width),i.setAttribute(\"height\",e.height),i.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",\"CANVAS\"===e.nodeName?e.toDataURL():e.getAttribute(\"src\")),n.appendChild(i),this.__defs.appendChild(n)):e instanceof Ru&&(n.appendChild(e.__root.childNodes[1]),this.__defs.appendChild(n)),new Du(n,this)}setLineDash(e){e&&e.length>0?this.lineDash=e.join(\",\"):this.lineDash=null}drawFocusRing(){}createImageData(){}getImageData(){}putImageData(){}globalCompositeOperation(){}setTransform(){}}function Tu(e){if(e.startsWith(\"GCF\")||e.startsWith(\"GCA\")&&e.length>=13){return\"https://hgdownload.soe.ucsc.edu/hubs/\"+e.substring(0,3)+\"/\"+e.substring(4,7)+\"/\"+e.substring(7,10)+\"/\"+e.substring(10,13)+\"/\"+e+\"/hub.txt\"}}class Lu{static supportedTypes=new Set([\"bigBed\",\"bigWig\",\"bigGenePred\",\"vcfTabix\"]);static filterTracks=new Set([\"cytoBandIdeo\",\"assembly\",\"gap\",\"gapOverlap\",\"allGaps\",\"cpgIslandExtUnmasked\",\"windowMasker\"]);static async loadHub(e){const t=e.lastIndexOf(\"/\"),i=e.substring(0,t+1),n=await Pu(e);let r;if(\"genome\"===n[1].type){const e=n[1];if(e.hasProperty(\"groups\")){const t=i+e.getProperty(\"groups\");r=await Pu(t)}if(e.hasProperty(\"chromSizes\")){const t=i+e.getProperty(\"chromSizes\"),n=await async function(e){try{const t=(await fetch(e,{method:\"HEAD\"})).headers;return t.has(\"content-length\")?t.get(\"content-length\"):null}catch(e){return null}}(t);null!==n&&Number.parseInt(n)<1e6&&e.setProperty(\"chromSizesURL\",t)}}return new Lu(e,n,r)}constructor(e,t,i){this.url=e;const n=e.lastIndexOf(\"/\");if(this.baseURL=e.substring(0,n+1),\"hub\"!==t[0].type)throw Error(\"Unexpected hub.txt file -- does the first line start with 'hub'?\");if(this.hubStanza=t[0],\"on\"!==this.hubStanza.getProperty(\"useOneFile\"))throw Error(\"Only 'useOneFile' hubs are currently supported\");if(t.length<2)throw Error(\"Expected at least 2 stanzas, hub and genome\");if(\"genome\"!==t[1].type)throw Error(`Unexpected hub file -- expected \"genome\" stanza but found \"${t[1].type}\"`);this.genomeStanza=t[1],this.trackStanzas=[];for(let e=2;e0?e.substring(0,t):e}}this.genomeStanza.hasProperty(\"blat\")&&(r.blat=this.baseURL+this.genomeStanza.getProperty(\"blat\")),this.genomeStanza.hasProperty(\"chromAliasBb\")&&(r.chromAliasBbURL=this.baseURL+this.genomeStanza.getProperty(\"chromAliasBb\")),this.genomeStanza.hasProperty(\"chromAlias\")&&(r.aliasURL=this.baseURL+this.genomeStanza.getProperty(\"chromAlias\")),this.genomeStanza.hasProperty(\"twoBitBptURL\")&&(r.twoBitBptURL=this.baseURL+this.genomeStanza.getProperty(\"twoBitBptURL\")),this.genomeStanza.hasProperty(\"twoBitBptUrl\")&&(r.twoBitBptURL=this.baseURL+this.genomeStanza.getProperty(\"twoBitBptUrl\")),e.includeChromSizes&&this.genomeStanza.hasProperty(\"chromSizes\")&&(r.chromSizesURL=this.baseURL+this.genomeStanza.getProperty(\"chromSizes\")),this.hubStanza.hasProperty(\"longLabel\")?r.description=this.hubStanza.getProperty(\"longLabel\").replace(\"/\",\"\\n\"):(r.description=r.id,this.genomeStanza.hasProperty(\"description\")&&(r.description+=`\\n${this.genomeStanza.getProperty(\"description\")}`),this.genomeStanza.hasProperty(\"organism\")&&(r.description+=`\\n${this.genomeStanza.getProperty(\"organism\")}`),this.genomeStanza.hasProperty(\"scientificName\")&&(r.description+=`\\n${this.genomeStanza.getProperty(\"scientificName\")}`),this.genomeStanza.hasProperty(\"htmlPath\")&&(r.infoURL=this.baseURL+this.genomeStanza.getProperty(\"htmlPath\")));const s=this.trackStanzas.filter((e=>\"cytoBandIdeo\"===e.name&&e.hasProperty(\"bigDataUrl\")));s.length>0&&(r.cytobandBbURL=this.baseURL+s[0].getProperty(\"bigDataUrl\"));return r.tracks=this.#g((e=>!Lu.filterTracks.has(e.name)&&\"hide\"!==e.getProperty(\"visibility\"))),r}getGroupedTrackConfigurations(){const e=new Map;for(let t of this.#g()){if(\"cytoBandIdeo\"===t.name)continue;const i=t.group||\"other\";e.has(i)?e.get(i).push(t):e.set(i,[t])}const t=this.groupStanzas?new Map(this.groupStanzas.map((e=>[e.getProperty(\"name\"),e]))):new Map;return Array.from(e.keys()).map((i=>({label:t.has(i)?t.get(i).getProperty(\"label\"):i,tracks:e.get(i)})))}#g(e){return this.trackStanzas.filter((t=>Lu.supportedTypes.has(t.format)&&t.hasProperty(\"bigDataUrl\")&&(!e||e(t)))).map((e=>this.#m(e)))}#m(e){const t=e.format,i={id:e.getProperty(\"track\"),name:e.getProperty(\"shortLabel\"),format:t,url:this.baseURL+e.getProperty(\"bigDataUrl\"),displayMode:e.displayMode};if(\"vcfTabix\"===t&&(i.indexURL=i.url+\".tbi\"),e.hasProperty(\"longLabel\")&&e.hasProperty(\"html\")?(i.description&&(i.description+=\"
\"),i.description=`${e.getProperty(\"longLabel\")}`):e.hasProperty(\"longLabel\")&&(i.description=e.getProperty(\"longLabel\")),e.hasProperty(\"autoScale\")&&(i.autoscale=\"on\"===e.getProperty(\"autoScale\").toLowerCase()),e.hasProperty(\"maxHeightPixels\")){const t=e.getProperty(\"maxHeightPixels\").split(\":\");i.maxHeight=Number.parseInt(t[0]),i.height=Number.parseInt(t[1]),i.minHeight=Number.parseInt(t[2])}if(e.hasProperty(\"color\")){const t=e.getProperty(\"color\");i.color=t.indexOf(\",\")>0?`rgb(${t})`:t}if(e.hasProperty(\"altColor\")){const t=e.getProperty(\"altColor\");i.altColor=t.indexOf(\",\")>0?`rgb(${t})`:t}if(e.hasProperty(\"viewLimits\")){const t=e.getProperty(\"viewLimits\").split(\":\");let n,r;t.length>1&&(n=Number.parseInt(t[0]),r=Number.parseInt(t[1])),Number.isNaN(r)||Number.isNaN(n)?console.warn(`Unexpected viewLimits value in track line: ${properties.viewLimits}`):(i.min=n,i.max=r)}if(e.hasProperty(\"itemRgb\"),\"hide\"===e.getProperty(\"visibility\")&&(i.visible=!1),e.hasProperty(\"url\")&&(i.infoURL=e.getProperty(\"url\")),e.hasProperty(\"searchIndex\")&&(i.searchIndex=e.getProperty(\"searchIndex\")),e.hasProperty(\"searchTrix\")&&(i.trixURL=this.baseURL+e.getProperty(\"searchTrix\")),e.hasProperty(\"group\")&&(i.group=e.getProperty(\"group\"),this.groupPriorityMap&&this.groupPriorityMap.has(i.group))){const e=this.groupPriorityMap.get(i.group)+1;i.order=e,this.groupPriorityMap.set(i.group,e)}return i}}function zu(e){const t=e.indexOf(\" \");return t>0?e.substring(0,t):e}class Hu{properties=new Map;constructor(e,t){this.type=e,this.name=t}setProperty(e,t){this.properties.set(e,t)}getProperty(e){return this.properties.has(e)?this.properties.get(e):this.parent?this.parent.getProperty(e):void 0}hasProperty(e){return!!this.properties.has(e)||!!this.parent&&this.parent.hasProperty(e)}get format(){const e=this.getProperty(\"type\");if(e)return zu(e)}get displayMode(){let e=this.getProperty(\"visibility\");if(!e)return\"COLLAPSED\";switch(e=e.toLowerCase(),e){case\"dense\":default:return\"COLLAPSED\";case\"pack\":return\"EXPANDED\";case\"squish\":return\"SQUISHED\"}}}async function Pu(e){const t=await fetch(e),i=(await t.text()).split(/\\n|\\r\\n|\\r/g),n=[];let r,s=!0;for(let e of i){const t=Ou(e),i=e.indexOf(\" \",t);if(i<0)s=!0;else{const o=e.substring(t,i).trim();if(o.startsWith(\"#\"))continue;const a=e.substring(i+1).trim();if(s){const e=new Hu(o,a);n.push(e),r=e,s=!1}r.setProperty(o,a)}}return function(e){const t=new Map;for(let i of e)t.set(i.name,i);for(let i of e)if(i.properties.has(\"parent\")){const e=zu(i.properties.get(\"parent\"));i.parent=t.get(e)}return e}(n)}function Ou(e){let t=0;for(t=0;t=13)try{const e=Tu(i);t=(await Lu.loadHub(e)).getGenomeConfig()}catch(e){console.error(e)}t||e.present(new Error(`Unknown genome id: ${i}`),void 0)}return t}return t}};let qu,Vu,Qu=0,ju=0,Wu=[];class Gu extends xu{constructor(e,t,i,n){super(e,t,i,n)}initializationHelper(){this.$spinner=Bt(\"
\",{class:\"igv-loading-spinner-container\"}),this.$viewport.append(this.$spinner),this.$spinner.append(Bt(\"
\"));const e=this.trackView.track;\"sequence\"!==e.type&&(this.$zoomInNotice=this.createZoomInNotice(this.$viewport)),\"sequence\"!==e.id&&(this.$trackLabel=Bt('
'),this.$viewport.append(this.$trackLabel),this.setTrackLabel(e.name||\"\"),!1===this.browser.doShowTrackLabels&&this.$trackLabel.hide(),this.trackView.track.height&&this.setHeight(this.trackView.track.height)),this.stopSpinner(),this.addMouseHandlers()}setContentHeight(e){super.setContentHeight(e),this.featureCache&&(this.featureCache.redraw=!0)}setTrackLabel(e){this.$trackLabel.empty(),this.$trackLabel.html(e);const t=this.$trackLabel.text();this.$trackLabel.attr(\"title\",t)}startSpinner(){this.$spinner.show()}stopSpinner(){this.$spinner&&this.$spinner.hide()}checkZoomIn(){if(this.trackView.track&&\"sequence\"===this.trackView.track.type&&this.referenceFrame.bpPerPixel>10)return Bt(this.canvas).remove(),this.canvas=void 0,!1;if(!this.viewIsReady())return!1;if((()=>{if(\"all\"===this.referenceFrame.chr.toLowerCase())return!this.trackView.track.supportsWholeGenome;{const e=this.trackView.track.visibilityWindow;return void 0!==e&&e>0&&this.referenceFrame.bpPerPixel*this.$viewport.width()>e}})()){if(this.canvas&&(Bt(this.canvas).remove(),this.canvas=void 0),this.trackView.track.autoHeight){const e=this.trackView.minHeight||0;this.setContentHeight(e)}return this.$zoomInNotice&&this.$zoomInNotice.show(),!1}return this.$zoomInNotice&&this.$zoomInNotice.hide(),!0}shift(){const e=this.referenceFrame;this.canvas&&this.canvas._data&&this.canvas._data.referenceFrame.chr===this.referenceFrame.chr&&this.canvas._data.bpPerPixel===e.bpPerPixel&&(this.canvas._data.pixelShift=Math.round((this.canvas._data.bpStart-e.start)/e.bpPerPixel),this.canvas.style.left=this.canvas._data.pixelShift+\"px\")}genomicRange(){return{start:this.referenceFrame.start,end:this.referenceFrame.start+this.referenceFrame.bpPerPixel*this.$viewport.width()}}setTop(e){if(super.setTop(e),this.canvas){const t=this.$viewport.height(),i=e+this.canvas._data.pixelTop,n=i+this.canvas._data.pixelHeight;(i>0||n0)for(let n of i.roiSets){const i=await n.getFeatures(t,s,o,e.bpPerPixel);r.push({track:n,features:i})}const a=i&&i.resolutionAware,c=this.windowFunction;return this.featureCache=new $u(t,s,o,e.bpPerPixel,n,r,a,c),this.loading=!1,this.hideMessage(),this.stopSpinner(),this.featureCache}}catch(e){this.trackView&&!0!==this.trackView.disposed&&(this.showMessage(\"Error loading track data\"),this.browser.alert.present(e),console.error(e))}finally{this.loading=!1,this.stopSpinner()}}}get track(){return this.trackView.track}get windowFunction(){return this.track?this.track.windowFunction:void 0}repaintDimensions(){const e=Uu.isWholeGenomeView(this.referenceFrame.chr),t=e?this.$viewport.width():3*this.$viewport.width(),i=this.referenceFrame.bpPerPixel;return{bpStart:this.referenceFrame.start-(e?0:this.$viewport.width()*i),bpEnd:e?Number.MAX_SAFE_INTEGER:this.referenceFrame.start+2*this.$viewport.width()*i+1,pixelWidth:t}}repaint(){if(void 0===this.featureCache)return;const{features:e,roiFeatures:t}=this.featureCache,{bpStart:i,bpEnd:n,pixelWidth:r}=this.repaintDimensions(),s=this.$viewport.height(),o=this.getContentHeight(),a=t?Math.max(o,s):o,c=Math.min(a,3*s);if(0===r||0===c)return void(this.canvas&&Bt(this.canvas).remove());const l=Math.max(0,-this.contentTop-Math.floor(c/3)),h=this.referenceFrame.bpPerPixel,d=Math.round((i-this.referenceFrame.start)/h),u=(this.contentTop||0)+l,f=document.createElement(\"canvas\");f.style.position=\"relative\",f.style.display=\"block\",f.style.width=r+\"px\",f.style.height=c+\"px\",f.style.left=d+\"px\",f.style.top=u+\"px\";const p=\"FILL\"===this.trackView.track.displayMode||!1!==this.trackView.track.supportHiDPI?window.devicePixelRatio:1;f.width=p*r,f.height=p*c;const g=f.getContext(\"2d\");g.scale(p,p),g.translate(0,-l);const m={context:g,pixelXOffset:d,pixelWidth:r,pixelHeight:c,pixelTop:l,bpStart:i,bpEnd:n,bpPerPixel:h,pixelShift:d,windowFunction:this.windowFunction,referenceFrame:this.referenceFrame,selection:this.selection,viewport:this,viewportWidth:this.$viewport.width()};this.draw(m,e,t),this.canvas&&Bt(this.canvas).remove(),f._data=m,this.canvas=f,this.$viewport.append(Bt(f))}refresh(){if(!this.canvas||!this.featureCache)return;const e=this.canvas._data;e.context.clearRect(0,0,this.canvas.width,this.canvas.height);const{features:t,roiFeatures:i}=this.featureCache;this.draw(e,t,i)}draw(e,t,i){if(t&&(e.features=t,this.trackView.track.draw(e)),i&&i.length>0)for(let t of i)e.features=t.features,t.track.draw(e)}containsPosition(e,t){return this.referenceFrame.chr===e&&t>=this.referenceFrame.start&&t<=this.referenceFrame.calculateEnd(this.getWidth())}isLoading(){return this.loading}savePNG(){if(!this.canvas)return;const e=this.canvas._data,t=e?e.pixelTop:0,i=window.devicePixelRatio,n=this.$viewport.width()*i,r=this.$viewport.height()*i,s=-Bt(this.canvas).position().left*i,o=(-this.contentTop-t)*i,a=this.canvas.getContext(\"2d\").getImageData(s,o,n,r),c=document.createElement(\"canvas\"),l=c.getContext(\"2d\");c.width=a.width,c.height=a.height,l.putImageData(a,0,0);Pt((this.$trackLabel.text()?this.$trackLabel.text():\"image\")+\".png\",c.toDataURL(\"image/png\"))}saveSVG(){let{width:e,height:t}=this.browser.columnContainer.getBoundingClientRect();const i=new Ru({width:e,height:8e3,backdropColor:\"white\",multiLocusGap:0,viewbox:{x:0,y:0,width:e,height:8e3}}),n={deltaX:32,deltaY:32};this.renderSVGContext(i,n,!1),i.setHeight(t);const r=(this.trackView.track.name||this.trackView.track.id).replace(/\\W/g,\"\"),o=this.browser.referenceFrameList.indexOf(this.referenceFrame),a=i.getSerializedSvg(!0),c=URL.createObjectURL(new Blob([a],{type:\"application/octet-stream\"}));Pt(`${`${r}_referenceFrame_${o}_guid_${s()}`}.svg`,c)}renderSVGContext(e,{deltaX:t,deltaY:i},n=!0){if(!(this.$zoomInNotice&&this.$zoomInNotice.is(\":visible\"))){const{width:n,height:r}=this.$viewport.get(0).getBoundingClientRect(),o=`${(this.trackView.track.name||this.trackView.track.id).replace(/\\W/g,\"\")}_referenceFrame_${this.browser.referenceFrameList.indexOf(this.referenceFrame)}_guid_${s()}`,a=t,c=i+this.contentTop,l=-this.contentTop;e.saveWithTranslationAndClipRect(o,a,c,n,r,l);const{start:h,bpPerPixel:d}=this.referenceFrame,u=Math.round((h-this.referenceFrame.start)/d),f={context:e,viewport:this,referenceFrame:this.referenceFrame,top:l,pixelTop:l,pixelWidth:n,pixelHeight:r,pixelXOffset:u,pixelShift:u,bpStart:h,bpEnd:h+n*d,bpPerPixel:d,viewportWidth:n,selection:this.selection},p=this.featureCache?this.featureCache.features:void 0,g=this.featureCache?this.featureCache.roiFeatures:void 0;this.draw(f,p,g),e.restore()}if(n&&this.$trackLabel&&this.browser.doShowTrackLabels){const{x:n,y:r,width:s,height:o}=((e,t)=>{const{x:i,y:n,width:r,height:s}=e.getBoundingClientRect(),{x:o,y:a,width:c,height:l}=t.getBoundingClientRect();return{x:o-i,y:a-n,width:c,height:l}})(this.$viewport.get(0),this.$trackLabel.get(0));this.renderTrackLabelSVG(e,t+n,i+r,s,o)}}renderTrackLabelSVG(e,t,i,n,r){const o=`${(this.trackView.track.name||this.trackView.track.id).replace(/\\W/g,\"\")}_track_label_guid_${s()}`;e.saveWithTranslationAndClipRect(o,t,i,n,r,0),e.fillStyle=\"white\",e.fillRect(0,0,n,r),e.font=\"12px Arial\",e.fillStyle=\"rgb(68, 68, 68)\";const{width:a}=e.measureText(this.$trackLabel.text()),c=.25*(n-a),l=.7*(r-12);e.fillText(this.$trackLabel.text(),c,r-l),e.strokeStyle=\"rgb(68, 68, 68)\",e.strokeRect(0,0,n,r),e.restore()}get cachedFeatures(){return this.featureCache?this.featureCache.features:[]}clearCache(){this.featureCache=void 0,this.canvas&&(this.canvas._data=void 0)}async getFeatures(e,t,i,n,r){if(this.featureCache&&this.featureCache.containsRange(t,i,n,r,this.windowFunction))return this.featureCache.features;if(\"function\"==typeof e.getFeatures){const s=await e.getFeatures(t,i,n,r,this);return this.checkContentHeight(s),s}}needsRepaint(){if(!this.canvas)return!0;const e=this.canvas._data;return!e||this.referenceFrame.starte.bpEnd||this.referenceFrame.chr!==e.referenceFrame.chr||this.referenceFrame.bpPerPixel!=e.bpPerPixel||this.windowFunction!=e.windowFunction}needsReload(){if(!this.featureCache)return!0;const{chr:e,bpPerPixel:t}=this.referenceFrame,{bpStart:i,bpEnd:n}=this.repaintDimensions();return!this.featureCache.containsRange(e,i,n,t,this.windowFunction)}createZoomInNotice(e){const t=Bt(\"
\",{class:\"igv-zoom-in-notice-container\"});e.append(t);const i=Bt(\"
\");return t.append(i),i.text(\"Zoom in to see features\"),t.hide(),t}viewIsReady(){return this.browser&&this.browser.referenceFrameList&&this.referenceFrame}addMouseHandlers(){const e=this.$viewport.get(0);this.addViewportContextMenuHandler(e);const t=e=>{this.enableClick=!0,this.browser.mouseDownOnViewport(e,this),r(e)};e.addEventListener(\"mousedown\",t),e.addEventListener(\"touchstart\",t);const i=e=>{this.browser.dragObject||this.browser.isScrolling?(this.browser.cancelTrackPan(),this.enableClick=!1):(this.browser.cancelTrackPan(),this.browser.endTrackDrag())};e.addEventListener(\"mouseup\",i),e.addEventListener(\"touchend\",i),\"function\"==typeof this.trackView.track.hoverText&&e.addEventListener(\"mousemove\",(e=>{if(0===e.buttons&&Date.now()-ju>100){ju=Date.now();const t=this.createClickState(e);if(t){const e=this.trackView.track.hoverText(t);e?this.$viewport[0].setAttribute(\"title\",e):this.$viewport[0].removeAttribute(\"title\")}}})),this.addViewportClickHandler(this.$viewport.get(0)),this.trackView.track.name&&\"sequence\"!==this.trackView.track.config.type&&this.addTrackLabelClickHandler(this.$trackLabel.get(0))}addViewportContextMenuHandler(e){e.addEventListener(\"contextmenu\",(e=>{if(this.browser.dragObject)return!1;const t=this.createClickState(e);if(void 0===t)return!1;e.preventDefault();let i=[];if(\"function\"==typeof this.trackView.track.contextMenuItemList){const e=this.trackView.track.contextMenuItemList(t);e&&(i=e)}i.length>0&&i.push({label:Bt(\"
\")}),i.push({label:\"Save Image (PNG)\",click:()=>this.savePNG()}),i.push({label:\"Save Image (SVG)\",click:()=>this.saveSVG()}),this.browser.menuPopup.presentTrackContextMenu(e,i)}))}addViewportClickHandler(e){e.addEventListener(\"click\",(e=>{if(this.enableClick&&this.canvas){if(3===e.which||e.ctrlKey)return;if(this.browser.dragObject||this.browser.isScrolling)return;e.preventDefault();const t=a(e,this.$viewport.get(0)).x,i=a(e,this.canvas).x,n=this.referenceFrame;Math.floor(n.start+n.toBP(i));const r=Date.now();if(r-Que));e[this.browser.referenceFrameList.indexOf(this.referenceFrame)]=t,i=e.join(\" \")}this.browser.search(i)}else this.browser.zoomWithScaleFactor(.5,e,this.referenceFrame)}else\"function\"==typeof this.trackView.track.popupData&&(qu=setTimeout((()=>{const t=this.getPopupContent(e);if(t)if(!1===e.shiftKey){if(Vu&&Vu.dispose(),Wu.length>0){for(const e of Wu)e.dispose();Wu.length=0}Vu=new fc(this.$viewport.get(0).parentElement,!0,void 0,(()=>{Vu.dispose()})),Vu.presentContentWithEvent(e,t)}else{let i=new fc(this.$viewport.get(0).parentElement,!0,void 0,(()=>{const e=Wu.indexOf(i);Wu.splice(e,1),i.dispose()}));Wu.push(i),i.presentContentWithEvent(e,t)}window.clearTimeout(qu),qu=void 0}),this.browser.constants.doubleClickDelay));Qu=r}}))}addTrackLabelClickHandler(e){e.addEventListener(\"click\",(e=>{e.stopPropagation();const{track:t}=this.trackView;let i;\"function\"==typeof t.description?i=t.description():t.description&&(i=`
${t.description}
`),i&&(void 0===this.popover&&(this.popover=new fc(this.browser.columnContainer,!0,t.name||\"\",void 0)),this.popover.presentContentWithEvent(e,i))}))}createClickState(e){if(!this.canvas)return;const t=this.referenceFrame,i=a(e,this.$viewport.get(0)),n=a(e,this.canvas),r=t.start+t.toBP(i.x);return{event:e,viewport:this,referenceFrame:t,genomicLocation:r,y:i.y-this.contentTop,canvasX:n.x,canvasY:n.y}}getPopupContent(e){const t=this.createClickState(e);if(void 0===t)return;let i=this.trackView.track;const n=i.popupData(t),r=this.browser.fireEvent(\"trackclick\",[i,n]);let s;return void 0===r||!0===r?n&&n.length>0&&(s=n.map((e=>{if(e.name){const t=`${e.name}   ${e.value}`;return`
${t}
`}return\"
\"===e?e:e.html?e.html:`
${e}
`})).join(\"\")):\"string\"==typeof r&&(s=r),s}dispose(){this.popover&&this.popover.dispose(),super.dispose()}}class $u{constructor(e,t,i,n,r,s,o,a){this.chr=e,this.bpStart=t,this.bpEnd=i,this.bpPerPixel=n,this.features=r,this.roiFeatures=s,this.multiresolution=o,this.windowFunction=a}containsRange(e,t,i,n,r){if(r&&r!==this.windowFunction)return!1;const s=this.multiresolution?this.bpPerPixel/n:1;return t>=this.bpStart&&i<=this.bpEnd&&e===this.chr&&s>.5&&s<2}overlapsRange(e,t,i){return this.chr===e&&i>=this.bpStart&&t<=this.bpEnd}}const Ku=1/16,Yu=function(e,t){const{r:i,g:n,b:r}=ro[e];return`rgba(${i},${n},${r},${t})`}(\"nickel\",Ku),Xu=Yu;class Zu{constructor(e,t){if(this.url=e.url,e.name&&(this.name=e.name),this.isUserDefined=e.isUserDefined,e.featureSource)this.featureSource=e.featureSource;else if(e.features)this.featureSource=new ef(e.features,t);else{if(!e.format)throw Error(\"ROI configuration must define either features or file format\");this.featureSource=Gd(e,t)}if(e.color&&!e.color.startsWith(\"rgba\")&&(e.color=_s.addAlpha(e.color,Ku)),!0===this.isUserDefined)this.color=e.color||Xu,this.headerColor=\"rgba(155,185,129)\";else{this.color=e.color||Yu,this.headerColor=\"rgb(190,190,190)\";const[t,i,n,r]=function(e){if(e.startsWith(\"rgba(\")){const[t,i]=e.split(\"(\"),[n]=i.split(\")\");return n.split(\",\").map(((e,t)=>t<3?parseInt(e):parseFloat(e)))}}(this.color);this.headerColor=`rgba(${t},${i},${n},1)`}delete e.isVisible}async getFeatures(e,t,i){return this.featureSource.getFeatures({chr:e,start:t,end:i})}async getAllFeatures(){return\"function\"==typeof this.featureSource.getAllFeatures?await this.featureSource.getAllFeatures():{}}addFeature(e){this.featureSource.addFeature(e)}removeFeature(e){this.featureSource.removeFeature(e)}toJSON(){if(this.url)return{name:this.name,color:this.color,url:this.url,isUserDefined:this.isUserDefined,isVisible:this.isVisible};{const e=this.featureSource.getAllFeatures(),t=[];for(let i of Object.keys(e))for(let n of e[i])t.push(n);return{name:this.name,color:this.color,features:t,isUserDefined:this.isUserDefined,isVisible:this.isVisible}}}dispose(){for(let e of Object.keys(this))this[e]=void 0}}function Ju(e,t,i,n){let r=Math.round((e-i)/n);let s=Math.round((t-i)/n)-r;return s<3&&(s=3,r-=1),{x:r,width:s}}class ef{constructor(e,t){this.featureMap={},this.genome=t;for(let i of e){const e=t?t.getChromosomeName(i.chr):i.chr;let n=this.featureMap[e];n||(n=[],this.featureMap[e]=n),n.push(i)}for(let e of Object.keys(this.featureMap))this.featureMap[e].sort(((e,t)=>e.start-t.start))}async getFeatures({chr:e,start:t,end:i}){if(\"all\"===e.toLowerCase())return Gl(this.featureMap,this.genome);{const n=this.featureMap[e];return n?n.filter((e=>e.end>t&&e.starte.start-t.start))}removeFeature({chr:e,start:t,end:i}){if(this.featureMap[e]){const n=`${e}-${t}-${i}`;this.featureMap[e]=this.featureMap[e].filter((e=>n!==`${e.chr}-${e.start}-${e.end}`)),0===this.featureMap[e].length&&delete this.featureMap[e]}}}class tf{constructor(t,i,n,r){this.rulerViewport=t,this.rulerSweeper=e({class:\"igv-ruler-sweeper\"}),i.appendChild(this.rulerSweeper),this.browser=n,this.referenceFrame=r,this.isMouseHandlers=void 0,this.addBrowserObserver()}addBrowserObserver(){this.boundObserverHandler=(()=>{this.referenceFrame&&(Uu.isWholeGenomeView(this.referenceFrame.chr)?this.removeMouseHandlers():this.addMouseHandlers())}).bind(this),this.browser.on(\"locuschange\",this.boundObserverHandler)}removeBrowserObserver(){this.browser.off(\"locuschange\",this.boundObserverHandler)}addMouseHandlers(){if(!0===this.isMouseHandlers)return;let e,t,i,n,r,s;this.boundContentMouseDownHandler=function(s){e=!0,t=!0;const{x:o}=a(s,this.rulerViewport.contentDiv);n=i=o,r=1,this.rulerSweeper.style.display=\"block\",this.rulerSweeper.style.backgroundColor=!0===s.shiftKey?Xu:\"rgba(68, 134, 247, 0.25)\",this.rulerSweeper.style.left=`${n}px`,this.rulerSweeper.style.width=`${r}px`}.bind(this),this.rulerViewport.contentDiv.addEventListener(\"mousedown\",this.boundContentMouseDownHandler),this.boundDocumentMouseMoveHandler=function(o){let c;if(e&&t){const{x:e}=a(o,this.rulerViewport.contentDiv);c=Math.max(Math.min(e,this.rulerViewport.contentDiv.clientWidth),0),s=c-i,r=Math.abs(s),this.rulerSweeper.style.width=`${r}px`,s<0&&(n=i+s,this.rulerSweeper.style.left=`${n}px`)}}.bind(this),document.addEventListener(\"mousemove\",this.boundDocumentMouseMoveHandler),this.boundDocumentMouseUpHandler=function(i){let s;if(!0===e&&!0===t&&(e=t=void 0,this.rulerSweeper.style.display=\"none\",r>1)){s={start:Math.floor(this.referenceFrame.calculateEnd(n)),end:Math.floor(this.referenceFrame.calculateEnd(n+r))};!0===i.shiftKey?this.browser.roiManager.updateUserDefinedROISet(Object.assign({chr:this.referenceFrame.chr},s)):(rc(this.browser.genome.getChromosome(this.referenceFrame.chr).bpLength,s,this.browser.minimumBases()),function(e,t,i){e.start=Math.round(t.start),e.end=Math.round(t.end),e.bpPerPixel=(e.end-e.start)/i}(this.referenceFrame,s,this.rulerViewport.contentDiv.clientWidth),this.browser.updateViews(this.referenceFrame))}}.bind(this),document.addEventListener(\"mouseup\",this.boundDocumentMouseUpHandler),this.isMouseHandlers=!0}removeMouseHandlers(){this.rulerViewport.contentDiv.removeEventListener(\"mousedown\",this.boundContentMouseDownHandler),document.removeEventListener(\"mousemove\",this.boundDocumentMouseMoveHandler),document.removeEventListener(\"mouseup\",this.boundDocumentMouseUpHandler),this.isMouseHandlers=!1}dispose(){this.removeBrowserObserver(),this.removeMouseHandlers(),this.rulerSweeper.remove()}}function nf(e){if(rf[e])return rf[e];if(rf[\"chr\"+e]){const t=rf[\"chr\"+e];return rf[e]=t,t}{const t=_s.randomRGB(0,255);return rf[e]=t,t}}const rf={chrX:\"rgb(204, 153, 0)\",chrY:\"rgb(153, 204, 0)\",chrUn:\"rgb(50, 50, 50)\",chr1:\"rgb(80, 80, 255)\",chrI:\"rgb(139, 155, 187)\",chr2:\"rgb(206, 61, 50)\",chrII:\"rgb(206, 61, 50)\",chr2a:\"rgb(216, 71, 60)\",chr2b:\"rgb(226, 81, 70)\",chr3:\"rgb(116, 155, 88)\",chrIII:\"rgb(116, 155, 88)\",chr4:\"rgb(240, 230, 133)\",chrIV:\"rgb(240, 230, 133)\",chr5:\"rgb(70, 105, 131)\",chr6:\"rgb(186, 99, 56)\",chr7:\"rgb(93, 177, 221)\",chr8:\"rgb(128, 34, 104)\",chr9:\"rgb(107, 215, 107)\",chr10:\"rgb(213, 149, 167)\",chr11:\"rgb(146, 72, 34)\",chr12:\"rgb(131, 123, 141)\",chr13:\"rgb(199, 81, 39)\",chr14:\"rgb(213, 143, 92)\",chr15:\"rgb(122, 101, 165)\",chr16:\"rgb(228, 175, 105)\",chr17:\"rgb(59, 27, 83)\",chr18:\"rgb(205, 222, 183)\",chr19:\"rgb(97, 42, 121)\",chr20:\"rgb(174, 31, 99)\",chr21:\"rgb(231, 199, 111)\",chr22:\"rgb(90, 101, 94)\",chr23:\"rgb(204, 153, 0)\",chr24:\"rgb(153, 204, 0)\",chr25:\"rgb(51, 204, 0)\",chr26:\"rgb(0, 204, 51)\",chr27:\"rgb(0, 204, 153)\",chr28:\"rgb(0, 153, 204)\",chr29:\"rgb(10, 71, 255)\",chr30:\"rgb(71, 117, 255)\",chr31:\"rgb(255, 194, 10)\",chr32:\"rgb(255, 209, 71)\",chr33:\"rgb(153, 0, 51)\",chr34:\"rgb(153, 26, 0)\",chr35:\"rgb(153, 102, 0)\",chr36:\"rgb(128, 153, 0)\",chr37:\"rgb(51, 153, 0)\",chr38:\"rgb(0, 153, 26)\",chr39:\"rgb(0, 153, 102)\",chr40:\"rgb(0, 128, 153)\",chr41:\"rgb(0, 51, 153)\",chr42:\"rgb(26, 0, 153)\",chr43:\"rgb(102, 0, 153)\",chr44:\"rgb(153, 0, 128)\",chr45:\"rgb(214, 0, 71)\",chr46:\"rgb(255, 20, 99)\",chr47:\"rgb(0, 214, 143)\",chr48:\"rgb(20, 255, 177)\"};let sf,of;class af extends Gu{constructor(e,t,i,n){super(e,t,i,n)}get contentDiv(){return this.$viewport.get(0)}initializationHelper(){let e;this.$multiLocusCloseButton=Bt(\"
\",{class:\"igv-multi-locus-close-button\"}),this.$viewport.append(this.$multiLocusCloseButton),this.$multiLocusCloseButton.get(0).appendChild(l(\"times-circle\")),this.$multiLocusCloseButton.click((()=>{this.browser.removeMultiLocusPanel(this.referenceFrame)})),this.$rulerLabel=Bt(\"
\",{class:\"igv-multi-locus-ruler-label\"}),this.$viewport.append(this.$rulerLabel),e=document.createElement(\"div\"),this.$rulerLabel.append(Bt(e)),this.$rulerLabel.get(0).addEventListener(\"click\",(async e=>{e.stopPropagation(),await this.browser.gotoMultilocusPanel(this.referenceFrame)})),this.$tooltip=Bt(\"
\",{class:\"igv-ruler-tooltip\"}),this.$tooltip.height(this.$viewport.height()),this.$viewport.append(this.$tooltip),this.$tooltipContent=Bt(\"
\"),this.$tooltip.append(this.$tooltipContent),this.rulerSweeper=new tf(this,this.$viewport.get(0).parentElement,this.browser,this.referenceFrame),this.attachMouseHandlers(Uu.isWholeGenomeView(this.referenceFrame.chr)),this.$tooltip.hide(),this.dismissLocusLabel()}presentLocusLabel(e){this.$multiLocusCloseButton.show(),this.$rulerLabel.show(),this.$rulerLabel.get(0).style.backgroundColor=nf(this.referenceFrame.chr);const t=this.$rulerLabel.get(0).querySelector(\"div\"),{width:i}=this.$rulerLabel.get(0).getBoundingClientRect();t.innerHTML=`${this.referenceFrame.getMultiLocusLabel(e)}`;const{width:n}=t.getBoundingClientRect();n/i>.5&&(t.innerHTML=`${this.referenceFrame.getMultiLocusLabelBPLengthOnly(e)}`)}dismissLocusLabel(){this.$rulerLabel.hide(),this.$multiLocusCloseButton.hide()}attachMouseHandlers(e){if(this.namespace=`.ruler_track_viewport_${this.browser.referenceFrameList.indexOf(this.referenceFrame)}`,this.$viewport.off(this.namespace),!0===e){const e=this.browser.referenceFrameList.indexOf(this.referenceFrame),t=`click${this.namespace}`;this.$viewport.on(t,(t=>{const{x:i}=a(t,this.$viewport.get(0)),n=Math.round(this.referenceFrame.start+this.referenceFrame.toBP(i));let r;const{chr:s}=this.browser.genome.getChromosomeCoordinate(n);if(1===this.browser.referenceFrameList.length)r=s;else{let t=this.browser.referenceFrameList.map((({locusSearchString:e})=>e));t[e]=s,r=t.join(\" \")}this.browser.search(r)})),this.$viewport.get(0).style.cursor=\"pointer\"}else this.$viewport.get(0).style.cursor=\"default\"}mouseMove(e){if(!0===this.browser.doShowCursorGuide){void 0===of?(of=this,this.$tooltip.show()):of.guid!==this.guid?(of.$tooltip&&of.$tooltip.hide(),this.$tooltip.show(),of=this):this.$tooltip.show();if(this.browser.isMultiLocusWholeGenomeView()||Uu.isWholeGenomeView(this.referenceFrame.chr))return void this.$tooltip.hide();const{x:t}=a(e,this.$viewport.get(0)),{start:i,end:n,bpPerPixel:r}=this.referenceFrame,s=Math.round(.5+i+Math.max(0,t)*r);this.$tooltipContent.text(Dt(s));const{width:o}=this.$tooltipContent.get(0).getBoundingClientRect(),{width:c}=this.$viewport.get(0).getBoundingClientRect();return this.$tooltip.css({left:`${ys.clamp(t,0,c-o)}px`}),clearTimeout(sf),sf=setTimeout((()=>{this.$tooltip&&this.$tooltip.hide()}),1e4),{start:i,bp:s,end:n}}}startSpinner(){}stopSpinner(){}dispose(){this.rulerSweeper.dispose(),super.dispose()}}class cf extends Gu{featureCache=new lf;constructor(e,t,i,n){super(e,t,i,n)}initializationHelper(){this.canvas=document.createElement(\"canvas\"),this.canvas.className=\"igv-ideogram-canvas\",this.$viewport.append(Bt(this.canvas)),this.ideogram_ctx=this.canvas.getContext(\"2d\"),this.addMouseHandlers()}async getFeatures(e,t,i,n){return this.featureCache.containsRange(e)?this.featureCache.get(e):this.loadFeatures()}async loadFeatures(){const e=this.referenceFrame.chr,t=await this.referenceFrame.genome.getCytobands(e);return this.featureCache.set(e,t),t}repaint(){if(void 0===this.featureCache)return;const{width:e,height:t}=this.$viewport[0].getBoundingClientRect();ko.configureHighDPICanvas(this.ideogram_ctx,e,t);const i=this.referenceFrame.chr,n=this.featureCache.get(i),r={context:this.ideogram_ctx,pixelWidth:e,pixelHeight:t,referenceFrame:this.referenceFrame,features:n};this.trackView.track.draw(r)}addMouseHandlers(){this.addViewportClickHandler(this.$viewport.get(0))}addViewportClickHandler(e){this.boundClickHandler=function(e){const{xNormalized:t,width:i}=a(e,this.ideogram_ctx.canvas),{bpLength:n}=this.browser.genome.getChromosome(this.referenceFrame.chr),r=this.referenceFrame.bpPerPixel*i/n;let s=t;s-r/2<0&&(s=r/2);s+r/2>1&&(s=1-r/2);const o=Math.round((s-r/2)*n),c=Math.round((s+r/2)*n);this.referenceFrame.start=o,this.referenceFrame.end=c,this.referenceFrame.bpPerPixel=(c-o)/i,this.browser.updateViews(this.referenceFrame,this.browser.trackViews,!0)}.bind(this),e.addEventListener(\"click\",this.boundClickHandler)}setWidth(e){this.$viewport.width(e)}renderSVGContext(e,{deltaX:t,deltaY:i},n=!0){const{width:r,height:o}=this.$viewport.get(0).getBoundingClientRect(),a=`ideogram_referenceFrame_${this.browser.referenceFrameList.indexOf(this.referenceFrame)}_guid_${s()}`,c=t,l=i+this.contentTop,h=-this.contentTop;e.saveWithTranslationAndClipRect(a,c,l,r,o,h),this.trackView.track.draw({context:e,pixelWidth:r,pixelHeight:o,referenceFrame:this.referenceFrame,features:this.featureCache.get(this.referenceFrame.chr)}),e.restore()}startSpinner(){}stopSpinner(){}}class lf{features=new Map;containsRange(e){return this.features.has(e)}set(e,t){this.features.set(e,t)}get(e){return this.features.get(e)}}function hf(e,t,i,n){if(\"ruler\"===e.track.type)return new af(e,t,i,n);if(\"ideogram\"===e.track.id)return new cf(e,t,i,n);{const r=new Gu(e,t,i,n);return i.viewport=r,r}}const df=[\"rgb(255, 0, 0)\",\"rgb(0, 255, 0)\",\"rgb(0, 0, 255)\",\"rgb(255, 0, 255)\",\"rgb(0, 255, 255)\",\"rgb(128, 0, 128)\",\"rgb(255, 165, 0)\",\"rgb(255, 105, 180)\",\"rgb(255, 127, 80)\",\"rgb(220, 20, 60)\",\"rgb(255, 99, 71)\",\"rgb(173, 216, 230)\",\"rgb(144, 238, 144)\",\"rgb(224, 255, 255)\",\"rgb(250, 250, 210)\",\"rgb(152, 251, 152)\",\"rgb(70, 130, 180)\",\"rgb(102, 205, 170)\"].map((e=>{const[t,i,n]=e.split(\",\"),[r,s]=t.split(\"(\"),[o,a]=n.split(\")\");return[s,i,o]})),uf=so(\"magnesium\"),ff=[\"#sampleTable\",\"#sampleMapping\",\"#colors\"];class pf{static emptySpaceReplacement=\"|\";sampleDictionary={};attributeNames=[];sampleMappingDictionary={};colorDictionary={};attributeRangeLUT={};constructor(e){e.tracks.some((e=>\"function\"==typeof e.getSamples)).length>0&&e.sampleInfoControl.setButtonVisibility(!0),this.initialize()}initialize(){this.sampleInfoFiles=[],this.attributeNames=[],this.sampleDictionary={},this.sampleMappingDictionary={},this.colorDictionary={},this.attributeRangeLUT={},this.initialized=!1}get attributeCount(){return this.attributeNames?this.attributeNames.length:0}isInitialized(){return this.initialized}hasAttributes(){return this.attributeCount>0}getAttributes(e){const t=0===Object.keys(this.sampleMappingDictionary)?e:this.sampleMappingDictionary[e]||e;return this.sampleDictionary[t]}async loadSampleInfoFile(e){try{const t=await Vs.loadString(e);this.#w(t),this.sampleInfoFiles.push(e)}catch(e){console.error(e.message)}}#w(e){const t=function(e){const t={},i=e.split(/\\r?\\n|\\r/).map((e=>e.trim())).filter((e=>\"\"!==e));let n;ff.includes(i[0])||(n=\"#sampleTable\",t[n]=[]);for(const e of i)ff.includes(e)?(n=e,t[n]=[]):n&&!1===e.startsWith(\"#\")&&t[n].push(e);return t}(e);for(const[e,i]of Object.entries(t))switch(e){case\"#sampleTable\":this.#b(i);break;case\"#sampleMapping\":this.#F(i);break;case\"#colors\":this.#v(i)}this.initialized=!0}getAttributeColor(e,t){let i;if(\"-\"===t)i=so(\"snow\");else if(\"string\"==typeof t&&this.colorDictionary[t])i=this.colorDictionary[t]();else if(this.colorDictionary[e])i=this.colorDictionary[e](t);else if(\"string\"==typeof t)i=\"NA\"===t?uf:function(e){let t=0;for(let i=0;i>8*e&255;i.push(n)}return`rgb(${i.join(\", \")})`}(t);else{const[n,r]=this.attributeRangeLUT[e],s=.2,o=Math.max((t-n)/(r-n),s),[a,c,l]=df[Object.keys(this.attributeRangeLUT).indexOf(e)];i=`rgba(${a},${c},${l},${o})`}return i}getSortedSampleKeysByAttribute(e,t,i){i=i||1;const n=e.filter((e=>\"number\"==typeof this.getAttributes(e)[t])),r=e.filter((e=>\"string\"==typeof this.getAttributes(e)[t])),s=(e,n)=>{const r=this.getAttributes(e)[t],s=this.getAttributes(n)[t];return\"string\"==typeof r&&\"string\"==typeof s?i*r.localeCompare(s):\"number\"==typeof r&&\"number\"==typeof s?i*(r-s):void 0};return n.sort(s),r.sort(s),-1===i?[...n,...r]:[...r,...n]}toJSON(){const e=[];for(const t of this.sampleInfoFiles){const i={url:t},n=Kl.localFileInspection(i);e.push(n)}return e}#b(e){const t=e.shift().split(\"\\t\").filter((e=>e.length>0));t.shift();const i=t.map((e=>e.split(\" \").join(pf.emptySpaceReplacement))),n=e.filter((e=>e.length>0));let r;for(const e of n){const t=e.split(\"\\t\"),n=t.shift();void 0===r&&(r={}),r[n]={};for(let e=0;e\"number\"==typeof e,r=e=>\"string\"==typeof e;for(const e of Object.keys(i)){const t=i[e],s=new Set(t),o=Array.from(s);if(!0===o.some(r)&&!0===o.some(n)?i[e]=o.filter((e=>!r(e))):i[e]=o,!i[e].some(r)){const t=i[e].slice();i[e]=[Math.min(...t),Math.max(...t)]}}return i}(i,r);gf(this.attributeRangeLUT,s);const o=new Set(this.attributeNames);for(const e of i)o.has(e)||this.attributeNames.push(e);gf(this.sampleDictionary,r)}#F(e){for(const t of e){const[e,i]=t.split(\"\\t\");this.sampleMappingDictionary[e]=i}}#v(e){const t=(e,t,i)=>{let n;switch(t){case 0:n=e.split(\" \").join(pf.emptySpaceReplacement);break;case 1:n=e.includes(\":\")?e.split(\":\").map((e=>parseFloat(e))):e;break;case 2:case 3:n=`rgb(${e})`}return n},i=e.map((e=>e.split(\"\\t\").map(t))),n=i.filter((e=>3===e.length&&!e.includes(\"*\"))).filter((([e,t,i])=>!Array.isArray(t))),r={};for(const e of n){const[t,i,n]=e;void 0===r[t]&&(r[t]={}),r[t][i.toUpperCase()]=n}for(const[e,t]of Object.entries(r)){const i=Object.assign({},t);this.colorDictionary[e]=e=>{const t=e.toUpperCase();return i[t]||so(\"snow\")}}const s=i.filter((e=>Array.isArray(e[1])));for(const e of s){const[t,i]=e[1],n=e[0];if(3===e.length){const[r,s,o]=fo(e[2]);this.colorDictionary[n]=e=>{e=ys.clamp(e,t,i);return ho(r,s,o,(e-t)/(i-t))}}else if(4===e.length){const[t,i]=e[1],[n,r,s,o]=e;this.colorDictionary[n]=e=>{e=ys.clamp(e,t,i);return po(s,o,(e-t)/(i-t))}}}const o=i.filter((e=>3===e.length&&e.includes(\"*\")));for(const e of o)if(\"*\"===e[1]){const[t,i,n]=e;this.colorDictionary[t]=e=>{if(\"NA\"===e)return uf;{const[i,r]=this.attributeRangeLUT[t],s=(e-i)/(r-i),[o,a,c]=fo(n);return ho(o,a,c,s)}}}else if(\"*\"===e[0]){const[t,i,n]=e;this.colorDictionary[i]=()=>n}}}function gf(e,t){for(const[i,n]of Object.entries(t))i in e&&e[i]===n||(e[i]=n)}function mf(e){const t=Object.assign({},e);for(const[e,i]of Object.entries(t))\"string\"!=typeof i||isNaN(i)||(t[e]=Number(i));return t}const wf=16,bf=Dt;class Ff{constructor(e){this.browser=e,this.height=40,this.name=\"\",this.disableButtons=!0,this.ignoreTrackMenu=!0,this.order=.01*Number.MIN_SAFE_INTEGER,this.removable=!1,this.type=\"ruler\",this.id=\"ruler\"}async getFeatures(e,t,i){return[]}computePixelHeight(e){return this.height}draw({context:e,referenceFrame:t,pixelWidth:i,pixelHeight:n,bpPerPixel:r,bpStart:s}){Uu.isWholeGenomeView(t.chr)?this.drawWholeGenome({context:e,pixelWidth:i,pixelHeight:n,bpPerPixel:r}):this.doDraw({context:e,referenceFrame:t,pixelWidth:i,pixelHeight:n,bpStart:s})}drawWholeGenome({context:e,pixelWidth:t,pixelHeight:i,bpPerPixel:n}){e.save(),ko.fillRect(e,0,0,t,i,{fillStyle:\"white\"});for(let t of this.browser.genome.wgChromosomeNames){let r=this.browser.genome.getCumulativeOffset(t),s=this.browser.genome.getChromosome(t).bpLength,o=Math.round(r/n),a=Math.round(s/n);this.renderChromosomeRect(e,o,0,a,i,t)}e.restore()}doDraw({context:e,referenceFrame:t,pixelWidth:i,pixelHeight:n,bpStart:r}){e.clearRect(0,0,i,n);const s=function(e,t){if(e<10)return new vf(1,\"bp\",1);const i=Math.floor(Math.log10(e));let n=\"bp\",r=1;i>9?(n=\"gb\",r=1e9):i>6?(n=\"mb\",r=1e6):i>3&&(n=\"kb\",r=1e3);const s=Math.pow(10,i-1),o=e/s,a=75,c=Math.pow(10,i-1),l=Math.pow(10,i)/2;return new vf(o0&&u+c<=d&&(ko.fillText(e,i,n,this.height-8),d=0),l>0&&ko.strokeLine(e,l,this.height-6,l,this.height-2),h=Math.floor((1+o)*s.majorTick);let f=l+(Math.round(t.toPixels(h-1-r+.5))-l)/2;f>0&&ko.strokeLine(e,f,this.height-6,f,this.height-2),++o,d+=a}while(le.measureText(o).width&&ko.fillText(e,o,t+n/2,i+r/2,{fillStyle:_s.greyScale(68)})}get supportsWholeGenome(){return!0}dispose(){}}class vf{constructor(e,t,i){this.majorTick=e,this.minorTick=e/10,this.majorUnit=t,this.unitMultiplier=i}description(e){console.log((e||\"\")+\" tick \"+bf(this.majorTick)+\" label width \"+bf(this.labelWidthBP)+\" multiplier \"+this.unitMultiplier)}}class yf{constructor(t,i,n){this.guid=s(),this.trackView=t,this.browser=t.browser,this.viewport=e({class:\"igv-viewport\"}),i.appendChild(this.viewport),this.viewport.style.height=`${t.track.height}px`,null===this.viewport.previousElementSibling&&(this.viewport.style.zIndex=16,this.viewport.style.overflow=\"visible\"),this.canvas=document.createElement(\"canvas\"),this.viewport.appendChild(this.canvas),this.ctx=this.canvas.getContext(\"2d\"),this.ctx.font=\"10px verdana\",this.contentTop=0,this.hitList=void 0,this.sortDirection=1,this.setWidth(n),this.addMouseHandlers()}resizeCanvas(){const e=window.devicePixelRatio,t=this.browser.getSampleInfoViewportWidth();let i;if(this.browser.trackViews.length>1&&null===this.viewport.previousElementSibling){const[e,t]=[this.browser.ideogramTrackView.track,this.browser.rulerTrackView.track];i=e.height+t.height}else i=this.viewport.clientHeight;if(this.canvas.width!==t*e||this.canvas.height!==i*e){const n=this.canvas;n.width=t*e,n.height=i*e,n.style.width=`${t}px`,n.style.height=`${i}px`,this.ctx=this.canvas.getContext(\"2d\"),this.ctx.scale(e,e),null===this.viewport.previousElementSibling&&ko.fillRect(this.ctx,0,0,this.ctx.canvas.width,this.ctx.canvas.height,{fillStyle:so(\"snow\")})}}setTop(e){\"function\"==typeof this.trackView.track.getSamples&&(this.contentTop=e,this.repaint())}setWidth(e){this.viewport.innerWidth=e,this.resizeCanvas()}setHeight(e){const t=this.browser.getSampleInfoViewportWidth();this.viewport.style.width=`${t}px`,this.viewport.style.height=`${e}px`;const i=window.devicePixelRatio;this.canvas.width=t*i,this.canvas.height=e*i,this.canvas.style.width=`${t}px`,this.canvas.style.height=`${e}px`,this.ctx=this.canvas.getContext(\"2d\"),this.ctx.scale(i,i),null===this.viewport.previousElementSibling&&ko.fillRect(this.ctx,0,0,this.ctx.canvas.width,this.ctx.canvas.height,{fillStyle:so(\"snow\")})}async repaint(){if(this.resizeCanvas(),\"function\"==typeof this.trackView.track.getSamples){const e=this.trackView.track.getSamples();e.names&&e.names.length>0&&this.draw({context:this.ctx,samples:e})}else null===this.viewport.previousElementSibling&&(this.browser.rulerTrackView&&this.browser.rulerTrackView.setTrackHeight(!0===this.browser.sampleInfoControl.showSampleInfo?this.calculateSampleInfoColumnHeight():40,!0),this.renderSampleInfoColumns(this.ctx))}calculateSampleInfoColumnHeight(){const e=this.browser.sampleInfo.attributeNames.map((e=>this.ctx.measureText(e).width));return 4+Math.min(Math.max(...e),128)}draw({context:e,samples:t}){if(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillStyle=so(\"snow\"),e.fillRect(0,0,e.canvas.width,e.canvas.height),t&&t.names.length>0){const i=this.browser.sampleInfo.attributeNames,n=this.viewport.getBoundingClientRect().height;let r=1;const s=t.height;r=s-2*r<=1?0:1;let o=this.contentTop+t.yOffset;this.hitList={};for(const a of t.names){if(o>n)break;if(o+s>0){const t=this.browser.sampleInfo.getAttributes(a);if(t){const n=Object.entries(t);for(const t of n){const[n,a]=t;e.fillStyle=this.browser.sampleInfo.getAttributeColor(n,a);const c=8+i.indexOf(n)*wf,l=o+r,h=s-2*r;e.fillRect(c,l,15,h);const d=`${Math.floor(c)}#${Math.floor(l)}#16#${Math.ceil(h)}`;this.hitList[d]=`${n}#${a}`}}}o+=s}}}renderSampleInfoColumns(e){const t=(e,t,i,n,r,s)=>{e.save(),e.font=\"10px verdana\",e.translate(i+r/2,n+s),e.rotate(-Math.PI/2),e.textAlign=\"left\",e.fillStyle=so(\"lead\"),e.fillText(t,2,2),e.restore()},i=this.browser.sampleInfo.attributeNames;this.hitList={};for(let n=0;n{const{marginTop:n}=window.getComputedStyle(i),{x:r,y:s}=a(e,this.browser.columnContainer.querySelector(\".igv-sample-info-column\"));return{x:Math.floor(r),y:Math.floor(s-parseInt(n,10))}},n=this.browser.columnContainer.querySelector(\".igv-sample-info-column\"),{x:r,y:s}=i(n,this.viewport);n.setAttribute(\"title\",\"\");for(const[e,i]of t){const[t,o,a,c]=e.split(\"#\").map((e=>parseInt(e,10)));if(!(rt+a||so+c)){n.setAttribute(\"title\",`${i}`);break}}}else{const{x:i,y:n}=a(e,this.viewport);this.viewport.setAttribute(\"title\",\"\");for(const[e,r]of t){const[t,s,o,a]=e.split(\"#\").map((e=>parseInt(e,10)));if(!(it+o||ns+a)){const[e,t]=r.split(\"#\");this.viewport.setAttribute(\"title\",`${e.split(pf.emptySpaceReplacement).join(\" \")}: ${\"-\"===t?\"\":t}`);break}}}}}.bind(this),this.viewport.addEventListener(\"mousemove\",this.boundMouseMoveHandler)}removeMouseHandlers(){this.viewport.removeEventListener(\"mousemove\",this.boundMouseMoveHandler)}dispose(){this.removeMouseHandlers(),this.viewport.remove()}show(){this.viewport.style.display=\"block\"}hide(){this.viewport.style.display=\"none\"}}class Af{constructor(t,i,n,r){this.guid=s(),this.trackView=t,this.browser=t.browser,this.viewport=e({class:\"igv-viewport\"}),i.appendChild(this.viewport),t.track.height&&(this.viewport.style.height=`${t.track.height}px`),this.canvas=document.createElement(\"canvas\"),this.viewport.appendChild(this.canvas),this.ctx=this.canvas.getContext(\"2d\"),this.trackScrollDelta=0,this.contentTop=0,this.hitList=void 0,this.sortDirection=1,this.setWidth(r),this.addMouseHandlers()}checkCanvas(){const e=this.browser.sampleNameViewportWidth||0;this.ctx.canvas.width=e*window.devicePixelRatio,this.ctx.canvas.style.width=`${e}px`,this.ctx.canvas.height=this.viewport.clientHeight*window.devicePixelRatio,this.ctx.canvas.style.height=`${this.viewport.clientHeight}px`,this.ctx.scale(window.devicePixelRatio,window.devicePixelRatio)}setTop(e){if(\"function\"==typeof this.trackView.track.getSamples){this.contentTop=e;const t=this.trackView.track.getSamples();this.repaint(t)}}setWidth(e){this.viewport.innerWidth=e,this.checkCanvas()}async repaint(e){if(e.names.length>0&&!0===this.browser.showSampleNames&&(this.checkCanvas(),this.draw({context:this.ctx,samples:e}),void 0===this.browser.sampleNameViewportWidth)){const t=e.names.map((e=>this.ctx.measureText(e).width));this.browser.sampleNameViewportWidth=Math.min(200,4+Math.ceil(Math.max(...t))),this.browser.layoutChange()}}draw({context:e,samples:t}){if(ko.fillRect(e,0,0,e.canvas.width,t.height,{fillStyle:so(\"snow\")}),t&&t.names.length>0){const i=this.viewport.getBoundingClientRect().height,n=t.height,r=n-2<=1?0:1;let s=this.contentTop+t.yOffset;this.hitList={};for(const o of t.names){if(s>i)break;if(s+n>0){const t=n-2*r;Cf(e,o,0+2,s+r,e.canvas.width,t)}s+=n}}}renderSVGContext(e,{deltaX:t,deltaY:i}){if(\"function\"==typeof this.trackView.track.getSamples){const n=this.trackView.track.getSamples(),r=0,{width:o,height:a}=this.viewport.getBoundingClientRect(),c=`${(this.trackView.track.name||this.trackView.track.id).replace(/\\W/g,\"\")}_sample_names_guid_${s()}`;e.saveWithTranslationAndClipRect(c,t,i+r,o,a,-r),this.draw({context:e,samples:n}),e.restore()}}addMouseHandlers(){this.boundClickHandler=function(e){e.preventDefault();const t={label:\"Name Panel Width\",value:this.browser.sampleNameViewportWidth,callback:e=>{this.browser.sampleNameViewportWidth=parseInt(e),this.browser.layoutChange()}};this.browser.inputDialog.present(t,e)}.bind(this),this.viewport.addEventListener(\"contextmenu\",this.boundClickHandler),this.boundMouseMoveHandler=function(e){if(this.hitList){const t=Object.entries(this.hitList),{x:i,y:n}=a(e,this.viewport);this.viewport.setAttribute(\"title\",\"\");for(const[e,r]of t){const[t,s,o,a]=e.split(\"#\").map((e=>parseInt(e,10)));if(!(it+o||ns+a)){this.viewport.setAttribute(\"title\",`${r}`);break}}}}.bind(this),this.viewport.addEventListener(\"mousemove\",this.boundMouseMoveHandler)}removeMouseHandlers(){this.viewport.removeEventListener(\"contextmenu\",this.boundClickHandler),this.viewport.removeEventListener(\"mousemove\",this.boundMouseMoveHandler)}dispose(){this.removeMouseHandlers(),this.viewport.remove()}}function Cf(e,t,i,n,r,s){const o=Math.min(s,10);e.font=`${o}px sans-serif`,e.textAlign=\"start\",e.fillStyle=so(\"lead\");const a=i,c=e.measureText(t),l=n+s/2+(c.actualBoundingBoxAscent+c.actualBoundingBoxDescent)/2;e.fillText(t,a,l)}class _f{constructor(t){this.popover=e({class:\"igv-menu-popup\"}),t.appendChild(this.popover),this.parent=t;const i=e({class:\"igv-menu-popup-header\"});this.popover.appendChild(i),u(i,(()=>this.popover.style.display=\"none\")),this.popoverContent=e(),this.popover.appendChild(this.popoverContent),p(this.popover,i),i.addEventListener(\"click\",(e=>{e.stopPropagation(),e.preventDefault()})),this.popover.style.display=\"none\"}presentMenuList(e,t){if(xf(this.parent),t.length>0){this.popoverContent.innerHTML=\"\";const i=this.parseMenuList(e,t);for(let e of i){e.init&&e.init();let t=e.object;0===i.indexOf(e)&&t.removeClass(\"igv-track-menu-border-top\"),t.hasClass(\"igv-track-menu-border-top\")||t.hasClass(\"igv-menu-popup-check-container\")||t.is(\"div\")&&t.addClass(\"igv-menu-popup-shim\"),this.popoverContent.appendChild(t.get(0))}this.popover.style.display=\"flex\";const{width:n}=this.popover.getBoundingClientRect();this.popover.style.left=-n+\"px\",this.popover.style.top=\"0px\"}}parseMenuList(e,t){return t.map(((t,i)=>{let n;if(t.name?(n=Bt(\"
\"),n.text(t.name)):t.object?n=t.object:\"string\"==typeof t.label?(n=Bt(\"
\"),n.html(t.label)):\"string\"==typeof t&&(n=t.startsWith(\"<\")?Bt(t):Bt(\"
\"+t+\"
\")),0===i&&n.addClass(\"igv-track-menu-border-top\"),t.click||t.dialog){const i=i=>{if(i.preventDefault(),i.stopPropagation(),t.click)if(e.track.selected){const n=e.browser.getSelectedTrackViews();if(!0===t.doAllMultiSelectedTracks)t.click.call(e.track,i);else if(\"removeTrack\"===t.menuItemType){const r=()=>{e.browser.overlayTrackButton.setVisibility(!1);for(const{track:e}of n)t.click.call(e,i)},s={html:`Are you sure you want to delete ${n.length} tracks?`,callback:r};e.browser.menuUtils.dialog.present(s,i)}else for(const{track:e}of n)t.click.call(e,i)}else t.click.call(e.track,i);else t.dialog&&t.dialog.call(e.track,i);this.popover.style.display=\"none\"};n.on(\"click\",i),n.on(\"touchend\",(e=>i(e))),n.on(\"mouseup\",(function(e){e.preventDefault(),e.stopPropagation()}))}return{object:n,init:t.init||void 0}}))}presentTrackContextMenu(t,n){this.popoverContent.innerHTML=\"\";const r=function(t,n){return t.map((t=>{let r;if(\"string\"==typeof t&&\"
\"===t)r=document.createElement(\"hr\");else if(\"string\"==typeof t)r=e({class:\"context-menu\"}),r.innerHTML=t;else if(\"Node\"==typeof t)r=t;else if(\"function\"==typeof t.init&&t.init(),\"checkbox\"===t.type?r=jl(\"Show all bases\",t.value):(r=e({class:\"context-menu\"}),\"string\"==typeof t.label&&(r.innerHTML=t.label)),t.click&&\"color\"!==t.type){function s(e){t.click(),i(n),e.preventDefault(),e.stopPropagation()}r.addEventListener(\"click\",s),r.addEventListener(\"touchend\",s),r.addEventListener(\"mouseup\",(function(e){e.preventDefault(),e.stopPropagation()}))}return{el:r,init:t.init}}))}(n,this.popover);for(let{el:e}of r)this.popoverContent.appendChild(e);!function(e,t){t.style.display=\"flex\";const{x:i,y:n}=a(e,t.parentNode),{width:r}=t.getBoundingClientRect(),s=i+r,{width:o}=t.parentNode.getBoundingClientRect();t.style.left=`${s>o?i-(s-o):i}px`,t.style.top=`${n}px`}(t,this.popover)}hide(){this.popover.style.display=\"none\"}dispose(){this.popoverContent.innerHTML=\"\",this.popover.innerHTML=\"\",Object.keys(this).forEach((function(e){this[e]=void 0}))}}const xf=e=>{const t=e.querySelectorAll(\".igv-menu-popup\");for(const e of t)e.style.display=\"none\"};class kf{constructor(t,i,n,r,s,o,a){this.browser=i,this.button=e({class:\"igv-navbar-text-button\"}),t.appendChild(this.button),Array.isArray(n)?(this.textContent=n[0],this.title=n[1]):this.textContent=this.title=n,this.buttonLabel=r,this.imageDictionary={image:`url(\"data:image/svg+xml,${encodeURIComponent(s)}\")`,imageHover:`url(\"data:image/svg+xml,${encodeURIComponent(o)}\")`},this.responsiveKey=\"text\",this.configureButton(this.textContent,this.title),this.setState(a),i.on(\"navbar-resize\",(e=>{this.navbarResizeHandler(e)}))}navbarResizeHandler(e){const t=\"igv-navbar-icon-button\"===e?\"image\":\"text\";t!==this.responsiveKey&&(this.responsiveKey=t,this.configureButton(this.textContent,this.title),this.setState(void 0))}configureButton(e,t){this.groupElement=void 0,this.button.title=t,this.button.innerHTML=\"\",this.button.style.backgroundImage=\"none\",this.button.classList.remove(\"igv-navbar-icon-button\"),this.button.classList.remove(\"igv-navbar-text-button\"),\"text\"===this.responsiveKey?this.configureTextButton(e):this.configureIconButton()}configureTextButton(e){this.button.classList.add(\"igv-navbar-text-button\");const t=document.createElement(\"div\");t.innerHTML=this.buttonLabel;const i=t.firstChild;this.button.appendChild(i),this.groupElement=i.querySelector(\"#igv-navbar-button-group\");i.querySelector(\"#igv-navbar-button-label\").textContent=e}configureIconButton(){this.button.classList.add(\"igv-navbar-icon-button\")}setState(e){void 0!==e&&(this.doHover=e),\"text\"===this.responsiveKey?this.setTextButtonState(this.doHover):this.setIconButtonState(this.doHover)}setTextButtonState(e){this.groupElement.classList.remove(...this.groupElement.classList);const t=!0===e?\"igv-navbar-text-button-svg-hover\":\"igv-navbar-text-button-svg-inactive\";this.groupElement.classList.add(t)}setIconButtonState(e){this.button.style.backgroundImage=!0===e?this.imageDictionary.imageHover:this.imageDictionary.image}show(){this.button.style.display=\"flex\"}hide(){this.button.style.display=\"none\"}setVisibility(e){!0===e?this.show():this.hide()}}const If='\\n \\n \\n \\n \\n \\n \\n \\n \\n';class Sf extends Kl{static defaults={autoscale:void 0,alpha:.5,height:50};constructor(e,t,i){super(e,t),this.type=\"merged\",this.paintAxis=Fd,this.graphType=e.graphType,this.tracks=i||[]}async postInit(){if(this.config.tracks){for(let e of this.config.tracks){const t=await this.browser.createTrack(e);t?this.tracks.push(t):console.warn(\"Could not create track \"+e),\"function\"==typeof t.postInit&&await t.postInit()}this.config.tracks.every((e=>void 0!==e.autoscale||void 0!==e.max))||(this.config.autoscale=void 0===this.config.max)}for(let e of this.tracks)e.isMergedTrack=!0;if(this.config.autoscale?this.autoscale=this.config.autoscale:void 0!==this.config.max&&this.setDataRange({min:this.config.min||0,max:this.config.max}),void 0!==this.config.flipAxis)for(let e of this.tracks)e.flipAxis=this.config.flipAxis;if(void 0!==this.config.logScale)for(let e of this.tracks)e.logScale=this.config.logScale;this.resolutionAware=this.tracks.some((e=>e.resolutionAware))}set flipAxis(e){this.config.flipAxis=e;for(let t of Nf(this.tracks))t.flipAxis=e}get flipAxis(){return Nf(this.tracks).every((e=>e.flipAxis))}set logScale(e){this.config.logScale=e;for(let t of Nf(this.tracks))t.logScale=e}get logScale(){return Nf(this.tracks).every((e=>e.logScale))}get height(){return this._height}set height(e){if(this.config.height=e,this._height=e,this.tracks)for(let t of this.tracks)t.height=e,t.config.height=e}set autoscale(e){if(this._autoscale=e,!1===e&&this.tracks)for(let e of this.tracks)e.autoscale=!1}get autoscale(){return this._autoscale}set autoscaleGroup(e){if(this.tracks)for(let t of this.tracks)t.autoscaleGroup=e}get autoscaleGroup(){if(this.tracks&&this.tracks.length>0){const e=this.tracks[0].autoscaleGroup;return this.tracks.some((t=>e!==t.autoscaleGroup))?void 0:e}}setDataRange({min:e,max:t}){this.autoscale=!1;for(const i of Nf(this.tracks))i.dataRange={min:e,max:t},i.autoscale=!1,i.autoscaleGroup=!1}set dataRange({min:e,max:t}){for(const i of Nf(this.tracks))i.dataRange={min:e,max:t}}get dataRange(){if(this.tracks){const e=Nf(this.tracks);if(e.length>0){const t=e[0].dataRange;if(e.every((e=>e.dataRange&&e.dataRange.min===t.min&&e.dataRange.max===t.max)))return t}}}menuItemList(){const e=[];return Nf(this.tracks).length>0&&(void 0!==this.flipAxis&&e.push({label:\"Flip y-axis\",click:function(){this.flipAxis=!this.flipAxis,this.trackView.repaintViews()}}),e.push(...this.numericDataMenuItems())),e.push(\"
\"),e.push(this.overlayTrackAlphaAdjustmentMenuItem()),e.push(this.trackSeparationMenuItem()),e}async getFeatures(e,t,i,n){const r=this.tracks.map((r=>r.getFeatures(e,t,i,n))),s=await Promise.all(r);if(s.every((e=>0===e.length)))return new Ef([],[]);{const e=this.tracks.map((e=>e.name));return new Ef(s,e)}}draw(e){const t=e.features;for(let i=0,n=this.tracks.length;i0&&i.push(\"
\"),i.push(`
${t[r].trackName}
`),t[r].features.length>0){n=!1;const s=this.tracks[r].popupData(e,t[r].features);i.push(...s)}else i.push(\"Missing or 0 value(s)\");return!0===n?[]:i}}clickedFeatures(e){const t=e.viewport.cachedFeatures;if(!t||!t.featureArrays||!Array.isArray(t.featureArrays)||0===t.featureArrays.length)return[];const i=e.genomicLocation,n=[],r=e.referenceFrame.bpPerPixel>.2?3*e.referenceFrame.bpPerPixel:.2,s=i-r,o=i+r;for(let e=0;ee.supportsWholeGenome))}getState(){const e=super.getState(),t=[];for(let e of this.tracks)t.push(e.getState());return e.tracks=t,e}updateScales(e){let t;if(this.autoscale){t=!0;let i=[];for(let t of e){if(t.featureCache&&t.featureCache.features){const e=t.referenceFrame,n=e.start,r=n+e.toBP(t.getWidth()),s=t.featureCache.features;this.autoscale&&(i.push({value:s.getMax(n,r)}),i.push({value:s.getMin(n,r)}))}const e=nc(i);for(const t of Nf(this.tracks))t.dataRange=e}}else{let i=-1;for(let n of this.tracks)if(++i,n.autoscale){t=!0;let r=[];for(let t of e)if(t.featureCache&&t.featureCache.features){const e=t.referenceFrame,n=e.start,s=n+e.toBP(t.getWidth()),o=t.featureCache.features.featureArrays[i];if(o)for(let e of o)if(!(e.ends)break;r.push(e)}}n.dataRange=nc(r)}}return t}overlayTrackAlphaAdjustmentMenuItem(){const t=e();return t.innerText=\"Set transparency\",{object:Bt(t),dialog:function(e){const t={label:\"Transparency\",value:this.alpha,min:0,max:1,scaleFactor:1e3,callback:e=>{this.alpha=Math.max(.001,e),this.repaintViews()}};this.browser.sliderDialog.present(t,e)}}}trackSeparationMenuItem(){const e=Bt(\"
\");return e.text(\"Separate tracks\"),{object:e,click:function(e){const t=this.autoscale,i=this.name,n=this.tracks,r=this.browser,s=this.order;r.removeTrack(this);for(let e of n)e.order=s,t&&(e.autoscaleGroup=i),e.isMergedTrack=!1,r.addTrack(e.config,e);r.updateViews()}}}}class Ef{constructor(e,t){this.featureArrays=e,this.trackNames=t}getMax(e,t){let i=-Number.MAX_VALUE;for(let n of this.featureArrays)if(Array.isArray(n))for(let r of n)if(!(void 0===r.value||Number.isNaN(r.value)||r.endt)break;i=Math.max(i,r.value)}return i!==-Number.MAX_VALUE?i:100}getMin(e,t){let i=0;for(let n of this.featureArrays)if(Array.isArray(n))for(let r of n)if(void 0!==r.value&&!Number.isNaN(r.value)){if(r.endt)break;i=Math.min(i,r.value)}return i}}const Nf=e=>e?e.filter((e=>void 0!==e.dataRange||void 0!==e.autoscale||void 0!==e.autoscaleGroup)):[];class Bf extends kf{constructor(e,t){super(e,t,\"Overlay Tracks\",If,'\\n Overlay Tracks\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n','\\n Overlay Tracks Hover\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n',!1),this.button.addEventListener(\"mouseenter\",(()=>this.setState(!0))),this.button.addEventListener(\"mouseleave\",(()=>this.setState(!1)));this.boundMouseClickHandler=(()=>{this.setVisibility(!1),Mf.call(this)}).bind(this),this.button.addEventListener(\"click\",this.boundMouseClickHandler),this.setVisibility(!0)}}function Mf(e){if(!0===Df(this.browser)){const e=this.browser.getSelectedTrackViews().map((({track:e})=>e));for(const t of e)t.selected=!1;const t=[];for(let i of e)\"merged\"===i.type?t.push(...i.tracks):t.push(i);const i={name:\"Overlay\",type:\"merged\",autoscale:!1,alpha:.5,height:Math.max(...e.map((({height:e})=>e))),order:Math.min(...e.map((({order:e})=>e)))},n=new Sf(i,this.browser,t);for(const t of e){const e=this.browser.trackViews.indexOf(t.trackView);this.browser.trackViews.splice(e,1),t.trackView.dispose()}this.browser.addTrack(i,n),n.trackView.updateViews()}}function Df(e){const t=e.getSelectedTrackViews();if(t&&t.length>1){const e=new Set([\"wig\",\"merged\"]);return t.filter((({track:t})=>e.has(t.type))).length>1}return!1}const Rf=new Set([\"sequence\",\"ruler\",\"ideogram\"]),Tf=new Set([\"ruler\",\"sequence\",\"ideogram\"]);class Lf{constructor(e,t,i){this.namespace=`trackview-${s()}`,this.browser=e,this.track=i,i.trackView=this,this.addDOMToColumnContainer(e,t,e.referenceFrameList)}startSpinner(){this.viewports&&this.viewports.length>0&&this.viewports[0].startSpinner()}stopSpinner(){this.viewports&&this.viewports.length>0&&this.viewports[0].stopSpinner()}addDOMToColumnContainer(e,t,i){this.axis=this.createAxis(e,this.track),this.createViewports(e,t,i),this.sampleInfoViewport=new yf(this,e.columnContainer.querySelector(\".igv-sample-info-column\"),e.getSampleInfoViewportWidth()),this.sampleNameViewport=new Af(this,e.columnContainer.querySelector(\".igv-sample-name-column\"),void 0,e.getSampleNameViewportWidth()),this.createTrackScrollbar(e),this.createTrackDragHandle(e),this.createTrackGearPopup(e)}createViewports(e,t,i){this.viewports=[];const n=e.calculateViewportWidth(i.length),r=t.querySelectorAll(\".igv-column\");for(let e=0;e{e.preventDefault(),e.stopPropagation(),this.track.selected=e.target.checked,this.setDragHandleSelectionState(e.target.checked),this.browser.overlayTrackButton.setVisibility(Df(this.browser))})),this.enableTrackSelection(!1)}return n}resizeAxisCanvas(e,t){this.axis.style.width=`${e}px`,this.axis.style.height=`${t}px`,\"function\"==typeof this.track.paintAxis&&(this.axisCanvas.style.width=`${e}px`,this.axisCanvas.style.height=`${t}px`)}renderSVGContext(e,{deltaX:t,deltaY:i}){!function(e,t,i,n,r){if(\"function\"==typeof t.paintAxis){const{y:o,width:a,height:c}=i.getBoundingClientRect(),l=`${(t.name||t.id).replace(/\\W/g,\"\")}_axis_guid_${s()}`;e.saveWithTranslationAndClipRect(l,n,o+r,a,c,0),t.paintAxis(e,a,c),e.restore()}}(e,this.track,this.axisCanvas,t,i);const{width:n}=this.axis.getBoundingClientRect(),{y:r}=this.viewports[0].$viewport.get(0).getBoundingClientRect();let o={deltaX:n+t,deltaY:r+i};for(let t of this.viewports){t.renderSVGContext(e,o);const{width:i}=t.$viewport.get(0).getBoundingClientRect();o.deltaX+=i}if(!0===this.browser.sampleInfo.isInitialized()&&!0===this.browser.sampleInfoControl.showSampleInfo){this.sampleInfoViewport.renderSVGContext(e,o);const{width:t}=this.sampleInfoViewport.viewport.getBoundingClientRect();o.deltaX+=t}!0===this.browser.showSampleNames&&this.sampleNameViewport.renderSVGContext(e,o)}presentColorPicker(e){if(!1===Tf.has(this.track.type)){let t,i;t=\"color\"===e?this.track._initialColor||this.track.constructor.defaultColor:this.track._initialAltColor||this.track.constructor.defaultColor;const n=this.browser.getSelectedTrackViews();i=n.length>0&&new Set(n).has(this)?{color:e=>{for(const t of n)t.track.color=e,t.repaintViews()},altColor:e=>{for(const t of n)t.track.altColor=e,t.repaintViews()}}:{color:e=>{this.track.color=io(e),this.repaintViews()},altColor:e=>{this.track.altColor=io(e),this.repaintViews()}};const r=\"color\"===e?this.track.color||this.track.constructor.defaultColor:this.track.altColor||this.track.constructor.defaultColor;this.browser.genericColorPicker.configure(t,i[e],r),this.browser.genericColorPicker.show()}}setTrackHeight(e,t){t||(this.track.minHeight&&(e=Math.max(this.track.minHeight,e)),this.track.maxHeight&&(e=Math.min(this.track.maxHeight,e))),this.track.height=e,this.resizeAxisCanvas(this.axis.clientWidth,this.track.height),\"function\"==typeof this.track.paintAxis&&this.paintAxis();for(let t of this.viewports)t.setHeight(e);if(this.sampleInfoViewport.setHeight(e),this.sampleNameViewport.viewport.style.height=`${e}px`,\"function\"!=typeof this.track.computePixelHeight)for(let t of this.viewports)t.setContentHeight(e);this.repaintViews(),this.updateScrollbar(),this.dragHandle.style.height=`${e}px`,this.gearContainer.style.height=`${e}px`}updateScrollbar(){const e=this.viewports[0].$viewport.height();if(this.outerScroll.style.height=`${e}px`,!1===Rf.has(this.track.type)){const t=this.maxViewportContentHeight(),i=Math.round(e/t*e);t>e?(this.innerScroll.style.display=\"block\",this.innerScroll.style.height=`${i}px`):this.innerScroll.style.display=\"none\"}}moveScroller(e){const t=Bt(this.innerScroll).position().top+e,i=Math.min(Math.max(0,t),this.outerScroll.clientHeight-this.innerScroll.clientHeight);Bt(this.innerScroll).css(\"top\",`${i}px`);const n=this.maxViewportContentHeight(),r=-Math.round(i*(n/this.viewports[0].$viewport.height()));for(let e of this.viewports)e.setTop(r);this.sampleInfoViewport.setTop(r),this.sampleNameViewport.trackScrollDelta=e,this.sampleNameViewport.setTop(r)}isLoading(){for(let e of this.viewports)if(e.isLoading())return!0}repaintViews(){for(let e of this.viewports)e.isVisible()&&e.repaint();\"function\"==typeof this.track.paintAxis&&this.paintAxis(),this.repaintSampleInfo(),this.repaintSamples()}repaintSampleInfo(){this.sampleInfoViewport.repaint()}repaintSamples(){if(\"function\"==typeof this.track.getSamples){const e=this.track.getSamples();e.names&&e.names.length>0&&this.sampleNameViewport.repaint(e)}}setTrackLabelName(e){this.viewports.forEach((t=>t.setTrackLabel(e)))}resize(e){for(let t of this.viewports)t.setWidth(e)}async updateViews(){if(!this.browser||!this.browser.referenceFrameList)return;const e=this.viewports.filter((e=>e.isVisible()));if(e.forEach((e=>e.shift())),this.browser.dragObject)return;const t=e.filter((e=>e.needsRepaint())).filter((e=>e.checkZoomIn())),i=e.filter((e=>e.checkZoomIn())).filter((e=>e.needsReload()));for(let e of i)await e.loadFeatures();if(this.disposed)return;if(this.track&&\"function\"==typeof this.track.variantRowCount&&i.length>0){let e=0;for(let t of this.viewports)t.featureCache&&t.featureCache.features&&(e=Math.max(e,t.featureCache.features.reduce(((e,t)=>Math.max(e,t.row||0)),0)));if(this.track.nVariantRows!==e+1){this.track.variantRowCount(e+1);for(let e of this.viewports)e.checkContentHeight()}}let n;if(\"merged\"===this.track.type)n=this.track.updateScales(e);else if(this.track.autoscale){let t=[];for(let i of e){const e=i.referenceFrame,n=e.start,r=n+e.toBP(i.getWidth());if(i.featureCache&&i.featureCache.features)if(\"function\"==typeof i.featureCache.features.getMax){const e=i.featureCache.features.getMax(n,r);if(t.push({value:e}),\"function\"==typeof i.featureCache.features.getMin){const e=i.featureCache.features.getMin(n,r);t.push({value:e})}}else{const e=to(i.featureCache.features,n,r);for(let i of e)t.push(i)}}\"function\"==typeof this.track.doAutoscale?this.track.dataRange=this.track.doAutoscale(t):this.track.dataRange=nc(t)}const r=this.track.autoscale||this.track.autoscaleGroup||\"ruler\"===this.track.type||n||this.track.groupBy;for(let i of e)t.includes(i)?i.repaint():r&&i.refresh();this.adjustTrackHeight(),this.repaintSampleInfo(),this.repaintSamples(),this.updateRulerViewportLabels()}clearCachedFeatures(){for(let e of this.viewports)e.clearCache()}updateRulerViewportLabels(){const e=this.browser.calculateViewportWidth(this.viewports.length);for(let t of this.viewports)\"ruler\"===this.track.type&&(this.viewports.length>1?t.presentLocusLabel(e):t.dismissLocusLabel())}async getInViewFeatures(){if(!this.browser||!this.browser.referenceFrameList)return[];let e=[];const t=this.viewports.filter((e=>e.isVisible()));for(let i of t){const t=i.referenceFrame,{chr:n,start:r,bpPerPixel:s}=i.referenceFrame,o=r+t.toBP(i.getWidth());if((!i.featureCache||!i.featureCache.containsRange(n,r,o,s))&&await i.loadFeatures(),i.featureCache&&i.featureCache.features)if(\"function\"==typeof i.featureCache.features.getMax){const t=i.featureCache.features.getMax(r,o);e.push({value:t})}else{const t=\"function\"==typeof i.featureCache.queryFeatures?i.featureCache.queryFeatures(n,r,o):to(i.featureCache.features,r,o);e=e.concat(t)}}return e}checkContentHeight(){for(let e of this.viewports)e.checkContentHeight();this.adjustTrackHeight()}adjustTrackHeight(){var e=this.maxViewportContentHeight();if(this.track.autoHeight?this.setTrackHeight(e,!1):this.track.paintAxis&&this.paintAxis(),!1===Rf.has(this.track.type)){const t=this.viewports[0].getContentTop(),i=this.viewports[0].$viewport.height(),n=Math.min(0,i-e);if(t{if(!t.isVisible())return!1;if(t.checkZoomIn()){const i=t.referenceFrame,n=t.referenceFrame.chr,r=i.start,s=r+i.toBP(Bt(t.contentDiv).width()),o=i.bpPerPixel;return e||!t.tile||t.tile.invalidate||!t.tile.containsRange(n,r,s,o)}return!1}))}createTrackScrollbar(t){const i=e();if(t.columnContainer.querySelector(\".igv-scrollbar-column\").appendChild(i),i.style.height=`${this.track.height}px`,this.outerScroll=i,!1===Rf.has(this.track.type)){const n=e();i.appendChild(n),this.innerScroll=n,this.addTrackScrollMouseHandlers(t)}}createTrackDragHandle(t){\"sequence\"!==this.track.type&&!0===wo.has(this.track.type)?this.dragHandle=e({class:\"igv-track-drag-shim\"}):(this.dragHandle=e({class:\"igv-track-drag-handle\"}),this.dragHandle.classList.add(\"igv-track-drag-handle-color\")),t.columnContainer.querySelector(\".igv-track-drag-column\").appendChild(this.dragHandle),this.dragHandle.style.height=`${this.track.height}px`,this.addTrackDragMouseHandlers(t)}createTrackGearPopup(t){if(this.gearContainer=e(),t.columnContainer.querySelector(\".igv-gear-menu-column\").appendChild(this.gearContainer),this.gearContainer.style.height=`${this.track.height}px`,!0===this.track.ignoreTrackMenu);else{function i(e){if(e.preventDefault(),e.stopPropagation(),\"none\"===this.trackGearPopup.popover.style.display){for(const e of t.trackViews.filter((e=>e!==this&&void 0!==e.trackGearPopup)))e.trackGearPopup.popover.style.display=\"none\";this.trackGearPopup.presentMenuList(this,t.menuUtils.trackMenuItemList(this))}else this.trackGearPopup.popover.style.display=\"none\"}this.gear=e(),this.gearContainer.appendChild(this.gear),this.gear.appendChild(l(\"cog\")),this.trackGearPopup=new _f(this.gear),this.boundTrackGearClickHandler=i.bind(this),this.gear.addEventListener(\"click\",this.boundTrackGearClickHandler)}}addTrackScrollMouseHandlers(e){this.boundTrackScrollMouseDownHandler=function(t){t.stopPropagation();const{y:i}=r(t);Bt(this.innerScroll).data(\"yDown\",i.toString()),this.boundColumnContainerMouseMoveHandler=function(e){e.stopPropagation();const{y:t}=r(e);this.moveScroller(t-parseInt(Bt(this.innerScroll).data(\"yDown\"))),Bt(this.innerScroll).data(\"yDown\",t.toString())}.bind(this),e.columnContainer.addEventListener(\"mousemove\",this.boundColumnContainerMouseMoveHandler)}.bind(this),this.innerScroll.addEventListener(\"mousedown\",this.boundTrackScrollMouseDownHandler),this.boundColumnContainerMouseUpHandler=function(t){e.columnContainer.removeEventListener(\"mousemove\",this.boundColumnContainerMouseMoveHandler)}.bind(this),e.columnContainer.addEventListener(\"mouseup\",this.boundColumnContainerMouseUpHandler),e.columnContainer.addEventListener(\"mouseleave\",this.boundColumnContainerMouseUpHandler)}removeTrackScrollMouseHandlers(){!1===Rf.has(this.track.type)&&(this.innerScroll.removeEventListener(\"mousedown\",this.boundTrackScrollMouseDownHandler),this.browser.columnContainer.removeEventListener(\"mouseup\",this.boundColumnContainerMouseUpHandler),this.browser.columnContainer.removeEventListener(\"mousemove\",this.boundColumnContainerMouseMoveHandler),this.browser.columnContainer.removeEventListener(\"mouseleave\",this.boundColumnContainerMouseMoveHandler))}addTrackDragMouseHandlers(e){if(\"sequence\"===this.track.type||!1===wo.has(this.track.type)){let t;function i(i){i.preventDefault(),t=i.target,!1===this.track.selected&&(t.classList.remove(\"igv-track-drag-handle-color\"),t.classList.add(\"igv-track-drag-handle-hover-color\")),e.startTrackDrag(this)}function n(i){e.endTrackDrag(),t&&i.target!==t&&!1===this.track.selected&&(t.classList.remove(\"igv-track-drag-handle-hover-color\"),t.classList.add(\"igv-track-drag-handle-color\")),t=void 0}function r(i){i.preventDefault(),void 0===t&&!1===this.track.selected&&(i.target.classList.remove(\"igv-track-drag-handle-color\"),i.target.classList.add(\"igv-track-drag-handle-hover-color\")),e.updateTrackDrag(this)}function s(e){e.preventDefault(),void 0===t&&!1===this.track.selected&&(e.target.classList.remove(\"igv-track-drag-handle-hover-color\"),e.target.classList.add(\"igv-track-drag-handle-color\"))}this.boundTrackDragMouseDownHandler=i.bind(this),this.dragHandle.addEventListener(\"mousedown\",this.boundTrackDragMouseDownHandler),this.boundDocumentTrackDragMouseUpHandler=n.bind(this),document.addEventListener(\"mouseup\",this.boundDocumentTrackDragMouseUpHandler),this.boundTrackDragMouseEnterHandler=r.bind(this),this.dragHandle.addEventListener(\"mouseenter\",this.boundTrackDragMouseEnterHandler),this.dragHandle.addEventListener(\"mouseout\",(e=>{e.preventDefault(),void 0===t&&!1===this.track.selected&&(e.target.classList.remove(\"igv-track-drag-handle-hover-color\"),e.target.classList.add(\"igv-track-drag-handle-color\"))})),this.boundTrackDragMouseOutHandler=s.bind(this),this.dragHandle.addEventListener(\"mouseout\",this.boundTrackDragMouseOutHandler)}}removeTrackDragMouseHandlers(){\"ideogram\"===this.track.type||\"ruler\"===this.track.type||(this.dragHandle.removeEventListener(\"mousedown\",this.boundTrackDragMouseDownHandler),document.removeEventListener(\"mouseup\",this.boundDocumentTrackDragMouseUpHandler),this.dragHandle.removeEventListener(\"mouseup\",this.boundTrackDragMouseEnterHandler),this.dragHandle.removeEventListener(\"mouseout\",this.boundTrackDragMouseOutHandler))}removeTrackGearMouseHandlers(){!0===this.track.ignoreTrackMenu||this.gear.removeEventListener(\"click\",this.boundTrackGearClickHandler)}removeDOMFromColumnContainer(){this.axis.remove(),this.removeViewportsFromColumnContainer(),this.sampleInfoViewport.dispose(),this.sampleNameViewport.dispose(),this.removeTrackScrollMouseHandlers(),this.outerScroll.remove(),this.removeTrackDragMouseHandlers(),this.dragHandle.remove(),this.removeTrackGearMouseHandlers(),this.gearContainer.remove()}removeViewportsFromColumnContainer(){for(let e of this.viewports)e.$viewport.remove()}dispose(){this.axis.remove();for(let e of this.viewports)e.dispose();this.sampleInfoViewport.dispose(),this.sampleNameViewport.dispose(),this.removeTrackScrollMouseHandlers(),this.outerScroll.remove(),this.removeTrackDragMouseHandlers(),this.dragHandle.remove(),this.removeTrackGearMouseHandlers(),this.gearContainer.remove(),\"function\"==typeof this.track.dispose&&this.track.dispose();for(let e of Object.keys(this))this[e]=void 0;this.alert&&this.alert.container.remove(),this.disposed=!0}paintAxis(){if(\"function\"==typeof this.track.paintAxis){const{width:e,height:t}=this.axisCanvas.getBoundingClientRect(),i=window.devicePixelRatio||1;this.axisCanvas.height=i*t,this.axisCanvas.width=i*e;const n=this.axisCanvas.getContext(\"2d\");if(n.scale(i,i),this.track.autoscaleGroup){if(void 0===bo[this.track.autoscaleGroup]){const e=oo.Dark2,t=Math.floor(Math.random()*oo.Dark2.length);bo[this.track.autoscaleGroup]=e[t]}const i=_s.addAlpha(bo[this.track.autoscaleGroup],.75);this.track.paintAxis(n,e,t,i)}else this.track.paintAxis(n,e,t,void 0)}}maxViewportContentHeight(){return Math.max(...this.viewports.map((e=>e.getContentHeight())))}enableTrackSelection(e){const t=this.trackSelectionContainer;if(t&&!wo.has(this.track.type))if(!1!==e)t.style.display=\"grid\";else{this.track.selected=!1;t.querySelector(\"[name=track-select]\").checked=this.track.selected,this.dragHandle&&this.setDragHandleSelectionState(!1),t.style.display=\"none\"}}setDragHandleSelectionState(e){const t=this.dragHandle;e?(t.classList.remove(\"igv-track-drag-handle-color\"),t.classList.remove(\"igv-track-drag-handle-hover-color\"),t.classList.add(\"igv-track-drag-handle-selected-color\")):(t.classList.remove(\"igv-track-drag-handle-hover-color\"),t.classList.remove(\"igv-track-drag-handle-selected-color\"),t.classList.add(\"igv-track-drag-handle-color\"))}}const zf={threshold:2e3,r:0,g:0,b:255};class Hf{constructor(e){e=e||zf,this.threshold=e.threshold,this.r=e.r,this.g=e.g,this.b=e.b,this.cache=[],this.nbins=2e3,this.binsize=this.threshold/this.nbins}setThreshold(e){this.threshold=e,this.cache=[],this.binsize=this.threshold/this.nbins}getThreshold(){return this.threshold}setColorComponents(e){this.r=e.r,this.g=e.g,this.b=e.b,this.cache=[]}getColorComponents(){return{r:this.r,g:this.g,b:this.b}}equals(e){return JSON.stringify(this)===JSON.stringify(e)}getColor(e){const t=Math.floor(Math.min(this.threshold,e)/this.binsize);if(void 0===this.cache[t]){const i=(ys.clamp(e,0,this.threshold)-0)/(this.threshold-0);this.cache[t]=`rgba(${this.r},${this.g},${this.b}, ${i})`}return this.cache[t]}stringify(){return this.threshold+\",\"+this.r+\",\"+this.g+\",\"+this.b}static parse(e){var t,i;return e.startsWith(\"R:\")?(t=e.substring(2).split(\":\"),(i=new RatioColorScale(Number.parseFloat(t[0]))).positiveScale=n(t[1]),i.negativeScale=n(t[2]),i):n(e);function n(e){var t,i;return t={threshold:(i=e.split(\",\"))[0],r:i[1],g:i[2],b:i[3]},new Hf(t)}}}class Pf{constructor(e){this.config=e,this.url=e.path||e.url}async read(e,t){const i={start:e,size:t};return Vs.loadArrayBuffer(this.url,{range:i})}}class Of{constructor(e){this.file=e}async read(e,t){const i=this.file;return void 0!==e?i.slice(e,e+t).arrayBuffer():i.arrayBuffer()}}class Uf{constructor(e,t){this.file=e,this.rateLimiter=t}async read(e,t){const i=this.file,n=this.rateLimiter;return new Promise((function(r,s){n.limiter((async function(i){try{const n=await i.read(e,t);r(n)}catch(e){s(e)}}))(i)}))}}class qf{constructor(e){this.file=e.file,this.size=e.size||64e3,this.position=0,this.bufferStart=0,this.bufferLength=0,this.buffer=void 0}async read(e,t){const i=e,n=e+t,r=this.bufferStart,s=this.bufferStart+this.bufferLength;if(t>this.size)return this.buffer=void 0,this.bufferStart=0,this.bufferLength=0,this.file.read(e,t);if(i>=r&&n<=s){const e=i-r,n=e+t;return this.buffer.slice(e,n)}if(ir){const n=r-i,s=await this.file.read(e,n),o=t-n;if(o>0){const e=this.buffer.slice(0,o);return Vf(s,e)}return s}if(!(is))return this.buffer=await this.file.read(e,this.size),this.bufferStart=e,this.bufferLength=this.buffer.byteLength,this.buffer.slice(0,t);{const e=s-i,n=this.bufferLength-e,r=this.buffer.slice(n,this.bufferLength),o=t-e;if(!(o>0))return r;try{this.buffer=await this.file.read(s,this.size),this.bufferStart=s,this.bufferLength=this.buffer.byteLength;const e=this.buffer.slice(0,o);return Vf(r,e)}catch(e){if(e.code&&416===e.code)return r;throw e}}}}var Vf=function(e,t){var i=new Uint8Array(e.byteLength+t.byteLength);return i.set(new Uint8Array(e),0),i.set(new Uint8Array(t),e.byteLength),i.buffer};const Qf=function(e,t){this.littleEndian=void 0===t||t,this.position=0,this.view=e,this.length=e.byteLength};function jf(e,t){this.block=e,this.offset=t}Qf.prototype.available=function(){return this.length-this.position},Qf.prototype.remLength=function(){return this.length-this.position},Qf.prototype.hasNext=function(){return this.position=0;i--)t=256*t+e[i];else for(i=0;i0&&(n+=String.fromCharCode(i));return n},Qf.prototype.getFixedLengthTrimmedString=function(e){var t,i,n=\"\";for(t=0;t32&&(n+=String.fromCharCode(i));return n},Qf.prototype.getFloat=function(){var e=this.view.getFloat32(this.position,this.littleEndian);return this.position+=4,e},Qf.prototype.getDouble=function(){var e=this.view.getFloat64(this.position,this.littleEndian);return this.position+=8,e},Qf.prototype.skip=function(e){return this.position+=e,this.position},Qf.prototype.getVPointer=function(){var e=this.position,t=this.view.getUint8(e+1)<<8|this.view.getUint8(e),i=4294967296*(255&this.view.getUint8(e+6))+16777216*(255&this.view.getUint8(e+5))+65536*(255&this.view.getUint8(e+4))+256*(255&this.view.getUint8(e+3))+(255&this.view.getUint8(e+2));return this.position+=8,new jf(i,t)},jf.prototype.isLessThan=function(e){return this.blocke.block||this.block===e.block&&this.offset>e.offset},jf.prototype.print=function(){return this.block+\":\"+this.offset};class Wf{constructor(e,t){this.chr1=e,this.chr2=t}getKey(){return this.chr1.name+\"_\"+this.chr2.name+\"_\"+this.zoom.unit+\"_\"+this.zoom.binSize}getBlockNumbers(e,t,i){if(e.chr==this.chr2&&t.chr===this.chr1){const i=e;e=t,t=i}const n=this.chr1===this.chr2,r=this.zoom.binSize,s=this.blockBinCount,o=this.blockColumnCount;return i<9||!n?function(){const i=e.start/r,a=e.end/r,c=t.start/r,l=t.end/r,h=Math.floor(i/s),d=Math.floor((a-1)/s),u=Math.floor(c/s),f=Math.floor((l-1)/s),p=[];for(let e=u;e<=f;e++)for(let t=h;t<=d;t++){let i;i=n&&e0;){const e=t.getInt(),i=t.getLong(),n=t.getInt();this.blockIndex[e]={filePosition:i,size:n}}}getBlockIndexEntry(e){return this.blockIndex[e]}}class $f{constructor(e,t,i){this.chr1=e,this.chr2=t,this.bpZoomData=[],this.fragZoomData=[];for(let e of i)\"BP\"===e.zoom.unit?this.bpZoomData.push(e):this.fragZoomData.push(e)}findZoomForResolution(e,t){const i=\"FRAG\"===t?this.fragZoomData:this.bpZoomData;for(let t=1;tt){const i=e;e=t,t=i}return`${e}_${t}`}static parseMatrix(e,t){const i=new Qf(new DataView(e)),n=i.getInt(),r=i.getInt(),s=t[n],o=t[r];let a=i.getInt();const c=[];for(;a-- >0;){const e=Wf.parseMatrixZoomData(s,o,i);c.push(e)}return new $f(n,r,c)}}class Kf{constructor(e,t,i){this.bin1=e,this.bin2=t,this.counts=i}getKey(){return this.bin1+\"_\"+this.bin2}}class Yf{constructor(e=10){this.max=e,this.map=new Map}get(e){let t=this.map.get(e);return t&&(this.map.delete(e),this.map.set(e,t)),t}set(e,t){this.map.has(e)?this.map.delete(e):this.map.size===this.max&&this.map.delete(this.first()),this.map.set(e,t)}has(e){return this.map.has(e)}clear(){this.map.clear()}first(){return this.map.keys().next().value}}class Xf{constructor(e,t,i,n){this.file=e,this.filePosition=t,this.nValues=i,this.dataType=n,this.cache=void 0}async getValues(e,t){if(!this.cache||ethis.cache.end){const i=Math.max(0,e-1e3),n=Math.min(this.nValues,t+1e3),r=this.filePosition+i*this.dataType,s=n-i,o=s*this.dataType,a=await this.file.read(r,o);if(!a)return;const c=new Qf(new DataView(a)),l=[];for(let e=0;e=0||t.indexOf(\"www.googleapis.com/drive\")>0?this.file=new Uf(i,ep):this.file=i}}var t}async init(){this.initialized||(await this.readHeaderAndFooter(),this.initialized=!0)}async getVersion(){if(void 0===this.version){const e=await this.file.read(0,128);if(!e)return;const t=new Qf(new DataView(e));return this.magic=t.getString(),this.version=t.getInt(),this.version}return this.version}async getMetaData(){return await this.init(),this.meta}async readHeaderAndFooter(){let e=await this.file.read(0,16);if(!e||0===e.byteLength)throw Error(\"File content is empty\");let t=new Qf(new DataView(e));if(this.magic=t.getString(),this.version=t.getInt(),this.version<5)throw Error(\"Unsupported hic version: \"+this.version);this.footerPosition=t.getLong(),await this.readFooter();const i=Object.values(this.masterIndex).reduce(((e,t)=>Math.min(e,t.start)),Number.MAX_VALUE)-16;e=await this.file.read(16,i),t=new Qf(new DataView(e)),this.genomeId=t.getString(),this.version>=9&&(this.normVectorIndexPosition=t.getLong(),this.normVectorIndexSize=t.getLong()),this.attributes={};let n=t.getInt();for(;n-- >0;)this.attributes[t.getString()]=t.getString();this.chromosomes=[],this.chromosomeIndexMap={};let r=t.getInt(),s=0;for(;r-- >0;){const e={index:s,name:t.getString(),size:this.version<9?t.getInt():t.getLong()};\"all\"===e.name.toLowerCase()&&(this.wholeGenomeChromosome=e,this.wholeGenomeResolution=Math.round(2*e.size)),this.chromosomes.push(e),this.chromosomeIndexMap[e.name]=e.index,s++}this.bpResolutions=[];let o=t.getInt();for(;o-- >0;)this.bpResolutions.push(t.getInt());if(this.loadFragData){this.fragResolutions=[];let e=t.getInt();if(e>0)for(;e-- >0;)this.fragResolutions.push(t.getInt())}this.chrAliasTable={};for(let e of Object.keys(this.chromosomeIndexMap))e.startsWith(\"chr\")?this.chrAliasTable[e.substr(3)]=e:\"MT\"===e?this.chrAliasTable.chrM=e:this.chrAliasTable[\"chr\"+e]=e;this.meta={version:this.version,genome:this.genomeId,chromosomes:this.chromosomes,resolutions:this.bpResolutions}}async readFooter(){const e=this.version<9?8:12;let t=await this.file.read(this.footerPosition,e);if(!t)return null;let i=new Qf(new DataView(t));const n=this.version<9?i.getInt():i.getLong();let r=i.getInt();const s=196*r;for(t=await this.file.read(this.footerPosition+e,Math.min(s,n)),i=new Qf(new DataView(t)),this.masterIndex={};r-- >0;){const e=i.getString(),t=i.getLong(),n=i.getInt();this.masterIndex[e]={start:t,size:n}}if(this.expectedValueVectors={},this.version>5){const e=this.version<9?4:8;this.normExpectedValueVectorsPosition=this.footerPosition+e+n}return this}async printIndexStats(){let e,t=0,i=0;await await this.init();for(let n of Object.keys(this.masterIndex)){const r=this.masterIndex[n];t+=r.size,r.size>i&&(i=r.size,e=n)}console.log(`${i} ${e} ${this.config.url}`)}async getMatrix(e,t){const i=$f.getKey(e,t);if(this.matrixCache.has(i))return this.matrixCache.get(i);{const n=await this.readMatrix(e,t);return this.matrixCache.set(i,n),n}}async readMatrix(e,t){if(await this.init(),e>t){const i=e;e=t,t=i}const i=$f.getKey(e,t),n=this.masterIndex[i];if(!n)return;const r=await this.file.read(n.start,n.size);return r?$f.parseMatrix(r,this.chromosomes):void 0}async getContactRecords(e,t,i,n,r,s=!1){await this.init();const o=this.chromosomeIndexMap[this.getFileChrName(t.chr)],a=this.chromosomeIndexMap[this.getFileChrName(i.chr)];if(o>a||o===a&&t.start>=i.end){const e=t;t=i,i=e}const c=await this.getBlocks(t,i,n,r);if(!c||0===c.length)return[];const l=[],h=t.start/r,d=t.end/r,u=i.start/r,f=i.end/r,p=Math.floor(h),g=Math.ceil(d),m=Math.floor(u),w=Math.ceil(f);for(let o of c)if(o){let a,c,b=e&&\"NONE\"!==e;const F=this.getFileChrName(t.chr),v=this.getFileChrName(i.chr);if(b){const t=await this.getNormalizationVector(e,F,n,r),i=F===v?t:await this.getNormalizationVector(e,v,n,r);t&&i?(a=await t.getValues(p,g),c=await i.getValues(m,w)):b=!1}for(let e of o.records)if(s||e.bin1>=h&&e.bin1=u&&e.bin210&&(this.percentile95=sp(o.records,95))}return l}async getBlocks(e,t,i,n){const r=(e,t)=>`${t.getKey()}_${e}`;await this.init();const s=this.getFileChrName(e.chr),o=this.getFileChrName(t.chr),a=this.chromosomeIndexMap[s],c=this.chromosomeIndexMap[o];if(void 0===a)return console.log(\"No chromosome named: \"+e.chr),[];if(void 0===c)return console.log(\"No chromosome named: \"+t.chr),[];const l=await this.getMatrix(a,c);if(!l)return console.log(\"No matrix for \"+e.chr+\"-\"+t.chr),[];const h=l.getZoomData(n,i);if(!h){let i=`No data avalailble for resolution: ${n} for map ${e.chr}-${t.chr}`;throw new Error(i)}const d=h.getBlockNumbers(e,t,this.version),u=[],f=[];for(let e of d){const t=r(e,h);this.blockCache.has(n,t)?u.push(this.blockCache.get(n,t)):f.push(e)}const p=f.map((e=>this.readBlock(e,h))),g=await Promise.all(p);for(let e of g)e&&this.blockCache.set(n,r(e.blockNumber,h),e);return u.concat(g)}async readBlock(e,t){const i=await t.blockIndex.getBlockIndexEntry(e);if(i){let n=await this.file.read(i.filePosition,i.size);if(!n)return;n=new ls(new Uint8Array(n)).buffer;const r=new Qf(new DataView(n)),s=r.getInt(),o=[];if(this.version<7)for(let e=0;e0;)this.parseNormVectorEntry(i);return this.normVectorIndex}async readNormExpectedValuesAndNormVectorIndex(){if(await this.init(),void 0===this.normExpectedValueVectorsPosition)return;const e=await this.skipExpectedValues(this.normExpectedValueVectorsPosition);let t=4,i=await this.file.read(e,4);if(0===i.byteLength)return;const n=new Qf(new DataView(i)).getInt(),r={start:e+t,size:30*n};i=await this.file.read(r.start,r.size),this.normalizedExpectedValueVectors={},this.normVectorIndex={},await async function i(n,r){const s=new Qf(new DataView(r));for(;n-- >0;){if(s.available()<100){n++,t+=s.position;const r=Math.max(1e3,30*n),o={start:e+t,size:r},a=await this.file.read(o.start,o.size);return i.call(this,n,a)}this.parseNormVectorEntry(s)}t+=s.position}.call(this,n,i),this.config.nvi=e.toString()+\",\"+t}async skipExpectedValues(e){const t=this.version,i=new qf({file:this.file,size:256e3}),n={start:e,size:4},r=await i.read(n.start,n.size),s=new Qf(new DataView(r)).getInt();return 0===s?e+4:async function e(n,r){let s={start:n,size:500},o=0,a=n,c=await i.read(s.start,s.size),l=new Qf(new DataView(c));l.getString(),l.getString(),l.getInt();const h=t<9?l.getInt():l.getLong();o+=l.position+h*(t<9?8:4),s={start:n+o,size:4},c=await i.read(s.start,s.size),l=new Qf(new DataView(c));const d=l.getInt();return o+=4+d*(4+(t<9?8:4)),r--,0===r?a+o:e(a+o,r)}(e+4,s)}getZoomIndexForBinSize(e,t){let i;if(\"BP\"===(t=t||\"BP\"))i=this.bpResolutions;else{if(\"FRAG\"!==t)throw new Error(\"Invalid unit: \"+t);i=this.fragResolutions}for(let t=0;te.counts));i.sort((function(e,t){return e-t}));return i[Math.floor(t/100*e.length)]}class op{constructor(e,t){this.config=e,this.genome=t,this.hicFile=e._hicFile?e._hicFile:new tp(e),e._hicFile=void 0}async getHeader(){return await this.hicFile.init(),this.hicFile}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r}){this.hicFile.initialized||await this.hicFile.init();const s=this.hicFile.bpResolutions,o=s[s.length-1];return(await this.hicFile.getContactRecords(void 0,{chr:e,start:t,end:i},{chr:\"celltype\",start:0,end:1e8},\"BP\",o)).map((t=>{const i=t.bin1*o;return{chr:e,start:i,end:i+o,value:t.counts,sample:t.bin2.toString()}}))}supportsWholeGenome(){return!1}}function ap(e,t){const i=new Set(e.attributeNames),n=t[0];if(void 0===e.getAttributes(n))return!1;{const t=Object.keys(e.getAttributes(n));for(const e of t)if(!1===i.has(e))return!1}return!0}class cp extends Kl{#y=new Map;constructor(e,t){super(e,t)}init(e){if(super.init(e),this.type=e.type||\"seg\",\"maf\"===this.type&&(this.type=\"mut\"),this.isLog=e.isLog,this.displayMode=e.displayMode||\"EXPANDED\",this.height=e.height||300,this.maxHeight=e.maxHeight||500,this.squishedRowHeight=e.sampleSquishHeight||e.squishedRowHeight||2,this.expandedRowHeight=e.sampleExpandHeight||e.expandedRowHeight||13,this.sampleHeight=this.squishedRowHeight,this.sampleKeys=[],e.samples){for(let t of e.samples)this.sampleKeys.push(t);this.explicitSamples=!0}if(e.color)this.color=e.color;else if(e.colorTable)this.colorTable=new co(e.colorTable);else if(\"mut\"===this.type)this.colorTable=new co(dp);else this.posColorScale=new _d(e.posColorScale||lp),this.negColorScale=new _d(e.negColorScale||hp);const t=Object.assign({},this.config);t.maxWGCount=t.maxWGCount||Number.MAX_SAFE_INTEGER,\"shoebox\"===this.type?(this.featureSource=new op(t,this.browser.genome),this.height=e.height||500,this.maxHeight=e.maxHeight||800,this.isLog=!1,this.squishedRowHeight=e.squishedRowHeight||1,this.displayMode=e.displayMode||\"SQUISHED\",this.visibilityWindow=void 0===e.visibilityWindow?1e6:e.visibilityWindow):this.featureSource=Gd(t,this.browser.genome),this.initialSort=e.sort}async postInit(){\"function\"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader(),this.disposed)||(this.header&&this.setTrackProperties(this.header),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor)}menuItemList(){const e=[];if(!0===ap(this.browser.sampleInfo,this.sampleKeys)){e.push(\"
\"),e.push(\"Sort by attribute:\");for(const n of this.browser.sampleInfo.attributeNames){if(this.sampleKeys.some((e=>{const t=this.browser.sampleInfo.getAttributes(e);return t&&t[n]}))){const r=Bt(\"
\");function s(){const e=this.#y.get(n)||1;this.sortByAttribute(n,e),this.#y.set(n,-1*e),this.config.sort={option:\"ATTRIBUTE\",attribute:n,direction:1===e?\"ASC\":\"DESC\"}}r.html(`  ${n.split(pf.emptySpaceReplacement).join(\" \")}`),e.push({object:r,click:s})}}}const t={SQUISHED:\"Squish\",EXPANDED:\"Expand\",FILL:\"Fill\"};if(\"shoebox\"===this.type&&this.sbColorScale){function o(e){this.browser.inputDialog.present({label:\"Color Scale Threshold\",value:this.sbColorScale.threshold,callback:()=>{const e=Number(this.browser.inputDialog.value,10);e&&(this.sbColorScale.setThreshold(e),this.trackView.repaintViews())}},e)}e.push(\"
\"),e.push({object:Bt(\"
Set color scale threshold
\"),dialog:o})}e.push(\"
\"),e.push(\"DisplayMode:\");const i=\"seg\"===this.type||\"shoebox\"===this.type?[\"SQUISHED\",\"EXPANDED\",\"FILL\"]:[\"SQUISHED\",\"EXPANDED\"];for(let a of i){const c=jl(t[a],a===this.displayMode);e.push({object:Bt(c),click:function(){this.displayMode=a,this.config.displayMode=a,this.trackView.checkContentHeight(),this.trackView.repaintViews(),this.trackView.moveScroller(this.trackView.sampleNameViewport.trackScrollDelta)}})}return e}hasSamples(){return!0}getSamples(){return{names:this.sampleKeys,height:this.sampleHeight,yOffset:0}}async getFeatures(e,t,i){const n=await this.featureSource.getFeatures({chr:e,start:t,end:i});if(this.updateSampleKeys(n),this.initialSort){const e=this.initialSort;if(void 0===e.option||\"VALUE\"===e.option.toUpperCase())this.sortByValue(e,n);else if(\"ATTRIBUTE\"===e.option.toUpperCase()&&e.attribute){const t=\"DESC\"===e.direction?1:-1;this.sortByAttribute(e.attribute,t)}this.initialSort=void 0}return n}draw({context:e,pixelTop:t,pixelWidth:i,pixelHeight:n,features:r,bpPerPixel:s,bpStart:o}){if(ko.fillRect(e,0,t,i,n,{fillStyle:\"rgb(255, 255, 255)\"}),r&&r.length>0){if(this.checkForLog(r),\"shoebox\"===this.type&&!this.sbColorScale){const e=this.featureSource.hicFile.percentile95||2e3;this.sbColorScale=new Hf({threshold:e,r:0,g:0,b:255})}const a={};let c;switch(this.sampleKeys.forEach((function(e,t){a[e]=t})),this.displayMode){case\"FILL\":this.sampleHeight=n/this.sampleKeys.length,c=0;break;case\"SQUISHED\":this.sampleHeight=this.squishedRowHeight,c=0;break;default:this.sampleHeight=this.expandedRowHeight,c=1}const l=this.sampleHeight;for(let e of r)e.pixelRect=void 0;const h=t+n,d=o+i*s+1,u=s;this.sampleYStart=void 0;for(let i of r){if(i.endd)continue;const n=i.sampleKey||i.sample;i.row=a[n];const r=i.row*l+c;void 0===this.sampleYStart&&(this.sampleYStart=r);if(r+lh)continue;const s=Math.max(i.start,o);let f=Math.round((s-o)/u);const p=Math.min(i.end,d),g=Math.round((p-o)/u);let m,w,b=Math.max(1,g-f);if(this.color?m=\"function\"==typeof this.color?this.color(i):this.color:this.colorTable&&(m=this.colorTable.getColor(i.value.toLowerCase())),\"mut\"===this.type)w=l-2*c,b<3&&(b=3,f-=1);else if(\"shoebox\"===this.type){m=this.sbColorScale.getColor(i.value);let e=l;if(l<.25){const t=.1+2*Math.abs(t.value);e=Math.min(1,t*l)}w=e-2*c}else{let e=i.value;this.isLog||(e=ys.log2(e/2)),m=e<-.1?this.negColorScale.getColor(e):e>.1?this.posColorScale.getColor(e):\"white\";let t=l;if(l<.25){const i=.1+2*Math.abs(e);t=Math.min(1,i*l)}w=t-2*c}i.pixelRect={x:f,y:r,w:b,h:w},e.fillStyle=m,e.fillRect(f,r,b,w)}}}checkForLog(e){if(void 0===this.isLog){this.isLog=!1;for(let t of e)if(t.value<0)return void(this.isLog=!0)}}computePixelHeight(e){if(!e)return 0;const t=\"SQUISHED\"===this.displayMode?this.squishedRowHeight:this.expandedRowHeight;return this.updateSampleKeys(e),this.sampleKeys.length*t}async sortByValue(e,t){const i=e.chr;let n,r;if(e.position?(n=e.position-1,r=n+1):(n=e.start,r=e.end),t||(t=await this.featureSource.getFeatures({chr:i,start:n,end:r})),!t)return;this.updateSampleKeys(t);const s={},o=\"ASC\"===e.direction?1:-1,a=()=>{const e=r-n+1;for(let i of t){if(i.endr)break;const t=Math.max(n,i.start),o=(Math.min(r,i.end)-t)/e,a=i.sampleKey||i.sample,c=s[a]||0;s[a]=c+o*i.value}this.sampleKeys.sort((function(e,t){let i=s[e],n=s[t];return i||(i=o*Number.MAX_VALUE),n||(n=o*Number.MAX_VALUE),i===n?0:i>n?o:-1*o}))},c=()=>{for(let e of t){if(e.endr)break;const t=e.sampleKey||e.sample;(!s.hasOwnProperty(t)||e.value.localeCompare(s[t])>0)&&(s[t]=e.value)}this.sampleKeys.sort((function(e,t){let i=s[e]||\"\",n=s[t]||\"\";return o*i.localeCompare(n)}))};\"mut\"===this.type?c():a(),this.trackView.repaintViews()}sortByAttribute(e,t){this.sampleKeys=this.browser.sampleInfo.getSortedSampleKeysByAttribute(this.sampleKeys,e,t),this.trackView.repaintViews()}clickedFeatures(e){const t=super.clickedFeatures(e),i=e.y;return t.filter((function(e){const t=e.pixelRect;return t&&i>=t.y&&i<=t.y+t.h}))}hoverText(e){const t=this.clickedFeatures(e);if(t&&t.length>0)return`${t[0].sample}: ${t[0].value}`}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=[];for(let e of t){i.length>0&&(i.push(\"
\"),i.push(\"
\"));const t=e._f||e,n=\"function\"==typeof t.popupData?t.popupData(this.type,this.browser.genome.id):this.extractPopupData(t);Array.prototype.push.apply(i,n)}return i}contextMenuItemList(e){const t=e.genomicLocation,i=t=>{const i=e.viewport.cachedFeatures;this.sortByValue(t,i)},n=e.referenceFrame.toBP(2.5);return[\"DESC\",\"ASC\"].map((r=>{const s=\"DESC\"===r?\"descending\":\"ascending\";return{label:\"seg\"===this.type||\"shoebox\"===this.type?`Sort by value (${s})`:`Sort by type (${s})`,click:()=>{const s={option:\"VALUE\",direction:r,chr:e.referenceFrame.chr,start:Math.floor(t-n),end:Math.floor(t+n)};i(s),this.config.sort=s}}}))}get supportsWholeGenome(){return(!1===this.config.indexed||!this.config.indexURL)&&!1!==this.config.supportsWholeGenome}updateSampleKeys(e){if(this.explicitSamples)return;const t=new Set(this.sampleKeys);for(let i of e){const e=i.sampleKey||i.sample;t.has(e)||(this.sampleKeys.push(e),t.add(e))}}}const lp={low:.1,high:1.5,lowColor:\"rgb(255,255,255)\",highColor:\"rgb(255,0,0)\"},hp={low:-1.5,high:-.1,lowColor:\"rgb(0,0,255)\",highColor:\"rgb(255,255,255)\"},dp={indel:\"rgb(0,200,0)\",\"targeted region\":\"rgb(236,155,43)\",truncating:\"rgb(\\t150,0,0)\",\"non-coding transcript\":\"rgb(0,0,150)\",synonymous:\"rgb(109,165,95)\",silent:\"rgb(109,135,80)\",missense_mutation:\"rgb(72,130,187)\",missense:\"rgb(72,130,187)\",\"splice site\":\"rgb(143,83,155)\",splice_region:\"rgb(143,83,155)\",nonsense:\"rgb(216, 57,81)\",nonsense_mutation:\"rgb(216, 57,81)\",frame_shift_del:\"rgb(226,135,65)\",frame_shift_ins:\"rgb(226,135,65)\",in_frame_del:\"rgb(247,235,94)\",in_frame_ins:\"rgb(247,235,94)\",\"*other*\":\"rgb(159,91,50)\"};class up{constructor(e){this.paired=!0,this.firstAlignment=e,this.chr=e.chr,this.readName=e.readName,e.startt.start?this.connectingEnd=e.start:this.connectingStart=e.start+e.lengthOnRef,this.start=Math.min(t.start,e.start),this.end=Math.max(t.start+t.lengthOnRef,e.start+e.lengthOnRef),this.lengthOnRef=this.end-this.start,this.scStart=Math.min(t.scStart,e.scStart);const i=Math.max(t.scStart+t.scLengthOnRef,e.scStart+e.scLengthOnRef);this.scLengthOnRef=i-this.scStart}containsLocation(e,t){const i=t?this.scStart:this.start,n=t?this.scLengthOnRef:this.lengthOnRef;return e>=i&&e<=i+n}alignmentContaining(e,t){return this.firstAlignment.containsLocation(e,t)?this.firstAlignment:this.secondAlignment&&this.secondAlignment.containsLocation(e,t)?this.secondAlignment:void 0}popupData(e){let t=this.firstAlignment.popupData(e);return this.secondAlignment&&(t.push(\"-------------------------------\"),t=t.concat(this.secondAlignment.popupData(e))),t}isPaired(){return!0}isMateMapped(){return!0}isProperPair(){return this.firstAlignment.isProperPair()}get fragmentLength(){return Math.abs(this.firstAlignment.fragmentLength)}get firstOfPairStrand(){return this.firstAlignment.firstOfPairStrand}get pairOrientation(){return this.firstAlignment.pairOrientation}hasTag(e){return this.firstAlignment.hasTag(e)||this.secondAlignment&&this.secondAlignment.hasTag(e)}getGroupValue({option:e,tag:t}){switch(e){case\"strand\":return this.isNegativeStrand()?\"-\":\"+\";case\"FIRST_IN_PAIR_STRAND\":return this.isPaired()?this.isFirstOfPair()?this.isNegativeStrand()?\"-\":\"+\":this.isSecondOfPair()?this.isNegativeStrand()?\"+\":\"-\":void 0:void 0;case\"START\":return this.start;case\"INSERT_SIZE\":return this.fragmentLength;case\"MATE_CHR\":return this.mate?this.mate.chr:void 0;case\"MQ\":return this.mq;case\"ALIGNED_READ_LENGTH\":return this.lengthOnRef;case\"TAG\":return this.tags()[t];case\"PHASE\":return this.tags().HP;case\"READ_ORDER\":return this.isPaired()&&this.isFirstOfPair()?\"FIRST\":this.isPaired()&&this.isSecondOfPair()?\"SECOND\":\"\";default:return}}}class fp{static instances=new Map;static getKey(e,t,i){const n=\"\"+e+t+i;return fp.instances.has(n)||fp.instances.set(n,new fp(e,t,i)),fp.instances.get(n)}constructor(e,t,i){this.base=e,this.strand=t,this.modification=i,this.canonicalBase=\"+\"===this.strand?this.base:bc(this.base)}getCanonicalBase(){}toString(){return\"\"+this.base+this.strand+this.modification}static compare(e,t){const i=e.modification,n=t.modification;return i===n?e.strand.charAt(0)-t.strand.charAt(0):pp.has(i)&pp.has(n)?pp.get(i)-pp.get(n):pp.has(i)?1:pp.has(n)?-1:i>n?1:-1}}const pp=new Map([\"NONE_C\",\"NONE_T\",\"NONE_G\",\"NONE_A\",\"m\",\"h\",\"f\",\"c\",\"C\",\"g\",\"e\",\"b\",\"T\",\"U\",\"a\",\"A\",\"o\",\"G\",\"n\",\"N\"].map(((e,t)=>[e,t])));class gp{constructor(e,t,i,n){this.base=e,this.modification=i,this.strand=t,this.likelihoods=n,this.canonicalBase=\"+\"==this.strand?this.base:bc(this.base),this.key=fp.getKey(e,t,i)}containsPosition(e){return this.likelihoods.has(e)}is5mC(){return this.modification.equals(\"m\")&&(\"C\"===this.base&&\"+\"===this.strand||\"G\"===this.base&&\"-\"===this.strand)}fullName(){return mp.get(this.modification)||this.modification}}const mp=new Map;mp.set(\"m\",\"5mC\"),mp.set(\"h\",\"5hmC\"),mp.set(\"f\",\"5fC\"),mp.set(\"c\",\"5caC\"),mp.set(\"g\",\"5hmU\"),mp.set(\"e\",\"5fU\"),mp.set(\"b\",\"5caU\"),mp.set(\"a\",\"6mA\"),mp.set(\"o\",\"8xoG\"),mp.set(\"n\",\"Xao\"),mp.set(\"C\",\"Unknown C\"),mp.set(\"T\",\"Unknown T\"),mp.set(\"A\",\"Unknown A\"),mp.set(\"G\",\"Unknown G\"),mp.set(\"N\",\"Unknown\");const wp=new Map([[\"m\",\"5mC\"],[\"h\",\"5hmC\"],[\"f\",\"5fC\"],[\"c\",\"5caC\"],[\"g\",\"5hmU\"],[\"e\",\"5fU\"],[\"b\",\"5caU\"],[\"a\",\"6mA\"],[\"o\",\"8xoG\"],[\"n\",\"Xao\"],[\"C\",\"Unknown C\"],[\"T\",\"Unknown T\"],[\"A\",\"Unknown A\"],[\"G\",\"Unknown G\"],[\"N\",\"Unknown\"]]);function bp(e){return wp.has(e)?wp.get(e):\"Uknown\"}function Fp(e){if(!e)return!1;const t=e.length;if(0==t)return!1;for(let i=0;i\"9\")return!1}return!0}function vp(e){return e<0?e+256:e}class yp{allModifications=new Set;simplexModifications=new Set;maxLikelihoods=new Map;nomodLikelihoods=new Map;lastThreshold;incrementCounts(e){if(!e.blocks)return;const t=e.getBaseModificationSets();if(t)for(let i of e.blocks)if(\"S\"!==i.type)for(let e=0;eo&&(s=e.canonicalBase,o=c,n=t)}}if(0!=s){const t=i.start+e,r=fp.getKey(s,\"+\",\"NONE_\"+s);this.allModifications.add(r);const c=(e,t,i,n)=>{let r=n.get(i);r||(r=new Map,n.set(i,r));let s=r.get(e);s||(s=[],r.set(e,s)),s.push(t)};c(t,o,n,this.maxLikelihoods),a>o?c(t,a,r,this.nomodLikelihoods):c(t,o,n,this.nomodLikelihoods)}}}getCount(e,t,i,n){this.lastThreshold=i;const r=255*i,s=n?this.nomodLikelihoods.get(t):this.maxLikelihoods.get(t);if(!s)return 0;const o=s.get(e);if(o){let e=0;for(let t of o){vp(t)>=r&&e++}return e}return 0}getLikelihoodSum(e,t,i,n){this.lastThreshold=i;const r=255*i,s=(n?this.nomodLikelihoods.get(t):this.maxLikelihoods.get(t)).get(e);if(s){let e=0;for(let t of s){const i=vp(t);i>=r&&(e+=i)}return e}return 0}popupData(e,t){const i=[];i.push(\"Modifications with likelihood > \"+100*this.lastThreshold+\"%\");for(let n of this.maxLikelihoods.keys()){if(this.maxLikelihoods.get(n).has(e)){let r=\"basemod2\"===t;const s=this.getCount(e,n,this.lastThreshold,r);if(s>0){const t=this.getLikelihoodSum(e,n,this.lastThreshold,r)/s*.3921568,o=bp(n.modification);i.push(o+\" (\"+n.base+n.strand+\"): \"+s+\" @ average likelihood \"+Math.round(t)+\"%\")}}}return i}computeSimplex(){const e=new Set(Array.from(this.allModifications).filter((e=>\"-\"===e.strand)).map((e=>e.modification)));for(let t of this.allModifications)\"+\"!==t.strand||e.has(t.modification)||(this.simplexModifications.add(t.modification),this.simplexModifications.add(\"NONE_\"+t.getCanonicalBase()))}}class Ap{constructor(){this.alignments=[],this.score=void 0}findAlignment(e,t=!1){const i=(e,i)=>i>=e.start&&i=s.start&&e0?h-=e:0===h&&(h=1)}return h}(s,r,e);case\"strand\":return s.strand?1:-1;case\"START\":return s.start;case\"TAG\":return s.tags()[i];case\"READ_NAME\":return s.readName;case\"INSERT_SIZE\":return-Math.abs(s.fragmentLength);case\"GAP_SIZE\":return-s.gapSizeAt(e);case\"MATE_CHR\":return s.mate?s.mate.chr:Number.MAX_VALUE;case\"MQ\":return void 0===s.mq?Number.MAX_VALUE:-s.mq;case\"ALIGNED_READ_LENGTH\":return-s.lengthOnRef;default:return Number.MAX_VALUE}}}var Cp={fr:{F1R2:\"LR\",F2R1:\"LR\",F1F2:\"LL\",F2F1:\"LL\",R1R2:\"RR\",R2R1:\"RR\",R1F2:\"RL\",R2F1:\"RL\"},rf:{R1F2:\"LR\",R2F1:\"LR\",R1R2:\"LL\",R2R1:\"LL\",F1F2:\"RR\",F2F1:\"RR\",F1R2:\"RL\",F2R1:\"RL\"},ff:{F2F1:\"LR\",R1R2:\"LR\",F2R1:\"LL\",R1F2:\"LL\",R2F1:\"RR\",F1R2:\"RR\",R2R1:\"RL\",F1F2:\"RL\"}};class _p{#A=[];baseModificationKeys=new Set;constructor(e,t,i,{samplingWindowSize:n,samplingDepth:r,alleleFreqThreshold:s,colorBy:o}){this.alleleFreqThreshold=void 0===s?.2:s,this.samplingWindowSize=n||100,this.samplingDepth=r||1e3,this.chr=e,this.start=Math.floor(t),this.end=Math.ceil(i),this.length=i-t,this.coverageMap=new kp(e,t,i,this.alleleFreqThreshold),this.downsampledIntervals=[],o&&o.startsWith(\"basemod\")&&(this.baseModCounts=new yp),this.alignments=[],this.pairsCache=new Map,this.downsampledReads=new Set,this.currentBucket=new xp(this.start,this.start+this.samplingWindowSize,this),this.hasPairs=!1}pack({viewAsPairs:e,showSoftClips:t,expectedPairOrientation:i,groupBy:n,displayMode:r}){let s=this.allAlignments();s=e?function(e){const t=new Map,i=e.map((e=>{if(Np(e)){let i=t.get(e.readName);return i?(i.setSecondAlignment(e),t.delete(e.readName),i):(i=new up(e),t.set(e.readName,i),i)}return e}));return i}(s):function(e){return e.flatMap((e=>e instanceof up?[e.firstAlignment,e.secondAlignment].filter(Boolean):[e]))}(s),this.packAlignmentRows(s,t,i,n,r),this.alignments&&delete this.alignments}packAlignmentRows(e,t,i,n,r){this.#A=[];const s=(e,i)=>{e.sort((function(e,i){return t?e.scStart-i.scStart:e.start-i.start}));const n=new Ep(i);let r,s=0,o=0;const a=new Set,c=()=>{r=new Ap,n.push(r),s=0,o=0,a.clear()};for(c();e.length>0;)if(o>=0&&o(t?e.scStart:e.start)>s),o)}else e=e.filter((e=>!a.has(e))),c();return n},o=(e,t)=>{e.sort((function(e,t){return e.start-t.start}));const i=new Ep(t),{start:n,end:r}=this.viewport.genomicRange();for(let t of e)if(t.endr)this.#A.push(t);else{const e=new Ap;e.alignments.push(t),i.push(e)}return i};if(!e||0===e.length)return new Map;{const t=new Map;if(n)for(let r of e){const e=Mp(r,n,i)||\"\";t.has(e)||t.set(e,[]),t.get(e).push(r)}else t.set(\"\",e);const a=new Map,c=Array.from(t.keys()).sort(function(e,t){switch(e){case\"pairOrientation\":return function(e){const t=[\"LL\",\"RR\",\"RL\",\"LR\",\"\"];return(e,i)=>t.indexOf(e)-t.indexOf(i)}();case\"strand\":case\"firstOfPairStrand\":return Tp;default:return e&&e.startsWith(\"base:\")?Rp:Lp}}(n));for(let e of c){const i=t.get(e),n=\"FULL\"===r?o(i,e):s(i,e);a.set(e,n)}this.packedGroups=a}}push(e){this.hasPairs=this.hasPairs||e.isPaired(),this.coverageMap.incCounts(e);const t=e.getBaseModificationSets();if(t)for(let e of t)this.baseModificationKeys.add(e.key);this.baseModCounts&&this.baseModCounts.incrementCounts(e),this.downsampledReads.has(e.readName)?this.currentBucket.downsampledCount++:(e.start>=this.currentBucket.end&&(this.finishBucket(),this.currentBucket=new xp(e.start,e.start+this.samplingWindowSize,this)),this.currentBucket.addAlignment(e))}finish(){void 0!==this.currentBucket&&this.finishBucket(),this.hasAlignments=this.alignments.length>0,this.alignments.sort((function(e,t){return e.start-t.start})),this.baseModCounts&&this.baseModCounts.computeSimplex(),delete this.currentBucket,delete this.pairsCache,delete this.downsampledReads}contains(e,t,i){return this.chr===e&&this.start<=t&&this.end>=i}hasDownsampledIntervals(){return this.downsampledIntervals&&this.downsampledIntervals.length>0}finishBucket(){this.alignments=this.alignments.concat(this.currentBucket.alignments),this.currentBucket.downsampledCount>0&&this.downsampledIntervals.push(new Sp(this.currentBucket.start,this.currentBucket.end,this.currentBucket.downsampledCount))}allAlignments(){if(this.alignments)return this.alignments;if(this.packedGroups){const e=Array.from(this.packedGroups.values()).flatMap((e=>e.rows.flatMap((e=>e.alignments))));if(this.#A&&this.#A.length>0)for(let t of this.#A)e.push(t);return e}return[]}getMax(e,t){return this.coverageMap.getMax(e,t)}sortRows(e){if(this.packedGroups)for(let t of this.packedGroups.values())t.sortRows(e,this)}}class xp{constructor(e,t,{samplingDepth:i,downsampledReads:n,pairsCache:r}){this.start=e,this.end=t,this.alignments=[],this.downsampledCount=0,this.samplingDepth=i,this.downsampledReads=n,this.pairsCache=r,this.hasPairs=!1}addAlignment(e){this.hasPairs=this.hasPairs||e.isPaired();const t=this.hasPairs?Math.ceil(this.samplingDepth/2):this.samplingDepth;if(Np(e)){const t=this.pairsCache.get(e.readName);if(t)return t.setSecondAlignment(e),void this.pairsCache.delete(e.readName)}if(this.alignments.lengtht)break;const s=this.coverage[r];n>=e&&s&&(i=Math.max(i,s.total))}return i}incCounts(e){var t=this;if(void 0===e.blocks?i(e):e.blocks.forEach((function(e){i(e)})),e.gaps)for(let i of e.gaps)if(\"D\"===i.type){const e=i.start-t.bpStart;for(let n=e;n=this.coverage.length)return 0;const n=this.coverage[i];switch(t){case\"A\":case\"a\":return n.posA;case\"C\":case\"c\":return n.posC;case\"T\":case\"t\":return n.posT;case\"G\":case\"g\":return n.posG;case\"N\":case\"n\":return n.posN;default:return 0}}getNegCount(e,t){const i=e-this.bpStart;if(i<0||i>=this.coverage.length)return 0;const n=this.coverage[i];switch(t){case\"A\":case\"a\":return n.negA;case\"C\":case\"c\":return n.negC;case\"T\":case\"t\":return n.negT;case\"G\":case\"g\":return n.negG;case\"N\":case\"n\":return n.negN;default:return 0}}getCount(e,t){return this.getPosCount(e,t)+this.getNegCount(e,t)}getTotalCount(e){const t=e-this.bpStart;return t>=0&&t=t}}class Sp{constructor(e,t,i){this.start=e,this.end=t,this.counts=i}popupData(e){return[{name:\"start\",value:Math.floor(this.start+1)},{name:\"end\",value:this.end},{name:\"# downsampled:\",value:this.counts}]}}class Ep{pixelTop=0;pixelBottom=0;rows=[];constructor(e){this.name=this.name}push(e){this.rows.push(e)}get length(){return this.rows.length}sortRows(e,t){const i=[],n=[];for(let t of this.rows){void 0!==t.findAlignment(e.position,e.sortAsPairs)?i.push(t):n.push(t)}i.sort(((i,n)=>{const r=e.direction,s=i.getSortValue(e,t),o=n.getSortValue(e,t);if(void 0===o&&void 0!==o)return 1;if(void 0!==s&&void 0===o)return-1;const a=s>o?1:s>1);t(e[i])?r=i:n=i}return r}function Mp(e,t,i){let n,r,s;if(t.startsWith(\"tag:\"))n=t.substring(4),t=\"tag\";else if(t.startsWith(\"base:\")){const e=t.split(\":\");3===e.length&&(t=\"base\",r=e[1],s=Number.parseInt(e[2].replaceAll(\",\",\"\"))-1)}switch(t){case\"strand\":return e.strand?\"+\":\"-\";case\"firstOfPairStrand\":const t=e.firstOfPairStrand;return void 0===t?\"\":t?\"+\":\"-\";case\"mateChr\":return e.mate&&e.isMateMapped()?e.mate.chr:\"\";case\"pairOrientation\":return Cp[i][e.pairOrientation]||\"\";case\"chimeric\":return e.tags().SA?\"chimeric\":\"\";case\"supplementary\":return e.isSupplementary?\"supplementary\":\"\";case\"readOrder\":return e.isPaired()&&e.isFirstOfPair()?\"first\":e.isPaired()&&e.isSecondOfPair()?\"second\":\"\";case\"phase\":return e.tags().HP||\"\";case\"tag\":return e.tags()[n]||\"\";case\"base\":if(e.chr===r&&e.start<=s&&e.end>s){const t=e.readBaseAt(s);return t||\"GAP\"}return\"\";default:return}}const Dp=new Map([[\"A\",1],[\"T\",2],[\"C\",3],[\"G\",4],[\"N\",5],[\"GAP\",5],[\"\",7]]);function Rp(e,t){return Dp.has(e)&&Dp.has(t)?Dp.get(e)-Dp.get(t):e.localeCompare(t,void 0,{sensitivity:\"base\"})}function Tp(e,t){return e===t?0:e&&t?-e.localeCompare(t):e?1:-1}function Lp(e,t){if(e||t){if(e){if(t){if(e===t)return 0;if(sc(e)&&(sc(t),1))return Number.parseFloat(e)-Number.parseFloat(t);{let i=e.toString(),n=t.toString();return i.localeCompare(n,void 0,{sensitivity:\"base\"})}}return-1}return 1}return 0}class zp{constructor(e){const t=e.split(\",\");this.chr=t[0],this.start=parseInt(t[1]),this.strand=t[2].charAt(0),this.mapQ=parseInt(t[4]),this.numMismatches=parseInt(t[5]),this.lenOnRef=function(e){let t=0,i=\"\";for(let n=0;n47&&r<58)i+=e.charAt(n);else{switch(r){case 78:case 68:case 77:case 61:case 88:t+=parseInt(i.toString())}i=\"\"}}return t}(t[3])}printString(){return this.chr+\":\"+Dt(this.start)+\"-\"+Dt(this.start+this.lenOnRef)+\" (\"+this.strand+\") = \"+Dt(this.lenOnRef)+\"bp @MAPQ: \"+this.mapQ+\" NM: \"+this.numMismatches}}function Hp(e){return e.split(\";\").filter((e=>e.length>0)).map((e=>new zp(e)))}const Pp={c:1,C:1,s:2,S:2,i:4,I:4,f:4};class Op{constructor(){this.hidden=!1}isMapped(){return!(4&this.flags)}isPaired(){return!!(1&this.flags)}isProperPair(){return!!(2&this.flags)}isFirstOfPair(){return!!(64&this.flags)}isSecondOfPair(){return!!(128&this.flags)}isSecondary(){return!!(256&this.flags)}isSupplementary(){return!!(2048&this.flags)}isFailsVendorQualityCheck(){return!!(512&this.flags)}isDuplicate(){return!!(1024&this.flags)}isMateMapped(){return!(8&this.flags)}isNegativeStrand(){return!!(16&this.flags)}isMateNegativeStrand(){return!!(32&this.flags)}hasTag(e){const t=this.tagDict||function(e){let t=0;const i=e.length,n={};for(;t=i&&e<=i+n}popupData(e){const t=[];if(e=Math.floor(e),this.insertions){const n=this.seq;for(let r of this.insertions){var i=r.start;if(e===i||e===i-1)return t.push({name:\"Insertion\",value:n.substr(r.seqOffset,r.len)}),t.push({name:\"Location\",value:i}),t}}t.push({name:\"Read Name\",value:this.readName}),t.push(\"
\"),t.push({name:\"Alignment Start\",value:Dt(1+this.start),borderTop:!0}),t.push({name:\"Read Strand\",value:!0===this.strand?\"(+)\":\"(-)\",borderTop:!0});let n=this.cigar;if(n&&n.length>50){const e=25;n=`${n.substring(0,e-2)} ... ${n.substring(n.length-e+2)}`}t.push({name:\"Cigar\",value:n}),t.push({name:\"Mapping Quality\",value:this.mq}),t.push({name:\"Secondary\",value:a(this.isSecondary())}),t.push({name:\"Supplementary\",value:a(this.isSupplementary())}),t.push({name:\"Duplicate\",value:a(this.isDuplicate())}),t.push({name:\"Failed QC\",value:a(this.isFailsVendorQualityCheck())}),this.isPaired()&&(t.push(\"
\"),t.push({name:\"First in Pair\",value:!this.isSecondOfPair(),borderTop:!0}),t.push({name:\"Mate is Mapped\",value:a(this.isMateMapped())}),this.pairOrientation&&t.push({name:\"Pair Orientation\",value:this.pairOrientation}),this.isMateMapped()&&(t.push({name:\"Mate Chromosome\",value:this.mate.chr}),t.push({name:\"Mate Start\",value:this.mate.position+1}),t.push({name:\"Mate Strand\",value:!0===this.mate.strand?\"(+)\":\"(-)\"}),t.push({name:\"Insert Size\",value:this.fragmentLength})));const r=this.tags();if(r.hasOwnProperty(\"SA\")){t.push(\"
\"),t.push({name:\"Supplementary Alignments\",value:\"\"});const e=Hp(r.SA);if(e){t.push(\"
    \");for(let i of e)t.push(`
  • ${i.printString()}
  • `);t.push(\"
\")}}const s=new Set([\"SA\",\"MD\"]);t.push(\"
\");for(let e in r)s.has(e)||t.push({name:e,value:r[e]});t.push({name:\"Hidden Tags\",value:\"SA, MD\"}),t.push(\"
\"),t.push({name:\"Genomic Location: \",value:Dt(1+e)}),t.push({name:\"Read Base:\",value:this.readBaseAt(e)}),t.push({name:\"Base Quality:\",value:this.readBaseQualityAt(e)});const o=this.getBaseModificationSets();if(o){const i=this.positionToReadIndex(e);if(void 0!==i){let e=!1;for(let n of o)if(n.containsPosition(i)){e||(t.push(\"
\"),t.push(\"Base modifications:\"),e=!0);const r=Math.round(100/255*vp(n.likelihoods.get(i)));t.push(`${n.fullName()} @ likelihood = ${r}%`)}}}return t;function a(e){return e?\"Yes\":\"No\"}}readBaseAt(e){const t=qp(this.blocks,e);if(t){if(\"*\"===this.seq)return\"*\";{const i=t.seqIndexAt(e);return this.seq[i]}}}readBaseQualityAt(e){const t=qp(this.blocks,e);if(t){if(\"*\"===this.qual)return 30;{const i=t.seqIndexAt(e);return i>=0&&this.qual&&i=t.start&&e1)if(Fp(e))h.push(e);else for(let t=0;t=n.start&&t>1)+n;a+4=t)return!1;if(\"B\"!==String.fromCharCode(e[a+2])||\"I\"!==String.fromCharCode(e[a+3]))return!1;var l=ng(e,a+4),h=a+8;if(h+4*l>t)return!1;var d=\"\",u=0;s.length=0,a=h;for(var f=0;f>4,m=Zp[15&p];\"M\"!==m&&\"EQ\"!==m&&\"X\"!==m&&\"D\"!==m&&\"N\"!==m&&\"=\"!==m||(u+=g),d=d+g+m,s.push({len:g,ltr:m})}return r.cigar=d,r.lengthOnRef=u,!0},decodeBamRecords:function(e,t,i,n,r,s,o,a){for(;te.length)return;if(p<0){t=u;continue}if(void 0!==r&&(p>r||g>o))return!0;if(void 0!==r&&p>8,b=255&m,F=ng(e,t+16),v=(4294901760&F)>>16,y=65535&F,A=ng(e,t+20),C=ng(e,t+24),_=ng(e,t+28),x=ng(e,t+32);let k=[];for(let i=0;i>4,h=Zp[15&c];\"M\"!==h&&\"EQ\"!==h&&\"X\"!==h&&\"D\"!==h&&\"N\"!==h&&\"=\"!==h||(I+=l),S=S+l+h,E+=4,B={len:l,ltr:h},N.push(B)}if(f.chr=n[p],f.start=g,f.flags=v,f.strand=!(16&v),f.readName=k,f.cigar=S,f.lengthOnRef=I,f.fragmentLength=x,f.mq=w,tg.bam_tag2cigar(e,u,E,A,f,N),f.end=f.start+f.lengthOnRef,f.end>1;for(let t=0;t>4]),M.push(Xp[15&d])}M=M.slice(0,A).join(\"\"),E+=D;const R=[];for(let t=0;t=0&&(f.mate={chr:n[C],position:_,strand:!(32&v)}),f.seq=M,f.qual=R;const T=new Uint8Array(e.buffer.slice(E,u));f.tagDict=og(T),this.setPairOrientation(f),(void 0===a||a.pass(f))&&(ig(f,N),i.push(f)),t=u}},decodeSamRecords:function(e,t,i,n,r,s){var o,a,c,l,h,d,u,f,p,g;for(l=(o=Rt(e)).length,!1,a=0;ar)break;if(f=0,(g=rg(p.cigar)).forEach((function(e){var t=e.len,i=e.ltr;\"M\"!==i&&\"EQ\"!==i&&\"X\"!==i&&\"D\"!==i&&\"N\"!==i&&\"=\"!==i||(f+=t)})),p.lengthOnRef=f,!(p.start+feg&&(console.log(\"Warning: attempt to set sampling depth > maximum value of \"+eg),e.samplingDepth=eg)},setPairOrientation:function(e){if(e.isMapped()&&e.mate&&e.isMateMapped()&&e.mate.chr===e.chr){var t=e.strand?\"F\":\"R\",i=e.mate,n=i.strand?\"F\":\"R\",r=\" \",s=\" \";e.isFirstOfPair()?(r=\"1\",s=\"2\"):e.isSecondOfPair()&&(r=\"2\",s=\"1\");var o=[],a=e.fragmentLength,c=e.end-e.start;if(0===a)a=(e.start0?(o[0]=t,o[1]=r,o[2]=n,o[3]=s):(o[2]=t,o[3]=r,o[0]=n,o[1]=s),e.pairOrientation=o.join(\"\")}}};function ig(e,t){const i=[];let n,r,s=0,o=e.start;e.scStart=e.start,e.scLengthOnRef=e.lengthOnRef;for(let a of t){let t;switch(a.ltr){case\"H\":case\"P\":break;case\"S\":t=o,e.scLengthOnRef+=a.len,0===i.length&&(e.scStart-=a.len,t-=a.len),i.push(new $p({start:t,seqOffset:s,len:a.len,type:\"S\"})),s+=a.len;break;case\"N\":case\"D\":void 0===r&&(r=[]),r.push({start:o,len:a.len,type:a.ltr}),o+=a.len;break;case\"I\":void 0===n&&(n=[]),n.push(new $p({start:o,len:a.len,seqOffset:s,type:\"I\"})),s+=a.len;break;case\"M\":case\"EQ\":case\"=\":case\"X\":i.push(new $p({start:o,seqOffset:s,len:a.len,type:\"M\"})),s+=a.len,o+=a.len;break;default:console.log(\"Error processing cigar element: \"+a.len+a.ltr)}}e.blocks=i,e.insertions=n,e.gaps=r}function ng(e,t){return e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]}function rg(e){var t,i,n,r,s,o,a,c,l;for(t=[],i=[],s=null,r=e.length,n=0;n=48&&l<=57?i.push(o):(a=o,c=Number.parseInt(i.join(\"\")),i=[],null!==s&&s.ltr===a?s.len+=c:(s={len:c,ltr:a},t.push(s)));return t}function sg(e){var t={};return e.forEach((function(e){var i=e.split(\":\");t[i[0]]=i[2]})),t}function og(e){let t=0;const i=e.length,n={},r=new DataView(e.buffer);for(;t=0?atob(n):decodeURI(n);const r=new Uint8Array(n.length);for(var s=0;s\"start\"!==e&&\"end\"!==e)).map((e=>i[e])).filter((e=>t.has(e)));e.length>0&&(n=e[0])}return this.chrAliasTable.set(e,n),n}return e}}class cg{chrAliasTable=new Map;constructor(e,t){this.config=e,this.genome=t,this.bamPath=e.url,this.baiPath=e.indexURL,tg.setReaderDefaults(this,e),this._blockLoader=new Mh(e)}async readAlignments(e,t,i){const n=await this.#x(e),r=new _p(e,t,i,this.config);if(void 0===n)return r;{const e=(await this.getIndex()).chunksForRange(n,t,i);if(!e||0===e.length)return r;for(let s of e){const e=await this._blockLoader.getData(s.minv,s.maxv);if(tg.decodeBamRecords(e,s.minv.offset,r,this.header.chrNames,n,t,i,this.filter))break}return r.finish(),r}}async#x(e){if(await this.getHeader(),this.chrAliasTable.has(e)&&void 0===(e=this.chrAliasTable.get(e)))return;let t=this.header.chrToIndex[e];if(void 0===t){const i=await this.genome.getAliasRecord(e);let n;if(i){const e=Object.keys(i).filter((e=>\"start\"!==e&&\"end\"!==e)).map((e=>i[e])).filter((e=>void 0!==this.header.chrToIndex[e]));e.length>0&&(n=e[0],t=this.header.chrToIndex[e[0]])}this.chrAliasTable.set(e,n)}return t}async getHeader(){if(!this.header){const e=this.genome,t=await this.getIndex();let i;if(t.firstBlockPosition){const e=ic(this.config,{range:{start:t.firstBlockPosition,size:26}}),n=ms(await Vs.loadArrayBuffer(this.bamPath,e));i=t.firstBlockPosition+n}else i=64e3;const n=ic(this.config,{range:{start:0,size:i}});this.header=await tg.readHeader(this.bamPath,n,e)}return this.header}async getIndex(){return this.index||(this.index=await kh(this.baiPath,this.config)),this.index}async getChrIndex(){if(this.chrToIndex)return this.chrToIndex;{const e=await this.getHeader();return this.chrToIndex=e.chrToIndex,this.indexToChr=e.chrNames,this.chrNames=new Set(e.chrNames),this.chrToIndex}}}class lg{constructor(e,t){this.config=e,this.genome=t;const i={};e.sources.sequences.forEach((function(n){const r=t?t.getChromosomeName(n):n;i[r]=function(e,t,i){const n={url:e.sources.url.replace(\"$CHR\",i)};e.sources.indexURL&&(n.indexURL=e.sources.indexURL.replace(\"$CHR\",i));const r=Object.assign(e,n);return new cg(r,t)}(e,t,n)})),this.bamReaders=i,tg.setReaderDefaults(this,e)}async readAlignments(e,t,i){if(this.bamReaders.hasOwnProperty(e)){let n=this.bamReaders[e];return await n.readAlignments(e,t,i)}return new _p(e,t,i,this.config)}}const hg=function(e,t){this.config=e,this.genome=t,tg.setReaderDefaults(this,e)};function dg(){const e=this,t=this.genome;if(this.header)return Promise.resolve(this.header);{const i=this.config.url+\"?file=\"+this.config.alignmentFile+\"&options=-b,-H\",n=ic(this.config);return tg.readHeader(i,n,t).then((function(t){return e.header=t,t}))}}hg.prototype.readAlignments=function(e,t,i){var n=this;return dg.call(n).then((function(r){var s,o;return s=r.chrAliasTable.hasOwnProperty(e)?r.chrAliasTable[e]:e,o=n.config.url+\"?reference=\"+n.config.referenceFile+\"&file=\"+n.config.alignmentFile+\"®ion=\"+s+\":\"+t+\"-\"+i,Vs.loadString(o,ic(n.config)).then((function(o){var a;return r.chrToIndex[s],a=new _p(e,t,i,n.config),tg.decodeSamRecords(o,a,s,t,i,n.filter),a}))}))};class ug extends Qh{constructor(e,t){super(e,t),tg.setReaderDefaults(this,e)}async readAlignments(e,t,i){if(!this.header){const e=gs((await this.readHeaderData()).buffer);this.header=tg.decodeBamHeader(e,this.genome),this.chrAliasTable=new Map;for(let e of this.header.chrNames)this.chrAliasTable.set(e,this.genome.getChromosomeName(e))}let n=this.chrAliasTable.has(e)?this.chrAliasTable.get(e):e;const r=gs((await this.readData(n,t,i)).buffer);this.header=tg.decodeBamHeader(r,this.genome);const s=this.header.chrToIndex[e],o=new _p(e,t,i,this.config);return tg.decodeBamRecords(r,this.header.size,o,this.header.chrNames,s,t,i,this.filter),o.finish(),o}}\n/*! For license information please see cram-bundle.js.LICENSE.txt */for(var fg=(()=>{var e={4923:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function o(e){try{c(n.next(e))}catch(e){s(e)}}function a(e){try{c(n.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,\"__esModule\",{value:!0});const r=i(8712),s=i(5931),o=i(9747);function a(e,t){const[i,n,r,s,o,a]=t,c=i;e[c]||(e[c]=[]),e[c].push({start:n,span:r,containerStart:s,sliceStart:o,sliceBytes:a})}t.default=class{constructor(e){this.filehandle=(0,s.open)(e.url,e.path,e.filehandle)}parseIndex(){return n(this,void 0,void 0,(function*(){const e={},t=31===(i=yield this.filehandle.readFile())[0]&&139===i[1]?(0,r.unzip)(i):i;var i;if(t.length>4&&21578050===t.readUInt32LE(0))throw new o.CramMalformedError(\"invalid .crai index file. note: file appears to be a .bai index. this is technically legal but please open a github issue if you need support\");let n=[],s=\"\";for(const i of t)if(i>=48&&i<=57||!s&&45===i)s+=String.fromCharCode(i);else if(9===i)n.push(Number.parseInt(s,10)),s=\"\";else if(10===i)n.push(Number.parseInt(s,10)),s=\"\",a(e,n),n=[];else if(13!==i&&32!==i)throw new o.CramMalformedError(\"invalid .crai index file\");return s&&n.push(Number.parseInt(s,10)),6===n.length&&a(e,n),Object.entries(e).forEach((([t,i])=>{const n=i;e[t]=n.sort(((e,t)=>e.start-t.start||e.span-t.span))})),e}))}getIndex(){return this.parseIndexP||(this.parseIndexP=this.parseIndex().catch((e=>{throw this.parseIndexP=void 0,e}))),this.parseIndexP}hasDataForReferenceSequence(e){return n(this,void 0,void 0,(function*(){return!!(yield this.getIndex())[e]}))}getEntriesForRange(e,t,i){return n(this,void 0,void 0,(function*(){const n=(yield this.getIndex())[e];if(!n)return[];const r=e=>{const n=e.start,r=e.start+e.span;return n>i?-1:r<=t?1:0},s=[];for(const e of n)0===r(e)&&s.push(e);return s}))}}},9508:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=class{constructor(e,t){this.parameters=e,this.dataType=t}}},368:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const r=i(9747),s=n(i(9508)),o=i(612);class a extends s.default{constructor(e,t){if(super(e,t),\"int\"!==this.dataType)throw new r.CramUnimplementedError(`${this.dataType} decoding not yet implemented by BETA codec`)}decode(e,t,i,n){return(0,o.getBits)(t.content,n.coreBlock,this.parameters.length)-this.parameters.offset}}t.default=a},8635:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(i(9508)),s=i(400);class o extends r.default{constructor(e,t,i){super(e,t),this.instantiateCodec=i}decode(e,t,i,n){const r=this._getLengthCodec().decode(e,t,i,n),s=this._getDataCodec(),o=new Uint8Array(r);for(let a=0;a{(0,s.tinyMemoize)(o,e)}))},4839:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const r=i(9747),s=n(i(9508)),o=i(612);class a extends s.default{decode(e,t,i,n){const{blockContentId:s}=this.parameters,o=i[s];if(!o)throw new r.CramMalformedError(`no block found with content ID ${s}`);const a=n.externalBlocks.getCursor(s);return this._decodeByteArray(o,a)}_decodeByteArray(e,t){const i=e.content,{stopByte:n}=this.parameters,r=t.bytePosition;let s=t.bytePosition;for(;i[s]!==n&&s=e.content.length)throw new a.CramBufferOverrunError(\"attempted to read beyond end of block. this file seems truncated.\");return e.content[t.bytePosition++]}}t.default=c},8185:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const r=i(9747),s=n(i(9508)),o=i(612);class a extends s.default{constructor(e,t){if(super(e,t),\"int\"!==this.dataType)throw new r.CramUnimplementedError(`${this.dataType} decoding not yet implemented by GAMMA codec`)}decode(e,t,i,n){let r=1;for(;0===(0,o.getBits)(t.content,n.coreBlock,1);)r+=1;return((0,o.getBits)(t.content,n.coreBlock,r-1)|1<{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CramBufferOverrunError=void 0,t.getBits=function(e,t,n){let r=0;if(t.bytePosition+(7-t.bitPosition+n)/8>e.length)throw new i(\"read error during decoding. the file seems to be truncated.\");for(let i=n;i;i--)r<<=1,r|=e[t.bytePosition]>>t.bitPosition&1,t.bitPosition-=1,t.bitPosition<0&&(t.bytePosition+=1),t.bitPosition&=7;return r};class i extends Error{}t.CramBufferOverrunError=i},4341:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const r=i(9747),s=n(i(9508)),o=i(612);class a extends s.default{constructor(e,t){if(super(e,t),this.codes={},this.codeBook={},this.sortedCodes=[],this.sortedValuesByBitCode=[],this.sortedBitCodes=[],this.sortedBitLengthsByBitCode=[],this.bitCodeToValue=[],![\"byte\",\"int\"].includes(this.dataType))throw new TypeError(`${this.dataType} decoding not yet implemented by HUFFMAN_INT codec`);this.buildCodeBook(),this.buildCodes(),this.buildCaches(),0===this.sortedCodes[0].bitLength&&(this._decode=this._decodeZeroLengthCode)}buildCodeBook(){let e=new Array(this.parameters.numCodes);for(let t=0;te.bitLength-t.bitLength||e.symbol-t.symbol)),this.codeBook={},e.forEach((e=>{this.codeBook[e.bitLength]||(this.codeBook[e.bitLength]=[]),this.codeBook[e.bitLength].push(e.symbol)}))}buildCodes(){this.codes={};let e=0,t=-1;Object.entries(this.codeBook).forEach((([i,n])=>{const s=Number.parseInt(i,10);n.forEach((i=>{const n={bitLength:s,value:i,bitCode:0};t+=1;const o=s-e;if(t<<=o,n.bitCode=t,e+=o,function(e){let t=e-(e>>1)&1431655765;return t=(858993459&t)+(t>>2&858993459),16843009*(t+(t>>4)&252645135)>>24}(t)>s)throw new r.CramMalformedError(\"Symbol out of range\");this.codes[i]=n}))}))}buildCaches(){this.sortedCodes=Object.values(this.codes).sort(((e,t)=>e.bitLength-t.bitLength||e.bitCode-t.bitCode)),this.sortedValuesByBitCode=this.sortedCodes.map((e=>e.value)),this.sortedBitCodes=this.sortedCodes.map((e=>e.bitCode)),this.sortedBitLengthsByBitCode=this.sortedCodes.map((e=>e.bitLength));const e=Math.max(...this.sortedBitCodes);this.bitCodeToValue=new Array(e+1).fill(-1);for(let e=0;e-1&&this.sortedBitLengthsByBitCode[i]===t)return this.sortedValuesByBitCode[i];for(let i=e;this.sortedCodes[i+1].bitLength===t&&i{Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={CRAM_FLAG_PRESERVE_QUAL_SCORES:1,CRAM_FLAG_DETACHED:2,CRAM_FLAG_MATE_DOWNSTREAM:4,CRAM_FLAG_NO_SEQ:8,CRAM_FLAG_MASK:15,CRAM_M_REVERSE:1,CRAM_M_UNMAP:2,BAM_FPAIRED:1,BAM_FPROPER_PAIR:2,BAM_FUNMAP:4,BAM_FMUNMAP:8,BAM_FREVERSE:16,BAM_FMREVERSE:32,BAM_FREAD1:64,BAM_FREAD2:128,BAM_FSECONDARY:256,BAM_FQCFAIL:512,BAM_FDUP:1024,BAM_FSUPPLEMENTARY:2048,BAM_CMATCH:0,BAM_CINS:1,BAM_CDEL:2,BAM_CREF_SKIP:3,BAM_CSOFT_CLIP:4,BAM_CHARD_CLIP:5,BAM_CPAD:6,BAM_CEQUAL:7,BAM_CDIFF:8,BAM_CBACK:9,BAM_CIGAR_STR:\"MIDNSHP:XB\",BAM_CIGAR_SHIFT:4,BAM_CIGAR_MASK:15,BAM_CIGAR_TYPE:246183}},7219:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0});const n=i(6524),r=i(9747),s={BF:\"int\",CF:\"int\",RI:\"int\",RL:\"int\",AP:\"int\",RG:\"int\",MF:\"int\",NS:\"int\",NP:\"int\",TS:\"int\",NF:\"int\",TC:\"byte\",TN:\"int\",FN:\"int\",FC:\"byte\",FP:\"int\",BS:\"byte\",IN:\"byteArray\",SC:\"byteArray\",DL:\"int\",BA:\"byte\",BB:\"byteArray\",RS:\"int\",PD:\"int\",HC:\"int\",MQ:\"int\",RN:\"byteArray\",QS:\"byte\",QQ:\"byteArray\",TL:\"int\"};t.default=class{constructor(e){this.dataSeriesCodecCache={},this.tagCodecCache={},this.tagEncoding={},this.readNamesIncluded=e.preservation.RN,this.APdelta=e.preservation.AP,this.referenceRequired=!!e.preservation.RR,this.tagIdsDictionary=e.preservation.TD,this.substitutionMatrix=function(e){const t=new Array(5);for(let e=0;e<5;e+=1)t[e]=new Array(4);return t[0][e[0]>>6&3]=\"C\",t[0][e[0]>>4&3]=\"G\",t[0][e[0]>>2&3]=\"T\",t[0][3&e[0]]=\"N\",t[1][e[1]>>6&3]=\"A\",t[1][e[1]>>4&3]=\"G\",t[1][e[1]>>2&3]=\"T\",t[1][3&e[1]]=\"N\",t[2][e[2]>>6&3]=\"A\",t[2][e[2]>>4&3]=\"C\",t[2][e[2]>>2&3]=\"T\",t[2][3&e[2]]=\"N\",t[3][e[3]>>6&3]=\"A\",t[3][e[3]>>4&3]=\"C\",t[3][e[3]>>2&3]=\"G\",t[3][3&e[3]]=\"N\",t[4][e[4]>>6&3]=\"A\",t[4][e[4]>>4&3]=\"C\",t[4][e[4]>>2&3]=\"G\",t[4][3&e[4]]=\"T\",t}(e.preservation.SM),this.dataSeriesEncoding=e.dataSeriesEncoding,this.tagEncoding=e.tagEncoding}getCodecForTag(e){const t=this.tagCodecCache[e];if(t)return t;{const t=this.tagEncoding[e];if(!t)throw new Error(\"Error, no tag encoding\");const i=(0,n.instantiateCodec)(t,\"byteArray\");return this.tagCodecCache[e]=i,i}}getTagNames(e){return this.tagIdsDictionary[e]}getCodecForDataSeries(e){let t=this.dataSeriesCodecCache[e];if(void 0===t){const i=this.dataSeriesEncoding[e];if(i){const o=s[e];if(!o)throw new r.CramMalformedError(`data series name ${e} not defined in file compression header`);t=(0,n.instantiateCodec)(i,o),this.dataSeriesCodecCache[e]=t}}return t}toJSON(){const e={};return Object.keys(this).forEach((t=>{t.endsWith(\"Cache\")||(e[t]=this[t])})),e}}},78:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function o(e){try{c(n.next(e))}catch(e){s(e)}}function a(e){try{c(n.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}c((n=n.apply(e,t||[])).next())}))},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const s=i(8287),o=i(9747),a=i(400),c=r(i(6771)),l=r(i(7219)),h=i(3165);class d{constructor(e,t){this.file=e,this.filePosition=t}getHeader(){return this._readContainerHeader(this.filePosition)}getCompressionHeaderBlock(){return n(this,void 0,void 0,(function*(){const e=yield this.getHeader();if(!(null==e?void 0:e.numRecords))return null;const{majorVersion:t}=yield this.file.getDefinition(),i=(0,h.getSectionParsers)(t),n=yield this.getFirstBlock();if(void 0===n)return;if(\"COMPRESSION_HEADER\"!==n.contentType)throw new o.CramMalformedError(`invalid content type ${n.contentType} in compression header block`);const r=(0,a.parseItem)(n.content,i.cramCompressionHeader.parser,0,n.contentPosition);return Object.assign(Object.assign({},n),{parsedContent:r})}))}getFirstBlock(){return n(this,void 0,void 0,(function*(){const e=yield this.getHeader();if(e)return this.file.readBlock(e._endPosition)}))}getCompressionScheme(){return n(this,void 0,void 0,(function*(){const e=yield this.getCompressionHeaderBlock();if(e)return new l.default(e.parsedContent)}))}getSlice(e,t){return new c.default(this,e,t)}_readContainerHeader(e){return n(this,void 0,void 0,(function*(){const{majorVersion:t}=yield this.file.getDefinition(),i=(0,h.getSectionParsers)(t),{cramContainerHeader1:n,cramContainerHeader2:r}=i,{size:o}=yield this.file.stat();if(e>=o)return void console.warn(`pos:${e}>=fileSize:${o} in cram container`);const c=s.Buffer.allocUnsafe(n.maxLength);yield this.file.read(c,0,n.maxLength,e);const l=(0,a.parseItem)(c,n.parser),d=(0,a.itf8Size)(l.numLandmarks);if(e+l.length>=o)return void console.warn(`container at ${e} is beyond fileSize:${o}, skipping`);const u=s.Buffer.allocUnsafe(r.maxLength(l.numLandmarks));yield this.file.read(u,0,r.maxLength(l.numLandmarks),e+l._size-d);const f=(0,a.parseItem)(u,r.parser);return this.file.validateChecksums&&void 0!==f.crc32&&(yield this.file.checkCrc32(e,l._size+f._size-d-4,f.crc32,`container header beginning at position ${e}`)),Object.assign(l,f,{_size:l._size+f._size-d,_endPosition:l._size+f._size-d+e})}))}}t.default=d,\"getHeader getCompressionHeaderBlock getCompressionScheme\".split(\" \").forEach((e=>{(0,a.tinyMemoize)(d,e)}))},6794:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function o(e){try{c(n.next(e))}catch(e){s(e)}}function a(e){try{c(n.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}c((n=n.apply(e,t||[])).next())}))},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const s=i(8287),o=r(i(928)),a=r(i(7392)),c=r(i(9151)),l=r(i(235)),h=i(1307),d=i(9747),u=i(8712),f=r(i(9989)),p=i(3165),g=r(i(78)),m=i(5931),w=i(400),b=i(5417);class F{constructor(e){var t;if(this.file=(0,m.open)(e.url,e.path,e.filehandle),this.validateChecksums=!0,this.fetchReferenceSequenceCallback=e.seqFetch,this.options={checkSequenceMD5:e.checkSequenceMD5,cacheSize:null!==(t=e.cacheSize)&&void 0!==t?t:2e4},this.featureCache=new a.default({maxSize:this.options.cacheSize}),function(){const e=new Uint32Array([287454020]),t=new Uint8Array(e.buffer);return 68===t[0]?0:17===t[0]?1:2}()>0)throw new Error(\"Detected big-endian machine, may be unable to run\")}read(e,t,i,n){return this.file.read(e,t,i,n)}stat(){return this.file.stat()}getDefinition(){return n(this,void 0,void 0,(function*(){const{maxLength:e,parser:t}=(0,p.cramFileDefinition)(),i=s.Buffer.allocUnsafe(e);yield this.file.read(i,0,e,0);const n=t(i).value;if(2!==n.majorVersion&&3!==n.majorVersion)throw new d.CramUnimplementedError(`CRAM version ${n.majorVersion} not supported`);return n}))}getSamHeader(){return n(this,void 0,void 0,(function*(){const e=yield this.getContainerById(0);if(!e)throw new d.CramMalformedError(\"file contains no containers\");const t=yield e.getFirstBlock();if(void 0===t)return(0,b.parseHeaderText)(\"\");const i=t.content,n=i.readInt32LE(0),r=i.toString(\"utf8\",4,4+n);return this.header=r,(0,b.parseHeaderText)(r)}))}getHeaderText(){return n(this,void 0,void 0,(function*(){return yield this.getSamHeader(),this.header}))}getContainerById(e){return n(this,void 0,void 0,(function*(){const{majorVersion:t}=yield this.getDefinition(),i=(0,p.getSectionParsers)(t);let n=i.cramFileDefinition.maxLength;const{size:r}=yield this.file.stat(),{cramContainerHeader1:s}=i;let o;for(let t=0;t<=e;t++){if(n+s.maxLength+8>=r)return;o=this.getContainerAtPosition(n);const i=yield o.getHeader();if(!i)throw new d.CramMalformedError(`container ${e} not found in file`);if(0===t){n=i._endPosition;for(let e=0;e=r)return;const o=s.Buffer.allocUnsafe(n.maxLength);return yield this.file.read(o,0,n.maxLength,e),(0,w.parseItem)(o,n.parser,0,e)}))}_parseSection(e,t){return n(this,arguments,void 0,(function*(e,t,i=e.maxLength,n){let r;if(n)r=n;else{const{size:e}=yield this.file.stat();if(t+i>=e)return;r=s.Buffer.allocUnsafe(i),yield this.file.read(r,0,i,t)}const o=(0,w.parseItem)(r,e.parser,0,t);if(o._size!==i)throw new d.CramMalformedError(`section read error: requested size ${i} does not equal parsed size ${o._size}`);return o}))}_uncompress(e,t,i){return n(this,void 0,void 0,(function*(){if(\"gzip\"===e)(0,u.unzip)(t).copy(i);else if(\"bzip2\"===e){const e=l.default.array(t);let n,r=l.default.header(e),o=0;do{n=l.default.decompress(e,r),-1!==n&&(s.Buffer.from(n).copy(i,o),o+=n.length,r-=n.length)}while(-1!==n)}else if(\"lzma\"===e){const e=new Response(new h.XzReadableStream((n=t,new ReadableStream({start(e){e.enqueue(n),e.close()}}))));s.Buffer.from(yield e.arrayBuffer()).copy(i)}else if(\"rans\"===e)(0,f.default)(t,i);else if(\"rans4x16\"===e)c.default.r4x16_uncompress(t,i);else if(\"arith\"===e)c.default.arith_uncompress(t,i);else if(\"fqzcomp\"===e)c.default.fqzcomp_uncompress(t,i);else{if(\"tok3\"!==e)throw new d.CramUnimplementedError(`${e} decompression not yet implemented`);c.default.tok3_uncompress(t,i)}var n}))}readBlock(e){return n(this,void 0,void 0,(function*(){const{majorVersion:t}=yield this.getDefinition(),i=(0,p.getSectionParsers)(t),n=yield this.readBlockHeader(e);if(void 0===n)return;const r=n._endPosition,o=s.Buffer.allocUnsafe(n.uncompressedSize),a=Object.assign(Object.assign({},n),{_endPosition:r,contentPosition:r,content:o});if(\"raw\"!==n.compressionMethod){const e=s.Buffer.allocUnsafe(n.compressedSize);yield this.read(e,0,n.compressedSize,r),yield this._uncompress(n.compressionMethod,e,o)}else yield this.read(o,0,n.uncompressedSize,r);if(t>=3){const t=yield this._parseSection(i.cramBlockCrc32,r+n.compressedSize);if(void 0===t)return;a.crc32=t.crc32,this.validateChecksums&&(yield this.checkCrc32(e,n._size+n.compressedSize,t.crc32,\"block data\")),a._endPosition=t._endPosition,a._size=a.compressedSize+i.cramBlockCrc32.maxLength}else a._endPosition=r+a.compressedSize,a._size=a.compressedSize;return a}))}}t.default=F,\"getDefinition getSectionParsers getSamHeader\".split(\" \").forEach((e=>{(0,w.tinyMemoize)(F,e)}))},7390:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=t.CramRecord=void 0;var r=i(8401);Object.defineProperty(t,\"CramRecord\",{enumerable:!0,get:function(){return n(r).default}});var s=i(6794);Object.defineProperty(t,\"default\",{enumerable:!0,get:function(){return n(s).default}})},8401:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.MateFlagsDecoder=t.CramFlagsDecoder=t.BamFlagsDecoder=t.MateFlags=t.CramFlags=t.BamFlags=void 0;const r=n(i(7295)),s={a:0,A:0,c:1,C:1,g:2,G:2,t:3,T:3,n:4,N:4};function o(e){const t={};for(const[i,n]of e)t[`is${n}`]=e=>!!(e&i),t[`set${n}`]=e=>e|i;return t}t.BamFlags=[[1,\"Paired\"],[2,\"ProperlyPaired\"],[4,\"SegmentUnmapped\"],[8,\"MateUnmapped\"],[16,\"ReverseComplemented\"],[32,\"MateReverseComplemented\"],[64,\"Read1\"],[128,\"Read2\"],[256,\"Secondary\"],[512,\"FailedQc\"],[1024,\"Duplicate\"],[2048,\"Supplementary\"]],t.CramFlags=[[1,\"PreservingQualityScores\"],[2,\"Detached\"],[4,\"WithMateDownstream\"],[8,\"DecodeSequenceAsStar\"]],t.MateFlags=[[1,\"OnNegativeStrand\"],[2,\"Unmapped\"]],t.BamFlagsDecoder=o(t.BamFlags),t.CramFlagsDecoder=o(t.CramFlags),t.MateFlagsDecoder=o(t.MateFlags),t.default=class{constructor({flags:e,cramFlags:t,readLength:i,mappingQuality:n,lengthOnRef:r,qualityScores:s,mateRecordNumber:o,readBases:a,readFeatures:c,mateToUse:l,readGroupId:h,readName:d,sequenceId:u,uniqueId:f,templateSize:p,alignmentStart:g,tags:m}){this.flags=e,this.cramFlags=t,this.readLength=i,this.mappingQuality=n,this.lengthOnRef=r,this.qualityScores=s,a&&(this.readBases=a),this.readGroupId=h,this.readName=d,this.sequenceId=u,this.uniqueId=f,this.templateSize=p,this.alignmentStart=g,this.tags=m,c&&(this.readFeatures=c),l&&(this.mate={flags:l.mateFlags,readName:l.mateReadName,sequenceId:l.mateSequenceId,alignmentStart:l.mateAlignmentStart}),o&&(this.mateRecordNumber=o)}isPaired(){return!!(this.flags&r.default.BAM_FPAIRED)}isProperlyPaired(){return!!(this.flags&r.default.BAM_FPROPER_PAIR)}isSegmentUnmapped(){return!!(this.flags&r.default.BAM_FUNMAP)}isMateUnmapped(){return!!(this.flags&r.default.BAM_FMUNMAP)}isReverseComplemented(){return!!(this.flags&r.default.BAM_FREVERSE)}isMateReverseComplemented(){return!!(this.flags&r.default.BAM_FMREVERSE)}isRead1(){return!!(this.flags&r.default.BAM_FREAD1)}isRead2(){return!!(this.flags&r.default.BAM_FREAD2)}isSecondary(){return!!(this.flags&r.default.BAM_FSECONDARY)}isFailedQc(){return!!(this.flags&r.default.BAM_FQCFAIL)}isDuplicate(){return!!(this.flags&r.default.BAM_FDUP)}isSupplementary(){return!!(this.flags&r.default.BAM_FSUPPLEMENTARY)}isDetached(){return!!(this.cramFlags&r.default.CRAM_FLAG_DETACHED)}hasMateDownStream(){return!!(this.cramFlags&r.default.CRAM_FLAG_MATE_DOWNSTREAM)}isPreservingQualityScores(){return!!(this.cramFlags&r.default.CRAM_FLAG_PRESERVE_QUAL_SCORES)}isUnknownBases(){return!!(this.cramFlags&r.default.CRAM_FLAG_NO_SEQ)}getReadBases(){if(!this.readBases&&this._refRegion){const e=function(e,t){if(!e.lengthOnRef&&!e.readLength)return null;if(e.isUnknownBases())return null;const i=e.alignmentStart-t.start;if(!e.readFeatures)return t.seq.slice(i,i+(e.lengthOnRef||0)).toUpperCase();let n=\"\",r=i,s=0;for(;n.lengththis.mate.alignmentStart&&s>0&&(s=-s),s>0?(r[0]=e,r[1]=i,r[2]=t,r[3]=n):(r[2]=e,r[3]=i,r[0]=t,r[1]=n),r.join(\"\")}return null}addReferenceSequence(e,t){this.readFeatures&&this.readFeatures.forEach((i=>{\"X\"===i.code&&function(e,t,i,n){const r=n.refPos-t.start,o=t.seq.charAt(r);o&&(n.ref=o);let a=s[o];void 0===a&&(a=4);const c=i.substitutionMatrix[a][n.data];c&&(n.sub=c)}(0,e,t,i)})),!this.readBases&&e.start<=this.alignmentStart&&e.end>=this.alignmentStart+(this.lengthOnRef||this.readLength)-1&&(this._refRegion=e)}toJSON(){const e={};return Object.keys(this).forEach((t=>{t.startsWith(\"_\")||(e[t]=this[t])})),e.readBases=this.getReadBases(),e}}},3165:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.cramFileDefinition=r,t.cramBlockHeader=s,t.cramBlockCrc32=o,t.cramTagDictionary=c,t.cramPreservationMap=l,t.isMappedSliceHeader=function(e){return\"number\"==typeof e.refSeqId},t.getSectionParsers=function(e){return{cramFileDefinition:r(),cramBlockHeader:s(),cramBlockCrc32:o(),cramDataSeriesEncodingMap:p(),cramTagEncodingMap:g(),cramCompressionHeader:{parser:(e,t)=>{const{value:i,offset:n}=l().parser(e,t);t=n;const{value:r,offset:s}=p().parser(e,t);t=s;const{value:o,offset:a}=g().parser(e,t);return t=a,{value:{dataSeriesEncoding:h(r),preservation:h(i),tagEncoding:h(o)},offset:t}}},cramEncoding:{parser:(e,t)=>f(e,t)},cramUnmappedSliceHeader:d(e),cramMappedSliceHeader:u(e),cramContainerHeader1:m(e),cramContainerHeader2:w(e)}};const n=i(400);function r(){return{parser:(e,t=0)=>{const i=e,n=new DataView(i.buffer,i.byteOffset,i.length);let r=0;const s=e.subarray(r,r+4).toString();r+=4;const o=n.getUint8(r);r+=1;const a=n.getUint8(r);r+=1;const c=i.subarray(r,r+20).toString().replaceAll(\"\\0\",\"\");return r+=20,{value:{magic:s,majorVersion:o,minorVersion:a,fileId:c},offset:r}},maxLength:26}}function s(){return{parser:(e,t=0)=>{const i=e,r=new DataView(i.buffer,i.byteOffset,i.length);let s=0;const o=r.getUint8(s),a=[\"raw\",\"gzip\",\"bzip2\",\"lzma\",\"rans\",\"rans4x16\",\"arith\",\"fqzcomp\",\"tok3\"][o];if(!a)throw new Error(`compression method number ${o} not implemented`);s+=1;const c=r.getUint8(s),l=[\"FILE_HEADER\",\"COMPRESSION_HEADER\",\"MAPPED_SLICE_HEADER\",\"UNMAPPED_SLICE_HEADER\",\"EXTERNAL_DATA\",\"CORE_DATA\"][c];if(!l)throw new Error(`invalid block content type id ${c}`);s+=1;const[h,d]=(0,n.parseItf8)(e,s);s+=d;const[u,f]=(0,n.parseItf8)(e,s);s+=f;const[p,g]=(0,n.parseItf8)(e,s);return s+=g,{offset:s,value:{uncompressedSize:p,compressedSize:u,contentId:h,contentType:l,compressionMethod:a}}},maxLength:17}}function o(){return{parser:(e,t)=>{const i=e,n=new DataView(i.buffer,i.byteOffset,i.length).getUint32(t,!0);return{offset:t+=4,value:{crc32:n}}},maxLength:4}}function a(e,t,i){const n=e.toString(\"utf8\",t,i),r=[];for(let e=0;e{const[i,r]=(0,n.parseItf8)(e,t);t+=r;const s=e.subarray(t,t+i);t+=i;const o=[];let c=0,l=0;for(;lc&&o.push(a(s,c,l)),{value:{size:i,ents:o},offset:t}}}}function l(){return{parser:(e,t)=>{const i=e,r=new DataView(i.buffer,i.byteOffset,i.length),[s,o]=(0,n.parseItf8)(e,t);t+=o;const[a,l]=(0,n.parseItf8)(e,t);t+=l;const h=[];for(let i=0;i{const[r,s]=(0,n.parseItf8)(t,i);i+=s;let o=0;if(e>=3){const[e,r]=(0,n.parseLtf8)(t,i);i+=r,o=e}else if(2===e){const[e,r]=(0,n.parseItf8)(t,i);i+=r,o=e}else console.warn(\"recordCounter=0\");const[a,c]=(0,n.parseItf8)(t,i);i+=c;const[l,h]=(0,n.parseItf8)(t,i);i+=h;const d=[];for(let e=0;e=2&&(u=[...t.subarray(i,i+16)],i+=16),{value:{recordCounter:o,md5:u,contentIds:d,numContentIds:l,numBlocks:a,numRecords:r},offset:i}},maxLength:e=>40+5*e}}function u(e){return{parser:(t,i)=>{const[r,s]=(0,n.parseItf8)(t,i);i+=s;const[o,a]=(0,n.parseItf8)(t,i);i+=a;const[c,l]=(0,n.parseItf8)(t,i);i+=l;const[h,d]=(0,n.parseItf8)(t,i);i+=d;let u=0;if(e>=3){const[e,r]=(0,n.parseLtf8)(t,i);i+=r,u=e}else if(2===e){const[e,r]=(0,n.parseItf8)(t,i);i+=r,u=e}else console.warn(\"majorVersion is <2, recordCounter set to 0\");const[f,p]=(0,n.parseItf8)(t,i);i+=p;const[g,m]=(0,n.parseItf8)(t,i);i+=m;const w=[];for(let e=0;e=2&&(v=[...t.subarray(i,i+16)],i+=16),{value:{md5:v,numBlocks:f,numRecords:h,numContentIds:g,refSeqSpan:c,refSeqId:r,refSeqStart:o,recordCounter:u,refBaseBlockId:b,contentIds:w},offset:i}},maxLength:e=>60+5*e}}function f(e,t){const i=e,r=new DataView(i.buffer,i.byteOffset,i.length),[s,o]=(0,n.parseItf8)(e,t);t+=o;const[a,c]=(0,n.parseItf8)(e,t);t+=c;const l={};if(0===s);else if(1===s){const[i,r]=(0,n.parseItf8)(e,t);l.blockContentId=i,t+=r}else if(2===s){const[i,r]=(0,n.parseItf8)(e,t);l.offset=i,t+=r;const[s,o]=(0,n.parseItf8)(e,t);l.M=s,t+=o}else if(3===s){const i=(0,n.parseItf8)(e,t),r=i[0];t+=i[1];const s=[];for(let i=0;i{const[i,r]=(0,n.parseItf8)(e,t);t+=r;const[s,o]=(0,n.parseItf8)(e,t);t+=o;const a=[];for(let i=0;i{const[i,r]=(0,n.parseItf8)(e,t);t+=r;const[s,o]=(0,n.parseItf8)(e,t);t+=o;const a=[];for(let i=0;i>16&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(255&i),{value:o,offset:c}=f(e,t);t=c,a.push({key:s,value:o})}return{value:{mapSize:i,ents:a,mapCount:s},offset:t}}}}function m(e){return{maxLength:52,parser:(t,i)=>{const r=t,s=new DataView(r.buffer,r.byteOffset,r.length).getInt32(i,!0);i+=4;const[o,a]=(0,n.parseItf8)(t,i);i+=a;const[c,l]=(0,n.parseItf8)(t,i);i+=l;const[h,d]=(0,n.parseItf8)(t,i);i+=d;const[u,f]=(0,n.parseItf8)(t,i);i+=f;let p,g=0;if(e>=3){const[e,r]=(0,n.parseLtf8)(t,i);g=e,i+=r}else if(2===e){const[e,r]=(0,n.parseItf8)(t,i);g=e,i+=r}else console.warn(\"setting recordCounter=0\");if(e>1){const[e,r]=(0,n.parseLtf8)(t,i);p=e,i+=r}const[m,w]=(0,n.parseItf8)(t,i);i+=w;const[b,F]=(0,n.parseItf8)(t,i);return{value:{length:s,refSeqId:o,refSeqStart:c,alignmentSpan:h,numBlocks:m,numLandmarks:b,numBases:p,recordCounter:g,numRecords:u},offset:i+=F}}}}function w(e){return{parser:(t,i)=>{const r=t,s=new DataView(r.buffer,r.byteOffset,r.length),[o,a]=(0,n.parseItf8)(t,i);i+=a;const c=[];for(let e=0;e=3&&(l=s.getUint32(i,!0),i+=4),{value:Object.assign(Object.assign({},void 0===l?{}:{crc32:l}),{numLandmarks:o,landmarks:c}),offset:i}},maxLength:e=>5+5*e+4}}},6484:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,i,c,l,h,d,u,f){let p=t(\"BF\");const g=t(\"CF\");if(!(0,s.isMappedSliceHeader)(c.parsedContent))throw new Error(\"slice header not mapped\");const m=u>1&&-2===c.parsedContent.refSeqId?t(\"RI\"):c.parsedContent.refSeqId,w=t(\"RL\");let b=t(\"AP\");i.APdelta&&(b+=d.lastAlignmentStart),d.lastAlignmentStart=b;const F=t(\"RG\");let v,y,A,C;if(i.readNamesIncluded&&(v=o(t(\"RN\"))),r.CramFlagsDecoder.isDetached(g)){const e=t(\"MF\");let n;i.readNamesIncluded||(n=o(t(\"RN\")),v=n);const s=t(\"NS\"),a=t(\"NP\");(e||s>-1)&&(y={mateFlags:e,mateSequenceId:s,mateAlignmentStart:a,mateReadName:n}),A=t(\"TS\"),r.MateFlagsDecoder.isUnmapped(e)&&(p=r.BamFlagsDecoder.setMateUnmapped(p)),r.MateFlagsDecoder.isOnNegativeStrand(e)&&(p=r.BamFlagsDecoder.setMateReverseComplemented(p))}else r.CramFlagsDecoder.isWithMateDownstream(g)&&(C=t(\"NF\")+f+1);const _=t(\"TL\");if(_<0)throw new n.CramMalformedError(\"invalid TL index\");const x={},k=i.getTagNames(_),I=k.length;for(let t=0;t1?\"SC\":\"IN\"],X:[\"number\",\"BS\"],D:[\"number\",\"DL\"],I:[\"string\",\"IN\"],i:[\"character\",\"BA\"],b:[\"string\",\"BB\"],q:[\"numArray\",\"QQ\"],Q:[\"number\",\"QS\"],H:[\"number\",\"HC\"],P:[\"number\",\"PD\"],N:[\"number\",\"RS\"]}[t];if(!h)throw new n.CramMalformedError(`invalid read feature code \"${t}\"`);let d=l(h);const u={B:[\"number\",\"QS\"]}[t];u&&(d=[d,l(u)]),o+=r;const f=o;a+=r;const p=a;\"D\"===t||\"N\"===t?a+=d:\"I\"===t||\"S\"===t?a-=d.length:\"i\"===t&&(a-=1),c[e]={code:t,pos:f,refPos:p,data:d}}return c}(b,e,t,0,u)),E=w,S)for(const{code:e,data:t}of S)\"D\"===e||\"N\"===e?E+=t:\"I\"===e||\"S\"===e?E-=t.length:\"i\"===e&&(E-=1);if(Number.isNaN(E)&&(console.warn(`${v||`${m}:${b}`} record has invalid read features`),E=w),N=t(\"MQ\"),r.CramFlagsDecoder.isPreservingQualityScores(g)){B=new Array(w);for(let e=0;e=0){const r=e[i.mateRecordNumber];if(!r)throw new s.CramMalformedError(\"intra-slice mate record not found, this file seems malformed\");n.push(...t(r))}return n}(i),r=n.map((e=>e.alignmentStart)),o=n.map((e=>e.alignmentStart+e.readLength-1)),a=Math.max(...o)-Math.min(...r)+1;a>=0&&n.forEach((e=>{if(void 0!==e.templateLength)throw new s.CramMalformedError(\"mate pair group has some members that have template lengths already, this file seems malformed\");e.templateLength=a}))}(e,0,i):function(e,t){const i=Math.min(e.alignmentStart,t.alignmentStart),n=Math.max(e.alignmentStart+e.readLength-1,t.alignmentStart+t.readLength-1)-i+1;e.templateLength=n,t.templateLength=n}(i,n)),i.mateRecordNumber=void 0}class f{constructor(e,t,i){this.container=e,this.containerPosition=t,this.sliceSize=i,this.file=e.file}getHeader(){return n(this,void 0,void 0,(function*(){const{majorVersion:e}=yield this.file.getDefinition(),t=(0,h.getSectionParsers)(e),i=yield this.container.getHeader();if(!i)throw new Error(\"no container header detected\");const n=yield this.file.readBlock(i._endPosition+this.containerPosition);if(void 0===n)throw new Error(\"block header undefined\");if(\"MAPPED_SLICE_HEADER\"===n.contentType){const e=(0,o.parseItem)(n.content,t.cramMappedSliceHeader.parser,0,i._endPosition);return Object.assign(Object.assign({},n),{parsedContent:e})}if(\"UNMAPPED_SLICE_HEADER\"===n.contentType){const e=(0,o.parseItem)(n.content,t.cramUnmappedSliceHeader.parser,0,i._endPosition);return Object.assign(Object.assign({},n),{parsedContent:e})}throw new s.CramMalformedError(`error reading slice header block, invalid content type ${n.contentType}`)}))}getBlocks(){return n(this,void 0,void 0,(function*(){const e=yield this.getHeader();let t=e._endPosition;const i=new Array(e.parsedContent.numBlocks);for(let e=0;e{\"EXTERNAL_DATA\"===e.contentType&&(t[e.contentId]=e)})),t}))}getBlockByContentId(e){return n(this,void 0,void 0,(function*(){return(yield this._getBlocksContentIdIndex())[e]}))}getReferenceRegion(){return n(this,void 0,void 0,(function*(){const e=(yield this.getHeader()).parsedContent;if(!(0,h.isMappedSliceHeader)(e))throw new Error(\"slice header not mapped\");if(e.refSeqId<0)return;const t=yield this.container.getCompressionScheme();if(void 0===t)throw new Error(\"compression scheme undefined\");if(e.refBaseBlockId>=0){const t=yield this.getBlockByContentId(e.refBaseBlockId);if(!t)throw new s.CramMalformedError(\"embedded reference specified, but reference block does not exist\");return{seq:t.data.toString(\"utf8\"),start:e.refSeqStart,end:e.refSeqStart+e.refSeqSpan-1,span:e.refSeqSpan}}if(t.referenceRequired||this.file.fetchReferenceSequenceCallback){if(!this.file.fetchReferenceSequenceCallback)throw new Error(\"reference sequence not embedded, and seqFetch callback not provided, cannot fetch reference sequence\");const t=yield this.file.fetchReferenceSequenceCallback(e.refSeqId,e.refSeqStart,e.refSeqStart+e.refSeqSpan-1);if(t.length!==e.refSeqSpan)throw new s.CramArgumentError(\"seqFetch callback returned a reference sequence of the wrong length\");return{seq:t,start:e.refSeqStart,end:e.refSeqStart+e.refSeqSpan-1,span:e.refSeqSpan}}}))}getAllRecords(){return this.getRecords((()=>!0))}_fetchRecords(){return n(this,void 0,void 0,(function*(){var e,t;const{majorVersion:i}=yield this.file.getDefinition(),n=yield this.container.getCompressionScheme();if(void 0===n)throw new Error(\"compression scheme undefined\");const r=yield this.getHeader(),a=yield this._getBlocksContentIdIndex();if(i>1&&this.file.options.checkSequenceMD5&&(0,h.isMappedSliceHeader)(r.parsedContent)&&r.parsedContent.refSeqId>=0&&\"0000000000000000\"!==(null===(e=r.parsedContent.md5)||void 0===e?void 0:e.join(\"\"))){const e=yield this.getReferenceRegion();if(e){const{seq:i,start:n,end:a}=e,c=(0,o.sequenceMD5)(i),l=null===(t=r.parsedContent.md5)||void 0===t?void 0:t.map((e=>(e<16?\"0\":\"\")+e.toString(16))).join(\"\");if(c!==l)throw new s.CramMalformedError(`MD5 checksum reference mismatch for ref ${r.parsedContent.refSeqId} pos ${n}..${a}. recorded MD5: ${l}, calculated MD5: ${c}`)}}const f=yield this.getCoreDataBlock(),p={lastAlignmentStart:(0,h.isMappedSliceHeader)(r.parsedContent)?r.parsedContent.refSeqStart:0,coreBlock:{bitPosition:7,bytePosition:0},externalBlocks:{map:new Map,getCursor(e){let t=this.map.get(e);return void 0===t&&(t={bitPosition:7,bytePosition:0},this.map.set(e,t)),t}}},g=e=>{const t=n.getCodecForDataSeries(e);if(!t)throw new s.CramMalformedError(`no codec defined for ${e} data series`);return t.decode(this,f,a,p)},m=new Array(r.parsedContent.numRecords);for(let t=0;t=0&&u(m,e,m[e],m[t])}return m}))}getRecords(e){return n(this,void 0,void 0,(function*(){const t=this.container.filePosition+this.containerPosition;let i=this.file.featureCache.get(t.toString());i||(i=this._fetchRecords(),this.file.featureCache.set(t.toString(),i));const r=(yield i).filter(e);if(r.length&&this.file.fetchReferenceSequenceCallback){const e=yield this.getHeader();if((0,h.isMappedSliceHeader)(e.parsedContent)&&(e.parsedContent.refSeqId>=0||-2===e.parsedContent.refSeqId)){const t=e.parsedContent.refSeqId>=0?e.parsedContent.refSeqId:void 0,i=yield this.container.getCompressionScheme();if(void 0===i)throw new Error(\"compression scheme undefined\");const s={};for(const e of r){const i=void 0!==t?t:e.sequenceId;let n=s[i];n||(n={id:i,start:e.alignmentStart,end:Number.NEGATIVE_INFINITY,seq:null},s[i]=n);const r=e.alignmentStart+(e.lengthOnRef||e.readLength)-1;r>n.end&&(n.end=r),e.alignmentStartn(this,void 0,void 0,(function*(){-1!==e.id&&e.start<=e.end&&this.file.fetchReferenceSequenceCallback&&(e.seq=yield this.file.fetchReferenceSequenceCallback(e.id,e.start,e.end))})))));for(const e of r){const n=s[void 0!==t?t:e.sequenceId];if(null==n?void 0:n.seq){const t=n.seq;e.addReferenceSequence(Object.assign(Object.assign({},n),{seq:t}),i)}}}}return r}))}}t.default=f,\"getHeader getBlocks _getBlocksContentIdIndex\".split(\" \").forEach((e=>{(0,o.tinyMemoize)(f,e)}))},400:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.itf8Size=function(e){return-128&e?-16384&e?-2097152&e?-268435456&e?5:4:3:2:1},t.parseItf8=function(e,t){let i=t;const n=e[i];let r;if(n<128?(r=n,i+=1):n<192?(r=16383&(n<<8|e[i+1]),i+=2):n<224?(r=2097151&(n<<16|e[i+1]<<8|e[i+2]),i+=3):n<240?(r=268435455&(n<<24|e[i+1]<<16|e[i+2]<<8|e[i+3]),i+=4):(r=(15&n)<<28|e[i+1]<<20|e[i+2]<<12|e[i+3]<<4|15&e[i+4],i+=5),i>e.length)throw new o.CramBufferOverrunError(\"Attempted to read beyond end of buffer; this file seems truncated.\");return[r,i-t]},t.parseLtf8=function(e,t){let i=t;const n=e[i];let r;if(n<128)r=n,i+=1;else if(n<192)r=16383&(e[i]<<8|e[i+1]),i+=2;else if(n<224)r=2097151&(e[i]<<16|e[i+1]<<8|e[i+2]),r=(63&n)<<16|e.readUInt16LE(i+1),i+=3;else if(n<240)r=268435455&(e[i]<<24|e[i+1]<<16|e[i+2]<<8|e[i+3]),i+=4;else if(n<248)r=(15&e[i])*Math.pow(2,32)+(e[i+1]<<24)|e[i+2]<<16|e[i+3]<<8|e[i+4],i+=5;else if(n<252)r=((7&e[i])<<8|e[i+1])*Math.pow(2,32)+(e[i+2]<<24)|e[i+3]<<16|e[i+4]<<8|e[i+5],i+=6;else if(n<254)r=((3&e[i])<<16|e[i+1]<<8|e[i+2])*Math.pow(2,32)+(e[i+3]<<24)|e[i+4]<<16|e[i+5]<<8|e[i+6],i+=7;else if(n<255){if(r=s.default.fromBytesBE(e.slice(i+1,i+8)),r.greaterThan(Number.MAX_SAFE_INTEGER)||r.lessThan(Number.MIN_SAFE_INTEGER))throw new Error(\"integer overflow\");r=r.toNumber(),i+=8}else{if(r=s.default.fromBytesBE(e.slice(i+1,i+9)),r.greaterThan(Number.MAX_SAFE_INTEGER)||r.lessThan(Number.MIN_SAFE_INTEGER))throw new Error(\"integer overflow\");r=r.toNumber(),i+=9}return[r,i-t]},t.parseItem=function(e,t,i=0,n=0){const{offset:r,value:s}=t(e,i);return Object.assign(Object.assign({},s),{_endPosition:r+n,_size:r-i})},t.tinyMemoize=function(e,t){const i=e.prototype[t],n=`_memo_${t}`;e.prototype[t]=function(){if(!(n in this)){const e=i.call(this);this[n]=e,Promise.resolve(e).catch((()=>{delete this[n]}))}return this[n]}},t.sequenceMD5=function(e){return(0,r.default)(e.toUpperCase().replaceAll(/[^\\u0021-\\u007e]/g,\"\"))};const r=n(i(3503)),s=n(i(8570)),o=i(612)},9747:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CramArgumentError=t.CramSizeLimitError=t.CramMalformedError=t.CramUnimplementedError=t.CramError=void 0;class i extends Error{}t.CramError=i;class n extends Error{}t.CramUnimplementedError=n,t.CramMalformedError=class extends i{},t.CramSizeLimitError=class extends i{},t.CramArgumentError=class extends i{}},2884:(e,t,i)=>{var n=i(8287).Buffer;const r=i(8175),s=i(2935),o=i(5871),a=i(235),c=128;e.exports=class{decode(e){return this.stream=new s(e),this.decodeStream(this.stream)}decodeStream(e,t=0){var i=this.stream.ReadByte();16&i||(t=this.stream.ReadUint7());var n,r=t,s=1&i;if(8&i)return this.decodeStripe(this.stream,t);if(i&c&&([n,r]=this.decodePackMeta(this.stream)),32&i)var o=this.decodeCat(this.stream,r);else o=4&i?this.decodeExt(this.stream,r):64&i?s?this.decodeRLE1(this.stream,r):this.decodeRLE0(this.stream,r):s?this.decode1(this.stream,r):this.decode0(this.stream,r);return i&c&&(o=this.decodePack(o,n,t)),o}encode(e,t){if(this.stream=new s(\"\",0,1.1*e.length+100),this.stream.WriteByte(t),16&t||this.stream.WriteUint7(e.length),8&t)return n.concat([this.stream.buf.slice(0,this.stream.pos),this.encodeStripe(this.stream,e,t>>8)]);var i,r=1&t,o=e.length;return t&c&&([i,e,o]=this.encodePack(e)),t&c&&this.stream.WriteStream(i),64&t?r?this.encodeRLE1(e,o,this.stream):this.encodeRLE0(e,o,this.stream):r?this.encode1(e,o,this.stream):this.encode0(e,o,this.stream)}decode0(e,t){var i=new n.allocUnsafe(t),s=e.ReadByte();0==s&&(s=256);var a=new o(s),c=new r(e);c.RangeStartDecode(e);for(var l=0;l=3?3:h;for(c[d].ModelEncode(i,l,u),h-=u,d=256;3==u;)u=h>=3?3:h,c[d].ModelEncode(i,l,u),d=257,h-=u}return l.RangeFinishEncode(i),i.buf.slice(0,i.pos)}decodeRLE1(e,t){var i=new n.allocUnsafe(t),s=e.ReadByte();0==s&&(s=256);for(var a=new Array(s),c=0;c=3?3:d;for(c[u].ModelEncode(i,l,f),d-=f,u=256;3==f;)f=d>=3?3:d,c[u].ModelEncode(i,l,f),u=257,d-=f}return l.RangeFinishEncode(i),i.buf.slice(0,i.pos)}decodePackMeta(e){this.nsym=e.ReadByte();for(var t=new Array(this.nsym),i=0;i>=1}}else if(this.nsym<=4)for(s=0,o=0;s>=2;else{if(!(this.nsym<=16))return e;for(s=0,o=0;s>=4}return r}packMeta(e){for(var t=new s(\"\",0,1024),i=new Array(256),n=0;no),n[o]=new Array(r[o]);for(var a=0,c=0;co),a[o]=this.decodeStream(e,s[o]);var c=new n.allocUnsafe(t);for(o=0;o{e.exports=class{constructor(e){this.low=0,this.range=4294967295,this.code=0,this.FFnum=0,this.carry=0,this.cache=0}RangeStartDecode(e){for(var t=0;t<5;t++)this.code=(this.code<<8)+e.ReadByte();this.code&=4294967295,this.code>>>=0}RangeGetFrequency(e){return this.range=Math.floor(this.range/e),Math.floor(this.code/this.range)}RangeDecode(e,t,i,n){for(this.code-=t*this.range,this.range*=i;this.range<1<<24;)this.range*=256,this.code=256*this.code+e.ReadByte()}RangeShiftLow(e){if(this.low<4278190080|this.carry){for(e.WriteByte(this.cache+this.carry);this.FFnum;)e.WriteByte(this.carry-1),this.FFnum--;this.cache=this.low>>>24,this.carry=0}else this.FFnum++;this.low<<=8,this.low>>>=0}RangeEncode(e,t,i,n){var r=this.low;for(this.range=Math.floor(this.range/n),this.low+=t*this.range,this.low>>>=0,this.range*=i,this.low{e.exports=class{constructor(e=256){this.total_freq=e,this.max_sym=e-1,this.S=new Array,this.F=new Array;for(var t=0;t<=this.max_sym;t++)this.S[t]=t,this.F[t]=1}ModelDecode(e,t){for(var i=t.RangeGetFrequency(this.total_freq),n=0,r=0;n+this.F[r]<=i;)n+=this.F[r++];t.RangeDecode(e,n,this.F[r],this.total_freq),this.F[r]+=16,this.total_freq+=16,this.total_freq>65519&&this.ModelRenormalise();var s=this.S[r];if(r>0&&this.F[r]>this.F[r-1]){var o=this.F[r];this.F[r]=this.F[r-1],this.F[r-1]=o,o=this.S[r],this.S[r]=this.S[r-1],this.S[r-1]=o}return s}ModelRenormalise(){this.total_freq=0;for(var e=0;e<=this.max_sym;e++)this.F[e]-=Math.floor(this.F[e]/2),this.total_freq+=this.F[e]}ModelEncode(e,t,i){for(var n=0,r=0;this.S[r]!=i;r++)n+=this.F[r];if(t.RangeEncode(e,n,this.F[r],this.total_freq),this.F[r]+=16,this.total_freq+=16,this.total_freq>65519&&this.ModelRenormalise(),i=this.S[r],r>0&&this.F[r]>this.F[r-1]){var s=this.F[r];this.F[r]=this.F[r-1],this.F[r-1]=s,s=this.S[r],this.S[r]=this.S[r-1],this.S[r-1]=s}}}},4373:(e,t,i)=>{var n=i(8287).Buffer;const r=i(2935),s=i(5871),o=i(8175);function a(e,t,i){for(var n=0,r=0,s=-1,o=new Array(1024);r>4,t.qshift=15&i,i=e.ReadByte(),t.qloc=i>>4,t.sloc=15&i,i=e.ReadByte(),t.ploc=i>>4,t.dloc=15&i,t.qmap=new Array(256),16&t.pflags)for(var n=0;n0&&128&t.pflags)a(e,t.qtab,256);else for(n=0;n<256;n++)t.qtab[n]=n;return t.ptab=new Array(1024),32&t.pflags&&a(e,t.ptab,1024),t.dtab=new Array(256),64&t.pflags&&a(e,t.dtab,256),t}function h(e,t,i,n,r,s){i.max_sel>0?r.s=n.sel.ModelDecode(e,t):r.s=0,r.x=i.stab[r.s];var o=i.params[r.x];if(o.fixed_len>=0){var a=n.len[0].ModelDecode(e,t);a|=n.len[1].ModelDecode(e,t)<<8,a|=n.len[2].ModelDecode(e,t)<<16,a|=n.len[3].ModelDecode(e,t)<<24,o.fixed_len>0&&(o.fixed_len=-a)}else a=-o.fixed_len;r.len=a,i.do_rev&&(s[r.rec]=n.rev.ModelDecode(e,t)),r.is_dup=0,2&o.pflags&&n.dup.ModelDecode(e,t)&&(r.is_dup=1),r.p=a,r.delta=0,r.qctx=0,r.prevq=0,r.rec++}function d(e,t,i){for(var n=0,r=0,s=new Array(2*i),o=0;n1?i.nparam-1:0,s=new Array(256);if(2&i)r=e.ReadByte(),a(e,s,256);else{for(var o=0;o0&&(t.sel=new s(e.max_sel+1)),t}(r),p=new o(e);p.RangeStartDecode(e);for(var g=new n.allocUnsafe(i),m={qctx:0,prevq:0,delta:0,p:0,s:0,x:0,len:0,is_dup:0,rec:0},w=0;w0&&f.dup.ModelDecode(e,p)){for(var b=0;b4),qshift:d,qloc:7,pbits:7,pshift:t[0]>128?1:0,ploc:0,dbits:d>4?0:1,dshift:3,dloc:15,sbits:0,sloc:15,do_stab:0,context:0,max_sym:c,nsym:a,do_qmap:u,do_dedup:0,fixed_len:1==t.length?1:0,do_sel:0,do_rev:0,do_pos:1,do_delta:d<=4?1:0,do_qtab:0,qbits:8+(d>4)-(0==o),sbits:1,sloc:15-(d<=4),do_stab:1,do_sel:1}]}(e,t,i,n),p=function(e,t,i,n,r,s,o){for(var a=[0,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],c=0;c1?1:0)|(t[0].do_stab?2:0);if(e.WriteByte(l),1&l&&e.WriteByte(t.length),2&l){var h=1<0&&h--,e.WriteByte(h),d(e,o,256)}for(var u=0;u0){for(c=0;c<256;c++)n[u][c]=c;t[u].do_qtab&&d(e,n[u],256)}if(t[u].pbits>0){for(c=0;c<1024;c++)r[u][c]=Math.min((1<>t[u].pshift);d(e,r[u],1024)}if(t[u].dbits>0){for(c=0;c<256;c++)a[c]>(1<>t[u].dshift)];d(e,s[u],256)}}return e}(p,f,n,a,c,l,h);return function(e,t,i,n,r,a,c,l,h,d){var u=1<0&&u--;for(var f=t.length,p=0,g=0;g0&&F.ModelEncode(e,v,A);var C=d[A],_=i[Math.min(i.length-1,y++)];r[C].fixed_len?r[C].fixed_len>0&&(b[0].ModelEncode(e,v,255&_),b[1].ModelEncode(e,v,_>>8&255),b[2].ModelEncode(e,v,_>>16&255),b[3].ModelEncode(e,v,_>>24&255),r[C].fixed_len=-1):(b[0].ModelEncode(e,v,255&_),b[1].ModelEncode(e,v,_>>8&255),b[2].ModelEncode(e,v,_>>16&255),b[3].ModelEncode(e,v,_>>24&255)),r[C].do_dedup&&process.exit(1),g=_;var x=0,k=r[C].context,I=0,S=0}var E=t[w++],N=a[C][E];m[k].ModelEncode(e,v,N),I=(I<0&&(k+=l[C][Math.min(g,1023)]<0&&(k+=h[C][Math.min(x,255)]<{var n=i(8287).Buffer,r=i(9725),s=i(6194),o=i(2884),a=i(4373),c=i(680);e.exports={r4x8_uncompress:function(e,t){r.decode(e).copy(t,0,0)},r4x16_uncompress:function(e,t){s.decode(e).copy(t,0,0)},arith_uncompress:function(e,t){return(new o).decode(e).copy(t,0,0)},fqzcomp_uncompress:function(e,t){var i=new Array;a.decode(e,i).copy(t,0,0)},tok3_uncompress:function(e,t){var i=c.decode(e,0,\"\\0\");n.from(i,\"binary\").copy(t,0,0)}}},2935:(e,t,i)=>{var n=i(8287).Buffer;e.exports=class{constructor(e,t=0,i=0){0!=i?(this.buf=n.allocUnsafe(i),this.length=i):(this.buf=e,this.length=e.length),this.pos=t}EOF(){return this.pos>=this.length}ReadData(e){var t=this.buf.slice(this.pos,this.pos+e);return this.pos+=e,t}ReadByte(){const e=this.buf[this.pos];return this.pos++,e}ReadChar(){const e=this.buf[this.pos];return this.pos++,String.fromCharCode(e)}ReadUint16(){return this.ReadByte()|this.ReadByte()<<8}ReadUint32(){const e=this.buf.readInt32LE(this.pos);return this.pos+=4,e}ReadString(){var e=\"\";do{var t=this.buf[this.pos++];t&&(e+=String.fromCharCode(t))}while(t);return e}ReadUint7(){var e=0;do{var t=this.ReadByte();e=e<<7|127&t}while(128&t);return e}ReadITF8(){var e=this.buf[this.pos];return this.pos++,e>=240?(e=(15&e)<<28,e+=(this.buf[this.pos+0]<<20)+(this.buf[this.pos+1]<<12)+(this.buf[this.pos+2]<<4)+(this.buf[this.pos+3]>>4),this.pos+=4):e>=224?(e=(15&e)<<24,e+=(this.buf[this.pos+0]<<16)+(this.buf[this.pos+1]<<8)+(0|this.buf[this.pos+2]),this.pos+=3):e>=192?(e=(31&e)<<16,e+=(this.buf[this.pos+0]<<8)+(0|this.buf[this.pos+1]),this.pos+=2):e>=128&&(e=(63&e)<<8,e+=this.buf[this.pos],this.pos++),e}WriteByte(e){this.buf[this.pos++]=e}WriteChar(e){this.buf[this.pos++]=e.charCodeAt(0)}WriteString(e){for(var t=0;t>8&255)}WriteUint32(e){this.buf.writeInt32LE(e,this.pos),this.pos+=4}WriteUint7(e){var t=0,i=e;do{t+=7,i>>=7}while(i>0);do{t-=7,this.WriteByte((e>>t&127)+((t>0)<<7))}while(t>0)}WriteITF8(e){e<0&&(e=1+e),e<=127?this.buf[this.pos++]=e:e<=16383?(this.buf[this.pos++]=128|Math.floor(e/256),this.buf[this.pos++]=255&e):e<131071?(this.buf[this.pos++]=192|Math.floor(e/65536),this.buf[this.pos++]=255&Math.floor(e/256),this.buf[this.pos++]=255&e):e<268435455?(this.buf[this.pos++]=224|Math.floor(e/16777216),this.buf[this.pos++]=255&Math.floor(e/65536),this.buf[this.pos++]=255&Math.floor(e/256),this.buf[this.pos++]=255&e):(this.buf[this.pos++]=240|Math.floor(e/268435456),this.buf[this.pos++]=255&Math.floor(e/1048576),this.buf[this.pos++]=255&Math.floor(e/4096),this.buf[this.pos++]=255&Math.floor(e/4),this.buf[this.pos++]=15&e)}WriteByteNeg(e){this.buf[--this.pos]=e}}},9725:(e,t,i)=>{var n=i(8287).Buffer;const r=i(2935);function s(e){return 4095&e}function o(e,t){for(var i=0;t>=e[i+1];)i++;return i}function a(e){for(var t=new Array(4096),i=0,n=0;n<4096;n++){for(;n>=e[i+1];)i++;t[n]=i}return t}function c(e,t,i){return i*(e>>12)+(4095&e)-t}function l(e,t){for(;t<1<<23;)t=(t<<8)+e.ReadByte();return t}function h(e,t){t.WriteByteNeg(e>>24&255),t.WriteByteNeg(e>>16&255),t.WriteByteNeg(e>>8&255),t.WriteByteNeg(255&e)}function d(e,t,i,n,r){return e=function(e,t,i,n){for(var r=(1<<23>>n<<8)*i;e>=r;)t.WriteByteNeg(255&e),e>>=8;return e}(e,t,n,r),(Math.floor(e/n)<0?(o--,r++):(r=e.ReadByte())==s+1&&(o=e.ReadByte()),s=r}while(0!=r);for(i[0]=0,n=0;n<=255;n++)i[n+1]=i[n]+t[n]}function f(e){for(var t=0,i=0;i<256;i++)t+=e[i];const n=4096;var r=n/t;do{var s=0,o=0,a=0;for(t=0,i=0;i<256;i++)0!=e[i]&&(s2?e[o]-=t-n:t!=n&&(r*=.99,a=1)}while(a)}function p(e,t){for(var i=0,n=0;n<256;n++)if(t[n]){if(i>0)i--;else if(e.WriteByte(n),n>0&&t[n-1]>0){for(i=n+1;i<256&&t[i];i++);i-=n+1,e.WriteByte(i)}e.WriteITF8(t[n])}e.WriteByte(0)}e.exports={decode:function(e){var t=new r(e),i=t.ReadByte(),h=(t.ReadUint32(),t.ReadUint32());return 0==i?function(e,t){var i=new Array(256),r=new Array(256);u(e,i,r);for(var o=a(r),h=new Array(4),d=0;d<4;d++)h[d]=e.ReadUint32();var f=new n.allocUnsafe(t);for(d=0;d0?(a--,s++):(s=e.ReadByte())==o+1&&(a=e.ReadByte()),o=s}while(0!=s)}(e,i,r);for(var h=new Array(256),d=0;d<256;d++)h[d]=a(r[d]);for(var f=new Array(4),p=new Array(4),g=0;g<4;g++)f[g]=e.ReadUint32(),p[g]=0;var m=new n.allocUnsafe(t),w=Math.floor(t/4);for(d=0;d=0;a--)c[a%4]=d(c[a%4],u,o[e[a]],s[e[a]],12);for(a=3;a>=0;a--)h(c[a],u);var g=i.pos;return i.buf.writeInt32LE(g-9+(u.length-u.pos),1),i.buf.writeInt32LE(t,5),n.concat([i.buf.slice(0,i.pos),u.buf.slice(u.pos,u.length)],i.pos+u.length-u.pos)}(e):function(e){const t=e.length;var i=new r(\"\",0,198156);i.WriteByte(1),i.WriteUint32(0),i.WriteUint32(0);for(var s=new Array(256),o=new Array(256),a=new Array(256),c=0;c<256;c++)o[c]=new Array(256),a[c]=new Array(256);for(function(e,t,i){for(var n=0;n<256;n++){i[n]=0;for(var r=0;r<256;r++)t[n][r]=0}var s=0;for(n=0;n>2)]]++,t[0][e[2*(e.length>>2)]]++,t[0][e[3*(e.length>>2)]]++,i[0]+=3}(e,o,s),function(e,t){for(var i=0;i<256;i++)t[i]&&f(e[i])}(o,s),function(e,t,i){for(var n=0,r=0;r<256;r++)if(i[r]){if(n>0)n--;else if(e.WriteByte(r),r>0&&i[r-1]>0){for(n=r+1;n<256&&i[n];n++);n-=r+1,e.WriteByte(n)}p(e,t[r])}e.WriteByte(0)}(i,o,s),c=0;c<256;c++)if(s[c]){a[c][0]=0;for(var l=1;l<256;l++)a[c][l]=a[c][l-1]+o[c][l-1]}var u=new Array(4),g=new Array(4);for(l=0;l<4;l++)u[l]=1<<23,g[l]=0;var m=new r(\"\",t,t),w=Math.floor(t/4),b=new Array(4),F=new Array(4);for(l=0;l<4;l++)b[l]=(l+1)*w-2,F[l]=e[b[l]+1];for(F[3]=e[t-1],c=t-2;c>4*w-2;c--)u[3]=d(u[3],m,a[e[c]][F[3]],o[e[c]][F[3]],12),F[3]=e[c];for(;b[0]>=0;)for(l=3;l>=0;l--){var v=e[b[l]];u[l]=d(u[l],m,a[v][F[l]],o[v][F[l]],12),F[l]=v,b[l]--}for(l=3;l>=0;l--)u[l]=d(u[l],m,a[0][F[l]],o[0][F[l]],12);for(c=3;c>=0;c--)h(u[c],m);var y=i.pos;return i.buf.writeInt32LE(y-9+(m.length-m.pos),1),i.buf.writeInt32LE(t,5),n.concat([i.buf.slice(0,i.pos),m.buf.slice(m.pos,m.length)],i.pos+m.length-m.pos)}(e)}}},6194:(e,t,i)=>{var n=i(8287).Buffer;const r=i(2935);function s(e,t){return e&(1<=e[i+1];)i++;return i}function a(e,t){for(var i=1<=e[r+1];)r++;n[s]=r}return n}function c(e,t,i,n){return i*(e>>n)+(e&(1<>24&255),t.WriteByteNeg(e>>16&255),t.WriteByteNeg(e>>8&255),t.WriteByteNeg(255&e)}function d(e,t,i,n,r){return e=function(e,t,i,n){for(var r=(1<<31-n)*i;e>=r;)t.WriteByteNeg(e>>8&255),t.WriteByteNeg(255&e),e>>=16;return e}(e,t,n,r),(Math.floor(e/n)<o),n[o]=new Array(s[o]);for(var a=0,c=0;co),a[o]=f(e,s[o]);var c=new n.allocUnsafe(t);for(o=0;o>4,d=e;if(1&p){var u=e.ReadUint7(),f=e.ReadUint7(),p=new r(e.ReadData(f));d=new r(m(p,u,4))}var w=new Array(256),F=new Array(256);!function(e,t,i,n){for(var r=0;r<256;r++){t[r]=new Array(256),i[r]=new Array(256);for(var s=0;s<256;s++)t[r][s]=0}var o=g(e);for(r=0;r<256;r++)if(o[r]){var a=0;for(s=0;s<256;s++)o[s]&&(a>0?a--:(t[r][s]=e.ReadUint7(),0==t[r][s]&&(a=e.ReadByte())));for(b(t[r],n),i[r][0]=0,s=0;s<256;s++)i[r][s+1]=i[r][s]+t[r][s]}}(d,w,F,h);for(var v=new Array(256),y=0;y<256;y++)v[y]=a(F[y],h);for(var A=new Array(i),C=new Array(i),_=0;_>=1}else if(i<=4)for(a=0;a>=2;else if(i<=16)for(a=0;a>=4;return s}(k,y,A,v)),k}function p(e,t){var i=new r(\"\",0,10);i.WriteByte(t);var s=1&t,o=8&t,a=32&t,c=64&t,l=128&t,f=4&t?32:4,p=t>>8;if(16&t||i.WriteUint7(e.length),o)return n.concat([i.buf.slice(0,i.pos),u(0,e,p)]);var g=new n.alloc(0);l&&([g,e]=function(e){for(var t=new Array(256),i=0;i<256;i++)t[i]=0;for(i=0;i0&&(s[i]=o++);if(!(o>16)){if(o<=1)var a=new n.allocUnsafe(0);else if(o<=2){a=new n.allocUnsafe(Math.ceil(e.length/8));var c=-1;for(i=0;i0&&(t[i]=c++,l.WriteByte(i));return l.WriteUint7(a.length),[l.buf.slice(0,l.pos),a]}}(e));var m=new n.alloc(0);if(c&&([m,e]=function(e,t){for(var i=new Array(256),s=0;s<256;s++)i[s]=0;var o=-1;for(s=0;s0&&a++;for(a||(a=1,i[0]=1),(d=new r(\"\",0,a+1+e.length)).WriteByte(a),s=0;s<256;s++)i[s]>0&&d.WriteByte(s);var c=new n.allocUnsafe(e.length),l=0;for(s=0;s0){o=e[s];for(var h=0;s+h+112&&(n=12),w(e[i],n)}}(a,o);var u=new r(\"\",0,198156);!function(e,t,i){F(e,i);for(var n=0;n<256;n++)if(i[n])for(var r=0,s=0;s<256;s++)if(i[s])if(r)r--;else if(e.WriteUint7(t[n][s]),!t[n][s]){for(var o=s+1;o<256;o++)if(i[o]){if(0!=t[n][o])break;r++}e.WriteByte(r)}}(u,a,o);var f=v(u.buf.slice(0,u.pos),4);for(f.lengtht*A-2;l--)g[t-1]=d(g[t-1],y,c[e[l]][_[t-1]],a[e[l]][_[t-1]],12),_[t-1]=e[l];for(var x=new Array(t);C[0]>=0;){for(p=t-1;p>=0;p--)x[p]=e[C[p]];for(p=t-1;p>=0;p--)g[p]=d(g[p],y,c[x[p]][_[p]],a[x[p]][_[p]],12),_[p]=x[p],C[p]--}for(p=t-1;p>=0;p--)g[p]=d(g[p],y,c[0][_[p]],a[0][_[p]],12);for(l=t-1;l>=0;l--)h(g[l],y);return n.concat([s.buf.slice(0,s.pos),y.buf.slice(y.pos,y.length)],s.pos+y.length-y.pos)}(e,f);return n.concat([i.buf.slice(0,i.pos),g,m,y])}function g(e){for(var t=new Array(256),i=0;i<256;i++)t[i]=0;var n=0,r=e.ReadByte(),s=r;do{t[r]=1,n>0?(n--,r++):(r=e.ReadByte())==s+1&&(n=e.ReadByte()),s=r}while(0!=r);return t}function m(e,t,i){var r=new Array(256),o=new Array(256);!function(e,t,i){for(var n=0;n<256;n++)t[n]=0;var r=g(e);for(n=0;n<256;n++)r[n]>0&&(t[n]=e.ReadUint7());for(b(t,12),i[0]=0,n=0;n<=255;n++)i[n+1]=i[n]+t[n]}(e,r,o);for(var h=a(o,12),d=new Array(i),u=0;u2?e[a]-=i-r:i!=r&&(s=r/i,c=1)}while(c)}function b(e,t){for(var i=0,n=0;n<256;n++)i+=e[n];if(0!=i&&i!=1<0)i--;else if(e.WriteByte(n),n>0&&t[n-1]>0){for(i=n+1;i<256&&t[i];i++);i-=n+1,e.WriteByte(i)}e.WriteByte(0)}function v(e,t){const i=e.length;var s=new r(\"\",0,780),o=new Array(256);!function(e,t){for(var i=0;i<256;i++)t[i]=0;for(i=0;i12&&(a=12),w(o,a),function(e,t){F(e,t);for(var i=0;i<256;i++)t[i]&&e.WriteUint7(t[i])}(s,o),w(o,12);var c=new Array(256);c[0]=0;for(var l=1;l<256;l++)c[l]=c[l-1]+o[l-1];var u=new Array(t);for(l=0;l=0;l--)u[l%t]=d(u[l%t],f,c[e[l]],o[e[l]],12);for(l=t-1;l>=0;l--)h(u[l],f);return n.concat([s.buf.slice(0,s.pos),f.buf.slice(f.pos,f.length)],s.pos+f.length-f.pos)}e.exports={decode:function(e){return f(new r(e),0)},encode:p}},680:(e,t,i)=>{var n=i(8287).Buffer;const r=i(2935),s=i(6194);var o=new(i(2884));function a(e,t){for(var i=e+\"\";i.length0&&5==t[o][0].type)&&t[o][i])switch(e[0].WriteByte(t[o][i].type),t[o][i].type){case 6:e[6].WriteUint32(t[o][i].val);break;case 5:e[5].WriteUint32(t[o][i].val);break;case 1:e[1].WriteString(t[o][i].val);break;case 2:e[2].WriteChar(t[o][i].val);break;case 7:e[7].WriteUint32(t[o][i].val);break;case 3:e[3].WriteUint32(t[o][i].val),e[4].WriteByte(t[o][i].val.length);break;case 8:case 9:e[t[o][i].type].WriteByte(t[o][i].val)}}function h(e,t,i,n){for(var r=0;r<=12;r++)if(!(e[r].pos<=0)){n.WriteByte(r+(0==r?128:0)),e[r]=e[r].buf.slice(0,e[r].pos);var s=d(e[r],i);n.WriteUint7(s.length),n.WriteData(s,s.length)}}function d(e,t){var i,n=1<<30,r=[0,1,64,65,128,129,201];for(var a in r){var c=r[a];if(!(1&c&&e.length<100||8&c&&e.length%4!=0)){try{var l=t?o.encode(e,c):s.encode(e,c)}catch(e){l=0}l&&n>l.length&&(n=l.length,i=l)}}return i}function u(e,t,i,n,r){var s=0,o=r-1;e[r]=new Array(256),t[n]?e[r][0]={type:5,val:r-t[n]}:e[r][0]={type:6,val:0==r?0:1},t[n]=r;for(var a=n.match(/([a-zA-Z0-9]{1,9})|([^a-zA-Z0-9]+)/g),c=0;c=0&&e[o][l])if(e[o][l].str==a[c])h=10,d=\"\";else if(7==e[o][l].type||8==e[o][l].type){var u=d-e[o][l].str;i[l]++,u>=0&&u<256&&i[l]>r/2&&(h=8,d=u)}else 3!=e[o][l].type&&9!=e[o][l].type||e[o][l].str.length!=d.length||(u=d-e[o][l].str,i[l]++,u>=0&&u<256&&i[l]>r/2&&(h=9,d=u));e[r][l]={str:a[c],val:d,type:h},sn.sequenceId===e&&n.alignmentStart<=i&&void 0!==n.lengthOnRef&&n.alignmentStart+n.lengthOnRef-1>=t,c=yield Promise.all(o.map((e=>this.getRecordsInSlice(e,a))));let l=Array.prototype.concat(...c);if(n.viewAsPairs){const e={},t={};for(const i of l){const n=i.readName;if(void 0===n)throw new Error(\"readName undefined\");const r=i.uniqueId;e[n]||(e[n]=0),e[n]+=1,t[r]=1}const i={};Object.entries(e).forEach((([e,t])=>{1===t&&(i[e]=!0)}));const s=[];for(const e of l){const t=e.readName;if(void 0===t)throw new Error(\"readName undefined\");if(i[t]&&e.mate&&(e.mate.sequenceId===r||n.pairAcrossChr)&&Math.abs(e.alignmentStart-e.mate.alignmentStart)e.toString().localeCompare(t.toString()))).filter(((e,t,i)=>!t||e.toString()!==i[t-1].toString()));const c=[];for(const e of a){let n=this.cram.featureCache.get(e.toString());n||(n=this.getRecordsInSlice(e,(()=>!0)),this.cram.featureCache.set(e.toString(),n));const r=n.then((e=>{const n=[];for(const r of e){if(void 0===r.readName)throw new Error(\"readName undefined\");i[r.readName]&&!t[r.uniqueId]&&n.push(r)}return n}));c.push(r)}const h=yield Promise.all(c);if(h.length){const e=h.reduce(((e,t)=>e.concat(t)));l=l.concat(e)}}return l}))}getRecordsInSlice({containerStart:e,sliceStart:t,sliceBytes:i},n){return this.cram.getContainerAtPosition(e).getSlice(t,i).getRecords(n)}hasDataForReferenceSequence(e){return this.index.hasDataForReferenceSequence(e)}}},5931:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.RemoteFile=t.LocalFile=void 0,t.open=function(e,t,i){if(i)return i;if(e)return new n.RemoteFile(e);if(t)return new n.LocalFile(t);throw new Error(\"no url, path, or filehandle provided, cannot open\")};const n=i(1113);var r=i(1113);Object.defineProperty(t,\"LocalFile\",{enumerable:!0,get:function(){return r.LocalFile}}),Object.defineProperty(t,\"RemoteFile\",{enumerable:!0,get:function(){return r.RemoteFile}})},6476:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.RANS_BYTE_L=t.TOTFREQ=t.TF_SHIFT=void 0,t.TF_SHIFT=12,t.TOTFREQ=4096,t.RANS_BYTE_L=1<<23},997:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,i,n){let a=e.getInt(),c=e.getInt(),l=e.getInt(),h=e.getInt();const d=n.remaining(),u=-4&d;for(let r=0;r>2;let u=0,f=d,p=2*d,g=3*d,m=0,w=0,b=0,F=0;for(;u{Object.defineProperty(t,\"__esModule\",{value:!0});const n=i(9747),r=i(6476);class s{constructor(){this.F=void 0,this.C=void 0}}function o(e,t,i,n){return i*(e>>n)+(e&(1<>s)+(e&(1<=128&&(t.fc[c].F&=-129,t.fc[c].F=(127&t.fc[c].F)<<8|255&e.get()),t.fc[c].C=r,o.default.symbolInit(i[c],t.fc[c].C,t.fc[c].F),t.R||(t.R=new Array(s.TOTFREQ)),t.R.fill(c,r,r+t.fc[c].F),r+=t.fc[c].F,0===n&&c+1===(255&e.getByteAt(e.position()))?(c=255&e.get(),n=255&e.get()):0!==n?(n-=1,c+=1):c=255&e.get()}while(0!==c);a(r=128&&(t[r].fc[h].F&=-129,t[r].fc[h].F=(127&t[r].fc[h].F)<<8|255&e.get()),t[r].fc[h].C=l,0===t[r].fc[h].F&&(t[r].fc[h].F=s.TOTFREQ),null==i[r][h]&&(i[r][h]=new o.default.RansDecSymbol),o.default.symbolInit(i[r][h],t[r].fc[h].C,t[r].fc[h].F),null==t[r].R&&(t[r].R=new Array(s.TOTFREQ)),t[r].R.fill(h,l,l+t[r].fc[h].F),l+=t[r].fc[h].F,a(l<=s.TOTFREQ),0===c&&h+1===(255&e.getByteAt(e.position()))?(h=255&e.get(),c=255&e.get()):0!==c?(c-=1,h+=1):h=255&e.get()}while(0!==h);0===n&&r+1===(255&e.getByteAt(e.position()))?(r=255&e.get(),n=255&e.get()):0!==n?(n-=1,r+=1):r=255&e.get()}while(0!==r)};const r=i(9747),s=i(6476),o=n(i(488));function a(e){if(!e)throw new r.CramMalformedError(\"assertion failed\")}},9989:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,i=0){if(0===e.length)return t.fill(0),t;const n=new d(e,i),u=n.get();if(0!==u&&1!==u)throw new s.CramMalformedError(`Invalid rANS order ${u}`);if(n.getInt()!==n.remaining()-h)throw new s.CramMalformedError(\"Incorrect input length.\");const f=n.getInt(),p=new d(t||r.Buffer.allocUnsafe(f));if(p.length{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseHeaderText=function(e){const t=e.split(/\\r?\\n/),i=[];for(const e of t){const[t,...n]=e.split(/\\t/);t&&i.push({tag:t.slice(1),data:n.map((e=>{const t=e.indexOf(\":\");return-1!==t?{tag:e.slice(0,t),value:e.slice(t+1)}:{tag:e,value:\"\"}}))})}return i}},8712:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.unzip=function(e){return r.Buffer.from((0,n.inflate)(e))};const n=i(1668),r=i(8287)},7526:(e,t)=>{t.byteLength=function(e){var t=a(e),i=t[0],n=t[1];return 3*(i+n)/4-n},t.toByteArray=function(e){var t,i,s=a(e),o=s[0],c=s[1],l=new r(function(e,t,i){return 3*(t+i)/4-i}(0,o,c)),h=0,d=c>0?o-4:o;for(i=0;i>16&255,l[h++]=t>>8&255,l[h++]=255&t;return 2===c&&(t=n[e.charCodeAt(i)]<<2|n[e.charCodeAt(i+1)]>>4,l[h++]=255&t),1===c&&(t=n[e.charCodeAt(i)]<<10|n[e.charCodeAt(i+1)]<<4|n[e.charCodeAt(i+2)]>>2,l[h++]=t>>8&255,l[h++]=255&t),l},t.fromByteArray=function(e){for(var t,n=e.length,r=n%3,s=[],o=16383,a=0,l=n-r;al?l:a+o));return 1===r?(t=e[n-1],s.push(i[t>>2]+i[t<<4&63]+\"==\")):2===r&&(t=(e[n-2]<<8)+e[n-1],s.push(i[t>>10]+i[t>>4&63]+i[t<<2&63]+\"=\")),s.join(\"\")};for(var i=[],n=[],r=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,s=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",o=0;o<64;++o)i[o]=s[o],n[s.charCodeAt(o)]=o;function a(e){var t=e.length;if(t%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var i=e.indexOf(\"=\");return-1===i&&(i=t),[i,i===t?0:4-i%4]}function c(e,t,n){for(var r,s,o=[],a=t;a>18&63]+i[s>>12&63]+i[s>>6&63]+i[63&s]);return o.join(\"\")}n[\"-\".charCodeAt(0)]=62,n[\"_\".charCodeAt(0)]=63},8287:(e,t,i)=>{const n=i(7526),r=i(251),s=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null;t.Buffer=c,t.SlowBuffer=function(e){return+e!=e&&(e=0),c.alloc(+e)},t.INSPECT_MAX_BYTES=50;const o=2147483647;function a(e){if(e>o)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,c.prototype),t}function c(e,t,i){if(\"number\"==typeof e){if(\"string\"==typeof t)throw new TypeError('The \"string\" argument must be of type string. Received type number');return d(e)}return l(e,t,i)}function l(e,t,i){if(\"string\"==typeof e)return function(e,t){if(\"string\"==typeof t&&\"\"!==t||(t=\"utf8\"),!c.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);const i=0|g(e,t);let n=a(i);const r=n.write(e,t);return r!==i&&(n=n.slice(0,r)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(K(e,Uint8Array)){const t=new Uint8Array(e);return f(t.buffer,t.byteOffset,t.byteLength)}return u(e)}(e);if(null==e)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(K(e,ArrayBuffer)||e&&K(e.buffer,ArrayBuffer))return f(e,t,i);if(\"undefined\"!=typeof SharedArrayBuffer&&(K(e,SharedArrayBuffer)||e&&K(e.buffer,SharedArrayBuffer)))return f(e,t,i);if(\"number\"==typeof e)throw new TypeError('The \"value\" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return c.from(n,t,i);const r=function(e){if(c.isBuffer(e)){const t=0|p(e.length),i=a(t);return 0===i.length||e.copy(i,0,0,t),i}return void 0!==e.length?\"number\"!=typeof e.length||Y(e.length)?a(0):u(e):\"Buffer\"===e.type&&Array.isArray(e.data)?u(e.data):void 0}(e);if(r)return r;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof e[Symbol.toPrimitive])return c.from(e[Symbol.toPrimitive](\"string\"),t,i);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}function h(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function d(e){return h(e),a(e<0?0:0|p(e))}function u(e){const t=e.length<0?0:0|p(e.length),i=a(t);for(let n=0;n=o)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+o.toString(16)+\" bytes\");return 0|e}function g(e,t){if(c.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||K(e,ArrayBuffer))return e.byteLength;if(\"string\"!=typeof e)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const i=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===i)return 0;let r=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return i;case\"utf8\":case\"utf-8\":return W(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*i;case\"hex\":return i>>>1;case\"base64\":return G(e).length;default:if(r)return n?-1:W(e).length;t=(\"\"+t).toLowerCase(),r=!0}}function m(e,t,i){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return\"\";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return\"\";if((i>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return N(this,t,i);case\"utf8\":case\"utf-8\":return k(this,t,i);case\"ascii\":return S(this,t,i);case\"latin1\":case\"binary\":return E(this,t,i);case\"base64\":return x(this,t,i);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return B(this,t,i);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}function w(e,t,i){const n=e[t];e[t]=e[i],e[i]=n}function b(e,t,i,n,r){if(0===e.length)return-1;if(\"string\"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),Y(i=+i)&&(i=r?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(r)return-1;i=e.length-1}else if(i<0){if(!r)return-1;i=0}if(\"string\"==typeof t&&(t=c.from(t,n)),c.isBuffer(t))return 0===t.length?-1:F(e,t,i,n,r);if(\"number\"==typeof t)return t&=255,\"function\"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):F(e,[t],i,n,r);throw new TypeError(\"val must be string, number or Buffer\")}function F(e,t,i,n,r){let s,o=1,a=e.length,c=t.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(e.length<2||t.length<2)return-1;o=2,a/=2,c/=2,i/=2}function l(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(r){let n=-1;for(s=i;sa&&(i=a-c),s=i;s>=0;s--){let i=!0;for(let n=0;nr&&(n=r):n=r;const s=t.length;let o;for(n>s/2&&(n=s/2),o=0;o>8,r=i%256,s.push(r),s.push(n);return s}(t,e.length-i),e,i,n)}function x(e,t,i){return 0===t&&i===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,i))}function k(e,t,i){i=Math.min(e.length,i);const n=[];let r=t;for(;r239?4:t>223?3:t>191?2:1;if(r+o<=i){let i,n,a,c;switch(o){case 1:t<128&&(s=t);break;case 2:i=e[r+1],128==(192&i)&&(c=(31&t)<<6|63&i,c>127&&(s=c));break;case 3:i=e[r+1],n=e[r+2],128==(192&i)&&128==(192&n)&&(c=(15&t)<<12|(63&i)<<6|63&n,c>2047&&(c<55296||c>57343)&&(s=c));break;case 4:i=e[r+1],n=e[r+2],a=e[r+3],128==(192&i)&&128==(192&n)&&128==(192&a)&&(c=(15&t)<<18|(63&i)<<12|(63&n)<<6|63&a,c>65535&&c<1114112&&(s=c))}}null===s?(s=65533,o=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),r+=o}return function(e){const t=e.length;if(t<=I)return String.fromCharCode.apply(String,e);let i=\"\",n=0;for(;nn.length?(c.isBuffer(t)||(t=c.from(t)),t.copy(n,r)):Uint8Array.prototype.set.call(n,t,r);else{if(!c.isBuffer(t))throw new TypeError('\"list\" argument must be an Array of Buffers');t.copy(n,r)}r+=t.length}return n},c.byteLength=g,c.prototype._isBuffer=!0,c.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let t=0;ti&&(e+=\" ... \"),\"\"},s&&(c.prototype[s]=c.prototype.inspect),c.prototype.compare=function(e,t,i,n,r){if(K(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===n&&(n=0),void 0===r&&(r=this.length),t<0||i>e.length||n<0||r>this.length)throw new RangeError(\"out of range index\");if(n>=r&&t>=i)return 0;if(n>=r)return-1;if(t>=i)return 1;if(this===e)return 0;let s=(r>>>=0)-(n>>>=0),o=(i>>>=0)-(t>>>=0);const a=Math.min(s,o),l=this.slice(n,r),h=e.slice(t,i);for(let e=0;e>>=0,isFinite(i)?(i>>>=0,void 0===n&&(n=\"utf8\")):(n=i,i=void 0)}const r=this.length-t;if((void 0===i||i>r)&&(i=r),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");let s=!1;for(;;)switch(n){case\"hex\":return v(this,e,t,i);case\"utf8\":case\"utf-8\":return y(this,e,t,i);case\"ascii\":case\"latin1\":case\"binary\":return A(this,e,t,i);case\"base64\":return C(this,e,t,i);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return _(this,e,t,i);default:if(s)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),s=!0}},c.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function S(e,t,i){let n=\"\";i=Math.min(e.length,i);for(let r=t;rn)&&(i=n);let r=\"\";for(let n=t;ni)throw new RangeError(\"Trying to access beyond buffer length\")}function D(e,t,i,n,r,s){if(!c.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>r||te.length)throw new RangeError(\"Index out of range\")}function R(e,t,i,n,r){q(t,n,r,e,i,7);let s=Number(t&BigInt(4294967295));e[i++]=s,s>>=8,e[i++]=s,s>>=8,e[i++]=s,s>>=8,e[i++]=s;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[i++]=o,o>>=8,e[i++]=o,o>>=8,e[i++]=o,o>>=8,e[i++]=o,i}function T(e,t,i,n,r){q(t,n,r,e,i,7);let s=Number(t&BigInt(4294967295));e[i+7]=s,s>>=8,e[i+6]=s,s>>=8,e[i+5]=s,s>>=8,e[i+4]=s;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[i+3]=o,o>>=8,e[i+2]=o,o>>=8,e[i+1]=o,o>>=8,e[i]=o,i+8}function L(e,t,i,n,r,s){if(i+n>e.length)throw new RangeError(\"Index out of range\");if(i<0)throw new RangeError(\"Index out of range\")}function z(e,t,i,n,s){return t=+t,i>>>=0,s||L(e,0,i,4),r.write(e,t,i,n,23,4),i+4}function H(e,t,i,n,s){return t=+t,i>>>=0,s||L(e,0,i,8),r.write(e,t,i,n,52,8),i+8}c.prototype.slice=function(e,t){const i=this.length;(e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(t=void 0===t?i:~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),t>>=0,t>>>=0,i||M(e,t,this.length);let n=this[e],r=1,s=0;for(;++s>>=0,t>>>=0,i||M(e,t,this.length);let n=this[e+--t],r=1;for(;t>0&&(r*=256);)n+=this[e+--t]*r;return n},c.prototype.readUint8=c.prototype.readUInt8=function(e,t){return e>>>=0,t||M(e,1,this.length),this[e]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||M(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||M(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||M(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||M(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readBigUInt64LE=Z((function(e){V(e>>>=0,\"offset\");const t=this[e],i=this[e+7];void 0!==t&&void 0!==i||Q(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,r=this[++e]+256*this[++e]+65536*this[++e]+i*2**24;return BigInt(n)+(BigInt(r)<>>=0,\"offset\");const t=this[e],i=this[e+7];void 0!==t&&void 0!==i||Q(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],r=this[++e]*2**24+65536*this[++e]+256*this[++e]+i;return(BigInt(n)<>>=0,t>>>=0,i||M(e,t,this.length);let n=this[e],r=1,s=0;for(;++s=r&&(n-=Math.pow(2,8*t)),n},c.prototype.readIntBE=function(e,t,i){e>>>=0,t>>>=0,i||M(e,t,this.length);let n=t,r=1,s=this[e+--n];for(;n>0&&(r*=256);)s+=this[e+--n]*r;return r*=128,s>=r&&(s-=Math.pow(2,8*t)),s},c.prototype.readInt8=function(e,t){return e>>>=0,t||M(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||M(e,2,this.length);const i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},c.prototype.readInt16BE=function(e,t){e>>>=0,t||M(e,2,this.length);const i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||M(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||M(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readBigInt64LE=Z((function(e){V(e>>>=0,\"offset\");const t=this[e],i=this[e+7];void 0!==t&&void 0!==i||Q(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(i<<24);return(BigInt(n)<>>=0,\"offset\");const t=this[e],i=this[e+7];void 0!==t&&void 0!==i||Q(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||M(e,4,this.length),r.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||M(e,4,this.length),r.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||M(e,8,this.length),r.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||M(e,8,this.length),r.read(this,e,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(e,t,i,n){e=+e,t>>>=0,i>>>=0,n||D(this,e,t,i,Math.pow(2,8*i)-1,0);let r=1,s=0;for(this[t]=255&e;++s>>=0,i>>>=0,n||D(this,e,t,i,Math.pow(2,8*i)-1,0);let r=i-1,s=1;for(this[t+r]=255&e;--r>=0&&(s*=256);)this[t+r]=e/s&255;return t+i},c.prototype.writeUint8=c.prototype.writeUInt8=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigUInt64LE=Z((function(e,t=0){return R(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),c.prototype.writeBigUInt64BE=Z((function(e,t=0){return T(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),c.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*i-1);D(this,e,t,i,n-1,-n)}let r=0,s=1,o=0;for(this[t]=255&e;++r>>=0,!n){const n=Math.pow(2,8*i-1);D(this,e,t,i,n-1,-n)}let r=i-1,s=1,o=0;for(this[t+r]=255&e;--r>=0&&(s*=256);)e<0&&0===o&&0!==this[t+r+1]&&(o=1),this[t+r]=(e/s|0)-o&255;return t+i},c.prototype.writeInt8=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,i){return e=+e,t>>>=0,i||D(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigInt64LE=Z((function(e,t=0){return R(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),c.prototype.writeBigInt64BE=Z((function(e,t=0){return T(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),c.prototype.writeFloatLE=function(e,t,i){return z(this,e,t,!0,i)},c.prototype.writeFloatBE=function(e,t,i){return z(this,e,t,!1,i)},c.prototype.writeDoubleLE=function(e,t,i){return H(this,e,t,!0,i)},c.prototype.writeDoubleBE=function(e,t,i){return H(this,e,t,!1,i)},c.prototype.copy=function(e,t,i,n){if(!c.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(i||(i=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),\"number\"==typeof e)for(r=t;r=n+4;i-=3)t=`_${e.slice(i-3,i)}${t}`;return`${e.slice(0,i)}${t}`}function q(e,t,i,n,r,s){if(e>i||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(s+1)}${n}`:`>= -(2${n} ** ${8*(s+1)-1}${n}) and < 2 ** ${8*(s+1)-1}${n}`:`>= ${t}${n} and <= ${i}${n}`,new P.ERR_OUT_OF_RANGE(\"value\",r,e)}!function(e,t,i){V(t,\"offset\"),void 0!==e[t]&&void 0!==e[t+i]||Q(t,e.length-(i+1))}(n,r,s)}function V(e,t){if(\"number\"!=typeof e)throw new P.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function Q(e,t,i){if(Math.floor(e)!==e)throw V(e,i),new P.ERR_OUT_OF_RANGE(i||\"offset\",\"an integer\",e);if(t<0)throw new P.ERR_BUFFER_OUT_OF_BOUNDS;throw new P.ERR_OUT_OF_RANGE(i||\"offset\",`>= ${i?1:0} and <= ${t}`,e)}O(\"ERR_BUFFER_OUT_OF_BOUNDS\",(function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"}),RangeError),O(\"ERR_INVALID_ARG_TYPE\",(function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`}),TypeError),O(\"ERR_OUT_OF_RANGE\",(function(e,t,i){let n=`The value of \"${e}\" is out of range.`,r=i;return Number.isInteger(i)&&Math.abs(i)>2**32?r=U(String(i)):\"bigint\"==typeof i&&(r=String(i),(i>BigInt(2)**BigInt(32)||i<-(BigInt(2)**BigInt(32)))&&(r=U(r)),r+=\"n\"),n+=` It must be ${t}. Received ${r}`,n}),RangeError);const j=/[^+/0-9A-Za-z-_]/g;function W(e,t){let i;t=t||1/0;const n=e.length;let r=null;const s=[];for(let o=0;o55295&&i<57344){if(!r){if(i>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&s.push(239,191,189);continue}r=i;continue}if(i<56320){(t-=3)>-1&&s.push(239,191,189),r=i;continue}i=65536+(r-55296<<10|i-56320)}else r&&(t-=3)>-1&&s.push(239,191,189);if(r=null,i<128){if((t-=1)<0)break;s.push(i)}else if(i<2048){if((t-=2)<0)break;s.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;s.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;s.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return s}function G(e){return n.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(j,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function $(e,t,i,n){let r;for(r=0;r=t.length||r>=e.length);++r)t[r+i]=e[r];return r}function K(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Y(e){return e!=e}const X=function(){const e=\"0123456789abcdef\",t=new Array(256);for(let i=0;i<16;++i){const n=16*i;for(let r=0;r<16;++r)t[n+r]=e[i]+e[r]}return t}();function Z(e){return\"undefined\"==typeof BigInt?J:e}function J(){throw new Error(\"BigInt not supported\")}},235:e=>{var t={array:function(e){var t=0,i=0,n=[0,1,3,7,15,31,63,127,255];return function(r){for(var s=0;r>0;){var o=8-t;r>=o?(s<<=o,s|=n[o]&e[i++],t=0,r-=o):(s<<=r,s|=(e[i]&n[r]<<8-r-t)>>8-r-t,t+=r,r=0)}return s}},simple:function(e){var i,n,r=t.header(e),s=[],o=0;do{-1!=(n=t.decompress(e,r))&&(s.push(n),o+=n.byteLength)}while(-1!=n);i=new Uint8Array(o),o=0;for(var a=0;a9)throw\"Not a BZIP archive\";return t},decompress:function(e,t,i){for(var n=9e5,r=\"\",s=0;s<6;s++)r+=e(8).toString(16);if(\"177245385090\"==r)return-1;if(\"314159265359\"!=r)throw\"eek not valid bzip data\";if(e(32),e(1))throw\"unsupported obsolete version\";var o=e(24);if(o>n)throw\"Initial position larger than buffer size\";var a=e(16),c=new Uint8Array(256),l=0;for(s=0;s<16;s++)if(a&1<<15-s){var h=e(16);for(g=0;g<16;g++)h&1<<15-g&&(c[l++]=16*s+g)}var d=e(3);if(d<2||d>6)throw\"another error\";var u=e(15);if(0==u)throw\"meh\";var f=[];for(s=0;s=d)throw\"whoops another error\";var m=f[g];f.splice(g,1),f.splice(0,0,m),p[s]=m}var w=l+2,b=[];for(g=0;g20)throw\"I gave up a while ago on writing error messages\";if(!e(1))break;e(1)?a--:a++}A[s]=a}for(F=v=A[0],s=1;sv?v=A[s]:A[s]=u)throw\"meow i'm a kitty, that's an error\";_=(y=b[p[E++]]).base.subarray(1),x=y.limit.subarray(1)}for(g=e(s=y.minLen);;){if(s>y.maxLen)throw\"rawr i'm a dinosaur\";if(g<=x[s])break;s++,g=g<<1|e(1)}if((g-=_[s])<0||g>=258)throw\"moo i'm a cow\";var M=y.permute[g];if(0!=M&&1!=M){if(I){if(I=0,S+a>=n)throw\"Boom.\";for(N[m=c[f[0]]]+=a;a--;)B[S++]=m}if(M>l)break;if(S>=n)throw\"I can't think of anything. Error\";m=f[s=M-1],f.splice(s,1),f.splice(0,0,m),N[m=c[m]]++,B[S++]=m}else I||(I=1,a=0),a+=0==M?I:2*I,I<<=1}if(o<0||o>=S)throw\"I'm a monkey and I'm throwing something at someone, namely you\";for(g=0,s=0;s<256;s++)h=g+N[s],N[s]=g,g=h;for(s=0;s>=8,T=-1);var L,z,H,P=new Uint8Array(n),O=0;for(i||(i=1/0);S;){for(S--,z=R,R=255&(D=B[D]),D>>=8,3==T++?(L=R,H=z,R=-1):(L=1,H=R);L--;)if(P[O++]=H,! --i)return P;R!=z&&(T=0)}return P.subarray(0,O)}};e.exports=t},2151:e=>{var t={utf8:{stringToBytes:function(e){return t.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(t.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],i=0;i{var t,i;t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",i={rotl:function(e,t){return e<>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&i.rotl(e,8)|4278255360&i.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],i=0,n=0;i>>5]|=e[i]<<24-n%32;return t},wordsToBytes:function(e){for(var t=[],i=0;i<32*e.length;i+=8)t.push(e[i>>>5]>>>24-i%32&255);return t},bytesToHex:function(e){for(var t=[],i=0;i>>4).toString(16)),t.push((15&e[i]).toString(16));return t.join(\"\")},hexToBytes:function(e){for(var t=[],i=0;i>>6*(3-s)&63)):i.push(\"=\");return i.join(\"\")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\\/]/gi,\"\");for(var i=[],n=0,r=0;n>>6-2*r);return i}},e.exports=i},1113:(e,t,i)=>{i.r(t),i.d(t,{BlobFile:()=>l,LocalFile:()=>r(),RemoteFile:()=>a,fromUrl:()=>h,open:()=>d});var n=i(3617),r=i.n(n),s=i(8287);function o(e){return(\"object\"==typeof e&&null!==e&&\"message\"in e?e.message:`${e}`).replace(/\\.$/,\"\")}class a{async getBufferFromResponse(e){const t=await e.arrayBuffer();return s.Buffer.from(t)}constructor(e,t={}){this.baseOverrides={},this.url=e;const i=t.fetch||globalThis.fetch.bind(globalThis);if(!i)throw new TypeError(\"no fetch function supplied, and none found in global environment\");t.overrides&&(this.baseOverrides=t.overrides),this.fetchImplementation=i}async fetch(e,t){let i;try{i=await this.fetchImplementation(e,t)}catch(n){if(!`${n}`.includes(\"Failed to fetch\"))throw new Error(`${o(n)} fetching ${e}`,{cause:n});console.warn(`generic-filehandle: refetching ${e} to attempt to work around chrome CORS header caching bug`);try{i=await this.fetchImplementation(e,{...t,cache:\"reload\"})}catch(t){throw new Error(`${o(t)} fetching ${e}`,{cause:t})}}return i}async read(e,t=0,i,n=0,r={}){const{headers:s={},signal:o,overrides:a={}}=r;i<1/0?s.range=`bytes=${n}-${n+i}`:i===1/0&&0!==n&&(s.range=`bytes=${n}-`);const c=await this.fetch(this.url,{...this.baseOverrides,...a,headers:{...s,...a.headers,...this.baseOverrides.headers},method:\"GET\",redirect:\"follow\",mode:\"cors\",signal:o});if(!c.ok)throw new Error(`HTTP ${c.status} fetching ${this.url}`);if(200===c.status&&0===n||206===c.status){const n=await this.getBufferFromResponse(c),r=n.copy(e,t,0,Math.min(i,n.length)),s=c.headers.get(\"content-range\"),o=/\\/(\\d+)$/.exec(s||\"\");return(null==o?void 0:o[1])&&(this._stat={size:parseInt(o[1],10)}),{bytesRead:r,buffer:e}}if(200===c.status)throw new Error(`${this.url} fetch returned status 200, expected 206`);throw new Error(`HTTP ${c.status} fetching ${this.url}`)}async readFile(e={}){let t,i;\"string\"==typeof e?(t=e,i={}):(t=e.encoding,i=e,delete i.encoding);const{headers:n={},signal:r,overrides:s={}}=i,o=await this.fetch(this.url,{headers:n,method:\"GET\",redirect:\"follow\",mode:\"cors\",signal:r,...this.baseOverrides,...s});if(200!==o.status)throw new Error(`HTTP ${o.status} fetching ${this.url}`);if(\"utf8\"===t)return o.text();if(t)throw new Error(`unsupported encoding: ${t}`);return this.getBufferFromResponse(o)}async stat(){if(!this._stat){const e=s.Buffer.allocUnsafe(10);if(await this.read(e,0,10,0),!this._stat)throw new Error(`unable to determine size of file at ${this.url}`)}return this._stat}async close(){}}function c(e){const t=new FileReader;return new Promise(((i,n)=>{t.onerror=()=>{t.abort(),n(new Error(\"problem reading blob\"))},t.onabort=()=>{n(new Error(\"blob reading was aborted\"))},t.onload=()=>{t.result&&\"string\"!=typeof t.result?i(t.result):n(new Error(\"unknown error reading blob\"))},t.readAsArrayBuffer(e)}))}class l{constructor(e){this.blob=e,this.size=e.size}async read(e,t=0,i,n=0){if(!i)return{bytesRead:0,buffer:e};const r=n,o=r+i,a=await c(this.blob.slice(r,o)),l=s.Buffer.from(a);return{bytesRead:l.copy(e,t),buffer:l}}async readFile(e){const t=\"string\"==typeof e?e:null==e?void 0:e.encoding;if(\"utf8\"===t)return function(e){const t=new FileReader;return new Promise(((i,n)=>{t.onerror=()=>{t.abort(),n(new Error(\"problem reading blob\"))},t.onabort=()=>{n(new Error(\"blob reading was aborted\"))},t.onload=()=>{t.result&&\"string\"==typeof t.result?i(t.result):n(new Error(\"unknown error reading blob\"))},t.readAsText(e)}))}(this.blob);if(t)throw new Error(`unsupported encoding: ${t}`);const i=await c(this.blob);return s.Buffer.from(i)}async stat(){return{size:this.size}}async close(){}}function h(e,t={}){return new a(e,t)}function d(e,t,i,n={}){if(void 0!==i)return i;if(void 0!==e)return h(e,n);if(void 0!==t)return new(r())(t,n);throw new Error(\"no url, path, or filehandle provided, cannot open\")}},251:(e,t)=>{t.read=function(e,t,i,n,r){var s,o,a=8*r-n-1,c=(1<>1,h=-7,d=i?r-1:0,u=i?-1:1,f=e[t+d];for(d+=u,s=f&(1<<-h)-1,f>>=-h,h+=a;h>0;s=256*s+e[t+d],d+=u,h-=8);for(o=s&(1<<-h)-1,s>>=-h,h+=n;h>0;o=256*o+e[t+d],d+=u,h-=8);if(0===s)s=1-l;else{if(s===c)return o?NaN:1/0*(f?-1:1);o+=Math.pow(2,n),s-=l}return(f?-1:1)*o*Math.pow(2,s-n)},t.write=function(e,t,i,n,r,s){var o,a,c,l=8*s-r-1,h=(1<>1,u=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:s-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,o=h):(o=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-o))<1&&(o--,c*=2),(t+=o+d>=1?u/c:u*Math.pow(2,1-d))*c>=2&&(o++,c/=2),o+d>=h?(a=0,o=h):o+d>=1?(a=(t*c-1)*Math.pow(2,r),o+=d):(a=t*Math.pow(2,d-1)*Math.pow(2,r),o=0));r>=8;e[i+f]=255&a,f+=p,a/=256,r-=8);for(o=o<0;e[i+f]=255&o,f+=p,o/=256,l-=8);e[i+f-p]|=128*g}},8570:e=>{e.exports=i;var t=null;try{t=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(e){}function i(e,t,i){this.low=0|e,this.high=0|t,this.unsigned=!!i}function n(e){return!0===(e&&e.__isLong__)}i.prototype.__isLong__,Object.defineProperty(i.prototype,\"__isLong__\",{value:!0}),i.isLong=n;var r={},s={};function o(e,t){var i,n,o;return t?(o=0<=(e>>>=0)&&e<256)&&(n=s[e])?n:(i=c(e,(0|e)<0?-1:0,!0),o&&(s[e]=i),i):(o=-128<=(e|=0)&&e<128)&&(n=r[e])?n:(i=c(e,e<0?-1:0,!1),o&&(r[e]=i),i)}function a(e,t){if(isNaN(e))return t?w:m;if(t){if(e<0)return w;if(e>=f)return A}else{if(e<=-p)return C;if(e+1>=p)return y}return e<0?a(-e,t).neg():c(e%u|0,e/u|0,t)}function c(e,t,n){return new i(e,t,n)}i.fromInt=o,i.fromNumber=a,i.fromBits=c;var l=Math.pow;function h(e,t,i){if(0===e.length)throw Error(\"empty string\");if(\"NaN\"===e||\"Infinity\"===e||\"+Infinity\"===e||\"-Infinity\"===e)return m;if(\"number\"==typeof t?(i=t,t=!1):t=!!t,(i=i||10)<2||360)throw Error(\"interior hyphen\");if(0===n)return h(e.substring(1),t,i).neg();for(var r=a(l(i,8)),s=m,o=0;o>>0:this.low},_.toNumber=function(){return this.unsigned?(this.high>>>0)*u+(this.low>>>0):this.high*u+(this.low>>>0)},_.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((s=c).isZero())return h+o;for(;h.length<6;)h=\"0\"+h;o=\"\"+h+o}},_.getHighBits=function(){return this.high},_.getHighBitsUnsigned=function(){return this.high>>>0},_.getLowBits=function(){return this.low},_.getLowBitsUnsigned=function(){return this.low>>>0},_.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&!(e&1<=0},_.isOdd=function(){return!(1&~this.low)},_.isEven=function(){return!(1&this.low)},_.equals=function(e){return n(e)||(e=d(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&this.high===e.high&&this.low===e.low},_.eq=_.equals,_.notEquals=function(e){return!this.eq(e)},_.neq=_.notEquals,_.ne=_.notEquals,_.lessThan=function(e){return this.comp(e)<0},_.lt=_.lessThan,_.lessThanOrEqual=function(e){return this.comp(e)<=0},_.lte=_.lessThanOrEqual,_.le=_.lessThanOrEqual,_.greaterThan=function(e){return this.comp(e)>0},_.gt=_.greaterThan,_.greaterThanOrEqual=function(e){return this.comp(e)>=0},_.gte=_.greaterThanOrEqual,_.ge=_.greaterThanOrEqual,_.compare=function(e){if(n(e)||(e=d(e)),this.eq(e))return 0;var t=this.isNegative(),i=e.isNegative();return t&&!i?-1:!t&&i?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},_.comp=_.compare,_.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(b)},_.neg=_.negate,_.add=function(e){n(e)||(e=d(e));var t=this.high>>>16,i=65535&this.high,r=this.low>>>16,s=65535&this.low,o=e.high>>>16,a=65535&e.high,l=e.low>>>16,h=0,u=0,f=0,p=0;return f+=(p+=s+(65535&e.low))>>>16,u+=(f+=r+l)>>>16,h+=(u+=i+a)>>>16,h+=t+o,c((f&=65535)<<16|(p&=65535),(h&=65535)<<16|(u&=65535),this.unsigned)},_.subtract=function(e){return n(e)||(e=d(e)),this.add(e.neg())},_.sub=_.subtract,_.multiply=function(e){if(this.isZero())return m;if(n(e)||(e=d(e)),t)return c(t.mul(this.low,this.high,e.low,e.high),t.get_high(),this.unsigned);if(e.isZero())return m;if(this.eq(C))return e.isOdd()?C:m;if(e.eq(C))return this.isOdd()?C:m;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(g)&&e.lt(g))return a(this.toNumber()*e.toNumber(),this.unsigned);var i=this.high>>>16,r=65535&this.high,s=this.low>>>16,o=65535&this.low,l=e.high>>>16,h=65535&e.high,u=e.low>>>16,f=65535&e.low,p=0,w=0,b=0,F=0;return b+=(F+=o*f)>>>16,w+=(b+=s*f)>>>16,b&=65535,w+=(b+=o*u)>>>16,p+=(w+=r*f)>>>16,w&=65535,p+=(w+=s*u)>>>16,w&=65535,p+=(w+=o*h)>>>16,p+=i*f+r*u+s*h+o*l,c((b&=65535)<<16|(F&=65535),(p&=65535)<<16|(w&=65535),this.unsigned)},_.mul=_.multiply,_.divide=function(e){if(n(e)||(e=d(e)),e.isZero())throw Error(\"division by zero\");var i,r,s;if(t)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?c((this.unsigned?t.div_u:t.div_s)(this.low,this.high,e.low,e.high),t.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?w:m;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return w;if(e.gt(this.shru(1)))return F;s=w}else{if(this.eq(C))return e.eq(b)||e.eq(v)?C:e.eq(C)?b:(i=this.shr(1).div(e).shl(1)).eq(m)?e.isNegative()?b:v:(r=this.sub(e.mul(i)),s=i.add(r.div(e)));if(e.eq(C))return this.unsigned?w:m;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=m}for(r=this;r.gte(e);){i=Math.max(1,Math.floor(r.toNumber()/e.toNumber()));for(var o=Math.ceil(Math.log(i)/Math.LN2),h=o<=48?1:l(2,o-48),u=a(i),f=u.mul(e);f.isNegative()||f.gt(r);)f=(u=a(i-=h,this.unsigned)).mul(e);u.isZero()&&(u=b),s=s.add(u),r=r.sub(f)}return s},_.div=_.divide,_.modulo=function(e){return n(e)||(e=d(e)),t?c((this.unsigned?t.rem_u:t.rem_s)(this.low,this.high,e.low,e.high),t.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},_.mod=_.modulo,_.rem=_.modulo,_.not=function(){return c(~this.low,~this.high,this.unsigned)},_.and=function(e){return n(e)||(e=d(e)),c(this.low&e.low,this.high&e.high,this.unsigned)},_.or=function(e){return n(e)||(e=d(e)),c(this.low|e.low,this.high|e.high,this.unsigned)},_.xor=function(e){return n(e)||(e=d(e)),c(this.low^e.low,this.high^e.high,this.unsigned)},_.shiftLeft=function(e){return n(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?c(this.low<>>32-e,this.unsigned):c(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):c(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},_.shr=_.shiftRight,_.shiftRightUnsigned=function(e){if(n(e)&&(e=e.toInt()),0==(e&=63))return this;var t=this.high;return e<32?c(this.low>>>e|t<<32-e,t>>>e,this.unsigned):c(32===e?t:t>>>e-32,0,this.unsigned)},_.shru=_.shiftRightUnsigned,_.shr_u=_.shiftRightUnsigned,_.toSigned=function(){return this.unsigned?c(this.low,this.high,!1):this},_.toUnsigned=function(){return this.unsigned?this:c(this.low,this.high,!0)},_.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},_.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},_.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},i.fromBytes=function(e,t,n){return n?i.fromBytesLE(e,t):i.fromBytesBE(e,t)},i.fromBytesLE=function(e,t){return new i(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},i.fromBytesBE=function(e,t){return new i(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},3503:(e,t,i)=>{var n,r,s,o,a;n=i(3939),r=i(2151).utf8,s=i(652),o=i(2151).bin,(a=function(e,t){e.constructor==String?e=t&&\"binary\"===t.encoding?o.stringToBytes(e):r.stringToBytes(e):s(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var i=n.bytesToWords(e),c=8*e.length,l=1732584193,h=-271733879,d=-1732584194,u=271733878,f=0;f>>24)|4278255360&(i[f]<<24|i[f]>>>8);i[c>>>5]|=128<>>9<<4)]=c;var p=a._ff,g=a._gg,m=a._hh,w=a._ii;for(f=0;f>>0,h=h+F>>>0,d=d+v>>>0,u=u+y>>>0}return n.endian([l,h,d,u])})._ff=function(e,t,i,n,r,s,o){var a=e+(t&i|~t&n)+(r>>>0)+o;return(a<>>32-s)+t},a._gg=function(e,t,i,n,r,s,o){var a=e+(t&n|i&~n)+(r>>>0)+o;return(a<>>32-s)+t},a._hh=function(e,t,i,n,r,s,o){var a=e+(t^i^n)+(r>>>0)+o;return(a<>>32-s)+t},a._ii=function(e,t,i,n,r,s,o){var a=e+(i^(t|~n))+(r>>>0)+o;return(a<>>32-s)+t},a._blocksize=16,a._digestsize=16,e.exports=function(e,t){if(null==e)throw new Error(\"Illegal argument \"+e);var i=n.wordsToBytes(a(e,t));return t&&t.asBytes?i:t&&t.asString?o.bytesToString(i):n.bytesToHex(i)}},652:e=>{function t(e){return!!e.constructor&&\"function\"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}e.exports=function(e){return null!=e&&(t(e)||function(e){return\"function\"==typeof e.readFloatLE&&\"function\"==typeof e.slice&&t(e.slice(0,0))}(e)||!!e._isBuffer)}},1668:(e,t,i)=>{var n={};(0,i(9805).assign)(n,i(3303),i(7083),i(9681)),e.exports=n},3303:(e,t,i)=>{var n=i(8411),r=i(9805),s=i(1996),o=i(4674),a=i(4442),c=Object.prototype.toString;function l(e){if(!(this instanceof l))return new l(e);this.options=r.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new a,this.strm.avail_out=0;var i=n.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==i)throw new Error(o[i]);if(t.header&&n.deflateSetHeader(this.strm,t.header),t.dictionary){var h;if(h=\"string\"==typeof t.dictionary?s.string2buf(t.dictionary):\"[object ArrayBuffer]\"===c.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,0!==(i=n.deflateSetDictionary(this.strm,h)))throw new Error(o[i]);this._dict_set=!0}}function h(e,t){var i=new l(t);if(i.push(e,!0),i.err)throw i.msg||o[i.err];return i.result}l.prototype.push=function(e,t){var i,o,a=this.strm,l=this.options.chunkSize;if(this.ended)return!1;o=t===~~t?t:!0===t?4:0,\"string\"==typeof e?a.input=s.string2buf(e):\"[object ArrayBuffer]\"===c.call(e)?a.input=new Uint8Array(e):a.input=e,a.next_in=0,a.avail_in=a.input.length;do{if(0===a.avail_out&&(a.output=new r.Buf8(l),a.next_out=0,a.avail_out=l),1!==(i=n.deflate(a,o))&&0!==i)return this.onEnd(i),this.ended=!0,!1;0!==a.avail_out&&(0!==a.avail_in||4!==o&&2!==o)||(\"string\"===this.options.to?this.onData(s.buf2binstring(r.shrinkBuf(a.output,a.next_out))):this.onData(r.shrinkBuf(a.output,a.next_out)))}while((a.avail_in>0||0===a.avail_out)&&1!==i);return 4===o?(i=n.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,0===i):2!==o||(this.onEnd(0),a.avail_out=0,!0)},l.prototype.onData=function(e){this.chunks.push(e)},l.prototype.onEnd=function(e){0===e&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=r.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},t.Deflate=l,t.deflate=h,t.deflateRaw=function(e,t){return(t=t||{}).raw=!0,h(e,t)},t.gzip=function(e,t){return(t=t||{}).gzip=!0,h(e,t)}},7083:(e,t,i)=>{var n=i(1447),r=i(9805),s=i(1996),o=i(9681),a=i(4674),c=i(4442),l=i(7414),h=Object.prototype.toString;function d(e){if(!(this instanceof d))return new d(e);this.options=r.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new c,this.strm.avail_out=0;var i=n.inflateInit2(this.strm,t.windowBits);if(i!==o.Z_OK)throw new Error(a[i]);if(this.header=new l,n.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=s.string2buf(t.dictionary):\"[object ArrayBuffer]\"===h.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=n.inflateSetDictionary(this.strm,t.dictionary))!==o.Z_OK))throw new Error(a[i])}function u(e,t){var i=new d(t);if(i.push(e,!0),i.err)throw i.msg||a[i.err];return i.result}d.prototype.push=function(e,t){var i,a,c,l,d,u=this.strm,f=this.options.chunkSize,p=this.options.dictionary,g=!1;if(this.ended)return!1;a=t===~~t?t:!0===t?o.Z_FINISH:o.Z_NO_FLUSH,\"string\"==typeof e?u.input=s.binstring2buf(e):\"[object ArrayBuffer]\"===h.call(e)?u.input=new Uint8Array(e):u.input=e,u.next_in=0,u.avail_in=u.input.length;do{if(0===u.avail_out&&(u.output=new r.Buf8(f),u.next_out=0,u.avail_out=f),(i=n.inflate(u,o.Z_NO_FLUSH))===o.Z_NEED_DICT&&p&&(i=n.inflateSetDictionary(this.strm,p)),i===o.Z_BUF_ERROR&&!0===g&&(i=o.Z_OK,g=!1),i!==o.Z_STREAM_END&&i!==o.Z_OK)return this.onEnd(i),this.ended=!0,!1;u.next_out&&(0!==u.avail_out&&i!==o.Z_STREAM_END&&(0!==u.avail_in||a!==o.Z_FINISH&&a!==o.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(c=s.utf8border(u.output,u.next_out),l=u.next_out-c,d=s.buf2string(u.output,c),u.next_out=l,u.avail_out=f-l,l&&r.arraySet(u.output,u.output,c,l,0),this.onData(d)):this.onData(r.shrinkBuf(u.output,u.next_out)))),0===u.avail_in&&0===u.avail_out&&(g=!0)}while((u.avail_in>0||0===u.avail_out)&&i!==o.Z_STREAM_END);return i===o.Z_STREAM_END&&(a=o.Z_FINISH),a===o.Z_FINISH?(i=n.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===o.Z_OK):a!==o.Z_SYNC_FLUSH||(this.onEnd(o.Z_OK),u.avail_out=0,!0)},d.prototype.onData=function(e){this.chunks.push(e)},d.prototype.onEnd=function(e){e===o.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=r.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},t.Inflate=d,t.inflate=u,t.inflateRaw=function(e,t){return(t=t||{}).raw=!0,u(e,t)},t.ungzip=u},9805:(e,t)=>{var i=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var i=t.shift();if(i){if(\"object\"!=typeof i)throw new TypeError(i+\"must be non-object\");for(var r in i)n(i,r)&&(e[r]=i[r])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var r={arraySet:function(e,t,i,n,r){if(t.subarray&&e.subarray)e.set(t.subarray(i,i+n),r);else for(var s=0;s{var n=i(9805),r=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){r=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var o=new n.Buf8(256),a=0;a<256;a++)o[a]=a>=252?6:a>=248?5:a>=240?4:a>=224?3:a>=192?2:1;function c(e,t){if(t<65534&&(e.subarray&&s||!e.subarray&&r))return String.fromCharCode.apply(null,n.shrinkBuf(e,t));for(var i=\"\",o=0;o>>6,t[o++]=128|63&i):i<65536?(t[o++]=224|i>>>12,t[o++]=128|i>>>6&63,t[o++]=128|63&i):(t[o++]=240|i>>>18,t[o++]=128|i>>>12&63,t[o++]=128|i>>>6&63,t[o++]=128|63&i);return t},t.buf2binstring=function(e){return c(e,e.length)},t.binstring2buf=function(e){for(var t=new n.Buf8(e.length),i=0,r=t.length;i4)l[n++]=65533,i+=s-1;else{for(r&=2===s?31:3===s?15:7;s>1&&i1?l[n++]=65533:r<65536?l[n++]=r:(r-=65536,l[n++]=55296|r>>10&1023,l[n++]=56320|1023&r)}return c(l,n)},t.utf8border=function(e,t){var i;for((t=t||e.length)>e.length&&(t=e.length),i=t-1;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+o[e[i]]>t?i:t}},3269:e=>{e.exports=function(e,t,i,n){for(var r=65535&e,s=e>>>16&65535,o=0;0!==i;){i-=o=i>2e3?2e3:i;do{s=s+(r=r+t[n++]|0)|0}while(--o);r%=65521,s%=65521}return r|s<<16}},9681:e=>{e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},4823:e=>{var t=function(){for(var e,t=[],i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t}();e.exports=function(e,i,n,r){var s=t,o=r+n;e^=-1;for(var a=r;a>>8^s[255&(e^i[a])];return~e}},8411:(e,t,i)=>{var n,r=i(9805),s=i(3665),o=i(3269),a=i(4823),c=i(4674),l=-2,h=258,d=262,u=103,f=113,p=666;function g(e,t){return e.msg=c[t],t}function m(e){return(e<<1)-(e>4?9:0)}function w(e){for(var t=e.length;--t>=0;)e[t]=0}function b(e){var t=e.state,i=t.pending;i>e.avail_out&&(i=e.avail_out),0!==i&&(r.arraySet(e.output,t.pending_buf,t.pending_out,i,e.next_out),e.next_out+=i,t.pending_out+=i,e.total_out+=i,e.avail_out-=i,t.pending-=i,0===t.pending&&(t.pending_out=0))}function F(e,t){s._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,b(e.strm)}function v(e,t){e.pending_buf[e.pending++]=t}function y(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function A(e,t,i,n){var s=e.avail_in;return s>n&&(s=n),0===s?0:(e.avail_in-=s,r.arraySet(t,e.input,e.next_in,s,i),1===e.state.wrap?e.adler=o(e.adler,t,s,i):2===e.state.wrap&&(e.adler=a(e.adler,t,s,i)),e.next_in+=s,e.total_in+=s,s)}function C(e,t){var i,n,r=e.max_chain_length,s=e.strstart,o=e.prev_length,a=e.nice_match,c=e.strstart>e.w_size-d?e.strstart-(e.w_size-d):0,l=e.window,u=e.w_mask,f=e.prev,p=e.strstart+h,g=l[s+o-1],m=l[s+o];e.prev_length>=e.good_match&&(r>>=2),a>e.lookahead&&(a=e.lookahead);do{if(l[(i=t)+o]===m&&l[i+o-1]===g&&l[i]===l[s]&&l[++i]===l[s+1]){s+=2,i++;do{}while(l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&so){if(e.match_start=t,o=n,n>=a)break;g=l[s+o-1],m=l[s+o]}}}while((t=f[t&u])>c&&0!=--r);return o<=e.lookahead?o:e.lookahead}function _(e){var t,i,n,s,o,a=e.w_size;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=a+(a-d)){r.arraySet(e.window,e.window,a,a,0),e.match_start-=a,e.strstart-=a,e.block_start-=a,t=i=e.hash_size;do{n=e.head[--t],e.head[t]=n>=a?n-a:0}while(--i);t=i=a;do{n=e.prev[--t],e.prev[t]=n>=a?n-a:0}while(--i);s+=a}if(0===e.strm.avail_in)break;if(i=A(e.strm,e.window,e.strstart+e.lookahead,s),e.lookahead+=i,e.lookahead+e.insert>=3)for(o=e.strstart-e.insert,e.ins_h=e.window[o],e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3)if(n=s._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){r=e.strstart+e.lookahead-3,n=s._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=r&&(e.ins_h=(e.ins_h<15&&(a=2,n-=16),s<1||s>9||8!==i||n<8||n>15||t<0||t>9||o<0||o>4)return g(e,l);8===n&&(n=9);var c=new S;return e.state=c,c.strm=e,c.wrap=a,c.gzhead=null,c.w_bits=n,c.w_size=1<e.pending_buf_size-5&&(i=e.pending_buf_size-5);;){if(e.lookahead<=1){if(_(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+i;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,F(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-d&&(F(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(F(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(F(e,!1),e.strm.avail_out),1)})),new I(4,4,8,4,x),new I(4,5,16,8,x),new I(4,6,32,32,x),new I(4,4,16,16,k),new I(8,16,32,32,k),new I(8,16,128,128,k),new I(8,32,128,256,k),new I(32,128,258,1024,k),new I(32,258,258,4096,k)],t.deflateInit=function(e,t){return B(e,t,8,15,8,0)},t.deflateInit2=B,t.deflateReset=N,t.deflateResetKeep=E,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?l:(e.state.gzhead=t,0):l},t.deflate=function(e,t){var i,r,o,c;if(!e||!e.state||t>5||t<0)return e?g(e,l):l;if(r=e.state,!e.output||!e.input&&0!==e.avail_in||r.status===p&&4!==t)return g(e,0===e.avail_out?-5:l);if(r.strm=e,i=r.last_flush,r.last_flush=t,42===r.status)if(2===r.wrap)e.adler=0,v(r,31),v(r,139),v(r,8),r.gzhead?(v(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),v(r,255&r.gzhead.time),v(r,r.gzhead.time>>8&255),v(r,r.gzhead.time>>16&255),v(r,r.gzhead.time>>24&255),v(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),v(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(v(r,255&r.gzhead.extra.length),v(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(e.adler=a(e.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(v(r,0),v(r,0),v(r,0),v(r,0),v(r,0),v(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),v(r,3),r.status=f);else{var d=8+(r.w_bits-8<<4)<<8;d|=(r.strategy>=2||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(d|=32),d+=31-d%31,r.status=f,y(r,d),0!==r.strstart&&(y(r,e.adler>>>16),y(r,65535&e.adler)),e.adler=1}if(69===r.status)if(r.gzhead.extra){for(o=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>o&&(e.adler=a(e.adler,r.pending_buf,r.pending-o,o)),b(e),o=r.pending,r.pending!==r.pending_buf_size));)v(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>o&&(e.adler=a(e.adler,r.pending_buf,r.pending-o,o)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){o=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>o&&(e.adler=a(e.adler,r.pending_buf,r.pending-o,o)),b(e),o=r.pending,r.pending===r.pending_buf_size)){c=1;break}c=r.gzindexo&&(e.adler=a(e.adler,r.pending_buf,r.pending-o,o)),0===c&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){o=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>o&&(e.adler=a(e.adler,r.pending_buf,r.pending-o,o)),b(e),o=r.pending,r.pending===r.pending_buf_size)){c=1;break}c=r.gzindexo&&(e.adler=a(e.adler,r.pending_buf,r.pending-o,o)),0===c&&(r.status=u)}else r.status=u;if(r.status===u&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&b(e),r.pending+2<=r.pending_buf_size&&(v(r,255&e.adler),v(r,e.adler>>8&255),e.adler=0,r.status=f)):r.status=f),0!==r.pending){if(b(e),0===e.avail_out)return r.last_flush=-1,0}else if(0===e.avail_in&&m(t)<=m(i)&&4!==t)return g(e,-5);if(r.status===p&&0!==e.avail_in)return g(e,-5);if(0!==e.avail_in||0!==r.lookahead||0!==t&&r.status!==p){var A=2===r.strategy?function(e,t){for(var i;;){if(0===e.lookahead&&(_(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,i=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,i&&(F(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(F(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(F(e,!1),0===e.strm.avail_out)?1:2}(r,t):3===r.strategy?function(e,t){for(var i,n,r,o,a=e.window;;){if(e.lookahead<=h){if(_(e),e.lookahead<=h&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(n=a[r=e.strstart-1])===a[++r]&&n===a[++r]&&n===a[++r]){o=e.strstart+h;do{}while(n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&re.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(i=s._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(i=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),i&&(F(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(F(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(F(e,!1),0===e.strm.avail_out)?1:2}(r,t):n[r.level].func(r,t);if(3!==A&&4!==A||(r.status=p),1===A||3===A)return 0===e.avail_out&&(r.last_flush=-1),0;if(2===A&&(1===t?s._tr_align(r):5!==t&&(s._tr_stored_block(r,0,0,!1),3===t&&(w(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),b(e),0===e.avail_out))return r.last_flush=-1,0}return 4!==t?0:r.wrap<=0?1:(2===r.wrap?(v(r,255&e.adler),v(r,e.adler>>8&255),v(r,e.adler>>16&255),v(r,e.adler>>24&255),v(r,255&e.total_in),v(r,e.total_in>>8&255),v(r,e.total_in>>16&255),v(r,e.total_in>>24&255)):(y(r,e.adler>>>16),y(r,65535&e.adler)),b(e),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?0:1)},t.deflateEnd=function(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&t!==u&&t!==f&&t!==p?g(e,l):(e.state=null,t===f?g(e,-3):0):l},t.deflateSetDictionary=function(e,t){var i,n,s,a,c,h,d,u,f=t.length;if(!e||!e.state)return l;if(2===(a=(i=e.state).wrap)||1===a&&42!==i.status||i.lookahead)return l;for(1===a&&(e.adler=o(e.adler,t,f,0)),i.wrap=0,f>=i.w_size&&(0===a&&(w(i.head),i.strstart=0,i.block_start=0,i.insert=0),u=new r.Buf8(i.w_size),r.arraySet(u,t,f-i.w_size,i.w_size,0),t=u,f=i.w_size),c=e.avail_in,h=e.next_in,d=e.input,e.avail_in=f,e.next_in=0,e.input=t,_(i);i.lookahead>=3;){n=i.strstart,s=i.lookahead-2;do{i.ins_h=(i.ins_h<{e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},7293:e=>{e.exports=function(e,t){var i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_,x,k;i=e.state,n=e.next_in,x=e.input,r=n+(e.avail_in-5),s=e.next_out,k=e.output,o=s-(t-e.avail_out),a=s+(e.avail_out-257),c=i.dmax,l=i.wsize,h=i.whave,d=i.wnext,u=i.window,f=i.hold,p=i.bits,g=i.lencode,m=i.distcode,w=(1<>>=v=F>>>24,p-=v,0==(v=F>>>16&255))k[s++]=65535&F;else{if(!(16&v)){if(64&v){if(32&v){i.mode=12;break e}e.msg=\"invalid literal/length code\",i.mode=30;break e}F=g[(65535&F)+(f&(1<>>=v,p-=v),p<15&&(f+=x[n++]<>>=v=F>>>24,p-=v,16&(v=F>>>16&255)){if(A=65535&F,p<(v&=15)&&(f+=x[n++]<c){e.msg=\"invalid distance too far back\",i.mode=30;break e}if(f>>>=v,p-=v,A>(v=s-o)){if((v=A-v)>h&&i.sane){e.msg=\"invalid distance too far back\",i.mode=30;break e}if(C=0,_=u,0===d){if(C+=l-v,v2;)k[s++]=_[C++],k[s++]=_[C++],k[s++]=_[C++],y-=3;y&&(k[s++]=_[C++],y>1&&(k[s++]=_[C++]))}else{C=s-A;do{k[s++]=k[C++],k[s++]=k[C++],k[s++]=k[C++],y-=3}while(y>2);y&&(k[s++]=k[C++],y>1&&(k[s++]=k[C++]))}break}if(64&v){e.msg=\"invalid distance code\",i.mode=30;break e}F=m[(65535&F)+(f&(1<>3,f&=(1<<(p-=y<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n{var n=i(9805),r=i(3269),s=i(4823),o=i(7293),a=i(1998),c=-2,l=12,h=30;function d(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function u(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(852),t.distcode=t.distdyn=new n.Buf32(592),t.sane=1,t.back=-1,0):c}function p(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,f(e)):c}function g(e,t){var i,n;return e&&e.state?(n=e.state,t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?c:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,p(e))):c}function m(e,t){var i,n;return e?(n=new u,e.state=n,n.window=null,0!==(i=g(e,t))&&(e.state=null),i):c}var w,b,F=!0;function v(e){if(F){var t;for(w=new n.Buf32(512),b=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(a(1,e.lens,0,288,w,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;a(2,e.lens,0,32,b,0,e.work,{bits:5}),F=!1}e.lencode=w,e.lenbits=9,e.distcode=b,e.distbits=5}function y(e,t,i,r){var s,o=e.state;return null===o.window&&(o.wsize=1<=o.wsize?(n.arraySet(o.window,t,i-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((s=o.wsize-o.wnext)>r&&(s=r),n.arraySet(o.window,t,i-r,s,o.wnext),(r-=s)?(n.arraySet(o.window,t,i-r,r,0),o.wnext=r,o.whave=o.wsize):(o.wnext+=s,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,i.check=s(i.check,H,2,0),b=0,F=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&b)<<8)+(b>>8))%31){e.msg=\"incorrect header check\",i.mode=h;break}if(8!=(15&b)){e.msg=\"unknown compression method\",i.mode=h;break}if(F-=4,D=8+(15&(b>>>=4)),0===i.wbits)i.wbits=D;else if(D>i.wbits){e.msg=\"invalid window size\",i.mode=h;break}i.dmax=1<>8&1),512&i.flags&&(H[0]=255&b,H[1]=b>>>8&255,i.check=s(i.check,H,2,0)),b=0,F=0,i.mode=3;case 3:for(;F<32;){if(0===m)break e;m--,b+=u[p++]<>>8&255,H[2]=b>>>16&255,H[3]=b>>>24&255,i.check=s(i.check,H,4,0)),b=0,F=0,i.mode=4;case 4:for(;F<16;){if(0===m)break e;m--,b+=u[p++]<>8),512&i.flags&&(H[0]=255&b,H[1]=b>>>8&255,i.check=s(i.check,H,2,0)),b=0,F=0,i.mode=5;case 5:if(1024&i.flags){for(;F<16;){if(0===m)break e;m--,b+=u[p++]<>>8&255,i.check=s(i.check,H,2,0)),b=0,F=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&((_=i.length)>m&&(_=m),_&&(i.head&&(D=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),n.arraySet(i.head.extra,u,p,_,D)),512&i.flags&&(i.check=s(i.check,u,_,p)),m-=_,p+=_,i.length-=_),i.length))break e;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===m)break e;_=0;do{D=u[p+_++],i.head&&D&&i.length<65536&&(i.head.name+=String.fromCharCode(D))}while(D&&_>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=l;break;case 10:for(;F<32;){if(0===m)break e;m--,b+=u[p++]<>>=7&F,F-=7&F,i.mode=27;break}for(;F<3;){if(0===m)break e;m--,b+=u[p++]<>>=1)){case 0:i.mode=14;break;case 1:if(v(i),i.mode=20,6===t){b>>>=2,F-=2;break e}break;case 2:i.mode=17;break;case 3:e.msg=\"invalid block type\",i.mode=h}b>>>=2,F-=2;break;case 14:for(b>>>=7&F,F-=7&F;F<32;){if(0===m)break e;m--,b+=u[p++]<>>16^65535)){e.msg=\"invalid stored block lengths\",i.mode=h;break}if(i.length=65535&b,b=0,F=0,i.mode=15,6===t)break e;case 15:i.mode=16;case 16:if(_=i.length){if(_>m&&(_=m),_>w&&(_=w),0===_)break e;n.arraySet(f,u,p,_,g),m-=_,p+=_,w-=_,g+=_,i.length-=_;break}i.mode=l;break;case 17:for(;F<14;){if(0===m)break e;m--,b+=u[p++]<>>=5,F-=5,i.ndist=1+(31&b),b>>>=5,F-=5,i.ncode=4+(15&b),b>>>=4,F-=4,i.nlen>286||i.ndist>30){e.msg=\"too many length or distance symbols\",i.mode=h;break}i.have=0,i.mode=18;case 18:for(;i.have>>=3,F-=3}for(;i.have<19;)i.lens[P[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,T={bits:i.lenbits},R=a(0,i.lens,0,19,i.lencode,0,i.work,T),i.lenbits=T.bits,R){e.msg=\"invalid code lengths set\",i.mode=h;break}i.have=0,i.mode=19;case 19:for(;i.have>>16&255,E=65535&z,!((I=z>>>24)<=F);){if(0===m)break e;m--,b+=u[p++]<>>=I,F-=I,i.lens[i.have++]=E;else{if(16===E){for(L=I+2;F>>=I,F-=I,0===i.have){e.msg=\"invalid bit length repeat\",i.mode=h;break}D=i.lens[i.have-1],_=3+(3&b),b>>>=2,F-=2}else if(17===E){for(L=I+3;F>>=I)),b>>>=3,F-=3}else{for(L=I+7;F>>=I)),b>>>=7,F-=7}if(i.have+_>i.nlen+i.ndist){e.msg=\"invalid bit length repeat\",i.mode=h;break}for(;_--;)i.lens[i.have++]=D}}if(i.mode===h)break;if(0===i.lens[256]){e.msg=\"invalid code -- missing end-of-block\",i.mode=h;break}if(i.lenbits=9,T={bits:i.lenbits},R=a(1,i.lens,0,i.nlen,i.lencode,0,i.work,T),i.lenbits=T.bits,R){e.msg=\"invalid literal/lengths set\",i.mode=h;break}if(i.distbits=6,i.distcode=i.distdyn,T={bits:i.distbits},R=a(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,T),i.distbits=T.bits,R){e.msg=\"invalid distances set\",i.mode=h;break}if(i.mode=20,6===t)break e;case 20:i.mode=21;case 21:if(m>=6&&w>=258){e.next_out=g,e.avail_out=w,e.next_in=p,e.avail_in=m,i.hold=b,i.bits=F,o(e,C),g=e.next_out,f=e.output,w=e.avail_out,p=e.next_in,u=e.input,m=e.avail_in,b=i.hold,F=i.bits,i.mode===l&&(i.back=-1);break}for(i.back=0;S=(z=i.lencode[b&(1<>>16&255,E=65535&z,!((I=z>>>24)<=F);){if(0===m)break e;m--,b+=u[p++]<>N)])>>>16&255,E=65535&z,!(N+(I=z>>>24)<=F);){if(0===m)break e;m--,b+=u[p++]<>>=N,F-=N,i.back+=N}if(b>>>=I,F-=I,i.back+=I,i.length=E,0===S){i.mode=26;break}if(32&S){i.back=-1,i.mode=l;break}if(64&S){e.msg=\"invalid literal/length code\",i.mode=h;break}i.extra=15&S,i.mode=22;case 22:if(i.extra){for(L=i.extra;F>>=i.extra,F-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;S=(z=i.distcode[b&(1<>>16&255,E=65535&z,!((I=z>>>24)<=F);){if(0===m)break e;m--,b+=u[p++]<>N)])>>>16&255,E=65535&z,!(N+(I=z>>>24)<=F);){if(0===m)break e;m--,b+=u[p++]<>>=N,F-=N,i.back+=N}if(b>>>=I,F-=I,i.back+=I,64&S){e.msg=\"invalid distance code\",i.mode=h;break}i.offset=E,i.extra=15&S,i.mode=24;case 24:if(i.extra){for(L=i.extra;F>>=i.extra,F-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg=\"invalid distance too far back\",i.mode=h;break}i.mode=25;case 25:if(0===w)break e;if(_=C-w,i.offset>_){if((_=i.offset-_)>i.whave&&i.sane){e.msg=\"invalid distance too far back\",i.mode=h;break}_>i.wnext?(_-=i.wnext,x=i.wsize-_):x=i.wnext-_,_>i.length&&(_=i.length),k=i.window}else k=f,x=g-i.offset,_=i.length;_>w&&(_=w),w-=_,i.length-=_;do{f[g++]=k[x++]}while(--_);0===i.length&&(i.mode=21);break;case 26:if(0===w)break e;f[g++]=i.length,w--,i.mode=21;break;case 27:if(i.wrap){for(;F<32;){if(0===m)break e;m--,b|=u[p++]<{var n=i(9805),r=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],s=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],a=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(e,t,i,c,l,h,d,u){var f,p,g,m,w,b,F,v,y,A=u.bits,C=0,_=0,x=0,k=0,I=0,S=0,E=0,N=0,B=0,M=0,D=null,R=0,T=new n.Buf16(16),L=new n.Buf16(16),z=null,H=0;for(C=0;C<=15;C++)T[C]=0;for(_=0;_=1&&0===T[k];k--);if(I>k&&(I=k),0===k)return l[h++]=20971520,l[h++]=20971520,u.bits=1,0;for(x=1;x0&&(0===e||1!==k))return-1;for(L[1]=0,C=1;C<15;C++)L[C+1]=L[C]+T[C];for(_=0;_852||2===e&&B>592)return 1;for(;;){F=C-E,d[_]b?(v=z[H+d[_]],y=D[R+d[_]]):(v=96,y=0),f=1<>E)+(p-=f)]=F<<24|v<<16|y}while(0!==p);for(f=1<>=1;if(0!==f?(M&=f-1,M+=f):M=0,_++,0==--T[C]){if(C===k)break;C=t[i+d[_]]}if(C>I&&(M&m)!==g){for(0===E&&(E=I),w+=x,N=1<<(S=C-E);S+E852||2===e&&B>592)return 1;l[g=M&m]=I<<24|S<<16|w-h}}return 0!==M&&(l[w+M]=C-E<<24|64<<16),u.bits=I,0}},4674:e=>{e.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},3665:(e,t,i)=>{var n=i(9805);function r(e){for(var t=e.length;--t>=0;)e[t]=0}var s=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],o=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],c=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],l=new Array(576);r(l);var h=new Array(60);r(h);var d=new Array(512);r(d);var u=new Array(256);r(u);var f=new Array(29);r(f);var p,g,m,w=new Array(30);function b(e,t,i,n,r){this.static_tree=e,this.extra_bits=t,this.extra_base=i,this.elems=n,this.max_length=r,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function v(e){return e<256?d[e]:d[256+(e>>>7)]}function y(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function A(e,t,i){e.bi_valid>16-i?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=i-16):(e.bi_buf|=t<>>=1,i<<=1}while(--t>0);return i>>>1}function x(e,t,i){var n,r,s=new Array(16),o=0;for(n=1;n<=15;n++)s[n]=o=o+i[n-1]<<1;for(r=0;r<=t;r++){var a=e[2*r+1];0!==a&&(e[2*r]=_(s[a]++,a))}}function k(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function I(e){e.bi_valid>8?y(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function S(e,t,i,n){var r=2*t,s=2*i;return e[r]>1;i>=1;i--)E(e,s,i);r=c;do{i=e.heap[1],e.heap[1]=e.heap[e.heap_len--],E(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=i,e.heap[--e.heap_max]=n,s[2*r]=s[2*i]+s[2*n],e.depth[r]=(e.depth[i]>=e.depth[n]?e.depth[i]:e.depth[n])+1,s[2*i+1]=s[2*n+1]=r,e.heap[1]=r++,E(e,s,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var i,n,r,s,o,a,c=t.dyn_tree,l=t.max_code,h=t.stat_desc.static_tree,d=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,f=t.stat_desc.extra_base,p=t.stat_desc.max_length,g=0;for(s=0;s<=15;s++)e.bl_count[s]=0;for(c[2*e.heap[e.heap_max]+1]=0,i=e.heap_max+1;i<573;i++)(s=c[2*c[2*(n=e.heap[i])+1]+1]+1)>p&&(s=p,g++),c[2*n+1]=s,n>l||(e.bl_count[s]++,o=0,n>=f&&(o=u[n-f]),a=c[2*n],e.opt_len+=a*(s+o),d&&(e.static_len+=a*(h[2*n+1]+o)));if(0!==g){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,g-=2}while(g>0);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)(r=e.heap[--i])>l||(c[2*r+1]!==s&&(e.opt_len+=(s-c[2*r+1])*c[2*r],c[2*r+1]=s),n--)}}(e,t),x(s,l,e.bl_count)}function M(e,t,i){var n,r,s=-1,o=t[1],a=0,c=7,l=4;for(0===o&&(c=138,l=3),t[2*(i+1)+1]=65535,n=0;n<=i;n++)r=o,o=t[2*(n+1)+1],++a>=7;n<30;n++)for(w[n]=r<<7,e=0;e<1<0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,i=4093624447;for(t=0;t<=31;t++,i>>>=1)if(1&i&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),B(e,e.l_desc),B(e,e.d_desc),o=function(e){var t;for(M(e,e.dyn_ltree,e.l_desc.max_code),M(e,e.dyn_dtree,e.d_desc.max_code),B(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*c[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),r=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=r&&(r=s)):r=s=i+5,i+4<=r&&-1!==t?T(e,t,i,n):4===e.strategy||s===r?(A(e,2+(n?1:0),3),N(e,l,h)):(A(e,4+(n?1:0),3),function(e,t,i,n){var r;for(A(e,t-257,5),A(e,i-1,5),A(e,n-4,4),r=0;r>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&i,e.last_lit++,0===t?e.dyn_ltree[2*i]++:(e.matches++,t--,e.dyn_ltree[2*(u[i]+256+1)]++,e.dyn_dtree[2*v(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){A(e,2,3),C(e,256,l),function(e){16===e.bi_valid?(y(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},4442:e=>{e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},7392:e=>{class t{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){this.cache.set(e,t),this._size++,this._size>=this.maxSize&&(this._size=0,this.oldCache=this.cache,this.cache=new Map)}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){const t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){return this.cache.has(e)?this.cache.get(e):this.oldCache.has(e)?this.oldCache.get(e):void 0}delete(e){const t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(const[e]of this)yield e}*values(){for(const[,e]of this)yield e}*[Symbol.iterator](){for(const e of this.cache)yield e;for(const e of this.oldCache){const[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(const t of this.oldCache.keys())this.cache.has(t)||e++;return this._size+e}}e.exports=t},1307:function(e,t,i){var n;n=e=>(()=>{var t=[,e=>{e.exports=\"data:application/wasm;base64,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IgENAAsLIAJCf4UL1RACDH8CfgJAAkAgACgCJEUNACAAKAIAIQIMAQtBACECIABBADoAKCAAQgA3AwAgAEIANwMYIABByABqQQBB5AAQhoCAgAAaIABBrAFqQQw2AgALIAAgASgCBCIDNgIQIABBsAFqIQQgAEHgAGohBSAAQcgAaiEGIABBtgFqIQcgAEGoAWohCCABKAIQIQkCQAJAAkACQANAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIOCgECAAQFBgcICQoPCyABKAIAIQogACgCqAEhAiAAKAKsASELIAEoAgQhDCABKAIIIQ0MAgsgCCAAKAKoASIMakEIaiABKAIAIAEoAgQiAmogASgCCCACayICIAAoAqwBIAxrIgwgAiAMSRsiAhCHgICAABogASABKAIEIAJqNgIEQQAhDCAAQQAgACgCqAEgAmoiAiACIAAoAqwBIgtGGzYCqAEgAiALRw0RIABBATYCAAJAIARBqIiAgABBBhCEgICAAEUNAEEFIQwMEgsgB0ECQQAQjYCAgAAgACgAuAFHDRBBBiEMIActAAANESAAIAAtALcBIgI2AiAgAkEESw0RQQEgAnRBE3FFDRELIAEoAgQiDCABKAIIIg1GDQ4CQCABKAIAIgogDGotAAAiCw0AIAAgDDYCECABIAxBAWo2AgRBBiECDAwLQQAhAiAAQQA2AqgBIABBAjYCACAAIAtBAnRBBGoiCzYCrAEgACALNgJACyAIIAJqQQhqIAogDGogDSAMayIMIAsgAmsiAiAMIAJJGyICEIeAgIAAGiABIAIgASgCBGo2AgRBACEMIABBACAAKAKoASACaiICIAIgACgCrAEiC0YbNgKoASACIAtHDQ8gACACQXxqIgI2AqwBQQchDCAEIAJBABCNgICAACAAIAAoAqwBIgtqQbABaigAAEcNDyAAQQI2AqgBIAAtALEBIgJBP3ENDAJAAkAgAkHAAHFFDQAgACAEIAggCxCRgICAAEEBRw0RIAAgACkDCDcDMCAALQCxASECDAELIABCfzcDMAtCfyEOAkAgAkEYdEEYdUF/Sg0AIAAgBCAIIAAoAqwBEJGAgIAAQQFHDRAgACkDCCEOCyAAIA43AzggACgCrAEiDSAAKAKoASICa0ECSQ0PIAAgAkEBaiIKNgKoASAIIAJqQQhq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IgM2AhAgACAOQQh0IAAoAgwgCWotAAByIg42AgQgAyEJCwJAAkAgDiALQQt2IA8vAQAiCmwiA08iEg0AIAAgAzYCACAKQYAQIAprQQV2aiEKDAELIAAgDiADayIONgIEIAAgCyADayIDNgIAIAogCkEFdmshCkEAIQ0LIA8gCjsBACANIBFzIQ0gBEEBdCASciIEQYACSQ0ACwsgACACQQFqNgIgIAAoAhggAmogBDoAAAJAIAAoAiQgACgCICICTw0AIAAgAjYCJAtBACEDAkAgACgCZCIEQQRJDQACQCAEQQlLDQAgBEF9aiEDDAELIARBemohAwsgACADNgJkDAELIAAgDiADayIONgIEIAAgBCADayIDNgIAIA0gDyAPQQV2azsBACAAIApBAXRqIg9B+ANqIQQCQAJAIANB////B00NACAJIQoMAQsgACADQQh0IgM2AgAgACAJQQFqIgo2AhAgACAOQQh0IAAoAgwgCWotAAByIg42AgQLAkACQCAOIANBC3YgBC8BACINbCIJSQ0AIAAgDiAJayIONgIEIAAgAyAJayIDNgIAIAQgDSANQQV2azsBACAPQZAEaiENAkACQCADQf///wdNDQAgCiEQDAELIAAgA0EIdCIDNgIAIAAgCkEBaiIQNgIQIAAgDkEIdCAAKAIMIApqLQAAciIONgIECwJAAkAgDiADQQt2IA0vAQAiCWwiBE8NACANIAlBgBAgCWtBBXZqOwEAIAxB2ARqIQMCQCAEQf///wdLDQAgACAEQQh0IgQ2AgAgACAQQQFqNgIQIAAgDkEIdCAAKAIMIBBqLQAAciIONgIECwJAIA4gBEELdiADLwEAIg1sIglJDQAgACAOIAlrNgIEIAAgBCAJazYCACADIA0gDUEFdms7AQAMAgsgAyANQYAQIA1rQQV2ajsBACAAIAk2AgAgAEEBNgJoIABBCUELIAAoAmRBB0kbNgJkDAMLIAAgDiAEayIONgIEIA0gCSAJQQV2azsBACAPQagEaiENAkACQCADIARrIgNB////B00NACAQIQoMAQsgACADQQh0IgM2AgAgACAQQQFqIgo2AhAgACAOQQh0IAAoAgwgEGotAAByIg42AgQLAkACQCAOIANBC3YgDS8BACIEbCIJTw0AIAAgCTYCACANIARBgBAgBGtBBXZqOwEAIAAoAlghAwwBCyAAIA4gCWsiDjYCBCANIAQgBEEFdms7AQAgD0HABGohBAJAIAMgCWsiA0H///8HSw0AIAAgA0EIdCIDNgIAIAAgCkEBajYCECAAIA5BCHQgACgCDCAKai0AAHIiDjYCBAsCQAJAIA4gA0ELdiAELwEAIg1sIglPDQAgACAJNgIAIAQgDUGAECANa0EFdmo7AQAgACgCXCEDDAELIAAgDiAJazYCBCAAIAMgCWs2AgAgACgCYCEDIAAgACgCXDYCYCAEIA0gDUEFdms7AQALIAAgACgCWDYCXAsgACAAKAJUNgJYIAAgAzYCVAsgAEEIQQsgACgCZEEHSRs2AmQgACAHIAsQn4CAgAAMAQsgBCANQYAQIA1rQQV2ajsBACAAIAk2AgAgACAAKAJcNgJgIAAgACkCVDcCWCAAQQdBCiAAKAJkQQdJGzYCZCAAIAUgCxCfgICAACAAKAJoIgNBfmpBAyADQQZJGyEKIAAoAgAhA0EBIQ4DQCAAIApBB3RqIA5BAXQiDmpB2AdqIQ0CQAJAIANBgICACEkNACAAKAIEIQQMAQsgACADQQh0IgM2AgAgACAAKAIQIgRBAWo2AhAgACAAKAIEQQh0IAQgACgCDGotAAByIgQ2AgQLAkACQCAEIANBC3YgDS8BACIJbCIPSQ0AIAAgBCAPayIENgIEIAAgAyAPayIDNgIAIA0gCSAJQQV2azsBACAOQQFyIQ4MAQsgACAPNgIAIA0gCUGAECAJa0EFdmo7AQAgDyEDCyAOQcAASQ0ACwJAIA5BQGoiCUEDSw0AIAAgCTYCVAwBCyAAIA5BAXFBAnIiDTYCVCAJQQF2IQ8CQCAJQQ1LDQAgACANIA9Bf2oiDHQiCzYCVEEBIQ0gCCALQQF0akGEC2ohEEE/IA5rIRFBACEPA0AgECARIA1qQQF0aiEOAkACQCADQf///wdNDQAgAyEKDAELIAAgA0EIdCIKNgIAIAAgACgCECIDQQFqNgIQIAAgBEEIdCADIAAoAgxqLQAAciIENgIECwJAAkAgBCAKQQt2IA4vAQAiCWwiA0kNACAAIAQgA2siBDYCBCAAIAogA2siAzYCACAOIAkgCUEFdms7AQAgAEEBIA90IAtqIgs2AlQgDUEBdEEBciENDAELIAAgAzYCACAOIAlBgBAgCWtBBXZqOwEAIA1BAXQhDQsgDCAPQQFqIg9HDQAMAgsLIA9Be2ohDgNAAkAgA0H///8HSw0AIAAgA0EIdCIDNgIAIAAgACgCECIJQQFqNgIQIARBCHQgCSAAKAIMai0AAHIhBAsgACADQQF2IgM2AgAgACAEIANrIgRBH3UiCSANQQF0akEBaiINNgJUIAAgCSADcSAEaiIENgIEIA5Bf2oiDg0ACyAAIA1BBHQiCzYCVEEAIQ9BASEOA0AgACAOQQF0Ig5qQbwNaiENAkACQCADQf///wdNDQAgAyEKDAELIAAgA0EIdCIKNgIAIAAgACgCECIDQQFqNgIQIAAgBEEIdCADIAAoAgxqLQAAciIENgIECwJAAkAgBCAKQQt2IA0vAQAiCWwiA0kNACAAIAQgA2siBDYCBCAAIAogA2siAzYCACANIAkgCUEFdms7AQAgAEEBIA90IAtqIgs2AlQgDkEBciEODAELIAAgAzYCACANIAlBgBAgCWtBBXZqOwEACyAPQQFqIg9BBEcNAAsLAkAgASAGIAAoAlQQnoCAgAANAEEADwsgACgCICECCyACIAAoAihJDQALC0EBIQMCQCAAKAIAIgRB////B0sNACAAIARBCHQ2AgBBASEDIAAgACgCECIEQQFqNgIQIAAgACgCBEEIdCAEIAAoAgxqLQAAcjYCBAsgAwtwAQF/AkBBqN4BEICAgIAAIgJFDQAgAkE0aiABNgIAIAJBPGogADYCAAJAAkACQCAAQX9qDgIAAQILIAIgARCAgICAACIANgIYIAANASACEIKAgIAADAILIAJBADYCGCACQThqQQA2AgALIAIPC0EAC9IBAQJ/QQYhAgJAIAFBJ0sNACAAQTBqIAFBAXFBAnIgAUEBdkELanQiATYCAAJAAkAgAEE8aigCACIDRQ0AQQQhAiABIABBNGooAgBLDQIgAEEsaiABNgIAIANBAkcNACAAQThqIgMoAgAgAU8NACAAIAE2AjggACgCGBCCgICAACAAIAAoAjAQgICAgAAiATYCGCABDQBBAyECDAELQQAhAiAAQQA2AkAgAEHQAGpBAToAACAAQegAakEANgIAIABB5N0BaiEDCyADQQA2AgALIAILIwACQCAAQTxqKAIARQ0AIAAoAhgQgoCAgAALIAAQgoCAgAAL9QEBBH9BACEDAkAgACgCDCACTQ0AIAAoAhggAk0NACABIAEoAgAiBCAAKAIQIAAoAggiBWsiBiAEIAYgBEkbIgRrNgIAIAUgAkF/c2ohAQJAIAUgAksNACAAKAIUIAFqIQELIAAoAgAiAiABai0AACEGQQEhAyAAIAVBAWo2AgggAiAFaiAGOgAAAkAgBEF/aiICRQ0AA0AgACgCACIFQQAgAUEBaiIBIAEgACgCFEYbIgFqLQAAIQQgACAAKAIIIgZBAWo2AgggBSAGaiAEOgAAIAJBf2oiAg0ACwsgACgCDCAAKAIIIgFPDQAgACABNgIMCyADC8gEAQd/AkACQCAAKAIAIgNBgICACEkNACAAKAIEIQQMAQsgACADQQh0IgM2AgAgACAAKAIQIgVBAWo2AhAgACAAKAIEQQh0IAUgACgCDGotAAByIgQ2AgQLAkACQCAEIANBC3YgAS8BACIGbCIFTw0AIAEgBkGAECAGa0EFdmo7AQAgASACQQR0akEEaiEHQQghCEECIQkMAQsgACAEIAVrIgQ2AgQgASAGIAZBBXZrOwEAAkAgAyAFayIDQf///wdLDQAgACADQQh0IgM2AgAgACAAKAIQIgVBAWo2AhAgACAEQQh0IAUgACgCDGotAAByIgQ2AgQLAkAgBCADQQt2IAEvAQIiBmwiBU8NACABIAZBgBAgBmtBBXZqOwECIAEgAkEEdGpBhAJqIQdBCCEIQQohCQwBCyAAIAQgBWsiBDYCBCABIAYgBkEFdms7AQIgAUGEBGohByADIAVrIQVBgAIhCEESIQkLIABB6ABqIAk2AgBBASEBA0AgByABQQF0IgFqIQMCQAJAIAVB////B00NACAFIQIMAQsgACAFQQh0IgI2AgAgACAAKAIQIgVBAWo2AhAgACAEQQh0IAUgACgCDGotAAByIgQ2AgQLAkACQCAEIAJBC3YgAy8BACIGbCIFSQ0AIAAgBCAFayIENgIEIAAgAiAFayIFNgIAIAMgBiAGQQV2azsBACABQQFyIQEMAQsgACAFNgIAIAMgBkGAECAGa0EFdmo7AQALIAEgCEkNAAsgAEHoAGogASAIayAJajYCAAsLNQEAQYAICy4IAAAAEAAAABgAAAAgAAAAKAAAADAAAABAAAAAUAAAAIAAAAAAAQAA/Td6WFoA\"},t=>{t.exports=e}],i={};function n(e){var r=i[e];if(void 0!==r)return r.exports;var s=i[e]={exports:{}};return t[e](s,s.exports,n),s.exports}n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var r={};return(()=>{n.r(r),n.d(r,{XzReadableStream:()=>s});var e=n(1);const t=globalThis.ReadableStream||n(2).ReadableStream;class i{constructor(e){this.exports=e.exports,this.memory=this.exports.memory,this.ptr=this.exports.create_context(),this._refresh(),this.bufSize=this.mem32[0],this.inStart=this.mem32[1]-this.ptr,this.inEnd=this.inStart+this.bufSize,this.outStart=this.mem32[4]-this.ptr}supplyInput(e){this._refresh(),this.mem8.subarray(this.inStart,this.inEnd).set(e,0),this.exports.supply_input(this.ptr,e.byteLength),this._refresh()}getNextOutput(){const e=this.exports.get_next_output(this.ptr);if(this._refresh(),0!==e&&1!==e)throw new Error(`get_next_output failed with error code ${e}`);return{outChunk:this.mem8.slice(this.outStart,this.outStart+this.mem32[5]),finished:1===e}}needsMoreInput(){return this.mem32[2]===this.mem32[3]}outputBufferIsFull(){return this.mem32[5]===this.bufSize}resetOutputBuffer(){this.outPos=this.mem32[5]=0}dispose(){this.exports.destroy_context(this.ptr),this.exports=null}_refresh(){this.memory.buffer!==this.mem8?.buffer&&(this.mem8=new Uint8Array(this.memory.buffer,this.ptr),this.mem32=new Uint32Array(this.memory.buffer,this.ptr))}}class s extends t{static _moduleInstancePromise;static _moduleInstance;static async _getModuleInstance(){const t=e.replace(\"data:application/wasm;base64,\",\"\"),i=Uint8Array.from(atob(t),(e=>e.charCodeAt(0))).buffer,n=await WebAssembly.instantiate(i,{});s._moduleInstance=n.instance}constructor(e){let t,n=null;const r=e.getReader();super({async start(e){s._moduleInstance||await(s._moduleInstancePromise||(s._moduleInstancePromise=s._getModuleInstance())),t=new i(s._moduleInstance)},async pull(e){if(t.needsMoreInput()){if(null===n||0===n.byteLength){const{done:e,value:t}=await r.read();e||(n=t)}const e=Math.min(t.bufSize,n.byteLength);t.supplyInput(n.subarray(0,e)),n=n.subarray(e)}const i=t.getNextOutput();e.enqueue(i.outChunk),t.resetOutputBuffer(),i.finished&&(t.dispose(),e.close())},cancel:()=>(t.dispose(),r.cancel())})}}})(),r})(),e.exports=n(i(772))},3617:()=>{},772:()=>{},928:(e,t,i)=>{const n=i(2886).default;e.exports=n,e.exports.default=n},1308:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0});let i=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];\"undefined\"!=typeof Int32Array&&(i=new Int32Array(i)),t.default=(e,t)=>{let n=0===t?0:~t;for(let t=0;t>>8;return~n}},2886:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(i(1308)),s=n(i(7327));t.default=(0,s.default)(\"crc-32\",r.default)},4422:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0});const n=i(8287);t.default=(e,t)=>n.Buffer.from(e,t)},7327:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(i(4422));t.default=function(e,t){const i=(e,i)=>t((0,r.default)(e),i)>>>0;return i.signed=(e,i)=>t((0,r.default)(e),i),i.unsigned=i,i.model=e,i}}},t={};function i(n){var r=t[n];if(void 0!==r)return r.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,i),s.exports}return i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},i(7806)})(),pg=[],gg=[],mg=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,wg=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",bg=0;bg<64;++bg)pg[bg]=wg[bg],gg[wg.charCodeAt(bg)]=bg;function Fg(e){var t=e.length;if(t%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var i=e.indexOf(\"=\");return-1===i&&(i=t),[i,i===t?0:4-i%4]}function vg(e,t,i){for(var n,r,s=[],o=t;o>18&63]+pg[r>>12&63]+pg[r>>6&63]+pg[63&r]);return s.join(\"\")}gg[\"-\".charCodeAt(0)]=62,gg[\"_\".charCodeAt(0)]=63;var yg={byteLength:function(e){var t=Fg(e),i=t[0],n=t[1];return 3*(i+n)/4-n},toByteArray:function(e){var t,i,n=Fg(e),r=n[0],s=n[1],o=new mg(function(e,t,i){return 3*(t+i)/4-i}(0,r,s)),a=0,c=s>0?r-4:r;for(i=0;i>16&255,o[a++]=t>>8&255,o[a++]=255&t;return 2===s&&(t=gg[e.charCodeAt(i)]<<2|gg[e.charCodeAt(i+1)]>>4,o[a++]=255&t),1===s&&(t=gg[e.charCodeAt(i)]<<10|gg[e.charCodeAt(i+1)]<<4|gg[e.charCodeAt(i+2)]>>2,o[a++]=t>>8&255,o[a++]=255&t),o},fromByteArray:function(e){for(var t,i=e.length,n=i%3,r=[],s=16383,o=0,a=i-n;oa?a:o+s));return 1===n?(t=e[i-1],r.push(pg[t>>2]+pg[t<<4&63]+\"==\")):2===n&&(t=(e[i-2]<<8)+e[i-1],r.push(pg[t>>10]+pg[t>>4&63]+pg[t<<2&63]+\"=\")),r.join(\"\")}};\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */var Ag={read:function(e,t,i,n,r){var s,o,a=8*r-n-1,c=(1<>1,h=-7,d=i?r-1:0,u=i?-1:1,f=e[t+d];for(d+=u,s=f&(1<<-h)-1,f>>=-h,h+=a;h>0;s=256*s+e[t+d],d+=u,h-=8);for(o=s&(1<<-h)-1,s>>=-h,h+=n;h>0;o=256*o+e[t+d],d+=u,h-=8);if(0===s)s=1-l;else{if(s===c)return o?NaN:1/0*(f?-1:1);o+=Math.pow(2,n),s-=l}return(f?-1:1)*o*Math.pow(2,s-n)},write:function(e,t,i,n,r,s){var o,a,c,l=8*s-r-1,h=(1<>1,u=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:s-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,o=h):(o=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-o))<1&&(o--,c*=2),(t+=o+d>=1?u/c:u*Math.pow(2,1-d))*c>=2&&(o++,c/=2),o+d>=h?(a=0,o=h):o+d>=1?(a=(t*c-1)*Math.pow(2,r),o+=d):(a=t*Math.pow(2,d-1)*Math.pow(2,r),o=0));r>=8;e[i+f]=255&a,f+=p,a/=256,r-=8);for(o=o<0;e[i+f]=255&o,f+=p,o/=256,l-=8);e[i+f-p]|=128*g}};\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */const Cg=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null,_g=2147483647;function xg(e){if(e>_g)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,kg.prototype),t}function kg(e,t,i){if(\"number\"==typeof e){if(\"string\"==typeof t)throw new TypeError('The \"string\" argument must be of type string. Received type number');return Eg(e)}return Ig(e,t,i)}function Ig(e,t,i){if(\"string\"==typeof e)return function(e,t){\"string\"==typeof t&&\"\"!==t||(t=\"utf8\");if(!kg.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);const i=0|Dg(e,t);let n=xg(i);const r=n.write(e,t);r!==i&&(n=n.slice(0,r));return n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(fm(e,Uint8Array)){const t=new Uint8Array(e);return Bg(t.buffer,t.byteOffset,t.byteLength)}return Ng(e)}(e);if(null==e)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(fm(e,ArrayBuffer)||e&&fm(e.buffer,ArrayBuffer))return Bg(e,t,i);if(\"undefined\"!=typeof SharedArrayBuffer&&(fm(e,SharedArrayBuffer)||e&&fm(e.buffer,SharedArrayBuffer)))return Bg(e,t,i);if(\"number\"==typeof e)throw new TypeError('The \"value\" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return kg.from(n,t,i);const r=function(e){if(kg.isBuffer(e)){const t=0|Mg(e.length),i=xg(t);return 0===i.length||e.copy(i,0,0,t),i}if(void 0!==e.length)return\"number\"!=typeof e.length||pm(e.length)?xg(0):Ng(e);if(\"Buffer\"===e.type&&Array.isArray(e.data))return Ng(e.data)}(e);if(r)return r;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof e[Symbol.toPrimitive])return kg.from(e[Symbol.toPrimitive](\"string\"),t,i);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}function Sg(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function Eg(e){return Sg(e),xg(e<0?0:0|Mg(e))}function Ng(e){const t=e.length<0?0:0|Mg(e.length),i=xg(t);for(let n=0;n=_g)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+_g.toString(16)+\" bytes\");return 0|e}function Dg(e,t){if(kg.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||fm(e,ArrayBuffer))return e.byteLength;if(\"string\"!=typeof e)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const i=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===i)return 0;let r=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return i;case\"utf8\":case\"utf-8\":return hm(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*i;case\"hex\":return i>>>1;case\"base64\":return dm(e).length;default:if(r)return n?-1:hm(e).length;t=(\"\"+t).toLowerCase(),r=!0}}function Rg(e,t,i){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return\"\";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return\"\";if((i>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return $g(this,t,i);case\"utf8\":case\"utf-8\":return Qg(this,t,i);case\"ascii\":return Wg(this,t,i);case\"latin1\":case\"binary\":return Gg(this,t,i);case\"base64\":return Vg(this,t,i);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Kg(this,t,i);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}function Tg(e,t,i){const n=e[t];e[t]=e[i],e[i]=n}function Lg(e,t,i,n,r){if(0===e.length)return-1;if(\"string\"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),pm(i=+i)&&(i=r?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(r)return-1;i=e.length-1}else if(i<0){if(!r)return-1;i=0}if(\"string\"==typeof t&&(t=kg.from(t,n)),kg.isBuffer(t))return 0===t.length?-1:zg(e,t,i,n,r);if(\"number\"==typeof t)return t&=255,\"function\"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):zg(e,[t],i,n,r);throw new TypeError(\"val must be string, number or Buffer\")}function zg(e,t,i,n,r){let s,o=1,a=e.length,c=t.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(e.length<2||t.length<2)return-1;o=2,a/=2,c/=2,i/=2}function l(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(r){let n=-1;for(s=i;sa&&(i=a-c),s=i;s>=0;s--){let i=!0;for(let n=0;nr&&(n=r):n=r;const s=t.length;let o;for(n>s/2&&(n=s/2),o=0;o>8,r=i%256,s.push(r),s.push(n);return s}(t,e.length-i),e,i,n)}function Vg(e,t,i){return 0===t&&i===e.length?yg.fromByteArray(e):yg.fromByteArray(e.slice(t,i))}function Qg(e,t,i){i=Math.min(e.length,i);const n=[];let r=t;for(;r239?4:t>223?3:t>191?2:1;if(r+o<=i){let i,n,a,c;switch(o){case 1:t<128&&(s=t);break;case 2:i=e[r+1],128==(192&i)&&(c=(31&t)<<6|63&i,c>127&&(s=c));break;case 3:i=e[r+1],n=e[r+2],128==(192&i)&&128==(192&n)&&(c=(15&t)<<12|(63&i)<<6|63&n,c>2047&&(c<55296||c>57343)&&(s=c));break;case 4:i=e[r+1],n=e[r+2],a=e[r+3],128==(192&i)&&128==(192&n)&&128==(192&a)&&(c=(15&t)<<18|(63&i)<<12|(63&n)<<6|63&a,c>65535&&c<1114112&&(s=c))}}null===s?(s=65533,o=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),r+=o}return function(e){const t=e.length;if(t<=jg)return String.fromCharCode.apply(String,e);let i=\"\",n=0;for(;nn.length?(kg.isBuffer(t)||(t=kg.from(t)),t.copy(n,r)):Uint8Array.prototype.set.call(n,t,r);else{if(!kg.isBuffer(t))throw new TypeError('\"list\" argument must be an Array of Buffers');t.copy(n,r)}r+=t.length}return n},kg.byteLength=Dg,kg.prototype._isBuffer=!0,kg.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let t=0;tt&&(e+=\" ... \"),\"\"},Cg&&(kg.prototype[Cg]=kg.prototype.inspect),kg.prototype.compare=function(e,t,i,n,r){if(fm(e,Uint8Array)&&(e=kg.from(e,e.offset,e.byteLength)),!kg.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===n&&(n=0),void 0===r&&(r=this.length),t<0||i>e.length||n<0||r>this.length)throw new RangeError(\"out of range index\");if(n>=r&&t>=i)return 0;if(n>=r)return-1;if(t>=i)return 1;if(this===e)return 0;let s=(r>>>=0)-(n>>>=0),o=(i>>>=0)-(t>>>=0);const a=Math.min(s,o),c=this.slice(n,r),l=e.slice(t,i);for(let e=0;e>>=0,isFinite(i)?(i>>>=0,void 0===n&&(n=\"utf8\")):(n=i,i=void 0)}const r=this.length-t;if((void 0===i||i>r)&&(i=r),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");let s=!1;for(;;)switch(n){case\"hex\":return Hg(this,e,t,i);case\"utf8\":case\"utf-8\":return Pg(this,e,t,i);case\"ascii\":case\"latin1\":case\"binary\":return Og(this,e,t,i);case\"base64\":return Ug(this,e,t,i);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return qg(this,e,t,i);default:if(s)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),s=!0}},kg.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};const jg=4096;function Wg(e,t,i){let n=\"\";i=Math.min(e.length,i);for(let r=t;rn)&&(i=n);let r=\"\";for(let n=t;ni)throw new RangeError(\"Trying to access beyond buffer length\")}function Xg(e,t,i,n,r,s){if(!kg.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>r||te.length)throw new RangeError(\"Index out of range\")}function Zg(e,t,i,n,r){om(t,n,r,e,i,7);let s=Number(t&BigInt(4294967295));e[i++]=s,s>>=8,e[i++]=s,s>>=8,e[i++]=s,s>>=8,e[i++]=s;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[i++]=o,o>>=8,e[i++]=o,o>>=8,e[i++]=o,o>>=8,e[i++]=o,i}function Jg(e,t,i,n,r){om(t,n,r,e,i,7);let s=Number(t&BigInt(4294967295));e[i+7]=s,s>>=8,e[i+6]=s,s>>=8,e[i+5]=s,s>>=8,e[i+4]=s;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[i+3]=o,o>>=8,e[i+2]=o,o>>=8,e[i+1]=o,o>>=8,e[i]=o,i+8}function em(e,t,i,n,r,s){if(i+n>e.length)throw new RangeError(\"Index out of range\");if(i<0)throw new RangeError(\"Index out of range\")}function tm(e,t,i,n,r){return t=+t,i>>>=0,r||em(e,0,i,4),Ag.write(e,t,i,n,23,4),i+4}function im(e,t,i,n,r){return t=+t,i>>>=0,r||em(e,0,i,8),Ag.write(e,t,i,n,52,8),i+8}kg.prototype.slice=function(e,t){const i=this.length;(e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(t=void 0===t?i:~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),t>>=0,t>>>=0,i||Yg(e,t,this.length);let n=this[e],r=1,s=0;for(;++s>>=0,t>>>=0,i||Yg(e,t,this.length);let n=this[e+--t],r=1;for(;t>0&&(r*=256);)n+=this[e+--t]*r;return n},kg.prototype.readUint8=kg.prototype.readUInt8=function(e,t){return e>>>=0,t||Yg(e,1,this.length),this[e]},kg.prototype.readUint16LE=kg.prototype.readUInt16LE=function(e,t){return e>>>=0,t||Yg(e,2,this.length),this[e]|this[e+1]<<8},kg.prototype.readUint16BE=kg.prototype.readUInt16BE=function(e,t){return e>>>=0,t||Yg(e,2,this.length),this[e]<<8|this[e+1]},kg.prototype.readUint32LE=kg.prototype.readUInt32LE=function(e,t){return e>>>=0,t||Yg(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},kg.prototype.readUint32BE=kg.prototype.readUInt32BE=function(e,t){return e>>>=0,t||Yg(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},kg.prototype.readBigUInt64LE=mm((function(e){am(e>>>=0,\"offset\");const t=this[e],i=this[e+7];void 0!==t&&void 0!==i||cm(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,r=this[++e]+256*this[++e]+65536*this[++e]+i*2**24;return BigInt(n)+(BigInt(r)<>>=0,\"offset\");const t=this[e],i=this[e+7];void 0!==t&&void 0!==i||cm(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],r=this[++e]*2**24+65536*this[++e]+256*this[++e]+i;return(BigInt(n)<>>=0,t>>>=0,i||Yg(e,t,this.length);let n=this[e],r=1,s=0;for(;++s=r&&(n-=Math.pow(2,8*t)),n},kg.prototype.readIntBE=function(e,t,i){e>>>=0,t>>>=0,i||Yg(e,t,this.length);let n=t,r=1,s=this[e+--n];for(;n>0&&(r*=256);)s+=this[e+--n]*r;return r*=128,s>=r&&(s-=Math.pow(2,8*t)),s},kg.prototype.readInt8=function(e,t){return e>>>=0,t||Yg(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},kg.prototype.readInt16LE=function(e,t){e>>>=0,t||Yg(e,2,this.length);const i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},kg.prototype.readInt16BE=function(e,t){e>>>=0,t||Yg(e,2,this.length);const i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},kg.prototype.readInt32LE=function(e,t){return e>>>=0,t||Yg(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},kg.prototype.readInt32BE=function(e,t){return e>>>=0,t||Yg(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},kg.prototype.readBigInt64LE=mm((function(e){am(e>>>=0,\"offset\");const t=this[e],i=this[e+7];void 0!==t&&void 0!==i||cm(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(i<<24);return(BigInt(n)<>>=0,\"offset\");const t=this[e],i=this[e+7];void 0!==t&&void 0!==i||cm(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||Yg(e,4,this.length),Ag.read(this,e,!0,23,4)},kg.prototype.readFloatBE=function(e,t){return e>>>=0,t||Yg(e,4,this.length),Ag.read(this,e,!1,23,4)},kg.prototype.readDoubleLE=function(e,t){return e>>>=0,t||Yg(e,8,this.length),Ag.read(this,e,!0,52,8)},kg.prototype.readDoubleBE=function(e,t){return e>>>=0,t||Yg(e,8,this.length),Ag.read(this,e,!1,52,8)},kg.prototype.writeUintLE=kg.prototype.writeUIntLE=function(e,t,i,n){if(e=+e,t>>>=0,i>>>=0,!n){Xg(this,e,t,i,Math.pow(2,8*i)-1,0)}let r=1,s=0;for(this[t]=255&e;++s>>=0,i>>>=0,!n){Xg(this,e,t,i,Math.pow(2,8*i)-1,0)}let r=i-1,s=1;for(this[t+r]=255&e;--r>=0&&(s*=256);)this[t+r]=e/s&255;return t+i},kg.prototype.writeUint8=kg.prototype.writeUInt8=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,1,255,0),this[t]=255&e,t+1},kg.prototype.writeUint16LE=kg.prototype.writeUInt16LE=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},kg.prototype.writeUint16BE=kg.prototype.writeUInt16BE=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},kg.prototype.writeUint32LE=kg.prototype.writeUInt32LE=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},kg.prototype.writeUint32BE=kg.prototype.writeUInt32BE=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},kg.prototype.writeBigUInt64LE=mm((function(e,t=0){return Zg(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),kg.prototype.writeBigUInt64BE=mm((function(e,t=0){return Jg(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),kg.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*i-1);Xg(this,e,t,i,n-1,-n)}let r=0,s=1,o=0;for(this[t]=255&e;++r>>=0,!n){const n=Math.pow(2,8*i-1);Xg(this,e,t,i,n-1,-n)}let r=i-1,s=1,o=0;for(this[t+r]=255&e;--r>=0&&(s*=256);)e<0&&0===o&&0!==this[t+r+1]&&(o=1),this[t+r]=(e/s|0)-o&255;return t+i},kg.prototype.writeInt8=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},kg.prototype.writeInt16LE=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},kg.prototype.writeInt16BE=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},kg.prototype.writeInt32LE=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},kg.prototype.writeInt32BE=function(e,t,i){return e=+e,t>>>=0,i||Xg(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},kg.prototype.writeBigInt64LE=mm((function(e,t=0){return Zg(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),kg.prototype.writeBigInt64BE=mm((function(e,t=0){return Jg(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),kg.prototype.writeFloatLE=function(e,t,i){return tm(this,e,t,!0,i)},kg.prototype.writeFloatBE=function(e,t,i){return tm(this,e,t,!1,i)},kg.prototype.writeDoubleLE=function(e,t,i){return im(this,e,t,!0,i)},kg.prototype.writeDoubleBE=function(e,t,i){return im(this,e,t,!1,i)},kg.prototype.copy=function(e,t,i,n){if(!kg.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(i||(i=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),\"number\"==typeof e)for(r=t;r=n+4;i-=3)t=`_${e.slice(i-3,i)}${t}`;return`${e.slice(0,i)}${t}`}function om(e,t,i,n,r,s){if(e>i||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(s+1)}${n}`:`>= -(2${n} ** ${8*(s+1)-1}${n}) and < 2 ** ${8*(s+1)-1}${n}`:`>= ${t}${n} and <= ${i}${n}`,new nm.ERR_OUT_OF_RANGE(\"value\",r,e)}!function(e,t,i){am(t,\"offset\"),void 0!==e[t]&&void 0!==e[t+i]||cm(t,e.length-(i+1))}(n,r,s)}function am(e,t){if(\"number\"!=typeof e)throw new nm.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function cm(e,t,i){if(Math.floor(e)!==e)throw am(e,i),new nm.ERR_OUT_OF_RANGE(i||\"offset\",\"an integer\",e);if(t<0)throw new nm.ERR_BUFFER_OUT_OF_BOUNDS;throw new nm.ERR_OUT_OF_RANGE(i||\"offset\",`>= ${i?1:0} and <= ${t}`,e)}rm(\"ERR_BUFFER_OUT_OF_BOUNDS\",(function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"}),RangeError),rm(\"ERR_INVALID_ARG_TYPE\",(function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`}),TypeError),rm(\"ERR_OUT_OF_RANGE\",(function(e,t,i){let n=`The value of \"${e}\" is out of range.`,r=i;return Number.isInteger(i)&&Math.abs(i)>2**32?r=sm(String(i)):\"bigint\"==typeof i&&(r=String(i),(i>BigInt(2)**BigInt(32)||i<-(BigInt(2)**BigInt(32)))&&(r=sm(r)),r+=\"n\"),n+=` It must be ${t}. Received ${r}`,n}),RangeError);const lm=/[^+/0-9A-Za-z-_]/g;function hm(e,t){let i;t=t||1/0;const n=e.length;let r=null;const s=[];for(let o=0;o55295&&i<57344){if(!r){if(i>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&s.push(239,191,189);continue}r=i;continue}if(i<56320){(t-=3)>-1&&s.push(239,191,189),r=i;continue}i=65536+(r-55296<<10|i-56320)}else r&&(t-=3)>-1&&s.push(239,191,189);if(r=null,i<128){if((t-=1)<0)break;s.push(i)}else if(i<2048){if((t-=2)<0)break;s.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;s.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;s.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return s}function dm(e){return yg.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(lm,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function um(e,t,i,n){let r;for(r=0;r=t.length||r>=e.length);++r)t[r+i]=e[r];return r}function fm(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function pm(e){return e!=e}const gm=function(){const e=\"0123456789abcdef\",t=new Array(256);for(let i=0;i<16;++i){const n=16*i;for(let r=0;r<16;++r)t[n+r]=e[i]+e[r]}return t}();function mm(e){return\"undefined\"==typeof BigInt?wm:e}function wm(){throw new Error(\"BigInt not supported\")}class bm{constructor(e,t){this.position=0,this.url=e,this.config=t,Ht(e)||!1===t.cacheFetches?this.useCache=!1:(this.useCache=!0,this.cache=new Fm({fetch:(e,t)=>this._fetch(e,t),fetchSize:t.fetchSize||1e4}))}async _fetch(e,t){const i={start:e,size:t};this._stat={size:void 0};const n=await Vs.loadArrayBuffer(this.url,ic(this.config,{range:i}));return kg.from(n)}async read(e,t=0,i=1/0,n=0){if(this.useCache)await this.cache.get(e,t,n,i);else{(await this._fetch(n,i)).copy(e,t)}return{bytesRead:i,buffer:e}}async readFile(){const e=await Vs.loadArrayBuffer(this.url,ic(this.config));return kg.from(e)}async stat(){if(!this._stat){const e=kg.allocUnsafe(10);if(await this.read(e,0,10,0),!this._stat)throw new Error(`unable to determine size of file at ${this.url}`)}return this._stat}}class Fm{constructor({fetch:e,fetchSize:t=3e4}){this.fetch=e,this.position=0,this.buffer=kg.allocUnsafe(0),this.fetchSize=t}async get(e,t,i,n){if(e.length=this.position&&i+n<=this.position+this.buffer.length);else{const e=Math.max(n,this.fetchSize);this.buffer=await this.fetch(i,e),this.position=i}const r=t,s=i-this.position,o=s+n;this.buffer.copy(e,r,s,o)}}class vm{chrAliasTable=new Map;constructor(e,t,i){this.config=e,this.browser=i,this.genome=t,this.cramFile=new fg.CramFile({filehandle:e.fileHandle?e.fileHandle:new bm(e.url,e),seqFetch:e.seqFetch||async function(e,t,i){const n=this.genome,r=await this.getHeader(),s=n.getChromosomeName(r.indexToChr[e]);return this.genome.getSequence(s,t-1,i)}.bind(this),checkSequenceMD5:void 0===e.checkSequenceMD5||e.checkSequenceMD5});const n=e.indexFileHandle?e.indexFileHandle:new bm(e.indexURL,e);this.indexedCramFile=new fg.IndexedCramFile({cram:this.cramFile,index:new fg.CraiIndex({filehandle:n}),fetchSizeLimit:e.fetchSizeLimit||1e9}),tg.setReaderDefaults(this,e)}async getHeader(){if(!this.header){const e=await this.cramFile.getSamHeader(),t={},i=[],n=[];for(let r of e)if(\"SQ\"===r.tag){for(let e of r.data)if(\"SN\"===e.tag){const n=e.value;t[n]=i.length,i.push(n);break}}else\"RG\"===r.tag&&n.push(r.data);this.header={indexToChr:i,chrToIndex:t,chrNames:Object.keys(t),readGroups:n}}return this.header}async#x(e){if(await this.getHeader(),this.chrAliasTable.has(e)&&void 0===(e=this.chrAliasTable.get(e)))return;let t=this.header.chrToIndex[e];if(void 0===t){const i=await this.genome.getAliasRecord(e);let n;if(i){const e=Object.keys(i).filter((e=>\"start\"!==e&&\"end\"!==e)).map((e=>i[e])).filter((e=>void 0!==this.header.chrToIndex[e]));e.length>0&&(n=e[0],t=this.header.chrToIndex[e[0]])}this.chrAliasTable.set(e,n)}return t}async readAlignments(e,t,i){const n=await this.getHeader(),r=await this.#x(e),s=new _p(e,t,i,this.config);if(void 0===r)return s;try{const e=await this.indexedCramFile.getRecordsForRange(r,t,i);for(let a of e){const e=a.sequenceId,c=a.alignmentStart,l=c+a.lengthOnRef;if(e<0)continue;if(e>r||c>i)return;if(e=0&&(t=\"Sequence mismatch. Is this the correct genome for the loaded CRAM?\"),this.browser.alert.present(new Error(t)),e}function o(e,t){const i=new Op;if(i.chr=t[e.sequenceId],i.start=e.alignmentStart-1,i.lengthOnRef=e.lengthOnRef,i.flags=e.flags,i.strand=!(16&e.flags),i.fragmentLength=e.templateLength||e.templateSize,i.mq=e.mappingQuality,i.end=e.alignmentStart+e.lengthOnRef,i.readGroupId=e.readGroupId,e.mate&&void 0!==e.mate.sequenceId){const n=void 0!==e.mate.flags?!(1&e.mate.flags):!(32&e.flags);i.mate={chr:t[e.mate.sequenceId],position:e.mate.alignmentStart,strand:n}}return i.seq=e.getReadBases(),i.qual=e.qualityScores,i.tagDict=e.tags,i.readName=e.readName,function(e,t){const i=[];let n,r,s=0,o=\"\";if(t.scStart=t.start,t.scLengthOnRef=t.lengthOnRef,e.readFeatures)for(let a of e.readFeatures){const e=a.code,c=a.data,l=a.pos-1,h=a.refPos-1;switch(e){case\"S\":case\"I\":case\"i\":case\"N\":case\"D\":if(l>s){const e=l-s;i.push(new $p({start:h-e,seqOffset:s,len:e,type:\"M\"})),s+=e,o+=e+\"M\"}if(\"S\"===e){let n=h;t.scLengthOnRef+=c.length,0===l&&(t.scStart-=c.length,n-=c.length);const r=c.length;i.push(new $p({start:n,seqOffset:s,len:r,type:\"S\"})),s+=r,o+=r+e}else if(\"I\"===e||\"i\"===e){void 0===n&&(n=[]);const t=\"i\"===e?1:c.length;n.push(new $p({start:h,len:t,seqOffset:s,type:\"I\"})),s+=t,o+=t+e}else\"D\"!==e&&\"N\"!==e||(r||(r=[]),r.push({start:h,len:c,type:e}),o+=c+e);break;case\"H\":case\"P\":o+=c+e}}const a=e.readLength-s;a>0&&(i.push(new $p({start:e.alignmentStart+e.lengthOnRef-a-1,seqOffset:s,len:a,type:\"M\"})),o+=a+\"M\");t.blocks=i,t.insertions=n,t.gaps=r,t.cigar=o}(e,i),i.mate&&i.start>i.mate.position&&i.fragmentLength>0&&(i.fragmentLength=-i.fragmentLength),tg.setPairOrientation(i),i}}}const ym=2291137574,Am=2273964779,Cm=[84,68,70,52],_m=new Uint8Array([66,65,77,1]),xm=[67,82,65,77],km=[31,139],Im=4,Sm=new Set([\"narrowpeak\",\"broadpeak\",\"regionpeak\",\"peaks\",\"bedgraph\",\"wig\",\"gff3\",\"gff\",\"gtf\",\"fusionjuncspan\",\"refflat\",\"seg\",\"aed\",\"bed\",\"bedMethyl\",\"vcf\",\"bb\",\"bigbed\",\"biginteract\",\"biggenepred\",\"bignarrowpeak\",\"bw\",\"bigwig\",\"bam\",\"tdf\",\"refgene\",\"genepred\",\"genepredext\",\"bedpe\",\"bp\",\"snp\",\"rmsk\",\"cram\",\"gwas\",\"maf\",\"mut\",\"hiccups\",\"fasta\",\"fa\",\"fna\",\"pytor\",\"hic\",\"qtl\"]);function Em(e,t){const i=Math.min(e.length,t.length);if(0==i)return!1;for(let n=0;n=this.start&&e.end<=this.end}overlaps(e){return e.chr===this.chr&&!(e.endthis.end)}extend(e){e.chr===this.chr&&(this.start=Math.min(e.start,this.start),this.end=Math.max(e.end,this.end))}getLocusString(){if(\"all\"===this.chr)return\"all\";{const e=Dt(Math.floor(this.start)+1),t=Dt(Math.round(this.end));return`${this.chr}:${e}-${t}`}}static fromLocusString(e){if(\"all\"===e)return new Mm({chr:\"all\"});const t=e.split(\":\"),i=t[0],n=t[1].split(\"-\"),r=Number.parseInt(n[0].replace(/,/g,\"\"))-1,s=Number.parseInt(n[1].replace(/,/g,\"\"));return new Mm({chr:i,start:r,end:s})}}\n/*!\n * vanilla-picker v2.12.1\n * https://vanilla-picker.js.org\n *\n * Copyright 2017-2021 Andreas Borgen (https://github.com/Sphinxxxx), Adam Brooks (https://github.com/dissimulate)\n * Released under the ISC license.\n */var Dm=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")},Rm=function(){function e(e,t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:1;return(t>0?e.toFixed(t).replace(/0+$/,\"\").replace(/\\.$/,\"\"):e.toString())||\"0\"}var Hm=function(){function e(t,i,n,r){Dm(this,e);var s=this;if(void 0===t);else if(Array.isArray(t))this.rgba=t;else if(void 0===n){var o=t&&\"\"+t;o&&function(t){if(t.startsWith(\"hsl\")){var i=t.match(/([\\-\\d\\.e]+)/g).map(Number),n=Tm(i,4),r=n[0],o=n[1],a=n[2],c=n[3];void 0===c&&(c=1),r/=360,o/=100,a/=100,s.hsla=[r,o,a,c]}else if(t.startsWith(\"rgb\")){var l=t.match(/([\\-\\d\\.e]+)/g).map(Number),h=Tm(l,4),d=h[0],u=h[1],f=h[2],p=h[3];void 0===p&&(p=1),s.rgba=[d,u,f,p]}else t.startsWith(\"#\")?s.rgba=e.hexToRgb(t):s.rgba=e.nameToRgb(t)||e.hexToRgb(t)}(o.toLowerCase())}else this.rgba=[t,i,n,void 0===r?1:r]}return Rm(e,[{key:\"printRGB\",value:function(e){var t=(e?this.rgba:this.rgba.slice(0,3)).map((function(e,t){return zm(e,3===t?3:0)}));return e?\"rgba(\"+t+\")\":\"rgb(\"+t+\")\"}},{key:\"printHSL\",value:function(e){var t=[360,100,100,1],i=[\"\",\"%\",\"%\",\"\"],n=(e?this.hsla:this.hsla.slice(0,3)).map((function(e,n){return zm(e*t[n],3===n?3:1)+i[n]}));return e?\"hsla(\"+n+\")\":\"hsl(\"+n+\")\"}},{key:\"printHex\",value:function(e){var t=this.hex;return e?t:t.substring(0,7)}},{key:\"rgba\",get:function(){if(this._rgba)return this._rgba;if(!this._hsla)throw new Error(\"No color is set\");return this._rgba=e.hslToRgb(this._hsla)},set:function(e){3===e.length&&(e[3]=1),this._rgba=e,this._hsla=null}},{key:\"rgbString\",get:function(){return this.printRGB()}},{key:\"rgbaString\",get:function(){return this.printRGB(!0)}},{key:\"hsla\",get:function(){if(this._hsla)return this._hsla;if(!this._rgba)throw new Error(\"No color is set\");return this._hsla=e.rgbToHsl(this._rgba)},set:function(e){3===e.length&&(e[3]=1),this._hsla=e,this._rgba=null}},{key:\"hslString\",get:function(){return this.printHSL()}},{key:\"hslaString\",get:function(){return this.printHSL(!0)}},{key:\"hex\",get:function(){var e=this.rgba.map((function(e,t){return t<3?e.toString(16):Math.round(255*e).toString(16)}));return\"#\"+e.map((function(e){return e.padStart(2,\"0\")})).join(\"\")},set:function(t){this.rgba=e.hexToRgb(t)}}],[{key:\"hexToRgb\",value:function(e){var t=(e.startsWith(\"#\")?e.slice(1):e).replace(/^(\\w{3})$/,\"$1F\").replace(/^(\\w)(\\w)(\\w)(\\w)$/,\"$1$1$2$2$3$3$4$4\").replace(/^(\\w{6})$/,\"$1FF\");if(!t.match(/^([0-9a-fA-F]{8})$/))throw new Error(\"Unknown hex color; \"+e);var i=t.match(/^(\\w\\w)(\\w\\w)(\\w\\w)(\\w\\w)$/).slice(1).map((function(e){return parseInt(e,16)}));return i[3]=i[3]/255,i}},{key:\"nameToRgb\",value:function(t){var i=t.toLowerCase().replace(\"at\",\"T\").replace(/[aeiouyldf]/g,\"\").replace(\"ght\",\"L\").replace(\"rk\",\"D\").slice(-5,4),n=Lm[i];return void 0===n?n:e.hexToRgb(n.replace(/\\-/g,\"00\").padStart(6,\"f\"))}},{key:\"rgbToHsl\",value:function(e){var t=Tm(e,4),i=t[0],n=t[1],r=t[2],s=t[3];i/=255,n/=255,r/=255;var o=Math.max(i,n,r),a=Math.min(i,n,r),c=void 0,l=void 0,h=(o+a)/2;if(o===a)c=l=0;else{var d=o-a;switch(l=h>.5?d/(2-o-a):d/(o+a),o){case i:c=(n-r)/d+(n1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e},h=r<.5?r*(1+n):r+n-r*n,d=2*r-h;o=l(d,h,i+1/3),a=l(d,h,i),c=l(d,h,i-1/3)}var u=[255*o,255*a,255*c].map(Math.round);return u[3]=s,u}}]),e}(),Pm=function(){function e(){Dm(this,e),this._events=[]}return Rm(e,[{key:\"add\",value:function(e,t,i){e.addEventListener(t,i,!1),this._events.push({target:e,type:t,handler:i})}},{key:\"remove\",value:function(t,i,n){this._events=this._events.filter((function(r){var s=!0;return t&&t!==r.target&&(s=!1),i&&i!==r.type&&(s=!1),n&&n!==r.handler&&(s=!1),s&&e._doRemove(r.target,r.type,r.handler),!s}))}},{key:\"destroy\",value:function(){this._events.forEach((function(t){return e._doRemove(t.target,t.type,t.handler)})),this._events=[]}}],[{key:\"_doRemove\",value:function(e,t,i){e.removeEventListener(t,i,!1)}}]),e}();function Om(e,t,i){var n=!1;function r(e,t,i){return Math.max(t,Math.min(e,i))}function s(e,s,o){if(o&&(n=!0),n){e.preventDefault();var a=t.getBoundingClientRect(),c=a.width,l=a.height,h=s.clientX,d=s.clientY,u=r(h-a.left,0,c),f=r(d-a.top,0,l);i(u/c,f/l)}}function o(e,t){1===(void 0===e.buttons?e.which:e.buttons)?s(e,e,t):n=!1}function a(e,t){1===e.touches.length?s(e,e.touches[0],t):n=!1}e.add(t,\"mousedown\",(function(e){o(e,!0)})),e.add(t,\"touchstart\",(function(e){a(e,!0)})),e.add(window,\"mousemove\",o),e.add(t,\"touchmove\",a),e.add(window,\"mouseup\",(function(e){n=!1})),e.add(t,\"touchend\",(function(e){n=!1})),e.add(t,\"touchcancel\",(function(e){n=!1}))}var Um=\"keydown\",qm=\"mousedown\",Vm=\"focusin\";function Qm(e,t){return(t||document).querySelector(e)}function jm(e){e.preventDefault(),e.stopPropagation()}function Wm(e,t,i,n,r){e.add(t,Um,(function(e){i.indexOf(e.key)>=0&&(r&&jm(e),n(e))}))}var Gm=function(){function e(t){Dm(this,e),this.settings={popup:\"right\",layout:\"default\",alpha:!0,editor:!0,editorFormat:\"hex\",cancelButton:!1,defaultColor:\"#0cf\"},this._events=new Pm,this.onChange=null,this.onDone=null,this.onOpen=null,this.onClose=null,this.setOptions(t)}return Rm(e,[{key:\"setOptions\",value:function(e){var t=this;if(e){var i=this.settings;if(e instanceof HTMLElement)i.parent=e;else{i.parent&&e.parent&&i.parent!==e.parent&&(this._events.remove(i.parent),this._popupInited=!1),function(e,t,i){for(var n in e)i&&i.indexOf(n)>=0||(t[n]=e[n])}(e,i),e.onChange&&(this.onChange=e.onChange),e.onDone&&(this.onDone=e.onDone),e.onOpen&&(this.onOpen=e.onOpen),e.onClose&&(this.onClose=e.onClose);var n=e.color||e.colour;n&&this._setColor(n)}var r=i.parent;if(r&&i.popup&&!this._popupInited){var s=function(e){return t.openHandler(e)};this._events.add(r,\"click\",s),Wm(this._events,r,[\" \",\"Spacebar\",\"Enter\"],s),this._popupInited=!0}else e.parent&&!i.popup&&this.show()}}},{key:\"openHandler\",value:function(e){if(this.show()){e&&e.preventDefault(),this.settings.parent.style.pointerEvents=\"none\";var t=e&&e.type===Um?this._domEdit:this.domElement;setTimeout((function(){return t.focus()}),100),this.onOpen&&this.onOpen(this.colour)}}},{key:\"closeHandler\",value:function(e){var t=e&&e.type,i=!1;if(e)if(t===qm||t===Vm){var n=(this.__containedEvent||0)+100;e.timeStamp>n&&(i=!0)}else jm(e),i=!0;else i=!0;i&&this.hide()&&(this.settings.parent.style.pointerEvents=\"\",t!==qm&&this.settings.parent.focus(),this.onClose&&this.onClose(this.colour))}},{key:\"movePopup\",value:function(e,t){this.closeHandler(),this.setOptions(e),t&&this.openHandler()}},{key:\"setColor\",value:function(e,t){this._setColor(e,{silent:t})}},{key:\"_setColor\",value:function(e,t){if(\"string\"==typeof e&&(e=e.trim()),e){t=t||{};var i=void 0;try{i=new Hm(e)}catch(e){if(t.failSilently)return;throw e}if(!this.settings.alpha){var n=i.hsla;n[3]=1,i.hsla=n}this.colour=this.color=i,this._setHSLA(null,null,null,null,t)}}},{key:\"setColour\",value:function(e,t){this.setColor(e,t)}},{key:\"show\",value:function(){if(!this.settings.parent)return!1;if(this.domElement){var e=this._toggleDOM(!0);return this._setPosition(),e}var t=function(e){var t=document.createElement(\"div\");return t.innerHTML=e,t.firstElementChild}(this.settings.template||'
');return this.domElement=t,this._domH=Qm(\".picker_hue\",t),this._domSL=Qm(\".picker_sl\",t),this._domA=Qm(\".picker_alpha\",t),this._domEdit=Qm(\".picker_editor input\",t),this._domSample=Qm(\".picker_sample\",t),this._domOkay=Qm(\".picker_done button\",t),this._domCancel=Qm(\".picker_cancel button\",t),t.classList.add(\"layout_\"+this.settings.layout),this.settings.alpha||t.classList.add(\"no_alpha\"),this.settings.editor||t.classList.add(\"no_editor\"),this.settings.cancelButton||t.classList.add(\"no_cancel\"),this._ifPopup((function(){return t.classList.add(\"popup\")})),this._setPosition(),this.colour?this._updateUI():this._setColor(this.settings.defaultColor),this._bindEvents(),!0}},{key:\"hide\",value:function(){return this._toggleDOM(!1)}},{key:\"destroy\",value:function(){this._events.destroy(),this.domElement&&this.settings.parent.removeChild(this.domElement)}},{key:\"_bindEvents\",value:function(){var e=this,t=this,i=this.domElement,n=this._events;function r(e,t,i){n.add(e,t,i)}r(i,\"click\",(function(e){return e.preventDefault()})),Om(n,this._domH,(function(e,i){return t._setHSLA(e)})),Om(n,this._domSL,(function(e,i){return t._setHSLA(null,e,1-i)})),this.settings.alpha&&Om(n,this._domA,(function(e,i){return t._setHSLA(null,null,null,1-i)}));var s=this._domEdit;r(s,\"input\",(function(e){t._setColor(this.value,{fromEditor:!0,failSilently:!0})})),r(s,\"focus\",(function(e){var t=this;t.selectionStart===t.selectionEnd&&t.select()})),this._ifPopup((function(){var t=function(t){return e.closeHandler(t)};r(window,qm,t),r(window,Vm,t),Wm(n,i,[\"Esc\",\"Escape\"],t);var s=function(t){e.__containedEvent=t.timeStamp};r(i,qm,s),r(i,Vm,s),r(e._domCancel,\"click\",t)}));var o=function(t){e._ifPopup((function(){return e.closeHandler(t)})),e.onDone&&e.onDone(e.colour)};r(this._domOkay,\"click\",o),Wm(n,i,[\"Enter\"],o)}},{key:\"_setPosition\",value:function(){var e=this.settings.parent,t=this.domElement;e!==t.parentNode&&e.appendChild(t),this._ifPopup((function(i){\"static\"===getComputedStyle(e).position&&(e.style.position=\"relative\");var n=!0===i?\"popup_right\":\"popup_\"+i;[\"popup_top\",\"popup_bottom\",\"popup_left\",\"popup_right\"].forEach((function(e){e===n?t.classList.add(e):t.classList.remove(e)})),t.classList.add(n)}))}},{key:\"_setHSLA\",value:function(e,t,i,n,r){r=r||{};var s=this.colour,o=s.hsla;[e,t,i,n].forEach((function(e,t){(e||0===e)&&(o[t]=e)})),s.hsla=o,this._updateUI(r),this.onChange&&!r.silent&&this.onChange(s)}},{key:\"_updateUI\",value:function(e){if(this.domElement){e=e||{};var t=this.colour,i=t.hsla,n=\"hsl(\"+360*i[0]+\", 100%, 50%)\",r=t.hslString,s=t.hslaString,o=this._domH,a=this._domSL,c=this._domA,l=Qm(\".picker_selector\",o),h=Qm(\".picker_selector\",a),d=Qm(\".picker_selector\",c);b(0,l,i[0]),this._domSL.style.backgroundColor=this._domH.style.color=n,b(0,h,i[1]),F(0,h,1-i[2]),a.style.color=r,F(0,d,1-i[3]);var u=r,f=u.replace(\"hsl\",\"hsla\").replace(\")\",\", 0)\"),p=\"linear-gradient(\"+[u,f]+\")\";if(this._domA.style.background=p+\", linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0 / 2em 2em,\\n linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em / 2em 2em\",!e.fromEditor){var g=this.settings.editorFormat,m=this.settings.alpha,w=void 0;switch(g){case\"rgb\":w=t.printRGB(m);break;case\"hsl\":w=t.printHSL(m);break;default:w=t.printHex(m)}this._domEdit.value=w}this._domSample.style.color=s}function b(e,t,i){t.style.left=100*i+\"%\"}function F(e,t,i){t.style.top=100*i+\"%\"}}},{key:\"_ifPopup\",value:function(e,t){this.settings.parent&&this.settings.popup?e&&e(this.settings.popup):t&&t()}},{key:\"_toggleDOM\",value:function(e){var t=this.domElement;if(!t)return!1;var i=e?\"\":\"none\",n=t.style.display!==i;return n&&(t.style.display=i),n}}]),e}(),$m=document.createElement(\"style\");function Km(e){if(Ym[e])return Ym[e];if(Ym[\"chr\"+e]){const t=Ym[\"chr\"+e];return Ym[e]=t,t}{const r=(t=Math.round(255*Math.random()).toString(10),i=Math.round(255*Math.random()).toString(10),n=Math.round(255*Math.random()).toString(10),\"rgb(\"+t+\",\"+i+\",\"+n+\")\");return Ym[e]=r,r}var t,i,n}$m.textContent='.picker_wrapper.no_alpha .picker_alpha{display:none}.picker_wrapper.no_editor .picker_editor{position:absolute;z-index:-1;opacity:0}.picker_wrapper.no_cancel .picker_cancel{display:none}.layout_default.picker_wrapper{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:stretch;font-size:10px;width:25em;padding:.5em}.layout_default.picker_wrapper input,.layout_default.picker_wrapper button{font-size:1rem}.layout_default.picker_wrapper>*{margin:.5em}.layout_default.picker_wrapper::before{content:\"\";display:block;width:100%;height:0;order:1}.layout_default .picker_slider,.layout_default .picker_selector{padding:1em}.layout_default .picker_hue{width:100%}.layout_default .picker_sl{flex:1 1 auto}.layout_default .picker_sl::before{content:\"\";display:block;padding-bottom:100%}.layout_default .picker_editor{order:1;width:6.5rem}.layout_default .picker_editor input{width:100%;height:100%}.layout_default .picker_sample{order:1;flex:1 1 auto}.layout_default .picker_done,.layout_default .picker_cancel{order:1}.picker_wrapper{box-sizing:border-box;background:#f2f2f2;box-shadow:0 0 0 1px silver;cursor:default;font-family:sans-serif;color:#444;pointer-events:auto}.picker_wrapper:focus{outline:none}.picker_wrapper button,.picker_wrapper input{box-sizing:border-box;border:none;box-shadow:0 0 0 1px silver;outline:none}.picker_wrapper button:focus,.picker_wrapper button:active,.picker_wrapper input:focus,.picker_wrapper input:active{box-shadow:0 0 2px 1px #1e90ff}.picker_wrapper button{padding:.4em .6em;cursor:pointer;background-color:#f5f5f5;background-image:linear-gradient(0deg, gainsboro, transparent)}.picker_wrapper button:active{background-image:linear-gradient(0deg, transparent, gainsboro)}.picker_wrapper button:hover{background-color:#fff}.picker_selector{position:absolute;z-index:1;display:block;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border:2px solid #fff;border-radius:100%;box-shadow:0 0 3px 1px #67b9ff;background:currentColor;cursor:pointer}.picker_slider .picker_selector{border-radius:2px}.picker_hue{position:relative;background-image:linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);box-shadow:0 0 0 1px silver}.picker_sl{position:relative;box-shadow:0 0 0 1px silver;background-image:linear-gradient(180deg, white, rgba(255, 255, 255, 0) 50%),linear-gradient(0deg, black, rgba(0, 0, 0, 0) 50%),linear-gradient(90deg, #808080, rgba(128, 128, 128, 0))}.picker_alpha,.picker_sample{position:relative;background:linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0/2em 2em,linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em/2em 2em;box-shadow:0 0 0 1px silver}.picker_alpha .picker_selector,.picker_sample .picker_selector{background:none}.picker_editor input{font-family:monospace;padding:.2em .4em}.picker_sample::before{content:\"\";position:absolute;display:block;width:100%;height:100%;background:currentColor}.picker_arrow{position:absolute;z-index:-1}.picker_wrapper.popup{position:absolute;z-index:2;margin:1.5em}.picker_wrapper.popup,.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{background:#f2f2f2;box-shadow:0 0 10px 1px rgba(0,0,0,.4)}.picker_wrapper.popup .picker_arrow{width:3em;height:3em;margin:0}.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{content:\"\";display:block;position:absolute;top:0;left:0;z-index:-99}.picker_wrapper.popup .picker_arrow::before{width:100%;height:100%;-webkit-transform:skew(45deg);transform:skew(45deg);-webkit-transform-origin:0 100%;transform-origin:0 100%}.picker_wrapper.popup .picker_arrow::after{width:150%;height:150%;box-shadow:none}.popup.popup_top{bottom:100%;left:0}.popup.popup_top .picker_arrow{bottom:0;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.popup.popup_bottom{top:100%;left:0}.popup.popup_bottom .picker_arrow{top:0;left:0;-webkit-transform:rotate(90deg) scale(1, -1);transform:rotate(90deg) scale(1, -1)}.popup.popup_left{top:0;right:100%}.popup.popup_left .picker_arrow{top:0;right:0;-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.popup.popup_right{top:0;left:100%}.popup.popup_right .picker_arrow{top:0;left:0}',document.documentElement.firstElementChild.appendChild($m),Gm.StyleElement=$m;const Ym={chrX:\"rgb(204, 153, 0)\",chrY:\"rgb(153, 204, 0\",chrUn:\"rgb(50, 50, 50)\",chr1:\"rgb(80, 80, 255)\",chrI:\"rgb(139, 155, 187)\",chr2:\"rgb(206, 61, 50)\",chrII:\"rgb(206, 61, 50)\",chr2a:\"rgb(216, 71, 60)\",chr2b:\"rgb(226, 81, 70)\",chr3:\"rgb(116, 155, 88)\",chrIII:\"rgb(116, 155, 88)\",chr4:\"rgb(240, 230, 133)\",chrIV:\"rgb(240, 230, 133)\",chr5:\"rgb(70, 105, 131)\",chr6:\"rgb(186, 99, 56)\",chr7:\"rgb(93, 177, 221)\",chr8:\"rgb(128, 34, 104)\",chr9:\"rgb(107, 215, 107)\",chr10:\"rgb(213, 149, 167)\",chr11:\"rgb(146, 72, 34)\",chr12:\"rgb(131, 123, 141)\",chr13:\"rgb(199, 81, 39)\",chr14:\"rgb(213, 143, 92)\",chr15:\"rgb(122, 101, 165)\",chr16:\"rgb(228, 175, 105)\",chr17:\"rgb(59, 27, 83)\",chr18:\"rgb(205, 222, 183)\",chr19:\"rgb(97, 42, 121)\",chr20:\"rgb(174, 31, 99)\",chr21:\"rgb(231, 199, 111)\",chr22:\"rgb(90, 101, 94)\",chr23:\"rgb(204, 153, 0)\",chr24:\"rgb(153, 204, 0)\",chr25:\"rgb(51, 204, 0)\",chr26:\"rgb(0, 204, 51)\",chr27:\"rgb(0, 204, 153)\",chr28:\"rgb(0, 153, 204)\",chr29:\"rgb(10, 71, 255)\",chr30:\"rgb(71, 117, 255)\",chr31:\"rgb(255, 194, 10)\",chr32:\"rgb(255, 209, 71)\",chr33:\"rgb(153, 0, 51)\",chr34:\"rgb(153, 26, 0)\",chr35:\"rgb(153, 102, 0)\",chr36:\"rgb(128, 153, 0)\",chr37:\"rgb(51, 153, 0)\",chr38:\"rgb(0, 153, 26)\",chr39:\"rgb(0, 153, 102)\",chr40:\"rgb(0, 128, 153)\",chr41:\"rgb(0, 51, 153)\",chr42:\"rgb(26, 0, 153)\",chr43:\"rgb(102, 0, 153)\",chr44:\"rgb(153, 0, 128)\",chr45:\"rgb(214, 0, 71)\",chr46:\"rgb(255, 20, 99)\",chr47:\"rgb(0, 214, 143)\",chr48:\"rgb(20, 255, 177)\"};class Xm{constructor(e){this.tracks=[],this.chordSets=[]}addChordSet(e){this.chordSets=this.chordSets.filter((t=>t.name!==e.name)),this.chordSets.push(e);let t=this.tracks.find((t=>e.trackName===t.name));t&&(t.chordSets=t.chordSets.filter((t=>t.name!==e.name)),t.chordSets.push(e)),t||(t=new Zm(e),this.tracks.push(t))}clearChords(){this.tracks=[],this.chordSets=[]}getTrack(e){return this.tracks.find((t=>e===t.name))}getChordSet(e){return this.chordSets.find((t=>e===t.name))}}class Zm{constructor(e){this.name=e.trackName,this.color=e.trackColor,this.visible=!0,this.chordSets=[e],this.id=(\"0000\"+(Math.random()*Math.pow(36,4)|0).toString(36)).slice(-4)}get chords(){if(1===this.chordSets.length)return this.chordSets[0].chords;const e=[];for(let t of this.chordSets)for(let i of t.chords)e.push(i);return e}}const Jm=Math.exp(5);class ew{static isInstalled(){return void 0!==window.JBrowseReactCircularGenomeView&&void 0!==window.React&&void 0!==window.ReactDOM}constructor(e,t){if(t=t||{},this.config=t,ew.isInstalled()){this.parent=e,this.groupByTrack=!0===t.groupByTrack,this.chordManager=new Xm(t);const i=document.createElement(\"div\");i.className=\"igv-circview-container\",e.appendChild(i),this.createControls(i),this.resetControlPanel();const n=document.createElement(\"div\");n.className=\"igv-circview-circular-genome-view\",i.appendChild(n),this.container=n,t.assembly&&this.setAssembly(t.assembly),this.width=t.width||500,this.height=t.height||500,this.setSize(this.width,this.height)}else console.error(\"JBrowse circular view is not installed\")}createControls(e){const t=document.createElement(\"div\");t.className=\"igv-circview-toolbar\",e.appendChild(t),this.toolbar=t;const i=document.createElement(\"div\");i.className=\"igv-circview-track-panel\",e.appendChild(i),this.controlPanel=i,this.controlPanel.style.display=\"none\";const n=document.createElement(\"div\");n.className=\"igv-circview-toolbar-button-container\",this.toolbar.appendChild(n),this.showControlsButton=document.createElement(\"div\"),this.showControlsButton.className=\"igv-circview-button\",n.appendChild(this.showControlsButton),this.showControlsButton.innerText=\"none\"===this.controlPanel.style.display?\"Show Controls\":\"Hide Controls\",this.showControlsButton.addEventListener(\"click\",(e=>{this.controlPanel.querySelectorAll(\"div\").length>0&&(\"none\"===this.controlPanel.style.display?(this.controlPanel.style.display=\"flex\",e.target.innerText=\"Hide Controls\"):(this.controlPanel.style.display=\"none\",e.target.innerText=\"Show Controls\"))}));let r=document.createElement(\"div\");r.className=\"igv-circview-button\",n.appendChild(r),r.innerText=\"Clear All\",r.addEventListener(\"click\",(()=>{this.clearChords()})),!1!==this.config.showCloseButton&&(r=document.createElement(\"div\"),r.className=\"igv-circview-button\",n.appendChild(r),r.innerText=\"Close\",r.addEventListener(\"click\",(()=>{this.visible=!1})))}resetControlPanel(){this.controlPanel.innerHTML=\"\",this.controlPanel.appendChild(this.createGroupByCB());const e=this.groupByTrack?this.chordManager.tracks:this.chordManager.chordSets;for(let t of e)this.addToControlPanel(t)}createGroupByCB(){const e=document.createElement(\"input\");e.type=\"checkbox\",e.id=\"groupByCB\",e.style.width=\"1.4em\",e.style.height=\"1.4em\",e.checked=this.groupByTrack,e.onclick=e=>{this.groupByTrack=e.target.checked,this.resetControlPanel(),this.render()};const t=document.createElement(\"label\");t.for=\"groupByCB\",t.innerText=\"Group by track\",t.style.color=\"black\",t.style.paddingLeft=\"10px\";const i=document.createElement(\"div\");return i.style.width=\"100%\",i.style.paddingTop=\"5px\",i.style.paddingBottom=\"5px\",i.style.background=\"rgb(216, 230, 234)\",i.appendChild(e),i.appendChild(t),i}addToControlPanel(e){const t=document.createElement(\"div\");this.controlPanel.appendChild(t);const i=document.createElement(\"div\");i.className=\"igv-circview-button\",t.appendChild(i),i.innerText=!0===e.visible?\"Hide\":\"Show\",i.addEventListener(\"click\",(t=>{!0===e.visible?(this.hideChordSet(e.name),t.target.innerText=\"Show\"):(this.showChordSet(e.name),t.target.innerText=\"Hide\")}));const n=document.createElement(\"input\"),r=e=>200*Math.log(e*Jm),s=document.createElement(\"div\");s.className=\"igv-circview-button\",s.innerHTML=\"    \",t.appendChild(s),s.style.backgroundColor=tw(e.color,1);const o={parent:s,popup:\"right\",editorFormat:\"rgb\",color:e.color,onChange:({rgbaString:t})=>{s.style.backgroundColor=tw(t,1),this.setColor(e.name,t),n.value=r(iw(e.color))}},a=new Gm(o);n.setAttribute(\"title\",\"Adjust transparency of arcs\"),n.type=\"range\",n.style.width=\"100px\",n.style.marginRight=\"10px\",n.setAttribute(\"class\",\"range\"),n.setAttribute(\"min\",\"0\"),n.setAttribute(\"max\",\"1000\"),n.value=r(iw(e.color)),n.oninput=()=>{const t=(i=n.value,Math.exp(i/200)/Jm);var i;this.setColor(e.name,tw(e.color,t)),a.setColor(e.color)},t.appendChild(n);const c=document.createElement(\"div\");c.style.color=\"black\",t.appendChild(c),c.innerText=c.title=e.name}setAssembly(e){const t=this.genomeId||sw();if(this.genomeId===t)return;this.chordManager.clearChords(),this.genomeId=t,this.chrNames=new Set(e.chromosomes.map((e=>nw(e.name))));const i=[],n=[];for(let t of e.chromosomes){const e=nw(t.name);n.push(t.color||Km(e)),i.push({refName:e,uniqueId:e,start:0,end:t.bpLength})}this.assembly={name:e.name,sequence:{trackId:t,type:\"ReferenceSequenceTrack\",adapter:{type:\"FromConfigSequenceAdapter\",features:i}},refNameColors:n},this.render()}addChords(e,t={}){const i=t.name||t.track||\"*\",n=i.split(\" \")[0].replaceAll(\"%20\",\" \"),r={name:i.replaceAll(\"%20\",\" \"),trackName:n,chords:e,color:t.color||\"black\",trackColor:t.trackColor||t.color||\"black\",visible:!0,id:t.id||sw()};this.chordManager.addChordSet(r),this.resetControlPanel(),this.render()}setSize(e,t){if(t=t||e,this.width=e,this.height=t,this.viewState){const i=this.viewState.session.view;i.setWidth(e),i.setHeight(t),i.setBpPerPx(i.minBpPerPx)}}getSize(){return Math.min(this.width,this.height)}clearChords(){this.chordManager.clearChords(),this.resetControlPanel(),this.render()}clearSelection(){this.viewState.pluginManager.rootModel.session.clearSelection()}show(){this.parent.style.display=\"block\"}hide(){this.parent.style.display=\"none\"}get visible(){return\"none\"!==this.parent.style.display}set visible(e){this.parent.style.display=e?\"block\":\"none\"}hideChordSet(e){let t=this.getChordSet(e);t?(t.visible=!1,this.render()):console.warn(`No track with name: ${name}`)}showChordSet(e){let t=this.getChordSet(e);t?(t.visible=!0,this.render()):console.warn(`No track with name: ${e}`)}deleteTrack(e){let t=this.tracks.findIndex((t=>e===t.name));t>=0&&this.tracks.splice(t,1),this.render()}getChordSet(e){return this.groupByTrack?this.chordManager.getTrack(e):this.chordManager.getChordSet(e)}setColor(e,t){const i=this.getChordSet(e);if(i){i.color=t;const e=i.id;for(let i of this.viewState.config.tracks)if(e===i.trackId){i.displays[0].renderer.strokeColor.set(t);break}}}render(){const{createViewState:e,JBrowseCircularGenomeView:t}=JBrowseReactCircularGenomeView;ReactDOM.unmountComponentAtNode(this.container);const i=(this.groupByTrack?this.chordManager.tracks:this.chordManager.chordSets).filter((e=>e.visible)),n=[],r=[];for(let e of i)n.push({trackId:e.id,name:e.name,assemblyNames:[\"forIGV\"],type:\"VariantTrack\",adapter:{type:\"FromConfigAdapter\",features:e.chords}}),r.push(e.color);this.viewState=e({assembly:this.assembly,tracks:n});for(let e=0;e div {\\n margin: 4px;\\n}\\n\\n.igv-circview-track-panel {\\n z-index: 1024;\\n position: absolute;\\n top: 33px;\\n left: 0;\\n width: 100%;\\n height: fit-content;\\n border-bottom-style: solid;\\n border-bottom-color: dimgray;\\n border-bottom-width: thin;\\n background-color: white;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-start;\\n}\\n.igv-circview-track-panel > div {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-circview-track-panel > div > div {\\n margin: 4px;\\n}\\n\\n.igv-circview-swatch-button {\\n cursor: pointer;\\n padding: 5px;\\n width: 8px;\\n height: 8px;\\n border: 1px solid #8d8b8b;\\n border-radius: 16px;\\n}\\n\\n.igv-circview-button {\\n cursor: pointer;\\n padding: 5px;\\n color: #444;\\n vertical-align: middle;\\n text-align: center;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 12px;\\n border: 1px solid #8d8b8b;\\n border-radius: 4px;\\n background: #efefef;\\n box-shadow: 0 0 5px -1px rgba(0, 0, 0, 0.2);\\n}\\n\\n.igv-circview-button:hover {\\n background: #efefef;\\n box-shadow: 0 0 5px -1px rgba(0, 0, 0, 0.6);\\n}\\n\\n.igv-circview-button:active {\\n color: #007bff;\\n box-shadow: 0 0 5px -1px rgba(0, 0, 0, 0.6);\\n}\\n\\n/*# sourceMappingURL=circular-view.css.map */\\n',document.head.insertBefore(e,document.head.childNodes[document.head.childNodes.length-1])}()}const ow=e=>e.startsWith(\"chr\")?e.substring(3):e;function aw(e){const t=[],i=[];if(e.wgChromosomeNames)for(let n of e.wgChromosomeNames){const r=e.getChromosome(n);i.push(nf(r.name)),t.push({name:r.name,bpLength:r.bpLength})}return t}function cw(e,t,i,n){const r=t.color||\"rgb(0,0,255)\",s=_s.addAlpha(\"all\"===i.chr?r:nf(i.chr),n),o=_s.addAlpha(r,n),a=t.name.replaceAll(\" \",\"%20\"),c=\"all\"===i.chr?a:`${a} ${i.chr}:${i.start}-${i.end}`;t.browser.circularView.addChords(e,{track:c,color:s,trackColor:o}),t.browser.circularViewVisible||(t.browser.circularViewVisible=!0)}class lw{constructor(e,{minTLENPercentile:t,maxTLENPercentile:i}){this.totalCount=0,this.frCount=0,this.rfCount=0,this.ffCount=0,this.sumF=0,this.sumF2=0,this.lp=void 0===t?.1:t,this.up=void 0===i?99.5:i,this.isizes=[],this.compute(e)}compute(e){for(let n of e)if(n.isProperPair()){var t=Math.abs(n.fragmentLength);this.sumF+=t,this.sumF2+=t*t,this.isizes.push(t);var i=n.pairOrientation;if(\"string\"==typeof i&&4===i.length)switch(\"\"+i.charAt(0)+i.charAt(2)){case\"FF\":case\"RR\":this.ffCount++;break;case\"FR\":this.frCount++;break;case\"RF\":this.rfCount++}this.totalCount++}this.ffCount/this.totalCount>.9?this.orienation=\"ff\":this.frCount/this.totalCount>.9?this.orienation=\"fr\":this.rfCount/this.totalCount>.9&&(this.orienation=\"rf\"),this.minTLEN=0===this.lp?0:hw(this.isizes,this.lp),this.maxTLEN=hw(this.isizes,this.up)}}function hw(e,t){if(0!==e.length){var i=Math.floor(e.length*(t/100));return e.sort((function(e,t){return e-t})),e[i]}}const dw=\"rgb(255,0,255)\",uw=\"rgb(0,0,255)\",fw=\"rgb(132, 178, 158)\",pw=new Map;pw.set(\"m\",\"rgb(255,0,0)\"),pw.set(\"h\",dw),pw.set(\"o\",\"rgb(111, 78, 129)\"),pw.set(\"f\",\"rgb(246, 200, 95)\"),pw.set(\"c\",\"rgb(157, 216, 102)\"),pw.set(\"g\",\"rgb(255, 160, 86)\"),pw.set(\"e\",\"rgb(141, 221, 208)\"),pw.set(\"b\",\"rgb(202, 71, 47)\"),pw.set(\"h\",dw),pw.set(\"a\",\"rgb(51,0,111)\"),pw.set(\"NONE_A\",uw),pw.set(\"NONE_C\",uw),pw.set(\"NONE_T\",uw),pw.set(\"NONE_G\",uw),pw.set(\"NONE_N\",uw);const gw=new Map;function mw(e,t,i){let n=function(e,t){return pw.has(e)?pw.get(e):fw}(e),r=vp(t);if(r>255)return n;const s=e+r+i;if(r<0&&(r=0),!gw.has(s)){const e=\"basemod2\"===i?Math.max(20,Math.min(255,r*r/50-4*r+200+20)):Math.max(20,Math.min(255,.006127*r*r)),[t,o,a]=_s.rgbComponents(n);gw.set(s,`rgba(${t},${o},${a},${e/255})`)}return gw.get(s)}class ww{constructor(e){this.alignmentTrack=e}updateContext(e){this.context=e}drawModifications(e,t,i,n,r,s){const{ctx:o,pixelEnd:a,bpStart:c,bpPerPixel:l}=n,h=e.getBaseModificationSets();if(h){let n;const d=r.split(\":\");2==d.length&&(r=d[0],n=d[1]);for(let d of e.blocks){if(\"S\"===d.type)continue;const e=t,u=i;let f=Math.max(1,1/l);for(let t=d.seqOffset;ta)break;if(i+f<0)continue;let p,g=-1,m=255,w=0;for(let e of h)if((!n||e.modification===n)&&e.containsPosition(t)){const i=vp(e.likelihoods.get(t));m-=i,(!p||i>g)&&(p=e.modification,w=e.canonicalBase,g=i)}if(p){const t=255*s;let n;m>g&&\"basemod2\"===r&&m>=t?n=mw(\"NONE_\"+w,m,r):g>=t&&(n=mw(p,g,r)),o.fillStyle=n,f<3&&(f=3,i--),o.fillRect(i,e,f,Math.max(1,u-2))}}}}}}const bw=new Set([\"firstOfPairStrand\"]);class Fw extends Kl{static defaults={viewAsPairs:!1,showSoftClips:!1,showAllBases:!1,showInsertions:!0,showMismatches:!0,colorBy:void 0,groupBy:void 0,displayMode:\"EXPANDED\",alignmentRowHeight:14,squishedRowHeight:3,negStrandColor:\"rgba(150, 150, 230, 0.75)\",posStrandColor:\"rgba(230, 150, 150, 0.75)\",baseModPosStrandColor:\"rgb(195, 195, 195)\",baseModNegStrandColor:\"rgb(195, 210, 195)\",insertionColor:\"rgb(138, 94, 161)\",insertionTextColor:\"white\",showInsertionText:!1,deletionColor:\"black\",deletionTextColor:\"black\",showDeletionText:!1,skippedColor:\"rgb(150, 170, 170)\",pairConnectorColor:void 0,smallTLENColor:\"rgb(0, 0, 150)\",largeTLENColor:\"rgb(200, 0, 0)\",expectedPairOrientation:\"fr\",rlColor:\"rgb(0, 150, 0)\",rrColor:\"rgb(20, 50, 200)\",llColor:\"rgb(0, 150, 150)\",bamColorTag:\"YC\",hideSmallIndels:!1,indelSizeThreshold:1,highlightColor:void 0,minTLEN:void 0,maxTLEN:void 0,tagColorPallete:\"Set1\"};_colorTables=new Map;_baseModifications=new Set;constructor(e,t){super(e,t),(e.colorTable||e.tagColorTable)&&(this.colorTable=new co(e.tagColorTable)),e.largeFragmentLengthColor&&(this.largeTLENColor=e.largeFragmentLengthColor),e.pairOrienation&&(this.expectedPairOrientation=e.pairOrientation),e.smallFragmentLengthColor&&(this.smallTLENColor=e.smallFragmentLengthColor),e.largeFragmentLengthColor&&(this.largeTLENColor=e.largeFragmentLengthColor),e.minFragmentLength&&(this.minTLEN=e.minFragmentLength),e.maxFragmentLength&&(this.maxTLEN=e.maxFragmentLength),e.displayMode&&(this.displayMode=e.displayMode.toUpperCase()),e.colorBy&&e.colorByTag&&(this.colorBy=e.colorBy+\":\"+e.colorByTag),this.featureSource=this.parent.featureSource,this.top=0===e.coverageTrackHeight?0:e.coverageTrackHeight+5,this.pairColors={RL:this.rlColor,RR:this.rrColor,LL:this.llColor},e.highlightedReads&&this.setHighlightedReads(e.highlightedReads),this.hasPairs=!1,this.hasSupplemental=!1,this._groupByTags=[],this._groupByPositions=[],e.groupBy&&(this.groupBy=e.groupBy,e.groupBy.startsWith(\"base:\")&&this._groupByPositions.push(e.groupBy.substring(5)),e.groupBy.startsWith(\"tag:\")&&this._groupByTags.push(e.groupBy.substring(4))),this._locusChange=yw.bind(this),this.browser.on(\"locuschange\",this._locusChange)}init(e){this.parent=e.parent,delete e.parent,super.init(e)}dispose(){this.browser.off(\"locuschage\",this._locusChange)}get baseModRenderer(){return this._baseModRenderer||(this._baseModRenderer=new ww(this)),this._baseModRenderer}get baseModificationThreshold(){return this.parent.baseModificationThreshold}setTop(e,t){this.top=0===e.height||!1===t?0:5+e.height}setHighlightedReads(e,t){if(!Array.isArray(e)||!e.every((e=>\"string\"==typeof e)))throw new Error(\"AlignmentTrack.setHighlightedReads() only accept array of strings\");t&&(this.highlightColor=t),this.highlightedReads=new Set(e)}computePixelHeight(e){if(e.packedGroups){let t=e.hasDownsampledIntervals()?15:0;const i=\"SQUISHED\"===this.displayMode?this.squishedRowHeight:this.alignmentRowHeight;for(let n of e.packedGroups.values())t+=i*n.length+10;return t+5}return 0}draw(e){const t=e.features,i=e.context,n=e.bpPerPixel,r=e.bpStart,s=e.pixelWidth,o=r+s*n+1,a=this.showSoftClips,c=this.showAllBases,l=this.browser.nucleotideColors;i.save();for(let e of t.baseModificationKeys)this._baseModifications.add(e.modification);let h=t.sequence;h&&(h=h.toUpperCase());let d=0;this.colorBy||(this.colorBy=this.hasPairs?\"unexpectedPair\":\"none\");let u=e.pixelTop;this.top&&i.translate(0,this.top);const f=u+e.pixelHeight;t.hasDownsampledIntervals()?(d=15,t.downsampledIntervals.forEach((function(e){var t=(e.start-r)/n,s=(e.end-r)/n;s-t>5&&(t+=1,s-=1),ko.fillRect(i,t,2,s-t,8,{fillStyle:\"black\"})}))):d=0,this.alignmentsYOffset=d;const p=\"SQUISHED\"===this.displayMode?this.squishedRowHeight:this.alignmentRowHeight,g=t.packedGroups;if(g){let t=d;for(let n of g.keys()){const a=g.get(n),c=a.rows,l=c.length;a.pixelTop=t;for(let e=0;ef)break;if(t+no)break;!0!==e.hidden&&(e instanceof up?(m.call(this,e,t,n),w.call(this,e.firstAlignment,t,n),e.secondAlignment&&w.call(this,e.secondAlignment,t,n)):w.call(this,e,t,n))}t+=p}}if(a.pixelBottom=t,this.groupBy&&n){i.save(),i.font=\"400 12px sans-serif\";const r=i.measureText(n),o=r.width+10,c=-e.pixelShift+e.viewportWidth-o-10,l=r.actualBoundingBoxAscent+r.actualBoundingBoxDescent+10,h=Math.min(a.pixelTop+l-1,a.pixelBottom);i.textAlign=\"center\",i.fillStyle=\"white\",i.strokeStyle=\"lightGray\",ko.roundRect(i,c,h-r.actualBoundingBoxAscent-5,o,l,2,1,1),i.fillStyle=\"black\",i.fillText(n,c+o/2,h),ko.dashedLine(i,0,t,s,t),i.restore(),t+=10}}}function m(e,t,s){var a=this.getConnectorColor(e.firstAlignment),c=(e.connectingStart-r)/n,l=(e.connectingEnd-r)/n,h=t+s/2;e.connectingEndo||(e.mq<=0&&(a=_s.addAlpha(a,.15)),ko.setProperties(i,{fillStyle:a,strokeStyle:a}),ko.strokeLine(i,c,h,l,h))}function w(e,d,u){if(e.start+e.lengthOnRefo)return;const f=a?e.blocks:e.blocks.filter((e=>\"S\"!==e.type));let g=this.getAlignmentColor(e);const m=g;e.mq<=0&&(g=_s.addAlpha(g,.15)),ko.setProperties(i,{fillStyle:g,strokeStyle:m});const w=[];for(let e=0;eo))break}if(e.gaps){const t=d+u/2;for(let s of e.gaps){const e=(s.start-r)/n,o=(s.start+s.len-r)/n,a=o-e,c=s.len.toString(),l=6*c.length,h=e+a/2,u=\"D\"===s.type?this.deletionColor:this.skippedColor;if(ko.strokeLine(i,e,t,o,t,{strokeStyle:u,lineWidth:2}),this.showDeletionText&&s.len>1&&a>=l+8){const e=h-l/2;ko.fillRect(i,e-1,d-1,l+2,12,{fillStyle:\"white\"}),ko.fillText(i,c,e,d+10,{font:\"normal 10px monospace\",fillStyle:this.deletionTextColor})}}}if(e.insertions&&this.showInsertions){let t=-1;for(let s of e.insertions){if(this.hideSmallIndels&&s.len<=this.indelSizeThreshold)continue;if(s.starto)break;const e=s.start-r,a=s.len.toString(),c=2+6*a.length,l=this.showInsertionText&&1!==s.len?Math.round(s.len/n):2,h=Math.max(Math.min(c,l),2),f=e/n-h/2;if(f-t>2){const e={fillStyle:this.insertionColor};ko.fillRect(i,f-2,d,h+4,2,e),ko.fillRect(i,f,d+2,h,u-4,e),ko.fillRect(i,f-2,d+u-2,h+4,2,e),this.showInsertionText&&s.len>1&&l>c&&ko.fillText(i,a,f+1,d+10,{font:\"normal 10px monospace\",fillStyle:this.insertionTextColor}),t=f}}}for(let{bbox:e,baseColor:t,readChar:r}of w){if(n<=.1&&e.height>=8){const n=Math.min(10,e.height);i.font=n+\"px sans-serif\";const s=e.x+e.width/2;ko.strokeText(i,r,s-i.measureText(r).width/2,n-1+e.y,{strokeStyle:t})}else ko.fillRect(i,e.x,e.y,e.width,e.height,{fillStyle:t})}if(this.colorBy&&this.colorBy.startsWith(\"basemod\")){const t={ctx:i,bpPerPixel:n,bpStart:r,bpEnd:o,pixelEnd:s};this.baseModRenderer.drawModifications(e,d,u,t,this.colorBy,this.baseModificationThreshold)}function b(o,a){const w=[],b=o.start-t.start,F=(o.start-r)/n,v=(o.start+o.len-r)/n,y=Math.max(1,v-F),A=100/n,C=Math.min(p/2,A/6),_=\"S\"===o.type,x=e.mq<=0||this.selectedReadName===e.readName||_||this.highlightedReads&&this.highlightedReads.has(e.readName);let k=m;this.selectedReadName===e.readName?k=\"red\":_?k=\"rgb(50,50,50)\":this.highlightedReads&&this.highlightedReads.has(e.readName)&&(k=this.highlightColor||\"#00ff00\");const I=!0===e.strand&&a===f.length-1,S=!1===e.strand&&0===a;if(I|S){let e,t;I?(e=[F,v,v+C,v,F,F],t=[d,d,d+u/2,d+u,d+u,d]):S&&(e=[v,F,F-C,F,v,v],t=[d,d,d+u/2,d+u,d+u,d]),ko.fillPolygon(i,e,t,{fillStyle:g}),x&&ko.strokePolygon(i,e,t,{strokeStyle:k})}else ko.fillRect(i,F,d,y,u,{fillStyle:g}),x&&(i.save(),i.strokeStyle=k,i.strokeRect(F,d,y,u),i.restore());if(_||c||this.showMismatches&&h&&e.seq&&\"*\"!==e.seq){const t=e.seq?e.seq.toUpperCase():void 0,i=e.qual,a=o.seqOffset,f=Math.max(1,1/n);for(let e=0,p=o.len;es)break;let g=t?t.charAt(a+e):\"\";const m=b+e>=0?h.charAt(b+e):\"\";if(\"=\"===g&&(g=m),\"X\"===g||m!==g||_||c){let t=l[g]||\"rgb(0,0,0)\";if(!_&&void 0!==i&&i.length>a+e){t=vw(i[a+e],t)}w.push({bbox:{x:p,y:d,width:f,height:u},baseColor:t,readChar:g})}}}return w}}i.restore()}popupData(e){const t=this.getClickedObject(e);return t?t.popupData(e.genomicLocation):void 0}menuItemList(){let e=[];e.push(\"
\");const t=Bt('
');t.text(\"Color by:\"),e.push({name:void 0,object:t,click:void 0,init:void 0});const i=[];i.push({key:\"none\",label:\"none\"}),i.push({key:\"strand\",label:\"read strand\"}),this.hasPairs&&(i.push({key:\"firstOfPairStrand\",label:\"first-of-pair strand\"}),i.push({key:\"pairOrientation\",label:\"pair orientation\"}),i.push({key:\"tlen\",label:\"insert size (TLEN)\"}),i.push({key:\"unexpectedPair\",label:\"pair orientation & insert size (TLEN)\"})),i.push({key:\"tag\",label:\"tag\"});for(let t of i){const i=void 0===this.colorBy&&\"none\"===t.key||this.colorBy===t.key;e.push(this.colorByCB(t,i))}const n=this._baseModifications.size;if(n>0){e.push('
');let t=1===n?\"base modification\":\"base modification (all)\";if(e.push(this.basemodColorByCB({key:\"basemod\",label:t})),n>1)for(let t of this._baseModifications)e.push(this.basemodColorByCB({key:\"basemod:\"+t,label:`base modification (${bp(t)})`}));if(e.push('
'),t=1===n?\"base modification 2-color\":\"base modification 2-color (all)\",e.push(this.basemodColorByCB({key:\"basemod2\",label:t})),n>1)for(let t of this._baseModifications)e.push(this.basemodColorByCB({key:\"basemod2:\"+t,label:`base modification 2-color (${bp(t)})`}))}e.push(\"
\");const r=Bt('
');r.text(\"Group by:\"),e.push({name:void 0,object:r,click:void 0,init:void 0});const s=[];s.push({key:\"none\",label:\"none\"}),s.push({key:\"strand\",label:\"read strand\"}),this.hasPairs&&(s.push({key:\"firstOfPairStrand\",label:\"first-of-pair strand\"}),s.push({key:\"pairOrientation\",label:\"pair orientation\"}),s.push({key:\"mateChr\",label:\"chromosome of mate\"})),s.push({key:\"chimeric\",label:\"chimeric\"}),s.push({key:\"supplementary\",label:\"supplementary flag\"}),s.push({key:\"readOrder\",label:\"read order\"});for(let e of this._groupByTags)s.push({key:`tag:${e}`,label:`tag:${e}`});for(let e of this._groupByPositions)s.push({key:`base:${e}`,label:`base:${e}`});s.push({key:\"tag\",label:\"tag...\"});for(let t of s){const i=void 0===this.groupBy&&\"none\"===t.key||this.groupBy===t.key;e.push(this.groupByCB(t,i))}e.push(\"
\"),e.push({object:Bt(jl(\"Show all bases\",this.showAllBases)),click:function(){this.alignmentTrack.showAllBases=!this.alignmentTrack.showAllBases,this.trackView.repaintViews()}}),e.push({object:Bt(jl(\"Show mismatches\",this.showMismatches)),click:function(){this.alignmentTrack.showMismatches=!this.alignmentTrack.showMismatches,this.trackView.repaintViews()}}),e.push({object:Bt(jl(\"Show insertions\",this.showInsertions)),click:function(){this.alignmentTrack.showInsertions=!this.alignmentTrack.showInsertions,this.trackView.repaintViews()}}),e.push({object:Bt(jl(\"Show soft clips\",this.showSoftClips)),click:function(){this.alignmentTrack.showSoftClips=!this.alignmentTrack.showSoftClips;const e=this.getCachedAlignmentContainers();for(let t of e)t.pack(this);this.trackView.repaintViews()}}),this.hasPairs&&(e.push(\"
\"),e.push({object:Bt(jl(\"View as pairs\",this.viewAsPairs)),click:function(){const e=!this.alignmentTrack.viewAsPairs;if(e&&this.groupBy&&!bw.has(this.groupBy))return void this.browser.alert.present(`'View as Pairs' is incompatible with 'Group By ${this.groupBy}'`);this.alignmentTrack.viewAsPairs=e;const t=this.getCachedAlignmentContainers();for(let e of t)e.pack(this);this.trackView.checkContentHeight(),this.trackView.repaintViews()}})),this.browser.circularView&&(this.hasPairs||this.hasSupplemental)&&(e.push(\"
\"),this.hasPairs&&e.push({label:\"Add discordant pairs to circular view\",click:function(){for(let e of this.trackView.viewports)this.addPairedChordsForViewport(e)}}),this.hasSupplemental&&e.push({label:\"Add split reads to circular view\",click:function(){for(let e of this.trackView.viewports)this.addSplitChordsForViewport(e)}})),e.push(\"
\");const o=Bt('
');o.text(\"Display mode:\"),e.push({name:void 0,object:o,click:void 0,init:void 0});for(let t of[\"EXPANDED\",\"SQUISHED\",\"FULL\"])e.push({object:Bt(jl(t.toLowerCase(),this.displayMode===t)),click:function(){this.alignmentTrack.setDisplayMode(t)}});return e}setDisplayMode(e){const t=\"FULL\"===this.displayMode||\"FULL\"===e;if(this.displayMode=e,t){const e=this.getCachedAlignmentContainers();for(let t of e)t.pack(this)}this.trackView.checkContentHeight(),this.trackView.repaintViews()}colorByCB(e,t){const i=Bt(jl(e.label,t));if(\"tag\"!==e.key){function n(){this.alignmentTrack.colorBy=e.key,this.trackView.repaintViews()}return{name:void 0,object:i,click:n,init:void 0}}{function r(e){const t=this.alignmentTrack.colorBy.startsWith(\"tag:\")?this.alignmentTrack.colorBy.substring(4):\"\";this.browser.inputDialog.present({label:\"Tag Name\",value:t,callback:e=>{const t=this.alignmentTrack;e?(t.colorBy=\"tag:\"+e,t.colorTable||(t.colorTable=new ao(\"Set1\"))):t.colorBy=void 0,this.trackView.repaintViews()}},e)}return{name:void 0,object:i,dialog:r,init:void 0}}}basemodColorByCB(e){const t=this.colorBy===e.key;return{name:void 0,object:Bt(jl(e.label,t)),click:function(){this.alignmentTrack.colorBy=e.key,this.trackView.repaintViews()},init:void 0}}groupByCB(e,t){return{name:void 0,object:Bt(jl(e.label,t)),dialog:function(t){const i=()=>this.alignmentTrack.repackAlignments();if(\"tag\"===e.key){let e=\"\";this.alignmentTrack.groupBy&&this.alignmentTrack.groupBy.startsWith(\"tag:\")&&(e=this.alignmentTrack.groupBy.substring(4)),this.browser.inputDialog.present({label:\"Tag Name\",value:e,callback:e=>{e&&(this.alignmentTrack.groupBy=\"tag:\"+e,this.alignmentTrack._groupByTags.push(e),i())}},t)}else\"none\"===e.key?this.alignmentTrack.groupBy=void 0:this.alignmentTrack.groupBy=e.key,i()},init:void 0}}repackAlignments(){const e=this.getCachedAlignmentContainers();for(let t of e)\"function\"==typeof t.pack&&t.pack(this);this.trackView.checkContentHeight(),this.trackView.repaintViews()}contextMenuItemList(e){const t=e.viewport,i=[],n=i=>{const n=this.sortObject,r=!n||n.position!==Math.floor(e.genomicLocation)||!n.direction,s={chr:t.referenceFrame.chr,position:Math.floor(e.genomicLocation),option:i,direction:r,sortAsPairs:t.trackView.track.viewAsPairs};this.sortObject=s,t.cachedFeatures.sortRows(s),t.repaint()};i.push(\"Sort by...\"),i.push({label:\"  base\",click:()=>n(\"BASE\")}),i.push({label:\"  read strand\",click:()=>n(\"strand\")}),i.push({label:\"  start location\",click:()=>n(\"START\")}),i.push({label:\"  insert size\",click:()=>n(\"INSERT_SIZE\")}),i.push({label:\"  gap size\",click:()=>n(\"GAP_SIZE\")}),i.push({label:\"  chromosome of mate\",click:()=>n(\"MATE_CHR\")}),i.push({label:\"  mapping quality\",click:()=>n(\"MQ\")}),i.push({label:\"  read name\",click:()=>n(\"READ_NAME\")}),i.push({label:\"  aligned read length\",click:()=>n(\"ALIGNED_READ_LENGTH\")}),i.push({label:\"  tag\",click:()=>{const i=this.sortObject,n=!i||i.position!==Math.floor(e.genomicLocation)||!i.direction,r={label:\"Tag Name\",value:this.sortByTag?this.sortByTag:\"\",callback:i=>{if(i){const r={chr:t.referenceFrame.chr,position:Math.floor(e.genomicLocation),option:\"TAG\",tag:i,direction:n};this.sortByTag=i,this.sortObject=r,t.cachedFeatures.sortRows(r),t.repaint()}}};this.browser.inputDialog.present(r,e.event)}}),i.push(\"
\");const r=`${t.referenceFrame.chr}:${Dt(Math.floor(e.genomicLocation)+1)}`;i.push({label:`Group by base @${r}`,click:()=>{this._groupByPositions.push(r),this.groupBy=`base:${r}`;const e=this.getCachedAlignmentContainers();for(let t of e)t.pack(this);this.trackView.checkContentHeight(),this.trackView.repaintViews()}}),i.push(\"
\");const s=this.getClickedObject(e);if(s){const t=this.showSoftClips,n=\"function\"==typeof s.alignmentContaining?s.alignmentContaining(e.genomicLocation,t):s;if(n){n.isPaired()&&n.isMateMapped()&&i.push({label:\"View mate in split screen\",click:()=>{if(n.mate){const t=e.viewport.referenceFrame,i=this.browser.genome.getChromosome(n.mate.chr);if(i){this.selectedReadName=n.readName;const r=t.bpPerPixel*e.viewport.getWidth(),s=n.mate.position-r/2,o=n.mate.position+r/2;this.browser.addMultiLocusPanel(i.name,s,o,t)}else this.browser.alert.present(`Reference does not contain chromosome: ${n.mate.chr}`)}},init:void 0}),i.push({label:\"View read sequence\",click:()=>{const e=n.seq;e&&\"*\"!==e?this.browser.alert.present(e):this.browser.alert.present(\"Read sequence: *\")}}),uc()&&i.push({label:\"Copy read sequence\",click:async()=>{const e=n.seq;try{await navigator.clipboard.writeText(e)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}});const t=n.seq;if(t&&\"*\"!==t){t.length{const e=n.isNegativeStrand()?vc(t):t,i=`${n.readName} - blat`,r=`${this.name} - ${i}`;mu({sequence:e,browser:this.browser,name:i,title:r})}});const e=n.softClippedBlocks();e.left&&e.left.len>20&&e.left.len{const i=t.substr(e.left.seqOffset,e.left.len),r=n.isNegativeStrand()?vc(i):i,s=`${n.readName} - blat left clip`,o=`${this.name} - ${s}`;mu({sequence:r,browser:this.browser,name:s,title:o})}}),e.right&&e.right.len>20&&e.right.len{const i=t.substr(e.right.seqOffset,e.right.len),r=n.isNegativeStrand()?vc(i):i,s=`${n.readName} - blat right clip`,o=`${this.name} - ${s}`;mu({sequence:r,browser:this.browser,name:s,title:o})}})}i.push(\"
\")}}return this.browser.circularView&&(this.hasPairs||this.hasSupplemental)&&(this.hasPairs&&i.push({label:\"Add discordant pairs to circular view\",click:()=>{this.addPairedChordsForViewport(t)}}),this.hasSupplemental&&i.push({label:\"Add split reads to circular view\",click:()=>{this.addSplitChordsForViewport(t)}}),i.push(\"
\")),i}getClickedObject(e){let t=e.viewport.cachedFeatures;if(!t)return;const i=e.y-this.top,n=e.genomicLocation;if(t.packedGroups){let e=Number.MAX_VALUE;for(let r of t.packedGroups.values())if(e=Math.min(e,r.pixelTop),i>r.pixelTop&&i<=r.pixelBottom){const e=\"SQUISHED\"===this.displayMode?this.squishedRowHeight:this.alignmentRowHeight;let t=Math.floor((i-r.pixelTop)/e);if(t>=0&&te.containsLocation(n,this.showSoftClips)));if(e.length>0)return e[0]}}}if(i=n)return e}getConnectorColor(e){if(this.pairConnectorColor)return this.pairConnectorColor;let t=this.colorBy;switch(t&&t.startsWith(\"tag:\")&&(t.substring(4),t=\"tag\"),t){case\"strand\":case\"firstOfPairStrand\":case\"pairOrientation\":case\"tag\":return this.color?\"function\"==typeof this.color?this.color(e):this.color:\"rgb(200, 200, 200)\";default:return this.getAlignmentColor(e)}}getAlignmentColor(e){let t;t=this.color?\"function\"==typeof this.color?this.color(e):this.color:\"rgb(185, 185, 185)\";let i,n=this.colorBy;switch(n&&n.startsWith(\"tag:\")&&(i=n.substring(4),n=\"tag\"),n){case\"basemod\":case\"basemod2\":t=e.strand?this.baseModPosStrandColor:this.baseModNegStrandColor;break;case\"strand\":t=e.strand?this.posStrandColor:this.negStrandColor;break;case\"firstOfPairStrand\":const r=e.firstOfPairStrand;void 0!==r&&(t=r?this.posStrandColor:this.negStrandColor);break;case\"unexpectedPair\":case\"pairOrientation\":if(e.pairOrientation){const i=Cp[this.expectedPairOrientation];if(i){const n=this.pairColors[i[e.pairOrientation]];if(n){t=n;break}}}if(\"pairOrientation\"===n)break;case\"tlen\":case\"fragmentLength\":e.mate&&e.isMateMapped()&&(e.mate.chr!==e.chr?t=nf(e.mate.chr):this.minTemplateLength&&Math.abs(e.fragmentLength)this.maxTemplateLength&&(t=this.largeTLENColor));break;case\"tag\":const s=e.tags()[i];void 0!==s&&(this.bamColorTag===i&&(t=_s.createColorStringSafe(s)),this.colorTable||(this.colorTable=new ao(this.tagColorPallete)),t=this.colorTable.getColor(s))}return t}get nucleotideColors(){return this.browser.nucleotideColors}get minTemplateLength(){return void 0!==this.minTLEN?this.minTLEN:this.parent._pairedEndStats?this.parent._pairedEndStats.minTLEN:0}get maxTemplateLength(){return void 0!==this.maxTLEN?this.maxTLEN:this.parent._pairedEndStats?this.parent._pairedEndStats.maxTLEN:1e3}getState(){const e=super.getState();return this.highlightedReads&&(e.highlightedReads=Array.from(this.highlightedReads)),e}get name(){return this.parent.name}set name(e){this.parent.name=e}get color(){return this.parent.color}set color(e){this.parent.color=e}get trackView(){return this.parent.trackView}get getCachedAlignmentContainers(){return this.parent.getCachedAlignmentContainers}get sortObject(){return this.parent.sortObject}set sortObject(e){this.parent.sortObject=e}addPairedChordsForViewport(e){return this.parent.addPairedChordsForViewport(e)}addSplitChordsForViewport(e){return this.parent.addSplitChordsForViewport(e)}}function vw(e,t){let i;return i=e<5?.1:Math.max(.1,Math.min(1,.1+.9*(e-5)/15)),i=Math.round(10*i)/10,i<1&&(t=_s.addAlpha(t,i)),t}function yw(){\"FULL\"!==this.displayMode||this.browser.isTrackPanning()||this.repackAlignments()}function Aw(e,t,i,n,r,s,o,a,c){const l=o.baseModCounts,h=o.coverageMap;if(l){let o;const d=a.split(\":\");2==d.length&&(a=d[0],o=d[1]);const u=Array.from(l.allModifications);u.sort(fp.compare);const f=h.getTotalCount(s);if(!u.filter((e=>o?o===e.modification:!e.modification.startsWith(\"NONE_\"))).find((e=>l.getCount(s,e,0,!1)>0)))return;for(let d of u){if(d.modification.startsWith(\"NONE_\")&&\"basemod2\"!==a)continue;if(o&&o!==d.modification&&!d.modification.startsWith(\"NONE_\"))continue;const u=d.base,p=bc(u),g=h.getCount(s,u)+h.getCount(s,p),m=l.simplexModifications.has(d.modification)?h.getPosCount(s,u)+h.getNegCount(s,p):g;if(0==m)continue;const w=\"basemod2\"===a,b=l.getCount(s,d,c,w);if(0==b)continue;const F=g/f*(b/m),v=Math.round(F*r),y=l.getLikelihoodSum(s,d,c,w)/b,A=i-v,C=mw(d.modification,y,a);e.fillStyle=C,e.fillRect(t,A,n,v),i=A}}}class Cw{constructor(e,t){this.featureType=\"numeric\",this.parent=t,this.featureSource=t.featureSource,this.paintAxis=Fd,this.top=0,this.autoscale=e.autoscale||void 0===e.max,e.coverageColor&&(this.color=e.coverageColor),this.autoscale||(this.dataRange={min:e.min||0,max:e.max})}get height(){return this.parent.coverageTrackHeight}draw(e){const t=e.pixelTop;e.pixelHeight;const i=this.parent.browser.nucleotideColors;if(t>this.height)return;const n=e.context,r=e.features,s=r.coverageMap;let o;s.refSeq&&(o=s.refSeq.toUpperCase());const a=e.bpPerPixel,c=e.bpStart,l=c+e.pixelWidth*a+1;let h;h=this.color?this.color:this.parent.color&&\"function\"!=typeof this.parent.color?_s.darkenLighten(this.parent.color,-35):\"rgb(150, 150, 150)\",ko.setProperties(n,{fillStyle:h,strokeStyle:h});const d=Math.max(1,1/a);for(let e=0,t=s.coverage.length;el)break;const i=s.coverage[e];if(!i)continue;const r=i.total/this.dataRange.max*this.height,o=this.height-r,h=(t-c)/a;ko.fillRect(n,h,o,d,r)}if(o)for(let e=0,t=s.coverage.length;el)break;const h=s.coverage[e];if(!h)continue;const u=h.total/this.dataRange.max*this.height;let f=this.height-u;const p=Math.floor((t-c)/a),g=o[e];if(this.parent.colorBy&&this.parent.colorBy.startsWith(\"basemod\"))Aw(n,p,this.height,d,u,t,r,this.parent.colorBy,this.parent.baseModificationThreshold);else if(h.isMismatch(g)){ko.setProperties(n,{fillStyle:i[g]}),ko.fillRect(n,p,f,d,u);let e=0;for(let t of[\"A\",\"C\",\"T\",\"G\"]){const r=(h[\"pos\"+t]+h[\"neg\"+t])/this.dataRange.max*this.height;f=this.height-r-e,e+=r,ko.setProperties(n,{fillStyle:i[t]}),ko.fillRect(n,p,f,d,r)}}}}getClickedObject(e){let t=e.viewport.cachedFeatures;if(!t||0===t.length)return;const i=Math.floor(e.genomicLocation),n=t.coverageMap,r=Math.floor(i-n.bpStart),s=n.coverage[r];return s?{coverage:s,baseModCounts:t.baseModCounts,hoverText:()=>n.coverage[r].hoverText()}:void 0}popupData(e){const t=[],{coverage:i,baseModCounts:n}=this.getClickedObject(e);if(i){const r=Math.floor(e.genomicLocation),s=e.viewport.referenceFrame;t.push(s.chr+\":\"+Dt(1+r)),t.push({name:\"Total Count\",value:i.total});let o=i.posA+i.negA;o>0&&(o=o.toString()+\" (\"+Math.round(o/i.total*100)+\"%, \"+i.posA+\"+, \"+i.negA+\"- )\"),t.push({name:\"A\",value:o}),o=i.posC+i.negC,o>0&&(o=o.toString()+\" (\"+Math.round(o/i.total*100)+\"%, \"+i.posC+\"+, \"+i.negC+\"- )\"),t.push({name:\"C\",value:o}),o=i.posG+i.negG,o>0&&(o=o.toString()+\" (\"+Math.round(o/i.total*100)+\"%, \"+i.posG+\"+, \"+i.negG+\"- )\"),t.push({name:\"G\",value:o}),o=i.posT+i.negT,o>0&&(o=o.toString()+\" (\"+Math.round(o/i.total*100)+\"%, \"+i.posT+\"+, \"+i.negT+\"- )\"),t.push({name:\"T\",value:o}),o=i.posN+i.negN,o>0&&(o=o.toString()+\" (\"+Math.round(o/i.total*100)+\"%, \"+i.posN+\"+, \"+i.negN+\"- )\"),t.push({name:\"N\",value:o}),t.push(\"
\"),t.push({name:\"DEL\",value:i.del.toString()}),t.push({name:\"INS\",value:i.ins.toString()}),n&&(t.push(\"
\"),t.push(...n.popupData(r,this.parent.colorBy)))}return t}}class _w extends Kl{static defaults={alleleFreqThreshold:.2,visibilityWindow:3e4,showCoverage:!0,showAlignments:!0,height:300,coverageTrackHeight:50,baseModificationThreshold:0};constructor(e,t){super(e,t)}init(e){this.type=\"alignment\",this.featureSource=new Bm(e,this.browser);const t=Object.assign({parent:this},e);this.coverageTrack=new Cw(t,this);const i=Object.assign({parent:this},e);this.alignmentTrack=new Fw(i,this.browser),super.init(e),this.showAlignments||(this._height=this.coverageTrackHeight),e.sort&&(Array.isArray(e.sort)?this.assignSort(e.sort[0]):this.assignSort(e.sort))}dispose(){this.alignmentTrack.dispose()}setHighlightedReads(e,t){this.alignmentTrack.setHighlightedReads(e,t),this.updateViews()}get expectedPairOrientation(){return this.alignmentTrack.expectedPairOrientation}get viewAsPairs(){return this.alignmentTrack.viewAsPairs}get colorBy(){return this.alignmentTrack.colorBy}set height(e){this._height=e,this.showAlignments&&(this.alignmentTrack.height=this.showCoverage?e-this.coverageTrackHeight:e)}get height(){return this._height}sort(e){e=this.assignSort(e);for(let t of this.trackView.viewports)if(t.containsPosition(e.chr,e.position)){const i=t.cachedFeatures;i&&(i.sortRows(e),t.repaint())}}assignSort(e){if(e.locus){const t=function(e){const t=e.split(\":\"),i=t[1].split(\"-\"),n={chr:t[0],start:Number.parseInt(i[0].replace(/,/g,\"\"))-1};return i.length>1?n.end=Number.parseInt(i[1].replace(/,/g,\"\")):n.end=n.start+1,n}(e.locus);e.chr=t.chr,e.position=t.start}else e.position--;return e.direction=\"ASC\"===e.direction||!0===e.direction,e.chr=this.browser.genome.getChromosomeName(e.chr),this.sortObject=e,this.sortObject}async getFeatures(e,t,i,n,r){const s=await this.featureSource.getAlignments(e,t,i);if(s.viewport=r,s.hasPairs&&!this._pairedEndStats&&!this.config.maxFragmentLength){const e=new lw(s.allAlignments(),this.config);e.totalCount>99&&(this._pairedEndStats=e)}s.pack(this.alignmentTrack);const o=this.sortObject;return o&&o.chr===e&&o.position>=t&&o.position<=i&&s.sortRows(o),this.alignmentTrack.hasPairs=this.alignmentTrack.hasPairs||s.hasPairs,s}computePixelHeight(e){return(this.showCoverage?this.coverageTrackHeight:0)+(this.showAlignments?this.alignmentTrack.computePixelHeight(e):0)}draw(e){ko.fillRect(e.context,0,e.pixelTop,e.pixelWidth,e.pixelHeight,{fillStyle:\"rgb(255, 255, 255)\"}),!0===this.showCoverage&&this.coverageTrackHeight>0?(this.trackView.axisCanvas.style.display=\"block\",this.coverageTrack.draw(e)):this.trackView.axisCanvas.style.display=\"none\",!0===this.showAlignments&&(this.alignmentTrack.setTop(this.coverageTrack,this.showCoverage),this.alignmentTrack.draw(e))}paintAxis(e,t,i){this.coverageTrack.paintAxis(e,t,this.coverageTrackHeight)}contextMenuItemList(e){return this.alignmentTrack.contextMenuItemList(e)}popupData(e){return!0===this.showCoverage&&e.y>=this.coverageTrack.top&&e.y=this.coverageTrack.top&&e.y=this.coverageTrack.top&&e.y{if(!this.autoHeight){const e=(this.showCoverage?this.coverageTrackHeight:0)+(this.showAlignments?this.alignmentTrack.height:0);this.trackView.setTrackHeight(e)}};return e.push(\"
\"),e.push({object:Bt(jl(\"Show Coverage\",this.showCoverage)),click:function(){this.showCoverage=!this.showCoverage,t(),this.trackView.checkContentHeight(),this.trackView.repaintViews()}}),e.push({object:Bt(jl(\"Show Alignments\",this.showAlignments)),click:function(){this.showAlignments=!this.showAlignments,t(),this.trackView.checkContentHeight(),this.trackView.repaintViews()}}),e}getState(){const e=super.getState();return this.sortObject&&(e.sort={chr:this.sortObject.chr,position:this.sortObject.position+1,option:this.sortObject.option,direction:this.sortObject.direction?\"ASC\":\"DESC\"}),Object.assign(e,this.alignmentTrack.getState()),e}getCachedAlignmentContainers(){return this.trackView.viewports.map((e=>e.cachedFeatures))}get dataRange(){return this.coverageTrack.dataRange}set dataRange(e){this.coverageTrack.dataRange=e}get logScale(){return this.coverageTrack.logScale}set logScale(e){this.coverageTrack.logScale=e}get autoscale(){return this.coverageTrack.autoscale}set autoscale(e){this.coverageTrack.autoscale=e}addPairedChordsForViewport(e){const t=this.maxTemplateLength,i=[],n=e.referenceFrame;for(let r of e.cachedFeatures.allAlignments())r.end>=n.start&&r.start<=n.end&&(r.paired?r.end-r.start>t&&i.push(r):r.mate&&r.mate.chr&&(r.mate.chr!==r.chr||Math.max(r.fragmentLength)>t)&&i.push(r));cw((e=>{const t=[];for(let i of e)if(i.paired)i.firstAlignment&&i.secondAlignment&&t.push({uniqueId:i.readName,refName:ow(i.firstAlignment.chr),start:i.firstAlignment.start,end:i.firstAlignment.end,mate:{refName:ow(i.secondAlignment.chr),start:i.secondAlignment.start,end:i.secondAlignment.end}});else{const e=i.mate;e&&e.chr&&e.position&&t.push({uniqueId:i.readName,refName:ow(i.chr),start:i.start,end:i.end,mate:{refName:ow(e.chr),start:e.position-1,end:e.position}})}return t})(i),this,n,.02)}addSplitChordsForViewport(e){const t=[],i=e.referenceFrame;for(let n of e.cachedFeatures.allAlignments()){const e=n.hasTag(\"SA\");n.end>=i.start&&n.start<=i.end&&e&&t.push(n)}cw((e=>{const t=e=>{const t=Hp(e.tags().SA);let n=0;for(let r of t)r.start!==e.start&&i.push({uniqueId:`${e.readName}_${n++}`,refName:ow(e.chr),start:e.start,end:e.end,mate:{refName:ow(r.chr),start:r.start,end:r.start+r.lenOnRef}})},i=[];for(let i of e)i.paired?(t(i.firstAlignment),i.secondAlignment&&t(i.secondAlignment)):t(i);return i})(t),this,i,.02)}}class xw extends Kl{static defaults={height:250,theta:Math.PI/4,arcOrientation:\"UP\",showBlocks:!0,blockHeight:3,thickness:1,color:\"rgb(180,25,137)\",alpha:.02,logScale:!0};constructor(e,t){super(e,t)}init(e){super.init(e),!1===e.arcOrientation?this.arcOrientation=\"DOWN\":!0===e.arcOrientation?this.arcOrientation=\"UP\":e.arcOrientation?this.arcOrientation=e.arcOrientation.toUpperCase():this.arcOrientation=\"UP\",this.sinTheta=Math.sin(this.theta),this.cosTheta=Math.cos(this.theta),this.arcType=function(e){if(!e.arcType)return\"nested\";switch(e.arcType){case\"chiapet\":return\"inView\";case\"chiapetoutbound\":return\"partialInView\";default:return e.arcType}}(e),this.painter={flipAxis:\"DOWN\"===this.arcOrientation,dataRange:this.dataRange,paintAxis:Fd},e.valueColumn?(this.valueColumn=e.valueColumn,this.hasValue=!0):e.useScore&&(this.hasValue=!0,this.valueColumn=\"score\"),e.max?(this.dataRange={min:e.min||0,max:e.max},this.autoscale=!1):this.autoscale=!0,e.featureSource?(this.featureSource=e.featureSource,delete e._featureSource):(this.featureSource=Gd(e,this.browser.genome),this.featureSource.getWGFeatures=Nw)}async postInit(){if(\"function\"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),void 0===this.visibilityWindow&&\"function\"==typeof this.featureSource.defaultVisibilityWindow&&(this.visibilityWindow=await this.featureSource.defaultVisibilityWindow(),this.featureSource.visibilityWindow=this.visibilityWindow),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get supportsWholeGenome(){return\"function\"!=typeof this.featureSource.supportsWholeGenome||this.featureSource.supportsWholeGenome()}async getFeatures(e,t,i){const n=this.visibilityWindow,r=await this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n});return void 0===this.hasValue&&r&&r.length>0&&(this.hasValue=void 0!==r[0].score),r}draw(e){\"proportional\"===this.arcType||\"inView\"===this.arcType||\"partialInView\"===this.arcType?this.drawProportional(e):this.drawNested(e)}drawNested(e){const t=e.context,i=e.pixelWidth,n=e.pixelHeight,r=e.viewportWidth,s=e.bpPerPixel,o=e.bpStart,a=s;ko.fillRect(t,0,e.pixelTop,i,n,{fillStyle:\"rgb(255, 255, 255)\"});const c=e.features;if(c){(function(){let e=0;for(let t of c){let n=(t.start-o)/a,r=(t.end-o)/a;n>=0&&r<=i&&(e=Math.max(e,r-n))}let t=Math.min(r,e)/2;if(e>0){let e=(n-10)/t;this.theta=function(e){let t,i=[.01570925532366355,.15838444032453644,.3249196962329063,.5095254494944288,.7265425280053609,.9999999999999999],n=[.031415926535897934,.3141592653589793,.6283185307179586,.9424777960769379,1.2566370614359172,1.5707963267948966];for(t=0;te);t++);let r=0===t?0:i[t-1],s=ti)continue;let f=u-d;f<3&&(f=3,d--);const p=f/2,g=p/this.sinTheta,m=this.cosTheta*g,w=d+p;let b,F,v;if(s?(b=this.height+m,F=Math.PI+Math.PI/2-this.theta,v=Math.PI+Math.PI/2+this.theta):(b=-m,F=Math.PI/2-this.theta,v=Math.PI/2+this.theta),this.showBlocks&&\"all\"!==e.chr){const i=(e.start1-o)/a,n=(e.end1-o)/a,r=(e.start2-o)/a,c=(e.end2-o)/a,l=s?-this.blockHeight:this.blockHeight;t.fillRect(i,h,n-i,l),t.fillRect(r,h,c-r,l)}n&&!this.config.useScore&&f>r&&(n=Ew(n,this.alpha)),t.strokeStyle=n,t.fillStyle=n,t.beginPath(),t.arc(w,b,g,F,v,!1),t.stroke(),e.drawState={xc:w,yc:b,r:g}}else{let r=Math.round((e.start-o)/a),c=Math.round((e.end-o)/a);if(c<0||r>i)continue;let l=c-r;l<3&&(l=3,r--);const h=e.chr===e.chr1?e.chr2:e.chr1;t.strokeStyle=n,t.fillStyle=Ew(nf(h),.5),s?(t.fillRect(r,this.height/2,l,this.height/2),t.fillText(h,r+l/2,this.height/2-5),e.drawState={x:r,y:this.height/2,w:l,h:this.height/2}):(t.fillRect(r,0,l,this.height/2),t.fillText(h,r+l/2,this.height/2+13),e.drawState={x:r,y:0,w:l,h:this.height/2})}}}var l}getScaleFactor(e,t,i,n){return n?i/(Math.log10(t+1)-(e<=0?0:Math.log10(e+1))):i/(t-e)}drawProportional(e){const t=e.context,i=e.pixelWidth,n=e.pixelHeight,r=e.bpPerPixel,s=e.bpStart,o=r,a=e.referenceFrame.start,c=e.referenceFrame.end,l=\"UP\"===this.arcOrientation;ko.fillRect(t,0,e.pixelTop,i,n,{fillStyle:\"rgb(255, 255, 255)\"});const h=e.features;if(h&&h.length>0){const n=0,r=this.getScaleFactor(n,this.dataRange.max,e.pixelHeight-1,this.logScale),d=l?e.pixelHeight:0;for(let e of h){e.drawState=void 0;const n=this.valueColumn?e[this.valueColumn]:e.score;if(void 0===n||Number.isNaN(n))continue;const h=Math.round((this.logScale?Math.log10(n+1):n)*r);if(e.chr1===e.chr2||\"all\"===e.chr){const{m1:i,m2:r}=kw(e,this.browser.genome);let u=Math.round((i-s)/o),f=Math.round((r-s)/o)-u;if(f<3&&(f=3,u--),nthis.dataRange.max)continue;if(\"proportional\"!==this.arcType){const e=\"partialInView\"===this.arcType,t=i>=a&&r<=c;let n=!1,s=!1;if(!t&&e&&(n=a<=i&&i<=c,n||(s=a<=r&&r<=c)),!(t||n||s))continue}const p=f/2,g=u+f/2;e.drawState={xc:g,yc:d,radiusX:p,radiusY:h};const m=l,w=e.color||this.color;if(t.strokeStyle=w,t.lineWidth=e.thickness||this.thickness||1,!0===t.isSVG?t.strokeEllipse(g,d,p,h,0,0,Math.PI,m):(t.beginPath(),t.ellipse(g,d,p,h,0,0,Math.PI,m),t.stroke()),this.alpha&&(t.fillStyle=Ew(w,this.alpha),!0===t.isSVG?t.fillEllipse(g,d,p,h,0,0,Math.PI,m):t.fill()),this.showBlocks&&\"all\"!==e.chr){t.fillStyle=w;const i=(e.start1-s)/o,n=(e.end1-s)/o,r=(e.start2-s)/o,a=(e.end2-s)/o,c=l?-this.blockHeight:this.blockHeight;t.fillRect(i,d,n-i,c),t.fillRect(r,d,a-r,c)}}else{let r=Math.round((e.start-s)/o),a=Math.round((e.end-s)/o);if(a<0||r>i||nthis.dataRange.max)continue;const c=Math.min(h,this.height-13);let d=a-r;d<3&&(d=3,r--);const u=e.chr===e.chr1?e.chr2:e.chr1;if(t.font=\"8px sans-serif\",t.textAlign=\"center\",t.fillStyle=Ew(nf(u),.5),l){const i=this.height-c;t.fillRect(r,i,d,c),t.fillText(u,r+d/2,i-5),e.drawState={x:r,y:i,w:d,h:c}}else t.fillRect(r,0,d,c),t.fillText(u,r+d/2,c+13),e.drawState={x:r,y:0,w:d,h:c}}}}}clearAxis(e,t,i){ko.fillRect(e,0,0,t,i,{fillStyle:\"rgb(255, 255, 255)\"})}paintAxis(e,t,i){const n={min:0,max:this.dataRange.max};\"proportional\"===this.arcType||\"inView\"===this.arcType||\"partialInView\"===this.arcType?(this.painter.flipAxis=\"DOWN\"===this.arcOrientation,this.painter.dataRange=n,this.painter.paintAxis(e,t,i)):this.clearAxis(e,t,i)}menuItemList(){let e=[];if(this.hasValue){e.push(\"
\");const t={nested:\"Nested\",proportional:\"Proportional - All\",inView:\"Proportional - Both Ends in View\",partialInView:\"Proportional - One End in View\"};e.push(\"Arc Type\");for(let i of[\"nested\",\"proportional\",\"inView\",\"partialInView\"])e.push({object:Bt(jl(t[i],i===this.arcType)),click:function(){this.arcType=i,this.trackView.repaintViews()}})}return e.push(\"
\"),e.push({name:\"Toggle arc direction\",click:function(){this.arcOrientation=\"UP\"===this.arcOrientation?\"DOWN\":\"UP\",this.trackView.repaintViews()}}),e.push({name:this.showBlocks?\"Hide Blocks\":\"Show Blocks\",click:function(){this.showBlocks=!this.showBlocks,this.trackView.repaintViews()}}),\"proportional\"!==this.arcType&&\"inView\"!==this.arcType&&\"partialInView\"!==this.arcType||(e=e.concat(this.numericDataMenuItems())),this.browser.circularView&&(e.push(\"
\"),e.push({label:\"Add interactions to circular view\",click:function(){for(let e of this.trackView.viewports)this.addChordsForViewport(e.referenceFrame)}})),e}contextMenuItemList(e){if(this.browser.circularView){const t=e.viewport,i=[];return i.push({label:\"Add interactions to circular view\",click:()=>{const e=t.referenceFrame;this.addChordsForViewport(e)}}),i.push(\"
\"),i}}addChordsForViewport(e){let t;if(\"all\"===e.chr)t=Object.values(this.featureSource.getAllFeatures()).flat();else{t=this.featureSource.featureCache.queryFeatures(e.chr,e.start,e.end).filter((e=>e.drawState))}if(0===t.length)return;cw(t.map((e=>{const t=e._f||e;return{uniqueId:`${t.chr1}:${t.start1}-${t.end1}_${t.chr2}:${t.start2}-${t.end2}`,refName:ow(t.chr1),start:t.start1,end:t.end1,mate:{refName:ow(t.chr2),start:t.start2,end:t.end2}}})),this,e,.5)}doAutoscale(e){let t=0;if(e)for(let i of e){const e=this.valueColumn?i[this.valueColumn]:i.score;Number.isNaN(e)||(t=Math.max(t,e))}return{min:0,max:t}}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=[];for(let e of t){const t=e._||e;if(i.push({name:\"Region 1\",value:Iw(t.chr1,t.start1,t.end1,t.strand1)}),i.push({name:\"Region 2\",value:Iw(t.chr2,t.start2,t.end2,t.strand2)}),t.name&&i.push({name:\"Name\",value:t.name}),void 0!==t.value&&i.push({name:\"Value\",value:t.value}),void 0!==t.score&&i.push({name:\"Score\",value:t.score}),t.extras&&this.header&&this.header.columnNames){const e=this.header.columnNames,n=this.header.hiccups?6:10;for(let r=n;r=t-a&&e.canvasX<=t+s+a&&e.canvasY>=n&&e.canvasY<=n+o){const n=-Math.abs(e.canvasX-(t+s/2));i.push({score:n,feature:r});break}}}return i.length>1&&i.sort(((e,t)=>e.score-t.score)),i.map((e=>e.feature))}}function kw(e,t){let i=(e.start1+e.end1)/2,n=(e.start2+e.end2)/2;if(\"all\"===e.chr&&(i=t.getGenomeCoordinate(e.chr1,i),n=t.getGenomeCoordinate(e.chr2,n)),i>n){const e=i;i=n,n=e}return{m1:i,m2:n}}function Iw(e,t,i,n){return n&&\".\"!==n?`${e}:${Dt(t+1)}-${Dt(i)} (${n})`:`${e}:${Dt(t+1)}-${Dt(i)}`}const Sw=new Map;function Ew(e,t){const i=`${e}_${t}`;let n=Sw.get(i);return n||(n=_s.addAlpha(e,t),Sw.set(i,n)),n}function Nw(e){const t=e=>{const t=Object.assign({},e);return t.chr=\"all\",t.start=i.getGenomeCoordinate(e.chr1,e.start1),t.end=i.getGenomeCoordinate(e.chr2,e.end2),t},i=this.genome;let n,r=0;for(let t of i.wgChromosomeNames){let i=e[t];if(i)for(let e of i)e.dup||(r++,e.score&&(!n||e.score>n.score)&&(n=e))}const s=this.maxWGCount,o=n&&n.score>0&&r>s?5:1,a=Math.floor(s/o),c=n&&n.score>0?Math.log(n.score)/o:Number.MAX_SAFE_INTEGER;let l,h=[],d=[];for(let e=0;e=400){const e=Error(r.statusText);throw e.code=s,e}return r.arrayBuffer()}}class Dw{constructor(e){this.file=e.file,this.fetchSize=e.fetchSize||16e3,this.maxSize=e.maxSize||1e6,this.buffers=[]}async read(e,t){let i=this.buffers.filter((i=>i.overlaps(e,e+t)));for(let n of i)if(n.contains(e,e+t))return n.slice(e,e+t);if(0===i.length){let i=Math.max(t,this.fetchSize);this.buffers.sort(((e,t)=>e.start-t.start));const n=function(e,t,i){let n=i-1,r=e.length;for(;1+n>1);t(e[i])?r=i:n=i}return r}(this.buffers,(t=>t.start>e),0);ne.start-t.start));const n=[];let r=e;for(let e of i){if(rr){const e=r,t=s-e,i=await this.file.read(e,t),o=new Rw(e,i);n.push(o)}const o=n[0].start,a=function(e){const t=e.reduce(((e,t)=>e+t.byteLength),0),i=new Uint8Array(t);let n=0;for(let t of e)i.set(new Uint8Array(t),n),n+=t.byteLength;return i.buffer}(n.map((e=>e.buffer))),c=new Rw(o,a),l=new Set(i);return this.buffers=this.buffers.filter((e=>!l.has(e))),this.addBuffer(c),c.slice(e,e+t)}}addBuffer(e){const t=this.buffers.reduce(((e,t)=>e+t.size),0)+e.size;if(t>this.maxSize){const e=t-this.maxSize;this.buffers.sort(((e,t)=>e.creationTime-t.creationTime));let i,n=0;for(i=0;ie));i++);this.buffers=ithis.buffer.byteLength)throw Error(\"buffer bounds error\");return this.buffer.slice(e-this.start,t-this.start)}get end(){return this.start+this.buffer.byteLength}get size(){return this.buffer.byteLength}contains(e,t){return e>=this.start&&t<=this.end}overlaps(e,t){return e>this.start&&ethis.start&&t(((e,t,i)=>{t in e?Lw(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(e,\"symbol\"!=typeof t?t+\"\":t,i),i);async function Hw(e,t,i=0){var n=new Map;for(let[r,s]of e.entries()){let e=await jw.unpack_from_async(\"<\"+s,t,i);i+=jw.calcsize(s),1==e.length&&(e=e[0]),n.set(r,e)}return n}function Pw(e,t,i=0){var n=new Map;for(let[r,s]of e.entries()){let e=jw.unpack_from(\"<\"+s,t,i);i+=jw.calcsize(s),1==e.length&&(e=e[0]),n.set(r,e)}return n}function Ow(e){e||e()}function Uw(e){var t=\"<\"+Array.from(e.values()).join(\"\");return jw.calcsize(t)}function qw(e,t=8){return Math.ceil(e/t)*t}var Vw={u:\"Uint\",i:\"Int\",f:\"Float\"};function Qw(e){var t,i,n=jw._is_big_endian(e);if(/S/.test(e))t=\"getString\",i=0|((e.match(/S(\\d*)/)||[])[1]||1);else{let[n,r,s]=e.match(/[<>=!@]?(i|u|f)(\\d*)/);i=parseInt(s||4,10),t=\"get\"+Vw[r]+(8*i).toFixed()}return[t,n,i]}var jw=new class{constructor(){this.big_endian=function(){const e=new Uint8Array(4);return!((new Uint32Array(e.buffer)[0]=1)&e[0])}(),this.getters={s:\"getUint8\",b:\"getInt8\",B:\"getUint8\",h:\"getInt16\",H:\"getUint16\",i:\"getInt32\",I:\"getUint32\",l:\"getInt32\",L:\"getUint32\",q:\"getInt64\",Q:\"getUint64\",f:\"getFloat32\",d:\"getFloat64\"},this.byte_lengths={s:1,b:1,B:1,h:2,H:2,i:4,I:4,l:4,L:4,q:8,Q:8,f:4,d:8};let e=Object.keys(this.byte_lengths).join(\"\");this.fmt_size_regex=\"(\\\\d*)([\"+e+\"])\"}calcsize(e){for(var t,i=0,n=new RegExp(this.fmt_size_regex,\"g\");null!==(t=n.exec(e));){let e=parseInt(t[1]||1,10),n=t[2];i+=e*this.byte_lengths[n]}return i}_is_big_endian(e){return!/^)/.test(e)||this.big_endian)}async unpack_from_async(e,t,i){i=Number.parseInt(i||0);const n=this.calcsize(e),r=await t.slice(i,i+n);let s=0;for(var o,a=new Ww(r),c=[],l=this._is_big_endian(e),h=new RegExp(this.fmt_size_regex,\"g\");null!==(o=h.exec(e));){let e=parseInt(o[1]||1,10),t=o[2],i=this.getters[t],n=this.byte_lengths[t];if(\"s\"==t)c.push((new TextDecoder).decode(r.slice(s,s+e))),s+=e;else for(var d=0;de+(t<<8*i)),0);return o}var Kw=class{constructor(e,t){this.buf=e,this.offset=t,this.dtype=this.determine_dtype()}async determine_dtype(){let e=await Hw(Yw,this.buf,this.offset);this.offset+=Xw;let t=15&e.get(\"class_and_version\");if(t==Zw)return this._determine_dtype_fixed_point(e);if(t==Jw)return this._determine_dtype_floating_point(e);if(t==eb)throw\"Time datatype class not supported.\";if(t==tb)return this._determine_dtype_string(e);if(t==ib)throw\"Bitfield datatype class not supported.\";if(t==nb)return{datatype_class:nb,size:e.get(\"size\")};if(t==rb)return this._determine_dtype_compound(e);if(t==sb)return[\"REFERENCE\",e.get(\"size\")];if(t==ob)return this.determine_dtype();if(t==cb)throw\"Array datatype class not supported.\";if(t==ab){let t=this._determine_dtype_vlen(e);if(\"VLEN_SEQUENCE\"==t[0]){t=[\"VLEN_SEQUENCE\",this.determine_dtype()]}return t}throw\"Invalid datatype class \"+t}_determine_dtype_fixed_point(e){let t=e.get(\"size\");if(![1,2,4,8].includes(t))throw\"Unsupported datatype size\";var i;var n;return i=(8&e.get(\"class_bit_field_0\"))>0?\"i\":\"u\",n=0==(1&e.get(\"class_bit_field_0\"))?\"<\":\">\",this.offset+=4,n+i+t.toFixed()}_determine_dtype_floating_point(e){let t=e.get(\"size\");if(![1,2,4,8].includes(t))throw\"Unsupported datatype size\";var i;return i=0==(1&e.get(\"class_bit_field_0\"))?\"<\":\">\",this.offset+=12,i+\"f\"+t.toFixed()}_determine_dtype_string(e){return\"S\"+e.get(\"size\").toFixed()}_determine_dtype_vlen(e){return 1!=(1&e.get(\"class_bit_field_0\"))?[\"VLEN_SEQUENCE\",0,0]:[\"VLEN_STRING\",e.get(\"class_bit_field_0\")>>4,1&e.get(\"class_bit_field_1\")]}_determine_dtype_compound(e){throw\"Compound type not yet implemented!\"}},Yw=new Map([[\"class_and_version\",\"B\"],[\"class_bit_field_0\",\"B\"],[\"class_bit_field_1\",\"B\"],[\"class_bit_field_2\",\"B\"],[\"size\",\"I\"]]),Xw=Uw(Yw);Uw(new Map([[\"offset\",\"I\"],[\"dimensionality\",\"B\"],[\"reserved_0\",\"B\"],[\"reserved_1\",\"B\"],[\"reserved_2\",\"B\"],[\"permutation\",\"I\"],[\"reserved_3\",\"I\"],[\"dim_size_1\",\"I\"],[\"dim_size_2\",\"I\"],[\"dim_size_3\",\"I\"],[\"dim_size_4\",\"I\"]]));var Zw=0,Jw=1,eb=2,tb=3,ib=4,nb=5,rb=6,sb=7,ob=8,ab=9,cb=10;function lb(e){let t=e.length;for(;--t>=0;)e[t]=0}lb(new Array(576)),lb(new Array(60)),lb(new Array(512)),lb(new Array(256)),lb(new Array(29)),lb(new Array(30));var hb=(e,t,i,n)=>{let r=65535&e,s=e>>>16&65535,o=0;for(;0!==i;){o=i>2e3?2e3:i,i-=o;do{r=r+t[n++]|0,s=s+r|0}while(--o);r%=65521,s%=65521}return r|s<<16},db=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})()),ub=(e,t,i,n)=>{const r=db,s=n+i;e^=-1;for(let i=n;i>>8^r[255&(e^t[i])];return~e},fb={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"},pb={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},gb=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),mb={assign:function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if(\"object\"!=typeof i)throw new TypeError(i+\"must be non-object\");for(const t in i)gb(i,t)&&(e[t]=i[t])}}return e},flattenChunks:e=>{let t=0;for(let i=0,n=e.length;i=252?6:iC>=248?5:iC>=240?4:iC>=224?3:iC>=192?2:1;bb[254]=bb[254]=1;var Fb={string2buf:e=>{if(\"function\"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,i,n,r,s,o=e.length,a=0;for(r=0;r>>6,t[s++]=128|63&i):i<65536?(t[s++]=224|i>>>12,t[s++]=128|i>>>6&63,t[s++]=128|63&i):(t[s++]=240|i>>>18,t[s++]=128|i>>>12&63,t[s++]=128|i>>>6&63,t[s++]=128|63&i);return t},buf2string:(e,t)=>{const i=t||e.length;if(\"function\"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let n,r;const s=new Array(2*i);for(r=0,n=0;n4)s[r++]=65533,n+=o-1;else{for(t&=2===o?31:3===o?15:7;o>1&&n1?s[r++]=65533:t<65536?s[r++]=t:(t-=65536,s[r++]=55296|t>>10&1023,s[r++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&wb)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i=\"\";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+bb[e[i]]>t?i:t}};var vb=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0},yb=function(e,t){let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_,x;const k=e.state;i=e.next_in,_=e.input,n=i+(e.avail_in-5),r=e.next_out,x=e.output,s=r-(t-e.avail_out),o=r+(e.avail_out-257),a=k.dmax,c=k.wsize,l=k.whave,h=k.wnext,d=k.window,u=k.hold,f=k.bits,p=k.lencode,g=k.distcode,m=(1<>>24,u>>>=F,f-=F,F=b>>>16&255,0===F)x[r++]=65535&b;else{if(!(16&F)){if(64&F){if(32&F){k.mode=12;break e}e.msg=\"invalid literal/length code\",k.mode=30;break e}b=p[(65535&b)+(u&(1<>>=F,f-=F),f<15&&(u+=_[i++]<>>24,u>>>=F,f-=F,F=b>>>16&255,16&F){if(y=65535&b,F&=15,fa){e.msg=\"invalid distance too far back\",k.mode=30;break e}if(u>>>=F,f-=F,F=r-s,y>F){if(F=y-F,F>l&&k.sane){e.msg=\"invalid distance too far back\",k.mode=30;break e}if(A=0,C=d,0===h){if(A+=c-F,F2;)x[r++]=C[A++],x[r++]=C[A++],x[r++]=C[A++],v-=3;v&&(x[r++]=C[A++],v>1&&(x[r++]=C[A++]))}else{A=r-y;do{x[r++]=x[A++],x[r++]=x[A++],x[r++]=x[A++],v-=3}while(v>2);v&&(x[r++]=x[A++],v>1&&(x[r++]=x[A++]))}break}if(64&F){e.msg=\"invalid distance code\",k.mode=30;break e}b=g[(65535&b)+(u&(1<>3,i-=v,f-=v<<3,u&=(1<{const c=a.bits;let l,h,d,u,f,p,g=0,m=0,w=0,b=0,F=0,v=0,y=0,A=0,C=0,_=0,x=null,k=0;const I=new Uint16Array(16),S=new Uint16Array(16);let E,N,B,M=null,D=0;for(g=0;g<=Ab;g++)I[g]=0;for(m=0;m=1&&0===I[b];b--);if(F>b&&(F=b),0===b)return r[s++]=20971520,r[s++]=20971520,a.bits=1,0;for(w=1;w0&&(0===e||1!==b))return-1;for(S[1]=0,g=1;g852||2===e&&C>592)return 1;for(;;){E=g-y,o[m]p?(N=M[D+o[m]],B=x[k+o[m]]):(N=96,B=0),l=1<>y)+h]=E<<24|N<<16|B}while(0!==h);for(l=1<>=1;if(0!==l?(_&=l-1,_+=l):_=0,m++,0==--I[g]){if(g===b)break;g=t[i+o[m]]}if(g>F&&(_&u)!==d){for(0===y&&(y=F),f+=w,v=g-y,A=1<852||2===e&&C>592)return 1;d=_&u,r[d]=F<<24|v<<16|f-s}}return 0!==_&&(r[f+_]=g-y<<24|64<<16),a.bits=F,0},{Z_FINISH:Sb,Z_BLOCK:Eb,Z_TREES:Nb,Z_OK:Bb,Z_STREAM_END:Mb,Z_NEED_DICT:Db,Z_STREAM_ERROR:Rb,Z_DATA_ERROR:Tb,Z_MEM_ERROR:Lb,Z_BUF_ERROR:zb,Z_DEFLATED:Hb}=pb,Pb=12,Ob=30,Ub=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function qb(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var Vb,Qb,jb=e=>{if(!e||!e.state)return Rb;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,Bb},Wb=e=>{if(!e||!e.state)return Rb;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,jb(e)},Gb=(e,t)=>{let i;if(!e||!e.state)return Rb;const n=e.state;return t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Rb:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,Wb(e))},$b=(e,t)=>{if(!e)return Rb;const i=new qb;e.state=i,i.window=null;const n=Gb(e,t);return n!==Bb&&(e.state=null),n},Kb=!0,Yb=e=>{if(Kb){Vb=new Int32Array(512),Qb=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Ib(1,e.lens,0,288,Vb,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Ib(2,e.lens,0,32,Qb,0,e.work,{bits:5}),Kb=!1}e.lencode=Vb,e.lenbits=9,e.distcode=Qb,e.distbits=5},Xb=(e,t,i,n)=>{let r;const s=e.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(t.subarray(i-s.wsize,i),0),s.wnext=0,s.whave=s.wsize):(r=s.wsize-s.wnext,r>n&&(r=n),s.window.set(t.subarray(i-n,i-n+r),s.wnext),(n-=r)?(s.window.set(t.subarray(i-n,i),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave{let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_=0;const x=new Uint8Array(4);let k,I;const S=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Rb;i=e.state,i.mode===Pb&&(i.mode=13),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,d=a,u=c,C=Bb;e:for(;;)switch(i.mode){case 1:if(0===i.wrap){i.mode=13;break}for(;h<16;){if(0===a)break e;a--,l+=n[s++]<>>8&255,i.check=ub(i.check,x,2,0),l=0,h=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg=\"incorrect header check\",i.mode=Ob;break}if((15&l)!==Hb){e.msg=\"unknown compression method\",i.mode=Ob;break}if(l>>>=4,h-=4,A=8+(15&l),0===i.wbits)i.wbits=A;else if(A>i.wbits){e.msg=\"invalid window size\",i.mode=Ob;break}i.dmax=1<>8&1),512&i.flags&&(x[0]=255&l,x[1]=l>>>8&255,i.check=ub(i.check,x,2,0)),l=0,h=0,i.mode=3;case 3:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<>>8&255,x[2]=l>>>16&255,x[3]=l>>>24&255,i.check=ub(i.check,x,4,0)),l=0,h=0,i.mode=4;case 4:for(;h<16;){if(0===a)break e;a--,l+=n[s++]<>8),512&i.flags&&(x[0]=255&l,x[1]=l>>>8&255,i.check=ub(i.check,x,2,0)),l=0,h=0,i.mode=5;case 5:if(1024&i.flags){for(;h<16;){if(0===a)break e;a--,l+=n[s++]<>>8&255,i.check=ub(i.check,x,2,0)),l=0,h=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&(f=i.length,f>a&&(f=a),f&&(i.head&&(A=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(n.subarray(s,s+f),A)),512&i.flags&&(i.check=ub(i.check,n,f,s)),a-=f,s+=f,i.length-=f),i.length))break e;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===a)break e;f=0;do{A=n[s+f++],i.head&&A&&i.length<65536&&(i.head.name+=String.fromCharCode(A))}while(A&&f>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=Pb;break;case 10:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<>>=7&h,h-=7&h,i.mode=27;break}for(;h<3;){if(0===a)break e;a--,l+=n[s++]<>>=1,h-=1,3&l){case 0:i.mode=14;break;case 1:if(Yb(i),i.mode=20,t===Nb){l>>>=2,h-=2;break e}break;case 2:i.mode=17;break;case 3:e.msg=\"invalid block type\",i.mode=Ob}l>>>=2,h-=2;break;case 14:for(l>>>=7&h,h-=7&h;h<32;){if(0===a)break e;a--,l+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",i.mode=Ob;break}if(i.length=65535&l,l=0,h=0,i.mode=15,t===Nb)break e;case 15:i.mode=16;case 16:if(f=i.length,f){if(f>a&&(f=a),f>c&&(f=c),0===f)break e;r.set(n.subarray(s,s+f),o),a-=f,s+=f,c-=f,o+=f,i.length-=f;break}i.mode=Pb;break;case 17:for(;h<14;){if(0===a)break e;a--,l+=n[s++]<>>=5,h-=5,i.ndist=1+(31&l),l>>>=5,h-=5,i.ncode=4+(15&l),l>>>=4,h-=4,i.nlen>286||i.ndist>30){e.msg=\"too many length or distance symbols\",i.mode=Ob;break}i.have=0,i.mode=18;case 18:for(;i.have>>=3,h-=3}for(;i.have<19;)i.lens[S[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,k={bits:i.lenbits},C=Ib(0,i.lens,0,19,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg=\"invalid code lengths set\",i.mode=Ob;break}i.have=0,i.mode=19;case 19:for(;i.have>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<>>=m,h-=m,i.lens[i.have++]=b;else{if(16===b){for(I=m+2;h>>=m,h-=m,0===i.have){e.msg=\"invalid bit length repeat\",i.mode=Ob;break}A=i.lens[i.have-1],f=3+(3&l),l>>>=2,h-=2}else if(17===b){for(I=m+3;h>>=m,h-=m,A=0,f=3+(7&l),l>>>=3,h-=3}else{for(I=m+7;h>>=m,h-=m,A=0,f=11+(127&l),l>>>=7,h-=7}if(i.have+f>i.nlen+i.ndist){e.msg=\"invalid bit length repeat\",i.mode=Ob;break}for(;f--;)i.lens[i.have++]=A}}if(i.mode===Ob)break;if(0===i.lens[256]){e.msg=\"invalid code -- missing end-of-block\",i.mode=Ob;break}if(i.lenbits=9,k={bits:i.lenbits},C=Ib(1,i.lens,0,i.nlen,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg=\"invalid literal/lengths set\",i.mode=Ob;break}if(i.distbits=6,i.distcode=i.distdyn,k={bits:i.distbits},C=Ib(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,k),i.distbits=k.bits,C){e.msg=\"invalid distances set\",i.mode=Ob;break}if(i.mode=20,t===Nb)break e;case 20:i.mode=21;case 21:if(a>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,yb(e,u),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,i.mode===Pb&&(i.back=-1);break}for(i.back=0;_=i.lencode[l&(1<>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,i.length=b,0===w){i.mode=26;break}if(32&w){i.back=-1,i.mode=Pb;break}if(64&w){e.msg=\"invalid literal/length code\",i.mode=Ob;break}i.extra=15&w,i.mode=22;case 22:if(i.extra){for(I=i.extra;h>>=i.extra,h-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;_=i.distcode[l&(1<>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,64&w){e.msg=\"invalid distance code\",i.mode=Ob;break}i.offset=b,i.extra=15&w,i.mode=24;case 24:if(i.extra){for(I=i.extra;h>>=i.extra,h-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg=\"invalid distance too far back\",i.mode=Ob;break}i.mode=25;case 25:if(0===c)break e;if(f=u-c,i.offset>f){if(f=i.offset-f,f>i.whave&&i.sane){e.msg=\"invalid distance too far back\",i.mode=Ob;break}f>i.wnext?(f-=i.wnext,p=i.wsize-f):p=i.wnext-f,f>i.length&&(f=i.length),g=i.window}else g=r,p=o-i.offset,f=i.length;f>c&&(f=c),c-=f,i.length-=f;do{r[o++]=g[p++]}while(--f);0===i.length&&(i.mode=21);break;case 26:if(0===c)break e;r[o++]=i.length,c--,i.mode=21;break;case 27:if(i.wrap){for(;h<32;){if(0===a)break e;a--,l|=n[s++]<$b(e,15),inflateInit2:$b,inflate:Zb,inflateEnd:e=>{if(!e||!e.state)return Rb;let t=e.state;return t.window&&(t.window=null),e.state=null,Bb},inflateGetHeader:(e,t)=>{if(!e||!e.state)return Rb;const i=e.state;return 2&i.wrap?(i.head=t,t.done=!1,Bb):Rb},inflateSetDictionary:(e,t)=>{const i=t.length;let n,r,s;return e&&e.state?(n=e.state,0!==n.wrap&&11!==n.mode?Rb:11===n.mode&&(r=1,r=hb(r,t,i,0),r!==n.check)?Tb:(s=Xb(e,t,i,i),s?(n.mode=31,Lb):(n.havedict=1,Bb))):Rb},inflateInfo:\"pako inflate (from Nodeca project)\"};var eF=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1},tF=Object.prototype.toString,{Z_NO_FLUSH:iF,Z_FINISH:nF,Z_OK:rF,Z_STREAM_END:sF,Z_NEED_DICT:oF,Z_STREAM_ERROR:aF,Z_DATA_ERROR:cF,Z_MEM_ERROR:lF}=pb;function hF(e){this.options=mb.assign({chunkSize:65536,windowBits:15,to:\"\"},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new vb,this.strm.avail_out=0;let i=Jb.inflateInit2(this.strm,t.windowBits);if(i!==rF)throw new Error(fb[i]);if(this.header=new eF,Jb.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=Fb.string2buf(t.dictionary):\"[object ArrayBuffer]\"===tF.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=Jb.inflateSetDictionary(this.strm,t.dictionary),i!==rF)))throw new Error(fb[i])}function dF(e,t){const i=new hF(t);if(i.push(e),i.err)throw i.msg||fb[i.err];return i.result}hF.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,r=this.options.dictionary;let s,o,a;if(this.ended)return!1;for(o=t===~~t?t:!0===t?nF:iF,\"[object ArrayBuffer]\"===tF.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),s=Jb.inflate(i,o),s===oF&&r&&(s=Jb.inflateSetDictionary(i,r),s===rF?s=Jb.inflate(i,o):s===cF&&(s=oF));i.avail_in>0&&s===sF&&i.state.wrap>0&&0!==e[i.next_in];)Jb.inflateReset(i),s=Jb.inflate(i,o);switch(s){case aF:case cF:case oF:case lF:return this.onEnd(s),this.ended=!0,!1}if(a=i.avail_out,i.next_out&&(0===i.avail_out||s===sF))if(\"string\"===this.options.to){let e=Fb.utf8border(i.output,i.next_out),t=i.next_out-e,r=Fb.buf2string(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(r)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(s!==rF||0!==a){if(s===sF)return s=Jb.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},hF.prototype.onData=function(e){this.chunks.push(e)},hF.prototype.onEnd=function(e){e===rF&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=mb.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var uF=function(e,t){return(t=t||{}).raw=!0,dF(e,t)},fF={Inflate:hF,inflate:dF,inflateRaw:uF,ungzip:dF,constants:pb},{Inflate:pF,inflate:gF,inflateRaw:mF,ungzip:wF}=fF,bF=gF,FF=wF;var vF=new Map([[1,function(e,t){let i=new Uint8Array(e);return bF(i).buffer}],[2,function(e,t){let i=e.byteLength,n=new Uint8Array(i),r=Math.floor(i/t),s=new DataView(e);for(var o=0;oHH\",e,i);if(c%=65535,r!=(a%=65535)||s!=c)throw'ValueError(\"fletcher32 checksum invalid\")'}(e),e.slice(0,-4)}]]),yF=class{constructor(e,t){this.fh=e,this.offset=t,this.depth=null}async init(){this.all_nodes=new Map,await this._read_root_node(),await this._read_children()}async _read_children(){let e=this.depth;for(;e>0;){for(var t of this.all_nodes.get(e))for(var i of t.get(\"addresses\"))this._add_node(await this._read_node(i,e-1));e--}}async _read_root_node(){let e=await this._read_node(this.offset,null);this._add_node(e),this.depth=e.get(\"node_level\")}_add_node(e){let t=e.get(\"node_level\");this.all_nodes.has(t)?this.all_nodes.get(t).push(e):this.all_nodes.set(t,[e])}async _read_node(e,t){let i=await this._read_node_header(e,t);return i.set(\"keys\",[]),i.set(\"addresses\",[]),i}async _read_node_header(e){throw\"NotImplementedError: must define _read_node_header in implementation class\"}},AF=class extends yF{constructor(){super(...arguments),zw(this,\"B_LINK_NODE\",new Map([[\"signature\",\"4s\"],[\"node_type\",\"B\"],[\"node_level\",\"B\"],[\"entries_used\",\"H\"],[\"left_sibling\",\"Q\"],[\"right_sibling\",\"Q\"]]))}async _read_node_header(e,t){let i=await Hw(this.B_LINK_NODE,this.fh,e);if(null!=t&&i.get(\"node_level\")!=t)throw\"node level does not match\";return i}},CF=class extends AF{constructor(e,t){super(e,t),zw(this,\"NODE_TYPE\",0),this.ready=this.init()}async _read_node(e,t){let i=await this._read_node_header(e,t);e+=Uw(this.B_LINK_NODE);let n=[],r=[],s=i.get(\"entries_used\");for(var o=0;o=0&&F[A]>=e[A];A--)F[A]=0,b[A]=w[A],A>0&&(F[A-1]+=1,b[A-1]+=1);if(b.slice(0,-1).every((function(e,i){return e=0;o--){if(t&1<0?r*=n:r=n}}return s}_nrecords_max(e,t,i){return Math.floor((e-10-i)/(t+i))}_required_bytes(e){return Math.ceil(Gw(e)/8)}_int_format(e){return[\"0&&(h=(await jw.unpack_from_async(a,this.fh,i))[0],i+=r),c.push([n,l,h])}}return s.set(\"keys\",a),s.set(\"addresses\",c),s}async _read_node_header(e,t){let i=await Hw(this.B_LINK_NODE,this.fh,e);return i.set(\"node_level\",t),i}*iter_records(){for(let e of this.all_nodes.values())for(let t of e)for(let e of t.get(\"keys\"))yield e}_parse_record(e){throw\"NotImplementedError\"}},kF=class extends xF{constructor(){super(...arguments),zw(this,\"NODE_TYPE\",5)}async _parse_record(e,t,i){let n=(await jw.unpack_from_async(\"0)throw\"Filter info size not supported on FractalHeap\";if(t.get(\"btree_address_huge_objects\")!=RF)throw\"Huge objects not implemented in FractalHeap\";t.set(\"btree_address_huge_objects\",null),t.get(\"root_block_address\")==RF&&t.set(\"root_block_address\",null);let i=t.get(\"log2_maximum_heap_size\"),n=this._min_size_nbits(i),r=new Map([[\"signature\",\"4s\"],[\"version\",\"B\"],[\"heap_header_adddress\",\"Q\"],[\"block_offset\",`${n}B`]]);this.indirect_block_header=new Map(r),this.indirect_block_header_size=Uw(r),2&~t.get(\"flags\")||r.set(\"checksum\",\"I\"),this.direct_block_header=r,this.direct_block_header_size=Uw(r);let s=t.get(\"maximum_direct_block_size\");this._managed_object_offset_size=this._min_size_nbits(i);let o=Math.min(s,t.get(\"max_managed_object_size\"));this._managed_object_length_size=this._min_size_integer(o);let a=t.get(\"starting_block_size\"),c=t.get(\"table_width\");if(!(a>0))throw\"Starting block size == 0 not implemented\";let l=Number(Math.floor(Math.log2(s)));Ow(1n<0)for await(let e of this._iter_indirect_block(this.fh,f,p))u.push(e);else{let e=await this._read_direct_block(this.fh,f,a);u.push(e)}let g=u.reduce(((e,t)=>e+t.byteLength),0),m=new Uint8Array(g),w=0;u.forEach((e=>{m.set(new Uint8Array(e),w),w+=e.byteLength})),this.managed=m.buffer}async _read_direct_block(e,t,i){let n=await e.slice(t,t+i);return Ow(\"FHDB\"==Pw(this.direct_block_header,n).get(\"signature\")),n}get_data(e){let t=jw.unpack_from(\">4&3,n=1;if(0==i){Ow(0==t>>6);let i=this._managed_object_offset_size,r=$w(i,e,n);n+=i,i=this._managed_object_length_size;let s=$w(i,e,n);return this.managed.slice(r,r+s)}throw 1==i?\"tiny objectID not supported in FractalHeap\":2==i?\"huge objectID not supported in FractalHeap\":\"unknown objectID type in FractalHeap\"}_min_size_integer(e){return this._min_size_nbits(Gw(e))}_min_size_nbits(e){return Math.ceil(e/8)}async*_iter_indirect_block(e,t,i){let n=await Hw(this.indirect_block_header,e,t);t+=this.indirect_block_header_size,Ow(\"FHIB\"==n.get(\"signature\"));let r=n.get(\"block_offset\").reduce(((e,t,i)=>e+(t<<8*i)),0);n.set(\"block_offset\",r);let[s,o]=this._indirect_info(i),a=[];for(let i=0;ithis._chunks))}get shape(){let e=this.find_msg_type(yv)[0].get(\"offset_to_message\");return async function(e,t){let i=(await jw.unpack_from_async(\"255&&(s=(await jw.unpack_from_async(\"0;e.set(\"optional\",a);let c,l=(await jw.unpack_from_async(\"0&&(c=(await jw.unpack_from_async(`${s}s`,i,t))[0],t+=s),e.set(\"name\",c);let h=await jw.unpack_from_async(`<${l}i`,i,t);t+=4*l,e.set(\"client_data_values\",h),r.push(e)}}return this._filter_pipeline=r,this._filter_pipeline}find_msg_type(e){return this.msgs.filter((function(t){return t.get(\"type\")==e}))}async get_attributes(){let e={},t=this.find_msg_type(Sv);for(let i of t){let t=i.get(\"offset_to_message\"),[n,r]=await this.unpack_attribute(t);e[n]=r}return e}async get_fillvalue(){var e,t=this.find_msg_type(_v)[0].get(\"offset_to_message\");let i=(await jw.unpack_from_async(\"=r&&([s,r]=a[++c],l=0);let t=await Hw(cv,e,s+l),i=s+l+lv;if(t.set(\"offset_to_message\",i),t.get(\"type\")==Ev){var[u,f]=await jw.unpack_from_async(\"=o-dv){let e=c[++l];if(null==e)break;[r,o]=e,h=0}let t=await Hw(hv,e,r+h),i=r+h+dv+n;if(t.set(\"offset_to_message\",i),t.get(\"type\")==Ev){var[d,u]=await jw.unpack_from_async(\"0,c=(4&n)>0;(8&n)>0?(r=(await jw.unpack_from_async(\"0&&(t+=8);let r=(2&n)>0?pv:fv,s=await Hw(r,e,t),o=new Map;for(let[e,t]of s.entries())o.set(e,t==YF?null:t);return o}get is_dataset(){return this.find_msg_type(yv).length>0}async get_data(){let e=this.find_msg_type(kv)[0].get(\"offset_to_message\");var[t,i,n,r]=await this._get_data_message_properties(e);if(0==n)throw\"Compact storage of DataObject not implemented\";return 1==n?this._get_contiguous_data(r):2==n?this._get_chunked_data(e):void 0}async _get_data_message_properties(e){let t,i,n,[r,s,o]=await jw.unpack_from_async(\"=1&&r<=4),[r,t,i,n]}async _get_contiguous_data(e){let[t]=await jw.unpack_from_async(\"=!@\\|]?(i|u|f|S)(\\d*)/.test(n)){let[e,i,s]=Qw(n),a=new Array(r);const c=await this.fh.slice(t,t+s*r);let l=new Ww(c);for(var o=0;o=1&&t<=3);var a=\"<\"+(i-1).toFixed()+\"I\",c=await jw.unpack_from_async(a,this.fh,s);this._chunks=c,this._chunk_dims=i,this._chunk_address=o}}}};var YF=jw.unpack_from(\"this.get(e)))}length(){return this.keys.length}_dereference(e){if(!e)throw\"cannot deference null reference\";let t=this.file._get_object_by_address(e);if(null==t)throw\"reference not found in file\";return t}async get(e){if(\"number\"==typeof e)return this._dereference(e);var t=Rv(e);if(\"/\"==t)return this.file;if(\".\"==t)return this;if(/^\\//.test(t))return this.file.get(t.slice(1));if(\"\"!=function(e){let t=\"/\",i=e.lastIndexOf(t)+1,n=e.slice(0,i),r=new RegExp(\"^\"+t+\"+$\"),s=new RegExp(t+\"$\");n&&!r.test(n)&&(n=n.replace(s,\"\"));return n}(t))var[i,n]=t.split(/\\/(.*)/);else var i=t,n=\".\";if(!(i in this._links))throw i+\" not found in group\";var r=Rv(this.name+\"/\"+i);let s=this._links[i];if(\"string\"==typeof s)try{return this.get(s)}catch(e){return null}var o=new KF(this.file._fh,s);if(await o.ready,o.is_dataset){if(\".\"!=n)throw r+\" is a dataset, not a group\";return new Dv(r,o,this)}var a=new Bv(r,this);return await a.init(o),a.get(n)}visit(e){return this.visititems(((t,i)=>e(t)))}visititems(e){var t=this.name.length;/\\/$/.test(this.name)||(t+=1);for(var i=this.values.slice();i;){let n=i.shift();1==i.length&&console.log(n);let r=e(n.name.slice(t),n);if(null!=r)return r;n instanceof Bv&&(i=i.concat(n.values))}return null}get attrs(){return null==this._attrs&&(this._attrs=this._dataobjects.get_attributes()),this._attrs}},Mv=class extends Bv{constructor(e,t,i){super(\"/\",null),this.ready=this.init(e,t,i)}async init(e,t,i){var n=new SF(e,0);await n.ready;var r=await n.get_offset_to_dataobjects(),s=new KF(e,r);if(await s.ready,this.parent=this,this.file=this,this.name=\"/\",this._dataobjects=s,this._attrs=null,this._keys=null,this._fh=e,this.filename=t||\"\",this.mode=\"r\",this.userblock_size=0,i&&i.index)this.index=i.index;else{let t;if(i&&i.indexOffset)t=i.indexOffset;else{const e=await this.attrs;if(e.hasOwnProperty(\"_index_offset\"))t=e._index_offset;else{const e=this.indexName||\"_index\",i=await s.find_link(e);i&&(t=i[1])}}if(t)try{const i=new KF(e,t);await i.ready;const n=await i.get_data(),r=FF(n),s=(new TextDecoder).decode(r);this.index=JSON.parse(s)}catch(e){console.error(`Error loading index by offset ${e}`)}}this.index&&this.name in this.index?this._links=this.index[this.name]:this._links=await s.get_links()}_get_object_by_address(e){return this._dataobjects.offset==e?this:this.visititems((e=>{e._dataobjects.offset}))}},Dv=class extends Array{constructor(e,t,i){super(),this.parent=i,this.file=i.file,this.name=e,this._dataobjects=t,this._attrs=null,this._astype=null}get value(){var e=this._dataobjects.get_data();return null==this._astype?this.getValue(e):e.astype(this._astype)}get shape(){return this._dataobjects.shape}get attrs(){return this._dataobjects.get_attributes()}get dtype(){return this._dataobjects.dtype}get fillvalue(){return this._dataobjects.get_fillvalue()}async to_array(){return function(e,t){const i=e.length,n=t.reduce(((e,t)=>e*t),1);i!==n&&console.warn(`shape product: ${n} does not match length of flattened array: ${i}`);let r=e;const s=t.slice(1).reverse();for(let e of s){const t=[],{length:i}=r;let n=0;for(;n{let t=e.indexOf(\"\\0\");return t>=0?e.substring(0,t):e})):e}};function Rv(e){return e.replace(/\\/(\\/)+/g,\"/\")}async function Tv(e){var t;e.url&&(\"function\"==typeof(t=e.url).slice&&\"function\"==typeof t.arrayBuffer)&&(e.file=e.url,e.url=void 0);const i=void 0!==e.url;let n=e.reader?e.reader:function(e){if(e.url)return new Mw(e);if(e.path)return new NodeLocalFile(e);if(e.file)return new Tw(e.file);throw Error(\"One of 'url', 'path (node only)', or 'file (browser only)' must be specified\")}(e);const r=e.fetchSize||2e3,s=e.maxSize||2e5;i&&(n=new Dw({file:n,fetchSize:r,maxSize:s}));const o=new Lv(n),a=await async function(e){let t;if(e.indexReader)t=e.indexReader;else{if(e.index)return e.index;e.indexURL?t=new Mw({url:e.indexURL}):e.indexPath?t=new NodeLocalFile({path:e.indexPath}):e.indexFile&&(t=new Tw({file:e.indexFile}))}if(t){const e=await t.read(),i=(new TextDecoder).decode(e);return JSON.parse(i)}return}(e),c=e.indexOffset,l=function(e){if(e.url)return zv(e.url);if(e.path)return zv(e.path);if(e.file)return e.file.name}(e),h=new Mv(o,l,{index:a,indexOffset:c});return await h.ready,h}class Lv{constructor(e){this.fileReader=e}async slice(e,t){return this.fileReader.read(e,t-e)}}function zv(e){const t=e.lastIndexOf(\"/\");return t>0?e.substring(t+1):e}class Hv{constructor(e,t){this.chrom=e,this.signal_bin_size=t;this.signals={raw_RD:`his_rd_p_${this.chrom}_${this.signal_bin_size}`,gc_RD:`his_rd_p_${this.chrom}_${this.signal_bin_size}_GC`,gc_partition:`his_rd_p_${this.chrom}_${this.signal_bin_size}_partition_GC_merge`,baf:`snp_likelihood_${this.chrom}_${this.signal_bin_size}_mask`,baf_i1:`snp_i1_${this.chrom}_${this.signal_bin_size}_mask`,Mosaic_segments:`his_rd_p_${this.chrom}_${this.signal_bin_size}_partition_GC_mosaic_segments_2d`,Mosaic_calls:`his_rd_p_${this.chrom}_${this.signal_bin_size}_partition_GC_mosaic_call_2d`}}}class Pv{constructor(e,t=1e5){this.h5_file=e,this.bin_size=t,this.h5_obj=void 0}async fetch(){return this.h5_obj||(this.h5_obj=await Tv({url:this.h5_file,fetchSize:1e6,maxSize:2e8})),this.h5_obj}async get_keys(){return(await this.fetch()).keys}async get_rd_signal(e=this.bin_size){let t=await this.fetch();this.h5_obj=t,this.pytor_keys=t.keys;let i=new Ov(this.pytor_keys),n=i.get_rd_bins(),r=i.get_snp_bins();this.available_bins=[...new Set(n,r)],this.available_bins.includes(e)||(e=this.available_bins.at(-1));const s=await t.get(\"rd_chromosomes\");await s.dtype;let o=await s.value,a=await this.rd_stat(e);var c=[],l=[],h=[],d=[],u=[],f=[];for(let t of o){let i=new Hv(t,e);var p=i.signals.raw_RD;let n=await this.get_chr_signal(t,e,p,a);c=c.concat(n);var g=i.signals.gc_RD;let r=await this.get_chr_signal(t,e,g,a);l=l.concat(r);let s=i.signals.gc_partition,o=await this.get_chr_signal(t,e,s,a);h=h.concat(o);let m=await this.rd_call_combined(t,e,a,i);d=d.concat(m);let w=i.signals.baf_i1,b=await this.get_baf_signals_v2(t,e,w);u=u.concat(b[0]),f=f.concat(b[1])}this.callers=[],0!=d.length&&this.callers.push(\"ReadDepth\"),0!=d.length&&this.callers.push(\"2D\");var m={},w={RD_Raw:c,RD_Raw_gc_coor:l,ReadDepth:h,\"2D\":d,BAF1:u,BAF2:f};return m[e]=w,m}decode_segments(e){let t=[],i=[];for(let n of e)4294967295==n?(t.push(i),i=[]):i.push(n);return t}async rd_call_combined(e,t,i,n){let r,s=[],o=n.signals.Mosaic_segments;if(this.pytor_keys.includes(o)){const e=await this.h5_obj.get(o);let t=await e.value;r=this.decode_segments(t)}let a=n.signals.Mosaic_calls;if(this.pytor_keys.includes(a)){const n=await this.h5_obj.get(a);let o=await n.to_array();r.forEach(((n,r)=>{n.forEach(((n,a)=>{s.push({chr:e,start:n*t,end:(n+1)*t,value:o[0][r]/i[4]*2})}))}))}return s}async rd_stat(e){let t,i=`rd_stat_${e}_auto`;if(this.pytor_keys.includes(i)){const e=await this.h5_obj.get(i);t=await e.value}return t}async get_chr_signal(e,t,i,n){let r=[];if(this.pytor_keys.includes(i)){const s=await this.h5_obj.get(i);(await s.value).forEach(((i,s)=>{r.push({chr:e,start:s*t,end:(s+1)*t,value:i/n[4]*2})}))}return r}async get_baf_signals(e,t,i,n=-1){let r=[],s=[];if(this.pytor_keys.includes(i)){let o=await this.h5_obj.get(i);(await o.to_array()).forEach(((i,o)=>{let a=Math.max(...i);const c=i.indexOf(a);let l=Math.max(c/200,1-c/200);r.push({chr:e,start:o*t,end:(o+1)*t,value:n*l}),.5!=l&&s.push({chr:e,start:o*t,end:(o+1)*t,value:n*(1-l)})}))}return[r,s]}async get_baf_signals_v2(e,t,i,n=-1){let r=[],s=[];if(this.pytor_keys.includes(i)){let o=await this.h5_obj.get(i);(await o.to_array()).forEach(((i,o)=>{isNaN(i)||(r.push({chr:e,start:o*t,end:(o+1)*t,value:n*(.5-i)}),.5!=i&&s.push({chr:e,start:o*t,end:(o+1)*t,value:n*(.5+i)}))}))}return[r,s]}}class Ov{constructor(e){this.signals=e}get_rd_bins(){let e=[];this.signals.forEach((t=>{let i=t.match(/^his_rd_p_(.*)_(\\d+)$/);i&&e.push({chr:i[1],bin_size:i[2]})}));return[...new Set(e.map((e=>Number(e.bin_size))))]}get_snp_bins(){let e=[];this.signals.forEach((t=>{let i=t.match(/^snp_likelihood_(.*)_(\\d+)_mask$/);i&&e.push({chr:i[1],bin_size:i[2]})}));return[...new Set(e.map((e=>Number(e.bin_size))))]}}function Uv(e){let t=function(e){if(e.length<4)return e;let t,i,n,r,s,o;return t=e.slice().sort(((e,t)=>e-t)),t.length/4%1==0?(i=.5*(t[t.length/4]+t[t.length/4+1]),n=.5*(t[t.length*(3/4)]+t[t.length*(3/4)+1])):(i=t[Math.floor(t.length/4+1)],n=t[Math.ceil(t.length*(3/4)+1)]),r=n-i,s=n+1.5*r,o=i-1.5*r,t.filter((e=>e>=o&&e<=s))}(e);const i=t.length,n=t.reduce(((e,t)=>e+t))/i,r=Math.sqrt(t.map((e=>Math.pow(e-n,2))).reduce(((e,t)=>e+t))/i);return[n,r]}var qv={range_function:function(e,t,i){return Array(Math.ceil((t-e)/i)).fill(e).map(((e,t)=>e+t*i))},getDistParams:Uv,linspace:function(e,t,i){if(void 0===i&&(i=Math.max(Math.round(t-e)+1,1)),i<2)return 1===i?[e]:[];var n=Array(i);for(let r=--i;r>=0;r--)n[r]=(r*t+(i-r)*e)/i;return n},GetFit:class{constructor(e){this.allBins=e}getValues(){return Object.values(this.allBins).reduce(((e,t)=>e.concat(t.filter((e=>e.binScore>0)).map((e=>e.binScore)))),[])}getMean(e){return e.reduce((function(e,t){return e+t}))/e.length}fit_data(){return Uv(this.getValues())}histogram(e,t){const i=t[1]-t[0],n=[];e.forEach(((e,r)=>{t.forEach(((t,r)=>{if(n[t]||(n[t]={count:0}),t<=e&&e{r.push(e.count)})),r}}};function Vv(e,t){return isNaN(e)||isNaN(t)||t<=0?NaN:0===e?.5:.5+.5*(Qv(.5*t,.5,1)-Qv(.5*t,.5,t/(t+e*e)))*Math.sign(e)}function Qv(e,t,i){if(0==i)return 0;if(1==i)return 1;{let n=$v(e+t)-$v(e)-$v(t)+e*Math.log(i)+t*Math.log(1-i);return i<(e+1)/(e+t+2)?Math.exp(n)*jv(e,t,i)/e:1-Math.exp(n)*jv(t,e,1-i)/t}}function jv(e,t,i,n=1e3){let r=1,s=1,o=1,a=e+t,c=e+1,l=e-1,h=1-a*i/c;for(let d=0;d<=n;d++){let n=parseFloat(d+1),u=n+n,f=n*(t-n)*i/((l+u)*(e+u)),p=r+f*s,g=h+f*o;f=-(e+n)*(a+n)*i/((c+u)*(e+u));let m=g+f*h,w=r;if(s=p/m,o=g/m,r=(p+f*r)/m,h=1,Math.abs(r-w)<3e-7*Math.abs(r))return r}}function Wv(e){if(0==e||1==e)return 1;return e*Wv(e-1)}function Gv(e){let t;var i=[75122.633153,80916.6278952,36308.2951477,8687.24529705,1168.92649479,83.8676043424,2.50662827511],n=0,r=1;if(0==e)t=1e99;else if(e%1==0)t=Wv(e-1);else{for(let t=0;tt?e:t}))}function Xv(e,t,i,n){return t*Math.exp(-1*(e-i)**2/(2*n**2))/Math.sqrt(2*Math.PI)/n}function Zv(e,t,i,n){return Math.exp(-1*(e-i)**2/(t**2+n**2))}function Jv(e,t){let i;try{i=e.reduce(((e,i,n)=>e+Math.min(i,t[n])))}catch{return console.log(\"Failed to find likelihood overlap: \",e,t),0}return i}function ey(e,t,i,n){return 0==t&&0==n?{nl:.5*(e+i),ne:0}:{nl:(e*n*n+i*t*t)/(t*t+n*n),ne:Math.sqrt(t*t*n*n/(t*t+n*n))}}function ty(e,t){let i=parseInt(t*(e.length-1)),n=t*(e.length-1)-i;return iMath.floor(t/2)&&(n=t-1-n);const r=(t/2-n)/(t+1),s=Math.floor((t/2+n)/2),o=t-1-s;let a=e.slice(s,o+1).reduce(((e,t)=>e+t),0)/e.reduce(((e,t)=>e+t),0);return n===Math.floor(t/2)&&(a=1),{mean:r,p:a}}var ny=class{constructor(e,t){this.wigFeatures=e,this.binSize=t}get_fit(){var e=new qv.GetFit(this.wigFeatures),[t,i]=e.fit_data();return{globalMean:t,globalStd:i}}async call_2d(e=null,t=null,i=\"both\",n=.1,r=0,s=10,o=0){let a=this.get_fit();this.globalMean=a.globalMean,this.globalStd=a.globalStd;let c=null==e?.05*this.binSize/3e9:e,l=null==t?parseInt(this.binSize/1e4):t,h=[],d=[],u=[],f=[],p=[],g=[];for(const[e,t]of Object.entries(this.wigFeatures)){let e=[],i=[],s=[];t.forEach(((t,n)=>{t.hets_count>4&&t.dp_count>l&&(e.push([n]),i.push(t.binScore),s.push(t.likelihood_score),delete t.likelihood_score)}));let o=[];for(let e=1;eMath.sqrt(Math.sqrt(e)**2+this.globalStd**2+Math.pow(a[t]/2,2)))),m=[];for(let t=0;t0;){m=m.filter((e=>\"number\"==typeof e));let t=Yv(m);if(isNaN(t)&&console.log(\"NaN value\",m),te*s[o+1][t])),r=n.reduce(((e,t)=>e+t))}catch{console.log(s),console.log(\"max_overlap:\",t,o,m.length),console.log(\"likelihood: \",o,s[o],s[o+1]),console.log(\"nlh: \",r)}if(i[o]=a.nl,g[o]=a.ne,s[o]=n.map((function(e){return e/r})),e[o].push(...e[o+1]),i.splice(o+1,1),g.splice(o+1,1),e.splice(o+1,1),s.splice(o+1,1),m.splice(o,1),o0){let e=Zv(i[o-1],g[o-1],i[o],g[o])*Jv(s[o-1],s[o]);m[o-1]=e}}let w=-1;for(;;){m=[];for(let t=0;te*s[r+1][t])),a=n.reduce(((e,t)=>e+t));s[r]=n.map((function(e){return e/a})),e[r].push(...e[r+1]),e[r]=e[r].sort(((e,t)=>e-t)),i.splice(o,1),g.splice(o,1),e.splice(o,1),s.splice(o,1),o>=e.length&&(r+=1,o=r+1)}else o+=1,o>=e.length&&(r+=1,o=r+1)}if(w==e.length)break;w=e.length}e.forEach(((e,n)=>{let o=iy(s[n]);e.length>1&&(e.forEach(((e,s)=>{d.push(t[e]),o.mean<=r&&h.push(t[e]),t[e].segment_score=i[n]})),u.push(i[n]),f.push(g[n]),p.push(s[n]))}))}let m=parseInt(1e3*(1-o));0==m&&(m=1);let w=qv.linspace(o,1,m),b={},F={};for(let e=10;e>-1;e--)for(let t=0;t1-t+t*e/2)),a=e/2;e>0?(n=.5-t/(t+s),r=w.map(((e,i)=>.5-(1-e+e*t)/(2-2*e+(t+s)*e)))):(n=0,r=w.map(((e,t)=>0*e)));for(let i=0;i{if(!isNaN(r[t])){let n=Xv(e*this.globalMean,1,u[i],f[i])*ty(p[i],.5+r[t]);l+=n,n>h&&(h=n,d=w[t])}})),i in b?b[i].push([e,t,s,l/w.length,d]):b[i]=[e,t,s,l/w.length,d]}for(let e=0;ee[3]-t[3]));else if(b[e].sort(((e,t)=>e[3]-t[3])),\"both\"==i&&(F[e].sort(((e,t)=>e[3]-t[3])),F[e][0][3]>b[e][0][3])){let t=b[e].filter((t=>t[0]!=F[e][0][0]&&t[1]<=F[e][0][1]));b[e]=[F[e][0]].push(...t)}for(let e=0;e{var r={...e};1!=i&&(r.value=e[t]/i*2),n.push(r)}));return n}formatDataStructure_BAF(e,t=-1){const i=[],n=[];for(const[r,s]of Object.entries(this.wigFeatures))s.forEach((r=>{var s={...r},o={...r};let a=r[e];.5!=a&&(o.value=t*(1-a),n.push(o)),s.value=t*a,i.push(s)}));return[i,n]}};const ry=2871e6;function sy(e){for(var t=1,i=1,n=1*e,r=1;r<50;r++)t*=r,n+=(i*=-1)*Math.pow(e,2*r+1)/(t*(2*r+1));return 2*n/Math.sqrt(3.14159265358979)}function oy(e,t,i,n,r){var s=new ly(i.slice(n,r));return 0==s.std&&(s.std=t>0?t*s.mean/e:1),hy(e,s.mean,s.std,r-n)/(r-n)}function ay(e,t,i,n,r){var s=new ly(i.slice(n,r));if(s.means&!l&c0&&(h=oy(e,t,i,n-1,r)),r-n>2)var d=oy(e,t,i,n+1,r),u=oy(e,t,i,n,r-1);if(re+t))/e.length,this.std=Math.sqrt(e.reduce(((e,t)=>(t-this.mean)**2))/e.length)}}function hy(e,t,i,n){0==i&&(i=1);var r=(e-t)/i*Math.sqrt(n);return 1-Kv.TdistributionCDF(Math.abs(r),n-1)}function dy(e,t,i,n,r,s){0==t&&(t=1),0==r&&(r=1);var o=(e-n)/Math.sqrt(t**2/i+r**2/s),a=(t**2/i+r**2/s)**2*(i-1)*(s-1)/(t**4*(s-1)/i**2+r**4*(i-1)/s**2);return 1-Kv.TdistributionCDF(Math.abs(o),parseInt(a+.5))}var uy=class{constructor(e,t,i){this.rd=e,this.mean=t,this.std=i,this.bin_bands=[2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128]}get_rd_signal_bandwidth(e){var t=[];return e.forEach(((e,i)=>{var n=0;n=e>this.mean/4?this.mean/(this.std**2*e):4/this.std**2,t.push(n)})),t}meanShiftCaller(e,t=3){var i={};return Object.entries(this.rd).forEach((([e,n])=>{var r=new Array(n.length).fill(!1),s=new Array(n.length);for(let e=0;e{var o=r.map(((e,t)=>!e)),a=[];Object.entries(n).forEach((([e,t])=>{a.push(t.binScore)}));var c=[0],l=0;for(let e=0;e0&&(c.push(c[c.length-1]+l-1),l=0):l+=1;c.shift();for(let i=0;i=a.length||Math.abs(t-i)>=a.length)){var u=(i-t)*Math.exp(-.5*(i-t)**2/e**2)*Math.exp(-.5*(a[t]-a[i])**2*h[t]);d[t]+=u}for(var f=new Array,p=0;p=0&&f.push(p);f.push(d.length-1),f=f.concat(c).sort(((e,t)=>e-t)),f=Array.from(new Set(f));var g=0;for(p=0;pe+t))/m.length;a.fill(w,g,f[p]+1),g=f[p]+1}}p=0;for(var b=0;p.01&&f.push(p+1)}f.unshift(0),f.push(s.length),r=new Array(this.rd.length).fill(!1);for(p=1;p1))continue;v[0]=f[p-2];var y=[f[p],f[p]];if(!(p.01/ry*bin_size*(A+C))continue;if(dy(x.mean,x.std,x.data.length,N.mean,N.std,N.data.length)>.01/ry*bin_size*(A+_))continue}if(hy(this.mean,x.mean,x.std,x.data.length)>.05)continue;let e=a.slice(F[0],F[1]);var B=new ly(e);r.fill(!0,F[0],F[1]),s.fill(B.mean,F[0],F[1])}})),i[e]=s})),i}call_mean_shift(e=3){for(var t=new Array(this.rd.length).fill(!1),i=new Array(this.rd.length),n=0;n{var s=t.map(((e,t)=>!e)),o=[];s.forEach(((e,t)=>{e&&o.push(this.rd[t])}));for(var a=[0],c=0,l=0;l0&&(a.push(a[a.length-1]+c-1),c=0):c+=1;a.shift();for(var h=0;h=o.length||Math.abs(l-f)>=o.length)){var p=(f-l)*Math.exp(-.5*(f-l)**2/n**2)*Math.exp(-.5*(o[l]-o[f])**2*d[l]);u[l]+=p}var g=new Array;for(l=0;l=0&&g.push(l);g.push(u.length-1),g=g.concat(a).sort(((e,t)=>e-t)),g=Array.from(new Set(g));var m=0;for(l=0;le+t))/w.length;o.fill(b,m,g[l]+1),m=g[l]+1}}for(l=0,f=0;l.01&&g.push(l+1)}g.unshift(0),g.push(i.length),t=new Array(this.rd.length).fill(!1);for(l=1;l1){v[0]=g[l-2];var y=[g[l],g[l]];if(l3.483106931382794e-9*(A+C))continue;if(dy(x.mean,x.std,x.data.length,N.mean,N.std,N.data.length)>3.483106931382794e-9*(A+_))continue}if(!(hy(this.mean,x.mean,x.std,x.data.length)>.05)){var B=new ly(this.rd.slice(F[0],F[1]));t.fill(!0,F[0],F[1]),i.fill(B.mean,F[0],F[1])}}}}}})),i}cnv_calling(e=1e5){var t=.25*this.mean,i=this.mean-t,n=this.mean+t,r=2971e6,s=this.meanShiftCaller(e),o={},a=[];return Object.entries(s).forEach((([c,l])=>{for(var h=!1;!h;){h=!0;var d=new Array(1).fill(0);for(let e=0;e.01&&d.push(e+1)}d.push(l.length);for(let e=0;e0&&(f=Math.abs(l[d[e]]-l[d[e-1]])),e{m.push(t.binScore)}));for(var w,b=new Array(l.length).fill(\"\"),F=0,v=.05*e/r;FA+1){var C=cy(this.mean,this.std,m,A,_,v);if(C){var _=C;b.fill(\"D\",A,_)}}for(A=F;Fn;)F+=1;(_=F)>A+1&&(C=cy(this.mean,this.std,m,A,_,v))&&(_=C,b.fill(\"A\",A,_)),F==y&&(F+=1)}for(F=0;FA+1&&(ay(this.mean,this.std,m,A,_)<1682935038707506e-26&&b.fill([\"d\"]*(_-A),A,_),F-=1),F+=1}(F=0)=b.length););if(F>A){var k=new ly(x.slice(A,F));x.fill(k.mean,A,F)}F=0;e--){var i;let n=this.allVariants[e];this.allVariants.splice(e,1);let r=n.chr;i=Math.max(Math.floor(n.start/this.rowBinSize),0),t[r]||(t[r]=[]),t[r][i]||(t[r][i]={chr:r,start:i*this.rowBinSize,end:(i+1)*this.rowBinSize,dp_sum_score:0,dp_count:0,hets_count:0,hets:[]});const s=Object.values(n.calls);if(1!==s.length)throw Error(`Unexpected number of genotypes: ${s.length}. CNVPytor expects 1 and only 1 genotype`);const o=s[0],a=o.info.DP;a&&(t[r][i].dp_sum_score+=Number.parseInt(a),t[r][i].dp_count++);let c=o.info.AD.split(\",\"),l=o.genotype;if(0==l[0]&&1==l[1]||1==l[0]&&0==l[1]){t[r][i].hets_count++;let e=parseInt(c[0]),n=parseInt(c[1]);t[r][i].hets.push({ref:e,alt:n})}}this.chromosomes=Object.keys(t);var n,r=this.adjust_bin_size(t);if(\"ReadDepth\"==e){n=new gy(r,this.binSize).ReadDepth_caller();var s=this.formatDataStructure_BAF(r,\"max_likelihood\")}else if(\"2D\"==e){let e=new ny(r,this.binSize),t=await e.call_2d();n=[t.binScore,[],t.segment_score];s=e.formatDataStructure_BAF(\"max_likelihood\",-1)}return[n,s]}formatDataStructure(e,t,i=1){const n=[];for(const[s,o]of Object.entries(e))for(let e of o){var r={...e};1!=i&&(r.value=e[t]/i*2),n.push(r)}return n}format_BAF_likelihood(e){const t=[];for(const[n,r]of Object.entries(e))for(let e of r){var i={...e};.5!=e.value&&(i.value=1-e.value,t.push(i))}return t}get_max_min_score(e){if(e.likelihood_score.length>0){const t=Math.max(...e.likelihood_score),i=e.likelihood_score.indexOf(t);e.value=Math.max(i/100,1-i/100),e.min_score=Math.min(i/100,1-i/100)}else e.score=0;return e}async getAllbins(){const e=await this.computeDepthFeatures();return new qv.GetFit(e).fit_data(),e}formatDataStructure_BAF(e,t,i=-1){const n=[],r=[];for(const[a,c]of Object.entries(e))for(let e of c){var s={...e},o={...e};let a=e[t];.5!=a&&(o.value=i*(1-a),r.push(o)),s.value=i*a,n.push(s)}return[n,r]}adjust_bin_size(e){var t={};for(let r of this.chromosomes){t[r]||(t[r]=[]);for(let s=0;spy(o.ref,o.alt,e)));else{var n=0;t[r][s].likelihood_score=qv.linspace(0,1,100).map(((e,i)=>{var a=t[r][s].likelihood_score[i]*py(o.ref,o.alt,e);return n+=a,a})),t[r][s].likelihood_score=qv.linspace(0,1,100).map(((e,i)=>t[r][s].likelihood_score[i]/n))}t[r][s].binScore=100*parseInt(t[r][s].dp_sum_score/t[r][s].dp_count);const a=this.get_max_min_score(t[r][s]);t[r][s].max_likelihood=a.value}}return t}}function py(e,t,i,n=!0){return Math.pow(i,e)*Math.pow(1-i,t)+Math.pow(i,t)*Math.pow(1-i,e)}class gy{constructor(e,t){this.wigFeatures=e,this.binSize=t}ReadDepth_caller(){var e=new qv.GetFit(this.wigFeatures),[t,i]=e.fit_data(),n=new uy(this.wigFeatures,t,i),r=n.meanShiftCaller(this.binSize),s=n.cnv_calling();return Object.entries(this.wigFeatures).forEach((([e,t])=>{t.forEach(((t,i)=>{t.partition_level=parseInt(r[e][i]),t.partition_call=parseInt(s[0][e][i])}))})),[this.formatDataStructure(\"binScore\",t),this.formatDataStructure(\"partition_level\",t),this.formatDataStructure(\"partition_call\",t),s[1]]}formatDataStructure(e,t=1){const i=[];for(const[r,s]of Object.entries(this.wigFeatures))for(let r of s){var n={...r};1!=t&&(n.value=r[e]/t*2),i.push(n)}return i}}class my extends Kl{static DEFAULT_TRACK_HEIGHT=250;constructor(e,t){super(e,t)}init(e){this.featureType=\"numeric\",this.type=\"cnvpytor\",e.max||(this.defaultScale=!0,this.autoscale=!1),e.height||(e.height=my.DEFAULT_TRACK_HEIGHT),this.type=\"cnvpytor\",this.graphType=e.graphType||\"points\",this.bin_size=e.bin_size||1e5,this.signal_name=e.signal_name||\"rd_snp\",this.cnv_caller=e.cnv_caller||\"2D\",this.colors=e.colors||[\"gray\",\"black\",\"green\",\"blue\"],super.init(e)}get supportsWholeGenome(){return!0}get_signals(){let e=[];return\"rd_snp\"==this.signal_name?e=[\"RD_Raw\",\"RD_Raw_gc_coor\",this.cnv_caller,\"BAF1\",\"BAF2\"]:\"rd\"==this.signal_name?e=[\"RD_Raw\",\"RD_Raw_gc_coor\",this.cnv_caller]:\"snp\"==this.signal_name?e=[\"BAF1\",\"BAF2\"]:\"cnh\"==this.signal_name&&(e=[this.cnv_caller]),e}get_signal_colors(){return[{singal_name:\"RD_Raw\",color:this.colors[0]},{singal_name:\"RD_Raw_gc_coor\",color:this.colors[1]},{singal_name:\"ReadDepth\",color:this.colors[2]},{singal_name:\"2D\",color:this.colors[2]},{singal_name:\"BAF1\",color:this.colors[3]},{singal_name:\"BAF2\",color:this.colors[3]}]}async postInit(){if(\"vcf\"==this.config.format){let e;this.featureSource?e=Object.values(this.featureSource.getAllFeatures()).flat():(this.featureSource=this.featureSource||Gd(this.config,this.browser.genome),this.header=await this.getHeader(),e=this.featureSource.reader.features);const t=new fy(e,this.bin_size);let i,n,r;this.wigFeatures_obj={},this.wigFeatures_obj[this.bin_size]={},\"2D\"==this.cnv_caller?(r=await t.read_rd_baf(\"2D\"),i=r[0],n=r[1],this.wigFeatures_obj[this.bin_size][\"2D\"]=i[2],this.available_callers=[\"2D\"]):(r=await t.read_rd_baf(),i=r[0],n=r[1],this.wigFeatures_obj[this.bin_size].ReadDepth=i[2],this.available_callers=[\"ReadDepth\"]),this.wigFeatures_obj[this.bin_size].RD_Raw=i[0],this.wigFeatures_obj[this.bin_size].RD_Raw_gc_coor=i[1],this.wigFeatures_obj[this.bin_size].BAF1=n[0],this.wigFeatures_obj[this.bin_size].BAF2=n[1],this.available_bins=[this.bin_size],this.set_available_callers()}else this.cnvpytor_obj=new Pv(this.config.url,this.bin_size),this.wigFeatures_obj=await this.cnvpytor_obj.get_rd_signal(this.bin_size),this.available_bins=this.cnvpytor_obj.available_bins,this.available_callers=this.cnvpytor_obj.callers,this.set_available_callers();this.tracks=[];const e=[];this.signals=this.get_signals(),this.signal_colors=this.get_signal_colors();for(let t in this.wigFeatures_obj)for(const[i,n]of Object.entries(this.wigFeatures_obj[t]))if(this.signals.includes(i)){let t={type:\"wig\"};t.features=n,t.name=i,t.color=this.signal_colors.filter((e=>e.singal_name===i)).map((e=>e.color));const r=await this.browser.createTrack(t);r?(r.isMergedTrack=!0,r.autoscale=!1,this.tracks.push(r)):console.warn(\"Could not create track \"+t),\"function\"==typeof r.postInit&&e.push(r.postInit())}this.flipAxis=!!this.config.flipAxis&&this.config.flipAxis,this.logScale=!!this.config.logScale&&this.config.logScale,this.autoscale=this.config.autoscale,this.autoscale||(this.dataRange={min:this.config.min||0,max:this.config.max});for(let e of this.tracks)e.autoscale=!1,e.dataRange=this.dataRange;return Promise.all(e)}set_available_callers(){this.available_callers.includes(this.cnv_caller)||(this.available_callers.length>0?this.cnv_caller=this.available_callers[0]:this.cnv_caller=null)}async getHeader(){if(!this.header){if(\"function\"==typeof this.featureSource.getHeader){const e=await this.featureSource.getHeader();e&&(this.callSets=e.callSets||[]),this.header=e}this.sampleKeys=this.callSets?this.callSets.map((e=>e.sample)):[],this.sampleNames=this.sampleKeys}return this.header}get height(){return this._height}set height(e){if(this._height=e,this.tracks)for(let t of this.tracks)t.height=e,t.config.height=e}menuItemList(){let e=[];void 0!==this.flipAxis&&e.push({label:\"Flip y-axis\",click:function(){this.flipAxis=!this.flipAxis,this.trackView.repaintViews()}}),e=e.concat(this.numericDataMenuItems()),e.push(\"
\"),e.push(\"Bin Sizes\");for(let t of this.available_bins){const i=jl(t,t===this.bin_size);e.push({object:Bt(i),click:async function(){this.bin_size=t,this.trackView.startSpinner(),await this.recreate_tracks(t),this.clearCachedFeatures(),this.trackView.updateViews(),this.trackView.repaintViews()}})}e.push(\"
\"),e.push(\"Signal Type\");let t={rd_snp:\"RD and BAF Likelihood\",rd:\"RD Signal\",snp:\"BAF Likelihood\"};for(let i in t){const n=jl(t[i],i===this.signal_name);e.push({object:Bt(n),click:async function(){this.signal_name=i,await this.recreate_tracks(this.bin_size),this.clearCachedFeatures(),this.trackView.updateViews(),this.trackView.repaintViews()}})}e.push(\"
\"),e.push(\"CNV caller\");for(let t of this.available_callers){const i=jl(t,t===this.cnv_caller);e.push({object:Bt(i),click:async function(){this.cnv_caller=t,this.trackView.startSpinner(),await this.recreate_tracks(this.bin_size),this.clearCachedFeatures(),this.trackView.updateViews(),this.trackView.repaintViews()}})}if(this.variantState){e.push(\"
\");for(let t of this.available_callers)e.push({label:\"Convert to variant track\",click:()=>{this.convertToVariant()}})}return e}async recreate_tracks(e){this.tracks=[];const t=[];e in this.wigFeatures_obj||(this.wigFeatures_obj={...this.wigFeatures_obj,...await this.cnvpytor_obj.get_rd_signal(e)}),this.signals=this.get_signals(),this.signal_colors=this.get_signal_colors();for(const[i,n]of Object.entries(this.wigFeatures_obj[e]))if(this.signals.includes(i)){let e={type:\"wig\"};e.features=n,e.name=i,e.color=this.signal_colors.filter((e=>e.singal_name===i)).map((e=>e.color));const r=await this.browser.createTrack(e);r?(r.isMergedTrack=!0,r.autoscale=!1,this.tracks.push(r)):console.warn(\"Could not create track \"+e),\"function\"==typeof r.postInit&&t.push(r.postInit())}this.flipAxis=!!this.config.flipAxis&&this.config.flipAxis,this.logScale=!!this.config.logScale&&this.config.logScale,this.autoscale=this.config.autoscale,this.autoscale||(this.dataRange={min:this.config.min||0,max:this.config.max});for(let e of this.tracks)e.autoscale=!1,e.dataRange=this.dataRange;return Promise.all(t)}async getFeatures(e,t,i,n){if(this.tracks){const r=this.tracks.map((r=>r.getFeatures(e,t,i,n)));return Promise.all(r)}}getScaleFactor(e,t,i,n){return n?i/(Math.log10(t+1)-(e<=0?0:Math.log10(e+1))):i/(t-e)}computeYPixelValue(e,t){return(this.flipAxis?e-this.dataRange.min:this.dataRange.max-e)*t}computeYPixelValueInLogScale(e,t){let i=this.dataRange.max,n=this.dataRange.min;return i<=0?0:(n<=-1&&(n=0),n=n<=0?0:Math.log10(n+1),i=Math.log10(i+1),e=Math.log10(e+1),(this.flipAxis?e-n:i-e)*t)}draw(e){const t=e.features;if(!t)return;if(this.defaultScale&&(\"rd_snp\"==this.signal_name?this.dataRange={min:this.config.min||this.dataRange.min||-1,max:this.config.max||this.dataRange.max||5}:\"rd\"==this.signal_name?this.dataRange={min:this.config.min||this.dataRange.min||0,max:this.config.max||this.dataRange.max||5}:\"snp\"==this.signal_name&&(this.dataRange={min:this.config.min||this.dataRange.min||-1,max:this.config.max||this.dataRange.max||0})),this.autoscale&&(this.dataRange=function(e,t){let i=0,n=-Number.MAX_VALUE;for(let e of t)for(let t of e)void 0===t.value||Number.isNaN(t.value)||(i=Math.min(i,t.value),n=Math.max(n,t.value));return{min:i,max:n}}(e.referenceFrame.chr,t)),this.tracks)for(let i=0,n=this.tracks.length;ithis.logScale?this.computeYPixelValueInLogScale(e,i):this.computeYPixelValue(e,i);if(this.config.hasOwnProperty(\"guideLines\"))for(let t of this.config.guideLines)if(t.hasOwnProperty(\"color\")&&t.hasOwnProperty(\"y\")&&t.hasOwnProperty(\"dotted\")){let i=n(t.y),r={strokeStyle:t.color,strokeWidth:1};t.dotted?ko.dashedLine(e.context,0,i,e.pixelWidth,i,5,r):ko.strokeLine(e.context,0,i,e.pixelWidth,i,r)}let r=n(2);ko.dashedLine(e.context,0,r,e.pixelWidth,r,5,{strokeStyle:\"lightgray\",strokeWidth:.5})}paintAxis(e,t,i){var n,r,s,o,a,c,l,h={font:\"normal 10px Arial\",textAlign:\"right\",strokeStyle:\"black\"};if(void 0===this.dataRange||void 0===this.dataRange.max||void 0===this.dataRange.min)return;let d=void 0!==this.flipAxis&&this.flipAxis;function u(e){return e<0?Math.abs(e):0===e?\"0\":Math.abs(e)>=10||e%1==0?e.toFixed():Math.abs(e)>=1?e.toFixed(1):e.toFixed(2)}ko.fillRect(e,0,0,t,i,{fillStyle:\"rgb(255, 255, 255)\"}),n=(l=.95*t)-8,a={x:r=l,y:s=o=.01*i},ko.strokeLine(e,n,s,r,o,h),ko.fillText(e,u(d?this.dataRange.min:this.dataRange.max),n+4,s+12,h),c={x:r,y:s=o=.99*i},ko.strokeLine(e,n,s,r,o,h),ko.fillText(e,u(d?this.dataRange.max:this.dataRange.min),n+4,s-4,h),ko.strokeLine(e,a.x,a.y,c.x,c.y,h);const f=this.getScaleFactor(this.dataRange.min,this.dataRange.max,i,this.logScale),p=e=>this.logScale?this.computeYPixelValueInLogScale(e,f):this.computeYPixelValue(e,f),g=Math.ceil((this.dataRange.max-this.dataRange.min)/10);for(let t=Math.ceil(this.dataRange.min+1);t0&&t.push(\"
\"),t.push(`
${this.tracks[n].name}
`);const r=this.tracks[n].popupData(e,i[n]);t.push(...r)}return t}}async convertToVariant(){this.variantState&&(Object.setPrototypeOf(this,Fy.prototype),this.init(this.variantState),await this.postInit(),this.trackView.clearCachedFeatures(),this.variantState.trackHeight&&this.trackView.setTrackHeight(this.variantState.trackHeight),this.trackView.checkContentHeight(),this.trackView.updateViews(),delete this.variantState)}}const wy=Mt,by=10;class Fy extends Kl{static defaultColor=\"rgb(0,0,150)\";static defaults={displayMode:\"EXPANDED\",sortDirection:\"ASC\",showGenotypes:!0,expandedVariantHeight:10,squishedVariantHeight:2,squishedCallHeight:1,expandedCallHeight:10,expandedVGap:2,squishedVGap:1,expandedGroupGap:10,squishedGroupGap:5,featureHeight:14,noGenotypeColor:\"rgb(200,180,180)\",noCallColor:\"rgb(225, 225, 225)\",nonRefColor:\"rgb(200, 200, 215)\",mixedColor:\"rgb(200, 220, 200)\",homrefColor:\"rgb(200, 200, 200)\",homvarColor:\"rgb(17,248,254)\",hetvarColor:\"rgb(34,12,253)\",refColor:\"rgb(0,0,220)\",altColor:\"rgb(255,0,0)\",visibilityWindow:void 0,labelDisplayMode:void 0,type:\"variant\"};_sortDirections=new Map;constructor(e,t){super(e,t)}init(e){if(super.init(e),e.variantHeight&&(this.expandedVariantHeight=e.variantHeight),this.featureSource=Gd(e,this.browser.genome),this.colorTables=new Map,e.colorTable){const t=e.colorBy||\"*\";this.colorTables.set(t,new co(e.colorTable))}if(this.strokecolor=e.strokecolor,this._context_hook=e.context_hook,e.color&&(this.colorBy=void 0),this.nVariantRows=1,e.samples)for(let t of e.samples)this.sampleKeys=e.samples;e.sort&&(this.initialSort=e.sort),this._colorByItems=new Map([[\"none\",\"None\"]])}async postInit(){if(this.header=await this.getHeader(),this.header.INFO){const e=new Set(Object.keys(this.header.INFO));this.config.colorBy?this.colorBy=this.config.colorBy:!this.config.color&&e.has(\"AF\")&&(this.colorBy=\"AF\"),e.has(\"AF\")&&this._colorByItems.set(\"AF\",\"Allele frequency\"),e.has(\"VT\")&&this._colorByItems.set(\"VT\",\"Variant Type\"),e.has(\"SVTYPE\")&&this._colorByItems.set(\"SVTYPE\",\"SV Type\")}if(this.config.colorBy&&!this._colorByItems.has(this.config.colorBy)&&this._colorByItems.set(this.config.colorBy,this.config.colorBy),!this.disposed){if(this.header&&!this.sampleKeys&&(this.sampleKeys=this.header.sampleNameMap?Array.from(this.header.sampleNameMap.keys()):[]),void 0===this.visibilityWindow&&!1!==this.config.indexed){const e=Ht(this.config.url)?this.config.url.name:this.config.url;wy(e)&&e.toLowerCase().includes(\"gnomad\")?this.visibilityWindow=1e3:\"function\"==typeof this.featureSource.defaultVisibilityWindow?this.visibilityWindow=await this.featureSource.defaultVisibilityWindow():this.visibilityWindow=1e6}return this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}}get supportsWholeGenome(){return!this.config.indexURL||!0===this.config.supportsWholeGenome}get color(){return this._color||Fy.defaultColor}set color(e){this._color=e,e&&(this.colorBy=void 0)}async getHeader(){return this.header||\"function\"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader()),this.header}getSampleCount(){return this.sampleKeys?this.sampleKeys.length:0}async getFeatures(e,t,i,n){void 0===this.header&&(this.header=await this.getHeader());const r=await this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:this.visibilityWindow});if(this.initialSort){const e=this.initialSort;if(void 0===e.option||\"GENOTYPE\"===e.option.toUpperCase())this.sortSamplesByGenotype(e,r);else if(\"ATTRIBUTE\"===e.option.toUpperCase()&&e.attribute){const t=\"ASC\"===e.direction?1:-1;this.sortByAttribute(e.attribute,t)}this.initialSort=void 0}return r}hasSamples(){return this.getSampleCount()>0}getSamples(){const e=\"SQUISHED\"===this.displayMode?this.squishedVGap:this.expandedVGap,t=\"COLLAPSED\"===this.displayMode?1:this.nVariantRows,i=\"SQUISHED\"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,n=t*((\"SQUISHED\"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight)+e),r=by+t*(i+e);return{names:this.sampleKeys,yOffset:r,height:n}}computePixelHeight(e){if(!e||0===e.length)return by;const t=\"COLLAPSED\"===this.displayMode?1:this.nVariantRows,i=\"SQUISHED\"===this.displayMode?this.squishedVGap:this.expandedVGap,n=\"SQUISHED\"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,r=\"SQUISHED\"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight,s=!1===this.showGenotypes?0:this.getSampleCount()*t;return by+t*(n+i)+i+(s+1)*(r+i)}variantRowCount(e){this.nVariantRows=e}draw({context:e,pixelWidth:t,pixelHeight:i,bpPerPixel:n,bpStart:r,pixelTop:s,features:o}){ko.fillRect(e,0,s,t,i,{fillStyle:\"rgb(255, 255, 255)\"});const a=\"SQUISHED\"===this.displayMode?this.squishedVGap:this.expandedVGap,c=\"COLLAPSED\"===this.displayMode?1:this.nVariantRows,l=\"SQUISHED\"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight;this.variantBandHeight=by+c*(l+a);let h=this.sampleColumns;const d=this.hasSamples();if(h&&d&&!1!==this.showGenotypes&&ko.strokeLine(e,0,this.variantBandHeight,t,this.variantBandHeight,{strokeStyle:\"rgb(224,224,224) \"}),o){const i=\"SQUISHED\"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight,s=\"SQUISHED\"===this.displayMode?this.squishedVGap:this.expandedVGap,a=r+t*n+1;for(let t of o){if(t.enda)break;const o=\"SQUISHED\"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,c=by+(\"COLLAPSED\"===this.displayMode?0:t.row*(o+s)),l=o;let h=(t.start-r)/n,u=(t.end-r)/n,f=Math.max(1,u-h);f<3?(f=3,h-=1):f>5&&(h+=1,f-=2);const p=t._f||t;let g;try{g=p.alleleFreq()}catch(e){console.log(e)}if(\"AF\"===this.colorBy&&g){const t=Math.min(1,g)*l,i=l-t;e.fillStyle=p.isFiltered()?this.refColorFiltered:this.refColor,e.fillRect(h,c,f,i),e.fillStyle=p.isFiltered()?this.altColorFiltered:this.altColor,e.fillRect(h,c+i,f,t)}else e.fillStyle=this.getColorForFeature(p),e.fillRect(h,c,f,l);let m=this.getVariantStrokecolor(p);if(m&&(e.strokeStyle=m,e.strokeRect(h,c,f,l)),this.callContextHook(p,e,h,c,f,l),d&&!1!==this.showGenotypes){const t=\"COLLAPSED\"===this.displayMode?1:this.nVariantRows;this.sampleYOffset=this.variantBandHeight+s,this.sampleHeight=t*(i+s);let n=0;for(let t of this.sampleKeys){const r=this.header.sampleNameMap.get(t),o=p.calls[r];if(o){const t=\"COLLAPSED\"===this.displayMode?0:p.row,r=this.sampleYOffset+n*this.sampleHeight+t*(i+s);let a=!0,c=!0,l=!1;if(o.genotype)for(let e of o.genotype){if(\".\"===e){l=!0;break}0!==e&&(c=!1),0===e&&(a=!1)}o.genotype?e.fillStyle=l?this.noCallColor:c?this.homrefColor:a?this.homvarColor:this.hetvarColor:e.fillStyle=this.noGenotypeColor,e.fillRect(h,r,f,i)}n++}}}}else console.log(\"No feature list\")}get refColorFiltered(){return this._refColorFiltered||(this._refColorFiltered=_s.addAlpha(this.refColor,.2)),this._refColorFiltered}get altColorFiltered(){return this._altColorFiltered||(this._altColorFiltered=_s.addAlpha(this.altColor,.2)),this._altColorFiltered}getColorForFeature(e){const t=e._f||e;let i;if(this.colorBy&&\"none\"!==this.colorBy){const e=t.getAttributeValue(this.colorBy);i=void 0!==e?this.getVariantColorTable(this.colorBy).getColor(e):\"gray\"}else i=this.color?\"function\"==typeof this.color?this.color(e):this.color:\"NONVARIANT\"===t.type?this.nonRefColor:\"MIXED\"===t.type?this.mixedColor:this.color;return t.isFiltered()&&(i=_s.addAlpha(i,.2)),i}getVariantStrokecolor(e){const t=e._f||e;let i;return i=this.strokecolor?\"function\"==typeof this.strokecolor?this.strokecolor(t):this.strokecolor:void 0,i}callContextHook(e,t,i,n,r,s){if(this._context_hook&&\"function\"==typeof this._context_hook){const o=e._f||e;t.save(),this._context_hook(o,t,i,n,r,s),t.restore()}}clickedFeatures(e){let t=super.clickedFeatures(e);const i=\"EXPANDED\"===this.displayMode?this.expandedVGap:this.squishedVGap,n=i+(\"SQUISHED\"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight),r=e.y;if(r<=this.variantBandHeight){const e=\"SQUISHED\"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,n=Math.floor((r-by)/(e+i));\"COLLAPSED\"!==this.displayMode&&(t=t.filter((e=>e.row===n)))}else if(this.sampleKeys){const e=r-this.variantBandHeight,i=Math.floor(e/this.sampleHeight);if(i>=0&&ie.row===r)),o=this.sampleKeys[i],a=this.header.sampleNameMap.get(o);t=s.map((e=>{const t=e.calls[a];return t.genotypeString=function(e,t){if(e.genotype){let i=\"\";if(\".\"===t.alternateBases)i=\"No Call\";else{const n=t.alternateBases.split(\",\");for(let r of e.genotype)if(i.length>0&&(i+=\" | \"),\".\"===r)i+=\".\";else if(0===r)i+=t.referenceBases;else{i+=n[r-1].replace(\"<\",\"<\")}}return i}}(t,e),t}))}}return t}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=e.genomicLocation,n=this.browser.genome.id;let r=[];for(let e of t){const t=e._f||e;if(r.length>0&&r.push({html:'
'}),\"function\"==typeof t.popupData){const e=t.popupData(i,n);Array.prototype.push.apply(r,e)}}return r}menuItemList(){const e=[];if(this.header.INFO&&this.header.INFO){const t=this._colorByItems;e.push(\"
\");const i=Bt('
');i.text(\"Color by:\"),e.push({name:void 0,object:i,click:void 0,init:void 0});for(let n of t.keys()){const r=this.colorBy===n;e.push(this.colorByCB({key:n,label:t.get(n)},r))}e.push(this.colorByCB({key:\"info\",label:\"Info field...\"}))}if(!0===ap(this.browser.sampleInfo,this.sampleKeys)){e.push(\"
\"),e.push(\"Sort by attribute:\");for(const s of this.browser.sampleInfo.attributeNames)if(this.sampleKeys.some((e=>{const t=this.browser.sampleInfo.getAttributes(e);return t&&t[s]}))){const o=Bt(\"
\");function a(){const e=this._sortDirections.get(s)||1;this.sortByAttribute(s,e),this.config.sort={option:\"ATTRIBUTE\",attribute:s,direction:e>0?\"ASC\":\"DESC\"},this._sortDirections.set(s,-1*e)}o.html(`  ${s.split(pf.emptySpaceReplacement).join(\" \")}`),e.push({object:o,click:a})}}e.push(\"
\"),this.getSampleCount()>0&&(e.push({object:Bt('
')}),e.push({object:Bt(jl(\"Show Genotypes\",this.showGenotypes)),click:function(){this.showGenotypes=!this.showGenotypes,this.trackView.checkContentHeight(),this.trackView.repaintViews(),this.browser.sampleNameControl.performClickWithState(this.browser,this.showGenotypes),this.browser.sampleInfoControl.performClickWithState(this.browser,this.showGenotypes)}})),e.push({object:Bt('
')});for(let c of[\"COLLAPSED\",\"SQUISHED\",\"EXPANDED\"]){e.push({object:Bt(jl({COLLAPSED:\"Collapse\",SQUISHED:\"Squish\",EXPANDED:\"Expand\"}[c],c===this.displayMode)),click:function(){this.displayMode=c,this.trackView.checkContentHeight(),this.trackView.repaintViews()}})}return this.browser.circularView&&(e.push(\"
\"),e.push({label:\"Add SVs to circular view\",click:function(){for(let e of this.trackView.viewports)this.sendChordsForViewport(e)}})),this.canCovertToPytor()&&(e.push(\"
\"),e.push({label:\"Convert to CNVpytor track\",click:function(){this.convertToPytor()}})),e}contextMenuItemList(e){const t=[];if(this.hasSamples()&&this.showGenotypes){const i=e.viewport.referenceFrame,n=e.genomicLocation,r=i.toBP(2.5),s=this._sortDirections.get(\"genotype\")||1;this._sortDirections.set(\"genotype\",-1*s),t.push({label:\"Sort by genotype\",click:t=>{const i={direction:s,option:\"genotype\",chr:e.viewport.referenceFrame.chr,start:Math.floor(n-r),end:Math.ceil(n+r)},o=e.viewport.cachedFeatures;this.sortSamplesByGenotype(i,o),this.config.sort=i}}),t.push(\"
\")}if(this.browser.circularView){const i=e.viewport;t.push({label:\"Add SVs to Circular View\",click:()=>{this.sendChordsForViewport(i)}}),t.push(\"
\")}return t}async sortSamplesByGenotype({chr:e,position:t,start:i,end:n,direction:r},s){if(void 0===i&&(i=t-1),void 0===n&&(n=t),s||(s=await this.featureSource.getFeatures({chr:e,start:i,end:n})),!s)return;const o=new Map,a=\"ASC\"===r?1:-1;for(let e of s)if(!(e.endn)break;for(let t of e.calls){const e=t.sample,i=t.zygosityScore();o.set(e,o.has(e)?o.get(e)+i:i)}}this.sampleKeys.sort((function(e,t){let i=o.get(e)||0,n=o.get(t)||0;return a*(i-n)})),this.trackView.repaintViews()}sortByAttribute(e,t){this.config.sort={option:\"ATTRIBUTE\",attribute:e,direction:1===t?\"ASC\":\"DESC\"},this.sampleKeys=this.browser.sampleInfo.getSortedSampleKeysByAttribute(this.sampleKeys,e,t),this.trackView.repaintViews()}sendChordsForViewport(e){const t=e.referenceFrame;let i;if(\"all\"===t.chr){const e=this.featureSource.getAllFeatures(),t=Object.keys(e).map((t=>e[t]));i=[].concat(...t)}else i=this.featureSource.featureCache.queryFeatures(t.chr,t.start,t.end);cw(i.filter((e=>{const t=e._f||e;return t.info&&t.info.CHR2&&t.info.END&&(t.info.CHR2!==t.chr||Math.abs(Number.parseInt(t.info.END)-t.pos)>1e6)})).map((e=>{const t=e._f||e,i=Number.parseInt(t.info.END),n=i-100,r=i+100;return{uniqueId:`${t.chr}:${t.start}-${t.end}_${t.info.CHR2}:${t.info.END}`,refName:ow(t.chr),start:t.start,end:t.end,mate:{refName:ow(t.info.CHR2),start:n,end:r}}})),this,t,.5)}colorByCB(e,t){const i=Bt(jl(e.label,t));if(\"info\"!==e.key){function n(){const t=\"none\"===e.key?void 0:e.key;this.colorBy=t,this.config.colorBy=t,this.trackView.repaintViews()}return{name:void 0,object:i,click:n,init:void 0}}{function r(e){this.browser.inputDialog.present({label:\"Info field\",value:\"\",callback:e=>{e?(this.colorBy=e,this._colorByItems.set(e,e)):this.colorBy=void 0,this.trackView.repaintViews()}},e)}return{name:void 0,object:i,dialog:r,init:void 0}}}getState(){const e=super.getState();return this.color&&\"function\"!=typeof this.color&&(e.color=this.color),e}getVariantColorTable(e){if(this.colorTables.has(e))return this.colorTables.get(e);if(this.colorTables.has(\"*\"))return this.colorTables.get(\"*\");{let t;if(\"SVTYPE\"===e)t=vy;else t=new ao(\"Set1\");return this.colorTables.set(e,t),t}}paintAxis(){}canCovertToPytor(){return!this.config.indexURL&&(!!this.header&&(1===Object.keys(this.sampleKeys).length&&this.header.FORMAT&&this.header.FORMAT.AD&&this.header.FORMAT.DP))}async convertToPytor(){this.variantState={...this.config,...this.getState()},this.variantState.trackHeight=this.height,this.trackView.startSpinner(),setTimeout((async()=>{try{const e=Object.assign({},this.config);Object.setPrototypeOf(this,my.prototype),this.init(e),await this.postInit(),this.trackView.clearCachedFeatures(),this.trackView.setTrackHeight(this.config.height||my.DEFAULT_TRACK_HEIGHT),this.trackView.checkContentHeight(),this.trackView.updateViews()}finally{this.trackView.stopSpinner()}}),100)}}const vy=new co({DEL:\"#ff2101\",INS:\"#001888\",DUP:\"#028401\",INV:\"#008688\",CNV:\"#8931ff\",BND:\"#891100\",\"*\":\"#002eff\"}),yy={timeout:5e3,type:\"plain\",url:\"https://igv.org/genomes/locus.php?genome=$GENOME$&name=$FEATURE$\",coords:0};async function Ay(e,t){const i=e.searchConfig||yy;let n;t=t.toUpperCase();const r=e.tracks.filter((e=>e.searchable));for(let e of r){const i=await e.search(t);if(i)return i}if(e.config&&!1!==e.config.search)try{return n=await async function(e,t,i){let n=i.url.replace(\"$FEATURE$\",t.toUpperCase());n.indexOf(\"$GENOME$\")>-1&&(n=n.replace(\"$GENOME$\",e.genome.id?e.genome.id:\"hg19\"));const r=i.timeout?{timeout:i.timeout}:void 0,s=await Vs.loadString(n,r);return function(e,t,i){let n;n=\"plain\"===i.type?function(e,t){const i=[],n=Rt(t);for(let t of n){const n=t.split(\"\\t\");if(n.length>=3){const t=n[1].split(\":\"),r=t[1].split(\"-\");i.push({chromosome:e.genome.getChromosomeName(t[0].trim()),start:parseInt(r[0].replace(/,/g,\"\")),end:parseInt(r[1].replace(/,/g,\"\")),name:n[0].toUpperCase()})}}return i}(e,t):JSON.parse(t);i.resultsField&&(n=n[i.resultsField]);if(n&&0!==n.length){const e=i.chromosomeField||\"chromosome\",t=i.startField||\"start\",r=i.endField||\"end\",s=i.coords||1;let o;o=Array.isArray(n)?n[0]:n,o.hasOwnProperty(e)&&o.hasOwnProperty(t)||console.error(\"Search service results must include chromosome and start fields: \"+o);const a=o[e];let c=o[t]-s,l=o[r];void 0===l&&(l=c+1);const h={chr:a,start:c,end:l};if(!o.type||o.type,i.geneField&&i.snpField){const e=o[i.geneField]||o[i.snpField];e&&(h.name=e.toUpperCase())}return h}return}(e,s,i)}(e,t,i),n}catch(e){console.log(\"Search service not available \"+e)}}function Cy(e,t=!1){const i=e.split(\"\\t\");if(i.length>2)try{const e=i[0],t=parseInt(i[1].replace(/,/g,\"\"),10)-1,n=parseInt(i[2].replace(/,/g,\"\"),10);if(!isNaN(t)&&!isNaN(n))return{chr:e,start:t,end:n}}catch(e){}const n=e.split(\":\"),r={chr:n[0]};if(n.length>1){let e,i=n[1].split(\"-\");if(i.length>2){if(!n[1].startsWith(\"-\"))return;{const e=n[1].indexOf(\"-\",1);if(e>0){i=[n[1].substring(0,e),n[1].substring(e+1)]}}}if(e=i[0].replace(/,/g,\"\"),isNaN(e))return;if(r.start=parseInt(e,10)-1,r.end=r.start+1,1===i.length&&(r.start-=20,r.end+=20),2===i.length){if(e=i[1].replace(/,/g,\"\"),isNaN(e))return;if(r.end=parseInt(e,10),r.start<0&&!t){const e=-extent.start;r.start+=e,r.end+=e}}}return r}class _y extends Kl{constructor(e,t){super(e,t)}init(e){super.init(e),this.type=\"qtl\",this.name=e.name;const t=e.minLogP||e.min,i=e.maxLogP||e.max;this.dataRange={min:void 0!==t?t:3.5,max:i||25},this.autoscale=!i||e.autoscale,this.autoscalePercentile=void 0===e.autoscalePercentile?98:e.autoscalePercentile,this.background=e.background,this.divider=e.divider||\"rgb(225,225,225)\",this.dotSize=e.dotSize||2,this.height=e.height||100,this.disableButtons=e.disableButtons,this.featureSource=Gd(e,this.browser.genome)}paintAxis(e,t,i){const n=(this.dataRange.max-this.dataRange.min)/i,r={font:\"normal 10px Arial\",textAlign:\"right\",strokeStyle:\"black\"};ko.fillRect(e,0,0,t,i,{fillStyle:\"rgb(255, 255, 255)\"});const s=Math.ceil(10*(this.dataRange.max-this.dataRange.min)/i);for(let o=4;o<=this.dataRange.max;o+=s){const s=.85*t,a=s-5,c=s,l=i-(o-this.dataRange.min)/n;ko.strokeLine(e,a,l,c,l,r),l>8&&ko.fillText(e,o,a-1,l+2,r)}r.textAlign=\"center\",ko.fillText(e,\"-log10(pvalue)\",t/4,i/2,r,{rotate:{angle:-90}})}async getFeatures(e,t,i){const n=this.visibilityWindow;return await this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n})}draw(e){const{context:t,referenceFrame:i,pixelWidth:n,pixelHeight:r}=e;this.background&&ko.fillRect(t,0,0,n,r,{fillStyle:this.background}),ko.strokeLine(t,0,r-1,n,r-1,{strokeStyle:this.divider}),i.feature&&i.feature.match(/RS[0-9]+/);const s=i=>{const s=i?2*this.dotSize:this.dotSize,o=e.bpStart,a=(this.dataRange.max-this.dataRange.min)/r;for(let d of e.features){const u=(d.start-o+.5)/e.bpPerPixel;if(u<0)continue;if(u>n)break;const f=d.phenotype;let p;if(this.browser.qtlSelections.qtl?(l=this.browser.qtlSelections.qtl,h=d,p=l.chr===h.chr&&l.start===h.start&&l.pValue===h.pValue):p=this.browser.qtlSelections.snps.size>0?this.browser.qtlSelections.hasSnp(d.snp)&&this.browser.qtlSelections.hasPhenotype(f):this.browser.qtlSelections.hasPhenotype(f),!i||p){var c=-Math.log(d.pValue)/Math.LN10;if(c>=this.dataRange.min){let e;c>this.dataRange.max?(c=this.dataRange.max,e=!0):e=!1;const n=Math.max(0+s,r-Math.round((c-this.dataRange.min)/a));let o;d.px=u,d.py=n,d.radius=s,i&&p?(o=this.browser.qtlSelections.colorForGene(f),ko.setProperties(t,{fillStyle:o,strokeStyle:\"black\"})):(o=e?\"rgb(150, 150, 150)\":\"rgb(180, 180, 180)\",ko.setProperties(t,{fillStyle:o,strokeStyle:o})),ko.fillCircle(t,u,n,s),ko.strokeCircle(t,u,n,s)}}}var l,h};s(!1),s(!0)}popupData(e,t){if(void 0===t&&(t=e.viewport.cachedFeatures),!t||0===t.length)return[];const i=this.name,n=[];for(let r of this._clickedFeatures(e,t))n.length>0&&n.push(\"
\"),\"function\"==typeof r.popupData?n.push(...r.popupData(e)):n.push({name:\"snp id\",value:r.snp},{name:\"gene id\",value:r.gencodeId},{name:\"gene name\",value:r.geneSymbol},{name:\"p value\",value:r.pValue},{name:\"tissue\",value:i});return n}_clickedFeatures(e,t){const i=(e,t)=>Math.sqrt((e.px-t.canvasX)*(e.px-t.canvasX)+(e.py-t.canvasY)*(e.py-t.canvasY)),n=t.filter((t=>i(t,e)<6));if(n.length>1){n.sort(((t,n)=>i(t,e)-i(n,e)));const t=i(n[0],e);return n.filter((n=>i(n,e)<=t))}return n}contextMenuItemList(e){const t=[],i=e.viewport.cachedFeatures;if(i){const n=this._clickedFeatures(e,i);n.length>0&&(t.push({label:\"Highlight associated features\",click:async()=>{this.browser.qtlSelections.clear();for(let e of n)this.browser.qtlSelections.qtl=e,this.browser.qtlSelections.addPhenotype(e.phenotype);this.browser.repaintViews()}}),t.push(\"
\"))}return t}menuItemList(){const e=[];return e.push(...this.numericDataMenuItems()),e.push(\"
\"),e.push({label:\"Search for...\",dialog:function(e){this.browser.inputDialog.present({label:\"Search for snp or phenotype\",value:\"\",callback:async e=>{if(e){e=e.trim().toUpperCase();const t=t=>((t.phenotype&&t.phenotype.toUpperCase())===e||t.snp&&t.snp.toUpperCase()===e)&&-Math.log(t.pValue)/Math.LN10>this.dataRange.min;let i,n,r,s=await this.featureSource.findFeatures(t);if(0==s.length){await this.browser.search(e)&&(s=await this.featureSource.findFeatures(t))}if(s.length>0){this.browser.qtlSelections.clear();const t=new Set;i=s[0].chr,n=s[0].start,r=s[0].end;for(let o of s)o.snp&&o.snp.toUpperCase()===e&&this.browser.qtlSelections.addSnp(o.snp),this.browser.qtlSelections.addPhenotype(o.phenotype),t.add(o.phenotype),o.chr===i&&(n=Math.min(n,o.start),r=Math.max(r,o.end));const o=this.browser.genome.getChromosomeName(i);for(let e of t){const t=await Ay(this.browser,e);t&&o===this.browser.genome.getChromosomeName(t.chr)&&(n=Math.min(n,t.start),r=Math.max(r,t.end))}const a=Math.floor(.1*(r-n));n=Math.max(0,n-a),r+=a,await this.browser.search(`${i}:${n}-${r}`)}}}},e)}}),e}doAutoscale(e){let t=this.config.max||25;if(e.length>0){const i=e.map((e=>-Math.log(e.pValue)/Math.LN10));i.sort(((e,t)=>e-t));t=i[Math.floor(i.length*(this.autoscalePercentile/100))]}return this.dataRange.max=Math.max(t,10),this.dataRange}}const xy={X:\"rgb(204, 153, 0)\",Y:\"rgb(153, 204, 0)\",Un:\"darkGray)\",1:\"rgb(80, 80, 255)\",2:\"rgb(206, 61, 50)\",\"2a\":\"rgb(210, 65, 55)\",\"2b\":\"rgb(215, 70, 60)\",3:\"rgb(116, 155, 88)\",4:\"rgb(240, 230, 133)\",5:\"rgb(70, 105, 131)\",6:\"rgb(186, 99, 56)\",7:\"rgb(93, 177, 221)\",8:\"rgb(128, 34, 104)\",9:\"rgb(107, 215, 107)\",10:\"rgb(213, 149, 167)\",11:\"rgb(146, 72, 34)\",12:\"rgb(131, 123, 141)\",13:\"rgb(199, 81, 39)\",14:\"rgb(213, 143, 92)\",15:\"rgb(122, 101, 165)\",16:\"rgb(228, 175, 105)\",17:\"rgb(59, 27, 83)\",18:\"rgb(205, 222, 183)\",19:\"rgb(97, 42, 121)\",20:\"rgb(174, 31, 99)\",21:\"rgb(231, 199, 111)\",22:\"rgb(90, 101, 94)\",23:\"rgb(204, 153, 0)\",24:\"rgb(153, 204, 0)\",25:\"rgb(51, 204, 0)\",26:\"rgb(0, 204, 51)\",27:\"rgb(0, 204, 153)\",28:\"rgb(0, 153, 204)\",29:\"rgb(10, 71, 255)\",30:\"rgb(71, 117, 255)\",31:\"rgb(255, 194, 10)\",32:\"rgb(255, 209, 71)\",33:\"rgb(153, 0, 51)\",34:\"rgb(153, 26, 0)\",35:\"rgb(153, 102, 0)\",36:\"rgb(128, 153, 0)\",37:\"rgb(51, 153, 0)\",38:\"rgb(0, 153, 26)\",39:\"rgb(0, 153, 102)\",40:\"rgb(0, 128, 153)\",41:\"rgb(0, 51, 153)\",42:\"rgb(26, 0, 153)\",43:\"rgb(102, 0, 153)\",44:\"rgb(153, 0, 128)\",45:\"rgb(214, 0, 71)\",46:\"rgb(255, 20, 99)\",47:\"rgb(0, 214, 143)\",48:\"rgb(20, 255, 177)\"};for(let nC of Object.keys(xy)){xy[\"chr\"+nC]=xy[nC]}for(let rC=1;rC<=48;rC++){if(10===rC)continue;const sC=ky(rC);xy[sC]=xy[rC.toString()]}function ky(e){if(!+e)return!1;for(var t=String(+e).split(\"\"),i=[\"\",\"C\",\"CC\",\"CCC\",\"CD\",\"D\",\"DC\",\"DCC\",\"DCCC\",\"CM\",\"\",\"X\",\"XX\",\"XXX\",\"XL\",\"L\",\"LX\",\"LXX\",\"LXXX\",\"XC\",\"\",\"I\",\"II\",\"III\",\"IV\",\"V\",\"VI\",\"VII\",\"VIII\",\"IX\"],n=\"\",r=3;r--;)n=(i[+t.pop()+10*r]||\"\")+n;return Array(+t.join(\"\")+1).join(\"M\")+n}class Iy extends Kl{constructor(e,t){super(e,t)}init(e){super.init(e),this.useChrColors=void 0===e.useChrColors||e.useChrColors,this.trait=e.trait,this.posteriorProbability=e.posteriorProbability,this.valueProperty=\"bed\"===e.format?\"score\":\"value\",this.height=e.height||100,this.autoscale=e.autoscale,this.autoscalePercentile=void 0===e.autoscalePercentile?98:e.autoscalePercentile,this.background=e.background,this.divider=e.divider||\"rgb(225,225,225)\",this.dotSize=e.dotSize||3,this.popoverWindow=void 0===e.popoverWindow?1e8:e.popoverWindow,this.useChrColors?this.colorScale=new co(e.colorTable||xy):e.color?this.colorScale=new kd(e.color):this.colorScale=new Cd(e.colorScale||{thresholds:[5e-8,5e-4,.5],colors:[\"rgb(255,50,50)\",\"rgb(251,100,100)\",\"rgb(251,170,170)\",\"rgb(227,238,249)\"]}),this.featureSource=Gd(e,this.browser.genome)}async postInit(){if(\"function\"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),this.autoscale||(this.posteriorProbability?this.dataRange={min:void 0===this.config.min?0:this.config.min,max:void 0===this.config.max?1:this.config.max}:this.dataRange={min:void 0===this.config.min?0:this.config.min,max:void 0===this.config.max?25:this.config.max}),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get supportsWholeGenome(){return!0}async getFeatures(e,t,i){const n=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n})}draw(e){const t=e.features,i=e.context,n=e.pixelWidth,r=e.pixelHeight;if(this.background&&ko.fillRect(i,0,0,n,r,{fillStyle:this.background}),ko.strokeLine(i,0,r-1,n,r-1,{strokeStyle:this.divider}),t){const s=e.bpPerPixel,o=e.bpStart,a=o+n*s+1;for(let e of t){const t=e.start;if(ta)break;let n;if(this.posteriorProbability)n=e[this.valueProperty];else{const t=e[this.valueProperty];if(!t)continue;n=-Math.log10(t)}const c=this.useChrColors?e._f?e._f.chr:e.chr:n,l=this.colorScale.getColor(c),h=(this.dataRange.max-this.dataRange.min)/r,d=Math.round((t-o)/s),u=Math.max(this.dotSize,r-Math.round((n-this.dataRange.min)/h));l&&ko.setProperties(i,{fillStyle:l,strokeStyle:\"black\"}),ko.fillCircle(i,d,u,this.dotSize),e.px=d,e.py=u}}}paintAxis(e,t,i){ko.fillRect(e,0,0,t,i,{fillStyle:\"rgb(255, 255, 255)\"});var n={font:\"normal 10px Arial\",textAlign:\"right\",strokeStyle:\"black\"};const r=(this.dataRange.max-this.dataRange.min)/i;if(this.posteriorProbability){const t=.1;for(let s=this.dataRange.min;s0&&i.push(\"
\"),5==r){i.push(\"...\");break}if(s=s._f||s,\"function\"==typeof s.popupData)i=i.concat(s.popupData());else{const e=s[this.valueProperty],t=s.chr,r=Dt(s.start+1);i.push({name:\"chromosome\",value:t}),i.push({name:\"position\",value:r}),i.push({name:\"name\",value:s.name}),n.posteriorProbability?i.push({name:\"posterior probability\",value:e}):i.push({name:\"pValue\",value:e})}r++}}}return i}menuItemList(){return this.numericDataMenuItems()}doAutoscale(e){if(e.length>0){const t=this.valueProperty,i=this.posteriorProbability,n=e.map((function(e){const n=e[t];return{value:i?n:-Math.log(n)/Math.LN10}}));this.dataRange=nc(n)}else this.posteriorProbability?this.dataRange={min:this.config.min||0,max:this.config.max||1}:this.dataRange={min:this.config.max||25,max:this.config.min||0};return this.dataRange}}class Sy extends Kl{constructor(e,t){super(e,t)}init(e){super.init(e),this.autoscale=e.autoscale||void 0===e.max,this.dataRange={min:e.min||0,max:e.max},this.windowFunction=e.windowFunction||\"mean\",this.paintAxis=Fd,this.graphType=e.graphType||\"bar\",e._featureSource?(this.featureSource=e._featureSource,delete e._featureSource):this.featureSource=Gd(this.config,this.browser.genome),this.visibilityWindow=-1,this.featureSource.visibilityWindow=this.visibilityWindow}async postInit(){if(\"function\"==typeof this.featureSource.getHeader){if(this.header=await this.featureSource.getHeader(),this.disposed)return;if(this.sampleKeys=this.header.columnNames.slice(3),this.setTrackProperties(this.header),this.header.hasOwnProperty(\"clickToHighlight\")){let e=this.header.clickToHighlight;this.config.clickToHighlight=e,this.config.samplesClickedToHighlight={}}if(this.header.hasOwnProperty(\"onlyHandleClicksForHighlightedSamples\")&&(this.config.onlyHandleClicksForHighlightedSamples=!0),this.header.hasOwnProperty(\"highlight\")){this.config.highlightSamples={};let e=this.header.highlight;Array.isArray(e)||(e=[e]);for(let t of e){const e=t.split(\";\");2===e.length&&(this.config.highlightSamples[e[0]]=e[1])}}}this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor}menuItemList(){return this.numericDataMenuItems()}async getFeatures(e,t,i){const n=await this.featureSource.getFeatures({chr:e,start:0,end:Number.MAX_SAFE_INTEGER,visibilityWindow:this.visibilityWindow});let r,s;for(let e=1;et&&(r=e-1),void 0===s&&n[e].start>i){s=e+1;break}return void 0===r&&(r=0),void 0===s&&(s=n.length),n.slice(r,s)}draw(e){const{features:t,context:i,bpPerPixel:n,bpStart:r,pixelWidth:s,pixelHeight:o}=e,a=e=>(this.dataRange.max-e)/(this.dataRange.max-this.dataRange.min)*o,c=function(e){let t=Math.floor((e-r)/n);return isNaN(t)&&console.warn(\"isNaN(x). feature start \"+Dt(e)+\" bp start \"+Dt(r)),t};if(t&&t.length>0&&(void 0===this.dataRange.min&&(this.dataRange.min=0),this.dataRange.max>this.dataRange.min)){const e=this.config.highlightSamples,n=this.config.onlyHandleClicksForHighlightedSamples,r=this.config.clickToHighlight;let s=-1,o={},l=[],h=[];this.clickDetectorCache={};for(let d of t){const t=c(d.start),u=c(d.end),f=s>=0?c(s):t;if(!isNaN(t)&&!isNaN(u)){this.clickDetectorCache[t]=[],this.clickDetectorCache[u]=[];for(let s=0;s=1){const s=o[c],h=a(s),d=e&&e[c];d?l.push([f,h,t,g,d]):r&&c in this.config.samplesClickedToHighlight?l.push([f,h,t,g,this.config.samplesClickedToHighlight[c]]):ko.strokeLine(i,f,h,t,g,{strokeStyle:\"#D9D9D9\"}),n&&!(c in e)||this.clickDetectorCache[t].push([f,h,t,g,c,d||\"gray\"])}if(u-t>=1){const s=e&&e[c];s?h.push([t,g,u,g,s]):r&&c in this.config.samplesClickedToHighlight?h.push([t,g,u,g,this.config.samplesClickedToHighlight[c]]):ko.strokeLine(i,t,g,u,g,{strokeStyle:\"gray\"}),n&&!(c in e)||this.clickDetectorCache[u].push([t,g,u,g,c,s||\"gray\"])}o[c]=p}s=d.end}}for(let e of l)ko.strokeLine(i,e[0],e[1],e[2],e[3],{strokeStyle:e[4],lineWidth:1.3});for(let e of h)ko.strokeLine(i,e[0],e[1],e[2],e[3],{strokeStyle:e[4],lineWidth:2})}(e=>{if(this.config.hasOwnProperty(\"guideLines\"))for(let t of this.config.guideLines)if(t.hasOwnProperty(\"color\")&&t.hasOwnProperty(\"y\")&&t.hasOwnProperty(\"dotted\")){let i=a(t.y),n={strokeStyle:t.color,strokeWidth:2};t.dotted?ko.dashedLine(e.context,0,i,e.pixelWidth,i,5,n):ko.strokeLine(e.context,0,i,e.pixelWidth,i,n)}})(e)}doAutoscale(e){let t,i;return e.length>0?(t=Number.MAX_VALUE,i=-Number.MAX_VALUE,e.forEach((function(e){t=Math.min(t,...e.values),i=Math.max(i,...e.values)})),t-=.01,i+=.01):(t=0,i=100),{min:t,max:i}}clickedFeatures(e){const t=e.canvasX,i=e.canvasY;let n=null;for(n of Object.keys(this.clickDetectorCache))if(n=parseInt(n),n>=t)break;if(n){let e=Number.MAX_VALUE,o=[];const a=this.clickDetectorCache[n];for(let n of a){const r=n[0],s=n[2];if(ts)return[];const a=n[1],c=n[3];if(iMath.max(a,c)+10)continue;const l=Ey(t,i,r,a,s,c);l0?c/l:0}class Ny extends Kl{static defaults={height:300,theta:Math.PI/2,arcOrientation:\"UP\"};constructor(e,t){super(e,t),!1===e.arcOrientation?this.arcOrientation=\"DOWN\":!0===e.arcOrientation?this.arcOrientation=\"UP\":e.arcOrientation?this.arcOrientation=e.arcOrientation.toUpperCase():this.arcOrientation=\"UP\",\"bp\"===e.format?this.featureSource=new My(e,t.genome):this.featureSource=new zd(e,t.genome)}async getFeatures(e,t,i){const n=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n})}draw(e){const t=e.context,i=Math.PI/2,n=e.pixelWidth,r=e.pixelHeight;e.viewportWidth;const s=e.bpPerPixel,o=e.bpStart,a=s,c=\"UP\"===this.arcOrientation;ko.fillRect(t,0,e.pixelTop,n,r,{fillStyle:\"rgb(255, 255, 255)\"});const l=e.features;if(l){By(l,1);for(let e of l)if(e.startLeft){let n=Math.round((e.startLeft-o)/a),r=Math.round((e.startRight-o)/a),s=Math.round((e.endLeft-o)/a),l=Math.round((e.endRight-o)/a);t.fillStyle=e.color,t.strokeStyle=e.color,t.beginPath();let h=(n+l)/2,d=(l-n)/2,u=this.height,f=Math.PI+(Math.PI/2-i),p=2*Math.PI-(Math.PI/2-i);c?(t.arc(h,u,d,f,p),t.lineTo(s,u)):(u=0,t.arc(h,u,d,p,f),t.lineTo(l,u));const g=(r+s)/2,m=(s-r)/2,w=u;c?(t.arc(g,w,m,p,f,!0),t.lineTo(n,w)):(t.arc(g,w,m,f,p,!0),t.lineTo(s,w)),t.stroke(),t.fill(),e.drawState={x1:h,y1:u,r1:d,x2:g,y2:w,r2:m,sa:f,ea:p}}else{let n=Math.round((e.start-o)/a),r=Math.round((e.end-o)/a);t.strokeStyle=e.color,t.beginPath();let s=(n+r)/2,l=(r-n)/2,h=this.height,d=Math.PI+(Math.PI/2-i),u=2*Math.PI-(Math.PI/2-i);c?t.arc(s,h,l,d,u):(h=0,t.arc(s,h,l,u,d)),t.stroke(),e.drawState={x1:s,y1:h,r1:l,sa:d,ea:u}}}}clickedFeatures(e){const t=super.clickedFeatures(e),i=[];By(t,-1);for(let n of t){const t=n.drawState,r=e.canvasX-t.x1,s=e.canvasY-t.y1,o=Math.sqrt(r*r+s*s),a=t.r1+3;let c,l;if(void 0===t.x2)c=o,l=t.r1-3;else{const i=e.canvasX-t.x2,n=e.canvasY-t.y2;c=Math.sqrt(i*i+n*n),l=t.r2-3}if(ol){i.push(n);break}}return i}popupData(e,t){if(void 0===t&&(t=this.clickedFeatures(e)),t&&t.length>0)return this.extractPopupData(t[0],this.getGenomeId())}menuItemList(){return[{name:\"Toggle arc direction\",click:function(){this.arcOrientation=\"UP\"===this.arcOrientation?\"DOWN\":\"UP\",this.trackView.repaintViews()}}]}}function By(e,t){e.sort((function(e,i){const n=void 0===e.score?-Number.MAX_VALUE:e.score,r=void 0===i.score?-Number.MAX_VALUE:i.score;return(void 0===t?1:t)*(n-r)}))}class My{constructor(e,t){this.config=e,this.genome=t}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r}){const s=this.genome;if(this.featureCache)return this.featureCache.queryFeatures(e,t,i);{const n=ic(this.config),r=await Vs.loadByteArray(this.config.url,n);return this.featureCache=new Zs(function(e){if(!e)return null;const t=Ih(e);let i,n=!0;const r=[],s=[],o=[];for(;void 0!==(i=t.nextLine());){const e=i.split(\"\\t\");if(n&&i.startsWith(\"color:\")){const t=\"rgb(\"+e[1]+\",\"+e[2]+\",\"+e[3]+\")\";r.push(t),e.length>4&&s.push(e[4])}else{n=!1;const t=e[0],i=Number.parseInt(e[1])-1,c=Number.parseInt(e[2])-1,l=Number.parseInt(e[3]),h=Number.parseInt(e[4]);var a=Number.parseInt(e[5]);const d=r[a];let u;u=i<=h?{chr:t,startLeft:Math.min(i,c),startRight:Math.max(i,c),endLeft:Math.min(l,h),endRight:Math.max(l,h),color:d,score:a}:{chr:t,startLeft:Math.min(l,h),startRight:Math.max(l,h),endLeft:Math.min(i,c),endRight:Math.max(i,c),color:d,score:a},u.start=u.startLeft,u.end=u.endRight,s.length>a&&(u.description=s[a]),o.push(u)}}return o}(r),s),this.featureCache.queryFeatures(e,t,i)}}}class Dy{constructor(e){this.browser=e,this.type=\"ideogram\",this.id=\"ideogram\",this.height=16,this.order=Number.MIN_SAFE_INTEGER,this.disableButtons=!0,this.ignoreTrackMenu=!0}computePixelHeight(e){return this.height}draw({context:e,referenceFrame:t,pixelWidth:i,pixelHeight:n,features:r}){const s=t.chr,o=t.genome.getChromosome(s);if(void 0===o||i<=0||n<=0||\"all\"===s.toLowerCase())return;!function({ctx:e,chr:t,referenceFrame:i,genome:n,width:r,height:s,stainColors:o,features:a}){const c=1,l=.5*c,h=0;if(void 0===n)return;ko.fillRect(e,0,0,r,s,{fillStyle:_s.greyScale(255)});const d=a;if(d){const t=h+s/2,i=[],n=[];if(0===d.length)return;const a=r/d[d.length-1].end;e.beginPath(),ko.roundRect(e,l,l+h,r-2*l,s-2*l,(s-2*l)/2,0,1),e.clip();for(let r=0;r0&&h[h.length-1].end&&(l=Math.max(l,h[h.length-1].end),o.bpLength=l),a{Ty.getColor(e)}));class Ly extends Kl{static defaults={margin:10,colorByNumReadsThreshold:5,height:100};constructor(e,t){super(e,t)}init(e){super.init(e),this.type=e.type||\"junctions\",e._featureSource?(this.featureSource=e._featureSource,delete e._featureSource):this.featureSource=e.featureSource?e.featureSource:Gd(e,this.browser.genome)}async postInit(){if(\"function\"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),void 0===this.visibilityWindow&&\"function\"==typeof this.featureSource.defaultVisibilityWindow&&(this.visibilityWindow=await this.featureSource.defaultVisibilityWindow()),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get supportsWholeGenome(){return!1}async getFeatures(e,t,i,n){const r=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r})}computePixelHeight(e){return this.height}draw(e){const t=e.features,i=e.context,n=e.bpPerPixel,r=e.bpStart,s=e.pixelWidth,o=e.pixelHeight,a=r+s*n+1;if(this.isMergedTrack||ko.fillRect(i,0,e.pixelTop,s,o,{fillStyle:\"rgb(255, 255, 255)\"}),t){const s={};s.referenceFrame=e.viewport.referenceFrame,s.referenceFrameStart=s.referenceFrame.start,s.referenceFrameEnd=s.referenceFrameStart+s.referenceFrame.toBP(e.viewport.getWidth()),s.featureZoomOutTracker={};for(let e of t)if(!(e.enda)break;this.renderJunction(e,r,n,o,i,s)}}else console.log(\"No feature list\")}renderJunction(e,t,i,n,r,s){e.isVisible=!1;const o=Math.round((e.start-t)/i),a=Math.round((e.end-t)/i),c=(o+a)/2;if(a-o<=3){if(c in s.featureZoomOutTracker)return;s.featureZoomOutTracker[c]=!0}if(this.config.hideAnnotatedJunctions&&\"true\"===e.attributes.annotated_junction)return;if(this.config.hideUnannotatedJunctions&&\"false\"===e.attributes.annotated_junction)return;if(this.config.hideMotifs&&this.config.hideMotifs.includes(e.attributes.motif))return;if(this.config.hideStrand===e.strand)return;if(this.config.minJunctionEndsVisible){let t=0;if(e.start>=s.referenceFrameStart&&e.start<=s.referenceFrameEnd&&(t+=1),e.end>=s.referenceFrameStart&&e.end<=s.referenceFrameEnd&&(t+=1),t0&&h/d>this.config.maxFractionMultiMappedReads)return;if(e.attributes.maximum_spliced_alignment_overhang&&parseInt(e.attributes.maximum_spliced_alignment_overhang)this.config.maxSamplesWithThisJunction)return;if(e.attributes.num_samples_total&&(e.attributes.percent_samples_with_this_junction=100*u/Number(e.attributes.num_samples_total),this.config.minPercentSamplesWithThisJunction&&(e.attributes.percent_samples_with_this_junctionthis.config.maxPercentSamplesWithThisJunction)))return}const f=this.margin,p=n,g=f+.5*p;let m=f;const w=f+p-10,b=(o+c)/2,F=(c+a)/2;let v,y,A=1;e.attributes.line_width?A=Number(e.attributes.line_width):(void 0===this.config.thicknessBasedOn||\"numUniqueReads\"===this.config.thicknessBasedOn?A=l:\"numReads\"===this.config.thicknessBasedOn?A=d:\"numSamplesWithThisJunction\"===this.config.thicknessBasedOn&&void 0!==u&&(A=u),A=1+Math.log(A+1)/Math.log(12)),void 0===this.config.bounceHeightBasedOn||\"random\"===this.config.bounceHeightBasedOn?v=(e.start+e.end)%7:\"distance\"===this.config.bounceHeightBasedOn?v=6*(e.end-e.start)/(s.referenceFrameEnd-s.referenceFrameStart):\"thickness\"===this.config.bounceHeightBasedOn&&(v=2*A),m+=p*Math.max(7-v,0)/10,y=e.attributes.color?e.attributes.color:void 0===this.config.colorBy||\"numUniqueReads\"===this.config.colorBy?l>this.config.colorByNumReadsThreshold?\"blue\":\"#AAAAAA\":\"numReads\"===this.config.colorBy?d>this.config.colorByNumReadsThreshold?\"blue\":\"#AAAAAA\":\"isAnnotatedJunction\"===this.config.colorBy?\"true\"===e.attributes.annotated_junction?\"#b0b0ec\":\"orange\":\"strand\"===this.config.colorBy?\"+\"===e.strand?\"#b0b0ec\":\"#ecb0b0\":\"motif\"===this.config.colorBy?Ty.getColor(e.attributes.motif):\"#AAAAAA\";let C=\"\";e.attributes.label?C=e.attributes.label.replace(/_/g,\" \"):void 0===this.config.labelWith||\"uniqueReadCount\"===this.config.labelWith?C=l:\"totalReadCount\"===this.config.labelWith?C=d:\"numSamplesWithThisJunction\"===this.config.labelWith?void 0!==u&&(C=u):\"percentSamplesWithThisJunction\"===this.config.labelWith?void 0!==e.attributes.percent_samples_with_this_junction&&(C=e.attributes.percent_samples_with_this_junction.toFixed(0)+\"%\"):\"motif\"===this.config.labelWith&&void 0!==e.attributes.motif&&(C+=e.attributes.motif),\"uniqueReadCount\"===this.config.labelWithInParen?C+=\" (\"+l+\")\":\"totalReadCount\"===this.config.labelWithInParen?C+=\" (\"+d+\")\":\"multiMappedReadCount\"===this.config.labelWithInParen?h>0&&(C+=\" (+\"+h+\")\"):\"numSamplesWithThisJunction\"===this.config.labelWithInParen?void 0!==u&&(C+=\" (\"+u+\")\"):\"percentSamplesWithThisJunction\"===this.config.labelWithInParen?void 0!==e.attributes.percent_samples_with_this_junction&&(C+=\" (\"+e.attributes.percent_samples_with_this_junction.toFixed(0)+\"%)\"):\"motif\"===this.config.labelWithInParen&&void 0!==e.attributes.motif&&(C+=` ${e.attributes.motif}`),e.isVisible=!0,r.beginPath(),r.moveTo(o,w),r.bezierCurveTo(b,m,F,m,a,w),r.lineWidth=A,r.strokeStyle=y,r.stroke();const _=(e,t,i,n)=>{e.beginPath(),e.moveTo(t,i),e.lineTo(t-n/2,i-n),e.lineTo(t+n/2,i-n),e.lineTo(t,i),e.closePath(),e.fill()};if(e.attributes.left_shape||e.attributes.right_shape){r.fillStyle=y;const t=r.lineWidth>2?10:7;e.attributes.left_shape&&_(r,o,w,t),e.attributes.right_shape&&_(r,a,w,t)}r.fillText(C,c-r.measureText(C).width/2,(7*m+g)/8)}clickedFeatures(e){return super.clickedFeatures(e).filter((function(e){return e.isVisible&&e.attributes}))}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=e.genomicLocation,n=[];for(let e of t){const t=\"function\"==typeof e.popupData?e.popupData(i):this.extractPopupData(e._f||e,this.getGenomeId());t&&(n.length>0&&n.push(\"

\"),Array.prototype.push.apply(n,t))}return n}dispose(){this.trackView=void 0}}const zy={min:0,max:3e3,color:\"rgb(0,0,255)\"};class Hy{constructor(e){e=e||zy,this.max=e.max,this.min=e.min||0,this.cache=[],this.nbins=1e3,this.binsize=(this.max-this.min)/this.nbins,this.updateColor(e.color||\"rgb(0,0,255)\"),this.br=255,this.bg=255,this.bb=255}updateColor(e){const t=e.substring(4).replace(\")\",\"\").split(\",\");3===t.length&&(this.r=Number.parseInt(t[0].trim()),this.g=Number.parseInt(t[1].trim()),this.b=Number.parseInt(t[2].trim())),this.cache=[]}setMinMax(e,t){this.min=e,this.max=t,this.cache=[],this.binsize=(this.max-this.min)/this.nbins}getColor(e){if(e<=this.min)return\"white\";if(e>=this.max)return`rgb(${this.r},${this.g},${this.b})`;const t=Math.floor((Math.min(this.max,e)-this.min)/this.binsize);if(void 0===this.cache[t]){const i=(e-this.min)/(this.max-this.min),n=1-i;this.cache[t]=`rgb(${Math.floor(i*this.r+n*this.br)},${Math.floor(i*this.g+n*this.bg)},${Math.floor(i*this.b+n*this.bb)})`}return this.cache[t]}toJson(){return{min:this.min,max:this.max,color:`rgb(${this.r},${this.g},${this.b})`}}static parse(e){const t=e.split(\",\"),i={min:Number.parseFloat(t[0]),max:Number.parseFloat(t[1]),color:`${t[2]},${t[3]},${t[4]}`};return new Hy(i)}}class Py extends Kl{static defaults={height:300,rowHeight:3,min:.5,max:3,scale:1,visibilityWindow:1e4,supportHiDPI:!1,startSize:4,stepSize:2};constructor(e,t){super(e,t)}init(e){super.init(e),this.type=\"shoebox\",e.max&&(this.dataRange={min:e.min||0,max:e.max});const t=Object.assign({},this.config);t.format=\"shoebox\",this.featureSource=Gd(t,this.browser.genome)}async postInit(){if(\"function\"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader(),this.disposed))return;this.header&&(this.header.scale&&(this.header.scale=Number.parseFloat(this.header.scale)),this.setTrackProperties(this.header),this.rowCount=this.header.firstFeature?this.header.firstFeature.values.length:100);const e=this.dataRange.min,t=this.dataRange.max;this.colorScale=new Hy({min:e,max:t,color:this.color}),this.scale||(this.scale=1),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor}get color(){return this._color||\"rgb(0,0,255)\"}set color(e){this._color=e,this.colorScale&&this.colorScale.updateColor(e)}menuItemList(){const e=[];e.push(\"
\");let t=Bt(\"
\");t.text(\"Set row height\");const i=this.browser;return e.push({object:t,dialog:function(e){const t={label:\"Row Height\",value:this.rowHeight,callback:()=>{const e=parseInt(this.browser.inputDialog.value,10);if(void 0!==e){i.sampleNameViewportWidth=void 0;const t=[];this.trackView.track.selected?t.push(...this.trackView.browser.getSelectedTrackViews().map((({track:e})=>e))):t.push(this);for(const i of t)i.rowHeight=e,i.rowHeight*i.rowCount\"),t=Bt(\"
\"),t.text(\"Set data range\"),e.push({object:t,dialog:function(){this.trackView.track.selected?this.browser.dataRangeDialog.configure(this.trackView.browser.getSelectedTrackViews()):this.browser.dataRangeDialog.configure(this.trackView),this.browser.dataRangeDialog.present(Bt(this.browser.columnContainer))}}),e}setDataRange({min:e,max:t}){this.dataRange.min=e,this.dataRange.max=t,this.colorScale.setMinMax(e,t),this.trackView.repaintViews()}async getFeatures(e,t,i,n){const r=this.visibilityWindow;return await this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r})}draw({context:e,pixelTop:t,pixelWidth:i,pixelHeight:n,features:r,bpPerPixel:s,bpStart:o}){if(ko.fillRect(e,0,t,i,n,{fillStyle:\"rgb(255, 255, 255)\"}),r&&r.length>0){const a=this.rowHeight,c=t+n,l=o+i*s+1,h=a;for(let i of r){if(i.endl)continue;const n=Math.floor((i.start-o)/s),r=Math.floor((i.end-o)/s),d=Math.max(1,r-n);for(let r=i.values.length-1;r>=0;r--){const s=i.values[r];if(s>=this.dataRange.min){const o=(i.values.length-1-r)*a;if(o+ac)continue;const l=this.colorScale.getColor(s);e.fillStyle=l,e.fillRect(n,o,d,h)}}}}}paintAxis(e,t,i){var n={font:\"normal 10px Arial\",textAlign:\"right\",strokeStyle:\"black\"};const r=this.startSize+this.rowCount*this.stepSize,s=this.startSize,o=(r-s)/i;for(let t=50;t<=r;t+=50){const r=Math.max(10,i-Math.round((t-s)/o));ko.strokeLine(e,35,r,40,r,n),t>s&&ko.fillText(e,Oy(t),30,r+4,n)}n.textAlign=\"center\",n.font=\"normal 10px Arial\",ko.fillText(e,\"Footprint size (bp)\",10,i/2,n,{rotate:{angle:-90}})}computePixelHeight(e){return e&&0!==e.length?e[0].values.length*this.rowHeight:0}clickedFeatures(e){const t=super.clickedFeatures(e),i=e.y;return t.filter((function(e){const t=e.pixelRect;return t&&i>=t.y&&i<=t.y+t.h}))}hoverText(e){const t=this.clickedFeatures(e);if(t&&t.length>0)return`${t[0].sample}: ${t[0].value}`}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=[];for(let e of t){i.length>0&&(i.push(\"
\"),i.push(\"
\"));const t=e._f||e,n=\"function\"==typeof t.popupData?t.popupData(this.type,this.browser.genome.id):this.extractPopupData(t);Array.prototype.push.apply(i,n)}return i}get supportsWholeGenome(){return!1}getState(){const e=super.getState();return e.colorScale=this.colorScale.toJson(),e}}function Oy(e){return Number.isInteger(e)||e%1==0?e:Math.abs(e)>=10?e.toFixed():Math.abs(e)>=1?e.toFixed(1):Math.abs(e)>=.1?e.toFixed(2):e.toExponential(1)}const Uy=new Map([[\"ideogram\",(e,t)=>new Dy(e,t)],[\"sequence\",(e,t)=>new Cu(e,t)],[\"feature\",(e,t)=>new lu(e,t)],[\"seg\",(e,t)=>new cp(e,t)],[\"mut\",(e,t)=>new cp(e,t)],[\"maf\",(e,t)=>new cp(e,t)],[\"shoebox\",(e,t)=>new Py(e,t)],[\"wig\",(e,t)=>new Rd(e,t)],[\"merged\",(e,t)=>new Sf(e,t)],[\"alignment\",(e,t)=>new _w(e,t)],[\"interaction\",(e,t)=>new xw(e,t)],[\"interact\",(e,t)=>new xw(e,t)],[\"variant\",(e,t)=>new Fy(e,t)],[\"qtl\",(e,t)=>new _y(e,t)],[\"eqtl\",(e,t)=>new _y(e,t)],[\"gwas\",(e,t)=>new Iy(e,t)],[\"arc\",(e,t)=>new Ny(e,t)],[\"gcnv\",(e,t)=>new Sy(e,t)],[\"junction\",(e,t)=>new Ly(e,t)],[\"blat\",(e,t)=>new gu(e,t)],[\"cnvpytor\",(e,t)=>new my(e,t)]]);class qy{constructor(e,t){const i=(new DOMParser).parseFromString(e,\"text/xml\");this.processRootNode(i,t);const n=i.getElementsByTagName(\"Resource\"),r=i.getElementsByTagName(\"Track\"),s=r&&r.length>0,o=[];this.tracks=o;const a=new Map;Array.from(n).forEach((function(e,t){var i={url:e.getAttribute(\"path\"),indexURL:e.getAttribute(\"index\"),order:t};a.set(i.url,i),s||o.push(i)})),s&&Array.from(r).forEach((function(e){const t=e.getElementsByTagName(\"Track\");if(t&&t.length>0){const i={type:\"merged\",tracks:[]};Vy(e,i),o.push(i),Array.from(t).forEach((function(e){e.processed=!0;const t=e.getAttribute(\"id\"),n=a.get(t);n&&(i.tracks.push(n),Vy(e,n),n.autoscale=!1,i.height=n.height)}))}else if(!e.processed){const t=e.getAttribute(\"id\"),i=a.get(t);i&&(o.push(i),Vy(e,i))}}))}processRootNode(e,t){const i=e.getElementsByTagName(\"Session\");!i||i.length;const n=i.item(0),r=n.getAttribute(\"genome\"),s=n.getAttribute(\"locus\"),o=n.getAttribute(\"ucscID\");t&&t.hasOwnProperty(r)?this.genome=r:(this.reference={fastaURL:r},o&&(this.reference.id=o)),s&&(this.locus=s)}}function Vy(e,t){t.name=e.getAttribute(\"name\");const i=e.getAttribute(\"color\");i&&(t.color=\"rgb(\"+i+\")\");const n=e.getAttribute(\"altColor\");i&&(t.altColor=\"rgb(\"+n+\")\");const r=e.getAttribute(\"height\");r&&(t.height=parseInt(r));const s=e.getAttribute(\"autoScale\");s&&(t.autoscale=\"true\"===s);const o=e.getAttribute(\"autoscaleGroup\");o&&(t.autoscaleGroup=o);const a=e.getAttribute(\"windowFunction\");a&&(t.windowFunction=a);const c=e.getAttribute(\"visibilityWindow\")||e.getAttribute(\"featureVisibilityWindow\");c&&(t.visibilityWindow=c);const l=e.getAttribute(\"indexed\");l&&(t.indexed=\"true\"===l);const h=e.getAttribute(\"normalize\");h&&(t.normalize=\"true\"===h);const d=e.getElementsByTagName(\"DataRange\");if(d.length>0){const e=d.item(0);t.min=Number(e.getAttribute(\"minimum\")),t.max=Number(e.getAttribute(\"maximum\")),t.logScale=\"LOG\"===e.getAttribute(\"type\")}}class Qy{constructor(e,t,i,n,r){this.genome=e,this.chr=t,this.start=i,this.end=n,this.bpPerPixel=r,this.id=s()}get center(){return(this.start+this.end)/2}get locusSearchString(){return`${this.chr}:${this.start+1}-${this.end}`}extend(e){const t=Math.min(e.start,this.start),i=Math.max(e.end,this.end),n=(i-t)/(this.end-this.start);this.start=t,this.end=i,this.bpPerPixel*=n}calculateEnd(e){return this.start+this.bpPerPixel*e}calculateCenter(e){return this.start+this.bpPerPixel*e/2}calculateBPP(e,t){return(e-this.start)/t}set(e){this.chr=e.chr,this.start=e.start,this.bpPerPixel=e.bpPerPixel}toPixels(e){return e/this.bpPerPixel}toBP(e){return this.bpPerPixel*e}shift(e){this.start+=e,this.end+=e}shiftPixels(e,t,i){const n=this.start,r=e*this.bpPerPixel;return this.start+=r,i&&this.clampStart(t),this.end=this.start+t*this.bpPerPixel,n!==this.start}clampStart(e){const t=this.genome.getChromosome(this.chr).bpStart||0;if(this.start=Math.max(t,this.start),e){const{bpLength:t}=this.genome.getChromosome(this.chr),i=t-e*this.bpPerPixel;this.start>i&&(this.start=i)}}async zoomWithScaleFactor(e,t,i,n){const r=void 0===n?this.start+this.toBP(i/2):n,s=this.start,o=this.bpPerPixel,a=this.getChromosome().bpLength,c=t<1?e.minimumBases()/i:a/i;this.bpPerPixel=t<1?Math.max(this.bpPerPixel*t,c):Math.min(this.bpPerPixel*t,c);const l=this.bpPerPixel*i;this.start=r-.5*l,this.clampStart(i),this.end=this.start+l;(s!==this.start||o!==this.bpPerPixel)&&await e.updateViews(!0)}getChromosome(){return this.genome.getChromosome(this.chr)}getMultiLocusLabelBPLengthOnly(e){const t=\" \",i=Math.floor(this.start)+1,n=Math.round(this.start+this.bpPerPixel*e);return`${t}${this.chr}${t}${ac(n-i)}${t}`}getMultiLocusLabelLocusOnly(e){const t=\" \",{chr:i,start:n,end:r}=this.getPresentationLocusComponents(e);return`${t}${i}:${n}-${r}${t}`}getMultiLocusLabel(e){const t=\" \",{chr:i,start:n,end:r}=this.getPresentationLocusComponents(e),s=Math.floor(this.start)+1;return`${t}${i}:${n}-${r}${t}${t}(${ac(Math.round(this.start+this.bpPerPixel*e)-s)})${t}`}getPresentationLocusComponents(e){if(\"all\"===this.chr)return{chr:this.chr};{const t=Dt(Math.floor(this.start)+1),i=Dt(Math.round(this.start+this.bpPerPixel*e));return{chr:this.chr,start:t,end:i}}}getLocusString(){if(\"all\"===this.chr)return\"all\";return`${this.genome.getChromosomeDisplayName(this.chr)}:${Dt(Math.floor(this.start)+1)}-${Dt(Math.round(this.end))}`}description(e){console.log(` ${e||\"\"} referenceFrame - ${this.chr} bpp ${this.bpPerPixel.toFixed(3)} start ${Dt(Math.round(this.start))} end ${Dt(Math.round(this.end))} `)}overlaps(e){return this.chr===e.chr&&this.end>=e.start&&e.end>=this.start}}function jy(){return\"3.1.4\"}const Wy=\"Maximum sequence count exceeded\";class Gy{constructor(t,i){this.container=e({class:\"igv-chromosome-select-widget-container\"}),i.appendChild(this.container),this.select=document.createElement(\"select\"),this.select.setAttribute(\"name\",\"chromosome-select-widget\"),this.container.appendChild(this.select),this.select.addEventListener(\"change\",(()=>{this.select.blur(),\"\"!==this.select.value&&Wy!==this.select.value&&t.search(this.select.value)})),this.showAllChromosomes=!1!==t.config.showAllChromosomes,this.genome=t.genome}show(){this.container.style.display=\"flex\"}hide(){this.container.style.display=\"none\"}setValue(e){this.select.value=this.genome.getChromosomeDisplayName(e)}update(e){this.genome=e;const t=e.wgChromosomeNames.map((t=>e.getChromosomeDisplayName(t)))||[];if(this.showAllChromosomes&&e.chromosomeNames.length>1){const i=new Set(t);let n=0;for(let r of e.chromosomeNames){if(1e3==++n){t.push(Wy);break}i.has(r)||(r=e.getChromosomeDisplayName(r),t.push(r))}}this.select.innerHTML=\"\",e.showWholeGenomeView()&&t.unshift(\"all\");for(let i of t){const t=document.createElement(\"option\");t.setAttribute(\"value\",i),t.innerText=e.getChromosomeDisplayName(i),this.select.appendChild(t)}}}class $y{constructor(t,i){this.container=e({class:\"igv-windowsize-panel-container\"}),t.appendChild(this.container),i.on(\"locuschange\",(e=>{this.updatePanel(e)})),this.browser=i}show(){this.container.style.display=\"block\"}hide(){this.container.style.display=\"none\"}updatePanel(e){const t=this.browser.calculateViewportWidth(this.browser.referenceFrameList.length);this.container.innerText=1===e.length?ac(Math.round(t*e[0].bpPerPixel)):\"\"}}class Ky extends kf{constructor(e,t,i,n){super(e,t,\"Select Tracks\",If,'\\n multi select\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n','\\n multi select hover\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n',!1),this.navbar=i,this.enableMultiTrackSelection=!1,this.button.addEventListener(\"mouseenter\",(e=>{!1===n&&this.setState(!0)})),this.button.addEventListener(\"mouseleave\",(e=>{!1===n&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{this.setMultiTrackSelection(!this.enableMultiTrackSelection)}).bind(this),this.button.addEventListener(\"click\",this.boundMouseClickHandler)}setMultiTrackSelection(e){this.enableMultiTrackSelection=e,this.setState(this.enableMultiTrackSelection),!1===this.enableMultiTrackSelection&&this.navbar.overlayTrackButton.setVisibility(!1);for(const t of this.browser.trackViews)t.enableTrackSelection(e)}}class Yy{constructor(t,i){this.browser=i,this.columnContainer=t,this.horizontalGuide=e({class:\"igv-cursor-guide-horizontal\"}),t.appendChild(this.horizontalGuide),this.verticalGuide=e({class:\"igv-cursor-guide-vertical\"}),t.appendChild(this.verticalGuide),this.addMouseHandler(i),this.setVisibility(i.config.showCursorGuide)}addMouseHandler(e){this.boundMouseMoveHandler=function(t){t.target.tagName;const{x:i,y:n}=a(t,this.columnContainer);if(this.horizontalGuide.style.top=`${n}px`,\"CANVAS\"===t.target.tagName){const n=function(e,t){for(;e.parentElement;){if(e.parentElement.classList.contains(t))return e.parentElement;e=e.parentElement}return}(t.target,\"igv-viewport\");if(n&&e.getRulerTrackView()){this.verticalGuide.style.left=`${i}px`;const r=e.root.querySelectorAll(\".igv-column\");let s;const o=n.parentElement;for(let e=0;e\\n cursor\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n','\\n cursor hover\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n',t.doShowCursorGuide),this.button.addEventListener(\"mouseenter\",(()=>{!1===t.doShowCursorGuide&&this.setState(!0)})),this.button.addEventListener(\"mouseleave\",(()=>{!1===t.doShowCursorGuide&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{t.doShowCursorGuide=!t.doShowCursorGuide,t.setCursorGuideVisibility(t.doShowCursorGuide),this.setState(t.doShowCursorGuide)}).bind(this),this.button.addEventListener(\"click\",this.boundMouseClickHandler),this.setVisibility(t.config.showCursorTrackingGuideButton)}}class Zy extends kf{constructor(e,t){super(e,t,\"Center Line\",If,'\\n centerline\\n \\n \\n \\n \\n \\n \\n','\\n centerline hover\\n \\n \\n \\n \\n \\n \\n',t.config.showCenterGuide),this.button.addEventListener(\"mouseenter\",(()=>{!1===t.doShowCenterLine&&this.setState(!0)})),this.button.addEventListener(\"mouseleave\",(()=>{!1===t.doShowCenterLine&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{t.doShowCenterLine=!t.doShowCenterLine,t.setCenterLineVisibility(t.doShowCenterLine),this.setState(t.doShowCenterLine)}).bind(this),this.button.addEventListener(\"click\",this.boundMouseClickHandler),this.setVisibility(t.config.showCenterGuideButton)}}class Jy extends kf{constructor(e,t){super(e,t,\"Track Labels\",If,'\\n track labels\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n','\\n track labels hover\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n',t.config.showTrackLabels),this.button.addEventListener(\"mouseenter\",(()=>{!1===t.doShowTrackLabels&&this.setState(!0)})),this.button.addEventListener(\"mouseleave\",(()=>{!1===t.doShowTrackLabels&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{t.doShowTrackLabels=!t.doShowTrackLabels,t.setTrackLabelVisibility(t.doShowTrackLabels),this.setState(t.doShowTrackLabels)}).bind(this),this.button.addEventListener(\"click\",this.boundMouseClickHandler),this.setVisibility(t.config.showTrackLabelButton)}}class eA extends kf{constructor(e,t){super(e,t,[\"ROI\",\"Regions of Interest Table\"],If,'\\n roi\\n \\n \\n \\n \\n ROI\\n \\n \\n \\n','\\n roi hover\\n \\n \\n \\n \\n ROI\\n \\n \\n \\n',!1),this.button.addEventListener(\"mouseenter\",(()=>{!1===t.doShowROITable&&this.setState(!0)})),this.button.addEventListener(\"mouseleave\",(()=>{!1===t.doShowROITable&&this.setState(!1)})),this.button.addEventListener(\"click\",(()=>this.buttonHandler(!t.doShowROITable))),this.setVisibility(!1)}buttonHandler(e){this.setState(e),this.browser.setROITableVisibility(e)}}class tA extends kf{constructor(e,t){super(e,t,\"Sample Info\",If,'\\n sample info\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n','\\n sample info hover\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n',!1),this.showSampleInfo=!1,this.button.addEventListener(\"mouseenter\",(()=>{!1===this.showSampleInfo&&this.setState(!0)})),this.button.addEventListener(\"mouseleave\",(()=>{!1===this.showSampleInfo&&this.setState(!1)})),this.button.addEventListener(\"click\",(()=>{this.performClickWithState(t,void 0)}))}performClickWithState(e,t){this.showSampleInfo=void 0===t?!this.showSampleInfo:t;e.columnContainer.querySelector(\".igv-sample-info-column\").style.display=!1===this.showSampleInfo?\"none\":\"flex\",this.setState(this.showSampleInfo),e.layoutChange()}setButtonVisibility(e){this.showSampleInfo=e,this.setState(this.showSampleInfo),!0===this.showSampleInfo?this.show():this.hide()}}class iA extends kf{constructor(e,t){super(e,t,\"Sample Names\",'\\n \\n \\n \\n \\n \\n \\n \\n \\n','\\n sample names\\n \\n \\n \\n \\n \\n \\n \\n \\n','\\n sample names hover\\n \\n \\n \\n \\n \\n \\n \\n \\n',t.config.showSampleNames),this.button.addEventListener(\"mouseenter\",(()=>{!1===t.showSampleNames&&this.setState(!0)})),this.button.addEventListener(\"mouseleave\",(()=>{!1===t.showSampleNames&&this.setState(!1)})),this.button.addEventListener(\"click\",(()=>{this.performClickWithState(t,void 0)})),!0===t.config.showSampleNameButton?this.show():this.hide()}performClickWithState(e,t){e.showSampleNames=void 0===t?!e.showSampleNames:t;e.columnContainer.querySelector(\".igv-sample-name-column\").style.display=!1===e.showSampleNames?\"none\":\"flex\",this.setState(e.showSampleNames),e.layoutChange()}}class nA{constructor(t,i){this.parent=t,this.popover=e({class:\"igv-ui-dropdown\"}),t.appendChild(this.popover),this.popoverContent=e(),this.popover.appendChild(this.popoverContent),this.popover.style.display=\"none\",this.shim=i}configure(e){if(0===e.length)return;const t=gc(e,this.popover);for(const{object:e}of t)this.popoverContent.appendChild(e)}present(e){this.popover.style.display=\"block\";let{x:t,y:i}=a(e,this.parent);this.popover.style.left=`${t+this.shim.left}px`,this.popover.style.top=`${i+this.shim.top}px`}_present(e){this.popover.style.display=\"block\";let{x:t,y:i,width:n}=a(e,this.parent);t+=this.shim.left,i+=this.shim.top,this.popover.style.top=`${i}px`;const{width:r}=this.popover.getBoundingClientRect(),s=t+r,o=s-n;this.popover.style.left=`${s>n?t-o:t}px`}dismiss(){this.popover.style.display=\"none\"}}class rA extends kf{constructor(e,t){super(e,t,\"Save Image\",If,'\\n save image\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n','\\n save image\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n',!1),this.button.addEventListener(\"mouseenter\",(()=>this.setState(!0))),this.button.addEventListener(\"mouseleave\",(()=>{for(const e of this.button.querySelectorAll(\"div\"))if(\"block\"===e.style.display)return;this.setState(!1)})),this.dropdown=new nA(this.button.parentNode,{top:24,left:-88});const i=[{label:\"Save as SVG\",click:e=>{this.browser.saveSVGtoFile(\"igvjs.svg\"),this.dropdown.dismiss()}},{label:\"Save as PNG\",click:e=>{this.browser.savePNGtoFile(\"igvjs.png\"),this.dropdown.dismiss()}}];this.dropdown.configure(i),this.button.addEventListener(\"click\",(e=>{let t;if(e.target===this.button)t=!0;else if(e.target.closest(\"svg\")){e.target.closest(\"div\")===this.button&&(t=!0)}!0===t&&(\"none\"===this.dropdown.popover.style.display?this.dropdown.present(e):this.dropdown.dismiss())})),this.setVisibility(t.config.showSVGButton)}navbarResizeHandler(e){this.dropdown.dismiss(),super.navbarResizeHandler(e)}}const sA=function(t,i,n){const r=e({class:\"igv-navbar-button\"});t.append(r),r.textContent=n.label,r.addEventListener(\"click\",(()=>n.callback(i)))};let oA=23,aA=0;class cA{constructor(t,i,n){this.browser=i,this.zoomContainer=e({class:\"igv-zoom-widget\"}),n.appendChild(this.zoomContainer),this.zoomOutButton=e(),this.zoomContainer.appendChild(this.zoomOutButton),this.zoomOutButton.appendChild(l(\"minus-circle\")),this.zoomOutButton.addEventListener(\"click\",(()=>{i.zoomOut()}));const r=e();this.zoomContainer.appendChild(r),this.slider=document.createElement(\"input\"),this.slider.type=\"range\",this.slider.min=\"0\",this.slider.max=`${oA}`,r.appendChild(this.slider),this.slider.addEventListener(\"change\",(e=>{e.preventDefault(),e.stopPropagation();const t=i.referenceFrameList[0],{bpLength:n}=t.genome.getChromosome(t.chr),{end:r,start:s}=t,o=r-s,a=n/Math.pow(2,e.target.valueAsNumber);i.zoomWithScaleFactor(a/o)})),this.zoomInButton=e(),this.zoomContainer.appendChild(this.zoomInButton),this.zoomInButton.appendChild(l(\"plus-circle\")),this.zoomInButton.addEventListener(\"click\",(()=>{i.zoomIn()})),i.on(\"locuschange\",(e=>{this.browser.isMultiLocusMode()?this.disable():(this.enable(),this.update(e))}))}update(e){if(this.slider){const t=e[0],{bpLength:i}=t.genome.getChromosome(t.chr),{start:n,end:r}=t;oA=Math.ceil(Math.log2(i/this.browser.minimumBases())),this.slider.max=`${oA}`;const s=i/(r-n);aA=Math.log2(s),this.slider.value=`${Math.round(aA)}`}}enable(){this.slider&&(this.slider.disabled=!1)}disable(){this.slider&&(this.slider.disabled=!0)}hide(){this.zoomContainer.style.display=\"none\"}show(){this.zoomContainer.style.display=\"block\"}hideSlider(){this.slider&&(this.slider.style.display=\"none\")}showSlider(){this.slider&&(this.slider.style.display=\"block\")}}class lA{constructor(t,i){this.browser=i,this.config=t,this.currentClass=\"igv-navbar-text-button\";const n=Bt(\"
\",{class:\"igv-navbar\"});this.$navigation=n;const r=Bt(\"
\",{class:\"igv-navbar-left-container\"});n.append(r),this.navbarLeftContainer=r.get(0);const s=Bt(\"
\",{class:\"igv-logo\"});r.append(s);const o=Bt('IGV; ');o.css(\"width\",\"34px\"),o.css(\"height\",\"32px\"),s.append(o),this.$current_genome=Bt(\"
\",{class:\"igv-current-genome\"}),r.append(this.$current_genome),this.$current_genome.text(\"\");const a=Bt(\"
\",{class:\"igv-navbar-genomic-location\"});r.append(a),this.chromosomeSelectWidget=new Gy(i,a.get(0)),!1!==t.showChromosomeWidget?this.chromosomeSelectWidget.show():this.chromosomeSelectWidget.hide();const c=Bt(\"
\",{class:\"igv-locus-size-group\"});a.append(c);const h=Bt(\"
\",{class:\"igv-search-container\"});c.append(h),this.$searchInput=Bt(\"\",{class:\"igv-search-input\",type:\"text\",placeholder:\"Locus Search\"}),h.append(this.$searchInput),this.$searchInput[0].addEventListener(\"keyup\",(e=>{e.stopImmediatePropagation()})),this.$searchInput.change((()=>i.doSearch(this.$searchInput.val())));const d=e({class:\"igv-search-icon-container\"});h.append(Bt(d)),d.appendChild(l(\"search\")),d.addEventListener(\"click\",(()=>i.doSearch(this.$searchInput.val()))),this.windowSizePanel=new $y(c.get(0),i);const u=Bt(\"
\",{class:\"igv-navbar-right-container\"});n.append(u),this.navbarRightContainer=u.get(0);const f=Bt('
');u.append(f);const p=f.get(0);this.toggle_button_container=p,this.overlayTrackButton=new Bf(p,i),this.overlayTrackButton.setVisibility(!1);const g=!1!==t.showMultiSelectButton;if(this.multiTrackSelectButton=new Ky(p,i,this,g),this.cursorGuideButton=new Xy(p,i),this.centerLineButton=new Zy(p,i),this.trackLabelControl=new Jy(p,i),this.roiTableControl=new eA(p,i),this.sampleInfoControl=new tA(p,i),this.sampleNameControl=new iA(p,i),!0===t.showSVGButton&&(this.saveImageControl=new rA(p,i)),t.customButtons)for(let e of t.customButtons)new sA(p,i,e);this.zoomWidget=new cA(t,i,u.get(0)),!1===t.showNavigation&&this.$navigation.hide()}navbarDidResize(){const e=this.$navigation.width(),t=this.currentNavbarButtonClass();\"igv-navbar-text-button\"===t&&(this.textButtonContainerWidth=this.navbarRightContainer.getBoundingClientRect().width);const i=this.browser,n=i.isMultiLocusWholeGenomeView()||i.referenceFrameList&&Uu.isWholeGenomeView(i.referenceFrameList[0].chr);n?this.windowSizePanel.hide():this.windowSizePanel.show();const{x:r,width:s}=this.navbarLeftContainer.getBoundingClientRect(),o=r+s,{x:a}=this.navbarRightContainer.getBoundingClientRect();let c;if(\"igv-navbar-text-button\"===t&&a-o<8)c=\"igv-navbar-icon-button\";else if(this.textButtonContainerWidth&&\"igv-navbar-icon-button\"===t){e-o-this.textButtonContainerWidth>8&&(c=\"igv-navbar-text-button\")}let l;c&&t!==c&&(this.currentClass=c,this.browser.fireEvent(\"navbar-resize\",[c])),l=n?\"igv-zoom-widget-hidden\":e>860?\"igv-zoom-widget\":\"igv-zoom-widget-900\",Bt(this.zoomWidget.zoomContainer).removeClass(),Bt(this.zoomWidget.zoomContainer).addClass(l)}setCenterLineButtonVisibility(e){e?this.centerLineButton.setVisibility(!e):this.centerLineButton.setVisibility(this.config.showCenterGuideButton)}setCursorGuideVisibility(e){e?this.cursorGuide.show():this.cursorGuide.hide()}updateGenome(e){let t=e.id&&e.id.length<20?e.id:`${e.id.substring(0,8)}...${e.id.substring(e.id.length-8)}`;this.$current_genome.text(t),this.$current_genome.attr(\"title\",e.description);!1!==this.config.showChromosomeWidget&&!1!==e.showChromosomeWidget&&e.chromosomeNames&&e.chromosomeNames.length>1?(this.chromosomeSelectWidget.update(e),this.chromosomeSelectWidget.show()):this.chromosomeSelectWidget.hide()}updateLocus(e,t){this.$searchInput&&this.$searchInput.val(e),this.chromosomeSelectWidget&&(this.chromosomeSelectWidget.select.value=t)}currentNavbarButtonClass(){return this.currentClass}setEnableTrackSelection(e){this.multiTrackSelectButton.setMultiTrackSelection(e)}getEnableTrackSelection(){return this.multiTrackSelectButton.enableMultiTrackSelection}hide(){this.$navigation.hide()}show(){this.$navigation.show()}}const hA=(e,t)=>{const i=0===e?t.nextElementSibling:t.previousElementSibling;t.remove(),i.remove()},dA=t=>{const i=e({class:\"igv-column-shim\"});dc(i,t);const n=e({class:\"igv-column\"});return dc(n,i),n},uA=(t,i)=>{for(let n=0;n1&&n>0){hc(e({class:\"igv-column-shim\"}),r)}}};class fA{constructor(t,i,n){this.browser=t,this.referenceFrame=i,this.column=n,this.container=e({class:\"igv-center-line\"}),n.appendChild(this.container),t.doShowCenterLine?this.show():this.hide()}repaint(){if(this.referenceFrame){if(1/this.referenceFrame.bpPerPixel>1){const e=Math.floor(this.referenceFrame.toPixels(1));this.container.style.width=`${e}px`,this.container.classList.remove(\"igv-center-line-thin\"),this.container.classList.add(\"igv-center-line-wide\")}else this.container.style.width=\"1px\",this.container.classList.remove(\"igv-center-line-wide\"),this.container.classList.add(\"igv-center-line-thin\")}}show(){this.isVisible=!0,this.container.style.display=\"block\",this.repaint()}hide(){this.isVisible=!1,this.container.style.display=\"none\"}resize(){this.repaint()}}const pA=function(t,i){this.button=e({class:\"igv-navbar-button\"}),t.appendChild(this.button),this.button.textContent=\"circular view\",this.button.addEventListener(\"click\",(()=>{i.circularViewVisible=!i.circularViewVisible})),this.browser=i,this.setVisibility(i.config.showCircularViewButton),this.setState(i.circularViewVisible)};pA.prototype.setVisibility=function(e){!0===e?this.show():this.hide()},pA.prototype.setState=function(e){!0===e?this.button.classList.add(\"igv-navbar-button-clicked\"):this.button.classList.remove(\"igv-navbar-button-clicked\")},pA.prototype.show=function(){this.button.style.display=\"block\",this.setState(this.browser.circularViewVisible)},pA.prototype.hide=function(){this.button.style.display=\"none\"};class gA{constructor(t,i){this.browser=t,this.container=e({class:\"igv-roi-menu\"}),i.appendChild(this.container);const n=e();this.container.appendChild(n),u(n,(()=>this.container.style.display=\"none\")),this.body=e(),this.container.appendChild(this.body),this.container.style.display=\"none\"}async present(e,t,i,n,r,s){const o=this.menuItems(e,t,i,n,r,s);this.browser.menuPopup.presentTrackContextMenu(i,o)}menuItems(e,t,i,n,r,s){const o=e.name?[`${e.name}
`]:[];return\"name\"in t&&o.push(`ROI Set: ${t.name}`),o.length>0&&o.push(\"
\"),t.isUserDefined&&o.push({label:\"Set description ...\",click:()=>{const t={label:\"Description\",value:e.name||\"\",callback:()=>{const t=this.browser.inputDialog.value||\"\";e.name=t.trim(),this.browser.roiManager.repaintTable()}};this.browser.inputDialog.present(t,i)}}),uc()&&e.end-e.start<1e6&&o.push({label:\"Copy reference sequence\",click:async()=>{this.container.style.display=\"none\";let t=await this.browser.genome.getSequence(e.chr,e.start,e.end);t||(t=\"Unknown sequence\");try{await navigator.clipboard.writeText(t)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}}),e.end-e.start<=25e3&&o.push({label:\"BLAT reference sequence\",click:async()=>{this.container.style.display=\"none\";const{chr:t,start:i,end:n}=e;let r=await this.browser.genome.getSequence(t,i,n);if(r){const e=`blat: ${t}:${i+1}-${n}`,s=`blat: ${t}:${i+1}-${n}`;mu({sequence:r,browser:this.browser,name:e,title:s})}}}),t.isUserDefined&&o.push(\"
\",{label:\"Delete\",click:async()=>{t.removeFeature(e);const i=await t.getAllFeatures();0===Object.keys(i).length&&n.deleteUserDefinedROISet(),n.deleteRegionWithKey(s.dataset.region,r),n.repaintTable()}}),o}dispose(){this.container.innerHTML=\"\"}}class mA extends hu{constructor(e){const t={browser:e,parent:e.columnContainer,headerTitle:\"Regions of Interest\",dismissHandler:()=>e.roiTableControl.buttonHandler(!1),gotoButtonHandler:mA.gotoButtonHandler};t.columnFormat=mA.getColumnFormatConfiguration(!0),super(Object.assign({width:\"640px\"},t))}tableRowDOM(t){const i=e({class:\"igv-roi-table-row\"}),{setName:n,feature:r}=t;i.dataset.region=vA(r.chr,r.start,r.end);let s=[r.chr,Dt(r.start),Dt(r.end),r.name||\"\",n];4===this.columnFormat.length&&(s=s.slice(0,4));for(let t=0;te.remove())),e.length>0){const t=e.sort(((e,t)=>e.feature.chr.localeCompare(t.feature.chr)||e.feature.start-t.feature.start||e.feature.end-t.feature.end));for(let e of t){const t=this.tableRowDOM(e);this.tableRowContainer.appendChild(t)}}}set footerDOM(t){super.footerDOM=t,this.gotoButton.textContent=\"Go to selected region(s)\";const i=e({class:\"igv-roi-table-button\"});this._footerDOM.appendChild(i),i.id=\"igv-roi-hide-show-button\",i.textContent=\"Copy Sequence\",i.title=\"One region only of max size 1 mb\",this.copySequenceButton=i,wA(this.copySequenceButton,!1),this.boundCopySequenceButtonHandler=async function(e){e.preventDefault(),e.stopPropagation();const t=this.tableDOM.querySelectorAll(\".igv-roi-table-row-selected\");if(t.length>0){const e=[];for(let i of t){const{locus:t}=AA(i.dataset.region);e.push(t)}for(let e of this.tableDOM.querySelectorAll(\".igv-roi-table-row\"))e.classList.remove(\"igv-roi-table-row-selected\");if(this.setTableRowSelectionState(!1),e.length>0){const{chr:t,start:i,end:n}=Cy(e[0],this.browser.isSoftclipped()),r=await this.browser.genome.getSequence(t,i,n);await navigator.clipboard.writeText(r)}}}.bind(this),this.copySequenceButton.addEventListener(\"click\",this.boundCopySequenceButtonHandler);const n=e({class:\"igv-roi-table-button\"});this._footerDOM.appendChild(n),n.id=\"igv-roi-hide-show-button\",n.textContent=\"Hide Overlays\",this.toggleROIButton=n,this.boundToggleDisplayButtonHandler=function(e){e.preventDefault(),e.stopPropagation(),this.roiManager.toggleROIs()}.bind(this),this.toggleROIButton.addEventListener(\"click\",this.boundToggleDisplayButtonHandler)}get roiManager(){return this.browser.roiManager}setTableRowSelectionState(e){super.setTableRowSelectionState(e);const t=this.tableDOM.querySelectorAll(\".igv-roi-table-row-selected\");if(t.length>0&&t.length<2){const{locus:e}=AA(t[0].dataset.region),{chr:i,start:n,end:r}=Cy(e,this.browser.isSoftclipped());wA(this.copySequenceButton,r-n<1e6)}else wA(this.copySequenceButton,!1)}dispose(){document.removeEventListener(\"click\",this.boundGotoButtonHandler),document.removeEventListener(\"click\",this.boundCopySequenceButtonHandler),document.removeEventListener(\"click\",this.boundToggleDisplayButtonHandler),this.browser.roiTableControl.buttonHandler(!1),super.dispose()}static getColumnFormatConfiguration(e){return!0===e?[{label:\"Chr\",width:\"20%\"},{label:\"Start\",width:\"15%\"},{label:\"End\",width:\"15%\"},{label:\"Description\",width:\"30%\"},{label:\"ROI Set\",width:\"20%\"}]:[{label:\"Chr\",width:\"25%\"},{label:\"Start\",width:\"20%\"},{label:\"End\",width:\"20%\"},{label:\"Description\",width:\"35%\"}]}static gotoButtonHandler(e){e.stopPropagation();const t=this.tableDOM.querySelectorAll(\".igv-roi-table-row-selected\"),i=[];for(let e of t){const{locus:t}=AA(e.dataset.region);i.push(t)}for(let e of this.tableDOM.querySelectorAll(\".igv-roi-table-row\"))e.classList.remove(\"igv-roi-table-row-selected\");this.setTableRowSelectionState(!1),i.length>0&&this.browser.search(i.join(\" \"))}}function wA(e,t){e.style.pointerEvents=t?\"auto\":\"none\",e.style.color=so(t?\"licorice\":\"silver\"),e.style.borderColor=so(t?\"licorice\":\"silver\")}class bA{constructor(e){this.browser=e,this.roiMenu=new gA(e,e.columnContainer),this.roiTable=new mA(e,e.columnContainer),this.top=0,this.roiSets=[],this.showOverlays=!0,this.boundLocusChangeHandler=FA.bind(this),e.on(\"locuschange\",this.boundLocusChangeHandler)}async reset(){this.roiSets.length>0&&this.browser.roiTableControl.setVisibility(!0);const e=this.roiSets.map((e=>this.renderROISet({browser:this.browser,pixelTop:this.top,roiSet:e})));e.length>0&&await Promise.all(e);const t=await this.getTableRecords();this.roiTable.renderTable(t),this.roiSets.length>0&&this.setOverlayVisibility(this.showOverlays)}setOverlayVisibility(e){const t=this.browser.columnContainer.querySelectorAll(\".igv-roi-region\");for(let i=0;i0&&!1===i[0].isVisible&&(this.showOverlays=!1);for(let e of i)!e.name&&e.url&&(e.name=await oc(e.url)),e.url&&!e.format&&(e.format=await Nm(e)),this.roiSets.push(new Zu(e,t));await this.reset()}clearROIs(){this.roiTable.clearTable();const e=this.browser.columnContainer.querySelectorAll(\".igv-roi-region\");for(let t of e)t.remove();for(let e of this.roiSets)e.dispose();this.roiSets=[]}async getTableRecords(){const e=[];for(let t of this.roiSets){const i=t.name||\"\",n=await t.getAllFeatures();for(let t of Object.keys(n))for(let r of n[t])e.push({setName:i,feature:r})}return e}presentTable(){this.roiTable.present()}async repaintTable(){const e=await this.getTableRecords();this.roiTable.renderTable(e)}dismissTable(){this.roiTable.dismiss()}roiTableIsVisible(){return this.roiTable.isVisible()}async updateUserDefinedROISet(e){let t=await this.getUserDefinedROISet();void 0===t&&(t=this.initializeUserDefinedROISet()),t.addFeature(e),this.setROITableButtonVisibility(!0),await this.renderROISet({browser:this.browser,pixelTop:this.top,roiSet:t});const i=await this.getTableRecords();this.roiTable.renderTable(i)}setROITableButtonVisibility(e){this.browser.roiTableControl.setVisibility(e)}toggleROIs(){this.showOverlays=!this.showOverlays,this.setOverlayVisibility(this.showOverlays)}async renderAllROISets(){for(let e of this.roiSets)await this.renderROISet({browser:this.browser,pixelTop:this.top,roiSet:e})}async renderROISet({browser:e,pixelTop:t,roiSet:i}){const n=e.columnContainer.querySelectorAll(\".igv-column\");for(let r=0;ra)&&e.remove()}const h=await i.getFeatures(s,o,a);if(h)for(let l of h){const h=vA(s,l.start,l.end),{x:d,width:u}=Ju(Math.max(o,l.start),Math.min(a,l.end),o,c),f=n[r].querySelector(yA(h));if(f)f.style.left=`${d}px`,f.style.width=`${u}px`;else{const s=this.createRegionElement(e.columnContainer,t,d,u,i,h,l);n[r].appendChild(s)}}}}createRegionElement(t,i,n,r,s,o,c){const l=e({class:\"igv-roi-region\"});l.style.top=`${i}px`,l.style.left=`${n}px`,l.style.width=`${r}px`;const h=`${this.getROIRegionTopMargin()}px`;l.style.marginTop=h,l.dataset.color=s.color,l.dataset.region=o,this.showOverlays?l.style.backgroundColor=s.color:l.style.backgroundColor=\"rgba(0, 0, 0, 0)\";const d=e();return l.appendChild(d),d.style.backgroundColor=s.headerColor,d.addEventListener(\"click\",(e=>{e.preventDefault(),e.stopPropagation(),a(e,t),this.roiMenu.present(c,s,e,this,t,l)})),l}updateROIRegionPositions(){const e=`${this.getROIRegionTopMargin()}px`,t=this.browser.columnContainer.querySelectorAll(\".igv-column\");for(let i=0;inew Set([\"ideogram\",\"ruler\"]).has(e.type))),[t,i]=e.map((e=>e.trackView.viewports[0].$viewport.get(0))).map((e=>function(e){const t=window.getComputedStyle(e),i=parseInt(t.marginTop),n=parseInt(t.marginBottom),{top:r,bottom:s,height:o}=e.getBoundingClientRect();return{top:Math.floor(r)-i,bottom:Math.floor(s)+n,height:Math.floor(o)+i+n}}(e)));return(t?t.height:0)+(i?i.height:0)+-.5}renderSVGContext(e,t,{deltaX:i,deltaY:n}){for(const r of e.querySelectorAll(\".igv-roi-region\")){const{x:e,y:s,width:o,height:a}=r.getBoundingClientRect();t.fillStyle=r.style.backgroundColor,t.fillRect(e-i,s+n,o,a);const c=r.querySelector(\"div\"),{x:l,y:h,width:d,height:u}=c.getBoundingClientRect();t.fillStyle=c.style.backgroundColor,t.fillRect(l-i,h+n,d,u)}}getUserDefinedROISet(){return this.roiSets.find((e=>!0===e.isUserDefined))}deleteUserDefinedROISet(){this.roiSets=this.roiSets.filter((e=>!0!==e.isUserDefined))}initializeUserDefinedROISet(){const e=new Zu({name:\"user defined\",isUserDefined:!0,features:[]},this.browser.genome);return this.roiSets.push(e),e}async deleteRegionWithKey(e,t){t.querySelectorAll(yA(e)).forEach((e=>e.remove()));0===(await this.getTableRecords()).length&&(this.browser.roiTableControl.buttonHandler(!1),this.setROITableButtonVisibility(!1))}toJSON(){return this.roiSets.map((e=>e.toJSON()))}dispose(){this.browser.off(\"locuschange\",this.boundLocusChangeHandler);const e=this.browser.columnContainer.querySelectorAll(\".igv-roi-region\");for(let t of e)t.remove();this.roiMenu&&this.roiMenu.dispose(),this.roiTable&&this.roiTable.dispose();for(let e of this.roiSets)e.dispose();for(let e of Object.keys(this))this[e]=void 0}}function FA(){this.renderAllROISets()}function vA(e,t,i){return`${e}-${t}-${i}`}function yA(e){return`[data-region=\"${e}\"]`}function AA(e){let t=e.split(\"-\"),i=parseInt(t.pop()),n=parseInt(t.pop()),r=t.join(\"-\");return{chr:r,start:n,end:i,locus:`${r}:${n}-${i}`,bedRecord:`${r}\\t${n}\\t${i}`}}class CA{constructor(e,t){this.name=e.name,this.featureSource=e.featureSource||Gd(e,t),this.color=e.color||Yu}async getFeatures(e,t,i){return this.featureSource.getFeatures({chr:e,start:t,end:i})}draw(e){const{context:t,bpPerPixel:i,bpStart:n,pixelTop:r,pixelHeight:s,pixelWidth:o,features:a}=e;if(!a)return;const c=n+o*i+1;for(let{start:e,end:o}of a){if(oc)break;const{x:a,width:l}=Ju(e,o,n,i);ko.fillRect(t,a,r,l,s,{fillStyle:this.color})}}}class _A{aliasRecordCache=new Map;constructor(e,t){this.genomeID=e,this.update(e,t)}async preload(){}getChromosomeName(e){return this.aliasRecordCache.has(e)?this.aliasRecordCache.get(e).chr:e}getChromosomeAlias(e,t){const i=this.aliasRecordCache.get(e);return i&&i[t]||e}update(e,t){if(t){const i=[];for(let n of t){if(this.aliasRecordCache.has(n))continue;const t={chr:n};if(i.push(t),n.startsWith(\"gi|\")){const e=_A.getNCBIName(n);t[\"ncbi-gi-versioned\"]=e;const i=e.lastIndexOf(\".\");if(i>0){const e=e.substring(0,i);t[\"ncbi-gi\"]=e}}else if(\"chrM\"===n?t.ncbi=\"MT\":\"MT\"===n?t.ucsc=\"chrM\":n.toLowerCase().startsWith(\"chr\")&&Number.isInteger(Number(n.substring(3)))?t.ncbi=n.substring(3):Number.isInteger(Number(n))&&(t.ucsc=\"chr\"+n),e.startsWith(\"hg\")||e.startsWith(\"GRCh\")||\"1kg_ref\"===e||\"b37\"===e)switch(n){case\"23\":t.ucsc=\"chrX\",t.assembly=\"X\";break;case\"24\":t.ucsc=\"chrY\",t.assembly=\"Y\";break;case\"chrX\":t.ncbi=\"23\",t.assembly=\"X\";break;case\"chrY\":t.ncbi=\"24\",t.assembly=\"Y\";break;case\"X\":t.ucsc=\"chrX\",t.ncbi=\"23\";break;case\"Y\":t.ucsc=\"chrY\",t.ncbi=\"24\"}else if(e.startsWith(\"mm\")||e.startsWith(\"GRCm\")||e.startsWith(\"rheMac\"))switch(n){case\"21\":t.ucsc=\"chrX\",t.assembly=\"X\";break;case\"22\":t.ucsc=\"chrY\",t.assembly=\"Y\";break;case\"chrX\":t.ncbi=\"21\",t.assembly=\"X\";break;case\"chrY\":t.ncbi=\"22\",t.assembly=\"Y\";break;case\"X\":t.ucsc=\"chrX\",t.ncbi=\"21\";break;case\"Y\":t.ucsc=\"chrY\",t.ncbi=\"22\"}}for(let e of i){_A.addCaseAliases(e);for(let t of Object.values(e))this.aliasRecordCache.set(t,e)}}}search(e){return this.aliasRecordCache.get(e)}static getNCBIName(e){const t=e.split(\"\\\\|\");return t[t.length-1]}static addCaseAliases(e){const t=e.chr.toUpperCase(),i=e.chr.toLowerCase(),n=e.chr.charAt(0).toUpperCase()+e.chr.slice(1);e.chr!==t&&(e._uppercase=t),e.chr!==i&&(e._lowercase=i),e.chr!==n&&(e._cap=n)}}class xA{aliasRecordCache=new Map;constructor(e,t,i){(t=t||{}).url=e,this.reader=new ld(t,i)}async preload(e){await this.reader.preload();for(let t of e)await this.search(t)}getChromosomeName(e){return this.aliasRecordCache.has(e)?this.aliasRecordCache.get(e).chr:e}getChromosomeAlias(e,t){const i=this.aliasRecordCache.get(e);return i&&i[t]||e}async search(e){if(!this.aliasRecordCache.has(e)){const t=await this.reader.search(e);if(t){_A.addCaseAliases(t);for(let e of Object.keys(t))\"start\"!==e&&\"end\"!==e&&this.aliasRecordCache.set(t[e],t)}}return this.aliasRecordCache.get(e)}async getChromosomeNames(){return await this.reader.loadHeader(),Array.from(this.reader.chrNames)}}class kA{aliasRecordCache=new Map;constructor(e,t,i){this.aliasURL=e,this.config=t,this.genome=i}async preload(){return this.loadAliases()}getChromosomeName(e){return this.aliasRecordCache.has(e)?this.aliasRecordCache.get(e).chr:e}getChromosomeAlias(e,t){const i=this.aliasRecordCache.get(e);return i&&i[t]||e}async loadAliases(){const e=await Vs.loadString(this.aliasURL,ic(this.config)),t=Rt(e),i=t[0];i.startsWith(\"#\")&&(this.headings=i.substring(1).split(\"\\t\").map((e=>e.trim())),this.altNameSets=this.headings.slice(1));const n=this.genome.chromosomeNames?new Set(this.genome.chromosomeNames):new Set;for(let e of t)if(!e.startsWith(\"#\")&&e.length>0){const t=e.split(\"\\t\");let i=t.find((e=>n.has(e)));i||(i=t[0]);const r={chr:i};_A.addCaseAliases(r);for(let e=0;enew IA(e.start,e.end,e.name,e.gieStain)))}}class EA{cytobands=new Map;constructor(e,t){this.url=e,this.config=t}async getCytobands(e){return 0===this.cytobands.size&&await this.#I(),this.cytobands.get(e)}async#I(){let e,t;if(cc(this.url)){const t=vs(this.url);e=\"\";const i=t.length;for(let n=0;n1){const e=Number.parseInt(i[1]);t.set(i[0],new yc(i[0],r++,e))}}return t}(e.chromSizesURL):this.chromosomes=this.sequence.chromosomes||new Map,this.chromosomes.size>0&&(this.chromosomeNames=Array.from(this.chromosomes.keys())),e.chromAliasBbURL?(this.chromAlias=new xA(e.chromAliasBbURL,Object.assign({},e),this),this.chromosomeNames||(this.chromosomeNames=await this.chromAlias.getChromosomeNames())):e.aliasURL?this.chromAlias=new kA(e.aliasURL,Object.assign({},e),this):this.chromosomeNames&&(this.chromAlias=new _A(this.id,this.chromosomeNames)),e.cytobandBbURL?this.cytobandSource=new SA(e.cytobandBbURL,Object.assign({},e),this):e.cytobandURL&&(this.cytobandSource=new EA(e.cytobandURL,Object.assign({},e))),this.chromosomeNames||\"function\"!=typeof this.cytobandSource.getChromosomeNames||(this.chromosomeNames=await this.cytobandSource.getChromosomeNames()),0===this.chromosomes.size&&\"function\"==typeof this.cytobandSource.getChromosomes){const e=await this.cytobandSource.getChromosomes();for(let t of e)this.chromosomes.set(e.name,e)}if(!1!==e.wholeGenomeView&&this.chromosomes.size>0&&(e.chromosomeOrder?Array.isArray(e.chromosomeOrder)?this.#S=e.chromosomeOrder:this.#S=e.chromosomeOrder.split(\",\").map((e=>e.trim())):this.#S=function(e){const t=[];let i,n=1;for(let r of e.values()){if(i){if(r.bpLength1,this.wholeGenomeView){const e=this.#S.reduce(((e,t)=>e+this.chromosomes.get(t).bpLength),0);this.chromosomes.set(\"all\",new yc(\"all\",0,e))}}get description(){return this.config.description||`${this.id}\\n${this.name}`}get infoURL(){return this.config.infoURL}showWholeGenomeView(){return this.wholeGenomeView}toJSON(){return Object.assign({},this.config,{tracks:void 0})}get initialLocus(){return this.config.locus?this.config.locus:this.getHomeChromosomeName()}getHomeChromosomeName(){return this.showWholeGenomeView()&&this.chromosomes.has(\"all\")?\"all\":this.chromosomeNames[0]}getChromosomeName(e){return this.chromAlias?this.chromAlias.getChromosomeName(e,this.chromosomes.keys()):e}getChromosomeDisplayName(e){return this.nameSet&&this.chromAlias&&this.chromAlias.getChromosomeAlias(e,this.nameSet)||e}getChromosome(e){return this.chromAlias&&(e=this.chromAlias.getChromosomeName(e)),this.chromosomes.get(e)}async loadChromosome(e){const t=await this.getAliasRecord(e);if(t&&(e=t.chr),!this.chromosomes.has(e)){let t;const i=await this.sequence.getSequenceRecord(e);i&&(t=new yc(e,0,i.bpLength)),this.chromosomes.set(e,t)}return this.chromosomes.get(e)}async getAliasRecord(e){if(this.#E.has(e))return this.#E.get(e);if(this.chromAlias){let t=await this.chromAlias.search(e);if(t||e===e.toLowerCase()||(t=await this.chromAlias.search(e.toLowerCase())),t){const e=t.chr.toUpperCase(),i=t.chr.toLowerCase(),n=t.chr.charAt(0).toUpperCase()+t.chr.slice(1);t.chr!==e&&(t._uppercase=e),t.chr!==i&&(t._lowercase=i),t.chr!==n&&(t._cap=n)}return this.#E.set(e,t),t}}async getCytobands(e){if(this.cytobandSource){const t=this.getChromosomeName(e);return await this.cytobandSource.getCytobands(t)}}getChromosomes(){return this.chromosomes}get wgChromosomeNames(){return this.#S?this.#S.slice():void 0}get showChromosomeWidget(){return this.config.showChromosomeWidget}getGenomeCoordinate(e,t){var i=this.getCumulativeOffset(e);if(void 0!==i)return i+t}getChromosomeCoordinate(e){let t;void 0===this.cumulativeOffsets&&(this.cumulativeOffsets=computeCumulativeOffsets.call(this));let i=0;for(let n of this.#S){const r=this.cumulativeOffsets[n];if(r>e){return{chr:t,position:e-i}}t=n,i=r}return{chr:this.#S[this.#S.length-1],position:0}}getCumulativeOffset(e){void 0===this.cumulativeOffsets&&(this.cumulativeOffsets=function(){let e={},t=0;for(let i of this.#S){e[i]=Math.floor(t);t+=this.getChromosome(i).bpLength}return e}.call(this));const t=this.getChromosomeName(e);return this.cumulativeOffsets[t]}getGenomeLength(){if(!this.bpLength){let e=0;for(let t of this.#S){e+=this.chromosomes.get(t).bpLength}this.bpLength=e}return this.bpLength}async getSequence(e,t,i){return e=this.getChromosomeName(e),this.sequence.getSequence(e,t,i)}getSequenceInterval(e,t,i){return\"function\"==typeof this.sequence.getSequenceInterval?this.sequence.getSequenceInterval(e,t,i):void 0}}class BA{constructor(){this.clear()}clear(){this.phenotypeColors=new Map,this.snps=new Set,this.qtl=null}isEmpty(){return 0===this.phenotypeColors.size&&0===this.snps.size&&null===this.qtl}addSnp(e){e=e.toUpperCase(),this.snps.add(e)}addPhenotype(e){e=e.toUpperCase();const t=this.phenotypeColors.size;if(!this.phenotypeColors.has(e.toUpperCase())){const i=t0&&(e.phenotypes=Array.from(this.phenotypeColors.keys())),this.snps.size>0&&(e.snps=Array.from(this.snps)),this.qtl&&(e.qtl=this.qtl),e}static fromJSON(e){const t=new BA;if(e.phenotypes)for(let i of e.phenotypes)t.addPhenotype(i);if(e.snps)for(let i of e.snps)t.addSnp(i);return e.qtl&&(t.qtl=e.qtl),t}}const MA=[];MA.push(\"rgb(228,26,28)\"),MA.push(\"rgb(55,126,184)\"),MA.push(\"rgb(77,175,74)\"),MA.push(\"rgb(166,86,40)\"),MA.push(\"rgb(152,78,163)\"),MA.push(\"rgb(255,127,0)\"),MA.push(\"rgb(247,129,191)\"),MA.push(\"rgb(255,255,51)\"),MA.push(\"rgb(102,194,165)\"),MA.push(\"rgb(252,141,98)\"),MA.push(\"rgb(141, 160, 203)\"),MA.push(\"rgb(231, 138, 195)\"),MA.push(\"rgb(166, 216, 84)\"),MA.push(\"rgb(255, 217, 47)\"),MA.push(\"rgb(229, 196, 148)\"),MA.push(\"rgb( 141, 211, 199)\"),MA.push(\"rgb(255, 255, 179)\"),MA.push(\"rgb(190, 186, 218)\"),MA.push(\"rgb(251, 128, 114)\"),MA.push(\"rgb(128, 177, 211)\"),MA.push(\"rgb(253, 180, 98)\"),MA.push(\"rgb(179, 222, 105)\"),MA.push(\"rgb(252, 205, 229)\"),MA.push(\"rgb(188, 128, 189)\"),MA.push(\"rgb(204, 235, 197)\"),MA.push(\"rgb(255, 237, 111)\");class DA{constructor(t){this.parent=t,this.container=e({class:\"igv-ui-generic-dialog-container\"}),t.appendChild(this.container);const n=e({class:\"igv-ui-generic-dialog-header\"});this.container.appendChild(n),this.label=e({class:\"igv-ui-generic-dialog-one-liner\"}),this.container.appendChild(this.label),this.label.text=\"Unlabeled\",this.input_container=e({class:\"igv-ui-generic-dialog-input\"}),this.container.appendChild(this.input_container);let r='';this._input=document.createRange().createContextualFragment(r).firstChild,this.input_container.appendChild(this._input),r='',this._output=document.createRange().createContextualFragment(r).firstChild,this.input_container.appendChild(this._output);const s=e({class:\"igv-ui-generic-dialog-ok-cancel\"});this.container.appendChild(s),this.ok=e(),s.appendChild(this.ok),this.ok.textContent=\"OK\",this.cancel=e(),s.appendChild(this.cancel),this.cancel.textContent=\"Cancel\",i(this.container),this._input.addEventListener(\"input\",(()=>{const e=parseFloat(this._input.value)/this._scaleFactor;this.callback(e),this._output.value=`${e.toFixed(2)}`}),!1),this.ok.addEventListener(\"click\",(()=>{if(\"function\"==typeof this.callback){const e=parseFloat(this._input.value)/this._scaleFactor;this.callback(e),this.callback=void 0}this._input.value=void 0,i(this.container)}));const o=()=>{this._input.value=void 0,i(this.container)};this.cancel.addEventListener(\"click\",o),u(n,o),p(this.container,n)}get value(){return Na.sanitize(this._input.value)}present(e,t){this.label.textContent=e.label,this._scaleFactor=e.scaleFactor;const[i,r,s]=[e.min,e.max,e.value].map((e=>Math.floor(this._scaleFactor*e).toString()));this._input.min=i,this._input.max=r,this._input.value=s;const o=parseFloat(s)/this._scaleFactor;this._output.value=`${o.toFixed(2)}`,this.callback=e.callback||e.click,n(this.container),this.clampLocation(t.clientX,t.clientY)}clampLocation(e,t){const{width:i,height:n}=this.container.getBoundingClientRect(),r=window.innerHeight,s=window.innerWidth,o=Math.min(r-n,t),a=Math.min(s-i,e);this.container.style.left=`${a}px`,this.container.style.top=`${o}px`}}class RA{qtlSelections=new BA;constructor(t,i){this.config=t,this.guid=s(),this.namespace=\".browser_\"+this.guid,this.parent=i;let n=i.shadowRoot;if(!n){n=i.attachShadow({mode:\"open\"});const e=new CSSStyleSheet;e.replaceSync('.igv-ui-dropdown {\\n cursor: default;\\n position: absolute;\\n top: 0;\\n left: 0;\\n z-index: 2048;\\n border-color: #7F7F7F;\\n border-style: solid;\\n border-width: 1px;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n font-weight: 400;\\n background-color: white;\\n}\\n.igv-ui-dropdown > div {\\n overflow-y: auto;\\n overflow-x: hidden;\\n background-color: white;\\n}\\n.igv-ui-dropdown > div > div {\\n padding: 4px;\\n width: 100%;\\n overflow-x: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: 1px;\\n background-color: white;\\n}\\n.igv-ui-dropdown > div > div:last-child {\\n border-bottom-color: transparent;\\n border-bottom-width: 0;\\n}\\n.igv-ui-dropdown > div > div:hover {\\n cursor: pointer;\\n background-color: rgba(0, 0, 0, 0.04);\\n}\\n\\n.igv-ui-popover {\\n cursor: default;\\n position: absolute;\\n z-index: 2048;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: 1px;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n background-color: white;\\n}\\n.igv-ui-popover > div:first-child {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-width: 0;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee;\\n}\\n.igv-ui-popover > div:first-child > div:first-child {\\n margin-left: 4px;\\n}\\n.igv-ui-popover > div:first-child > div:last-child {\\n margin-right: 4px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F;\\n}\\n.igv-ui-popover > div:first-child > div:last-child:hover {\\n cursor: pointer;\\n color: #444;\\n}\\n.igv-ui-popover > div:last-child {\\n user-select: text;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 400px;\\n max-width: 800px;\\n background-color: white;\\n border-bottom-width: 0;\\n border-bottom-left-radius: 4px;\\n border-bottom-right-radius: 4px;\\n}\\n.igv-ui-popover > div:last-child > div {\\n margin-left: 4px;\\n margin-right: 4px;\\n min-width: 220px;\\n overflow-x: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.igv-ui-popover > div:last-child > div > span {\\n font-weight: bolder;\\n}\\n.igv-ui-popover > div:last-child hr {\\n width: 100%;\\n}\\n\\n.igv-ui-alert-dialog-container {\\n box-sizing: content-box;\\n position: absolute;\\n z-index: 2048;\\n top: 50%;\\n left: 50%;\\n width: 400px;\\n height: 200px;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n outline: none;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 15px;\\n font-weight: 400;\\n background-color: white;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n}\\n.igv-ui-alert-dialog-container > div:first-child {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee;\\n}\\n.igv-ui-alert-dialog-container > div:first-child div:first-child {\\n padding-left: 8px;\\n}\\n.igv-ui-alert-dialog-container .igv-ui-alert-dialog-body {\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n user-select: text;\\n color: #373737;\\n width: 100%;\\n height: calc(100% - 24px - 64px);\\n overflow-y: scroll;\\n}\\n.igv-ui-alert-dialog-container .igv-ui-alert-dialog-body .igv-ui-alert-dialog-body-copy {\\n margin: 16px;\\n width: auto;\\n height: auto;\\n overflow-wrap: break-word;\\n word-break: break-word;\\n background-color: white;\\n border: unset;\\n}\\n.igv-ui-alert-dialog-container > div:last-child {\\n width: 100%;\\n margin-bottom: 10px;\\n background-color: white;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: center;\\n align-items: center;\\n}\\n.igv-ui-alert-dialog-container > div:last-child div {\\n margin: unset;\\n width: 40px;\\n height: 30px;\\n line-height: 30px;\\n text-align: center;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n font-weight: 400;\\n border-color: #2B81AF;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 4px;\\n background-color: #2B81AF;\\n}\\n.igv-ui-alert-dialog-container > div:last-child div:hover {\\n cursor: pointer;\\n border-color: #25597f;\\n background-color: #25597f;\\n}\\n\\n.igv-ui-generic-dialog-container {\\n box-sizing: content-box;\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 300px;\\n height: fit-content;\\n padding-bottom: 16px;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n z-index: 2048;\\n background-color: white;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-header {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div {\\n margin-right: 4px;\\n margin-bottom: 2px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div:hover {\\n cursor: pointer;\\n color: #444;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-one-liner {\\n color: #373737;\\n width: 95%;\\n line-height: 24px;\\n text-align: left;\\n margin-top: 8px;\\n padding-left: 8px;\\n overflow-wrap: break-word;\\n background-color: white;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input {\\n margin-top: 8px;\\n width: 95%;\\n height: 24px;\\n color: #373737;\\n line-height: 24px;\\n padding-left: 8px;\\n background-color: white;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input > div {\\n width: fit-content;\\n height: 100%;\\n font-size: 16px;\\n text-align: right;\\n padding-right: 8px;\\n background-color: white;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\\n display: block;\\n height: 100%;\\n width: 100%;\\n padding-left: 4px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n color: #373737;\\n text-align: left;\\n outline: none;\\n border-style: solid;\\n border-width: thin;\\n border-color: #7F7F7F;\\n background-color: white;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\\n width: 50%;\\n font-size: 16px;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input {\\n margin-top: 8px;\\n width: calc(100% - 16px);\\n height: 24px;\\n color: #373737;\\n line-height: 24px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\\n display: block;\\n height: 100%;\\n width: 100%;\\n padding-left: 4px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n color: #373737;\\n text-align: left;\\n outline: none;\\n border-style: solid;\\n border-width: thin;\\n border-color: #7F7F7F;\\n background-color: white;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\\n font-size: 16px;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input[type=range] {\\n width: 70%;\\n -webkit-appearance: none;\\n background: linear-gradient(90deg, white, black);\\n outline: none;\\n margin: 0;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input output {\\n display: block;\\n height: 100%;\\n width: 20%;\\n font-size: 16px;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel {\\n width: 100%;\\n height: 28px;\\n padding-top: 16px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div {\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n width: 75px;\\n height: 28px;\\n line-height: 28px;\\n text-align: center;\\n border-color: transparent;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 2px;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:first-child {\\n margin-left: 32px;\\n margin-right: 0;\\n background-color: #5ea4e0;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:last-child {\\n margin-left: 0;\\n margin-right: 32px;\\n background-color: #c4c4c4;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:first-child:hover {\\n cursor: pointer;\\n background-color: #3b5c7f;\\n}\\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:last-child:hover {\\n cursor: pointer;\\n background-color: #7f7f7f;\\n}\\n\\n.igv-ui-generic-container {\\n box-sizing: content-box;\\n position: absolute;\\n z-index: 2048;\\n background-color: white;\\n cursor: pointer;\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-ui-generic-container > div:first-child {\\n cursor: move;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n height: 24px;\\n width: 100%;\\n background-color: #dddddd;\\n}\\n.igv-ui-generic-container > div:first-child > div {\\n display: block;\\n color: #5f5f5f;\\n cursor: pointer;\\n width: 14px;\\n height: 14px;\\n margin-right: 8px;\\n margin-bottom: 4px;\\n}\\n\\n.igv-ui-generic-container {\\n left: 50%;\\n top: 75%;\\n transform: translate(-50%, -25%);\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n background-color: #eee;\\n}\\n.igv-ui-generic-container > div:nth-child(2) {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-ui-generic-container > div:nth-child(3) {\\n box-sizing: border-box;\\n position: relative;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n padding: 0.5rem;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 1rem;\\n font-weight: 400;\\n width: 100%;\\n border-top-style: solid;\\n border-top-width: thin;\\n border-top-color: #373737;\\n}\\n.igv-ui-generic-container > div:nth-child(4) {\\n width: 100%;\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n\\n.igv-ui-color-swatch {\\n position: relative;\\n box-sizing: content-box;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: wrap;\\n justify-content: center;\\n align-items: center;\\n margin: 2px;\\n width: 32px;\\n height: 32px;\\n border-style: solid;\\n border-width: 0;\\n border-color: white;\\n border-radius: 3px;\\n}\\n\\n.igv-ui-color-swatch-shim {\\n cursor: pointer;\\n position: relative;\\n box-sizing: content-box;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: wrap;\\n justify-content: center;\\n align-items: center;\\n width: 32px;\\n height: 32px;\\n background-color: white;\\n border-style: solid;\\n border-width: thin;\\n border-color: white;\\n border-radius: 4px;\\n}\\n\\n.igv-ui-dialog {\\n z-index: 2048;\\n position: fixed;\\n width: fit-content;\\n height: fit-content;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n background-color: white;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n}\\n.igv-ui-dialog .igv-ui-dialog-header {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee;\\n}\\n.igv-ui-dialog .igv-ui-dialog-header div {\\n margin-right: 4px;\\n margin-bottom: 2px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F;\\n}\\n.igv-ui-dialog .igv-ui-dialog-header div:hover {\\n cursor: pointer;\\n color: #444;\\n}\\n.igv-ui-dialog .igv-ui-dialog-one-liner {\\n width: 95%;\\n height: 24px;\\n line-height: 24px;\\n text-align: left;\\n margin: 8px;\\n overflow-wrap: break-word;\\n background-color: white;\\n font-weight: bold;\\n}\\n.igv-ui-dialog .igv-ui-dialog-ok-cancel {\\n width: 100%;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center;\\n}\\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div {\\n margin: 16px;\\n margin-top: 32px;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n width: 75px;\\n height: 28px;\\n line-height: 28px;\\n text-align: center;\\n border-color: transparent;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 2px;\\n}\\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child {\\n background-color: #5ea4e0;\\n}\\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child {\\n background-color: #c4c4c4;\\n}\\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child:hover {\\n cursor: pointer;\\n background-color: #3b5c7f;\\n}\\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child:hover {\\n cursor: pointer;\\n background-color: #7f7f7f;\\n}\\n.igv-ui-dialog .igv-ui-dialog-ok {\\n width: 100%;\\n height: 36px;\\n margin-top: 32px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center;\\n}\\n.igv-ui-dialog .igv-ui-dialog-ok div {\\n width: 98px;\\n height: 36px;\\n line-height: 36px;\\n text-align: center;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n border-color: white;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 4px;\\n background-color: #2B81AF;\\n}\\n.igv-ui-dialog .igv-ui-dialog-ok div:hover {\\n cursor: pointer;\\n background-color: #25597f;\\n}\\n\\n.igv-ui-panel, .igv-ui-panel-row, .igv-ui-panel-column {\\n z-index: 2048;\\n background-color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n display: flex;\\n justify-content: flex-start;\\n align-items: flex-start;\\n}\\n\\n.igv-ui-panel-column {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.igv-ui-panel-row {\\n display: flex;\\n flex-direction: row;\\n}\\n\\n.igv-ui-textbox {\\n background-color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n display: flex;\\n justify-content: flex-start;\\n align-items: flex-start;\\n}\\n\\n.igv-ui-table {\\n background-color: white;\\n}\\n\\n.igv-ui-table thead {\\n position: sticky;\\n top: 0;\\n}\\n\\n.igv-ui-table th {\\n text-align: left;\\n}\\n\\n.igv-ui-table td {\\n padding-right: 20px;\\n}\\n\\n.igv-ui-table tr:hover {\\n background-color: lightblue;\\n}\\n\\n.igv-ui-center-fixed {\\n left: 50%;\\n top: 50%;\\n transform: translate(-50%, -50%);\\n}\\n\\n.igv-navbar {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n box-sizing: border-box;\\n width: 100%;\\n color: #444;\\n font-size: 12px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n line-height: 32px;\\n padding-left: 8px;\\n padding-right: 8px;\\n margin-top: 2px;\\n margin-bottom: 6px;\\n height: 32px;\\n border-style: solid;\\n border-radius: 3px;\\n border-width: thin;\\n border-color: #bfbfbf;\\n background-color: #f3f3f3;\\n}\\n.igv-navbar .igv-navbar-left-container {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n height: 32px;\\n line-height: 32px;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-logo {\\n width: 34px;\\n height: 32px;\\n margin-right: 8px;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-current-genome {\\n height: 32px;\\n margin-left: 4px;\\n margin-right: 4px;\\n user-select: none;\\n line-height: 32px;\\n vertical-align: middle;\\n text-align: center;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n height: 100%;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container {\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center;\\n height: 100%;\\n width: 125px;\\n margin-right: 4px;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container select {\\n display: block;\\n cursor: pointer;\\n width: 100px;\\n height: 75%;\\n outline: none;\\n font-size: 12px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n margin-left: 8px;\\n height: 22px;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n width: 240px;\\n height: 22px;\\n line-height: 22px;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container input.igv-search-input {\\n cursor: text;\\n width: 85%;\\n height: 22px;\\n line-height: 22px;\\n font-size: 12px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n text-align: left;\\n padding-left: 8px;\\n margin-right: 8px;\\n outline: none;\\n border-style: solid;\\n border-radius: 3px;\\n border-width: thin;\\n border-color: #bfbfbf;\\n background-color: white;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container .igv-search-icon-container {\\n cursor: pointer;\\n height: 16px;\\n width: 16px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: center;\\n align-items: center;\\n}\\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-windowsize-panel-container {\\n margin-left: 4px;\\n user-select: none;\\n}\\n.igv-navbar .igv-navbar-right-container {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container {\\n position: relative;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container-hidden {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n height: 100%;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget {\\n color: #737373;\\n font-size: 18px;\\n margin-left: 8px;\\n user-select: none;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div {\\n cursor: pointer;\\n margin-left: unset;\\n margin-right: unset;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:first-child {\\n height: 20px;\\n width: 20px;\\n margin-left: unset;\\n margin-right: 4px;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:last-child {\\n height: 20px;\\n width: 20px;\\n margin-left: 4px;\\n margin-right: unset;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:nth-child(even) {\\n display: block;\\n height: fit-content;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget input {\\n display: block;\\n width: 125px;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget svg {\\n display: block;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 {\\n color: #737373;\\n font-size: 18px;\\n height: 32px;\\n line-height: 32px;\\n margin-left: 8px;\\n user-select: none;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div {\\n cursor: pointer;\\n margin-left: unset;\\n margin-right: unset;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:first-child {\\n height: 20px;\\n width: 20px;\\n margin-left: unset;\\n margin-right: 4px;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:last-child {\\n height: 20px;\\n width: 20px;\\n margin-left: 4px;\\n margin-right: unset;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:nth-child(even) {\\n width: 0;\\n height: 0;\\n display: none;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 input {\\n width: 0;\\n height: 0;\\n display: none;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 svg {\\n display: block;\\n}\\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-hidden {\\n display: none;\\n}\\n\\n.igv-navbar-button {\\n display: block;\\n box-sizing: unset;\\n padding-left: 6px;\\n padding-right: 6px;\\n height: 18px;\\n text-transform: capitalize;\\n user-select: none;\\n line-height: 18px;\\n text-align: center;\\n vertical-align: middle;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 11px;\\n font-weight: 200;\\n color: #737373;\\n background-color: #f3f3f3;\\n border-color: #737373;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 6px;\\n}\\n\\n.igv-navbar-button:hover {\\n cursor: pointer;\\n}\\n\\n.igv-navbar-button-clicked {\\n color: white;\\n background-color: #737373;\\n}\\n\\n.igv-navbar-icon-button {\\n cursor: pointer;\\n position: relative;\\n width: 24px;\\n height: 24px;\\n margin-left: 4px;\\n margin-right: 4px;\\n border: none;\\n background-size: contain;\\n background-repeat: no-repeat;\\n background-position: center;\\n}\\n.igv-navbar-icon-button > div:first-child {\\n z-index: 512;\\n position: absolute;\\n top: 36px;\\n left: -18px;\\n width: 24px;\\n height: 24px;\\n border: none;\\n background-size: contain;\\n background-repeat: no-repeat;\\n background-position: center;\\n}\\n.igv-navbar-icon-button > div:last-child {\\n z-index: 512;\\n position: absolute;\\n top: 36px;\\n left: 18px;\\n width: 24px;\\n height: 24px;\\n border: none;\\n background-size: contain;\\n background-repeat: no-repeat;\\n background-position: center;\\n}\\n\\n.igv-navbar-text-button {\\n cursor: pointer;\\n position: relative;\\n margin-left: 2px;\\n margin-right: 2px;\\n border: none;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.igv-navbar-text-button > div:nth-child(2) {\\n z-index: 512;\\n position: absolute;\\n top: 36px;\\n left: 0;\\n width: 38px;\\n height: 18px;\\n border: none;\\n background-size: contain;\\n background-repeat: no-repeat;\\n background-position: center;\\n}\\n.igv-navbar-text-button > div:nth-child(3) {\\n z-index: 512;\\n position: absolute;\\n top: 36px;\\n left: 42px;\\n width: 38px;\\n height: 18px;\\n border: none;\\n background-size: contain;\\n background-repeat: no-repeat;\\n background-position: center;\\n}\\n\\n#igv-text-button-label {\\n text-anchor: middle;\\n dominant-baseline: middle;\\n}\\n\\n.igv-navbar-text-button-svg-inactive rect {\\n stroke: #737373;\\n fill: white;\\n}\\n.igv-navbar-text-button-svg-inactive text {\\n fill: #737373;\\n}\\n.igv-navbar-text-button-svg-inactive tspan {\\n dominant-baseline: middle;\\n}\\n\\n.igv-navbar-text-button-svg-hover rect {\\n stroke: #737373;\\n fill: #737373;\\n}\\n.igv-navbar-text-button-svg-hover text {\\n fill: white;\\n}\\n.igv-navbar-text-button-svg-hover tspan {\\n dominant-baseline: middle;\\n}\\n\\n#igv-save-svg-group rect {\\n stroke: #737373;\\n fill: white;\\n}\\n#igv-save-svg-group text {\\n fill: #737373;\\n}\\n\\n#igv-save-svg-group:hover rect {\\n stroke: #737373;\\n fill: #737373;\\n}\\n#igv-save-svg-group:hover text {\\n fill: white;\\n}\\n\\n#igv-save-png-group rect {\\n stroke: #737373;\\n fill: white;\\n}\\n#igv-save-png-group text {\\n fill: #737373;\\n}\\n\\n#igv-save-png-group:hover rect {\\n stroke: #737373;\\n fill: #737373;\\n}\\n#igv-save-png-group:hover text {\\n fill: white;\\n}\\n\\n.igv-zoom-in-notice-container {\\n z-index: 256;\\n position: absolute;\\n top: 8px;\\n left: 50%;\\n transform: translate(-50%, 0%);\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: center;\\n align-items: center;\\n background-color: white;\\n}\\n.igv-zoom-in-notice-container > div {\\n padding-left: 4px;\\n padding-right: 4px;\\n padding-top: 2px;\\n padding-bottom: 2px;\\n width: 100%;\\n height: 100%;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n color: #3f3f3f;\\n}\\n\\n.igv-zoom-in-notice {\\n position: absolute;\\n top: 10px;\\n left: 50%;\\n}\\n.igv-zoom-in-notice div {\\n position: relative;\\n left: -50%;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n color: #3f3f3f;\\n background-color: rgba(255, 255, 255, 0.51);\\n z-index: 64;\\n}\\n\\n.igv-container-spinner {\\n position: absolute;\\n top: 90%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n z-index: 1024;\\n width: 24px;\\n height: 24px;\\n pointer-events: none;\\n color: #737373;\\n}\\n\\n.igv-multi-locus-close-button {\\n position: absolute;\\n top: 2px;\\n right: 0;\\n padding-left: 2px;\\n padding-right: 2px;\\n width: 12px;\\n height: 12px;\\n color: #666666;\\n background-color: white;\\n z-index: 1000;\\n}\\n.igv-multi-locus-close-button > svg {\\n vertical-align: top;\\n}\\n\\n.igv-multi-locus-close-button:hover {\\n cursor: pointer;\\n color: #434343;\\n}\\n\\n.igv-multi-locus-ruler-label {\\n z-index: 64;\\n position: absolute;\\n top: 2px;\\n left: 0;\\n width: 100%;\\n height: 12px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: center;\\n align-items: center;\\n}\\n.igv-multi-locus-ruler-label > div {\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 12px;\\n color: rgb(16, 16, 16);\\n background-color: white;\\n}\\n.igv-multi-locus-ruler-label > div {\\n cursor: pointer;\\n}\\n\\n.igv-multi-locus-ruler-label-square-dot {\\n z-index: 64;\\n position: absolute;\\n left: 50%;\\n top: 5%;\\n transform: translate(-50%, 0%);\\n background-color: white;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-multi-locus-ruler-label-square-dot > div:first-child {\\n width: 14px;\\n height: 14px;\\n}\\n.igv-multi-locus-ruler-label-square-dot > div:last-child {\\n margin-left: 16px;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n color: rgb(16, 16, 16);\\n}\\n\\n.igv-ruler-sweeper {\\n display: none;\\n pointer-events: none;\\n position: absolute;\\n top: 26px;\\n bottom: 0;\\n left: 0;\\n width: 0;\\n z-index: 99999;\\n background-color: rgba(68, 134, 247, 0.25);\\n}\\n\\n.igv-ruler-tooltip {\\n pointer-events: none;\\n z-index: 128;\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 1px;\\n height: 32px;\\n background-color: transparent;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-ruler-tooltip > div {\\n pointer-events: none;\\n width: 128px;\\n height: auto;\\n padding: 1px;\\n color: #373737;\\n font-size: 10px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n background-color: white;\\n border-style: solid;\\n border-width: thin;\\n border-color: #373737;\\n}\\n\\n.igv-track-label {\\n position: absolute;\\n left: 8px;\\n top: 8px;\\n width: auto;\\n height: auto;\\n max-width: 50%;\\n padding-left: 4px;\\n padding-right: 4px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n font-weight: 400;\\n text-align: center;\\n user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n border-color: #444;\\n border-radius: 2px;\\n border-style: solid;\\n border-width: thin;\\n background-color: white;\\n z-index: 128;\\n cursor: pointer;\\n}\\n\\n.igv-track-label:hover,\\n.igv-track-label:focus,\\n.igv-track-label:active {\\n background-color: #e8e8e8;\\n}\\n\\n.igv-track-label-popup-shim {\\n padding-left: 8px;\\n padding-right: 8px;\\n padding-top: 4px;\\n}\\n\\n.igv-center-line {\\n display: none;\\n pointer-events: none;\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 50%;\\n transform: translateX(-50%);\\n z-index: 8;\\n user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n border-left-style: dashed;\\n border-left-width: thin;\\n border-right-style: dashed;\\n border-right-width: thin;\\n}\\n\\n.igv-center-line-wide {\\n background-color: rgba(0, 0, 0, 0);\\n border-left-color: rgba(127, 127, 127, 0.51);\\n border-right-color: rgba(127, 127, 127, 0.51);\\n}\\n\\n.igv-center-line-thin {\\n background-color: rgba(0, 0, 0, 0);\\n border-left-color: rgba(127, 127, 127, 0.51);\\n border-right-color: rgba(0, 0, 0, 0);\\n}\\n\\n.igv-cursor-guide-horizontal {\\n display: none;\\n pointer-events: none;\\n user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 50%;\\n height: 1px;\\n z-index: 32;\\n margin-left: 50px;\\n margin-right: 54px;\\n border-top-style: dotted;\\n border-top-width: thin;\\n border-top-color: rgba(127, 127, 127, 0.76);\\n}\\n\\n.igv-cursor-guide-vertical {\\n pointer-events: none;\\n user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 50%;\\n width: 1px;\\n z-index: 32;\\n border-left-style: dotted;\\n border-left-width: thin;\\n border-left-color: rgba(127, 127, 127, 0.76);\\n display: none;\\n}\\n\\n.igv-user-feedback {\\n position: fixed;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n width: 512px;\\n height: 360px;\\n z-index: 2048;\\n background-color: white;\\n border-color: #a2a2a2;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n color: #444;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-user-feedback div:first-child {\\n position: relative;\\n height: 24px;\\n width: 100%;\\n background-color: white;\\n border-bottom-color: #a2a2a2;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n}\\n.igv-user-feedback div:first-child div {\\n position: absolute;\\n top: 2px;\\n width: 16px;\\n height: 16px;\\n background-color: transparent;\\n}\\n.igv-user-feedback div:first-child div:first-child {\\n left: 8px;\\n}\\n.igv-user-feedback div:first-child div:last-child {\\n cursor: pointer;\\n right: 8px;\\n}\\n.igv-user-feedback div:last-child {\\n width: 100%;\\n height: calc(100% - 24px);\\n border-width: 0;\\n}\\n.igv-user-feedback div:last-child div {\\n width: auto;\\n height: auto;\\n margin: 8px;\\n}\\n\\n.igv-generic-dialog-container {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 300px;\\n height: 200px;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n z-index: 2048;\\n background-color: white;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-header {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-header div {\\n margin-right: 4px;\\n margin-bottom: 2px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-header div:hover {\\n cursor: pointer;\\n color: #444;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-one-liner {\\n color: #373737;\\n width: 95%;\\n height: 24px;\\n line-height: 24px;\\n text-align: left;\\n margin-top: 8px;\\n padding-left: 8px;\\n overflow-wrap: break-word;\\n background-color: white;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-label-input {\\n margin-top: 8px;\\n width: 95%;\\n height: 24px;\\n color: #373737;\\n line-height: 24px;\\n padding-left: 8px;\\n background-color: white;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-label-input div {\\n width: 30%;\\n height: 100%;\\n font-size: 16px;\\n text-align: right;\\n padding-right: 8px;\\n background-color: white;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\\n display: block;\\n height: 100%;\\n width: 100%;\\n padding-left: 4px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n color: #373737;\\n text-align: left;\\n outline: none;\\n border-style: solid;\\n border-width: thin;\\n border-color: #7F7F7F;\\n background-color: white;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\\n width: 50%;\\n font-size: 16px;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-input {\\n margin-top: 8px;\\n width: calc(100% - 16px);\\n height: 24px;\\n color: #373737;\\n line-height: 24px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-input input {\\n display: block;\\n height: 100%;\\n width: 100%;\\n padding-left: 4px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n color: #373737;\\n text-align: left;\\n outline: none;\\n border-style: solid;\\n border-width: thin;\\n border-color: #7F7F7F;\\n background-color: white;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-input input {\\n font-size: 16px;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel {\\n width: 100%;\\n height: 28px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div {\\n margin-top: 32px;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n width: 75px;\\n height: 28px;\\n line-height: 28px;\\n text-align: center;\\n border-color: transparent;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 2px;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child {\\n margin-left: 32px;\\n margin-right: 0;\\n background-color: #5ea4e0;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child {\\n margin-left: 0;\\n margin-right: 32px;\\n background-color: #c4c4c4;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child:hover {\\n cursor: pointer;\\n background-color: #3b5c7f;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child:hover {\\n cursor: pointer;\\n background-color: #7f7f7f;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-ok {\\n width: 100%;\\n height: 36px;\\n margin-top: 32px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-ok div {\\n width: 98px;\\n height: 36px;\\n line-height: 36px;\\n text-align: center;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n border-color: white;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 4px;\\n background-color: #2B81AF;\\n}\\n.igv-generic-dialog-container .igv-generic-dialog-ok div:hover {\\n cursor: pointer;\\n background-color: #25597f;\\n}\\n\\n.igv-generic-container {\\n position: absolute;\\n top: 0;\\n left: 0;\\n z-index: 2048;\\n background-color: white;\\n cursor: pointer;\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-generic-container > div:nth-child(1) {\\n cursor: move;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n height: 24px;\\n width: 100%;\\n background-color: #dddddd;\\n}\\n.igv-generic-container > div:nth-child(1) i {\\n display: block;\\n color: #5f5f5f;\\n cursor: pointer;\\n width: 14px;\\n height: 14px;\\n margin-right: 8px;\\n margin-bottom: 4px;\\n}\\n\\n.igv-menu-popup {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: max-content;\\n max-width: 400px;\\n z-index: 512;\\n cursor: pointer;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n font-weight: 400;\\n color: #4b4b4b;\\n background: white;\\n border-radius: 4px;\\n border-color: #7F7F7F;\\n border-style: solid;\\n border-width: thin;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-end;\\n text-align: left;\\n}\\n.igv-menu-popup > div:not(:first-child) {\\n width: 100%;\\n}\\n.igv-menu-popup > div:not(:first-child) > div {\\n background: white;\\n}\\n.igv-menu-popup > div:not(:first-child) > div.context-menu {\\n padding-left: 4px;\\n padding-right: 4px;\\n}\\n.igv-menu-popup > div:not(:first-child) > div:last-child {\\n border-bottom-left-radius: 4px;\\n border-bottom-right-radius: 4px;\\n border-bottom-color: transparent;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n}\\n.igv-menu-popup > div:not(:first-child) > div:hover {\\n background: #efefef;\\n}\\n\\n.igv-menu-popup-shim {\\n padding-left: 8px;\\n padding-right: 8px;\\n padding-bottom: 1px;\\n padding-top: 1px;\\n}\\n\\n.igv-menu-popup-header {\\n position: relative;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-color: transparent;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n}\\n.igv-menu-popup-header div {\\n margin-right: 4px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F;\\n}\\n.igv-menu-popup-header div:hover {\\n cursor: pointer;\\n color: #444;\\n}\\n\\n.igv-menu-popup-check-container {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n width: 100%;\\n height: 20px;\\n margin-right: 4px;\\n background-color: transparent;\\n}\\n.igv-menu-popup-check-container div {\\n padding-top: 2px;\\n padding-left: 8px;\\n}\\n.igv-menu-popup-check-container div:first-child {\\n position: relative;\\n width: 12px;\\n height: 12px;\\n}\\n.igv-menu-popup-check-container div:first-child svg {\\n position: absolute;\\n width: 12px;\\n height: 12px;\\n}\\n\\n.igv-user-feedback {\\n position: fixed;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n width: 512px;\\n height: 360px;\\n z-index: 2048;\\n background-color: white;\\n border-color: #a2a2a2;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n color: #444;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n}\\n.igv-user-feedback div:first-child {\\n position: relative;\\n height: 24px;\\n width: 100%;\\n background-color: white;\\n border-bottom-color: #a2a2a2;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n}\\n.igv-user-feedback div:first-child div {\\n position: absolute;\\n top: 2px;\\n width: 16px;\\n height: 16px;\\n background-color: transparent;\\n}\\n.igv-user-feedback div:first-child div:first-child {\\n left: 8px;\\n}\\n.igv-user-feedback div:first-child div:last-child {\\n cursor: pointer;\\n right: 8px;\\n}\\n.igv-user-feedback div:last-child {\\n width: 100%;\\n height: calc(100% - 24px);\\n border-width: 0;\\n}\\n.igv-user-feedback div:last-child div {\\n width: auto;\\n height: auto;\\n margin: 8px;\\n}\\n\\n.igv-loading-spinner-container {\\n z-index: 1024;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n width: 32px;\\n height: 32px;\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: center;\\n align-items: center;\\n}\\n.igv-loading-spinner-container > div {\\n box-sizing: border-box;\\n width: 100%;\\n height: 100%;\\n border-radius: 50%;\\n border: 4px solid rgba(128, 128, 128, 0.5);\\n border-top-color: rgb(255, 255, 255);\\n animation: spin 1s ease-in-out infinite;\\n -webkit-animation: spin 1s ease-in-out infinite;\\n}\\n\\n@keyframes spin {\\n to {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n@-webkit-keyframes spin {\\n to {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n.igv-roi-menu {\\n position: absolute;\\n z-index: 512;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n font-weight: 400;\\n color: #4b4b4b;\\n background-color: white;\\n width: 192px;\\n border-radius: 4px;\\n border-color: #7F7F7F;\\n border-style: solid;\\n border-width: thin;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: stretch;\\n}\\n.igv-roi-menu > div:first-child {\\n height: 24px;\\n border-top-color: transparent;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n}\\n.igv-roi-menu > div:first-child > div {\\n margin-right: 4px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F;\\n}\\n.igv-roi-menu > div:first-child > div:hover {\\n cursor: pointer;\\n color: #444;\\n}\\n.igv-roi-menu > div:last-child {\\n background-color: white;\\n border-bottom-left-radius: 4px;\\n border-bottom-right-radius: 4px;\\n border-bottom-color: transparent;\\n border-bottom-style: solid;\\n border-bottom-width: 0;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: stretch;\\n text-align: start;\\n vertical-align: middle;\\n}\\n.igv-roi-menu > div:last-child > div {\\n height: 24px;\\n padding-left: 4px;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n border-bottom-color: #7f7f7f;\\n}\\n.igv-roi-menu > div:last-child > div:not(:first-child):hover {\\n cursor: pointer;\\n background-color: rgba(127, 127, 127, 0.1);\\n}\\n.igv-roi-menu > div:last-child div:first-child {\\n font-style: italic;\\n text-align: center;\\n padding-right: 4px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.igv-roi-menu > div:last-child > div:last-child {\\n border-bottom-width: 0;\\n border-bottom-color: transparent;\\n}\\n\\n.igv-roi-placeholder {\\n font-style: normal;\\n color: rgba(75, 75, 75, 0.6);\\n}\\n\\n.igv-roi-table {\\n position: absolute;\\n z-index: 1024;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: stretch;\\n resize: both;\\n overflow: hidden;\\n width: min-content;\\n max-width: 1600px;\\n border-color: #7f7f7f;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 12px;\\n font-weight: 400;\\n background-color: white;\\n cursor: default;\\n}\\n.igv-roi-table > div {\\n height: 24px;\\n font-size: 14px;\\n text-align: start;\\n vertical-align: middle;\\n line-height: 24px;\\n}\\n.igv-roi-table > div:first-child {\\n border-color: transparent;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-top-width: 0;\\n border-bottom-color: #7f7f7f;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee;\\n cursor: move;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n}\\n.igv-roi-table > div:first-child > div:first-child {\\n text-align: center;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n overflow: hidden;\\n margin-left: 4px;\\n margin-right: 4px;\\n width: calc(100% - 4px - 12px);\\n}\\n.igv-roi-table > div:first-child > div:last-child {\\n margin-right: 4px;\\n margin-bottom: 2px;\\n height: 12px;\\n width: 12px;\\n color: #7f7f7f;\\n}\\n.igv-roi-table > div:first-child > div:last-child > svg {\\n display: block;\\n}\\n.igv-roi-table > div:first-child > div:last-child:hover {\\n cursor: pointer;\\n color: #444;\\n}\\n.igv-roi-table > .igv-roi-table-description {\\n padding: 4px;\\n margin-left: 4px;\\n word-break: break-all;\\n overflow-y: auto;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n background-color: transparent;\\n}\\n.igv-roi-table > .igv-roi-table-goto-explainer {\\n margin-top: 5px;\\n margin-left: 4px;\\n color: #7F7F7F;\\n font-style: italic;\\n height: 24px;\\n border-top: solid lightgray;\\n background-color: transparent;\\n}\\n.igv-roi-table > .igv-roi-table-column-titles {\\n height: 24px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: stretch;\\n align-items: stretch;\\n padding-right: 16px;\\n background-color: white;\\n border-top-color: #7f7f7f;\\n border-top-style: solid;\\n border-top-width: thin;\\n border-bottom-color: #7f7f7f;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n}\\n.igv-roi-table > .igv-roi-table-column-titles > div {\\n font-size: 14px;\\n vertical-align: middle;\\n line-height: 24px;\\n text-align: left;\\n margin-left: 4px;\\n height: 24px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n border-right-color: #7f7f7f;\\n border-right-style: solid;\\n border-right-width: thin;\\n}\\n.igv-roi-table > .igv-roi-table-column-titles > div:last-child {\\n border-right: unset;\\n}\\n.igv-roi-table > .igv-roi-table-row-container {\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: stretch;\\n overflow: auto;\\n height: 360px;\\n flex: 1 1 auto;\\n background-color: transparent;\\n}\\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row {\\n height: 24px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: stretch;\\n align-items: stretch;\\n}\\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div {\\n font-size: 14px;\\n vertical-align: middle;\\n line-height: 24px;\\n text-align: left;\\n margin-left: 4px;\\n height: 24px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n border-right-color: transparent;\\n border-right-style: solid;\\n border-right-width: thin;\\n}\\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:last-child {\\n border-right: unset;\\n}\\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row-hover {\\n background-color: rgba(0, 0, 0, 0.04);\\n}\\n.igv-roi-table > div:last-child {\\n min-height: 32px;\\n height: 32px;\\n line-height: 32px;\\n border-top-color: #7f7f7f;\\n border-top-style: solid;\\n border-top-width: thin;\\n border-bottom-color: transparent;\\n border-bottom-left-radius: 4px;\\n border-bottom-right-radius: 4px;\\n border-bottom-width: 0;\\n background-color: #eee;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center;\\n}\\n\\n.igv-roi-table-row-selected {\\n background-color: rgba(0, 0, 0, 0.125);\\n}\\n\\n.igv-roi-table-button {\\n cursor: pointer;\\n height: 20px;\\n user-select: none;\\n line-height: 20px;\\n text-align: center;\\n vertical-align: middle;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 13px;\\n font-weight: 400;\\n color: black;\\n padding-left: 6px;\\n padding-right: 6px;\\n background-color: rgb(239, 239, 239);\\n border-color: black;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 3px;\\n}\\n\\n.igv-roi-table-button:hover {\\n font-weight: 400;\\n background-color: rgba(0, 0, 0, 0.13);\\n}\\n\\n.igv-roi-region {\\n z-index: 64;\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n pointer-events: none;\\n overflow: visible;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: stretch;\\n}\\n.igv-roi-region > div {\\n position: relative;\\n width: 100%;\\n height: 8px;\\n pointer-events: auto;\\n}\\n\\n.igv-roi-menu-row {\\n height: 24px;\\n padding-left: 8px;\\n font-size: small;\\n text-align: start;\\n vertical-align: middle;\\n line-height: 24px;\\n background-color: white;\\n}\\n\\n.igv-roi-menu-row-edit-description {\\n width: -webkit-fill-available;\\n font-size: small;\\n text-align: start;\\n vertical-align: middle;\\n background-color: white;\\n padding-left: 4px;\\n padding-right: 4px;\\n padding-bottom: 4px;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: stretch;\\n align-items: stretch;\\n}\\n.igv-roi-menu-row-edit-description > label {\\n margin-left: 2px;\\n margin-bottom: 0;\\n display: block;\\n width: -webkit-fill-available;\\n}\\n.igv-roi-menu-row-edit-description > input {\\n display: block;\\n margin-left: 2px;\\n margin-right: 2px;\\n margin-bottom: 1px;\\n width: -webkit-fill-available;\\n}\\n\\n.picker_wrapper.no_alpha .picker_alpha {\\n display: none;\\n}\\n\\n.picker_wrapper.no_editor .picker_editor {\\n position: absolute;\\n z-index: -1;\\n opacity: 0;\\n}\\n\\n.picker_wrapper.no_cancel .picker_cancel {\\n display: none;\\n}\\n\\n.layout_default.picker_wrapper {\\n display: flex;\\n flex-flow: row wrap;\\n justify-content: space-between;\\n align-items: stretch;\\n font-size: 10px;\\n width: 25em;\\n padding: 0.5em;\\n}\\n\\n.layout_default.picker_wrapper input, .layout_default.picker_wrapper button {\\n font-size: 1rem;\\n}\\n\\n.layout_default.picker_wrapper > * {\\n margin: 0.5em;\\n}\\n\\n.layout_default.picker_wrapper::before {\\n content: \"\";\\n display: block;\\n width: 100%;\\n height: 0;\\n order: 1;\\n}\\n\\n.layout_default .picker_slider, .layout_default .picker_selector {\\n padding: 1em;\\n}\\n\\n.layout_default .picker_hue {\\n width: 100%;\\n}\\n\\n.layout_default .picker_sl {\\n flex: 1 1 auto;\\n}\\n\\n.layout_default .picker_sl::before {\\n content: \"\";\\n display: block;\\n padding-bottom: 100%;\\n}\\n\\n.layout_default .picker_editor {\\n order: 1;\\n width: 6.5rem;\\n}\\n\\n.layout_default .picker_editor input {\\n width: 100%;\\n height: 100%;\\n}\\n\\n.layout_default .picker_sample {\\n order: 1;\\n flex: 1 1 auto;\\n}\\n\\n.layout_default .picker_done, .layout_default .picker_cancel {\\n order: 1;\\n}\\n\\n.picker_wrapper {\\n box-sizing: border-box;\\n background: #f2f2f2;\\n box-shadow: 0 0 0 1px silver;\\n cursor: default;\\n font-family: sans-serif;\\n color: #444;\\n pointer-events: auto;\\n}\\n\\n.picker_wrapper:focus {\\n outline: none;\\n}\\n\\n.picker_wrapper button, .picker_wrapper input {\\n box-sizing: border-box;\\n border: none;\\n box-shadow: 0 0 0 1px silver;\\n outline: none;\\n}\\n\\n.picker_wrapper button:focus, .picker_wrapper button:active, .picker_wrapper input:focus, .picker_wrapper input:active {\\n box-shadow: 0 0 2px 1px #1e90ff;\\n}\\n\\n.picker_wrapper button {\\n padding: 0.4em 0.6em;\\n cursor: pointer;\\n background-color: #f5f5f5;\\n background-image: linear-gradient(0deg, gainsboro, transparent);\\n}\\n\\n.picker_wrapper button:active {\\n background-image: linear-gradient(0deg, transparent, gainsboro);\\n}\\n\\n.picker_wrapper button:hover {\\n background-color: #fff;\\n}\\n\\n.picker_selector {\\n position: absolute;\\n z-index: 1;\\n display: block;\\n -webkit-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n border: 2px solid #fff;\\n border-radius: 100%;\\n box-shadow: 0 0 3px 1px #67b9ff;\\n background: currentColor;\\n cursor: pointer;\\n}\\n\\n.picker_slider .picker_selector {\\n border-radius: 2px;\\n}\\n\\n.picker_hue {\\n position: relative;\\n background-image: linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);\\n box-shadow: 0 0 0 1px silver;\\n}\\n\\n.picker_sl {\\n position: relative;\\n box-shadow: 0 0 0 1px silver;\\n background-image: linear-gradient(180deg, white, rgba(255, 255, 255, 0) 50%), linear-gradient(0deg, black, rgba(0, 0, 0, 0) 50%), linear-gradient(90deg, #808080, rgba(128, 128, 128, 0));\\n}\\n\\n.picker_alpha, .picker_sample {\\n position: relative;\\n background: linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0/2em 2em, linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em/2em 2em;\\n box-shadow: 0 0 0 1px silver;\\n}\\n\\n.picker_alpha .picker_selector, .picker_sample .picker_selector {\\n background: none;\\n}\\n\\n.picker_editor input {\\n font-family: monospace;\\n padding: 0.2em 0.4em;\\n}\\n\\n.picker_sample::before {\\n content: \"\";\\n position: absolute;\\n display: block;\\n width: 100%;\\n height: 100%;\\n background: currentColor;\\n}\\n\\n.picker_arrow {\\n position: absolute;\\n z-index: -1;\\n}\\n\\n.picker_wrapper.popup {\\n position: absolute;\\n z-index: 2;\\n margin: 1.5em;\\n}\\n\\n.picker_wrapper.popup, .picker_wrapper.popup .picker_arrow::before, .picker_wrapper.popup .picker_arrow::after {\\n background: #f2f2f2;\\n box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.4);\\n}\\n\\n.picker_wrapper.popup .picker_arrow {\\n width: 3em;\\n height: 3em;\\n margin: 0;\\n}\\n\\n.picker_wrapper.popup .picker_arrow::before, .picker_wrapper.popup .picker_arrow::after {\\n content: \"\";\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n z-index: -99;\\n}\\n\\n.picker_wrapper.popup .picker_arrow::before {\\n width: 100%;\\n height: 100%;\\n -webkit-transform: skew(45deg);\\n transform: skew(45deg);\\n -webkit-transform-origin: 0 100%;\\n transform-origin: 0 100%;\\n}\\n\\n.picker_wrapper.popup .picker_arrow::after {\\n width: 150%;\\n height: 150%;\\n box-shadow: none;\\n}\\n\\n.popup.popup_top {\\n bottom: 100%;\\n left: 0;\\n}\\n\\n.popup.popup_top .picker_arrow {\\n bottom: 0;\\n left: 0;\\n -webkit-transform: rotate(-90deg);\\n transform: rotate(-90deg);\\n}\\n\\n.popup.popup_bottom {\\n top: 100%;\\n left: 0;\\n}\\n\\n.popup.popup_bottom .picker_arrow {\\n top: 0;\\n left: 0;\\n -webkit-transform: rotate(90deg) scale(1, -1);\\n transform: rotate(90deg) scale(1, -1);\\n}\\n\\n.popup.popup_left {\\n top: 0;\\n right: 100%;\\n}\\n\\n.popup.popup_left .picker_arrow {\\n top: 0;\\n right: 0;\\n -webkit-transform: scale(-1, 1);\\n transform: scale(-1, 1);\\n}\\n\\n.popup.popup_right {\\n top: 0;\\n left: 100%;\\n}\\n\\n.popup.popup_right .picker_arrow {\\n top: 0;\\n left: 0;\\n}\\n\\n.igv-container {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-start;\\n padding-top: 4px;\\n user-select: none;\\n -webkit-user-select: none;\\n -ms-user-select: none;\\n min-height: 160px;\\n}\\n\\n.igv-viewport {\\n position: relative;\\n margin-top: 5px;\\n line-height: 1;\\n overflow-x: hidden;\\n overflow-y: hidden;\\n}\\n\\n.igv-viewport-content {\\n position: relative;\\n width: 100%;\\n}\\n.igv-viewport-content > canvas {\\n position: relative;\\n display: block;\\n}\\n\\n.igv-column-container {\\n position: relative;\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: stretch;\\n width: 100%;\\n}\\n\\n.igv-column-shim {\\n width: 1px;\\n margin-left: 2px;\\n margin-right: 2px;\\n background-color: #545453;\\n}\\n\\n.igv-axis-column {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-start;\\n box-sizing: border-box;\\n height: 100%;\\n width: 50px;\\n}\\n.igv-axis-column > div {\\n position: relative;\\n margin-top: 5px;\\n width: 100%;\\n}\\n.igv-axis-column > div > div {\\n z-index: 512;\\n position: absolute;\\n top: 8px;\\n left: 8px;\\n width: fit-content;\\n height: fit-content;\\n background-color: transparent;\\n display: grid;\\n align-items: start;\\n justify-items: center;\\n}\\n.igv-axis-column > div > div > input {\\n display: block;\\n margin: unset;\\n cursor: pointer;\\n}\\n\\n.igv-column {\\n position: relative;\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-start;\\n box-sizing: border-box;\\n height: 100%;\\n}\\n\\n.igv-sample-info-column {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-start;\\n box-sizing: border-box;\\n height: 100%;\\n}\\n\\n.igv-sample-name-column {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-start;\\n box-sizing: border-box;\\n height: 100%;\\n}\\n\\n.igv-scrollbar-column {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-start;\\n box-sizing: border-box;\\n height: 100%;\\n width: 14px;\\n}\\n.igv-scrollbar-column > div {\\n position: relative;\\n margin-top: 5px;\\n width: 14px;\\n}\\n.igv-scrollbar-column > div > div {\\n cursor: pointer;\\n position: absolute;\\n top: 0;\\n left: 2px;\\n width: 8px;\\n border-width: 1px;\\n border-style: solid;\\n border-color: #c4c4c4;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-left-radius: 4px;\\n border-bottom-right-radius: 4px;\\n}\\n.igv-scrollbar-column > div > div:hover {\\n background-color: #c4c4c4;\\n}\\n\\n.igv-track-drag-column {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-start;\\n box-sizing: border-box;\\n height: 100%;\\n width: 12px;\\n background-color: white;\\n}\\n.igv-track-drag-column > .igv-track-drag-handle {\\n z-index: 512;\\n position: relative;\\n cursor: pointer;\\n margin-top: 5px;\\n width: 100%;\\n border-style: solid;\\n border-width: 0;\\n border-top-right-radius: 6px;\\n border-bottom-right-radius: 6px;\\n}\\n.igv-track-drag-column .igv-track-drag-handle-color {\\n background-color: #c4c4c4;\\n}\\n.igv-track-drag-column .igv-track-drag-handle-hover-color {\\n background-color: #787878;\\n}\\n.igv-track-drag-column .igv-track-drag-handle-selected-color {\\n background-color: #0963fa;\\n}\\n.igv-track-drag-column > .igv-track-drag-shim {\\n position: relative;\\n margin-top: 5px;\\n width: 100%;\\n border-style: solid;\\n border-width: 0;\\n}\\n\\n.igv-gear-menu-column {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: flex-start;\\n box-sizing: border-box;\\n height: 100%;\\n width: 28px;\\n}\\n.igv-gear-menu-column > div {\\n display: flex;\\n flex-direction: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n margin-top: 5px;\\n width: 100%;\\n background: white;\\n}\\n.igv-gear-menu-column > div > div {\\n position: relative;\\n margin-top: 4px;\\n width: 16px;\\n height: 16px;\\n color: #7F7F7F;\\n}\\n.igv-gear-menu-column > div > div:hover {\\n cursor: pointer;\\n color: #444;\\n}\\n\\n.igv-vertical-center {\\n margin: 0 !important;\\n top: 50% !important;\\n -ms-transform: translateY(-50%) !important;\\n transform: translateY(-50%) !important;\\n}\\n\\n/*# sourceMappingURL=igv.css.map */\\n'),n.adoptedStyleSheets=[e]}if(this.root=e({class:\"igv-container\"}),n.appendChild(this.root),this.spinner=e({class:\"igv-loading-spinner-container\"}),this.root.appendChild(this.spinner),this.spinner.appendChild(e()),this.spinner.style.width=\"64px\",this.spinner.style.height=\"64px\",this.stopSpinner(),this.alert=new Xa(this.root),this.columnContainer=e({class:\"igv-column-container\"}),this.root.appendChild(this.columnContainer),this.menuPopup=new _f(this.columnContainer),this.menuUtils=new Fo(this),this.initialize(t),this.trackViews=[],this.constants={dragThreshold:3,scrollThreshold:5,defaultColor:\"rgb(0,0,150)\",doubleClickDelay:t.doubleClickDelay||500},this.eventHandlers={},t.listeners)for(let e of Object.keys(t.listeners))this.on(e,t.listeners[e]);this.on(\"trackremoved\",(()=>{0===this.findTracks((e=>\"function\"==typeof e.getSamples)).length&&(this.sampleInfoControl.setButtonVisibility(!1),this.sampleNameViewportWidth=void 0,this.showSampleNames=!1,this.sampleNameControl.setState(this.showSampleNames),this.sampleNameControl.hide(),this.layoutChange())})),this.on(\"didchangecolumnlayout\",(()=>{if(Wu.length>0){const e=Wu.length;for(let t=0;t1}isMultiLocusWholeGenomeView(){if(void 0===this.referenceFrameList||1===this.referenceFrameList.length)return!1;for(let e of this.referenceFrameList)if(\"all\"===e.chr.toLowerCase())return!0;return!1}currentLoci(){const e=e=>`${e.chr}:${e.start+1}-${e.end}`;return void 0===this.referenceFrameList||0===this.referenceFrameList.length?\"\":1===this.referenceFrameList.length?e(this.referenceFrameList[0]):this.referenceFrameList.map((t=>e(t)))}toSVG(){const{x:e,y:t,width:i,height:n}=this.columnContainer.getBoundingClientRect(),r=new Ru({width:i,height:n,backdropColor:\"white\",multiLocusGap:0,viewbox:{x:0,y:0,width:i,height:n}}),s={deltaX:0,deltaY:-t};for(let e of this.trackViews)e.renderSVGContext(r,s);return s.deltaX=e,this.roiManager.renderSVGContext(this.columnContainer,r,s),r.getSerializedSvg(!0)}saveSVGtoFile(e,t){let i=this.toSVG();if(t){const e=document.createElement(\"svg\");e.innerHTML=i,t.append(e),t.appendChild(e)}const n=e||\"igvjs.svg\",r=URL.createObjectURL(new Blob([i],{type:\"application/octet-stream\"}));Pt(n,r),URL.revokeObjectURL(r)}savePNGtoFile(e){const t=this.toSVG(),i=new Blob([t],{type:\"image/svg+xml\"}),n=URL.createObjectURL(i),r=document.createElement(\"img\");r.addEventListener(\"load\",(()=>{const t=this.columnContainer.getBoundingClientRect(),i=window.devicePixelRatio,s=t.width*i,o=t.height*i,a=document.createElement(\"canvas\");a.width=s,a.height=o;const c=a.getContext(\"2d\");c.scale(i,i),c.drawImage(r,0,0);const l=a.toDataURL(\"image/png\");Pt(e=e||\"igvjs.png\",l),URL.revokeObjectURL(n)})),r.src=n}async loadSession(e){let t;return this.sampleInfo.initialize(),this.roiSets=[],t=e.url||e.file?await RA.loadSessionFile(e):e,this.loadSessionObject(t)}static async loadSessionFile(e){const t=e.url||e.file;let i;if(e.url&&Mt(e.url)&&(e.url.startsWith(\"blob:\")||e.url.startsWith(\"data:\"))){const t=RA.uncompressSession(e.url);i=JSON.parse(t)}else{let n=e.filename;if(n||(n=e.url?await oc(e.url):e.file.name),n.endsWith(\".xml\")){const e=Uu.KNOWN_GENOMES,n=await Vs.loadString(t);i=new qy(n,e)}else if(n.endsWith(\"hub.txt\")){i={reference:(await Lu.loadHub(t,e)).getGenomeConfig()}}else{if(!n.endsWith(\".json\"))throw Error(\"Unrecognized session file format:\"+n);i=await Vs.loadJson(t)}}return UA(i)}async loadSessionObject(e){this.cleanHouseForSession(),this.config=e,e.browsers&&(e=await async function(e){const t=e.browsers[0],i={},n=new tp({url:t.url});await n.readHeaderAndFooter(),i.sampleNameViewportWidth=20,i.genome=\"hg38\";const r=t.state.split(\",\"),s=n.bpResolutions[Number.parseInt(r[2])],o=Number.parseInt(r[0]),a=Math.floor(Number.parseFloat(r[3])*s),c=a+Math.floor(1700*s);return i.locus=`${n.chromosomes[o].name}:${a}-${c}`,i.tracks=(t.tracks||[]).filter((e=>!(\"refgene\"===e.format||\"cellType\"===e.name))),i.tracks.push({type:\"shoebox\",url:t.url,name:t.name,colorScale:t.colorScale,_hicFile:n}),i}(e)),this.navbar.sampleInfoControl.setButtonVisibility(!1),this.showSampleNames=e.showSampleNames||!1,this.navbar.sampleNameControl.setState(!0===this.showSampleNames),e.sampleNameViewportWidth&&(this.sampleNameViewportWidth=e.sampleNameViewportWidth),lc(this.columnContainer,\"igv-axis-column\"),lc(this.columnContainer,\"igv-sample-info-column\"),lc(this.columnContainer,\"igv-sample-name-column\"),lc(this.columnContainer,\"igv-scrollbar-column\"),lc(this.columnContainer,\"igv-track-drag-column\"),lc(this.columnContainer,\"igv-gear-menu-column\");const t=e.reference||e.genome;if(!t)return void console.warn(\"No genome or reference object specified\");const i=Mt(t)?await Uu.expandReference(this.alert,t):t;if(await this.loadReference(i,i.locus||e.locus),this.centerLineList=this.createCenterLineList(this.columnContainer),!1!==e.showIdeogram){const e=new Dy(this),t=new Lf(this,this.columnContainer,e);this.trackViews.push(t)}if(!1!==e.showRuler){const e=new Ff(this),t=new Lf(this,this.columnContainer,e);this.trackViews.push(t)}e.qtlSelections&&(this.qtlSelections=BA.fromJSON(e.qtlSelections)),void 0!==e.showROIOverlays&&(this.roiManager.showOverlays=e.showROIOverlays),this.roiManager.clearROIs(),e.roi?this.roiManager.loadROI(e.roi):await this.roiManager.reset();const n=[];if(e.sampleinfo)for(const t of e.sampleinfo)t.file?n.push(t.file):this.loadSampleInfo(t);const r=i.tracks||[],s=e.tracks?r.concat(e.tracks):r;0===s.filter((e=>\"sequence\"===e.type&&!e.url&&!e.fastaURL)).length&&s.push({type:\"sequence\",order:wu,removable:!1});const o=s.filter((e=>void 0!==e.file)).map((({file:e})=>e)),a=s.filter((e=>void 0!==e.indexFile)).map((({indexFile:e})=>e));a.length>0&&o.push(...a),n.length>0&&o.push(...n),o.length>0&&alert(`Local files cannot be loaded automatically.\\nThis session contains references to these local files:\\n${o.map((e=>` ${e}`)).join(\"\\n\")}`);const c=s.filter((e=>void 0===e.file));let l=1;for(let e of c)void 0===e.order&&(e.order=l++);await this.loadTrackList(c);for(let e of this.trackViews.filter((e=>\"ruler\"===e.track.type||\"ideogram\"===e.track.type)))await e.updateViews();return this.trackViews.some((e=>e.track.selected))&&this.navbar.setEnableTrackSelection(!0),this.updateUIWithReferenceFrameList(),this.updateLocusSearchWidget(),s}cleanHouseForSession(){for(let e of this.trackViews)e.removeDOMFromColumnContainer();this.columnContainer.querySelectorAll(\".igv-axis-column, .igv-column-shim, .igv-column, .igv-sample-info-column, .igv-sample-name-column, .igv-scrollbar-column, .igv-track-drag-column, .igv-gear-menu-column\").forEach((e=>e.remove())),this.trackViews=[],this.circularView&&this.circularView.clearChords()}async loadReference(e,t){let i;this.removeAllTracks(),this.roiManager.clearROIs(),this.navbar.setEnableTrackSelection(!1),i=e.gbkURL?await qd(e.gbkURL):await NA.createGenome(e,this);const n=void 0===this.genome||this.genome.id!==i.id;this.genome=i,this.navbar.updateGenome(i);let r=t||i.initialLocus;Array.isArray(r)&&(r=r.join(\" \"));if(!await this.search(r,!0))throw new Error(`Cannot set initial locus ${r}`);if(n){let t;if(e.hubURL){t=(await Lu.loadHub(e.hubURL)).getGroupedTrackConfigurations()}this.fireEvent(\"genomechange\",[{genome:i,trackConfigurations:t}]),this.circularView&&this.circularView.setAssembly({name:this.genome.id,id:this.genome.id,chromosomes:aw(this.genome)})}}async loadGenome(e){let t;e.genarkAccession&&(e.url=Tu(e.genarkAccession)),e.url&&(Mt(e.url)&&e.url.endsWith(\"/hub.txt\")?(e.hubURL=e.url,delete e.url):\"gbk\"===function(e){let t;if(e instanceof File)t=e.name;else{if(\"string\"!=typeof e)throw new Error(\"Input must be a File object or a URL string\");t=e}const i=t.split(\".\").pop();return i.split(\"?\")[0]}(e.url)&&(e.gbkURL=e.url,delete e.url));if(e.hubURL||e.url&&Mt(e.url)&&e.url.endsWith(\"/hub.txt\")){t=(await Lu.loadHub(e.hubURL||e.url,e)).getGenomeConfig()}else t=Mt(e)||!(e.url||e.fastaURL||e.twoBitURL||e.gbkURL)?await Uu.expandReference(this.alert,e):e;let i;await this.loadReference(t),i=t.gbkURL||\"gbk\"===t.format?[{name:\"Annotations\",format:\"gbk\",url:t.gbkURL}]:t.tracks||[];return 0===i.filter((e=>\"sequence\"===e.type)).length&&i.push({type:\"sequence\",order:wu}),await this.loadTrackList(i),await this.updateViews(),this.genome}async loadTrackHub(e){const t=UA((await Lu.loadHub(e.url,e)).getGenomeConfig());return this.loadGenome(t)}updateUIWithReferenceFrameList(){const e=this.referenceFrameList;this.isMultiLocusWholeGenomeView()||Uu.isWholeGenomeView(e[0].chr),this.navbar.navbarDidResize(),PA(this.trackViews,this.doShowTrackLabels),this.doShowCenterLine&&Uu.isWholeGenomeView(e[0].chr)&&this.navbar.centerLineButton.boundMouseClickHandler(),this.doShowCursorGuide&&Uu.isWholeGenomeView(e[0].chr)&&this.navbar.cursorGuideButton.boundMouseClickHandler(),this.setCenterLineAndCenterLineButtonVisibility(Uu.isWholeGenomeView(e[0].chr))}setCenterLineAndCenterLineButtonVisibility(e){e?this.navbar.centerLineButton.setVisibility(!1):this.navbar.centerLineButton.setVisibility(this.config.showCenterGuideButton);for(let t of this.centerLineList)e?this.setCenterLineVisibility(!e):this.setCenterLineVisibility(this.doShowCenterLine)}setTrackLabelVisibility(e){PA(this.trackViews,e)}setROITableVisibility(e){!0===e?this.roiManager.presentTable():this.roiManager.dismissTable()}setCursorGuideVisibility(e){e?this.cursorGuide.show():this.cursorGuide.hide()}setCustomCursorGuideMouseHandler(e){this.cursorGuide.customMouseHandler=e}setCenterLineVisibility(e){for(let t of this.centerLineList)!0===e?(t.show(),t.repaint()):t.hide()}async loadTrackList(e){let t=0;for(let i of e)void 0===i.order&&(i.order=t++);const i=[];for(let t of e)i.push(this._loadTrack(t));const n=await Promise.all(i);return this.trackViews.filter((function(e){return e.track.autoscaleGroup})).length>0&&this.updateViews(),n}async loadTrack(e){e.sync=!1!==e.sync;const t=this._loadTrack(e);return t&&e.autoscaleGroup&&(await t,this.updateViews()),t}async _loadTrack(e){Mt(e)&&(e=JSON.parse(e));try{if(e.hidden){const t=Gd(e,this.genome);return void await t.getFeatures({chr:\"1\",start:0,end:Number.MAX_SAFE_INTEGER})}const t=await this.createTrack(e);if(\"sampleinfo\"===e.type)return void this.layoutChange();if(void 0===t)return;return this.addTrack(e,t)}catch(t){let i=t.message||t.error||t.toString();const n={401:\"Access unauthorized\",403:\"Access forbidden\",404:\"Not found\"};n.hasOwnProperty(i)&&(i=n[i]),i=`${i} : ${Ht(e.url)?e.url.name:e.url}`;const r=new Error(i);throw console.error(r),r}}async addTrack(e,t){void 0===t.order&&(t.order=this.trackViews.length);const i=new Lf(this,this.columnContainer,t);if(this.trackViews.push(i),PA(this.trackViews,this.doShowTrackLabels),\"function\"==typeof t.postInit)try{i.startSpinner(),await t.postInit()}finally{i.stopSpinner()}return t.autoscaleGroup||(e.sync?await i.updateViews():i.updateViews()),\"function\"==typeof t.hasSamples&&t.hasSamples()&&(this.sampleInfo.hasAttributes()&&this.sampleInfoControl.setButtonVisibility(!0),!1!==this.config.showSampleNameButton&&this.sampleNameControl.show()),this.reorderTracks(),this.fireEvent(\"trackorderchanged\",[this.getTrackOrder()]),t.trackView.enableTrackSelection(this.navbar.getEnableTrackSelection()),t}async loadROI(e){return this.roiManager.loadROI(e,this.genome)}clearROIs(){this.roiManager.clearROIs()}async getUserDefinedROIs(){if(this.roiManager){const e=this.roiManager.getUserDefinedROISet();if(void 0===e)return[];const t=await e.getAllFeatures(),i=[];for(let e of Object.values(t))i.push(...e);return i}return[]}getRulerTrackView(){const e=this.trackViews.filter((({track:e})=>\"ruler\"===e.id));return e.length>0?e[0]:void 0}async createTrack(e){let t=await async function(e){return\"function\"==typeof e?e():e}\n/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */(e.url||e.fastaURL);if(Mt(t)&&(t=t.trim()),t)if(e.format)e.format=e.format.toLowerCase();else if(e.fastaURL)e.format=\"fasta\";else if(e.sourceType)\"htsget\"===e.sourceType&&await Qh.inferFormat(e);else{const t=await Nm(e);t&&(e.format=t)}e.type&&Ja(e);let i=e.type?e.type.toLowerCase():void 0;if(!i){if(!e.format)throw Error(`Unrecognized track: ${JSON.stringify(e)}`);if(\"hic\"===e.format){const t=new tp(e);if(await t.readHeaderAndFooter(),!t.chromosomeIndexMap.celltype)throw Error(\"'.hic' files not supported\");i=\"shoebox\",e._hicFile=t}else if(i=Za(e.format),\"bedtype\"===i){const t=Gd(e,this.genome);e._featureSource=t;const n=await t.trackType();i=n||\"annotation\"}e.type=i}if(this.trackDefaults&&i){const t=this.trackDefaults[i];if(t)for(let i in t)t.hasOwnProperty(i)&&void 0===e[i]&&(e[i]=t[i])}const n=function(e,t,i){let n;switch(e){case\"annotation\":case\"genes\":case\"fusionjuncspan\":case\"snp\":n=\"feature\";break;case\"seg\":case\"maf\":case\"mut\":n=\"seg\";break;case\"junctions\":case\"splicejunctions\":n=\"junction\";break;default:n=e}return Uy.has(n)?Uy.get(n)(t,i):void 0}(i,e,this);if(void 0!==n)return e.roi&&e.roi.length>0&&(n.roiSets=e.roi.map((e=>new CA(e,this.genome)))),n;this.alert.present(new Error(`Error creating track. Could not determine track type for file: ${e.url||e}`),void 0)}reorderTracks(){this.trackViews.sort((function(e,t){const i=e=>\"ideogram\"===e.track.id?1:\"ruler\"===e.track.id?2:3,n=i(e),r=i(t);if(n===r){return(e.track.order||0)-(t.track.order||0)}return n-r}));for(let{axis:e,viewports:t,sampleInfoViewport:i,sampleNameViewport:n,outerScroll:r,dragHandle:s,gearContainer:o}of this.trackViews){e.remove();for(let{$viewport:e}of t)e.detach();i.viewport.remove(),n.viewport.remove(),r.remove(),s.remove(),o.remove()}const e=this.columnContainer.querySelectorAll(\".igv-column\");for(let{axis:t,viewports:i,sampleInfoViewport:n,sampleNameViewport:r,outerScroll:s,dragHandle:o,gearContainer:a}of this.trackViews){this.columnContainer.querySelector(\".igv-axis-column\").appendChild(t);for(let t=0;te.track&&e.track.name)).map((e=>e.track.name))}getSelectedTrackViews(){return this.trackViews.filter((e=>!0===e.track.selected))}removeTrackByName(e){const t=this.trackViews.slice();for(let i of t)e===i.track.name&&this.removeTrack(i.track)}removeTrack(e){for(let t of this.trackViews)if(e===t.track){this._removeTrack(t.track);break}}_removeTrack(e){e.disposed||(this.trackViews.splice(this.trackViews.indexOf(e.trackView),1),this.fireEvent(\"trackremoved\",[e]),this.fireEvent(\"trackorderchanged\",[this.getTrackOrder()]),e.trackView&&e.trackView.dispose())}removeAllTracks(){const e=this.trackViews;this.trackViews=[];for(let t of e)\"ruler\"!==t.track.id&&\"ideogram\"!==t.track.id?(this.fireEvent(\"trackremoved\",[t.track]),t.dispose()):this.trackViews.push(t)}get ideogramTrackView(){return this.trackViews[0]}get rulerTrackView(){return this.trackViews[1]}findTracks(e,t){let i=\"function\"==typeof e?t=>e(t.track):i=>t===i.track[e];return this.trackViews.filter(i).map((e=>e.track))}get tracks(){return this.trackViews.map((e=>e.track)).filter((e=>void 0!==e))}setTrackHeight(e){this.trackHeight=e,this.trackViews.forEach((function(t){t.setTrackHeight(e)}))}async visibilityChange(){this.layoutChange()}async layoutChange(){if(this.referenceFrameList.find((e=>e.bpPerPixel<0))){const e=this.calculateViewportWidth(this.referenceFrameList.length);for(let t of this.referenceFrameList)t.bpPerPixel=(t.end-t.start)/e}this.referenceFrameList&&this.navbar.navbarDidResize(),TA.call(this),this.roiManager.updateROIRegionPositions(),await this.updateViews()}async updateViews(){const e=this.trackViews;this.updateLocusSearchWidget();for(let e of this.referenceFrameList)e.bpPerPixel<=10&&await this.genome.getSequence(e.chr,e.start,e.start+1);for(let e of this.centerLineList)e.repaint();if(this.dragObject)for(let t of e)await t.updateViews();else{const t={},i=[];for(const n of e)if(n.track.autoscaleGroup){const e=n.track.autoscaleGroup;t[e]||(t[e]=[]),t[e].push(n)}else i.push(n);if(Object.entries(t).length>0)for(const[e,i]of Object.entries(t)){const e=await Promise.all(i.map((e=>e.getInViewFeatures()))),t=nc(e.flat());for(const e of i)e.track.dataRange=Object.assign({},t),e.track.autoscale=!1;await Promise.all(i.map((e=>e.updateViews())))}await Promise.all(i.map((e=>e.updateViews())))}}repaintViews(){for(let e of this.trackViews)e.repaintViews()}updateLocusSearchWidget(){if(!this.referenceFrameList)return;const e=this.referenceFrameList,t=this.calculateViewportWidth(this.referenceFrameList.length);for(let i of e)i.end=i.start+i.bpPerPixel*t;const i=1===e.length?this.referenceFrameList[0].chr:\"\",n=this.referenceFrameList.map((e=>e.getLocusString())).join(\" \");this.navbar.updateLocus(n,i),this.fireEvent(\"locuschange\",[this.referenceFrameList])}calculateViewportWidth(e){let{width:t}=this.columnContainer.getBoundingClientRect();return t-=50+this.getSampleInfoViewportWidth()+this.getSampleNameViewportWidth()+14+12+28,t-=5*(e-1),Math.floor(t/e)}minimumBases(){return this.config.minimumBases}zoomIn(){this.zoomWithScaleFactor(.5)}zoomOut(){this.zoomWithScaleFactor(2)}async zoomWithScaleFactor(e,t,i){if(!this.referenceFrameList)return;const n=this.calculateViewportWidth(this.referenceFrameList.length);let r=i?[i]:this.referenceFrameList;for(let i of r)i.zoomWithScaleFactor(this,e,n,t)}async addMultiLocusPanel(e,t,i,n){if(!this.referenceFrameList)return;const r=this.calculateViewportWidth(1+this.referenceFrameList.length),s=this.calculateViewportWidth(this.referenceFrameList.length)/this.calculateViewportWidth(1+this.referenceFrameList.length);for(let e of this.referenceFrameList)e.bpPerPixel*=s;const o=(i-t)/r,a=new Qy(this.genome,e,t,i,o),c=n?this.referenceFrameList.indexOf(n):this.referenceFrameList.length-1,l=1+c,{$viewport:h}=this.trackViews[0].viewports[c],d=dA(h.get(0).parentElement);if(this.fireEvent(\"didchangecolumnlayout\"),l===this.referenceFrameList.length){this.referenceFrameList.push(a);for(let e of this.trackViews){const t=hf(e,d,a);e.viewports.push(t)}}else{this.referenceFrameList.splice(l,0,a);for(let e of this.trackViews){const t=hf(e,d,a);e.viewports.splice(l,0,t)}}this.centerLineList=this.createCenterLineList(this.columnContainer),TA.call(this),await this.updateViews(!0)}createCenterLineList(e){const t=e.querySelectorAll(\".igv-center-line\");for(let e=0;e{i===t||e.remove()})),this.columnContainer.querySelectorAll(\".igv-column-shim\").forEach((e=>e.remove()));for(let e of this.trackViews){const i=e.viewports[t];e.viewports.filter(((e,i)=>i!==t)).forEach((e=>e.dispose())),e.viewports=[i]}const i=this.calculateViewportWidth(1);e.bpPerPixel=(e.end-e.start)/i,this.referenceFrameList=[e],this.trackViews.forEach((({viewports:e})=>e.forEach((e=>e.setWidth(i))))),this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),await this.updateViews(!0)}async rescaleForMultiLocus(e){const t=this.calculateViewportWidth(this.referenceFrameList.length);for(let t of this.referenceFrameList)t.bpPerPixel*=e;for(let{viewports:e}of this.trackViews)for(let i of e)i.setWidth(t);this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),await this.updateViews()}async goto(e,t,i){await this.search(e+\":\"+t+\"-\"+i)}async doSearch(e,t){const i=await this.search(e,t);return i||this.alert.present(new Error(`Unrecognized locus: ${e} `)),i}async search(e,t){const i=await async function(e,t){if(void 0===t||\"\"===t.trim())return;const i=t.split(\" \");let n=[];const r=async t=>{if(\"all\"===t.trim().toLowerCase()||\"*\"===t)return e.genome.wholeGenomeView?{chr:\"all\",start:0,end:e.genome.getChromosome(\"all\").bpLength}:void 0;let i,n;if(t.includes(\":\")&&(i=Cy(t,e.isSoftclipped()),i&&(n=await e.genome.loadChromosome(i.chr))),!n){i=void 0;const r=await Ay(e,t);r&&(i={chr:r.chr,start:r.start,end:r.end,name:(r.name||t).toUpperCase()}),i||(n=await e.genome.loadChromosome(t),n&&(i={chr:n.name}))}return i&&(n=n||await e.genome.loadChromosome(i.chr),i.chr=n.name,void 0===i.start&&void 0===i.end&&(i.start=0,i.end=n.bpLength)),i};for(let e of i){const t=await r(e);t&&n.push(t)}if(0===n.length){const e=await r(t.replaceAll(\" \",\"+\"));e&&n.push(e)}return 0===n.length?void 0:n}(this,e);if(i&&i.length>0){this.referenceFrameList=function(e,t,i,n,r,s){return e.map((e=>{const o=Object.assign({},e);if(i&&o.name&&(o.start=Math.max(0,o.start-i),o.end+=i),!s){const e=t.getChromosome(o.chr);rc(e.bpLength,o,n)}return new Qy(t,o.chr,o.start,o.end,(o.end-o.start)/r)}))}(i,this.genome,this.flanking,this.minimumBases(),this.calculateViewportWidth(i.length),this.isSoftclipped());for(let e of this.trackViews)e.removeViewportsFromColumnContainer();this.columnContainer.querySelectorAll(\".igv-column-shim, .igv-column\").forEach((e=>e.remove())),uA(this.columnContainer.querySelector(\".igv-sample-info-column\"),this.referenceFrameList.length),this.fireEvent(\"didchangecolumnlayout\");for(let e of this.trackViews)e.createViewports(this,this.columnContainer,this.referenceFrameList);return this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),t||await this.updateViews(),!0}return!1}async loadSampleInfo(e){await this.sampleInfo.loadSampleInfoFile(e.url);for(const{sampleInfoViewport:e}of this.trackViews)e.setWidth(this.getSampleInfoColumnWidth());this.findTracks((e=>\"function\"==typeof e.getSamples)).length>0&&(this.sampleInfoControl.performClickWithState(this,!0),this.sampleInfoControl.setButtonVisibility(!0));for(const{sampleInfoViewport:e}of this.trackViews)e.repaint()}getSampleInfoColumnWidth(){if(this.sampleInfo.attributeCount){const e=this.findTracks((e=>\"function\"==typeof e.getSamples)).length>0,t=this.sampleInfo.hasAttributes(),i=this.sampleInfoControl.showSampleInfo;return e&&t&&i?this.sampleInfo.attributeCount*wf+8:0}return 0}on(e,t){this.eventHandlers[e]||(this.eventHandlers[e]=[]),this.eventHandlers[e].push(t)}un(e,t){this.off(e,t)}off(e,t){if(e)if(t){const i=this.eventHandlers[e];if(i&&0!==i.length){const n=i.indexOf(t);-1!==n&&this.eventHandlers[e].splice(n,1)}else console.warn(\"No handlers to remove for event: \"+e)}else this.eventHandlers[e]=[];else this.eventHandlers={}}fireEvent(e,t,i){const n=this.eventHandlers[e];if(void 0===n||0===n.length)return;const r=i||window;return n.map((function(e){return e.apply(r,t)}))[0]}dispose(){this.removeEventHandlers();for(let e of this.trackViews)e.dispose();this.roiManager&&this.roiManager.dispose()}toJSON(){const e={version:\"3.1.4\"};if(void 0!==this.showSampleNames&&(e.showSampleNames=this.showSampleNames),this.sampleNameViewportWidth&&(e.sampleNameViewportWidth=this.sampleNameViewportWidth),e.reference=this.genome.toJSON(),e.reference.fastaURL instanceof File)throw new Error(`Error. Sessions cannot include local file references ${e.reference.fastaURL.name}.`);if(e.reference.indexURL instanceof File)throw new Error(`Error. Sessions cannot include local file references ${e.reference.indexURL.name}.`);const t=[];let i=this.trackViews[0];for(let{referenceFrame:e}of i.viewports){const i=e.getLocusString();t.push(i)}e.locus=1===t.length?t[0]:t;const n=this.roiManager.toJSON();n&&(e.roi=n,this.roiManager.showOverlays||(e.showROIOverlays=!1)),this.qtlSelections.isEmpty()||(e.qtlSelections=this.qtlSelections.toJSON());const r=[],s=[];for(const{track:e}of this.trackViews)try{let t;\"function\"==typeof e.getState?t=Kl.localFileInspection(e.getState()):e.config&&(t=Kl.localFileInspection(e.config)),t&&(t.browser&&delete t.browser,t.order=e.order,r.push(t))}catch(t){const i=`Track: ${e.name}: ${t}`;console.error(i),s.push(i)}if(s.length>0){let e=1,t=\"Errors encountered saving session:
\";for(let i of s)t+=` (${e++}) ${i.toString()}
`;throw Error(t)}e.tracks=r;const o=[];for(const e of r)for(const t of Object.keys(e))\"file\"!==t&&\"indexFile\"!==t||o.push(e[t]);const a=[];if(this.sampleInfo.sampleInfoFiles.length>0){const t=this.sampleInfo.toJSON();t.length>0&&(e.sampleinfo=t);for(const e of this.sampleInfo.sampleInfoFiles){const t=Kl.localFileInspection({url:e});t.file&&a.push(t.file)}a.length>0&&o.push(...a)}return o.length>0&&alert(`This session includes reference(s) to local file(s):\\n${o.map((e=>` ${e}`)).join(\"\\n\")}\\nLocal files cannot be loaded automatically when a saved session is restored.`),e}compressedSession(){return function(e){const t=new Uint8Array(e.length);for(var i=0;i0?e.substring(0,t):e)+\"?sessionURL=blob:\"+this.compressedSession()}mouseDownOnViewport(e,t){var i;i=r(e),this.vpMouseDown={viewport:t,lastMouseX:i.x,mouseDownX:i.x,lastMouseY:i.y,mouseDownY:i.y,referenceFrame:t.referenceFrame}}cancelTrackPan(){const e=this.dragObject;this.dragObject=void 0,this.isScrolling=!1,this.vpMouseDown=void 0,e&&e.viewport.referenceFrame.start!==e.start&&(this.updateViews(),this.fireEvent(\"trackdragend\",[e.viewport]))}isTrackPanning(){return this.dragObject}isSoftclipped(){return void 0!==this.trackViews.find((e=>!0===e.track.showSoftClips))}startTrackDrag(e){this.dragTrack=e}updateTrackDrag(e){if(e&&this.dragTrack){const t=this.dragTrack,i=this.trackViews.indexOf(e),n=this.trackViews.indexOf(t),r=this.trackViews;r[i]=t,r[n]=e;const s=this.trackViews[i].track.order;this.trackViews[n].track.order=s;const o=r.length;let a=s;if(i0;e--){const t=r[e].track;if(!(t.order>=a))break;t.order=Math.max(-Number.MAX_SAFE_INTEGER,a-1),a=t.order}this.reorderTracks()}}endTrackDrag(){this.dragTrack?(this.dragTrack=void 0,this.fireEvent(\"trackorderchanged\",[this.getTrackOrder()])):this.dragTrack=void 0}addEventHandlers(){this.addWindowResizeHandler(),this.addRootMouseUpHandler(),this.addRootMouseLeaveHandler(),this.addColumnContainerEventHandlers(),this.addKeyboardHandler()}removeEventHandlers(){this.removeWindowResizeHandler(),this.removeRootMouseUpHandler(),this.removeRootMouseLeaveHandler(),this.removeColumnContainerEventHandlers(),this.removeKeyboardHandler()}addWindowResizeHandler(){this.boundWindowResizeHandler=TA.bind(this),window.addEventListener(\"resize\",this.boundWindowResizeHandler)}removeWindowResizeHandler(){window.removeEventListener(\"resize\",this.boundWindowResizeHandler)}addRootMouseUpHandler(){this.boundRootMouseUpHandler=zA.bind(this),this.root.addEventListener(\"mouseup\",this.boundRootMouseUpHandler)}removeRootMouseUpHandler(){this.root.removeEventListener(\"mouseup\",this.boundRootMouseUpHandler)}addRootMouseLeaveHandler(){this.boundRootMouseLeaveHandler=zA.bind(this),this.root.addEventListener(\"mouseleave\",this.boundRootMouseLeaveHandler)}removeRootMouseLeaveHandler(){this.root.removeEventListener(\"mouseleave\",this.boundRootMouseLeaveHandler)}addColumnContainerEventHandlers(){this.boundColumnContainerMouseMoveHandler=LA.bind(this),this.boundColumnContainerTouchMoveHandler=LA.bind(this),this.boundColumnContainerMouseLeaveHandler=zA.bind(this),this.boundColumnContainerMouseUpHandler=zA.bind(this),this.boundColumnContainerTouchEndHandler=zA.bind(this),this.columnContainer.addEventListener(\"mousemove\",this.boundColumnContainerMouseMoveHandler),this.columnContainer.addEventListener(\"touchmove\",this.boundColumnContainerTouchMoveHandler),this.columnContainer.addEventListener(\"mouseleave\",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.addEventListener(\"mouseup\",this.boundColumnContainerMouseUpHandler),this.columnContainer.addEventListener(\"touchend\",this.boundColumnContainerTouchEndHandler)}removeColumnContainerEventHandlers(){this.columnContainer.removeEventListener(\"mousemove\",this.boundColumnContainerMouseMoveHandler),this.columnContainer.removeEventListener(\"touchmove\",this.boundColumnContainerTouchMoveHandler),this.columnContainer.removeEventListener(\"mouseleave\",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.removeEventListener(\"mouseup\",this.boundColumnContainerMouseUpHandler),this.columnContainer.removeEventListener(\"touchend\",this.boundColumnContainerTouchEndHandler)}addKeyboardHandler(){this.keyUpHandler=HA.bind(this),document.addEventListener(\"keyup\",this.keyUpHandler)}removeKeyboardHandler(){console.log(\"Remove handler\"),document.addEventListener(\"keyup\",this.keyUpHandler)}static uncompressSession(e){let t;if(e.indexOf(\"/gzip;base64\")>0){t=vs(e);let i=\"\";for(let e of t)i+=String.fromCharCode(e);return i}return function(e){e=e.replace(/\\./g,\"+\").replace(/_/g,\"/\").replace(/-/g,\"=\");const t=atob(e),i=[];for(let e=0;e{const r=e.data,s=r.mate;function o(e){e.chr=i.genome.getChromosomeName(e.refName);let t=!1;for(let n of i.referenceFrameList){const i=Mm.fromLocusString(n.getLocusString());if(i.contains(e)){t=!0;break}if(i.overlaps(e)){n.extend(e),t=!0;break}}if(!t){const t=2e3,n=(e.start+e.end)/2;i.addMultiLocusPanel(e.chr,n-t,n+t)}}o(r),o(s)}})),this.circularViewControl=new pA(this.navbar.toggle_button_container,this),this.circularView.setAssembly({name:this.genome.id,id:this.genome.id,chromosomes:aw(this.genome)}),this.circularViewVisible=t,this.circularView}get circularViewVisible(){return void 0!==this.circularView&&this.circularView.visible}set circularViewVisible(e){this.circularView&&(this.circularView.visible=e,this.circularViewControl.setState(e))}get sampleInfoControl(){return this.navbar.sampleInfoControl}get overlayTrackButton(){return this.navbar.overlayTrackButton}get roiTableControl(){return this.navbar.roiTableControl}get sampleInfoControl(){return this.navbar.sampleInfoControl}get sampleNameControl(){return this.navbar.sampleNameControl}}async function TA(){if(!this.referenceFrameList)return;const e=this.calculateViewportWidth(this.referenceFrameList.length);for(let t of this.referenceFrameList){const i=this.referenceFrameList.indexOf(t),{chr:n,genome:r}=t,{bpLength:s}=r.getChromosome(t.chr),o=t.toBP(e);Uu.isWholeGenomeView(n)||o>s?t.bpPerPixel=s/e:t.end=t.start+t.toBP(e);for(let{viewports:t}of this.trackViews)t[i].setWidth(e)}this.updateUIWithReferenceFrameList(),await this.updateViews(!0)}function LA(e){e.preventDefault();const{x:t,y:i}=r(e);if(this.vpMouseDown){const{viewport:e,referenceFrame:n}=this.vpMouseDown,r=Math.abs(t-this.vpMouseDown.mouseDownX)>Math.abs(i-this.vpMouseDown.mouseDownY);if(!this.dragObject&&!this.isScrolling)if(r)this.vpMouseDown.mouseDownX&&Math.abs(t-this.vpMouseDown.mouseDownX)>this.constants.dragThreshold&&(this.dragObject={viewport:e,start:n.start});else if(this.vpMouseDown.mouseDownY&&Math.abs(i-this.vpMouseDown.mouseDownY)>this.constants.scrollThreshold){this.isScrolling=!0;const t=e.$viewport.height(),i=e.trackView.maxViewportContentHeight();this.vpMouseDown.r=t/i}if(this.dragObject){const i=!this.isSoftclipped();let r=this.vpMouseDown.lastMouseX-t;n.shiftPixels(r,e.$viewport.width(),i)&&this.updateViews(),this.fireEvent(\"trackdrag\")}if(this.isScrolling){const t=this.vpMouseDown.r*(this.vpMouseDown.lastMouseY-i);e.trackView.moveScroller(t)}this.vpMouseDown.lastMouseX=t,this.vpMouseDown.lastMouseY=i}}function zA(e){this.cancelTrackPan(),this.endTrackDrag()}async function HA(e){if(this.referenceFrameList&&!(this.referenceFrameList.length>1)&&(\"KeyF\"===e.code||\"KeyB\"===e.code)){const t=this.getSelectedTrackViews();if(t.length>0){const i=t[0].track;if(\"function\"==typeof i.nextFeatureAfter){const t=this.referenceFrameList[0],n=t.viewport?t.viewport.getWidth():this.calculateViewportWidth(this.referenceFrameList.length),r=\"all\"===t.chr.toLowerCase(),s=i.visibilityWindow;if(r||s&&s>0&&t.bpPerPixel*n>s)return;const o=\"KeyF\"===e.code,a=t.chr,c=t.center,l=await i.nextFeatureAfter(a,c,o);if(l){const i=await this.genome.getChromosomeName(l.chr);if(a===i){const i=(l.start+l.end)/2;if(e.shiftKey){const e=this.config.minimumBases||40,r=Math.max(e,1.1*(l.end-l.start));t.start=Math.max(0,i-r/2),t.end=i+r/2,t.bpPerPixel=(t.end-t.start)/n}else t.shift(i-c);this.updateViews()}else{t.chr=i;const r=(l.start+l.end)/2;if(e.shiftKey){const e=this.config.minimumBases||40,i=Math.max(e,1.1*(l.end-l.start));t.start=Math.max(0,r-i/2),t.end=t.start+i,t.bpPerPixel=(t.end-t.start)/n}else t.start=r-n*t.bpPerPixel/2,t.end=t.start+n*t.bpPerPixel;this.updateViews()}}}}}}function PA(e,t){for(let{viewports:i}of e)for(let e of i)e.$trackLabel&&(0===i.indexOf(e)&&!0===t?e.$trackLabel.show():e.$trackLabel.hide())}let OA=[];function UA(e){return void 0===e.minimumBases&&(e.minimumBases=40),void 0===e.showIdeogram&&(e.showIdeogram=!0),void 0===e.showCircularView&&(e.showCircularView=!1),void 0===e.showCircularViewButton&&(e.showCircularViewButton=!1),void 0===e.showTrackLabelButton&&(e.showTrackLabelButton=!0),void 0===e.showTrackLabels&&(e.showTrackLabels=!0),void 0===e.showCursorTrackingGuideButton&&(e.showCursorTrackingGuideButton=!0),void 0===e.showCursorGuide&&(e.showCursorGuide=e.showCursorTrackingGuide||!1),void 0===e.showCenterGuideButton&&(e.showCenterGuideButton=!0),void 0===e.showCenterGuide&&(e.showCenterGuide=!1),void 0===e.showSampleNames&&(e.showSampleNames=!1),void 0===e.showSVGButton&&(e.showSVGButton=!0),void 0===e.showControls&&(e.showControls=!0),void 0===e.showNavigation&&(e.showNavigation=!0),void 0===e.showRuler&&(e.showRuler=!0),void 0===e.flanking&&(e.flanking=1e3),void 0===e.pairsSupported&&(e.pairsSupported=!0),e.tracks||(e.tracks=[]),e}const qA=Vs.setApiKey;const VA=Vs.oauth;var QA={TrackUtils:ec,IGVGraphics:ko,MenuUtils:Fo,DataRangeDialog:xo,createTrack:async function(e,t){return await RA.prototype.createTrack.call(t,e)},createBrowser:async function(e,t){void 0===t&&(t={}),Uu.KNOWN_GENOMES||await Uu.initializeGenomes(t),UA(t),t.queryParametersSupported&&function(e){var t,i,n,r,s,o,a,c,l;let h,d,u;if(a=window.location.href,s={},t=a.indexOf(\"?\"),i=a.lastIndexOf(\"#\"),t>=0)for(i<0&&(i=a.length),n=t+1;nt&&(i.indexURL=d[t]),u&&u.length>t&&(i.name=u[t]),e.tracks.push(i)}}}(t),t.apiKey&&Vs.setApiKey(t.apiKey),t.oauthToken&&Vs.setOauthToken(t.oauthToken),t.clientId&&!Ts()&&await async function(e){if(!google.accounts.oauth2.initTokenClient)throw new Error(\"Google accounts token client not loaded (https://accounts.google.com/gsi/client)\");if(Ts())throw new Error(\"Google client is already initialized\");const t={client_id:e.client_id||e.clientId,scope:e.scope||\"https://www.googleapis.com/auth/userinfo.profile\",state:e.state||\"igv\",error:e=>{throw new Error(e.type)},hint:e.hint,hosted_domain:e.hosted_domain},i=google.accounts.oauth2.initTokenClient(t);google.igv={tokenClient:i,apiKey:e.apiKey}}({client_id:t.clientId,apiKey:t.apiKey,scope:\"https://www.googleapis.com/auth/userinfo.profile\"});const i=new RA(t,e);OA.push(i);const n=t.sessionURL||t.session||t.hubURL;return n?await i.loadSession({url:n}):await i.loadSessionObject(t),i.navbar.navbarDidResize(),i},removeBrowser:function(e){e.dispose(),e.root.remove(),OA=OA.filter((t=>t!==e))},removeAllBrowsers:function(){for(let e of OA)e.dispose(),e.root.remove();OA=[]},visibilityChange:async function(){for(let e of OA)await e.visibilityChange()},setGoogleOauthToken:function(e){return Vs.setOauthToken(e)},setOauthToken:function(e,t){return Vs.setOauthToken(e,t)},oauth:VA,version:jy,setApiKey:qA,TrackBase:Kl,registerTrackClass:function(e,t){Uy.set(e,((e,i)=>new t(e,i)))},registerTrackCreatorFunction:function(e,t){Uy.set(e,t)},registerFileFormats:function(e,t){Pl[e]={fields:t}},loadSessionFile:RA.loadSessionFile};return QA}();\n//# sourceMappingURL=igv.iife.js.map\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "/**\n * Global handler for igv.js messages. Messages have the form\n * {\n * command -- the command to execute\n * id -- the id of the igv.js browser, if applicable\n * data -- any data needed for the command\n * }\n */\n\n// Use a self-evaluating function to keep variables in this file scope, with the execption of the global handler\n\n(function () {\n\n const isColab = window.google !== undefined && window.google.colab\n const isNotebook = !isColab && window.Jupyter !== undefined\n\n let svgComm\n if (isNotebook) {\n svgComm = Jupyter.notebook.kernel.comm_manager.new_comm('svg', {})\n }\n\n async function toSVG(displayID, locus, svg) {\n //console.log(isNotebook + \" \" + locus)\n if (isNotebook) {\n svgComm.send({\n \"display_id\": displayID,\n \"locus\": locus,\n \"svg\": svg\n })\n }\n }\n\n console.log(\"Installing IGVMessageHandler\")\n\n function convertUrlsAndPaths(session) {\n if (session.reference) {\n for (let pre of [\"fasta\", \"index\", \"cytoband\", \"cytobandBb\", \"compressedIndex\", \"alias\", \"aliasBb\",\n \"twoBit\", \"twoBitBpt\", \"chromAliasBb\", \"chromSizes\", \"trix\"]) {\n convert(session.reference, pre)\n }\n if (session.reference.tracks) {\n for (let t of session.reference.tracks) {\n convert(t)\n convert(t, \"index\")\n if (!t.indexURL) {\n t.indexed = false\n }\n }\n }\n }\n\n if (session.tracks) {\n for (let t of session.tracks) {\n convert(t)\n convert(t, \"index\")\n if (!t.indexURL) {\n t.indexed = false\n }\n }\n }\n }\n\n /**\n * Return true if the sessionJson object contains only absolute URLs to resources\n */\n function safeToWeblink(sessionJson) {\n const unsafe = (url) => typeof url.startsWith != 'function' || !url.startsWith(\"http\")\n if (sessionJson.reference) {\n if (unsafe(sessionJson.reference.fastaURL)) return false\n }\n if (sessionJson.tracks) {\n const urls = sessionJson.tracks.filter(t => t.url).map(t => t.url)\n if (urls.some(unsafe)) return false\n }\n return true\n }\n\n class MessageHandler {\n\n constructor() {\n this.browserCache = new Map()\n this.messageQueue = new Queue()\n }\n\n on(msg) {\n this.messageQueue.enqueue(msg)\n this.processQueue()\n }\n\n async processQueue() {\n\n const convertTrackData = (data) => {\n convert(data)\n convert(data, \"index\")\n if (!data.indexURL) {\n data.indexed = false\n }\n }\n\n if (!this.processing) {\n this.processing = true\n while (!this.messageQueue.isEmpty()) {\n const msg = this.messageQueue.dequeue()\n const command = msg.command\n const browserID = msg.id\n const data = msg.data\n const browser = this.browserCache.get(browserID)\n try {\n switch (command) {\n case \"createBrowser\":\n\n // custom button bar\n const button_container = document.getElementById(`${browserID}_buttons`) // <= created from python\n const customButtonDiv = document.createElement('div')\n customButtonDiv.style = `background: #f3f3f3;padding: 5px;border-color: #bfbfbf;border-style: solid;border-width: thin;border-radius: 3px;`\n button_container.appendChild(customButtonDiv)\n\n data.sync = true\n convertUrlsAndPaths(data)\n\n const container = document.getElementById(`${browserID}_igvcontainer`) // <= created from python\n const newBrowser = await igv.createBrowser(container, data)\n this.browserCache.set(browserID, newBrowser)\n\n // Add igv-notebook button bar\n const toJsonButton = document.createElement('button')\n toJsonButton.innerText = \"Save Session\"\n toJsonButton.style = \"margin-right:5px\"\n toJsonButton.addEventListener('click', (evt) => {\n let fn\n if (isNotebook) {\n fn = prompt(\"Filename:\", \"session.json\")\n } else {\n fn = \"session.json\"\n }\n if (fn) {\n const json = newBrowser.toJSON()\n const jsonString = JSON.stringify(json, null, '\\t')\n download(fn, jsonString)\n }\n })\n customButtonDiv.appendChild(toJsonButton)\n\n const webLinkNode = document.createElement('a')\n webLinkNode.target = \"igvWeb\"\n webLinkNode.innerText = \"Link to IGV-Web\"\n webLinkNode.style.display = \"none\"\n\n const shareButton = document.createElement('button')\n shareButton.innerText = \"Show IGV-Web Link\"\n shareButton.style = \"margin-right:5px\"\n shareButton.addEventListener('click', async (evt) => {\n\n if (safeToWeblink(newBrowser.toJSON())) {\n const sessionURL = `https://igv.org/app?sessionURL=blob:${newBrowser.compressedSession()}`\n const shortURL = await shortenURL(sessionURL)\n webLinkNode.innerText = \"Link to IGV-Web\"\n webLinkNode.setAttribute(\"href\", shortURL)\n webLinkNode.style.display = \"inline-block\"\n shareButton.innerText = \"Update IGV-Web Link\"\n } else {\n webLinkNode.innerText = \"Cannot link -- non URL resources used\"\n webLinkNode.style.display = \"inline-block\"\n }\n })\n customButtonDiv.appendChild(shareButton)\n customButtonDiv.appendChild(webLinkNode)\n\n if (isNotebook) {\n const toSVGButton = document.createElement('button')\n toSVGButton.innerText = \"To SVG\"\n toSVGButton.style = \"float:right\"\n toSVGButton.addEventListener('click', (evt) => {\n const locus = newBrowser.referenceFrameList.map(rf => rf.getLocusString()).join(' ')\n const svg = newBrowser.toSVG()\n toSVG(browserID, locus, svg)\n })\n customButtonDiv.appendChild(toSVGButton)\n }\n\n break\n\n case \"loadSession\":\n convertUrlsAndPaths(data)\n browser.loadSessionObject(data)\n break\n\n case \"loadTrack\":\n convertTrackData(data)\n await browser.loadTrack(data)\n break\n\n case \"loadROI\":\n if (Array.isArray(data)) {\n data.map(convertTrackData)\n } else {\n convertTrackData(data)\n }\n await browser.loadROI(data)\n break\n\n case \"clearROIs\":\n await browser.clearROIs()\n break\n\n case \"search\":\n browser.search(data)\n break\n\n case \"zoomIn\":\n browser.zoomIn()\n break\n\n case \"zoomOut\":\n browser.zoomOut()\n break\n\n case \"remove\":\n this.browserCache.delete(browserID)\n document.getElementById(browserID).parentNode.removeChild(container)\n break\n\n case \"toSVG\":\n const displayId = data\n const svg = browser.toSVG()\n const locus = browser.referenceFrameList.map(rf => rf.getLocusString()).join(' ')\n toSVG(displayId, locus, svg)\n break\n\n default:\n console.error(\"Unrecognized method: \" + msg.command)\n }\n } catch (e) {\n console.error(e)\n }\n }\n this.processing = false\n }\n }\n }\n\n /**\n * Potentially convert a path to a local File-like object.\n * @param path\n * @returns {*}\n */\n function createNotebookFile(path) {\n if (!path ||\n path.startsWith(\"https://\") || path.startsWith(\"http://\") || path.startsWith(\"gs://\") || path.startsWith(\"data:\")) {\n return path\n } else {\n // Try to create a notebook file. If no notebook file implementation is available for the kernel in\n // use (e.g. Jupyter Lab) treat as a URL.\n const nbFile = igv.createNotebookLocalFile({path})\n if (nbFile != null) {\n return nbFile\n } else {\n // Try to treat as relative URL. This may or may not work\n return convertURL(path)\n }\n }\n }\n\n /**\n * Convert relative URLs to absolute. Primarily for Jupyter Lab, not generally needed for Jupyter Notebook\n * @param url\n * @returns {*}\n */\n function convertURL(url) {\n\n const pageURL = window.location.href\n\n if (!url ||\n url.startsWith(\"https://\") ||\n url.startsWith(\"http://\") ||\n url.startsWith(\"gs://\") ||\n url.startsWith(\"data:\")) {\n return url\n } else if (isColab) {\n // Interpret relative url as a path.\n igv.createNotebookLocalFile({path: url})\n } else if (isNotebook) {\n // Jupyter Notebook\n //\n // Examples\n // https://hub-binder.mybinder.ovh/user/igvteam-igv-notebook-tnlb45ie/notebooks/examples/BamFiles-Jupyter.ipynb\n // => https://hub-binder.mybinder.ovh/user/igvteam-igv-notebook-tnlb45ie/files/examples/data/gstt1_sample.bam\",\n\n const baseURL = document.querySelector('body').getAttribute('data-base-url')\n const notebookPath = document.querySelector('body').getAttribute('data-notebook-path')\n const notebookName = document.querySelector('body').getAttribute('data-notebook-name')\n const notebookDir = notebookPath.slice(0, -1 * notebookName.length)\n\n //`${location.origin}${base_path}files/${nb_dir}${url}`\n if (url.startsWith(\"/\")) {\n url = `files${url}`\n return encodeURI(`${location.origin}${baseURL}${url}`)\n } else {\n // URL is relative to notebook\n return encodeURI(`${location.origin}${baseURL}files/${notebookDir}${url}`)\n }\n } else if (pageURL.includes(\"/lab\")) {\n\n console.log(\"Jupyter lab\")\n // Jupyter Lab\n\n // Examples\n // http://localhost:8888/lab/workspaces/auto-N/tree/examples/BamFiles.ipynb\n // => http://localhost:8888/files/examples/data/gstt1_sample.bam\n //\n // https://hub.gke2.mybinder.org/user/igvteam-igv-notebook-5ivkyktt/lab/tree/examples/BamFiles.ipynb\n // => https://hub.gke2.mybinder.org/user/igvteam-igv-notebook-5ivkyktt/files/examples/data/gstt1_sample.bam\n\n const baseIndex = pageURL.indexOf(\"/lab\")\n const baseURL = pageURL.substring(0, baseIndex)\n\n if (url.startsWith(\"/\")) {\n return encodeURI(`${baseURL}/files${url}`)\n } else if (pageURL.includes(\"/tree/\")) {\n // Interpret URL as relative to notebook location. This is not reliable, '/tree/' is not always in the page URL\n const treeIndex = pageURL.indexOf(\"/tree/\") + 6\n const lastSlashIndex = pageURL.lastIndexOf(\"/\")\n const notebookDir = pageURL.substring(treeIndex, lastSlashIndex)\n return encodeURI(`${baseURL}/files/${notebookDir}/${url}`)\n } else {\n // We don't know how to determine the notebook path\n console.warn(\"Page url missing '/tree/'. Can't determine notebook path.\")\n return encodeURI(`${baseURL}/files/${url}`)\n }\n } else {\n // We should never get here,\n return encodeURI(url)\n }\n }\n\n\n function convert(config, prefix) {\n const urlProp = prefix ? prefix + \"URL\" : \"url\"\n const pathProp = prefix ? prefix + \"Path\" : \"path\"\n if (config[pathProp]) {\n config[urlProp] = createNotebookFile(config[pathProp])\n } else if (config[urlProp]) {\n config[urlProp] = convertURL(config[urlProp])\n }\n }\n\n\n class Queue {\n constructor() {\n this.elements = []\n }\n\n enqueue(e) {\n this.elements.push(e)\n }\n\n dequeue() {\n return this.elements.shift()\n }\n\n isEmpty() {\n return this.elements.length == 0\n }\n\n peek() {\n return !this.isEmpty() ? this.elements[0] : undefined\n }\n\n length() {\n return this.elements.length\n }\n }\n\n window.igv.MessageHandler = new MessageHandler()\n\n function download(filename, text) {\n\n const data = URL.createObjectURL(new Blob([text], {type: \"application/octet-stream\"}))\n const element = document.createElement('a')\n element.setAttribute('href', data)\n element.setAttribute('download', filename)\n element.style.display = 'none'\n document.body.appendChild(element)\n element.click()\n document.body.removeChild(element)\n }\n\n async function shortenURL(url) {\n const endpoint = \"https://2et6uxfezb.execute-api.us-east-1.amazonaws.com/dev/tinyurl/\"\n const enc = encodeURIComponent(url)\n const response = await fetch(`${endpoint}${enc}`)\n if (response.ok) {\n return response.text()\n } else {\n throw new Error(response.statusText)\n }\n }\n\n console.log(\"igv.MessageHandler installed\")\n\n})()", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "/**\n * Mock objects to emulate the browser \"File\" class for use with Jupyter and Colab notebooks. These objects delegate\n * actual file reading to python.\n */\n\n// Use a self-evaluating function to keep variables in this file scope\n\n(function () {\n\n const isColab = window.google !== undefined && window.google.colab\n const isNotebook = !isColab && window.Jupyter !== undefined\n\n igv.createNotebookLocalFile = function (options) {\n if (isColab) {\n return new ColabLocalFile(options)\n } else if (isNotebook) {\n return new JupyterLocalFile(options)\n } else {\n return undefined; //TODO -- throw error?\n }\n }\n\n\n // Start up a Comm object if in a Jupyter Notebook environment (i.e. not Colab or JupyterLab).\n let comm\n const pendingRequests = new Map()\n if (isNotebook) {\n console.log('registering comm')\n comm = Jupyter.notebook.kernel.comm_manager.new_comm('file_request', {})\n // Register a handler\n comm.on_msg(function (msg) {\n const id = msg.content.data.id\n const data = msg.content.data.data\n pendingRequests.set(id, data)\n })\n }\n\n /**\n * Emulates a browser \"File\" for Jupyter notebooks. File reading is delegated to python via Comms messaging.\n * Polling is used to synchronize the async message passing.\n *\n * NOTE: This will not work for JupyterLab\n */\n class JupyterLocalFile {\n\n constructor({path, name, start, end}) {\n this.type = 'JupyterLocalFile'\n this.path = path\n this.name = name || path\n this.start = start\n this.end = end\n }\n\n /**\n * Returns a new Blob object containing the data in the specified range of bytes of the blob on which it's called.\n * @param start An index into the Blob indicating the first byte to include in the new Blob\n * @param end An index into the Blob indicating the first byte that will *not* be included in the new Blob\n * @param contentType\n * @returns {*}\n */\n slice(start, end) {\n return new JupyterLocalFile({path: this.path, name: this.name, start, end})\n }\n\n /**\n * Returns a promise that resolves with an ArrayBuffer containing the entire contents of the Blob as binary data.\n *\n * @returns {Promise<*>}\n */\n async arrayBuffer() {\n\n const id = uniqueID()\n const path = this.path\n const promise = new Promise((resolve, reject) => {\n let count = 0\n\n function poll() {\n\n if (count > 100) {\n console.error(`error reading ${path}: timed out`)\n reject(`error reading ${path}: timed out`)\n }\n\n count++\n if (pendingRequests.has(id)) {\n const data = pendingRequests.get(id)\n const dataString = atob(data)\n const bytes = new Uint8Array(dataString.length)\n for (var i = 0; i < dataString.length; i++) {\n bytes[i] = dataString.charCodeAt(i)\n }\n pendingRequests.delete(id)\n resolve(bytes.buffer)\n } else {\n setTimeout(poll, 100)\n }\n }\n\n poll()\n })\n\n const msg = (this.start === undefined) ?\n {id: id, 'path': this.path, 'method': 'arrayBuffer'} :\n {id: id, 'path': this.path, 'method': 'arrayBuffer', 'start': this.start, 'end': this.end}\n\n comm.send(msg)\n\n return promise\n }\n\n /**\n * Returns a promise that resolves with a USVString containing the entire contents of the Blob interpreted as UTF-8 text.\n *\n * @returns {Promise}\n */\n async text() {\n throw Error(\"text not implemented\")\n }\n\n stream() {\n throw Error(\"stream not implemented\")\n }\n }\n\n /**\n * Emulates a browser \"File\" for Colab environments.\n */\n class ColabLocalFile {\n\n constructor({path, name, start, end}) {\n this.type = 'ColabLocalFile'\n this.path = path\n this.name = name || path\n this.start = start\n this.end = end\n }\n\n /**\n * Returns a new Blob object containing the data in the specified range of bytes of the blob on which it's called.\n * @param start An index into the Blob indicating the first byte to include in the new Blob\n * @param end An index into the Blob indicating the first byte that will *not* be included in the new Blob\n * @param contentType\n * @returns {*}\n */\n slice(start, end) {\n return new ColabLocalFile({path: this.path, name: this.name, start, end})\n }\n\n /**\n * Returns a promise that resolves with an ArrayBuffer containing the entire contents of the Blob as\n * binary data.\n */\n async arrayBuffer() {\n\n const args = (this.start === undefined) ?\n [this.path] :\n [this.path, this.start.toString(), this.end.toString()]\n\n const result = await google.colab.kernel.invokeFunction(\n 'ReadFile', // The callback name.\n args, // The arguments.\n {}) // kwargs\n const data = result.data[\"text/plain\"]\n const dataString = atob(data.substring(2, data.length - 1))\n const bytes = new Uint8Array(dataString.length)\n for (var i = 0; i < dataString.length; i++) {\n bytes[i] = dataString.charCodeAt(i)\n }\n return bytes.buffer\n }\n\n /**\n * Returns a promise that resolves with a USVString containing the entire contents of the Blob interpreted as UTF-8 text.\n *\n * @returns {Promise}\n */\n async text() {\n throw Error(\"text not implemented\")\n }\n\n stream() {\n throw Error(\"stream not implemented\")\n }\n }\n\n let counter = 0\n\n function uniqueID() {\n return `${Math.random()}-${counter++}`\n }\n\n})()", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import igv_notebook\n", + "\n", + "igv_notebook.init()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "0e373749", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "window.igv.MessageHandler.on({\"id\": \"jb_4813434\", \"command\": \"createBrowser\", \"data\": {\"genome\": \"hg38\", \"locus\": \"chr19:6740960-6790112\", \"tracks\": [{\"name\": \"K562 RNA-seq\", \"format\": \"bigwig\", \"url\": \"bigwig_outputs/K562_RNA_seq.bw\", \"height\": 70, \"autoscale\": true, \"displayMode\": \"EXPANDED\"}, {\"name\": \"K562 DNAse\", \"format\": \"bigwig\", \"url\": \"bigwig_outputs/K562_DNAse.bw\", \"height\": 70, \"autoscale\": true, \"displayMode\": \"EXPANDED\"}, {\"name\": \"K562 H3k4me3\", \"format\": \"bigwig\", \"url\": \"bigwig_outputs/K562_H3k4me3.bw\", \"height\": 70, \"autoscale\": true, \"displayMode\": \"EXPANDED\"}, {\"name\": \"K562 CTCF\", \"format\": \"bigwig\", \"url\": \"bigwig_outputs/K562_CTCF.bw\", \"height\": 70, \"autoscale\": true, \"displayMode\": \"EXPANDED\"}, {\"name\": \"HepG2 RNA-seq\", \"format\": \"bigwig\", \"url\": \"bigwig_outputs/HepG2_RNA_seq.bw\", \"height\": 70, \"autoscale\": true, \"displayMode\": \"EXPANDED\"}, {\"name\": \"HepG2 DNAse\", \"format\": \"bigwig\", \"url\": \"bigwig_outputs/HepG2_DNAse.bw\", \"height\": 70, \"autoscale\": true, \"displayMode\": \"EXPANDED\"}, {\"name\": \"HepG2 H3k4me3\", \"format\": \"bigwig\", \"url\": \"bigwig_outputs/HepG2_H3k4me3.bw\", \"height\": 70, \"autoscale\": true, \"displayMode\": \"EXPANDED\"}, {\"name\": \"HepG2 CTCF\", \"format\": \"bigwig\", \"url\": \"bigwig_outputs/HepG2_CTCF.bw\", \"height\": 70, \"autoscale\": true, \"displayMode\": \"EXPANDED\"}], \"id\": \"jb_4813434\"}})", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Build tracks array with all BigWig files we saved\n", + "tracks = []\n", + "for track_display_name, track_id in tracks_to_plot.items():\n", + " # Clean the display name to match the filename we saved\n", + " track_clean_name = track_display_name.replace(\" \", \"_\").replace(\"/\", \"_\").replace(\"-\", \"_\")\n", + " bigwig_path = os.path.join(output_dir, f\"{track_clean_name}.bw\")\n", + " bigwig_track = {\n", + " \"name\": track_display_name,\n", + " \"format\": \"bigwig\",\n", + " \"url\": bigwig_path,\n", + " \"height\": 70,\n", + " \"autoscale\": True,\n", + " \"displayMode\": \"EXPANDED\",\n", + " }\n", + " tracks.append(bigwig_track)\n", + "\n", + "config = {\n", + " \"genome\": assembly,\n", + " \"locus\": f\"{chrom}:{center_start}-{center_end}\",\n", + " \"tracks\": tracks,\n", + "}\n", + "\n", + "browser = igv_notebook.Browser(config)\n", + "browser # <- just return the object, no .show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0e2ddbbc", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hf-finetune", + "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.10.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}