{"nbformat":4,"nbformat_minor":0,"metadata":{"kernelspec":{"display_name":"Python 3","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.7.3"},"latex_envs":{"LaTeX_envs_menu_present":true,"autoclose":true,"autocomplete":true,"bibliofile":"biblio.bib","cite_by":"apalike","current_citInitial":1,"eqLabelWithNumbers":true,"eqNumInitial":1,"hotkeys":{"equation":"Ctrl-E","itemize":"Ctrl-I"},"labels_anchors":false,"latex_user_defs":false,"report_style_numbering":true,"user_envs_cfg":false},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":false,"skip_h1_title":false,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{},"toc_section_display":true,"toc_window_display":false},"colab":{"name":"network-attack-clustering.ipynb","provenance":[],"collapsed_sections":[]}},"cells":[{"cell_type":"markdown","metadata":{"id":"gzsebR6yHHiG","colab_type":"text"},"source":["# Clustering techniques detecting atypical network connections"]},{"cell_type":"markdown","metadata":{"id":"ZjokSKHDHHiI","colab_type":"text"},"source":["We refer to a dataset downloaded from the 1999 KDD cup competition. We start by sampling from all available data so as to be able to work interactively."]},{"cell_type":"code","metadata":{"id":"0hUWMB1SHHiK","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":207},"outputId":"8a9638a9-175f-436d-d4e7-20419028bb83","executionInfo":{"status":"ok","timestamp":1585734133647,"user_tz":-120,"elapsed":41049,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["# this is meant to be run on google colab\n","\n","!apt-get install openjdk-8-jdk-headless -qq > /dev/null\n","!wget -q http://www-eu.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz\n","!tar xf spark-2.4.5-bin-hadoop2.7.tgz\n","!pip install -q findspark\n","\n","import os\n","os.environ[\"JAVA_HOME\"] = \"/usr/lib/jvm/java-8-openjdk-amd64\"\n","os.environ[\"SPARK_HOME\"] = \"/content/spark-2.4.5-bin-hadoop2.7\"\n","\n","import findspark\n","findspark.init(\"spark-2.4.5-bin-hadoop2.7\")# SPARK_HOME\n","from pyspark.sql import SparkSession\n","spark = SparkSession.builder.master(\"local[*]\").getOrCreate()\n","\n","sc = spark.sparkContext\n","\n","!wget http://kdd.ics.uci.edu/databases/kddcup99/kddcup.data_10_percent.gz\n","\n","raw_data = sc.textFile('kddcup.data_10_percent.gz').sample(False, .01)"],"execution_count":3,"outputs":[{"output_type":"stream","text":["--2020-04-01 09:40:49--  http://kdd.ics.uci.edu/databases/kddcup99/kddcup.data_10_percent.gz\n","Resolving kdd.ics.uci.edu (kdd.ics.uci.edu)... 128.195.1.86\n","Connecting to kdd.ics.uci.edu (kdd.ics.uci.edu)|128.195.1.86|:80... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 2144903 (2.0M) [application/x-gzip]\n","Saving to: ‘kddcup.data_10_percent.gz’\n","\n","kddcup.data_10_perc 100%[===================>]   2.04M  1.97MB/s    in 1.0s    \n","\n","2020-04-01 09:40:51 (1.97 MB/s) - ‘kddcup.data_10_percent.gz’ saved [2144903/2144903]\n","\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"FRAeEi2EHHiT","colab_type":"text"},"source":["How many data do we have?"]},{"cell_type":"code","metadata":{"id":"qoUW_jaXHHiU","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"ca8c08ba-aa6a-449b-8d6b-4525163cef5a","executionInfo":{"status":"ok","timestamp":1585734175133,"user_tz":-120,"elapsed":3221,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["raw_data.count()"],"execution_count":5,"outputs":[{"output_type":"execute_result","data":{"text/plain":["4863"]},"metadata":{"tags":[]},"execution_count":5}]},{"cell_type":"markdown","metadata":{"id":"KEuwYyCAHHib","colab_type":"text"},"source":["What kind of data do we have?"]},{"cell_type":"code","metadata":{"id":"BVhx4NizHHic","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":54},"outputId":"3eb52f6f-75f4-493b-946a-90f1d80fdd4a","executionInfo":{"status":"ok","timestamp":1585734185667,"user_tz":-120,"elapsed":763,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["raw_data.first()"],"execution_count":6,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'0,tcp,http,SF,236,1680,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,3,3,0.00,0.00,0.00,0.00,1.00,0.00,0.00,184,255,1.00,0.00,0.01,0.02,0.00,0.00,0.00,0.00,normal.'"]},"metadata":{"tags":[]},"execution_count":6}]},{"cell_type":"markdown","metadata":{"id":"70Ymuf9UHHih","colab_type":"text"},"source":["Each element is a CSV (comma separated values) gathering 38 elements, mostly numeric ones. Let's import this data in a python list and peek through the first ten items."]},{"cell_type":"code","metadata":{"id":"HkFkXE1EHHii","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":209},"outputId":"3d40d6a3-b29c-4020-c77f-77b7dd788ccd","executionInfo":{"status":"ok","timestamp":1585734259830,"user_tz":-120,"elapsed":2436,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["original_data = raw_data.collect()\n","original_data[:10]"],"execution_count":8,"outputs":[{"output_type":"execute_result","data":{"text/plain":["['0,tcp,http,SF,236,1680,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,3,3,0.00,0.00,0.00,0.00,1.00,0.00,0.00,184,255,1.00,0.00,0.01,0.02,0.00,0.00,0.00,0.00,normal.',\n"," '0,tcp,http,SF,334,1718,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,255,1.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,normal.',\n"," '0,tcp,http,SF,343,1544,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,36,36,0.00,0.00,0.00,0.00,1.00,0.00,0.00,142,255,1.00,0.00,0.01,0.02,0.00,0.00,0.00,0.00,normal.',\n"," '0,tcp,http,SF,209,751,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,3,11,0.00,0.00,0.00,0.00,1.00,0.00,0.18,101,255,1.00,0.00,0.01,0.04,0.00,0.00,0.00,0.00,normal.',\n"," '0,tcp,http,SF,303,316,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,4,7,0.00,0.00,0.00,0.00,1.00,0.00,0.29,255,255,1.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,normal.',\n"," '0,tcp,http,SF,317,6329,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,6,6,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,255,1.00,0.00,0.00,0.00,0.01,0.01,0.00,0.00,normal.',\n"," '0,tcp,finger,SF,6,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,22,3,0.14,0.09,0.05,0.00,0.00,0.00,0.00,0.00,normal.',\n"," '0,tcp,smtp,SF,651,336,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,49,145,0.86,0.04,0.02,0.02,0.00,0.00,0.00,0.00,normal.',\n"," '0,tcp,http,SF,169,10776,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,5,255,1.00,0.00,0.20,0.06,0.00,0.00,0.00,0.00,normal.',\n"," '0,tcp,http,SF,396,769,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,34,0.00,0.00,0.00,0.00,1.00,0.00,0.12,10,255,1.00,0.00,0.10,0.06,0.00,0.00,0.00,0.00,normal.']"]},"metadata":{"tags":[]},"execution_count":8}]},{"cell_type":"markdown","metadata":{"id":"KLrY6BD8HHio","colab_type":"text"},"source":["Each data item is represented by a string, but we want to be able to access to the single values deparated by commas, thus we start by splitting at each comma."]},{"cell_type":"code","metadata":{"id":"LIIlypdAHHip","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":741},"outputId":"1c4175d8-1b3e-4acd-86e3-1ed5cc10e5db","executionInfo":{"status":"ok","timestamp":1585734266344,"user_tz":-120,"elapsed":1362,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["original_data[0].split(',')"],"execution_count":9,"outputs":[{"output_type":"execute_result","data":{"text/plain":["['0',\n"," 'tcp',\n"," 'http',\n"," 'SF',\n"," '236',\n"," '1680',\n"," '0',\n"," '0',\n"," '0',\n"," '0',\n"," '0',\n"," '1',\n"," '0',\n"," '0',\n"," '0',\n"," '0',\n"," '0',\n"," '0',\n"," '0',\n"," '0',\n"," '0',\n"," '0',\n"," '3',\n"," '3',\n"," '0.00',\n"," '0.00',\n"," '0.00',\n"," '0.00',\n"," '1.00',\n"," '0.00',\n"," '0.00',\n"," '184',\n"," '255',\n"," '1.00',\n"," '0.00',\n"," '0.01',\n"," '0.02',\n"," '0.00',\n"," '0.00',\n"," '0.00',\n"," '0.00',\n"," 'normal.']"]},"metadata":{"tags":[]},"execution_count":9}]},{"cell_type":"markdown","metadata":{"id":"q5ZAdlImHHiv","colab_type":"text"},"source":["More precisely, we should also address the conversion on numerical values. To to this properly, we use a function taking as argument a line and returning the corresponding list containing the converted elements between commas."]},{"cell_type":"code","metadata":{"id":"9mLAGG4UHHiw","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":724},"outputId":"d27b2e02-3ce5-4866-8dc0-ed6d51c0cb14","executionInfo":{"status":"ok","timestamp":1585734272215,"user_tz":-120,"elapsed":1323,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["def clean(line):\n","    splitted_line = line.split(',')\n","    return [float(splitted_line[0])] + splitted_line[1:4] + [float(d) for d in splitted_line[5:-1]] + [splitted_line[-1]]\n","\n","clean(original_data[0])"],"execution_count":10,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[0.0,\n"," 'tcp',\n"," 'http',\n"," 'SF',\n"," 1680.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 1.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 3.0,\n"," 3.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 1.0,\n"," 0.0,\n"," 0.0,\n"," 184.0,\n"," 255.0,\n"," 1.0,\n"," 0.0,\n"," 0.01,\n"," 0.02,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 0.0,\n"," 'normal.']"]},"metadata":{"tags":[]},"execution_count":10}]},{"cell_type":"markdown","metadata":{"id":"UtvutCxSHHi3","colab_type":"text"},"source":["We can now map the cleaining function to each line in the original dataset, in order to obtain a cleaned data set to be further processed."]},{"cell_type":"code","metadata":{"id":"wOtdKdZWHHi4","colab_type":"code","colab":{}},"source":["data = list(map(clean, original_data))"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"z5oqOpQVHHi9","colab_type":"text"},"source":["Let's explore how some of the quantities in the dataset behave. For instance, if for each element we consider the 30-th and the 31-th elements and interpret them as coordinates of a point, we can describe this element through a point in the plane:"]},{"cell_type":"code","metadata":{"id":"JyXZXq3eHHi-","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"08d453c3-dc4f-4e3d-b1e3-9f1745c1aa21","executionInfo":{"status":"ok","timestamp":1585734462894,"user_tz":-120,"elapsed":1207,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["%matplotlib inline\n","import matplotlib.pyplot as plt\n","\n","x_index, y_index = (30, 31)\n","x_points = [d[x_index] for d in data]\n","y_points = [d[y_index] for d in data]\n","\n","plt.scatter(x_points, y_points, alpha=0.5)\n","plt.show()"],"execution_count":25,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO29e5Bc13nY+Tv30Y/pnidmMBiAGDwI\nAgRIk6JEmYItK4woSrCYWEmq5Dhb1jIb1dLZyFqHa5dCx7UrZ1NOuCraKsdOXKFXrtBSEsfeyGUm\nlCBTXCuyNhAtPkwYBAQQxJODwWAGg+me7unXvffsH7e70TPonunH7e57b59f1dTM3L5973l+5zvf\n+c53hJQShUKhUIQLrd8JUCgUCoX3KOGuUCgUIUQJd4VCoQghSrgrFApFCFHCXaFQKEKI0e8EAExO\nTsq9e/f2OxkKhUIRKF5//fUlKeVUvc98Idz37t3La6+91u9kKBQKRaAQQlxu9JkyyygUCkUIUcJd\noVAoQogS7gqFQhFClHBXKBSKEKKEu0KhUIQQX3jLtMPeZ17qdxI8I2YIHrxrjG2JCOduZFjMFLBt\nBwEUbEnJllTCuwkgamjMjsfIFm2W10rommDHSIwdI1HOLayylCnhlO+PGoKEqbOcs9a9UwCGJogZ\ngmhEJ2rojMYjPLR7lB87sI3/+tY83zm7QM5y7xUChqM6h2ZGefLoLPunkhw/tcDcSo6ILriynOWt\nKymyJdt9ti6I6gJN07Ad0DS4a3yIf/TofvZPJfnaicu8eTWFRBLVBXMredZKNhoSpMCSoGuwd2KI\nx47sYCgieOWHS1xczJApWCAlEVNnKhll31SCIzOj6+7JlWwMTTAUNdg9FudDd09WP39nYZVUroQj\nQROwczTGL3/y3mqe3r6WIp230AQ4EkZiBvftvP38Kzez2I4kamgMx00e2j3GZ47u4cJihhdOXGEh\nnWc4ajAWN1hes8iVLIolm2zRRiKYHY/zDx/dzxMP7KrWx5n5FL/17Xf4i8u3KNkOU8koB7cnGYqZ\nRHWBBIq2ZNdYnGP3T6971/RIjJkRk//+7i1WciUMTfCB3WP8vQ/Ncm4hW62jSnva+IwrN7NommB2\nYoi7JxN3vOvwzChn5lPr6rv2WQenE5xbyHJ6PsW1lTxrRQsBJCIGQxEdKQSjcYMjM6Mcu3+aP3rt\nCn/42hy5ooMmYM9EjCcevItj908D8LUTl/lv5xa5mS2iCdg3meR/2VBetdSmrTbNm/Fv/9s7vHDi\nCqlcidG4yZNHZ/m5v3bPHc+tbaeVeq599sZ3H5xO8NLJef78nZtki24bmp0Y4hc/fpD9U0m+euIy\nb15dQSA4PZ++I12Xnn1i03S3gvBDVMiHH35YtuIKGSbBXkEAunD/iGiwZm31DZeoIbBtiSNBAu3U\npibcd8+MxnAkrOZLrObt6gBRy2TCQNd19kwMcWTnKPmSxZ/98AYLq0VE+Z56aRiJ6iAEhoCd43HW\nig7JqM6N1RzX0yV0AaYGedu9XwCmLpASdo1FuJEpkYgY3MoWscsv0AChwVQyys7RKGcWMiQiBitr\nRQAsxx04TV1n11iEy7fyRA2NW2t3DnRDEY3DMyPsHI1zbiFDwbZZWi0wmYwSNXQSEcGZhQxjMZNs\nyWKtYCOBnWMxTE0nagiW10qMDUXQhOTyzRz5ks1k0iSds8hbEkNAMmZgOZCI6vzvf+MwTzywizPz\nKb74J29zej5N1NBwHMlqwcLUNd6/e5T5tFu2H9w3Tsw0ODW3wnu3cowNRRiO6ly6ucZixr0nZggc\nwLIliYjGo4emGYrq/ODiLSTwyP5xosbtZ8QMjdWChe1A0bJJxAxGomb1XalciY8dnuLbZxYZjZvk\nS9a6Z2XzNm9eXeHuqQQXl7LcWishpURKWR7UBduHo0QMjXt3DPNX761waTmHLsB2breVe6eH2DGW\nIFuwuHQzy3K2iK4JkKALwfCQyf9RLq9azsyneP67FxmNmwzHDFbzFqlciac+sq+hgP+3/+0dfvOV\n80R0nbgpyJUkRdvmFx47UBXwZ+ZTPPetc1xcypKM6gggU7CZ3TbEF44dqg54te++vJTle+8ukcmX\nKNpls4gAISER1dg9kSBfctv9W3N3CvYKrQh4IcTrUsqH632mzDI+QQK2BFPXyJe15WaI6BpCtC/Y\nwdVODV3j1lqJki3JFuoLdoB0zsa2JZdvrjEaN7mwtEamYG0q2A0NcpZD3NTIWQ4XlrIMxwziEYOb\nGQsNd4DJ26x7TtTQ0DS4slwgouus5Eog3OcBOLjllc5bnLuRrd5j6BpCCLSyAIkYGucXc0R0nVTu\nzlFTE7BWdLi6nOP6aoGoqVG0HCKGTsF2iJpa9fnpgkXJlkQMHVPXuJUtkYwZXF5ew7Ilo3GTlZwF\nSAxdsJy1sByJVp7+WI5kKKJj2ZIXTlwB4PipBS7fXCNm6MRMnZIjMXU3k2/NpRmOGSRjBheW3DK/\nupyrvkvTNLdcKM/GdI1I+btrJYfrqwUuLK2RjBkMxwwuLK5/RsmRGJogEdWRwFrBXveu0bjJCyeu\nVP/e+KzrqwUSUYNzNzLkS24d21IiEWgaONKhYDvETJ3r6QJXbuXcyhUCXROY5VnAu4s5lrNFLt3M\nki3YmOV8GLpAaGDXlFctx08tVNOmCVH9+/iphYbt/YUTV4joOomojqZpJKI6EV1f9/zjpxZYyhSq\n7TQWcetgOVusPnvju6+vFsgVbUq220YNXaALVwFZKzlcupklGXOf1QuUcPcREldLaSRYN/tep/Mv\nXQiKtoPlOFXNuB5WWSvLW66KnclblGynmo56CCFwHImuCRwJRcshWpbQtnQFX6PvGuXyiJsC25HI\nsmCo3K8LgeU45C2neo8uBI6UiPLzTV1gSUncdN9/R/rKac9bNpm8RdTQKFgOUUNU01p5fsmWOI5E\niNtlFjU0irbEkW45FC3HHTA1gS0ljhTld0isajk4LKTzAMyt5MhbNqbuDm2VPEgpy+nQiBoambw7\nMOUtu/quyv0by19Kd9DO5K1qnqKGRjpfWveMguW4GjIgpcRynHXvGo4ZrpkpZlTru/ZZmbzFcFQn\nW7CwpZs3991uvmVNfafzpWrbklJWR3JNQElKipZDvmRjOQ66ENW6cZ8jq+VVy9xKrpq2CsMxg7mV\nXP0GBaRyJeLmevUpbgpS5UGy8tyCZVfbKbjKRtFyqs/e+O5M3sJ2nPLYtf75jnRNXbXP6zZbvkkI\nsVsI8WdCiNNCiLeFEL9Qvv6rQog5IcRfln8+WfOdXxZCnBdCnBVCfKKbGQgTFWHUavWXrTkdYUvp\nakqahr7JwwwhEEIQM3TANTNUtMxGX5NSommu4NWEq0kXLFc4uYK48XetcnnkSq7gEAIoC+5Kug1N\nI2Zo1XvcAUNUB8uSLTGEO/3W6rxIltMeM3SSMaMqUAuWrKa18nxTF2hlAVYps4LlENEFmnDLIWJo\naAJXkAuBJmT5HcIV+I5EExrTIzEAdo3FiRk6pbLkq+RBCFEdaAqWQ7IsSGKGXn1X5f6N5S+EKzST\nZa2/8oyRmLnuGVFDqw4OQggMTVv3rtW8xfRIjNWysN/4rGTMYLVgk4ga6MLNm/tuN9+ipr5HYma1\nbQlxe0R3JJhCEDE0YqaOobnaf6Vu3OeIannVsmssXk1bhdW8xa6xeP0GBYzGTXKl9aN8ruTOhGqf\nGzX0ajsF3Ho2tOqzN747GTPQNc0dyDeYuzUBEV2se163aUaOWMAvSimPAB8CPieEOFL+7MtSyveV\nf74BUP7sZ4D7gGPAvxFC6F1Ie6io2NxLtkPMaF4TL9oOFSWoXQGvCbBsh/EhE1N3p+iNGsZIXEfX\nBXu2DZHKldg/OUQyaqxb8N2I5UDc0MiVHOKGxv7JBKt5i1zRYlvSwMHt4DGddc8pWA6OA7MTUYq2\nzVjcBOk+D9zGW7IdRmIGB7cnqvdYtoOU7jqErrma44GpOEXbZjR+55TYka7NffdEnB3DUQoltxMX\nLZuorlEoOdXnj0QNTF1QtGxKtsN4wiSTt9gzMYShu9rfWNwABJYtmUgYGOUZC9I1gawVbQxd8OTR\nWQCO3T/Nnm1D5C2bfMnG1ER1NvTgrhFWy9r3/km3zHdPxKvvchzHLRfcsrNsh2L5u0Omxo7hKPsn\nh8jkLVbzFvun1j/D1FxTUbbgLoQPRfV170rlSjx5dLb698Zn7RiOki1YHNyeJGa6dawLgUDiOLgD\niK6RL9nsGIkyOx4vT5UktnPbWeDuqTgTiQh7tyVIRHVK5XxYtkQ6oNeUVy3H7p+ups2Rsvp3ZXG2\nHk8enaVo26750XHIFmyKtr3u+cfun2YyGa2203zRrYOJRKT67I3v3jEcJR7RMXW3jVq2xJYgHbcu\n9m5LkMm7z+oFLS+oCiH+BPht4MeBjJTyuQ2f/zKAlPJflv//FvCrUsoTjZ7Z6oIqhGtRtZveMu7C\nJBTt9e9U3jLKW0Z5y/TPW+bM/GrDtHm1oNqScBdC7AW+C9wP/G/A3wfSwGu42v0tIcRvA9+XUn6t\n/J2vAN+UUv4/G571FPAUwOzs7AcuX24Y/2ZLXjo5x//5X05jObftp4YG/8ffPNKwQXjBl18+V20c\nFSr/P/34wbbv9ZJ2Gr5CoegumymnXgn3ppdthRBJ4D8D/1hKmRZC/A7wz3Fl6T8Hfh34B80+T0r5\nPPA8uJp7s9+rR0WA12oyTx6d7apgB3da9vx3LwKsc8P6ux+8q6N7veTwzGjPhbkaUBSK/tOUcBdC\nmLiC/d9LKb8OIKVcqPn8d4H/Wv53Dthd8/W7yte6yhMP7Oq6MN/I4ZlRnvrIvnWC7O9+8K66gqyV\ne4NMre/vzGiMVK7E89+9uKnfsUKh8J4thbtwfXq+ApyRUv5GzfUZKeV8+d+/DZwq//0i8B+EEL8B\n7ATuAf7C01Q3oB8aYyuacT+06E5ptUxrfX+B6u/jpxYCl3dFfdTMLBg04y3z48BngI9ucHv8khDi\nr4QQJ4G/DjwNIKV8G/hD4DRwHPiclNJu8GzPqGiMqVxpncZ4Zj7V7VeHlnbKtB2/Y0VwUP0sOGyp\nuUspv0d9D7dvbPKdXwN+rYN0tYzSGL2nnTLdNRa/Y+F4K79jRXBQ/Sw4hGaHqtIYvaedMm3H71gR\nHFQ/Cw6BjQq5kXY1RmU/bEw7ZTooC8eDipqZBYfQaO7taIzKfrg57Wrhh2dGefrxgzz36Qd5+vGD\nSrCHCDUzCw6hEe4VjXE0bjKfyjMaN7d0v2snotwg0U6ZKsLNZm3izHyKL798jl/6o7f48svnlJLU\nZ0JjloHWXQ3nVnLMjK4PRuRH+2E/TUdBdN9UdJd6bULtb/AfodHc26GdiHK9RpmOFEFAzYL9R6g0\n91Y5dv80Xzp+luVssXw4g8ZEIsIXjh3qd9KqKNczRRAIyix4kBho4Q5u3GlwD1Ko/d8veN1plHeQ\nohsE2YumlT4RpP4TerPMZos8x08tsHtiiEcPbecT983w6KHt7J4Y8tVU0kvTkTLxKLpFUL1oWukT\nQes/oRbuW1VGEDZkeNlplF1U0S2C6lnVSp8IWv8JtVlmK3t1EKaSXm4KUnZRRTcJgmfVRrPK6fkU\n9+4YWXdPoz4RtP4TauG+VWX0K8Z6q3jVaYIwmCkU3aKeu+bVmzmGTJ29k8nqfY36RND6T6jNMlvZ\nq4M6lWyXoNpFFQovqGdWOTid5OxCpqk+EbT+E2rNvRnNPAhTSa8Ic9wXP3ox+DFNQcSrcqw3k98z\nmWCtZDMaN3t64E7lONB6172i5QOyu0E7B2Q3i+pg4ad2ul07iPdzFubHNAWRdsqxUZ/v1znG9dj3\nzEsNhfvFXp+hGlQGSTMfVPy40cuPaQoirZbjZmEQ/LTG1kil9lLVDrXNXTEY+NGl1Y9pCiKtluNm\n7oqDtsYWes1dEX786MXgxzQFkVbLcSsPuUGayQ+scFe2+PDgp+m2H9IUprbdajkGZVA1NLCc+te9\nYiDNMkHbRqzYHD9Ot/uVprC17VbLMSjuijFTb+l6Owyk5q4Wu8KHH6fb/UhTGNt2K+UYFHffqeEo\njpOjZEscCZoAUxdMDUc9e8dACvegbSNWKJpFtW1/DvQbObp/G989t0TRtrEdia4JIrrO0f3bPHvH\nQJplgnBIh0LRDqptB4PPHN3DzrEYAoHlSASCnWMxPnN0j2fvGEjhHhS7nELRKqptB4dE1GDHaIyd\no3F2jMZIRL01pIR+h2ojwuRRoFDUotq2//Fqt+xA71BtRBDscgpFO6i27X96sTYysMJdoVAEh0az\nkaDOUnrhj6+Eu0Kh8DWN4sV87PAU3z6zWDeOTKO4M34ZCI7dP82Xjp9lOVukaDlEDI2JRIQvHDvk\n2TsGckFVoVAEh0bxYl44caXpY+/8uLlLE26AX1kOF1b53yuU5q4IFH7SvgaJfpZ7I/v0QjrPI/sm\n7rhez27tt81dx08tsHtiiPt33X53KlfyND1bau5CiN1CiD8TQpwWQrwthPiF8vUJIcTLQoh3yr/H\ny9eFEOJfCSHOCyFOCiHe70lKFQOPH7WvQaDf5d7Id396JNa0T7/fonT2Ij3NmGUs4BellEeADwGf\nE0IcAZ4BXpFS3gO8Uv4f4CeBe8o/TwG/41lqFQNN0E6fDwv9LvdGvvtPHp1t2qe/mc1dZ+ZTfPnl\nc/zSH73Fl18+19XBqxebzbYU7lLKeSnlG+W/V4EzwC7gU8AL5dteAP5W+e9PAb8vXb4PjAkhZjxL\nsWJg8Zv25TW9FC6t0O9ybxQ87IkHdjUdVGyrzV29np30YrNZSzZ3IcRe4CHgVWBaSjlf/ug6UEnV\nLuBqzdfeK1+br7mGEOIpXM2e2dnZFpOtGESCEs61HTY7Qajfawp+KPdGvvvN+vRvFVCs1zb5XgQ4\na1q4CyGSwH8G/rGUMi1qVnallFII0dJWVynl88Dz4O5QbeW7isHk4HSC33rlXSxHMpEw2TESQ9e1\nvsZt9wq/LfjV4sd4+e2w2UDQj4Br3d5s1pRwF0KYuIL930spv16+vCCEmJFSzpfNLjfK1+eA3TVf\nv6t8TaFomzPzKb59ZpFDO5LMp/LczBZJ5y0+/9G7+y78vMDP0Rxb0TKb8arxo8eTH2YnXrOlcBeu\niv4V4IyU8jdqPnoReBJ4tvz7T2qu/7wQ4g+AR4BUjflGoWiLWs1272QScF3Hzi1kaf6seP/id+HS\njJbZjGnJr+ansMxOamnGW+bHgc8AHxVC/GX555O4Qv1xIcQ7wMfK/wN8A7gAnAd+F/hH3idbMWj0\ne1Gv24QhmmMzXjX99rxphB9P8+qULTV3KeX3gEZbpx6rc78EPtdhuhSKdfhds+2UoJwgtBnNmJb8\nbn4KUnlvhdqhqggEQZ82N2NnDrpwaWYADvsg7SdUbJmQ4Vdf6U4J8rS53zs8e0UzpqUwmJ+CwsAe\n1hE2zsyn+OqJy3zv/E3Gh0yO7BwmahikcqXACMGw4tXBDEEgqN4yQUUd1hFyKprhhcUM43G3St+8\nkuIDe8aqi1Wq8/QPP9uZvaYZ01Kje5TQ9xYl3JvEzw2v4oFQsiXJqE5lg9n5G1l+dN9EKIVIkFB2\n5q3xq4tkkFE29yY4M5/iS8fP8p2zN3h7LsV3zt7gS8fP+sZmWnETTMYMCpYDQNTQSOdLSoj4AGVn\n3hq/ukgGmdBp7t3QsL964jJXbq6RjBnoGlxP5Xh3McMv/dFJnvv0A33XLCqa4YGpBG9cWQFASklE\n1wLlURJWwuDm2A6t9MVBMl31ilAJ925N7d68ukIyquNIyXyqgKEJhiI6127lfDF1rLgJjsZN3rd7\nlDPzq6zkLH7iwDZ+9uiettPmZ1NU0Gh2h2dYyrvVvqhMV94TKuHereBLAoEElrNFDE1g6IKSJdF1\ngW07fPHF08xODPWtQ9ZqhpmCxaOHtnecDmUD3RyvBXHYyrvVvhj0fQx+JFQ2925tUX9o9yiZgs1a\n0UbXwLIlRVsyFjc5t5DhZqbQd//lwzOjPP34QZ779IM8/fjBjgWCsoE2pht+62Er71b7YpD3MfiV\nUGnu3Zra/ezRPbxzI8P1dI5MvoRpaIzFTaKmju1IJpPRaocEf4Rp7YQz8ylePr2AIx1G4xEObE8w\nmYxt2jnDZFLYim7MEMNmc26nLwZ9h67fCJXmvtEr4dJShu9fuMnb11Id79ZMRA12jw8RjxjETcNd\nrFwrIaXkwPZE9b4gd0i4rZWauiCqa+RLNq9fXmEpk2/YOQdlB2aFbswQe3Hsmlc0swu6HQ+hsO6u\n7hehEu61U7sfXk9z9nqGg9uTHJ4Z6UjgHD+1wJ5tCY7dP8PffHCGA9uT6LqGg+TeHcNMJm9rXH7t\nkM1S0Urv2zlCwXZ3L0d0wam5dMPOGTaTwlZ0QxAHxV2y2YG8VTPLoCkI0P3BLFRmGbg9tfvyy+fY\nNTbkydS5dso8mYwxmYzhSMkPr6fRNNfdMCyLQJW8asLk/bNjnF/MsporgZANO2fYTApb0Y3Fv6C4\nS7ZikmrFzOLnk6i6wZn5FM996xxLmQIFy+adhVVOzaX4pU90vl5WIXTCvYKXAqeR/fDIzCjH7p/2\nfYdshdq8Tg3HmBqOVf9vlK9Bc2PrliAOgs25WwP5oCkIXztxmYtLWYZjBiMxk4LlcHEpy9dOXObX\n/s4DnrwjtMLdS4GzmaYWhA4JzS94tqOVDqIbWzfqvZVF6X4tYHdrIB80BeHNqymSUZ2YqQMQM3Wk\nlLx51TvTTKhs7rV4acMMuptWK/bMdvLar/IJ0wJcK3XU7L3dKJ9urQ0EZc3BKyTyjhOQRPm6V4Q6\n5O8guedtRhhDztZu+qmdLQRp0K2llTpq5t5ulk+3+tUg9dd/+vWTfPfsIiVHYkuJLgSmJvjIoSn+\nRQtmmYEN+RsUk0m3CaM9M2wLcK3UUTP3elE+jYRtt/rVIPXXHz+wjVd+eAPbkUgpsQUg3OteEWrh\n3i/8poH0257ZjfII24DVSh01c2+n5RO2cAh+49xClg/tm+B6ukA6X2IkZrJjJMq5hSxPePSO0Nrc\n+4Uf/XX7ac/sVnkEadNPM7RSR83c22n5DNrehV4zt5JjdluCD+3fxseP7OBD+7cxuy3hqXKihLvH\n+LFT9HNBeLPy6GTBr1sDVr8WaVupo2bu7bR8uhWnSeHSC+VEmWU8xq/mgn7ZMxuVx9vXUlxZXmt7\n2t8NX/N+myJaqaOt7u20fPptygs7vXAfDp1w77e9W3WK9TQqj3Te4q7xznYQez1ghW2RtpPy6efe\nhX734V7Qix3JoRLu/da8YDA39GxGo/IYjRs9mfar04Dao1/hEPzQh3tFt2fToRLuftC8ghIjpFc0\nKo/jpxa6PsNRpwF1Rj9MeX7ow/UI4mwiVMLdL5rXIPnrNkOj8uj2DEedBhQ8/NKHawnqbCJUwl1p\nXr3BCy2mFzOcVgWFmnX1Hz/24W7MJnoxEwiVcFeaV/fxUovZbIbjReNXpwEFj636cL12AXRVUHo9\nm6j0IcdxmE/lefPKLb719nU+/9G7eeKBXV4kGQihn3vc1Hj14k1eOXODkmX7fuoUNHrhx+/VxqdB\nC0YVBjbz4a/XLp771jm+dPxsVzcNeu2TfvzUAo7jcHYhQ8Fy2JaIAPBbr7zrabq31NyFEL8H/A3g\nhpTy/vK1XwX+Z2CxfNs/lVJ+o/zZLwOfBWzgf5VSfsuz1NawcQQ/OJ3g22cWGY2bfOzwdHXEV3hL\nL2yiXk2DlZnFfzQzI2s0e6rXLt7MFAB44K6x6rXKvV7Vs9cWgbmVHPOpPLmixdytIkXbwdQEyZjp\nabqbMcv8O+C3gd/fcP3LUsrnai8IIY4APwPcB+wEvi2EOCiltD1Ia5V6poHf+n/f5eD2pO9W2cNG\nL2yiXg4gysziHzo16dVrFwXLRmwInuu1suG1krBrLM6fn7vBrbUSuiYwNY2S47CcKfLqhSXAm0it\nWwp3KeV3hRB7m3zep4A/kFIWgItCiPPAjwIn2k5hHeqN4CXb4Xo6z76pZPW+zSr5pZNzvHDiCgvp\nPNMjMZ48OuupvSustKvFtGJD9+OimqJzOp2R1WsXUUO/475utBUvlQS3D70LgC7cGO6aEOiG4Mot\nf8SW+XkhxEkhxO8JIcbL13YBV2vuea987Q6EEE8JIV4TQry2uLhY75aG1It7sS0RYTm73gzTqJJf\nOjnHs988SzpXYnsyQjpX4tlvnuWlk3MtpWMQaSdOTas29HZt5WE6vCOMdBqvpl67mExGmUhEArWu\ncnhmlKGIjiYElgNCCOKGRsTQ8PJ4jXa9ZX4H+OeALP/+deAftPIAKeXzwPPgHtbRynfrjeAzozHS\nOaupw6pfOHGFRNSo0SC06nW/ae9+3DzRqhbTqsbWzjQ4qL7IYaVeu+10Rla3XXzCNWEEbV3l7u3D\nvLecJZ23KNmu+BuJ6dw1MeTZO9oS7lLKqmuEEOJ3gf9a/ncO2F1z613la55SzzSgaRqff+xuzi1k\nt6zkhXSe7cnIumvDUZ2FdN7rpHZEWARWOzb0bg8giu7RqN1+7PAU3z7jztLbXZhs1C6CVseP3TvJ\nb76yQkTXGY4KciXJSq7Ek/dOevaOtoS7EGJGSjlf/vdvA6fKf78I/AchxG/gLqjeA/xFx6ncwGaa\nXTOB7qdHYqRzparGDrBasJkeiW3yrd4TBoF1Zt6N/vjmlVtMJqMc2J5gMhnz9SKsojMatdtzC1nl\nvVRmrSj50T3jvLOYJVOwSEYN3jc1wlrRO7tMM66Q/xF4FJgUQrwHfBF4VAjxPlyzzCXg5wCklG8L\nIf4QOA1YwOe89pSp0MkCx5NHZ3n2m2cBV2NfLdhkCxaf/+jdXiaxY7wSWP0y7VQ0uB3DUdJrri30\ntUu3uHfHMJqmebq5TC3C9od6bWuzdqu8l1zmVnL8yO5xHpydqF5zpOztYR1Syr8npZyRUppSyruk\nlF+RUn5GSvkjUsoHpJQ/VaPFI6X8NSnl3VLKQ1LKb3qWUg954oFdPPOThxiJm9zIFBmJmzzzk4d8\nZ2/3YvNEP0+Gqmhw+6aSvH/PGCNxE9uB+XTBc9OS2rDUexq1rYguQnVKVjdQh3V0kSce2OU7Yb4R\nLzZP9NO0U6vBTQ3HmBqO4V/hMGsAACAASURBVEjJfCrv+bvVhqXe06htlSy7uoFQhQGpjzqsY8Dx\nQmD10xbda1OJmvL3lkZtaz5lqYF2C9RhHYqOBVY/bdGDEMjNj66qvWKztqUG2q1Rh3UoOqKfAtaP\nppJOhPFm8YzadVUN8uDQTtsKcn6DhpBebolqk4cffli+9tpr/U5GaFEdyqXW/7pWGDUjjOt99/sX\nbnJwe3JdyIuKJvv041vHB+kkPfWe1S+PqGbf62V+FS5CiNellA/X+0xp7gOAmiK7dLK4XAnTemY+\nTTpfYiRmki2UWopn5GV6aunnZrdW2lYY9m0ECSXcBwSlvXe2uHx6PsWVm2vETJ3hqEG+ZJMt2Myn\n1u9qrticmylvrxa7gyI01Uaz3qKE+wDQqWYXloGhk8XlVM5CCEHMdKMQxkyd0bhJOr8+ntHlm1ni\npsYfvznH+JDJ4ZnhhuXdSXpq6+T0tTQP7h4Bbj/Hj0JTbTTrLaE7iUlxJ52cntTPTVBe0+pGp9oo\nk4urefJFi3zJRkpJvmQTNXQOTCWqETKLlo0mBHMrecbirt70l1dTFC27bnm3s/HqzHyKX/n6SX7u\nq2/wnbM3MDQwdcGrF26xlLk9i/Cj0FQbzXqLEu4DQCehVntxrF6vaCVc8cZBbSRmYjlgOZJMwSZq\n6hycTvKhuyd5+vGDPPfpB5kajrF7Yoii7RAzdWKmTtTQOL+YrVverYZPrqTp1LX0usFj52gMAZya\nS/taaLYTLlrRPsosMwB0Mh0Om5202QXAjXbs+3eNcOLdZQxN8JGDU1VPj1oBWimrkZhJvmRXhXsm\nbzUs73YWJIu2w3DUQAj3BKKbayU+uG+ct95LMZ/K+8LltBFqcb93KOE+AHTi6z6odtKNg9pkMsYj\n+8d562q6oQCtlNWB7Qlev7ziXpQSUxee7C3YbPCImQYfP7KjKRfMIBKWdZ9eooR7mU4bj58bXyeb\niQZhl2k96h/pZvD4kemGArRSVqNxk4dmRzl9bZVbOYsPH9jGZ47u6bg9dHvw8CtBP9egX7JBbWKi\n880VYd+c4eeBq1u0W6f1ygrwpPxq01SwLHfwWCt5Nnj4lS+/fO6OgbaVzWL9pNuyYbNNTEq401nj\nOTOf4osvnmY5U2QiGeHAVIKpYVe7KFo2U8OxgRKKYcKLQc3rzj2IA+0v/dFbzIzG0MprDEA1uuhz\nn36wjynbms1ky7H7pzuuS7VDdQvaXTSsdNybmQITQyaFks0bV1Z4/+wYjpT893eX+ei92wM5lVR4\ns/jn9QajQVyQDPK6TyPZ8vY194SybpqalCsk7QfOr3TcyWSUoi3Xub6dmV9lfCgcLoSK9unEDbVf\n1Pr3f/nlc33f0xBk//hGsiWdt7ruYqw0d9pfNKyMyrULXBFdsJwpUrQdfvzAxLr7+9WpB3EqX6Hf\nee+11umFY4DfFi/9GF20WRrJltG40fVBX2nutL+5ojIqTyZjfGDPGDFTZ3mtxEQywk8c2EbUWF95\n/ZhKhmmHaav4Ie+91DpbzW89Dd1vm9YqafzK9y4B8NkP7+Xpxw8GQrBDY9lyZGZUHbPXK9qxZdaO\nyhOJKIdn9OpiGeALF8KgBJXqBn7Ieze1zo1a+tJqvun8NtLQV/MlDs+MrLu3nzPOjWl87lvnmB5x\nzaBBmYU2ki3qmD0fs1XH9cNUMmw7TFvBL3nvxiJoPcH35+dvlk2BWwcQazTwza3kWC3bgyv0a/Fy\nYxpLts3FpSxLmQIfOTjlC5NRu6hj9gLAZh3XD54NQfY0aIV6tuYw572ecB4fMjl9bZXth27nr1F+\nGw18o3HDN4dbb0zj+RtZklGdki2rJiMYjFloOyibe8gJsqdBs2y0NV9ayvD0f3qLVy8s8f13b3Jx\nMRO6vNfzwjk8M8yttebqupEXxxEfBffamMZ0voQAkjX5DuostBfrQUpzDyEbtdiPHZ7i3EI2cJ4G\nzVKrxS5l8pxdyADgSDi0I8nZhQxrJZv7do6GJu/1ZiUx0+DDB7YxGje3rOvNPMT8MOOEO9MY0d04\nOvftup22oM7EerEeNLDCvd8uct2ini3222cWW9a+glQ+tdP38zeyRA3NDahVsNk7mWQ8EQ3EVvVW\naCScm63nILgXbkzj/TtHuJbKEzF0HCkDHeeoF+tBAync/ejL2w5n5lN89cRl3ry6gkDw0G437Z1q\nBEErn1otNp0vMRw1KFhOdfoe1Kn7ZnghnP2ioW/GxjRuVDr8NiA1Sy/WgwZSuPvBRa5Tzsyn+NLx\ns1y5uUYyqiOBExeWyZVsHj00SSdHrvm1fBrNJtZpsVGDdNlOe99O16UvqFP3rQiCcPaasOS5F9FW\nB3JBNYhbwjdy/NQCy9kiyZhBLGIQj7g73hxHcvra6rp7WxVufiyfzRagajeKjA6ZIOHg9iTbktFQ\nLaIqwkMvTqUaSM19sylRUGzNcys5ipazTghHDY24qVU9JtrVCFqdMvaizLaaTdRqdGGZuivCTbdn\nIQMp3BtNiT64dywwtuZdY3HeWVilYLnndQIULIfRoQj37RxpymOiEa1MGbtln98ooE/Pp7h3R3M7\nJ8MydVcoOmFL4S6E+D3gbwA3pJT3l69NAP8J2AtcAn5aSnlLuIc6/ibwSWAN+PtSyje6k/T2qAiN\nTKHE3EqOkZhRdZHzq625Hsfun+bkeytcubkGUiKBTMFm32Si44MbWlms60aZ1Rswrt7MMWTq7J1M\nVu8Lqy1dMRi8dHKOF05cYSGdZ3okxpNHZ3nigV2ePb8Zzf3fAb8N/H7NtWeAV6SUzwohnin//0+A\nnwTuKf88AvxO+Xdf2Kj9HZxO8O0zi4zGTe7dMbLukOPDM6N85XuXfLFdvRkOz4zyhWOH1nnLHN0/\nwc96dCJPs9pvN1y66g0YB6ddf/XxRLTvOycVik556eQcz37zLImowfZkhHSuxLPfPAvgmYDfUrhL\nKb8rhNi74fKngEfLf78AfAdXuH8K+H3pHu/0fSHEmBBiRko570lqW6Ce9vdbr7zLoR3Jhlpm0Lar\nH54Z5V/8nQf6moZulFm9AWPPZIK1kt2RuUmh8AsvnLhCImrUyCKter1nwr0B0zUC+zpQcUXYBVyt\nue+98rU7hLsQ4ingKYDZ2dk2k9GYetqf5bhHc9VO7Wu1zEE9DLoTulFmjQaM+3aOhmojUhgJikNC\nv1lI59mejKy7NhzVWUjnPXtHx66QZS295YNYpZTPSykfllI+PDU11Wky7qCeO99EwuRmtrjuWq2W\n2Qv3pLBRW2Y/vJ7m9Hya1XyJ46cW2o6TMQjxcILIVic0+SF+flCYHomxWrDXXVst2EyPxBp8o3Xa\nFe4LQogZgPLvG+Xrc8DumvvuKl/rOfUCI+0YiWHq2qZC4/CMqx0+9+kHA3UoQD+pbCRKRk2OzIxw\neGako46tBln/0Yzg9ttBH37myaOzZAvuLNdxHFK5EtmCxZNHvbNitGuWeRF4Eni2/PtPaq7/vBDi\nD3AXUlPdtrc3tWuxbC7QdY3Pf/TuUAfR6hfqIGhv8Zt5o5n69Uv8/CBQsavXest8/qN399ZbRgjx\nH3EXTyeFEO8BX8QV6n8ohPgscBn46fLt38B1gzyP6wr5P3mW0jps5WPdyJ3viW4makBRHds7/Bjb\np5n6DZpDQr954oFdngrzjTTjLfP3Gnz0WJ17JfC5ThPVLK3sWuwVftO4eoXq2N7hx/0WzdSvckjw\nF4GOLeO3GChhXVDaaiEN+rcI2kzagobf2jU0V79qrcRfBFq4NzpNpl/aYhgXlJodsPrRscM6mPqt\nXUPz9ascEvxDoGPL+G0aGEa7cysmgl6bwfxovvACv7XrCoO+yB00Ai3cD8+M8rHDU7xw4gpXbmbR\nNMHsxFBVU+51Qwyj3dnPA5af09YJQTglSdE53V6fC7RwPzOf4ttnFtkxHCW9VgIBt7JFLi1leP67\naz239/lV4+oEPw9Yfk5bp2ymJQ/qon2Y6IVHVKBt7pVp+fXVAlFTYzRuEjN1rqcLfbF1h3FByc+7\nRf2ctm4R1nWGQaMX63OB1twr0/JM3iIZdWOaRw3NPUezT9PzsNkl/Wwi8HPaukWY1hkGeQYyt5LD\n0OD0fNqVXzGD/ZNDZArW1l9ukkAL98q0PBkzKJRsYqZOwXIYiZmhmZ77AT8PWH5OWzcIyzqDHzdq\n9ZKILnj1wjLJmEEyqlMo2fzg4i0e2T/h2TsCbZapTMt3DEcplNz4DPmSzY6RaOin54rBxI9uku0Q\nRrfhVhDcGW1Rlq97RaCFe2Vavm8qyV0TcUbiJrPbhtg7mRwYDUAxWIRlncGPG7V6ScGWPLJ/nJip\ns1qwiJk6j+wfp2C3HGC3IYE2y8DgTcsrDLK9cpAJyzpDmD2dmmHXWJxLS5l119YK9rqzJjol8MJ9\nEAmSvVINQt4TBoUmjG7DrXBwOsHX33iPRNRgOKqTypW4tpLj4/d5NwMLtFlmUAmKvVK57SkaEUa3\n4VY4t5Dlod1jjMRNskWHkbjJQ7vHOLeQ9ewdA6m591ub7PT9vfSY6CSt7brttfvOftdrswQlnd0m\nDDOQdplbyTEU1WH19rWhqO5pHx44zb3f2qQX7++Vx0SnaW1n0azdd/a7XpslKOlUdJeILvjBxVsU\nSvY6V8iI7p2/TCg091Y0oX5vAvHi/V7aK186ObfuNJgnj85WDxDoNK3tLJq1+85+12uzBCWdiu4i\ngLxlk0lZ2I5E1wSGLpQrZC2takL9dsHy4v1e2StfOjnHs988SzpXYnsyQjpX4tlvnuWlk3OepLUd\nt71239nvem2WoKRT4S0bzx14dymL40gyBYvVQolMwcJxJDcyBc/eGXjNvVVNqN8uWF693wt75Qsn\nrpCIGjVlp1WvP/HAro7T2o7bXrvv7He9NktQ0hl0/LSuUc+77cy1NAXLRtc0NOHq6+l8ifmVvGfv\nDbxwb3Vxsd8uWJX3L2cKXE/nWc6WMDTB5x+7u+vv3tjgry6vcdfYhrKL6iyk8+vSCu2XVauDULvv\n7He9NktQ0uk3WhHWfnMVrqeAFi2bvCUxNLt6n3TgZsY74R54s0yri4v9dsGqxKA/dyPDzWyRiYTJ\noR1Jvn1msauLavXMV0XLYSlTXHffasFmeiRWTWuvy6rdd/a7XpslKOn0E62aXuu5Ctu2wxdfPN2X\n4xjrmeJsKRGUwxBI97emwVrJ8ey9gdXcKyP56fkUV2/mODidZM9koilNqN8uWOcWsnxo/7Z1U/NU\nrtTVRbV62sOP7BzmjSspoqbOcFRntWCTLVh8/qO3ZxH9KKt239nvem2WoKTTL2xmeq38rtXoN87m\nF1fznFvIUHIcHtk30XNNvp4pDgQSie24MWWkrFz1jkAK99pp1707Rhgydc4uZFgr2dy3c9T327H7\nEdmv3jt/ZPc4ecvBQVS9ZT7/0bur3jJhxk82WcXmNOovb19LcWV57Q7zy5CpsZq3qsL0/GIWBEwm\no1VNHnrnoVTPFFcJG1bR0ysRZQbeFXLjSL53Msl4Ispo3OTpxw/2OXVb049FtUbvfGT/ZCDKzEv8\nZpNVbE6jtpvOW9w1PnSHRl+0bFK5EuAK0+VMEV2DA9sT1e/30kOpnmNBzNAp2vY6TV0CJbvRU1on\nkMK93khesCxePr0cCE2sm4tqjTRSPyzk+UVbVr7mwaJR2x2NG3XdSudT1jphOpGMMDMSZTJ5W2b0\n2kNpoynuK9+7gFle8XQkaGUpX3K8s7kHckF14yLqUibPqxduYeoiELv+urWottnCU78X8vq5M3Oj\nj/Hp+ZTyNQ8QjdrukZnRhs4Uh2dGefrxgzz36Qf5Zz91BE3TfBUmOWbqRA0NUXaDFEIQNTRipu7Z\nOwKpuW8cyU/NpRHAfTtH+mJTawevFtVqteEry2vsGI421Ej7uZDXL225ngnm6s0cQ6a+Lryq8jX3\nN43abjOzUT+GSb53e5ITl5YxNEHM0LCkJGc5vO+uAQ/5u7GyirbDB/eNMzV8e9o1CJrYRsH15pVb\npNfcYwcrZeGXcujX8XD1BpWD00nOLmQYT0SVr3mAaUVo+81DaXYywdvXUmSKNjkp0QWMRHRmJxNb\nf7lJAincYX1lffnlc9UFlAph18TOzKf44ounWc4UmUhGODCVYDLpHi94fjFbFe5+KYdmF5G9tsvX\nG1T2TCZYK9mMxs22NTm/rB8MOn4T2s1yY7XAaCKKad6OLTMUMbixqsIPrKMXi4V+6cwvnZzj33zn\nApeWsliOw66xGIWSzRtXVtg/OcTKWpHlTBFHSl9ppM3UUTe8WBoNKvftHG3bS0h52zSPX/qN30jn\n3aP1KhsGwd3rkt6whtAJgVxQ3YhXi4UbF94qi31+CdNaCfR1PZUnEdXRhODqrTzZgkXU0FjKlrh3\nxzATyYjvdj82U0fdOISkG2eOBuWwlH7jl37jR0bjBlJK8iV73e/RuHf6dkdPEkJcwg03bwOWlPJh\nIcQE8J+AvcAl4KellLc6S+bWdDo920wb84vrXCXQV65kY2iCZNQglSsxn8pzZGaY5UyRXWNx/tlP\nHfGFQN/IVnXUDbt8NxbT+rV+EDTq9ZvlTIEvvnia2Ymhgdbkj8yMMmTqXE8XSOdLjMRM9m4b8t0Z\nqn9dSrlU8/8zwCtSymeFEM+U//8nHrxnUzo9vedPT18nomvcv2sETZjrBHi/O3MljW9fSzEaMxCA\n7UgihsZI3DVxLK+V2JaM+kZTb4dWN3c1W+de22VVZMfm8FsYAD9x7P5pnvtWap3mninYnrpndsMs\n8ynghfLfLwB/qwvvWMeZ+RTPfesc3zl7g1NzK3zn7A2e+9bWwYFqp41IkFLy+uUVlsqR2SoCvFcn\nH22VxpGYwVrRoWA55C2JZTs4jqsRPXDXmG819mZpxYTSzyl/N0w9YWRjv6kXBmCQzVmpXJHrqTzz\nqTzXU3lSueLWX2qBToW7BP5UCPG6EOKp8rVpKeV8+e/rQN0WL4R4SgjxmhDitcXFxY4S8bUTl7m4\n5B4sOxJztamLS1m+duLypt+rnTYOx83qRoLzN9xnVQR4LzvzRrv/105crqbxod1jOFKiCYGpSSwH\n8pbDw3vGQ6H9tLJ20k+7d783hAWFjf1mOVNEStm3MAB+4qsnLnMrW2LHaIxD08PsGI1xK1viq1vI\nrFbo1CzzYSnlnBBiO/CyEOKHtR9KKaUQQtb7opTyeeB5gIcffrjuPc1y4sJNMnmLdL5ExNCYGIqQ\njOq8eXVzLa522nhgKsEbV1aI6oJUrlhtlBX7rNd223omBaBq9zd1+M7ZG5y/kWHvtiHeNzvGPdMj\npPMl3ryyQqYg2T5i8NRH9vJzf+2ettPhN5o1ofTbVBZUF7x6dMujZWO/8UMYAL/w5tUVLMfm3cU8\nJdvB1DW2JUzevLri2Ts6Eu5Syrny7xtCiD8GfhRYEELMSCnnhRAzwA0P0nkHtSF/37uVI25qJKIm\nti2ZT+WZSJgY+uYTk1rb6dRwjPfPjvH2tTSa0BiNm+sEuJedudHi7ZDpvrdk27x5JUXU0EhGdRbS\nBV6/7Lo6LmVK7J5IMBIzOLJzlB9ez1bDCwwSyu7tDd1266ztN7WmtEHfPLaaK3E9lcc0NExdw3Yk\nc7fy7PCwG7dtlhFCJIQQw5W/gY8Dp4AXgSfLtz0J/EmnidxIbSNJrZWImzprJYd8yUbX3JjIi5ki\nD+0e2/Q5G6eNEUNn/1SSX//pB3j68YM9ia1ea1J486ob8+T8jWw1zsRkMkrJcSc2taP6ge3JgbZZ\nKru3N/TSvKXMWbcpWA5C3A4YpgkQwr3uFZ1o7tPAH5cD3xjAf5BSHhdC/AD4QyHEZ4HLwE93nsz1\n1DbI1YLF7ok4l5bWKFg2mibQNIgKjc8c3bPpc/oVc6KRSUEiy6FMSwxH3aoxdI27xuMkIjpXb62x\ne3yIA9uTvgsv0Gv8GC8kiPTavBUmc1Yn6JogYmgULQfbAV2DiKGhaz6I5y6lvAA8WOf6TeCxThK1\nFbUNciRmki/Z7J0c4nq6wNRw1HVp3DnSVCPqpLG1a6uM6ILvnlukZEuSMYMDUwkihs5Du8dI5UpE\ndI1b2QLpvE3estk9PsSOkRgIwZGZkYamiE5tp37eTdgobX5JX1BR5q3+sC0ZJZ1z1wgrIX+ldK97\nRSB3qNa6WB3YnqBgOVgO7J9M8Mi+beyfSvKzW2jtndKuK96Z+RQL6QKreQtDg0LR4tULy1y+meUz\nR/fw1Ef2sWs0xlyqgO1Ido3FsBzJm1dXeOzeyYamiE5dA/28m9DPaQs6yrzVH/ZMxNGEIGYajA+Z\nxEwDTQj2THg3qAZSuNc2yIlElEPT7q6ukbKpphd2vFZtlRUXx1/8w5MsZQrcuyNJPGJQdFztfedo\nrKqJ3rNjhMcPb+fu7Ukk7rPfPzvGWlE2tFl2ajv185Z6P6ct6Cg7eH8Yipr8xD3biJoa2aJN1NT4\niXu2MRQ1t/5ykwQycNhGe+veyST/8NG7e9ogW7FVVjZZLWUKvHcrS8zUSedKHL17G1PDMRzpevjU\nPnt2W2LdVuQbqzlePn3bLPHZD+9dl99Obaf9di3cDD+nLQwo81bvcc1hBp+ucY+58xDtzgikcIet\nG2S37cet2Corm6yGYwbJqEnBcri1VuKv5lJ89N7YHd/b+OzKSVPDMaOhu1rtdxZX85xfzFbDATfj\nKuln22tt2pYyec7fyLKUKbAtGR1IN1BF8OlFJNtAmmW2ohc22lZslW9eTZGM6sRMnYlEBHAXUOZT\n+brf2/jseidNbTRLVL5zcTHDG5dXSOdK6BrMjESbyrufba+VtF1ayvDapVukciVMTWPHcHN5Uyj8\nRi/MYaEU7r2w0bZSORJZPeU8EXW1b0MXlGyn7vc2PrtoO9wzneDdxSx/evo6379wk4JlrTNLVL5z\nfbVAyXGf+/DecfZOJpvKu59tr5W0zacL2I67tvL+PWPsm2oubwqFH6k957Ub+2oCa5bZjF7ZaCum\noYoJ6Cvfu1TXBPTQ7jFevbAM5dg1uiYYjpp87PBEwwMjas1Ov/L1k5y4sMxwzGA4apAv2bx64RZH\n90/c8Z3ZiSEe2TeBJm77yzabdz/bXjvNm8Kf+Nn9NuiEUnPvZRTHZkxAnzm6h9ltQ9V0AMxuG9py\nk1UFCWzc2iDK1zfSzwiWFRodetIpfsibwjuUi2t3CaVw76X9uBkT0OGZUb5w7BCPHtrOfbtGefTQ\ndr5w7FDTGkrRlnxw3zhRUydTsImaOh/cN07RvlO899t23s0O2++8Kbxl0F1cu6UEVQilWaaXW9Ob\nNQFtZvLYampa8RY5un9b9Vojt6l+b8vv5qlV/c6bwlsG2cW1F+fwhlK4Q+/sx526EDZTya26TfXT\ndt7tDuvndQFFa/jZ/bbbHD+1wLf+ao61GivjkAGzE0Oete9QmmV6SaemgmbNOn71ZNmIsosrmmWQ\nzWzP/9k76wQ7wJrlXveK0GruvaJTU4EXZh0/0YvNGYpwMMhmtlyDyL6NrreDEu4e0Ing7cbUtJ/u\nZYPcYb1mENwEg6K0BBEl3Leg2x3Ma023Fws1W6E6bOf4oR4VwSY0wr0bQrgXHcxrTbeb3iqK3qHq\nsXMGYeazGaEQ7u0K4TPzKb524jJvXk0hkTy0e4zPHN1T/U6vOpiXmu4gu5eFCVWPnaFmPgEW7rWj\n8pXlNXYMR9cJ4VvZAl988TSzE0N1R+1KGN6LS1mSUR2B4NULy8yn8tUNRv3sYO1qHUF3Lxt0batC\n0Oux36iZT0BdITfugrx2a43/792b/Je35jhx4SbvLKT54fVVljPFhrskj59aYClTYDhmEI8YxCIG\nyZjBcrZYdUPsl1tfJ7s8g+xepraj3ybI9egH5lZyDMfW666DNvMJpOZeOyovrubJlRxsR5Ir2RRK\nNq9ezDAc1dk+Gq/6jle+Vxm1376W4uJShpItEUKQiOhsH47iSKoNoJnFzmY1zVY00k60jiB7qyht\n6zZBrkc/oGY+ARXuteaS84tZJpMRljIF8iWHqKFRsh1WC/BjU4nqd2pH7TPzKc4vrFIoOUgkjgO5\nos3NbJGYoTEcN6uHQGzWwZq16zVzX63wP30tzYO7RwCzbvq3wu/eKo0GOmVnXo/f69HPqP0WARXu\ntaNyJm9VR+fVgsVqwSIR1TE0janh24KiMmqfmU/xxRdPc3OtiCMllgNCuBEWpYSi5TBkauuE70YB\nXAntu7Sab0rT3Eoj3Sj831lYdUP63i2YTMbWpT/obDbQKW1L4RVq5hNQ4V47KiejOum8hRCCv35o\nislkjEtLGc5ez5DKlRiOGZy8eotT11bRBHzt+5cxNIjqOkXhIIREloMrasBQ1CBXcthbDgGwmZb+\n5+dv8uMHJthKw95KI90o/O/bOcKrF5Y5NZfmIwejvtU62ln83GygU9qWwksGfeYTSOFeOyqPxE3S\neYtD00kmElFSuRKapvH5x+7m3EKWV05f5+xCBpA40j3eDgRDER0ExE2NguUQMTQEkIwapPMlCpbF\ny6eXq4JrsY6WPj5kcvraKtsP3dYs62maW2mkG4X/1HCMD+4b5633Usyn8h1pHd3yPmnX1WyzgU5p\nWwqFdwRSuNcyNhRh+3AUAXcIwv3zKf7df78ISEzdFeJO2f6SLVromsB2XJu7ZUviEYNEVEcX4o4D\nqb93/iY/dvfEOgG9YyTKiYvLZE5eY1siwsxoDE3T7tA0j90/zZeOn2U5W6RYHkgmEhG+cOwQUF/4\nx0yDjx/Z0fCkpmbopq9vu4ufWw10g65tKRReEQpXyIihs1Zy+OyH9647i/D4qQVyRRtTF+iaQNME\nQgAChBDsHo9jO2DogripMx430ISgZDnVA6lvZgqcnk+zmi/xZz9cZHE1D8Diap7zN7JMD0fZloiw\nnC1x9nqGjx2eqiucKkfDyfL5SbVHxXXL7a2bhyG062qmXPwUit4QSM29Wa1xbiWHrgkcJDpgaoKC\n5ZpnIprgw/dsZ8+2jV3OBQAACKBJREFUNaZHotxYLZDOW4zGDd67leODe8YAeOPKClFDY+dolMs3\nc7x6YZkP7hvnzPwqEvjRfRPVRc9UrsS5hSxP1Env7okh7t91O22pXKmaXi/MEfXML930Pml38VOZ\nXhSK3hBI4T63ksPU4fsX0qTzJUZiJuNDBq9ezFUFxsHpBFeW10BKirbE0RxXgy97xowPuYPD3/3E\nnaeOf/nlc6RyJU7Pp5FSspQpsFa0iUd0DE3w1nspBIJH9o9XBTs0FpzNCNlOzBGNzC9DpsZqjTcR\neOd90sniZ7dNL2qXq6JZwtxWAinco7rgxIVlhmMGw1GD5WyBt6+l2DUaZ2bU9Zb5+hvvsX9yiOnR\nONdTOVfAS9A1jcNTCZ776QcbVmJFcM2v5MgWSgihoQnB+FAEBNw1HufIzCipXGnd9xoJzm67+DWa\nyRQtu5pGr71P/KqBq5giW9NNgRYkYRn2thJI4S4BUfN/Omfh2JLltSKvnLlBKlfE1AQ5S/Jjd2/j\n5Hupqonm40em1wUH20ilca7mS9xaK4KEkSGNiaEIiajBjXSet6+lAbh6M8fB6SR7JhObCs5uu/hV\nZgaLq3nOL2bJ5C2SUZ2RuMkvfvxg1wSwHxc/mzXZBUkIeUk3BVrQhGXYd0R3TbgLIY4BvwnowP8t\npXzWq2cXbckH941zYWmNTN4ib9mYpsByJMmoznzKRhMg0nmO7t/GY4djOFIyn8rzL/7OAw2fW9s4\nD8+M8MP5NOmcRTJiMBTRuZUtcjNTZCRucO+OEYZMnbMLGdZKNvftHG0oOLut5e4ai3NxMcO5Gxmi\nhlb1/U+X4+J04nETNJoxgQVNCHlJNwVa0IRl2HdEd0W4CyF04F8DjwPvAT8QQrwopTztxfMrZo6j\n+7cB8EevX2WtYDMU0RHC9WHPFmwK9u0zq5oxg2xsnLvGhzC0HJmihaFrZIoWEwmT6XLMmr2TScYT\nbjTKrQRoN7XcY/dP8/QfXAcBUcN1+QQ4NJ30bcfqFs2YwIImhLykmwItaMIy7Duiu+UK+aPAeSnl\nBSllEfgD4FNePXyjO50uBLbjkIwaSClJRg1sx0EXoiV3u43ufQe2J4iaOkOmwWOHtzNkGkRNnQPb\n68es6ReHZ0bZvS3OSMxgtWARM3U+sGeM2W2Jvqet1zTjajnIEQO7Gek0aIejh90tt1vCfRdwteb/\n98rXqgghnhJCvCaEeG1xcbGlh1fMHKNxk/lUnpmxOB/YM87YUITVgsXYUIQP7BlnZizOfMrdWdrM\nlHtj45xMxrh3xzATyQjzqTwTyQj37hhe5yHjl8Z7ZGaUIztH+fiRHXxo/zYmkzHfpK2XbGwb9eo+\naELIS7op0IImLJtpK0GmbwuqUsrngecBHn74Ydnq9zcG9Hr+uxfZGzfXLVj+kxYrqt7Cp6Zp/LOf\nOrIuwFclZo2fYp+ouCy32coENshl1c31H796UG2GH50CvEJI2bJc3fqhQhwFflVK+Yny/78MIKX8\nl/Xuf/jhh+Vrr73W0Tu98n7Y6jl+9rLwc9r8hiorRb/Z+8xLd1y79OzGLZCbI4R4XUr5cN3PuiTc\nDeAc8BgwB/wA+B+klG/Xu98L4a5QKBSDxmbCvStmGSmlJYT4eeBbuK6Qv9dIsCsUCoXCe7pmc5dS\nfgP4Rreer1AoFIrGBDIqpEKhUCg2Rwl3hUKhCCFKuCsUCkUI6Yq3TMuJEGIRuNzGVyeBJY+T42dU\nfsONym+46UZ+90gpp+p94Avh3i5CiNcauQGFEZXfcKPyG256nV9lllEoFIoQooS7QqFQhJCgC/fn\n+52AHqPyG25UfsNNT/MbaJu7QqFQKOoTdM1doVAoFHVQwl2hUChCSGCFuxDimBDirBDivBDimX6n\npxsIIS4JIf5KCPGXQojXytcmhBAvCyHeKf8e73c620UI8XtCiBtCiFM11+rmT7j8q3J9nxRCvL9/\nKW+PBvn9VSHEXLmO/1II8cmaz365nN+zQohP9CfV7SGE2C2E+DMhxGkhxNtCiF8oXw9l/W6S3/7V\nr5QycD+4kSbfBfYDEeAt4Ei/09WFfF4CJjdc+xLwTPnvZ4D/q9/p7CB/HwHeD5zaKn/AJ4FvAgL4\nEPBqv9PvUX5/FfilOvceKbfrKLCv3N71fuehhbzOAO8v/z2MGwL8SFjrd5P89q1+g6q5d/WMVp/z\nKeCF8t8vAH+rj2npCCnld4HlDZcb5e9TwO9Ll+8DY0KImd6k1Bsa5LcRnwL+QEpZkFJeBM7jtvtA\nIKWcl1K+Uf57FTiDe9RmKOt3k/w2ouv1G1ThvuUZrSFBAn8qhHhdCPFU+dq0lHK+/Pd1wJ8HVLZP\no/yFuc5/vmyK+L0aM1to8iuE2As8BLzKANTvhvxCn+o3qMJ9UPiwlPL9wE8CnxNCfKT2Q+nO70Lr\nyxr2/JX5HeBu4H3APPDr/U2OtwghksB/Bv6xlDJd+1kY67dOfvtWv0EV7nPA7pr/7ypfCxVSyrny\n7xvAH+NO2xYq09Xy7xv9S2FXaJS/UNa5lHJBSmlLKR3gd7k9NQ98foUQJq6g+/dSyq+XL4e2fuvl\nt5/1G1Th/gPgHiHEPiFEBPgZ4MU+p8lThBAJIcRw5W/g48Ap3Hw+Wb7tSeBP+pPCrtEofy8C/2PZ\nq+JDQKpmeh9YNtiV/zZuHYOb358RQkSFEPuAe4C/6HX62kUIIYCvAGeklL9R81Eo67dRfvtav/1e\nZe5gdfqTuCvS7wK/0u/0dCF/+3FX098C3q7kEdgGvAK8A3wbmOh3WjvI43/EnaqWcG2On22UP1wv\nin9dru+/Ah7ud/o9yu9Xy/k5We7wMzX3/0o5v2eBn+x3+lvM64dxTS4ngb8s/3wyrPW7SX77Vr8q\n/IBCoVCEkKCaZRQKhUKxCUq4KxQKRQhRwl2hUChCiBLuCoVCEUKUcFcoFIoQooS7QqFQhBAl3BUK\nhSKE/P+9ZYURGmdiLwAAAABJRU5ErkJggg==\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"DaTRSF65HHjE","colab_type":"text"},"source":["We can see some interesting structure. Let's organize in order to be able to quickly check what happens if we focus on different components of each element in the dataset."]},{"cell_type":"code","metadata":{"id":"4h9nvORdHHjF","colab_type":"code","colab":{}},"source":["def scatter_plot(data, x_index, y_index):\n","\n","    x_points = [d[x_index] for d in data]\n","    y_points = [d[y_index] for d in data]\n","    return plt.scatter(x_points, y_points, alpha=0.5)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"rowB1mFHHHjL","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"ebe89801-f84c-4f35-a835-cb2e1343c961","executionInfo":{"status":"ok","timestamp":1585734484399,"user_tz":-120,"elapsed":1367,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["scatter_plot(data, 30, 31)\n","plt.show()"],"execution_count":27,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nhSKE/P+9ZYURGmdiLwAAAABJRU5ErkJggg==\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"YQkb33UvHHjR","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"f40feb69-bddf-4ee2-c78d-c90da5ca2659","executionInfo":{"status":"ok","timestamp":1585734498965,"user_tz":-120,"elapsed":1033,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["scatter_plot(data, 31, 32)\n","plt.show()"],"execution_count":28,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"CU3EEQOcHHjY","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"43d397e2-f950-44c5-f4ba-26df2e52c0e7","executionInfo":{"status":"ok","timestamp":1585734507436,"user_tz":-120,"elapsed":1384,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["scatter_plot(data, 31, 33)\n","plt.show()"],"execution_count":29,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nVYTYAAAAAElFTkSuQmCC\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"OgUeHAyAHHjd","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"5faffc43-7165-4dbe-bb28-16c9383d61ca","executionInfo":{"status":"ok","timestamp":1585734515502,"user_tz":-120,"elapsed":1051,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["scatter_plot(data, 33, 34)\n","plt.show()"],"execution_count":30,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nTkSuQmCC\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"Z2aPAO78HHji","colab_type":"text"},"source":["We see that points in the last graph tend to concentrate in different regions. We can apply a clustering algorithm in order to get more information about such regions."]},{"cell_type":"markdown","metadata":{"id":"Tb-ESONzHHjj","colab_type":"text"},"source":["The mathematical condition for the $K$ clusters $C_k$ and the $K$ centroids $\\mu_k$ can be expressed as:\n","\n","$$ \\text{Minimize} \\displaystyle \\sum_{k=1}^K \\sum_{\\mathrm{x}_n \\in C_k} ||\\mathrm{x}_n - \\mu_k ||^2 \\text{ with respect to } \\displaystyle C_k, \\mu_k $$"]},{"cell_type":"markdown","metadata":{"id":"fRMiZ75GHHjk","colab_type":"text"},"source":["An iterative method known as Lloyd’s algorithm exists that converges (albeit to a local minimum) in few steps. The procedure alternates between two operations.\n","\n","* Once a set of centroids $\\mu_k$ is available, the clusters are updated to contain the points closest in distance to each centroid:\n","\n","$$ \\displaystyle C_k = \\{\\mathrm{x}_n : ||\\mathrm{x}_n - \\mu_k|| \\leq \\mathrm{\\,\\,all\\,\\,} ||\\mathrm{x}_n - \\mu_l||\\} $$\n","\n","* Given a set of clusters, the centroids are recalculated as the means of all points belonging to a cluster:\n","\n","$$ \\displaystyle \\mu_k = \\frac{1}{C_k}\\sum_{\\mathrm{x}_n \\in C_k}\\mathrm{x}_n $$\n","\n","The two-step procedure continues until the assignments of clusters and centroids no longer change."]},{"cell_type":"code","metadata":{"id":"ghOgLjmsHHjm","colab_type":"code","colab":{}},"source":["import numpy as np\n","import random\n","\n","from datetime import datetime\n","random.seed(datetime.now())\n"," \n","def cluster_points(X, mu):\n","    clusters  = {}\n","    for x in X:\n","        bestmukey = min([(i[0], np.linalg.norm(x-mu[i[0]])) \\\n","                    for i in enumerate(mu)], key=lambda t:t[1])[0]\n","        try:\n","            clusters[bestmukey].append(x)\n","        except KeyError:\n","            clusters[bestmukey] = [x]\n","    return clusters\n"," "],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"iYDVPovZHHjr","colab_type":"code","colab":{}},"source":["def reevaluate_centers(mu, clusters):\n","    newmu = []\n","    keys = sorted(clusters.keys())\n","    for k in keys:\n","        newmu.append(np.mean(clusters[k], axis = 0))\n","    return newmu"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"-vMUr9wVHHj9","colab_type":"code","colab":{}},"source":["def has_converged(mu, oldmu):\n","    return (set([tuple(a) for a in mu]) == set([tuple(a) for a in oldmu]))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"-Tk66jbrHHkC","colab_type":"code","colab":{}},"source":["def find_centers(X, K):\n","    # Initialize to K random centers\n","    oldmu = random.sample(X, K)\n","    mu = random.sample(X, K)\n","    while not has_converged(mu, oldmu):\n","        oldmu = mu\n","        # Assign all points in X to clusters\n","        clusters = cluster_points(X, mu)\n","        # Reevaluate centers\n","        mu = reevaluate_centers(oldmu, clusters)\n","\n","    return(mu, clusters)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"V7SaY59FHHkG","colab_type":"code","colab":{}},"source":["K = 2\n","X = [np.array( (d[33], d[34]) ) for d in data]\n","\n","oldmu = random.sample(X, K)\n","mu = random.sample(X, K)\n","clusters = cluster_points(X, mu)\n","mu = reevaluate_centers(oldmu, clusters)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"nZRMfNafHHkM","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"ff88bdc9-0630-41dc-8eac-dae8643f744a","executionInfo":{"status":"ok","timestamp":1585734645997,"user_tz":-120,"elapsed":642,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["clusters.keys()"],"execution_count":41,"outputs":[{"output_type":"execute_result","data":{"text/plain":["dict_keys([0, 1])"]},"metadata":{"tags":[]},"execution_count":41}]},{"cell_type":"code","metadata":{"id":"WsJyrMptHHkR","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":266},"outputId":"7dddcac7-c785-466f-b99e-3df36018099c","executionInfo":{"status":"ok","timestamp":1585734657781,"user_tz":-120,"elapsed":1110,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["mu_x = [m[0] for m in mu]\n","mu_y = [m[1] for m in mu]\n","plt.scatter(mu_x, mu_y, marker=\"*\", s=200, c='red')\n","plt.show()"],"execution_count":43,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nTkSuQmCC\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"AnTODemRHHkX","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"a1526fd2-7dfa-4890-e2e8-1698a74358fe","executionInfo":{"status":"ok","timestamp":1585734666737,"user_tz":-120,"elapsed":1060,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["points_x = [d[0] for k in clusters.keys() for d in clusters[k] ]\n","points_y = [d[1] for k in clusters.keys() for d in clusters[k] ]\n","\n","colors = [1.*k/len(clusters.keys()) for k in clusters.keys() for d in clusters[k] ]\n","plt.scatter(points_x, points_y, alpha=0.9, c=colors, s=30)\n","plt.show()"],"execution_count":44,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nrkJggg==\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"0Vh4tstnHHkc","colab_type":"code","colab":{}},"source":["def show_clustering(mu, clusters):\n","    mu_x = [m[0] for m in mu]\n","    mu_y = [m[1] for m in mu]\n","    \n","    points_x = [d[0] for k in clusters.keys() for d in clusters[k] ]\n","    points_y = [d[1] for k in clusters.keys() for d in clusters[k] ]\n","\n","    colors = [1.*k/len(clusters.keys()) for k in clusters.keys() for d in clusters[k] ]\n","    \n","    plt.scatter(points_x, points_y, alpha=0.9, c=colors, s=30)\n","    plt.scatter(mu_x, mu_y, marker=\"*\", s=200, c='red')\n","    \n","    return plt"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"SiUHB1DsHHkj","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"9ffd9149-2495-4172-a494-c13587e1a789","executionInfo":{"status":"ok","timestamp":1585734678213,"user_tz":-120,"elapsed":1011,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["show_clustering(mu, clusters)\n","plt.show()"],"execution_count":46,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"fAy1qRsEHHkn","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"2413f02a-9271-4349-8e46-e78fca5f4d92","executionInfo":{"status":"ok","timestamp":1585734687762,"user_tz":-120,"elapsed":1818,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["oldmu = mu\n","clusters = cluster_points(X, mu)\n","mu = reevaluate_centers(oldmu, clusters)\n","show_clustering(mu, clusters)\n","plt.show()"],"execution_count":47,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"XmdAmhWmHHks","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"adbf6ced-9d7c-4d7a-c165-bc0f6fb9c635","executionInfo":{"status":"ok","timestamp":1585734698027,"user_tz":-120,"elapsed":1392,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["oldmu = mu\n","clusters = cluster_points(X, mu)\n","mu = reevaluate_centers(oldmu, clusters)\n","show_clustering(mu, clusters)\n","plt.show()"],"execution_count":48,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nAib8tpz99XmlAAAAAElFTkSuQmCC\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"o1hOM38iHHkx","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"45201f6b-3989-49f3-8f24-4a5fd659e237","executionInfo":{"status":"ok","timestamp":1585734704053,"user_tz":-120,"elapsed":1261,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["oldmu = mu\n","clusters = cluster_points(X, mu)\n","mu = reevaluate_centers(oldmu, clusters)\n","show_clustering(mu, clusters)\n","plt.show()"],"execution_count":49,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nAib8tpz99XmlAAAAAElFTkSuQmCC\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"uvZuAB6vHHk2","colab_type":"text"},"source":["What would happen if we would use, say, $k=5$?"]},{"cell_type":"code","metadata":{"id":"zalxydkKHHk3","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"c9c05c49-b3e7-4e1d-eb86-ec78f24ab7b8","executionInfo":{"status":"ok","timestamp":1585734713568,"user_tz":-120,"elapsed":1931,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["K = 5\n","X = [np.array( (d[33], d[34]) ) for d in data]\n","\n","mu, clusters = find_centers(X, K)\n","\n","show_clustering(mu, clusters)\n","plt.show()"],"execution_count":50,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nSUVORK5CYII=\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"lMm_ETIgHHk9","colab_type":"text"},"source":["Let's use the clustering procedures provided within spark MLlib."]},{"cell_type":"code","metadata":{"id":"2JilAAAOHHk9","colab_type":"code","colab":{}},"source":["from pyspark.mllib.clustering import KMeans"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"zWcoP5GXHHlC","colab_type":"text"},"source":["We start by checking how data distributes over the available labels"]},{"cell_type":"code","metadata":{"id":"VhZ1omX1HHlD","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":224},"outputId":"7c5d08ed-7082-4ba5-ec17-91801ad03457","executionInfo":{"status":"ok","timestamp":1585734831226,"user_tz":-120,"elapsed":1870,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["count = raw_data.map(lambda line: line.split(',')[-1]).countByValue()\n","sorted(list(count.items()), key=lambda e: -e[1])"],"execution_count":56,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[('smurf.', 2767),\n"," ('neptune.', 1044),\n"," ('normal.', 962),\n"," ('back.', 24),\n"," ('teardrop.', 21),\n"," ('portsweep.', 15),\n"," ('ipsweep.', 13),\n"," ('satan.', 11),\n"," ('warezclient.', 3),\n"," ('ftp_write.', 1),\n"," ('nmap.', 1),\n"," ('pod.', 1)]"]},"metadata":{"tags":[]},"execution_count":56}]},{"cell_type":"markdown","metadata":{"id":"6zHTsG2hHHlI","colab_type":"text"},"source":["The next step consists in converting each data in a vector of pure numbers. We'll simply ignore non-numerical items. We also extract the last item from each line, denoting a label for the corresponding network connection."]},{"cell_type":"code","metadata":{"id":"LSMf2bGoHHlJ","colab_type":"code","colab":{}},"source":["from pyspark.mllib.linalg import Vectors\n","\n","def to_example(line):\n","    elements = line.split(',')\n","    vector = Vectors.dense([float(f) for f in [elements[0]] + elements[4:-1]])\n","    label = elements[-1]\n","    return (label, vector)\n","    \n","labels_and_data = raw_data.map(to_example)\n","data = labels_and_data.values().cache()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"WCzUiUPBHHlN","colab_type":"text"},"source":["As a first attempt, let's group using two clusters"]},{"cell_type":"code","metadata":{"id":"PYGTIHDsHHlO","colab_type":"code","colab":{}},"source":["model = KMeans.train(data, 2)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"Ik0YSCJmHHlU","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":327},"outputId":"2e908317-b92c-445f-ee03-c277c6f47991","executionInfo":{"status":"ok","timestamp":1585734861024,"user_tz":-120,"elapsed":978,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["model.clusterCenters"],"execution_count":59,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[array([4.61410942e+01, 9.30050596e+02, 6.90662485e+02, 0.00000000e+00,\n","        1.31633073e-02, 0.00000000e+00, 2.73549979e-02, 0.00000000e+00,\n","        1.47881530e-01, 4.93624023e-03, 0.00000000e+00, 0.00000000e+00,\n","        1.64541341e-03, 0.00000000e+00, 2.05676676e-04, 8.22706705e-04,\n","        0.00000000e+00, 0.00000000e+00, 1.23406006e-03, 3.32396339e+02,\n","        2.93375566e+02, 1.81116824e-01, 1.81176471e-01, 5.04113534e-02,\n","        5.04956808e-02, 7.93543809e-01, 1.99897162e-02, 3.11373920e-02,\n","        2.31922666e+02, 1.88871452e+02, 7.55174825e-01, 3.09132044e-02,\n","        6.01478815e-01, 6.67215138e-03, 1.80723982e-01, 1.80705471e-01,\n","        5.19354175e-02, 5.07322090e-02]),\n"," array([6.40000e+01, 7.25000e+02, 2.29337e+06, 0.00000e+00, 0.00000e+00,\n","        0.00000e+00, 0.00000e+00, 0.00000e+00, 1.00000e+00, 0.00000e+00,\n","        0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00,\n","        0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 1.00000e+00,\n","        1.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00,\n","        1.00000e+00, 0.00000e+00, 0.00000e+00, 1.55000e+02, 2.10000e+01,\n","        1.30000e-01, 3.00000e-02, 1.00000e-02, 1.00000e-01, 0.00000e+00,\n","        0.00000e+00, 0.00000e+00, 0.00000e+00])]"]},"metadata":{"tags":[]},"execution_count":59}]},{"cell_type":"markdown","metadata":{"id":"IG1MfDOrHHlc","colab_type":"text"},"source":["As a first evaluation of the goodness of the obtained clustering, let's check how many points fall in the two clusters, grouping the former according to their label:"]},{"cell_type":"code","metadata":{"id":"56-nf6GVHHld","colab_type":"code","colab":{}},"source":["cluster_label_count = labels_and_data.map(lambda e: (model.predict(e[1]), e[0])).countByValue()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"GiztiyhiHHli","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":241},"outputId":"f4a421e7-79c8-4642-a808-cdf8168189ae","executionInfo":{"status":"ok","timestamp":1585734943364,"user_tz":-120,"elapsed":1152,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["for (cluster, label), count in sorted(cluster_label_count.items()):\n","    print('{}\\t{:15s}\\t{}'.format(cluster, label, count))"],"execution_count":66,"outputs":[{"output_type":"stream","text":["0\tback.          \t24\n","0\tftp_write.     \t1\n","0\tipsweep.       \t13\n","0\tneptune.       \t1044\n","0\tnmap.          \t1\n","0\tnormal.        \t961\n","0\tpod.           \t1\n","0\tportsweep.     \t15\n","0\tsatan.         \t11\n","0\tsmurf.         \t2767\n","0\tteardrop.      \t21\n","0\twarezclient.   \t3\n","1\tnormal.        \t1\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"kb47OT2tHHln","colab_type":"text"},"source":["The result isn't that good: most of items are contained in one of the clusters. Let's try to measure how good a clustering is, computing the average distance of points w.r.t. the assigned centroid's cluster."]},{"cell_type":"code","metadata":{"id":"oE17xr7gHHln","colab_type":"code","colab":{}},"source":["import math\n","\n","def distance(a, b):\n","    return math.sqrt(sum([e**2 for e in a-b]))\n","\n","def dist_to_centroid(item, model):\n","    cluster = model.predict(item)\n","    centroid = model.clusterCenters[cluster]\n","    return distance(centroid, item)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"alxL_7A4HHlt","colab_type":"text"},"source":["We can use this measure in order to evaluate how many clusters should be used: we start by writing a function building a clustering from data (using a given number of clusters), and returns the average distance measure."]},{"cell_type":"code","metadata":{"id":"Q9b9yP0BHHlu","colab_type":"code","colab":{}},"source":["def clustering_score(data, k, epsilon=1e-4):\n","    model = KMeans.train(data, k, runs=runs, epsilon=epsilon)\n","    return data.map(lambda item: dist_to_centroid(item, model)).mean()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"Ozr1tzbMHHl0","colab_type":"code","colab":{}},"source":["performance = [(k, clustering_score(data, k)) for k in range(5, 40, 5)]"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"KKo_eK4iHHl4","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":138},"outputId":"374bd7fd-87e9-45d4-e1e9-4c929298a1c6","executionInfo":{"status":"ok","timestamp":1585734974999,"user_tz":-120,"elapsed":855,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["performance"],"execution_count":70,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(5, 1322.2924614789038),\n"," (10, 739.7495956949363),\n"," (15, 374.95543152231096),\n"," (20, 349.40534404651896),\n"," (25, 279.5652375539504),\n"," (30, 349.2495601936975),\n"," (35, 218.83444735554502)]"]},"metadata":{"tags":[]},"execution_count":70}]},{"cell_type":"markdown","metadata":{"id":"fEJXtriwHHmA","colab_type":"text"},"source":["Thus the average distance decreases when the number of clusters increases. That is more than reasonable (should we use a number of clusters as big as the number of points, we would probably have each of the clusters centered on a point, and thus a null average distance). We can exploit this fact, increasing the number $k$ of clusters and stopping when we don't have significant amounts in the decrease of the average distance."]},{"cell_type":"code","metadata":{"id":"59sC1C-yHHmB","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"de077403-a616-4ebc-a3a1-a946932d6bb6","executionInfo":{"status":"ok","timestamp":1585734993199,"user_tz":-120,"elapsed":921,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["%matplotlib inline\n","\n","import matplotlib.pyplot as plt\n","plt.plot(*zip(*performance))\n","plt.show()"],"execution_count":71,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"bThnGMWVHHmI","colab_type":"text"},"source":["We typically call such a point in the graph an *ankle*, and in the above picture a good candidate for the ankle could be in correspondence the final part of the graph. We can check this fact by generating again this graph, now using a higher range for $k$."]},{"cell_type":"code","metadata":{"id":"bfrvdFEfHHmO","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"3b8121c0-2e38-4ea5-8a9a-285b187a35b4","executionInfo":{"status":"ok","timestamp":1585736695891,"user_tz":-120,"elapsed":109301,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["performance = [(k, clustering_score(data, k, epsilon=1e-4)) for k in range(30, 300, 10)]\n","plt.plot(*zip(*performance))\n","plt.show()"],"execution_count":125,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"BJ4IW-FTHHmT","colab_type":"text"},"source":["The graph suggests $k=130$ as the optimal value. Let's compute the clustering for the optimal value of the number of clusters."]},{"cell_type":"code","metadata":{"id":"XTeNrPnjHHmU","colab_type":"code","colab":{}},"source":["model = KMeans.train(data, 130, epsilon=1e-6)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"_yBxY8O3HHmb","colab_type":"text"},"source":["The points we are clustering belong to a space with dimenstion $38$, thus it is not possible to show them in a graph together with the cluster centroids, thus being able to validate or refute the obtained result. However, we can project each point in a 3D space. We will use a theoric result showing that, fixed $s \\geq 3$ and defining the generic element $m_{ij}$ of the projecting matrix as\n","\n","\\begin{equation}\n","m_{ij} = \\begin{cases}\n","+1 & \\text{with probability $\\frac{1}{2 s}$} \\\\\n","0  & \\text{with probability $1-\\frac{1}{s}$} \\\\\n","-1 & \\text{with probability $\\frac{1}{2 s}$}\n","\\end{cases},\n","\\end{equation}\n","\n","on the average the distances between the projected points will reflect distances in the original space."]},{"cell_type":"code","metadata":{"id":"9gjyMWsRHHmc","colab_type":"code","colab":{}},"source":["import random as rnd\n","\n","def sparse_random_projection(s, n, k):\n","    '''from Ping Li, Trevor Hastie and Kenneth Church,\n","    Very Sparse Random Projections, KDD ’06\n","    \n","    s: projection parameter (should be geq 3)\n","    n: original space dimension\n","    k: reduced space dimension\n","    '''\n","    def prob(s):\n","        u = rnd.random()\n","        return 1 if u < 1. / (2*s) else -1 if u < 2. / (2*s) else 0\n","    \n","    return np.matrix([[prob(s) for i in range(n)] for j in range(k)])\n","\n","def project(matrix, point):\n","    return list(matrix.dot(point).getA()[0])"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Mzawbyl0HHmf","colab_type":"text"},"source":["The `project` function handles the projection of one object in the 3D space, returning the projected point expressed as alist. We are now able to project all points and color them according to the cluster they have been assigned to."]},{"cell_type":"code","metadata":{"id":"s91SOAgcHHmg","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":248},"outputId":"e3576bdf-075d-48dd-eed6-159c364bff36","executionInfo":{"status":"ok","timestamp":1585735148317,"user_tz":-120,"elapsed":4046,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["clusters = data.map(lambda item: (np.array(item), model.predict(item))).sample(False, .1).collect()\n","points, colors = zip(*clusters)\n","\n","matrix = sparse_random_projection(3, len(points[0]), 3)\n","xs, ys, zs = zip(*[project(matrix, p) for p in points])\n","\n","from mpl_toolkits.mplot3d import Axes3D\n","\n","fig = plt.figure()\n","ax = fig.add_subplot(111, projection='3d')\n","ax.scatter(xs, ys, zs, c=colors)\n","plt.show()"],"execution_count":76,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n3HAi/h/DD3y0h1LT2QAAAABJRU5ErkJggg==\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"cuY1cCbVHHml","colab_type":"text"},"source":["We see how the variance over one dimension is significantly higher than that on the remaining dimensions. This suggests us that data should be normalized before recomputing the clustering."]},{"cell_type":"code","metadata":{"id":"RclNw59uHHml","colab_type":"code","colab":{}},"source":["def build_normalization_function(data):\n","    data_as_list = data.map(list)\n","    num_cols = len(data_as_list.first())\n","    n = data_as_list.count()\n","    sums = data_as_list.reduce(lambda a, b: [ai+bi for ai, bi in zip(a, b)])\n","    sumsquares = data_as_list.map(lambda v: [vi**2 for vi in v]).reduce(lambda a, b: [ai+bi for ai, bi in zip(a, b)])\n","    stdevs = [math.sqrt(n*ss - s*s)/n for ss, s in zip(sumsquares, sums)]\n","    means = [s/n for s in sums]\n","    \n","    return lambda item: Vectors.dense([0 if s==0 else (i - m)/s for i, m, s in zip(item, means, stdevs)])"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"W9yE-noSHHmp","colab_type":"code","colab":{}},"source":["normalize = build_normalization_function(data)\n","normalized_data = data.map(normalize).cache()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"jTOJKX-6HHmv","colab_type":"code","colab":{}},"source":["performance = [(k, clustering_score(normalized_data, k)) for k in range(150, 400, 20)]"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"lXasc8tqHHmz","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"b6a70e00-e4cd-4589-a403-ffbd1b5785ab","executionInfo":{"status":"ok","timestamp":1585737418284,"user_tz":-120,"elapsed":949,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["plt.plot(*zip(*performance))\n","plt.show()"],"execution_count":138,"outputs":[{"output_type":"display_data","data":{"image/png":"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\npp+n6AAAAABJRU5ErkJggg==\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"O7wiUaNIHHm3","colab_type":"text"},"source":["This graph suggests $k=300$ as an optimal number of clusters. Let's compute the optimal clustering and show the corresponding projected data."]},{"cell_type":"code","metadata":{"id":"K1jqGRkjHHm3","colab_type":"code","colab":{}},"source":["model = KMeans.train(normalized_data, 300)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"jbWdSWHUHHnB","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":248},"outputId":"36b53f1d-5137-456e-95c0-e268a82da152","executionInfo":{"status":"ok","timestamp":1585737447666,"user_tz":-120,"elapsed":7946,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["clusters = normalized_data.map(lambda item: (np.array(item), model.predict(item))).sample(False, .1).collect()\n","points, colors = zip(*clusters)\n","\n","matrix = sparse_random_projection(3, len(points[0]), 3)\n","xs, ys, zs = zip(*[project(matrix, p) for p in points])\n","\n","from mpl_toolkits.mplot3d import Axes3D\n","\n","fig = plt.figure()\n","ax = fig.add_subplot(111, projection='3d')\n","ax.scatter(xs, ys, zs, c=colors)\n","plt.show()"],"execution_count":140,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"-ADTbzYMHHnH","colab_type":"text"},"source":["We can compute the average entropy for points in a same cluster, and use the result as an alternate value of the clustering performance."]},{"cell_type":"code","metadata":{"id":"XPobG5ZwHHnI","colab_type":"code","colab":{}},"source":["def entropy(counts):\n","    values = [c for c in counts if c>0]\n","    n = float(sum(values))\n","    return sum([-v/n * math.log(v/n) for v in values])"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"trT9Z264HHnM","colab_type":"code","colab":{}},"source":["from itertools import groupby\n","\n","def clustering_score_entropy(normalized_labels_and_data, k, runs=1, epsilon=1e-4):\n","    model = KMeans.train(normalized_labels_and_data.values(), k, runs=runs, epsilon=epsilon)\n","    labels_and_clusters = normalized_labels_and_data.mapValues(model.predict)\n","    clusters_and_labels = labels_and_clusters.map(lambda i: list(reversed(i)))\n","    labels_in_clusters = clusters_and_labels.groupByKey().values()\n","    label_counts = labels_in_clusters.map(lambda l: [len(list(v)) for k, v in groupby(sorted(l))])\n","    n = normalized_labels_and_data.count()\n","    return label_counts.map(lambda m: sum(m) * entropy(m)).sum() / n"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"b-Uyi935HHnS","colab_type":"code","colab":{}},"source":["def build_categorical_data_and_label(raw_data):\n","    split_data = raw_data.map(lambda line: line.split(','))\n","    protocols_list = split_data.map(lambda line: line[1]).distinct().collect()\n","    protocols = dict(zip(protocols_list, range(len(protocols_list))))\n","    \n","    services_list = split_data.map(lambda line: line[2]).distinct().collect()\n","    services = dict(zip(services_list, range(len(services_list))))\n","    \n","    tcp_states_list = split_data.map(lambda line: line[3]).distinct().collect()\n","    tcp_states = dict(zip(tcp_states_list, range(len(tcp_states_list))))\n","    \n","    def to_categorical_data_and_label(line):\n","        buf = line.split(',')\n","        protocol = buf.pop(1)\n","        service = buf.pop(1)\n","        tcp_state = buf.pop(1)\n","        label = buf.pop()\n","        vector = [float(f) for f in buf]\n","        new_protocol_features = [0.] * len(protocols)\n","        new_protocol_features[protocols[protocol]] = 1.0\n","        new_service_features = [0.] * len(services)\n","        new_service_features[services[service]] = 1.0\n","        new_tcp_states_features = [0.] * len(tcp_states)\n","        new_tcp_states_features[tcp_states[tcp_state]] = 1.0\n","        \n","        vector[1:1] = new_tcp_states_features\n","        vector[1:1] = new_service_features\n","        vector[1:1] = new_protocol_features\n","        \n","        return (label, Vectors.dense(vector))\n","    return to_categorical_data_and_label"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"scrolled":true,"id":"oyUxVe3CHHnZ","colab_type":"code","colab":{}},"source":["to_categorical_data_and_label = build_categorical_data_and_label(raw_data)\n","labels_and_data = raw_data.map(to_categorical_data_and_label)\n","normalize = build_normalization_function(labels_and_data.values())\n","normalized_labels_and_data = labels_and_data.mapValues(normalize).cache()\n","\n","performance = [(k, clustering_score_entropy(normalized_labels_and_data, k)) for k in range(150, 300, 20)]"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"tKzen3F8HHnd","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":265},"outputId":"94184f1e-425e-4607-badc-8a6be66bf99b","executionInfo":{"status":"ok","timestamp":1585737199790,"user_tz":-120,"elapsed":1121,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["plt.plot(*zip(*performance))\n","plt.show()"],"execution_count":131,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"kckAoXjQHHni","colab_type":"text"},"source":["Let's use $k=220$ in order to build the clustering, and let's check as in the beginning of the tutorial how many points belong to each cluster, grouping the results with labels."]},{"cell_type":"code","metadata":{"id":"n6PKacETHHnj","colab_type":"code","colab":{}},"source":["model = KMeans.train(normalized_labels_and_data.values(), 220)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"luR2XFONHHnl","colab_type":"code","colab":{}},"source":["cluster_label_count = normalized_labels_and_data.map(lambda e: (model.predict(e[1]), e[0])).countByValue()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"0KjWiyyZHHnp","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1000},"outputId":"249560f4-95bd-41c6-d1a9-3d24cc3ce2e4","executionInfo":{"status":"ok","timestamp":1585737234783,"user_tz":-120,"elapsed":847,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["for (cluster, label), count in sorted(cluster_label_count.items()):\n","    print('{}\\t{:15s}\\t{}'.format(cluster, label, count))"],"execution_count":134,"outputs":[{"output_type":"stream","text":["0\tneptune.       \t153\n","1\tsmurf.         \t2579\n","2\tnormal.        \t1\n","3\tneptune.       \t1\n","4\tneptune.       \t1\n","5\tneptune.       \t2\n","6\tnormal.        \t1\n","7\tnormal.        \t10\n","8\tnormal.        \t4\n","9\tnormal.        \t5\n","10\tneptune.       \t3\n","11\tnormal.        \t7\n","12\tportsweep.     \t3\n","13\tnormal.        \t1\n","14\tneptune.       \t1\n","15\tnormal.        \t2\n","16\tneptune.       \t1\n","17\tnormal.        \t1\n","18\tnormal.        \t1\n","19\tneptune.       \t1\n","20\tnormal.        \t1\n","21\tneptune.       \t1\n","22\tneptune.       \t1\n","23\tneptune.       \t1\n","24\tneptune.       \t72\n","25\tneptune.       \t1\n","26\tneptune.       \t2\n","27\tnormal.        \t1\n","28\tipsweep.       \t8\n","29\tnormal.        \t10\n","29\twarezclient.   \t1\n","30\tteardrop.      \t1\n","31\tneptune.       \t2\n","32\tneptune.       \t1\n","33\tnormal.        \t1\n","34\tipsweep.       \t2\n","35\tnormal.        \t133\n","36\tback.          \t10\n","37\tneptune.       \t2\n","38\tneptune.       \t1\n","39\tneptune.       \t1\n","40\tnormal.        \t4\n","41\tneptune.       \t1\n","42\tneptune.       \t1\n","43\tneptune.       \t1\n","44\tneptune.       \t1\n","45\tneptune.       \t1\n","46\tnormal.        \t1\n","47\tneptune.       \t1\n","48\tnormal.        \t1\n","49\tnormal.        \t73\n","50\tneptune.       \t1\n","51\tnormal.        \t16\n","52\twarezclient.   \t1\n","53\tteardrop.      \t2\n","54\tportsweep.     \t2\n","55\tneptune.       \t1\n","56\tneptune.       \t3\n","57\tnormal.        \t1\n","58\tnormal.        \t1\n","59\tsatan.         \t3\n","60\tnormal.        \t3\n","61\tneptune.       \t1\n","62\tneptune.       \t4\n","63\tnormal.        \t2\n","64\tnormal.        \t4\n","65\tnormal.        \t1\n","66\tipsweep.       \t1\n","67\tnormal.        \t9\n","68\tnormal.        \t2\n","69\tnormal.        \t1\n","70\tneptune.       \t1\n","71\tnormal.        \t1\n","72\tnormal.        \t1\n","73\tnormal.        \t25\n","74\tneptune.       \t2\n","75\tnormal.        \t1\n","76\tnormal.        \t1\n","77\tneptune.       \t1\n","78\tneptune.       \t2\n","79\tportsweep.     \t2\n","80\tnormal.        \t1\n","81\tpod.           \t1\n","82\tnormal.        \t61\n","83\tnormal.        \t11\n","84\tneptune.       \t1\n","85\tnormal.        \t88\n","86\tnormal.        \t4\n","87\tnormal.        \t2\n","88\tnormal.        \t1\n","89\tneptune.       \t1\n","90\tnormal.        \t1\n","91\tsatan.         \t2\n","92\tnormal.        \t2\n","93\tnormal.        \t1\n","94\tnormal.        \t1\n","95\tnormal.        \t4\n","96\tnormal.        \t1\n","97\tportsweep.     \t1\n","98\tnormal.        \t2\n","99\tnormal.        \t3\n","100\tnormal.        \t4\n","101\tneptune.       \t12\n","102\tportsweep.     \t1\n","103\tnormal.        \t4\n","104\tnormal.        \t3\n","105\tnormal.        \t2\n","106\tneptune.       \t1\n","107\tnormal.        \t1\n","108\tnormal.        \t1\n","109\tneptune.       \t143\n","110\tneptune.       \t2\n","111\tnormal.        \t9\n","112\tnormal.        \t1\n","113\tnormal.        \t2\n","114\tnormal.        \t2\n","115\tnormal.        \t12\n","116\tnormal.        \t3\n","117\tnormal.        \t1\n","118\tnormal.        \t15\n","119\tportsweep.     \t1\n","120\tnormal.        \t1\n","121\tnormal.        \t4\n","122\tnormal.        \t1\n","123\tnormal.        \t3\n","124\tnormal.        \t2\n","125\tnormal.        \t5\n","126\tnormal.        \t1\n","127\tnormal.        \t2\n","128\tnormal.        \t4\n","129\tipsweep.       \t1\n","130\tnormal.        \t1\n","131\tftp_write.     \t1\n","132\tnormal.        \t1\n","133\tnormal.        \t12\n","134\tnormal.        \t2\n","134\tsmurf.         \t3\n","135\tnormal.        \t11\n","136\tnormal.        \t2\n","137\tnormal.        \t1\n","138\tportsweep.     \t2\n","139\tneptune.       \t1\n","140\tnormal.        \t1\n","141\tneptune.       \t203\n","142\tnormal.        \t36\n","143\tneptune.       \t3\n","144\tteardrop.      \t6\n","145\tnormal.        \t3\n","146\tnormal.        \t3\n","147\tnormal.        \t1\n","148\tnormal.        \t1\n","149\tnormal.        \t8\n","150\tnormal.        \t3\n","151\tnormal.        \t2\n","152\tportsweep.     \t1\n","153\tportsweep.     \t1\n","154\tipsweep.       \t1\n","155\tteardrop.      \t4\n","156\tneptune.       \t1\n","157\tnormal.        \t3\n","158\tsatan.         \t1\n","159\tnormal.        \t45\n","160\tback.          \t4\n","161\tnormal.        \t1\n","162\tback.          \t2\n","163\tnormal.        \t7\n","164\tback.          \t2\n","165\tnormal.        \t3\n","166\tsatan.         \t4\n","167\tnormal.        \t1\n","168\tnormal.        \t2\n","169\tsmurf.         \t1\n","170\tnormal.        \t12\n","171\tnormal.        \t9\n","172\tneptune.       \t1\n","173\tnormal.        \t3\n","174\tnormal.        \t2\n","175\tnormal.        \t2\n","176\tnormal.        \t1\n","177\tnormal.        \t11\n","178\tnormal.        \t2\n","179\tnormal.        \t1\n","180\tneptune.       \t87\n","181\tback.          \t6\n","182\tneptune.       \t170\n","183\tneptune.       \t142\n","184\tnormal.        \t1\n","185\tnormal.        \t3\n","186\tnormal.        \t3\n","187\tsatan.         \t1\n","188\tnormal.        \t9\n","189\tnormal.        \t18\n","190\tnormal.        \t4\n","191\tnormal.        \t1\n","192\tnormal.        \t12\n","193\tneptune.       \t3\n","194\tnormal.        \t7\n","195\tportsweep.     \t1\n","196\tnormal.        \t1\n","197\tnormal.        \t39\n","198\tnormal.        \t1\n","199\tteardrop.      \t2\n","200\twarezclient.   \t1\n","201\tnormal.        \t1\n","202\tnormal.        \t1\n","203\tnormal.        \t1\n","204\tnormal.        \t1\n","205\tnormal.        \t5\n","206\tteardrop.      \t6\n","207\tnormal.        \t1\n","208\tnormal.        \t23\n","209\tnormal.        \t2\n","210\tnormal.        \t8\n","211\tnormal.        \t2\n","212\tneptune.       \t3\n","213\tnormal.        \t20\n","214\tnormal.        \t1\n","215\tnormal.        \t5\n","216\tsmurf.         \t184\n","217\tnmap.          \t1\n","217\tnormal.        \t1\n","218\tnormal.        \t2\n","219\tnormal.        \t3\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"o-h0Jr08HHnr","colab_type":"text"},"source":["We can now use this clustering in order to build a detector of anomalous network connections. The basic idea is that of filtering points whose distance from the center of the assigned cluster is higher than a specific threshold value. Such value can be found sorting the distances w.r.t. centers and use the 100-th one as threshold."]},{"cell_type":"code","metadata":{"id":"gkT6_XlsHHns","colab_type":"code","colab":{}},"source":["distances = normalized_labels_and_data.values().map(lambda item: dist_to_centroid(item, model))\n","threshold = distances.top(100)[-1]\n","def is_anomalous(item):\n","    return dist_to_centroid(item, model) > threshold"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ppKrBYHIHHnu","colab_type":"text"},"source":["We can now filter the connections according to our anomaly detection criterion and show, say, 10 of the filtered ones."]},{"cell_type":"code","metadata":{"id":"S0f0Nrv-HHnu","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":209},"outputId":"271310cb-d277-4b85-f683-4433c70db16c","executionInfo":{"status":"ok","timestamp":1585737254346,"user_tz":-120,"elapsed":2008,"user":{"displayName":"Dario Malchiodi","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiELCr-zUeJWuHT3llF5XfHH7B3tmxiSDlls6hF=s64","userId":"00228704477903575446"}}},"source":["normalized_labels_and_data.values().filter(is_anomalous).take(10)"],"execution_count":136,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[DenseVector([-0.066, 1.2712, -0.214, -1.1606, 2.5573, -0.0454, -0.1365, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, -0.1416, 1.4585, 0.0, -0.0667, 0.0, -0.0428, 0.0, 2.3988, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.522, -1.1593, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, -0.211, -3.408, 0.6249, 0.5976, -0.2818, -1.0005, 0.3331, -0.4706, -0.47, -0.238, -0.2336]),\n"," DenseVector([-0.066, 1.2712, -0.214, -1.1606, 2.5573, -0.0454, -0.1365, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, -0.1673, 4.1682, 0.0, -0.0667, 0.0, -0.0428, 0.0, 2.3988, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.5548, -1.1878, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, -0.211, -2.784, 0.6249, 0.5976, -0.2818, -1.2083, 0.3331, -0.4706, -0.47, -0.238, -0.2336]),\n"," DenseVector([-0.0646, 1.2712, -0.214, -1.1606, -0.391, -0.0454, 7.324, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, 0.032, -0.0232, 0.0, -0.0667, 0.0, -0.0428, 0.0, 2.3988, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.5548, -1.1837, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, 6.568, -0.6835, 0.5115, 0.5, -0.1906, -1.2291, 0.0828, -0.4706, -0.47, -0.238, -0.2336]),\n"," DenseVector([-0.066, 1.2712, -0.214, -1.1606, 2.5573, -0.0454, -0.1365, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, -0.1507, 0.2865, 0.0, -0.0667, 0.0, -0.0428, 0.0, 2.3988, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.5548, -1.1878, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, -0.211, -3.0123, 0.6249, 0.5976, -0.2818, -1.1876, 2.085, -0.4706, -0.47, -0.238, -0.2336]),\n"," DenseVector([-0.066, 1.2712, -0.214, -1.1606, 2.5573, -0.0454, -0.1365, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, -0.1586, 0.8166, 0.0, -0.0667, 0.0, -0.0428, 0.0, 2.3988, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.5408, -1.1756, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, -0.211, -1.6272, 0.6249, 0.5976, -0.2818, -1.2291, 1.0839, -0.4706, -0.47, -0.238, -0.2336]),\n"," DenseVector([-0.066, 1.2712, -0.214, -1.1606, 2.5573, -0.0454, -0.1365, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, -0.1518, 0.2163, 0.0, -0.0667, 0.0, -0.0428, 0.0, 2.3988, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.5267, -1.1634, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, -0.211, -3.4233, -1.4623, 0.5976, -0.2818, -0.9589, 2.085, -0.4706, -0.47, -0.238, -0.2336]),\n"," DenseVector([-0.066, 1.2712, -0.214, -1.1606, 2.5573, -0.0454, -0.1365, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, -0.1518, -0.0243, 0.0, -0.0667, 0.0, 1.5207, 0.0, 2.3988, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.5548, -1.1878, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, -0.211, -3.3319, 0.6249, 0.5976, -0.2818, -1.0836, 0.8336, -0.4706, -0.47, -0.238, -0.2336]),\n"," DenseVector([-0.066, 1.2712, -0.214, -1.1606, 2.5573, -0.0454, -0.1365, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, -0.1581, 2.036, 0.0, -0.0667, 0.0, -0.0428, 0.0, 2.3988, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.5173, -1.1553, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, -0.211, -1.1401, 0.6249, 0.5976, -0.2818, -1.2291, 0.0828, -0.4706, -0.47, -0.238, -0.2336]),\n"," DenseVector([-0.066, 1.2712, -0.214, -1.1606, -0.391, 22.0295, -0.1365, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, -0.2005, -0.0302, 0.0, -0.0667, 0.0, -0.0428, 0.0, -0.4169, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.5548, -1.1878, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, -0.211, -2.8601, -1.6606, -1.6713, 0.5386, -1.2083, 5.5889, -0.4706, -0.47, -0.238, -0.2336]),\n"," DenseVector([-0.066, 1.2712, -0.214, -1.1606, 2.5573, -0.0454, -0.1365, -0.106, -1.1504, -0.5403, -0.0287, -0.0933, -0.0537, -0.0351, -0.0143, -0.0248, -0.0287, -0.0351, -0.1191, -0.038, -0.0143, -0.0203, -0.0143, -0.0143, -0.0143, -0.0203, -0.0203, -0.0203, -0.0203, -0.0248, -0.0248, -0.0203, -0.0203, -0.0143, -0.0203, -0.0248, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, -0.0143, 0.5486, -0.0203, -0.2218, -0.47, -0.0431, -0.0351, -0.1525, 0.0679, 0.0, -0.0667, 0.0, -0.0428, 0.0, 2.3988, -0.0704, 0.0, 0.0, -0.0186, 0.0, -0.0143, -0.0287, 0.0, 0.0, -0.0351, -1.5455, -1.1715, -0.4711, -0.4708, -0.2315, -0.2316, 0.5338, -0.2648, 2.5006, -3.3472, 0.6249, 0.5976, -0.2818, -1.0836, 1.8347, -0.4706, -0.47, -0.238, -0.2336])]"]},"metadata":{"tags":[]},"execution_count":136}]},{"cell_type":"code","metadata":{"id":"uIvYZLclNjaH","colab_type":"code","colab":{}},"source":[""],"execution_count":0,"outputs":[]}]}