{ "cells": [ { "cell_type": "markdown", "id": "436c3735-6643-4c2e-8e7a-2c91eceb5321", "metadata": {}, "source": [ "# CVSS Data\n", "---" ] }, { "cell_type": "code", "execution_count": 1, "id": "a8face4a-ddee-4bd5-a84e-97f2bd508491", "metadata": { "execution": { "iopub.execute_input": "2024-05-06T04:14:02.730057Z", "iopub.status.busy": "2024-05-06T04:14:02.729585Z", "iopub.status.idle": "2024-05-06T04:14:03.092950Z", "shell.execute_reply": "2024-05-06T04:14:03.092407Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "from IPython.core.magic import register_cell_magic\n", "from IPython.display import Markdown\n", "import datetime\n", "from datetime import date\n", "import glob\n", "import logging\n", "import json\n", "import pandas as pd\n", "import plotly\n", "import plotly.graph_objects as go\n", "import plotly.express as px\n", "import numpy as np\n", "import warnings\n", "\n", "\n", "\n", "@register_cell_magic\n", "def markdown(line, cell):\n", " return Markdown(cell.format(**globals()))\n", "\n", "\n", "logging.getLogger('matplotlib.font_manager').disabled = True\n", "warnings.filterwarnings(\"ignore\")\n", "pd.set_option('display.width', 500)\n", "pd.set_option('display.max_rows', 50)\n", "pd.set_option('display.max_columns', 10)\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "fb89c5a2-83da-459d-be6c-456a949cf3dd", "metadata": { "execution": { "iopub.execute_input": "2024-05-06T04:14:03.095684Z", "iopub.status.busy": "2024-05-06T04:14:03.095346Z", "iopub.status.idle": "2024-05-06T04:14:22.215414Z", "shell.execute_reply": "2024-05-06T04:14:22.214748Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "row_accumulator = []\n", "for filename in glob.glob('nvd.jsonl'):\n", " with open(filename, 'r', encoding='utf-8') as f:\n", " nvd_data = json.load(f)\n", " for entry in nvd_data:\n", " cve = entry['cve']['id']\n", " try:\n", " assigner = entry['cve']['sourceIdentifier']\n", " except KeyError:\n", " assigner = 'Missing_Data'\n", " try:\n", " published_date = entry['cve']['published']\n", " except KeyError:\n", " published_date = 'Missing_Data'\n", " try:\n", " attack_vector = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['attackVector']\n", " except KeyError:\n", " attack_vector = 'Missing_Data'\n", " try:\n", " attack_complexity = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['attackComplexity']\n", " except KeyError:\n", " attack_complexity = 'Missing_Data'\n", " try:\n", " privileges_required = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['privilegesRequired']\n", " except KeyError:\n", " privileges_required = 'Missing_Data'\n", " try:\n", " user_interaction = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['userInteraction']\n", " except KeyError:\n", " user_interaction = 'Missing_Data'\n", " try:\n", " scope = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['scope']\n", " except KeyError:\n", " scope = 'Missing_Data'\n", " try:\n", " confidentiality_impact = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['confidentialityImpact']\n", " except KeyError:\n", " confidentiality_impact = 'Missing_Data'\n", " try:\n", " integrity_impact = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['integrityImpact']\n", " except KeyError:\n", " integrity_impact = 'Missing_Data'\n", " try:\n", " availability_impact = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['availabilityImpact']\n", " except KeyError:\n", " availability_impact = 'Missing_Data'\n", " try:\n", " base_score = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore']\n", " except KeyError:\n", " base_score = '0.0'\n", " try:\n", " base_severity = entry['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseSeverity']\n", " except KeyError:\n", " base_severity = 'Missing_Data'\n", " try:\n", " exploitability_score = entry['cve']['metrics']['cvssMetricV31'][0]['exploitabilityScore']\n", " except KeyError:\n", " exploitability_score = 'Missing_Data'\n", " try:\n", " impact_score = entry['cve']['metrics']['cvssMetricV31'][0]['impactScore']\n", " except KeyError:\n", " impact_score = 'Missing_Data'\n", " try:\n", " cwe = entry['cve']['weaknesses'][0]['description'][0]['value']\n", " except KeyError:\n", " cwe = 'Missing_Data'\n", " try:\n", " description = entry['cve']['descriptions'][0]['value']\n", " except IndexError:\n", " description = ''\n", " new_row = {\n", " 'CVE': cve,\n", " 'Published': published_date,\n", " 'AttackVector': attack_vector,\n", " 'AttackComplexity': attack_complexity,\n", " 'PrivilegesRequired': privileges_required,\n", " 'UserInteraction': user_interaction,\n", " 'Scope': scope,\n", " 'ConfidentialityImpact': confidentiality_impact,\n", " 'IntegrityImpact': integrity_impact,\n", " 'AvailabilityImpact': availability_impact,\n", " 'BaseScore': base_score,\n", " 'BaseSeverity': base_severity,\n", " 'ExploitabilityScore': exploitability_score,\n", " 'ImpactScore': impact_score,\n", " 'CWE': cwe,\n", " 'Description': description,\n", " 'Assigner' : assigner\n", " }\n", " if not description.startswith('rejected reason'): \n", " row_accumulator.append(new_row)\n", " nvd = pd.DataFrame(row_accumulator)\n", " \n", "nvd['Published'] = pd.to_datetime(nvd['Published'])\n", "nvd = nvd.sort_values(by=['Published'])\n", "nvd = nvd.reset_index(drop=True)\n", "nvd['BaseScore'] = pd.to_numeric(nvd['BaseScore']);\n", "nvd['BaseScore'] = pd.to_numeric(nvd['BaseScore']);\n", "nvd['BaseScore'] = nvd['BaseScore'].replace(0, np.NaN);\n", "nvdcount = nvd['Published'].count()\n", "nvdunique = nvd['Published'].nunique()\n", "startdate = date(2000, 1, 1)\n", "enddate = date.today()\n", "numberofdays = enddate - startdate \n", "per_day = nvdcount/numberofdays.days" ] }, { "cell_type": "markdown", "id": "76ba3fec-e991-4f78-9e2d-15b80300aed8", "metadata": {}, "source": [ "## CVSS Graph" ] }, { "cell_type": "code", "execution_count": 3, "id": "6eb47510-9e6a-42c4-bb57-34763a056c67", "metadata": { "execution": { "iopub.execute_input": "2024-05-06T04:14:22.218080Z", "iopub.status.busy": "2024-05-06T04:14:22.217723Z", "iopub.status.idle": "2024-05-06T04:14:22.632391Z", "shell.execute_reply": "2024-05-06T04:14:22.631870Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABTUAAAKqCAYAAADrHrqNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABMnElEQVR4nO3df9zW8/3///tZOSut80T066OSH0N+RaiQz0zvThPza3tjTGi8eZe3yvzaCLMty4fhE1rvmew7bdiwLZO1ECa/olGbZmQxndXWj7Malc7j+8feHR+nQiXOXlyvl8txWcfr9TyO43EcLh22217H61VRKpVKAQAAAAAoiCaNPQAAAAAAwPoQNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAGA9vPrqq6moqMj/+T//Z4MeP3bs2FRUVOTVV1/duIMBAHyKiJoAAJ9gL7/8cv7jP/4j22+/fVq0aJGqqqoceOCBuf766/Pmm2/m2WefTUVFRS655JL3fI6XXnopFRUVGTZsWHnbY489li984Qv5X//rf6VFixbp3LlzjjzyyIwbN67BY5cuXZrLLrssu+++e1q1apU2bdqke/fuOffcc/PGG2+87+wPP/xwKioqGty22mqr9OrVK7fffvuH+2AAACi0Zo09AAAAH4377rsvX/7yl9O8efOccsop2X333bNixYo89thjOf/88zNjxoyMGTMmu+yyS37605/m29/+9lqfZ3WoPPnkk5Mkd911V44//vhynNxyyy0za9asPPLII/nv//7vfOUrX0mSrFy5MgcffHBefPHFDBgwIOecc06WLl2aGTNmZNy4cTnmmGPSsWPHD3wf//Vf/5X99tsvSfKPf/wjd9xxR04++eQsWrQogwYN2hgfFQAABSNqAgB8As2aNSsnnHBCunTpkgcffDAdOnQo7xs0aFD+8pe/5L777kuSnHTSSbn00kvzxBNPpFevXms8109/+tPssssu2WeffZIkl19+ebp165YnnngilZWVDdbOmzev/Od77703zz33XG6//fZy6FztrbfeyooVK9bpvfTp0ydf+tKXyvfPPvvsbL/99hk3btz7Rs36+vqsWLEiLVq0WKfXAQCgOPz8HADgE2jkyJFZunRpbrnllgZBc7Udd9wx5557bpJ/Rc0ka/x0PEmmTp2amTNnltck//pJ+3777bdG0EyStm3bNliXJAceeOAa61b/FH5DVFZWZsstt0yzZg3///mKiooMHjw4t99+e3bbbbc0b948EyZMSJL87W9/y+mnn5527dqlefPm2W233fKjH/2oweNXrFiR4cOHp0ePHqmurk6rVq3Sp0+fPPTQQx84U6lUyplnnpnKysrcfffd5e0zZszI5z//+bRs2TLbbrttvv3tb6e+vn6tz3HTTTeV5+7YsWMGDRqURYsWlfffcMMNadq0aYNt11xzzRqnBli1alVat26dCy+8MEnDc4COGTMmO+ywQ5o3b5799tsvTz/99Ae+NwCATZEjNQEAPoF+/etfZ/vtt88BBxzwgWu7du2aAw44IHfeeWe+//3vp2nTpuV9q0PnO4+07NKlSyZNmpTXX38922677Xs+b5cuXZIkP/7xj3PJJZekoqJig97LkiVL8ve//z1JsmDBgowbNy7Tp0/PLbfcssbaBx98MHfeeWcGDx6crbfeOtttt13mzp2bXr16laPnNttsk/vvvz8DBw5MXV1dhgwZkiSpq6vLD3/4w5x44ok544wzsmTJktxyyy2pqanJU089le7du691vlWrVuX000/PHXfckXvuuSf9+/dPktTW1uaQQw7J22+/nYsuuiitWrXKmDFj0rJlyzWe4/LLL88VV1yRvn375uyzz87MmTNz88035+mnn87vf//7bLbZZunTp0/q6+vz2GOP5YgjjkiSPProo2nSpEkeffTR8nM999xzWbp0aQ4++OAGrzFu3LgsWbIk//Ef/5GKioqMHDkyxx57bF555ZVsttlm6/3PBQCgUZUAAPhEWbx4cSlJ6aijjlrnx9x4442lJKUHHnigvG3VqlWl//W//lepd+/eDdbecsstpSSlysrK0iGHHFK69NJLS48++mhp1apVDdb985//LO28886lJKUuXbqUTj311NItt9xSmjt37jrN9NBDD5WSrHFr0qRJ6Tvf+c4a61fvmzFjRoPtAwcOLHXo0KH097//vcH2E044oVRdXV365z//WSqVSqW33367tHz58gZrFi5cWGrXrl3p9NNPL2+bNWtWKUnp6quvLq1cubJ0/PHHl1q2bNngsyuVSqUhQ4aUkpSefPLJ8rZ58+aVqqurS0lKs2bNKm+rrKws9evXr8FnOGrUqFKS0o9+9KNSqfSvfx5VVVWlCy64oFQqlUr19fWlNm3alL785S+XmjZtWlqyZEmpVCqVrr322lKTJk1KCxcubDBvmzZtSgsWLCg//y9/+ctSktKvf/3r9/gnAACw6fLzcwCAT5i6urokSevWrdf5Mccff3w222yzBj9Bnzx5cv72t781+Ol5kpx++umZMGFCPve5z+Wxxx7LlVdemT59+mSnnXbK448/Xl7XsmXLPPnkkzn//POTJGPHjs3AgQPToUOHnHPOOVm+fPk6zTZ8+PBMnDgxEydOzB133JETTzwx3/zmN3P99devsfZ//+//nW7dupXvl0ql/OIXv8iRRx6ZUqmUv//97+VbTU1NFi9enGeffTZJ0rRp0/JP6uvr67NgwYK8/fbb2Xfffctr3mnFihX58pe/nPHjx+c3v/lN+vXr12D/b37zm/Tq1Sv7779/eds222yzxuf5u9/9LitWrMiQIUPSpMn/+6/nZ5xxRqqqqsrnPm3SpEkOOOCAPPLII0mSP/3pT/nHP/6Riy66KKVSKVOmTEnyr6M3d99992yxxRYNXuf444/PlltuWb7fp0+fJMkrr7yyto8dAGCTJmoCAHzCrD5X5ZIlS9b5MW3atElNTU3uueeevPXWW0n+9XPlZs2a5d///d/XWF9TU5MHHnggixYtyiOPPJJBgwblr3/9a4444ogGFwuqrq7OyJEj8+qrr+bVV1/NLbfckp133jmjRo3KlVdeuU6z7bHHHunbt2/69u2bf//3f89PfvKTHHHEEbnooosyf/78Bmu7du3a4P78+fOzaNGijBkzJttss02D22mnnZak4cWNbrvttuy5555p0aJF2rRpk2222Sb33XdfFi9evMZcI0aMyL333puf//zn+dznPrfG/r/+9a/Zaaed1ti+8847r7FubdsrKyuz/fbbl/cn/wqRU6dOzZtvvplHH300HTp0yD777JO99tqr/BP0xx57rBws36lz584N7q8OnAsXLlxjLQDApk7UBAD4hKmqqkrHjh0zffr09XrcySefnLq6uowfPz4rVqzIL37xi/Tr1y/bbLPNez5m8803T58+fTJq1KhccsklWbhwYe6///61ru3SpUtOP/30/P73v88WW2yR22+/fb3me6dDDz00b731Vp566qkG2999vsrVF+U5+eSTy0d7vvu2+kJGP/nJT3Lqqadmhx12yC233JIJEyZk4sSJ+fznP7/Wi/vU1NSkVatWGTlyZDkEf9QOOuigrFy5MlOmTMmjjz5ajpd9+vTJo48+mhdffDHz589fa9R857lS36lUKn2kMwMAfBRcKAgA4BPoiCOOyJgxYzJlypT07t17nR7zxS9+Ma1bt864ceOy2WabZeHChWv8VPr97LvvvkmSOXPmvO+6LbfcMjvssMN6R9d3evvtt5MkS5cufd9122yzTVq3bp1Vq1alb9++77v25z//ebbffvvcfffdDS5qdNlll611fa9evXLWWWfliCOOyJe//OXcc889Da7I3qVLl7z00ktrPG7mzJkN7q++oNLMmTOz/fbbl7evWLEis2bNajD3/vvvn8rKyjz66KN59NFHyz/tP/jgg/Pf//3fmTRpUvk+AMAnmSM1AQA+gS644IK0atUqX/va1zJ37tw19r/88strnJOyZcuWOeaYY/Kb3/wmN998c1q1apWjjjpqjceuDmfv9pvf/CbJ//sZ9R/+8IfyVcvf6a9//Wv++Mc/rvFz6/Uxfvz4JMlee+31vuuaNm2a4447Lr/4xS/WGlHf+fP11UcyvvPIxSeffLJ8rsq16du3b372s59lwoQJ+epXv9rgiM7DDz88TzzxRIOjSefPn7/GEap9+/ZNZWVlbrjhhgavfcstt2Tx4sXlq6knSYsWLbLffvvlpz/9aWbPnt3gSM0333wzN9xwQ3bYYYd06NDhfT8XAICic6QmAMAn0A477JBx48bl+OOPz6677ppTTjklu+++e1asWJHHH388d911V0499dQ1HnfyySfnxz/+cR544IGcdNJJadWq1RprjjrqqHTt2jVHHnlkdthhhyxbtiy/+93v8utf/zr77bdfjjzyyCTJxIkTc9lll+WLX/xievXqlc985jN55ZVX8qMf/SjLly/P5Zdfvk7v5dFHHy3/vHvBggX51a9+lcmTJ+eEE07ILrvs8oGPv+qqq/LQQw+lZ8+eOeOMM9KtW7csWLAgzz77bH73u99lwYIFSf51dOvdd9+dY445Jv3798+sWbMyevTodOvW7X2PCD366KNz66235pRTTklVVVV+8IMfJPlXWP7//r//L4cddljOPffctGrVKmPGjEmXLl3y/PPPlx+/zTbb5OKLL84VV1yRww47LF/84hczc+bM3HTTTdlvv/1y8sknN3i9Pn365Kqrrkp1dXX22GOPJEnbtm2z8847Z+bMmWv95woA8EkjagIAfEJ98YtfzPPPP5+rr746v/zlL3PzzTenefPm2XPPPXPNNdfkjDPOWOMxn//859OhQ4fMmTPnPX96/sMf/jC//OUvc+edd+aNN95IqVTK9ttvn29+85u58MILyz/BPu6447JkyZL89re/zYMPPpgFCxZkyy23zP7775/zzjsvhxxyyDq9jxtuuKH859UXz/nOd75T/un1B2nXrl2eeuqpfOtb38rdd9+dm266KW3atMluu+2W733ve+V1p556ampra/ODH/wgDzzwQLp165af/OQnueuuu/Lwww+/72ucfPLJWbJkSf7zP/8zVVVVufrqq9OhQ4c89NBDOeecc3LVVVelTZs2Oeuss9KxY8cMHDiwweMvv/zybLPNNhk1alSGDh2arbbaKmeeeWa++93vZrPNNmuwdnXUPOCAAxpcLb1Pnz6ZOXPmWs+nCQDwSVNRcmZwAAAAAKBAnFMTAAAAACgUURMAAAAAKBRREwAAAAAolEaNmjfffHP23HPPVFVVpaqqKr179879999f3v/WW29l0KBBadOmTT7zmc/kuOOOy9y5cxs8x+zZs9O/f/9svvnmadu2bc4///y8/fbbDdY8/PDD2WeffdK8efPsuOOOGTt27Bqz3Hjjjdluu+3SokWL9OzZM0899dRH8p4BAAAAgA+nUaPmtttum6uuuipTp07NM888k89//vM56qijMmPGjCTJ0KFD8+tf/zp33XVXJk+enDfeeCPHHnts+fGrVq1K//79s2LFijz++OO57bbbMnbs2AwfPry8ZtasWenfv38OOeSQTJs2LUOGDMnXvva1PPDAA+U1d9xxR4YNG5bLLrsszz77bPbaa6/U1NRk3rx5H9+HAQAAAACsk03u6udbbbVVrr766nzpS1/KNttsk3HjxuVLX/pSkuTFF1/MrrvumilTpqRXr165//77c8QRR+SNN95Iu3btkiSjR4/OhRdemPnz56eysjIXXnhh7rvvvkyfPr38GieccEIWLVqUCRMmJEl69uyZ/fbbL6NGjUqS1NfXp1OnTjnnnHNy0UUXfcyfAAAAAADwfpo19gCrrVq1KnfddVeWLVuW3r17Z+rUqVm5cmX69u1bXrPLLrukc+fO5ag5ZcqU7LHHHuWg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//79c8ghh2TatGkZMmRIvva1r+WBBx4or7njjjsybNiwXHbZZXn22Wez1157paamJvPmzfvoPwgAAAAAYJ1VlEqlUmMPsdr8+fPTtm3bTJ48OQcffHCSfx2p2b1791x33XVrfcz999+fI444Im+88UbatWuXJBk9enQuvPDCzJ8/P5WVlbnwwgtz3333Zfr06eXHnXDCCVm0aFEmTJiQJOnZs2f222+/jBo1KklSX1+fTp065ZxzzslFF130gbPX1dWluro6ixcvTlVV1Yf5GAAAAD6xKjpf2dgj8CGUZl/a2CMAn2Dr09c2qXNqLl68OEmy1VZbNdh+++23Z+utt87uu++eiy++OP/85z/L+6ZMmZI99tijHDSTpKamJnV1dZkxY0Z5Td++fRs8Z01NTaZMmZIkWbFiRaZOndpgTZMmTdK3b9/ymndbvnx56urqGtwAAAAAgI9es8YeYLX6+voMGTIkBx54YHbffffy9q985Svp0qVLOnbsmOeffz4XXnhhZs6cmbvvvjtJUltb2yBoJinfr62tfd81dXV1efPNN7Nw4cKsWrVqrWtefPHFtc47YsSIXHHFFR/uTQMAAAAA622TiZqDBg3K9OnT89hjjzXYfuaZZ5b/vMcee6RDhw459NBD8/LLL2eHHXb4uMcsu/jiizNs2LDy/bq6unTq1KnR5gEAAACAT4tNImoOHjw448ePzyOPPJJtt932fdf27NkzSfKXv/wlO+ywQ9q3b7/GVcrnzp2bJGnfvn35P1dve+eaqqqqtGzZMk2bNk3Tpk3Xumb1c7xb8+bN07x583V/kwAAAADARtGo59QslUoZPHhw7rnnnjz44IPp2rXrBz5m2rRpSZIOHTokSXr37p0XXnihwVXKJ06cmKqqqnTr1q28ZtKkSQ2eZ+LEiendu3eSpLKyMj169Giwpr6+PpMmTSqvAQAAAAA2DY16pOagQYMybty4/PKXv0zr1q3L58Csrq5Oy5Yt8/LLL2fcuHE5/PDD06ZNmzz//PMZOnRoDj744Oy5555Jkn79+qVbt2756le/mpEjR6a2tjaXXHJJBg0aVD6S8qyzzsqoUaNywQUX5PTTT8+DDz6YO++8M/fdd195lmHDhmXAgAHZd999s//+++e6667LsmXLctppp338HwwAAAAA8J4qSqVSqdFevKJirdtvvfXWnHrqqXnttddy8sknZ/r06Vm2bFk6deqUY445JpdcckmDy7r/9a9/zdlnn52HH344rVq1yoABA3LVVVelWbP/12wffvjhDB06NH/84x+z7bbb5tJLL82pp57a4HVHjRqVq6++OrW1tenevXtuuOGG8s/dP8j6XHIeAADg06qi85WNPQIfQmn2pY09AvAJtj59rVGj5ieJqAkAAPDBRM1iEzWBj9L69LVGPacmAAAAAMD6EjUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCadSoOWLEiOy3335p3bp12rZtm6OPPjozZ85ssOatt97KoEGD0qZNm3zmM5/Jcccdl7lz5zZYM3v27PTv3z+bb7552rZtm/PPPz9vv/12gzUPP/xw9tlnnzRv3jw77rhjxo4du8Y8N954Y7bbbru0aNEiPXv2zFNPPbXR3zMAAAAA8OE0atScPHlyBg0alCeeeCITJ07MypUr069fvyxbtqy8ZujQofn1r3+du+66K5MnT84bb7yRY489trx/1apV6d+/f1asWJHHH388t912W8aOHZvhw4eX18yaNSv9+/fPIYcckmnTpmXIkCH52te+lgceeKC85o477siwYcNy2WWX5dlnn81ee+2VmpqazJs37+P5MAAAAACAdVJRKpVKjT3EavPnz0/btm0zefLkHHzwwVm8eHG22WabjBs3Ll/60peSJC+++GJ23XXXTJkyJb169cr999+fI444Im+88UbatWuXJBk9enQuvPDCzJ8/P5WVlbnwwgtz3333Zfr06eXXOuGEE7Jo0aJMmDAhSdKzZ8/st99+GTVqVJKkvr4+nTp1yjnnnJOLLrroA2evq6tLdXV1Fi9enKqqqo390QAAAHwiVHS+srFH4EMozb60sUcAPsHWp69tUufUXLx4cZJkq622SpJMnTo1K1euTN++fctrdtlll3Tu3DlTpkxJkkyZMiV77LFHOWgmSU1NTerq6jJjxozymnc+x+o1q59jxYoVmTp1aoM1TZo0Sd++fctrAAAAAIBNQ7PGHmC1+vr6DBkyJAceeGB23333JEltbW0qKyuzxRZbNFjbrl271NbWlte8M2iu3r963/utqaury5tvvpmFCxdm1apVa13z4osvrnXe5cuXZ/ny5eX7dXV16/mOAQAAAIANsckcqTlo0KBMnz49P/vZzxp7lHUyYsSIVFdXl2+dOnVq7JEAAAAA4FNhk4iagwcPzvjx4/PQQw9l2223LW9v3759VqxYkUWLFjVYP3fu3LRv37685t1XQ199/4PWVFVVpWXLltl6663TtGnTta5Z/RzvdvHFF2fx4sXl22uvvbb+bxwAAAAAWG+NGjVLpVIGDx6ce+65Jw8++GC6du3aYH+PHj2y2WabZdKkSeVtM2fOzOzZs9O7d+8kSe/evfPCCy80uEr5xIkTU1VVlW7dupXXvPM5Vq9Z/RyVlZXp0aNHgzX19fWZNGlSec27NW/ePFVVVQ1uAAAAAMBHr1HPqTlo0KCMGzcuv/zlL9O6devyOTCrq6vTsmXLVFdXZ+DAgRk2bFi22mqrVFVV5Zxzzknv3r3Tq1evJEm/fv3SrVu3fPWrX83IkSNTW1ubSy65JIMGDUrz5s2TJGeddVZGjRqVCy64IKeffnoefPDB3HnnnbnvvvvKswwbNiwDBgzIvvvum/333z/XXXddli1bltNOO+3j/2AAAAAAgPfUqFHz5ptvTpJ87nOfa7D91ltvzamnnpok+f73v58mTZrkuOOOy/Lly1NTU5ObbrqpvLZp06YZP358zj777PTu3TutWrXKgAED8q1vfau8pmvXrrnvvvsydOjQXH/99dl2223zwx/+MDU1NeU1xx9/fObPn5/hw4entrY23bt3z4QJE9a4eBAAAAAA0LgqSqVSqbGH+CSoq6tLdXV1Fi9e7KfoAAAA76Gi85WNPQIfQmn2pY09AvAJtj59bZO4UBAAAAAAwLoSNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEJp1tgDAAAURUXnKxt7BD6k0uxLG3sEAAA2AkdqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACF4kJBAAB8arjYU/G52BMAkDhSEwAAAAAoGFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACiUDYqar7zyysaeAwAAAABgnWxQ1Nxxxx1zyCGH5Cc/+UneeuutjT0TAAAAAMB72qCo+eyzz2bPPffMsGHD0r59+/zHf/xHnnrqqY09GwAAAADAGjYoanbv3j3XX3993njjjfzoRz/KnDlzctBBB2X33XfPtddem/nz52/sOQEAAAAAknzICwU1a9Ysxx57bO66665873vfy1/+8pd8/etfT6dOnXLKKadkzpw5G2tOAAAAAIAkHzJqPvPMM/nP//zPdOjQIddee22+/vWv5+WXX87EiRPzxhtv5KijjtpYcwIAAAAAJEmabciDrr322tx6662ZOXNmDj/88Pz4xz/O4YcfniZN/tVIu3btmrFjx2a77bbbmLMCAAAAAGxY1Lz55ptz+umn59RTT02HDh3WuqZt27a55ZZbPtRwAAAAAADvtkFR86WXXvrANZWVlRkwYMCGPD0AAAAAwHvaoHNq3nrrrbnrrrvW2H7XXXfltttu+9BDAQAAAAC8lw2KmiNGjMjWW2+9xva2bdvmu9/97oceCgAAAADgvWxQ1Jw9e3a6du26xvYuXbpk9uzZH3ooAAAAAID3skFRs23btnn++efX2P6HP/whbdq0+dBDAQAAAAC8lw2KmieeeGL+67/+Kw899FBWrVqVVatW5cEHH8y5556bE044YWPPCAAAAABQtkFXP7/yyivz6quv5tBDD02zZv96ivr6+pxyyinOqQkAAAAAfKQ2KGpWVlbmjjvuyJVXXpk//OEPadmyZfbYY4906dJlY88HAAAAwEZS0fnKxh6BD6k0+9LGHmGTsEFRc7XPfvaz+exnP7uxZgEAAAAA+EAbFDVXrVqVsWPHZtKkSZk3b17q6+sb7H/wwQc3ynAAAAAAAO+2QVHz3HPPzdixY9O/f//svvvuqaio2NhzAQAAAACs1QZFzZ/97Ge58847c/jhh2/seQAAAAAA3leTDXlQZWVldtxxx409CwAAAADAB9qgqHneeefl+uuvT6lU2tjzAAAAAAC8rw36+fljjz2Whx56KPfff3922223bLbZZg3233333RtlOAAAAACAd9ugqLnFFlvkmGOO2dizAAAAAAB8oA2KmrfeeuvGngMAAAAAYJ1s0Dk1k+Ttt9/O7373u/zgBz/IkiVLkiRvvPFGli5dutGGAwAAAAB4tw06UvOvf/1rDjvssMyePTvLly/Pv/3bv6V169b53ve+l+XLl2f06NEbe04AAAAAgCQbeKTmueeem3333TcLFy5My5Yty9uPOeaYTJo0aaMNBwAAAADwbht0pOajjz6axx9/PJWVlQ22b7fddvnb3/62UQYDAAAAAFibDTpSs76+PqtWrVpj++uvv57WrVuv8/M88sgjOfLII9OxY8dUVFTk3nvvbbD/1FNPTUVFRYPbYYcd1mDNggULctJJJ6WqqipbbLFFBg4cuMZ5PZ9//vn06dMnLVq0SKdOnTJy5Mg1Zrnrrruyyy67pEWLFtljjz3ym9/8Zp3fBwAAAADw8dmgqNmvX79cd9115fsVFRVZunRpLrvsshx++OHr/DzLli3LXnvtlRtvvPE91xx22GGZM2dO+fbTn/60wf6TTjopM2bMyMSJEzN+/Pg88sgjOfPMM8v76+rq0q9fv3Tp0iVTp07N1Vdfncsvvzxjxowpr3n88cdz4oknZuDAgXnuuedy9NFH5+ijj8706dPX+b0AAAAAAB+PilKpVFrfB73++uupqalJqVTKSy+9lH333TcvvfRStt566zzyyCNp27bt+g9SUZF77rknRx99dHnbqaeemkWLFq1xBOdqf/rTn9KtW7c8/fTT2XfffZMkEyZMyOGHH57XX389HTt2zM0335xvfvObqa2tLf9c/qKLLsq9996bF198MUly/PHHZ9myZRk/fnz5uXv16pXu3buv80WP6urqUl1dncWLF6eqqmq93z8AsOmr6HxlY48An3ql2Zc29gh8SL5Li83fweLzd7D4Psl/D9enr23QkZrbbrtt/vCHP+Qb3/hGhg4dmr333jtXXXVVnnvuuQ0Kmu/n4YcfTtu2bbPzzjvn7LPPzj/+8Y/yvilTpmSLLbYoB80k6du3b5o0aZInn3yyvObggw9ucP7PmpqazJw5MwsXLiyv6du3b4PXrampyZQpU95zruXLl6eurq7BDQAAAAD46G3QhYKSpFmzZjn55JM35ixrOOyww3Lsscema9euefnll/ONb3wjX/jCFzJlypQ0bdo0tbW1a0TUZs2aZauttkptbW2SpLa2Nl27dm2wpl27duV9W265ZWpra8vb3rlm9XOszYgRI3LFFVdsjLcJAAAAAKyHDYqaP/7xj993/ymnnLJBw7zbCSecUP7zHnvskT333DM77LBDHn744Rx66KEb5TU21MUXX5xhw4aV79fV1aVTp06NOBEAAAAAfDpsUNQ899xzG9xfuXJl/vnPf6aysjKbb775Roua77b99ttn6623zl/+8pcceuihad++febNm9dgzdtvv50FCxakffv2SZL27dtn7ty5Ddasvv9Ba1bvX5vmzZunefPmH/o9AQAAAADrZ4POqblw4cIGt6VLl2bmzJk56KCD1rg6+cb0+uuv5x//+Ec6dOiQJOndu3cWLVqUqVOnltc8+OCDqa+vT8+ePctrHnnkkaxcubK8ZuLEidl5552z5ZZbltdMmjSpwWtNnDgxvXv3/sjeCwAAAACwYTYoaq7NTjvtlKuuumqNozjfz9KlSzNt2rRMmzYtSTJr1qxMmzYts2fPztKlS3P++efniSeeyKuvvppJkyblqKOOyo477piampokya677prDDjssZ5xxRp566qn8/ve/z+DBg3PCCSekY8eOSZKvfOUrqayszMCBAzNjxozccccduf766xv8dPzcc8/NhAkTcs011+TFF1/M5ZdfnmeeeSaDBw/eWB8PAAAAALCRbLSomfzrIj1vvPHGOq9/5plnsvfee2fvvfdOkgwbNix77713hg8fnqZNm+b555/PF7/4xXz2s5/NwIED06NHjzz66KMNfvZ9++23Z5dddsmhhx6aww8/PAcddFDGjBlT3l9dXZ3f/va3mTVrVnr06JHzzjsvw4cPz5lnnllec8ABB2TcuHEZM2ZM9tprr/z85z/Pvffem913330jfCoAAAAAwMZUUSqVSuv7oF/96lcN7pdKpcyZMyejRo1Kp06dcv/992+0AYuirq4u1dXVWbx4caqqqhp7HADgI1DR+crGHgE+9UqzL23sEfiQfJcWm7+DxefvYPF9kv8erk9f26ALBR199NEN7ldUVGSbbbbJ5z//+VxzzTUb8pQAAAAAAOtkg6JmfX39xp4DAAAAAGCdbNRzagIAAAAAfNQ26EjNd145/INce+21G/ISAAAAAABrtUFR87nnnstzzz2XlStXZuedd06S/PnPf07Tpk2zzz77lNdVVFRsnCkBAAAAAP7HBkXNI488Mq1bt85tt92WLbfcMkmycOHCnHbaaenTp0/OO++8jTokAAAAAMBqG3ROzWuuuSYjRowoB80k2XLLLfPtb3/b1c8BAAAAgI/UBkXNurq6zJ8/f43t8+fPz5IlSz70UAAAAAAA72WDouYxxxyT0047LXfffXdef/31vP766/nFL36RgQMH5thjj93YMwIAAAAAlG3QOTVHjx6dr3/96/nKV76SlStX/uuJmjXLwIEDc/XVV2/UAQEAAAAA3mmDoubmm2+em266KVdffXVefvnlJMkOO+yQVq1abdThAAAAAADebYN+fr7anDlzMmfOnOy0005p1apVSqXSxpoLAAAAAGCtNihq/uMf/8ihhx6az372szn88MMzZ86cJMnAgQNz3nnnbdQBAQAAAADeaYOi5tChQ7PZZptl9uzZ2Xzzzcvbjz/++EyYMGGjDQcAAAAA8G4bdE7N3/72t3nggQey7bbbNti+00475a9//etGGQwAAAAAYG026EjNZcuWNThCc7UFCxakefPmH3ooAAAAAID3skFRs0+fPvnxj39cvl9RUZH6+vqMHDkyhxxyyEYbDgAAAADg3Tbo5+cjR47MoYcemmeeeSYrVqzIBRdckBkzZmTBggX5/e9/v7FnBAAAAAAo26AjNXfffff8+c9/zkEHHZSjjjoqy5Yty7HHHpvnnnsuO+yww8aeEQAAAACgbL2P1Fy5cmUOO+ywjB49Ot/85jc/ipkAAAAAAN7Teh+pudlmm+X555//KGYBAAAAAPhAG3ROzZNPPjm33HJLrrrqqo09DwAAALCJquh8ZWOPAJBkA6Pm22+/nR/96Ef53e9+lx49eqRVq1YN9l977bUbZTgAAAAAgHdbr6j5yiuvZLvttsv06dOzzz77JEn+/Oc/N1hTUVGx8aYDAAAAAHiX9YqaO+20U+bMmZOHHnooSXL88cfnhhtuSLt27T6S4QAAAAAA3m29LhRUKpUa3L///vuzbNmyjToQAAAAAMD7We+rn7/TuyMnAAAAAMBHbb2iZkVFxRrnzHQOTQAAAADg47Re59QslUo59dRT07x58yTJW2+9lbPOOmuNq5/ffffdG29CAAAAAIB3WK+oOWDAgAb3Tz755I06DAAAAADAB1mvqHnrrbd+VHMAAAAAAKyTD3WhIAAAAACAj5uoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFEqjRs1HHnkkRx55ZDp27JiKiorce++9DfaXSqUMHz48HTp0SMuWLdO3b9+89NJLDdYsWLAgJ510UqqqqrLFFltk4MCBWbp0aYM1zz//fPr06ZMWLVqkU6dOGTly5Bqz3HXXXdlll13SokWL7LHHHvnNb36z0d8vAAAAAPDhNWrUXLZsWfbaa6/ceOONa90/cuTI3HDDDRk9enSefPLJtGrVKjU1NXnrrbfKa0466aTMmDEjEydOzPjx4/PII4/kzDPPLO+vq6tLv3790qVLl0ydOjVXX311Lr/88owZM6a85vHHH8+JJ56YgQMH5rnnnsvRRx+do48+OtOnT//o3jwAAAAAsEEqSqVSqbGHSJKKiorcc889Ofroo5P86yjNjh075rzzzsvXv/71JMnixYvTrl27jB07NieccEL+9Kc/pVu3bnn66aez7777JkkmTJiQww8/PK+//no6duyYm2++Od/85jdTW1ubysrKJMlFF12Ue++9Ny+++GKS5Pjjj8+yZcsyfvz48jy9evVK9+7dM3r06HWav66uLtXV1Vm8eHGqqqo21scCAGxCKjpf2dgjwKdeafaljT0CH5LvUoAP55P878L16Wub7Dk1Z82aldra2vTt27e8rbq6Oj179syUKVOSJFOmTMkWW2xRDppJ0rdv3zRp0iRPPvlkec3BBx9cDppJUlNTk5kzZ2bhwoXlNe98ndVrVr/O2ixfvjx1dXUNbgAAAADAR2+TjZq1tbVJknbt2jXY3q5du/K+2tratG3btsH+Zs2aZauttmqwZm3P8c7XeK81q/evzYgRI1JdXV2+derUaX3fIgAAAACwATbZqLmpu/jii7N48eLy7bXXXmvskQAAAADgU2GTjZrt27dPksydO7fB9rlz55b3tW/fPvPmzWuw/+23386CBQsarFnbc7zzNd5rzer9a9O8efNUVVU1uAEAAAAAH71NNmp27do17du3z6RJk8rb6urq8uSTT6Z3795Jkt69e2fRokWZOnVqec2DDz6Y+vr69OzZs7zmkUceycqVK8trJk6cmJ133jlbbrllec07X2f1mtWvAwAAAABsOho1ai5dujTTpk3LtGnTkvzr4kDTpk3L7NmzU1FRkSFDhuTb3/52fvWrX+WFF17IKaecko4dO5avkL7rrrvmsMMOyxlnnJGnnnoqv//97zN48OCccMIJ6dixY5LkK1/5SiorKzNw4MDMmDEjd9xxR66//voMGzasPMe5556bCRMm5JprrsmLL76Yyy+/PM8880wGDx78cX8kAAAAAMAHaNaYL/7MM8/kkEMOKd9fHRoHDBiQsWPH5oILLsiyZcty5plnZtGiRTnooIMyYcKEtGjRovyY22+/PYMHD86hhx6aJk2a5LjjjssNN9xQ3l9dXZ3f/va3GTRoUHr06JGtt946w4cPz5lnnllec8ABB2TcuHG55JJL8o1vfCM77bRT7r333uy+++4fw6cAAAAAAKyPilKpVGrsIT4J6urqUl1dncWLFzu/JgB8QlV0vrKxR4BPvdLsSxt7BD4k36UAH84n+d+F69PXNtlzagIAAAAArI2oCQAAAAAUiqgJAAAAABRKo14oCAA+bZxHDAAA4MNzpCYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAozRp7AAAAgHVV0fnKxh4BANgEOFITAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKJRNOmpefvnlqaioaHDbZZddyvvfeuutDBo0KG3atMlnPvOZHHfccZk7d26D55g9e3b69++fzTffPG3bts3555+ft99+u8Gahx9+OPvss0+aN2+eHXfcMWPHjv043h4AAAAAsAE26aiZJLvttlvmzJlTvj322GPlfUOHDs2vf/3r3HXXXZk8eXLeeOONHHvsseX9q1atSv/+/bNixYo8/vjjue222zJ27NgMHz68vGbWrFnp379/DjnkkEybNi1DhgzJ1772tTzwwAMf6/sEAAAAANZNs8Ye4IM0a9Ys7du3X2P74sWLc8stt2TcuHH5/Oc/nyS59dZbs+uuu+aJJ55Ir1698tvf/jZ//OMf87vf/S7t2rVL9+7dc+WVV+bCCy/M5ZdfnsrKyowePTpdu3bNNddckyTZdddd89hjj+X73/9+ampqPtb3CgAAAAB8sE3+SM2XXnopHTt2zPbbb5+TTjops2fPTpJMnTo1K1euTN++fctrd9lll3Tu3DlTpkxJkkyZMiV77LFH2rVrV15TU1OTurq6zJgxo7zmnc+xes3q5wAAAAAANi2b9JGaPXv2zNixY7Pzzjtnzpw5ueKKK9KnT59Mnz49tbW1qayszBZbbNHgMe3atUttbW2SpLa2tkHQXL1/9b73W1NXV5c333wzLVu2XOtsy5cvz/Lly8v36+rqPtR7BQAAAADWzSYdNb/whS+U/7znnnumZ8+e6dKlS+688873jI0flxEjRuSKK65o1BkAAAAA4NNok//5+TttscUW+exnP5u//OUvad++fVasWJFFixY1WDN37tzyOTjbt2+/xtXQV9//oDVVVVXvG04vvvjiLF68uHx77bXXPuzbAwAAAADWQaGi5tKlS/Pyyy+nQ4cO6dGjRzbbbLNMmjSpvH/mzJmZPXt2evfunSTp3bt3XnjhhcybN6+8ZuLEiamqqkq3bt3Ka975HKvXrH6O99K8efNUVVU1uAEAAAAAH71NOmp+/etfz+TJk/Pqq6/m8ccfzzHHHJOmTZvmxBNPTHV1dQYOHJhhw4bloYceytSpU3Paaaeld+/e6dWrV5KkX79+6datW7761a/mD3/4Qx544IFccsklGTRoUJo3b54kOeuss/LKK6/kggsuyIsvvpibbropd955Z4YOHdqYbx0AAAAAeA+b9Dk1X3/99Zx44on5xz/+kW222SYHHXRQnnjiiWyzzTZJku9///tp0qRJjjvuuCxfvjw1NTW56aabyo9v2rRpxo8fn7PPPju9e/dOq1atMmDAgHzrW98qr+natWvuu+++DB06NNdff3223Xbb/PCHP0xNTc3H/n4BAAAAgA9WUSqVSo09xCdBXV1dqqurs3jxYj9FB+A9VXS+srFHAAAACqw0+9LGHuEjsz59bZP++TkAAAAAwLuJmgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChNGvsAQBYdxWdr2zsEQAAAKDROVITAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKJRmjT0A8PGp6HxlY48AAAAA8KE5UhMAAAAAKBRREwAAAAAoFFETAAAAACgU59RkvTgnIwAAAACNzZGa73LjjTdmu+22S4sWLdKzZ8889dRTjT0SAAAAAPAOouY73HHHHRk2bFguu+yyPPvss9lrr71SU1OTefPmNfZoAAAAAMD/EDXf4dprr80ZZ5yR0047Ld26dcvo0aOz+eab50c/+lFjjwYAAAAA/A/n1PwfK1asyNSpU3PxxReXtzVp0iR9+/bNlClT1li/fPnyLF++vHx/8eLFSZK6urqPftjGVP9WY08AAAAA8Kn1SW5Pq99bqVT6wLWi5v/4+9//nlWrVqVdu3YNtrdr1y4vvvjiGutHjBiRK664Yo3tnTp1+shmBAAAAODTrbr6u409wkduyZIlqa6uft81ouYGuvjiizNs2LDy/fr6+ixYsCBt2rRJRUVFI07G+qirq0unTp3y2muvpaqqqrHHATZxvjOAdeX7AlhXvi+A9fFJ/84olUpZsmRJOnbs+IFrRc3/sfXWW6dp06aZO3dug+1z585N+/bt11jfvHnzNG/evMG2LbbY4qMckY9QVVXVJ/LLAPho+M4A1pXvC2Bd+b4A1scn+Tvjg47QXM2Fgv5HZWVlevTokUmTJpW31dfXZ9KkSendu3cjTgYAAAAAvJMjNd9h2LBhGTBgQPbdd9/sv//+ue6667Js2bKcdtppjT0aAAAAAPA/RM13OP744zN//vwMHz48tbW16d69eyZMmLDGxYP45GjevHkuu+yyNU4lALA2vjOAdeX7AlhXvi+A9eE74/+pKK3LNdIBAAAAADYRzqkJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqMmn0ogRI7LffvuldevWadu2bY4++ujMnDmzsccCCuCqq65KRUVFhgwZ0tijAJuov/3tbzn55JPTpk2btGzZMnvssUeeeeaZxh4L2MSsWrUql156abp27ZqWLVtmhx12yJVXXhnX8gWS5JFHHsmRRx6Zjh07pqKiIvfee2+D/aVSKcOHD0+HDh3SsmXL9O3bNy+99FLjDNtIRE0+lSZPnpxBgwbliSeeyMSJE7Ny5cr069cvy5Yta+zRgE3Y008/nR/84AfZc889G3sUYBO1cOHCHHjggdlss81y//33549//GOuueaabLnllo09GrCJ+d73vpebb745o0aNyp/+9Kd873vfy8iRI/N//+//bezRgE3AsmXLstdee+XGG29c6/6RI0fmhhtuyOjRo/Pkk0+mVatWqampyVtvvfUxT9p4Kkr+byDI/Pnz07Zt20yePDkHH3xwY48DbIKWLl2affbZJzfddFO+/e1vp3v37rnuuusaeyxgE3PRRRfl97//fR599NHGHgXYxB1xxBFp165dbrnllvK24447Li1btsxPfvKTRpwM2NRUVFTknnvuydFHH53kX0dpduzYMeedd16+/vWvJ0kWL16cdu3aZezYsTnhhBMacdqPjyM1If/6y58kW221VSNPAmyqBg0alP79+6dv376NPQqwCfvVr36VfffdN1/+8pfTtm3b7L333vnv//7vxh4L2AQdcMABmTRpUv785z8nSf7whz/kscceyxe+8IVGngzY1M2aNSu1tbUN/rdJdXV1evbsmSlTpjTiZB+vZo09ADS2+vr6DBkyJAceeGB23333xh4H2AT97Gc/y7PPPpunn366sUcBNnGvvPJKbr755gwbNizf+MY38vTTT+e//uu/UllZmQEDBjT2eMAm5KKLLkpdXV122WWXNG3aNKtWrcp3vvOdnHTSSY09GrCJq62tTZK0a9euwfZ27dqV930aiJp86g0aNCjTp0/PY4891tijAJug1157Leeee24mTpyYFi1aNPY4wCauvr4+++67b7773e8mSfbee+9Mnz49o0ePFjWBBu68887cfvvtGTduXHbbbbdMmzYtQ4YMSceOHX1fAKwDPz/nU23w4MEZP358HnrooWy77baNPQ6wCZo6dWrmzZuXffbZJ82aNUuzZs0yefLk3HDDDWnWrFlWrVrV2CMCm5AOHTqkW7duDbbtuuuumT17diNNBGyqzj///Fx00UU54YQTsscee+SrX/1qhg4dmhEjRjT2aMAmrn379kmSuXPnNtg+d+7c8r5PA1GTT6VSqZTBgwfnnnvuyYMPPpiuXbs29kjAJurQQw/NCy+8kGnTppVv++67b0466aRMmzYtTZs2bewRgU3IgQcemJkzZzbY9uc//zldunRppImATdU///nPNGnS8H+SN23aNPX19Y00EVAUXbt2Tfv27TNp0qTytrq6ujz55JPp3bt3I0728fLzcz6VBg0alHHjxuWXv/xlWrduXT7nRHV1dVq2bNnI0wGbktatW69xvt1WrVqlTZs2zsMLrGHo0KE54IAD8t3vfjf//u//nqeeeipjxozJmDFjGns0YBNz5JFH5jvf+U46d+6c3XbbLc8991yuvfbanH766Y09GrAJWLp0af7yl7+U78+aNSvTpk3LVlttlc6dO2fIkCH59re/nZ122ildu3bNpZdemo4dO5avkP5pUFEqlUqNPQR83CoqKta6/dZbb82pp5768Q4DFM7nPve5dO/ePdddd11jjwJsgsaPH5+LL744L730Urp27Zphw4bljDPOaOyxgE3MkiVLcumll+aee+7JvHnz0rFjx5x44okZPnx4KisrG3s8oJE9/PDDOeSQQ9bYPmDAgIwdOzalUimXXXZZxowZk0WLFuWggw7KTTfdlM9+9rONMG3jEDUBAAAAgEJxTk0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQ/n/AEPci45j5dgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nvd['BaseScore'] = pd.to_numeric(nvd['BaseScore']);\n", "nvd['BaseScore'] = nvd['BaseScore'].replace(0, np.NaN);\n", "nvd['BaseScore'].plot(kind=\"hist\", title='CVSS Breakdown', color=\"#001d82\", figsize=(16, 8)); " ] }, { "cell_type": "markdown", "id": "31e34b59-d5ae-4bd5-b497-9e448cc1c7e1", "metadata": {}, "source": [ "## CVSS Count" ] }, { "cell_type": "code", "execution_count": 4, "id": "c6d18498-a8bb-4a2c-86b3-88d7a0f1e35a", "metadata": { "execution": { "iopub.execute_input": "2024-05-06T04:14:22.634726Z", "iopub.status.busy": "2024-05-06T04:14:22.634325Z", "iopub.status.idle": "2024-05-06T04:14:22.646075Z", "shell.execute_reply": "2024-05-06T04:14:22.645522Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/plain": [ "(0.999, 2.0] 21\n", "(2.0, 3.0] 570\n", "(3.0, 4.0] 1804\n", "(4.0, 5.0] 9777\n", "(8.0, 9.0] 14833\n", "(9.0, 10.0] 17185\n", "(5.0, 6.0] 19763\n", "(6.0, 7.0] 20101\n", "(7.0, 8.0] 31097\n", "Name: count, dtype: int64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nvd['BaseScore'].value_counts(bins = [1,2,3,4,5,6,7,8,9,10]).sort_values()" ] }, { "cell_type": "markdown", "id": "5cc77647-3836-4b8f-9925-0619c323097d", "metadata": {}, "source": [ "## Vector Count" ] }, { "cell_type": "code", "execution_count": 5, "id": "2df22bea-1428-47c6-b9aa-d9f9370490e9", "metadata": { "execution": { "iopub.execute_input": "2024-05-06T04:14:22.648369Z", "iopub.status.busy": "2024-05-06T04:14:22.648057Z", "iopub.status.idle": "2024-05-06T04:14:22.676328Z", "shell.execute_reply": "2024-05-06T04:14:22.675859Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/plain": [ "AttackVector\n", "Missing_Data 133483\n", "NETWORK 84361\n", "LOCAL 26939\n", "ADJACENT_NETWORK 2664\n", "PHYSICAL 1188\n", "Name: count, dtype: int64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nvd['AttackVector'].value_counts()" ] }, { "cell_type": "code", "execution_count": 6, "id": "49dd1629-708b-42a3-8716-59ff9fc381b3", "metadata": { "execution": { "iopub.execute_input": "2024-05-06T04:14:22.678445Z", "iopub.status.busy": "2024-05-06T04:14:22.678097Z", "iopub.status.idle": "2024-05-06T04:14:22.704252Z", "shell.execute_reply": "2024-05-06T04:14:22.703786Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/plain": [ "AttackVector\n", "Missing_Data 0.54\n", "NETWORK 0.34\n", "LOCAL 0.11\n", "ADJACENT_NETWORK 0.01\n", "PHYSICAL 0.00\n", "Name: proportion, dtype: float64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nvd['AttackVector'].value_counts(normalize=True).round(2)" ] }, { "cell_type": "markdown", "id": "6318a0b7-6796-45d6-95eb-923f4b7529f1", "metadata": {}, "source": [ "## Yearly Breakdown" ] }, { "cell_type": "code", "execution_count": 7, "id": "a308f41c-a8ca-47d5-a031-68ed3b741fad", "metadata": { "execution": { "iopub.execute_input": "2024-05-06T04:14:22.706400Z", "iopub.status.busy": "2024-05-06T04:14:22.706038Z", "iopub.status.idle": "2024-05-06T04:14:23.595024Z", "shell.execute_reply": "2024-05-06T04:14:23.594469Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": [ "\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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
YearAttackVectorAttackVectorCount
2024NETWORK7539
2024Missing_Data4593
2024LOCAL1596
2024ADJACENT_NETWORK235
2024PHYSICAL71
2023NETWORK21742
2023LOCAL6379
2023Missing_Data2120
2023ADJACENT_NETWORK491
2023PHYSICAL217
2022NETWORK18111
2022LOCAL6176
2022Missing_Data1452
2022ADJACENT_NETWORK450
2022PHYSICAL242
2021NETWORK14041
2021LOCAL5252
2021Missing_Data1904
2021ADJACENT_NETWORK559
2021PHYSICAL194
2020NETWORK12867
2020LOCAL4457
2020Missing_Data900
2020ADJACENT_NETWORK706
2020PHYSICAL292
2019Missing_Data9964
2019NETWORK6727
2019LOCAL1955
2019ADJACENT_NETWORK162
2019PHYSICAL130
2018Missing_Data16483
2018NETWORK1294
2018LOCAL323
2018ADJACENT_NETWORK34
2018PHYSICAL20
2017Missing_Data16594
2017NETWORK1093
2017LOCAL394
2017ADJACENT_NETWORK18
2017PHYSICAL14
2016Missing_Data5794
2016NETWORK500
2016LOCAL215
2016ADJACENT_NETWORK4
2016PHYSICAL4
2015Missing_Data6561
2015NETWORK29
2015LOCAL5
2014Missing_Data7952
2014NETWORK37
2014LOCAL17
2014PHYSICAL2
2013Missing_Data5302
2013NETWORK16
2013LOCAL5
2013ADJACENT_NETWORK1
2012Missing_Data5288
2012NETWORK39
2012LOCAL22
2012ADJACENT_NETWORK2
2011Missing_Data4148
2011NETWORK17
2011LOCAL5
2011PHYSICAL1
2011ADJACENT_NETWORK1
2010Missing_Data4591
2010NETWORK58
2010LOCAL18
2009Missing_Data5711
2009NETWORK38
2009LOCAL29
2008Missing_Data5610
2008NETWORK43
2008LOCAL11
2007Missing_Data6571
2007NETWORK15
2007LOCAL8
2007ADJACENT_NETWORK1
2007PHYSICAL1
2006Missing_Data6645
2006NETWORK10
2006LOCAL4
2005Missing_Data4958
2005NETWORK35
2005LOCAL17
2004Missing_Data2440
2004NETWORK27
2004LOCAL12
2003Missing_Data1532
2003NETWORK13
2003LOCAL3
2002Missing_Data2118
2002NETWORK33
2002LOCAL19
2001Missing_Data1644
2001NETWORK24
2001LOCAL11
2000Missing_Data1011
2000NETWORK6
2000LOCAL3
1999Missing_Data917
1999NETWORK4
1999LOCAL2
1998Missing_Data244
1998NETWORK2
1998LOCAL1
1997Missing_Data252
1997NETWORK1
1996Missing_Data75
1995Missing_Data25
1994Missing_Data26
1993Missing_Data13
1992Missing_Data14
1991Missing_Data15
1990Missing_Data11
1989Missing_Data3
1988Missing_Data2
\n" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nvd['Year'] = nvd['Published'].dt.strftime('%Y')\n", "nvd2 = nvd[['Year', 'AttackVector']].copy()\n", "av_df = nvd2.value_counts().to_frame('AttackVectorCount').reset_index()\n", "av_df = av_df.sort_values(by=['Year', 'AttackVectorCount'] , ascending=[False, False])\n", "av_df.style.hide()" ] }, { "cell_type": "code", "execution_count": 8, "id": "deb09f97-2065-49e2-92a7-f9942735a908", "metadata": { "execution": { "iopub.execute_input": "2024-05-06T04:14:23.597525Z", "iopub.status.busy": "2024-05-06T04:14:23.597109Z", "iopub.status.idle": "2024-05-06T04:14:23.840907Z", "shell.execute_reply": "2024-05-06T04:14:23.840374Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "AttackVector=NETWORK
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "NETWORK", "line": { "color": "#636efa", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "NETWORK", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006", "2005", "2004", "2003", "2002", "2001", "2000", "1999", "1998", "1997" ], "xaxis": "x", "y": [ 7539, 21742, 18111, 14041, 12867, 6727, 1294, 1093, 500, 29, 37, 16, 39, 17, 58, 38, 43, 15, 10, 35, 27, 13, 33, 24, 6, 4, 2, 1 ], "yaxis": "y" }, { "hovertemplate": "AttackVector=Missing_Data
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "Missing_Data", "line": { "color": "#EF553B", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "Missing_Data", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006", "2005", "2004", "2003", "2002", "2001", "2000", "1999", "1998", "1997", "1996", "1995", "1994", "1993", "1992", "1991", "1990", "1989", "1988" ], "xaxis": "x", "y": [ 4593, 2120, 1452, 1904, 900, 9964, 16483, 16594, 5794, 6561, 7952, 5302, 5288, 4148, 4591, 5711, 5610, 6571, 6645, 4958, 2440, 1532, 2118, 1644, 1011, 917, 244, 252, 75, 25, 26, 13, 14, 15, 11, 3, 2 ], "yaxis": "y" }, { "hovertemplate": "AttackVector=LOCAL
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "LOCAL", "line": { "color": "#00cc96", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "LOCAL", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006", "2005", "2004", "2003", "2002", "2001", "2000", "1999", "1998" ], "xaxis": "x", "y": [ 1596, 6379, 6176, 5252, 4457, 1955, 323, 394, 215, 5, 17, 5, 22, 5, 18, 29, 11, 8, 4, 17, 12, 3, 19, 11, 3, 2, 1 ], "yaxis": "y" }, { "hovertemplate": "AttackVector=ADJACENT_NETWORK
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "ADJACENT_NETWORK", "line": { "color": "#ab63fa", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "ADJACENT_NETWORK", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2013", "2012", "2011", "2007" ], "xaxis": "x", "y": [ 235, 491, 450, 559, 706, 162, 34, 18, 4, 1, 2, 1, 1 ], "yaxis": "y" }, { "hovertemplate": "AttackVector=PHYSICAL
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "PHYSICAL", "line": { "color": "#FFA15A", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "PHYSICAL", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2014", "2011", "2007" ], "xaxis": "x", "y": [ 71, 217, 242, 194, 292, 130, 20, 14, 4, 2, 1, 1 ], "yaxis": "y" } ], "layout": { "legend": { "title": { "text": "AttackVector" }, "tracegroupgap": 0 }, "margin": { "t": 60 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "xaxis": { "anchor": "y", "domain": [ 0.0, 1.0 ], "title": { "text": "Year" } }, "yaxis": { "anchor": "x", "domain": [ 0.0, 1.0 ], "title": { "text": "AttackVectorCount" } } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "fig = px.line(av_df, x=\"Year\", y=\"AttackVectorCount\", color='AttackVector' , markers=True)\n", "fig.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" }, "vscode": { "interpreter": { "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" } } }, "nbformat": 4, "nbformat_minor": 5 }