diff --git a/Protoype_Alpha_BERT_Embedding_Sysmon.ipynb b/Protoype_Alpha_BERT_Embedding_Sysmon.ipynb new file mode 100644 index 0000000..cb779d5 --- /dev/null +++ b/Protoype_Alpha_BERT_Embedding_Sysmon.ipynb @@ -0,0 +1,253 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 6, + "id": "e2670aff-b454-404a-97b6-7c6603bf4599", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in links: https://download.pytorch.org/whl/torch_stable.html\n", + "Requirement already satisfied: torch==2.2.1+cpu in /home/marius/anaconda3/lib/python3.11/site-packages (2.2.1+cpu)\n", + "Requirement already satisfied: filelock in /home/marius/anaconda3/lib/python3.11/site-packages (from torch==2.2.1+cpu) (3.9.0)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /home/marius/anaconda3/lib/python3.11/site-packages (from torch==2.2.1+cpu) (4.11.0)\n", + "Requirement already satisfied: sympy in /home/marius/anaconda3/lib/python3.11/site-packages (from torch==2.2.1+cpu) (1.11.1)\n", + "Requirement already satisfied: networkx in /home/marius/anaconda3/lib/python3.11/site-packages (from torch==2.2.1+cpu) (3.1)\n", + "Requirement already satisfied: jinja2 in /home/marius/anaconda3/lib/python3.11/site-packages (from torch==2.2.1+cpu) (3.1.2)\n", + "Requirement already satisfied: fsspec in /home/marius/anaconda3/lib/python3.11/site-packages (from torch==2.2.1+cpu) (2023.4.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/marius/anaconda3/lib/python3.11/site-packages (from jinja2->torch==2.2.1+cpu) (2.1.1)\n", + "Requirement already satisfied: mpmath>=0.19 in /home/marius/anaconda3/lib/python3.11/site-packages (from sympy->torch==2.2.1+cpu) (1.3.0)\n" + ] + } + ], + "source": [ + "!pip install torch==2.2.1+cpu -f https://download.pytorch.org/whl/torch_stable.html" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c0b722c7-8ed6-4aa9-83b5-c8e9295e49a2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Name: transformers\n", + "Version: 4.32.1\n", + "Summary: State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow\n", + "Home-page: https://github.com/huggingface/transformers\n", + "Author: The Hugging Face team (past and future) with the help of all our contributors (https://github.com/huggingface/transformers/graphs/contributors)\n", + "Author-email: transformers@huggingface.co\n", + "License: Apache 2.0 License\n", + "Location: /home/marius/anaconda3/lib/python3.11/site-packages\n", + "Requires: filelock, huggingface-hub, numpy, packaging, pyyaml, regex, requests, safetensors, tokenizers, tqdm\n", + "Required-by: \n" + ] + } + ], + "source": [ + "!pip install transformers==4.32.1" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "c368bba3-4e7f-45a6-9883-637c3ad34515", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Maximum length / number of tokens the model allows: 512\n", + "Number of tokens in the text: 301\n" + ] + } + ], + "source": [ + "from transformers import AutoTokenizer, AutoModel\n", + "import torch\n", + "\n", + "# Load tokenizer and model\n", + "tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-large-en-v1.5')\n", + "model = AutoModel.from_pretrained('BAAI/bge-large-en-v1.5')\n", + "\n", + "# Sample text\n", + "text = \"\"\"\n", + "\"File created:\n", + "RuleName: DLL\n", + "UtcTime: 2024-05-15 16:00:16.896\n", + "ProcessGuid: {18e8265a-da8c-6644-5a01-000000002700}\n", + "ProcessId: 6036\n", + "Image: C:\\Program Files (x86)\\Microsoft\\EdgeUpdate\\Install\\{D1058E28-B2C1-4930-8BC3-EA038942C727}\\EDGEMITMP_304C3.tmp\\setup.exe\n", + "TargetFilename: C:\\Program Files (x86)\\Microsoft\\EdgeCore\\124.0.2478.97\\onnxruntime.dll\n", + "CreationUtcTime: 2024-05-15 16:00:16.896\"\n", + "2024-05-15T16:00:15.887Z,win10,fe80::24b4:3691:44a6:38a1,information,5379,User Account Management,\"Credential Manager credentials were read.\n", + "\n", + "Subject:\n", + " Security ID: S-1-5-18\n", + " Account Name: WIN10$\n", + " Account Domain: sec699-20\n", + " Logon ID: 0x3E7\n", + " Read Operation: Enumerate Credentials\n", + "\n", + "This event occurs when a user performs a read operation on stored credentials in Credential Manager.\"\n", + "\"\"\"\n", + "\n", + "# Access the model's configuration\n", + "max_length = model.config.max_position_embeddings\n", + "print(\"Maximum length / number of tokens the model allows:\", max_length)\n", + "\n", + "# Tokenize the text\n", + "tokens = tokenizer.tokenize(text)\n", + "\n", + "# Count the number of tokens\n", + "num_tokens = len(tokens)\n", + "print(\"Number of tokens in the text:\", num_tokens)\n", + "\n", + "# Encode text\n", + "inputs = tokenizer(text, return_tensors='pt', max_length=512, truncation=True, padding='max_length')\n", + "\n", + "# Get model output\n", + "with torch.no_grad():\n", + " outputs = model(**inputs)\n", + "\n", + "# Extract embeddings\n", + "cls_embedding = outputs.last_hidden_state[:, 0, :] # Using the [CLS] token\n", + "\n", + "# For mean pooling\n", + "mean_embedding = outputs.last_hidden_state.mean(dim=1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "fe0ac4ab-73dd-43e1-8fe5-795045d30e60", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "shape: (1, 1_024)\n", + "┌───────────┬───────────┬───────────┬──────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", + "│ column_0 ┆ column_1 ┆ column_2 ┆ column_3 ┆ … ┆ column_10 ┆ column_10 ┆ column_10 ┆ column_10 │\n", + "│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ 20 ┆ 21 ┆ 22 ┆ 23 │\n", + "│ f32 ┆ f32 ┆ f32 ┆ f32 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ ┆ ┆ ┆ ┆ ┆ f32 ┆ f32 ┆ f32 ┆ f32 │\n", + "╞═══════════╪═══════════╪═══════════╪══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ -0.208444 ┆ -0.327674 ┆ -0.032746 ┆ 0.461757 ┆ … ┆ 0.704677 ┆ -0.347134 ┆ -0.526733 ┆ -0.049645 │\n", + "└───────────┴───────────┴───────────┴──────────┴───┴───────────┴───────────┴───────────┴───────────┘\n" + ] + } + ], + "source": [ + "import polars as pl\n", + "# Convert the tensor to a Polars DataFrame\n", + "df = pl.DataFrame(cls_embedding.numpy())\n", + "\n", + "# Print the DataFrame\n", + "print(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "db92aa20-db10-42a7-bfe5-c640f73d9723", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 1024])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cls_embedding.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "ad40cd5b-49db-40f1-ae59-682974031f3a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvMAAABmCAYAAABGMR4OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1PklEQVR4nO3dd3wVVd4/8M+Zdu9N4ZJCCi2AD0jozQKikUWQ+qgsPtgQFNgFwaUsK1j2h6KIfdHXgtiAR8G2D0UERNmlWAgiTRAE2SVACIQS0pN775Tv74+5GbikkCAxJHzfr9e8XrkzZ2bOmXPmzPdO5p4RRERgjDHGGGOM1TpSTWeAMcYYY4wxdmk4mGeMMcYYY6yW4mCeMcYYY4yxWoqDecYYY4wxxmopDuYZY4wxxhirpTiYZ4wxxhhjrJbiYJ4xxhhjjLFaioN5xhhjjDHGaikO5hljjDHGGKulOJhn7Ap21113wePxICcnp9w0999/P1RVxcmTJ7Fo0SIIIXD48OHfLI9lOXz4MIQQWLRokTOvuvO2Zs0aPP3002Uua9asGUaOHFkt+71cdu7ciZSUFHi9XgghMGfOnArT5+XlYdasWejWrRvq1asHl8uFZs2a4eGHH8aOHTucdCXHfdu2bRVuLz09HY888ghatWoFj8eD6OhotG/fHmPGjEF6enqF627cuBFCiHKn89vBrzVy5EhERERctu1V5NZbb8Wtt9560XQl5d+4caMzb+TIkWjWrFm15Y0xxkooNZ0Bxlj5Ro0ahRUrVuDDDz/EI488Ump5bm4uli9fjkGDBiE+Ph4DBw5EamoqEhMTayC3FavuvK1ZswZz584tM6Bfvnw56tWrVy37vVwefvhhFBYW4uOPP0ZUVFSFgeB//vMf9O3bF6dOncLYsWPxzDPPICIiAocPH8ann36Krl27IicnB16vt1L7PnbsGLp06YL69evjz3/+M6699lrk5uZi3759+PTTT3Ho0CE0adLkott5/vnn0atXr1Lzr7nmmkrloy7561//iokTJ9Z0NhhjVwEO5hm7gvXv3x8NGzbEggULygzmP/roIxQXF2PUqFEAgAYNGqBBgwa/dTYrpSbz1rlz5xrZb1X89NNPGDNmDPr3719hOtM0cdddd+HMmTNITU1Fu3btnGUpKSkYMWIEvvjiC6iqWul9v/POOzhz5gy2bt2K5s2bO/PvvPNOPPHEE7Asq1LbadmyJW688cZK77cuuxq/wDDGagY/ZsPYFUyWZYwYMQLbt2/Hnj17Si1fuHAhEhMTnQCwrEdZdu7ciUGDBiEuLg4ulwsNGzbEwIEDcezYMQBlPxJTQggRcqf73//+Nx566CG0bNkSYWFhaNSoEQYPHlxm3i50Yd4qejTj/LvSn3zyCfr27YvExER4PB4kJydj+vTpKCwsdNKMHDkSc+fOdfJcMpXsq6zHbI4ePYoHHnjAOS7Jycl49dVXQwLXkmPzyiuv4LXXXkPz5s0RERGB7t27Y8uWLRctM2AH6XfccQeioqLgdrvRqVMn/O///m+p42IYBt58800n7+VZsWIF9uzZg8cffzwkkD9f//79ERYWVqn8AUBWVhYkSUJcXFyZyyXp8l0qmjVrhkGDBmHVqlXo3LmzU6erVq0CYB+P5ORkhIeH4/rrry/38aC9e/eid+/eCA8PR4MGDTBhwgQUFRWFpCEizJs3D506dYLH40FUVBSGDh2KQ4cOlUr30ksvISkpCW63G126dMEXX3xR5n7379+Pfv36ISwsDLGxsRg7dizy8/NLpSvrMRshBCZMmIAPPvgAycnJCAsLQ8eOHZ2yn++zzz5Dhw4d4HK50KJFC7z++ut4+umnK2wbjLGrEwfzjF3hHn74YQghsGDBgpD5+/btw9atWzFixAjIslzmuoWFhejTpw9OnjyJuXPnYt26dZgzZw6aNm1aZgByMcePH0dMTAxeeOEFrF27FnPnzoWiKLjhhhtw4MCBKm2rS5cuSE1NDZnef/99qKqKtm3bOukOHjyIAQMG4L333sPatWsxadIkfPrppxg8eLCT5q9//SuGDh0KACHbK++RntOnT6NHjx746quv8Oyzz2LlypW47bbbMHXqVEyYMKFU+vOP3ZIlS1BYWIgBAwYgNze3wjIeOHAAPXr0wN69e/HGG29g2bJlaNOmDUaOHImXXnoJwLnHjwBg6NChTt7L89VXXwGw75pfLt27d4dlWRgyZAi+/PJL5OXlXdJ2LMuCYRilpgv9+OOPePzxxzFt2jQsW7YMXq8XQ4YMwYwZM/Duu+/i+eefx5IlS5Cbm4tBgwahuLg4ZH1d1zFgwAD07t0bK1aswIQJE/DWW29h2LBhIen++Mc/YtKkSbjtttuwYsUKzJs3D3v37kWPHj1w8uRJJ90zzzyDadOmoU+fPlixYgXGjRuHMWPGlGrTJ0+eREpKCn766SfMmzcPH3zwAQoKCspsM+VZvXo1/v73v2PmzJlYunQpoqOjcdddd4V8wVi7di2GDBmCmJgYfPLJJ3jppZfw0UcfhXwJZIwxBzHGrngpKSkUGxtLgUDAmffnP/+ZANAvv/zizFu4cCEBoLS0NCIi2rZtGwGgFStWlLvttLQ0AkALFy4stQwAzZgxo9x1DcOgQCBALVu2pMmTJ1e4zQvzdqGTJ09SixYtqG3btpSdnV1mGsuySNd12rRpEwGgH3/80Vk2fvx4Kq9LS0pKohEjRjifp0+fTgDo+++/D0k3btw4EkLQgQMHQsrRvn17MgzDSbd161YCQB999FGZ+ytxzz33kMvloqNHj4bM79+/P4WFhVFOTo4zDwCNHz++wu0REfXr148AkM/nu2haonPH/Ycffig3jWVZ9Mc//pEkSSIAJISg5ORkmjx5crn1db4NGzYQgHKn9PR0J21SUhJ5PB46duyYM2/Xrl0EgBITE6mwsNCZv2LFCgJAK1eudOaNGDGCANDrr78ekodZs2YRAPr222+JiCg1NZUA0KuvvhqSLj09nTweDz322GNERJSdnU1ut5vuuuuukHTfffcdAaCUlBRn3rRp00gIQbt27QpJ26dPHwJAGzZsCMlnUlJSSDoAFB8fT3l5ec68zMxMkiSJZs+e7cy77rrrqEmTJuT3+515+fn5FBMTU24bZ4xdvfjOPGO1wKhRo3DmzBmsXLkSAGAYBhYvXoybb74ZLVu2LHe9//qv/0JUVBSmTZuG+fPnY9++fb8qH4Zh4Pnnn0ebNm2gaRoURYGmaTh48CB+/vnnS95uYWEhBg4cCJ/Phy+++AL169d3lh06dAj33XcfEhISIMsyVFVFSkoKAFzyPtevX482bdrg+uuvD5k/cuRIEBHWr18fMn/gwIEh//3o0KEDAODIkSMX3U/v3r1L/Xh05MiRKCoqqvAO/G9JCIH58+fj0KFDmDdvHh566CHouo6//e1vaNu2LTZt2lSp7bz44ov44YcfSk3x8fEh6Tp16oRGjRo5n5OTkwHYo8ec/3hQyfyyjvP9998f8vm+++4DAGzYsAEAsGrVKggh8MADD4T8lyAhIQEdO3Z0Rp5JTU2Fz+crtb0ePXogKSkpZN6GDRvQtm1bdOzYscx9V0avXr0QGRnpfI6Pj0dcXJxTxsLCQmzbtg133nknNE1z0kVERIT8N4oxxkrwD2AZqwWGDh2KRx99FAsXLsTvf/97rFmzBidPnsSLL75Y4XperxebNm3CrFmz8MQTTyA7OxuJiYkYM2YMnnrqqSr9SBIApkyZgrlz52LatGlISUlBVFQUJEnC6NGjSz0KUVmGYWDo0KH45Zdf8PXXX4cEvgUFBbj55pvhdrvx3HPPoVWrVggLC0N6ejqGDBlyyfvMysoqc7SYhg0bOsvPFxMTE/LZ5XIBwEX3n5WVVeajPuXtpzKaNm0KAEhLS0Pr1q2rvH5FkpKSMG7cOOfzp59+invvvRd/+ctfsHXr1ouu36JFC3Tr1u2i6aKjo0M+lwSt5c33+Xwh8xVFKVUnCQkJAM4d05MnT4KISn2ROD+v56cvWb+sbZbIysoK+YFweekqcmG+Abs9lbSl7OzscvNdXlkYY1c3DuYZqwU8Hg/uvfdevPPOOzhx4gQWLFiAyMhI3H333Rddt3379vj4449BRNi9ezcWLVqEmTNnwuPxYPr06XC73QAAv98fsl5ZgebixYvx4IMP4vnnnw+Zf+bMmZC76VXxhz/8Af/617+wZs2aUnc8169fj+PHj2Pjxo3O3XgAFY67XxkxMTE4ceJEqfnHjx8HAMTGxv6q7Vfnfm6//Xa8/fbbWLFiBaZPn/6r81iR//mf/8Hs2bPx008/Vet+qsowDGRlZYUExpmZmQDOBcuxsbEQQuCbb75xvnydr2ReSfqS9c+XmZkZ8qUvJiam3HSXS1RUFIQQIc/0V8d+GGN1Bz9mw1gtMWrUKJimiZdffhlr1qzBPffcU6URS4QQ6NixI/72t7+hfv36zouF4uPj4Xa7sXv37pD0n332WZnbuDAwWr16NTIyMi6hRMBTTz2FhQsX4t1338Vtt91W5v4AlNrnW2+9VSptZe+WA0Dv3r2xb9++kJcrAcD7778PIUSZY6Vfit69eztfSC7cT1hY2CUN43jHHXegffv2FQbZX375ZamRXSpS1hcOwP7PSHp6uvOfhCvJkiVLQj5/+OGHAOC85GnQoEEgImRkZKBbt26lpvbt2wMAbrzxRrjd7lLb27x5c6nHe3r16oW9e/fixx9/LHPfl0N4eDi6deuGFStWIBAIOPMLCgrKHPWGMcb4zjxjtUS3bt3QoUMHzJkzB0TkjC1fkVWrVmHevHm488470aJFCxARli1bhpycHPTp0wcAnOeKFyxYgGuuuQYdO3bE1q1bywxQBg0ahEWLFqF169bo0KEDtm/fjpdffhmNGzeucnn+8Y9/YNasWRg6dChatWoVMtSjy+VC586d0aNHD0RFRWHs2LGYMWMGVFXFkiVLSgVTAJzg7MUXX0T//v0hyzI6dOgQ8txxicmTJ+P999/HwIEDMXPmTCQlJWH16tWYN28exo0bh1atWlW5PGWZMWMGVq1ahV69euH//b//h+joaCxZsgSrV6/GSy+9VOmXOp1PlmUsX74cffv2Rffu3TFu3Dj06tUL4eHhOHLkCP7v//4Pn3/+ObKzs0PWW79+fZlv3x0wYABmzZqF7777DsOGDXOGcUxLS8Pf//53ZGVl4eWXX65U3g4ePFjmkJ2NGze+pDZSHk3T8Oqrr6KgoADXXXcdNm/ejOeeew79+/dHz549AQA33XQT/vCHP+Chhx7Ctm3bcMsttyA8PBwnTpzAt99+i/bt22PcuHGIiorC1KlT8dxzz2H06NG4++67kZ6ejqeffrrU4zOTJk3CggULMHDgQDz33HOIj4/HkiVLsH///stWNgCYOXMmBg4ciNtvvx0TJ050vsRHRETg7Nmzl3VfjLE6oAZ/fMsYq6LXX3+dAFCbNm3KXH7hiDH79++ne++9l6655hryeDzk9Xrp+uuvp0WLFoWsl5ubS6NHj6b4+HgKDw+nwYMH0+HDh0uNZpOdnU2jRo2iuLg4CgsLo549e9I333xDKSkpIaN+VGY0mxkzZpQ7+sn5o4Bs3ryZunfvTmFhYdSgQQMaPXo07dixo9T2/X4/jR49mho0aEBCiJB9XTiaDRHRkSNH6L777qOYmBhSVZWuvfZaevnll8k0zVLlePnll0sd6wuPTXn27NlDgwcPJq/XS5qmUceOHcsdOagyo9mUyMnJoWeffZa6dOlCERERpKoqNW3alB544AH67rvvnHQlx728KS0tjbZs2ULjx4+njh07UnR0NMmyTA0aNKB+/frRmjVrLpqXi41m8+STTzppk5KSaODAgZUqf1nHf8SIERQeHk67d++mW2+9lTweD0VHR9O4ceOooKCg1HYXLFhAN9xwA4WHh5PH46FrrrmGHnzwQdq2bZuTxrIsmj17NjVp0oQ0TaMOHTrQ559/XqpdExHt27eP+vTpQ263m6Kjo2nUqFH02WefVXo0m7LquKz2uXz5cmrfvj1pmkZNmzalF154gf70pz9RVFRUqfUZY1c3QURU3V8YGGOMMXbpdF13RgEqedcAY4wB/JgNY4wxdsUZNWoU+vTpg8TERGRmZmL+/Pn4+eef8frrr9d01hhjVxgO5hljjLErTH5+PqZOnYrTp09DVVV06dIFa9asKfOH4oyxqxs/ZsMYY4wxxlgtVW1DU2ZnZ2P48OHwer3wer0YPnz4RceGHjlyJIQQIdOlDN3GGGOMMcbY1aDaHrO57777cOzYMaxduxaA/WKY4cOH4/PPP69wvX79+mHhwoXO57KGlWOMMcYYY4xVUzD/888/Y+3atdiyZQtuuOEGAMA777yD7t2748CBA7j22mvLXdflclXp1diMMcYYY4xdraolmE9NTYXX63UCecB+y57X68XmzZsrDOY3btyIuLg41K9fHykpKZg1axbi4uLKTe/3+0NeQ29ZFs6ePYuYmBjn7ZGMMcYYY+zKQUTIz89Hw4YNIUnV9tT3JfP5fAgEAtA0DW63u6azU6FqCeYzMzPLDMDj4uKQmZlZ7nr9+/fH3XffjaSkJKSlpeGvf/0rfve732H79u2lXudeYvbs2XjmmWcuW94ZY4wxxthvIz09/bK+Ifpy8Pl8aJYUjpOnLCQkJCAtLe2KDuirFMw//fTTFw2cf/jhBwAo8644EVV4t3zYsGHO3+3atUO3bt2c16wPGTKkzHUef/xxTJkyxfmcm5uLpk2bomv/J4EID1zZBgCB3GtURB4x4IuWEfVzPorjw2C6BZRiC7nNVCRszoFe341APQWKz8LZ1hqi9/lhumVoOQEUNnLDUgXqHSpCUYIblkug/m77dem5baIgLHtQIMMjIWpvHvwxbliaBJIETE2goLGMyKMmiuIl1DtswPBIgABMt0DYiQBIEvDXVyAHCIZbIOCV4Mqx4DkTQH5jN/RwwJVH0MMEPFkmDLcELd+EpQoYbgm+KAmeLAuuXAO5zVR4DwWgR9jVS5K9H8Mj4D5rwfAISAFC+HEfSJZgemRYioDhkWBpAiDAcAmQDAgLiDgWQG4LDZYqIBkEYQGWKhC13w9Jt5DVzgP3WQvCAgy3gFpooThWghyw60TLsxCZVoDihDAUNFIQ81MhfDFukAIEImUEIgRifi7G2dZumJpA2BkLkWlFkM8WIrdjA1gK4IuWEHHchPu0H2aYAi3Hj7zm4VB8FqQAIa+ZirBTJoriZESmG9DDJViKXb8lihJkeE5b0PJM+OvLTll80RL0cAHZT/YxygoO8CQAf32BsEwLJANq4bl9edN0qHkBFDV0gyQBLc+E6RKQdIIeIcNSAbXAQtjxIgSi3ZCLTRhhCvz1ZbizdChFBvxRLuj1JGjZJtQCHYUN3YAMuM6aUAp1mGEK/PVk6OES3NkmwjKLUdAkDBFHCpGdHAkt30JRvISoX/wojlERlulHTisPXLkWlGIL7tPFMCI06GEKLFXAc9IHI1yB6ZJhugQKE2WEnTRR72AeihMjoOXrKG7ggum2y6EUWXbZCnQEIlQIIuQ1VRG/JQfFieHwR8kQFqDlmVDzdOj1VPiiFGgFpn0uhEnweSW4sy0Ux0jwHtad5a6sAEiV4ItWISxALbTbdOSeTJzo3xjCIJhugagDOgoa2e04IsNAcQMF7iwDpkuCqQlYmoDntA5/fQVangktJwAjUkVekorIo/b5rhQTwjMK7XNBlpD7X+EIO6XD1CQoxSaERShM0OCLkqAWEiQDkHSCHCBAAIFICaYLCD9uwvAIuPJMCIOQ31SD57SJ3OYKPFn2sZIMgjvbgOw3YbgV+KNlFEdJiN1TDJIFihI1GJpAeKYOX7SCiON+SMUGSJHgi3XZ9XQmgJwWboSfMKAW6LBcMpRCHUUJHvjr23mJPGqgoJECSxOI/bEI+U3dkHQ7755TPhQ09SD8mA9ywIQRrqIoQUPU1kwEGkahKMG+MeI5E0BhggZXrolApAy/V8CVQ6iXVoD8pHB4snQYHhmWKiBM+9wOOx3A6Q4exO0oQu41Hkg6Qcu34D7jg1SoI79lPQjL7nMEAYWJMvxeIG5HAIIAX4wCQxPwHvIBRDDdMky3DF+UDNkgRP6nENltIuA5bSLglUDCbouybveLkmGfmv76AnHfZaGwRX1ouTqEYaGgiQeeLB1nr3VB8RHCjxsIeGUE6gmEHzfhOutHYSM3/FESZB8gGwR/pIAr1+4Hwo/ZdRTwapAMQmGiAleOBXd2AH6vCsMjQTIIYSd8yG/mQdSusyhsXh9qkQEQoGXkALKMQGIk8pq6EJERgBEmw/BIkP0ESxUgCXDlGMi9RoNaQKiX5kNRvAbTJSEiww8lLwAzXEVhQxcgAXqYgJpPsDR7XUsF1HyCZBAsl4CpCISdMhCIlODONiAFLBQ30FDQWIY7i+DKNaEWGJB0C8UNXAjLLIYIWChqEgbDJUHWCYXxMrQCgue0jkCkjMjDhchqHwlLBWL2FsPwyCiK1+DKMWGE2XdP/V6ByHR7v+En/PDX16BH2te0sBMBkCxQ0FCDP0rAlU2wNED2Aabbzj/JQOSRYhTHu2G4BQQBliwgiCDpgDAJvmj7GpifJMOVTVB8BLUgeJ3xSNDyDLiy/ShK8MB0SbBUIPKID8VxLkg6oaCR3d/7YiRoBQRYCPbzQESGH5YmQS42URynQfYTQEBRnAx3jgUQIIhAQtjr51ogVcC7Px8FSREw3QKyjxDxnzwUN4qA5RIojpUBAsJOmjDdAoUJMlw5BEEEtdCCMOw+Ucsz4cnIhy8hHNmtXAg7ZSLycCFIErBcCgoT7X5Ayzdx9t4iaN/Ug+wj+L0CYacInjMGTLeAHiahOEaCWkSIPBqA6ZYRfigH+a2ioEdIcJ8x4I+WIfsJWr4JPVwGAPjqS5AMQPERZL8Fv1dG9J5c5CTXc67h7hy7Pw7UE6iXFoAvWgVkuz26si0oPguy30Jucw31Dgeg5fhR2Dgc4RmFKGgSDkFAIEKC54wBkgTUIgN6uAJhEATBvj5rAtKZQvywYTYiIyPLjQtrSiAQwMlTFv61IRa9e2UiEAjUnWB+woQJuOeeeypM06xZM+zevRsnT54stez06dOIj4+v9P4SExORlJSEgwcPlpvG5XKVeddeVt2A6oaiGIAQkDUVimpA1mQocgCK6oZQBRTDguxSocgukOKGpSrBeRoURUCoMhRFgqLagaaiWPbfqoAi2/tVVLcTzJMmQZH9MBU3LNUO5oUqILtkKKoJWZOgqAag2h0fVAFFCQb9qgKZCFCFHWioFhRFgqy57c5QtTt1RTUBVYKi2sE8VCm4XQuKYthlVSSQei6YhyZAmoCiWiBNQCaCotjBjVBkZzumagfzpJ0L5u08aBCagCTZFz6hCiiKgEQWZM0NRbU7WdIElIAFWZMgB+tCUS0osg5FdUPWFCiKCUW1g3lTkyFrAopCkDU34BKQVQuKYkGWjeCxBmSXXV5FERCKAkUWUFQ3FNOCRBSsX9OuX9UABcuiGOeCeXuZBUU1YaoyJGGXRdYkWC77mJBLQNbOBfOyyz5mlgIogfP3da5dkGTXiVAFJBBIlWFqJeU2YSluyIoJqApMVYaiyFAUA6bqgqWWlEu2tyXD+SwUO72lBdPIZJdZNpxjLmsSFEVAUVUoinDmK4YFRSZA0UCqHcwrCgBFgVDlkDapyH57u4oMRXUBqoAMstuKJKAoMizVDuZlzT5XFNUNQ5MhzHP5JVW161e1g3k6r13a9Sc7yxVFAikSFFUNtrFgm5ZckDU3hESASzjr2O3ICK5vQKgShCqC56QMUz23XShq6PluEBQ5mKfg+aQoMoQqQdHtYF7WNMjB4EaSABlkn4sCMDUJ0BA87wQUxYSAvY6impBdCmTNPlayIPscNO36NlTZLrtCIFlAVjX7HFGCx0IRkBQjeCxcwXoK5lE17GOvyE77MJy82MdCBPskWXNDBkESgKLY/Z+iwM6HokJWNSiSC5bitusY585rux+RYWgCikpQguedosiAGgzmpXN9lexyO/uUBAX7HUCSpWBfeC6YlzUZssvelyBAVpVg+QEQQSgyhCrb6QRBUcxg2U2Ymh3MyyDIILvfCt4LMjThtENFkSFgOX/LLhdki6CoBixVtttIsO8oOYayBciC7L5HpWAbtOvIUjVIgoJtze6DTVUFVMkurwI7j87+7WBekV2ALNvnu+ay26Iq2/2zdS6Yt/toDbJmb0tRNaDkPJYFhKJBUV128B7MnxkM5oUKKCpBEmT31aoIllOCohiQLAuKqkF2yfb2VdOeTxYU1QVFIQjT7n+hSvax1YJpFRmWKjv9i1DtYwJFdtoJVOnc8Xf2K2CqGqzgNU1RJLutaxrkYH8qNEC2EGy7ZPenit2fkSbsa4piB/MyACHReX2HnT+7Tu3rDILlLbkOCFWy+1wFUFQXpGC5SvpIOVjHliYgE6AoApYiQVZM+3hZdjBfss75wXxJPixVOLEDVAHFJKfvtFQBWbOD+ZJrQUm+BRGUgAUh4Fy3FTkARXFDdrmCnw2QLMFSFCiqy2mzcph9PsgWOcfS7v+E/WXEJUE2yD6/VNlpk1YwzjA0GYpln1ekysHroARJAhSTIFuWnUb22eezGbyGB+va7l/tfprkkvZoQTEtyKZltwtFgiIjeG2y25YgBGMYI3gNMUCqAiHsYL7k+iwrdr98JT8SbXhqx+uYqpTL2NhYxMbGXjRd9+7dkZubi61bt+L6668HAHz//ffIzc1Fjx49Kr2/rKwspKenIzExsSrZZIwxxhhj7FfJta7cu/Hnq5ZfHCQnJ6Nfv34YM2YMtmzZgi1btmDMmDEYNGhQyI9fW7dujeXLlwMACgoKMHXqVKSmpuLw4cPYuHEjBg8ejNjYWNx1113VkU3GGGOMMcbKlGOG1XQWKqXafj68ZMkStG/fHn379kXfvn3RoUMHfPDBByFpDhw4gNzcXACALMvYs2cP7rjjDrRq1QojRoxAq1atkJqaekU+T8UYY4wxxuqubCu8prNQKdX2MFB0dDQWL15cYRoicv72eDz48ssvqys7jDHGGGOMVVqe6anpLFTKlTewJ2OMMcYYYzUs17jKH7NhjDHGGGOstiowqvYD2NmzZ+O6665DZGQk4uLicOedd+LAgQMVrrNx40YIIUpN+/fvr/R+OZhnjDHGGGPsArlVDOY3bdqE8ePHY8uWLVi3bh0Mw0Dfvn1RWFh40XUPHDiAEydOOFPLli0rvd/aMYAmY4wxxhhjv6ECvfR7jCqydu3akM8LFy5EXFwctm/fjltuuaXCdePi4lC/fv2qZhEA35lnjDHGGGOslEJDBQDk5eWFTH6/v1Lrl4zYGB0dfdG0nTt3RmJiInr37o0NGzZUKZ8czDPGGGOMMXaBooAGAGjSpAm8Xq8zzZ49+6LrEhGmTJmCnj17ol27duWmS0xMxNtvv42lS5di2bJluPbaa9G7d298/fXXlc4nP2bDGGOMMcbYBXy6fWc+PT0d9erVc+a7XBd//GbChAnYvXs3vv322wrTXXvttSEvVO3evTvS09PxyiuvXPTRnBJ8Z54xxhhjjLEL+A0ZAFCvXr2Q6WLB/KOPPoqVK1diw4YNaNy4cZX3e+ONN+LgwYOVTl/twfy8efPQvHlzuN1udO3aFd98802F6Tdt2oSuXbvC7XajRYsWmD9/fnVnkTHGGGOMsRCGv2oPsBARJkyYgGXLlmH9+vVo3rz5Je13586dSExMrHT6an3M5pNPPsGkSZMwb9483HTTTXjrrbfQv39/7Nu3D02bNi2VPi0tDQMGDMCYMWOwePFifPfdd3jkkUfQoEED/P73v6/OrDLGGGOMMeawdLlK6cePH48PP/wQn332GSIjI5GZmQkA8Hq98Hjst8k+/vjjyMjIwPvvvw8AmDNnDpo1a4a2bdsiEAhg8eLFWLp0KZYuXVrp/VZrMP/aa69h1KhRGD16NAA7w19++SXefPPNMn88MH/+fDRt2hRz5swBACQnJ2Pbtm145ZVXOJhnjDHGGGO/HV1UKfmbb74JALj11ltD5i9cuBAjR44EAJw4cQJHjx51lgUCAUydOhUZGRnweDxo27YtVq9ejQEDBlR6v9UWzAcCAWzfvh3Tp08Pmd+3b19s3ry5zHVSU1PRt2/fkHm333473nvvPei6DlVVS63j9/tDhgjKy8u7DLlnjDHGGGNXM+Gv2tPoRHTRNIsWLQr5/Nhjj+Gxxx6r0n4uVG3PzJ85cwamaSI+Pj5kfnx8vPNvhwtlZmaWmd4wDJw5c6bMdWbPnh0yXFCTJk0uTwEYY4wxxthVS6rinfmaUu0/gBUi9EAQUal5F0tf1vwSjz/+OHJzc50pPT39V+aYMcYYY4xd7WpLMF9tj9nExsZCluVSd+FPnTpV6u57iYSEhDLTK4qCmJiYMtdxuVyVGu+TMcYYY4yxyhKBms5B5VTbnXlN09C1a1esW7cuZP66devQo0ePMtfp3r17qfRfffUVunXrVubz8owxxhhjjFUH+WoP5gFgypQpePfdd7FgwQL8/PPPmDx5Mo4ePYqxY8cCsB+RefDBB530Y8eOxZEjRzBlyhT8/PPPWLBgAd577z1MnTq1OrPJGGOMMcZYCEmv6RxUTrUG88OGDcOcOXMwc+ZMdOrUCV9//TXWrFmDpKQkAKWH52nevDnWrFmDjRs3olOnTnj22Wfxxhtv8LCUjDHGGGPsNyVd4p353/qFqdU6zjwAPPLII3jkkUfKXHbh8DwAkJKSgh07dlRzrhhjjDHGGCvfpTxmUxMvTK320WwYY4wxxhirbWT94uPGX+j8F6YmJydjzpw5aNKkifNCqQud/8LU5ORkjB49Gg8//DBeeeWVSu+Tg3nGGGOMMcYuIAXsYD4vLy9kOv9lpecreWHqhS9AvZQXpm7btg26XrmH9jmYZ4wxxhhj7AKy3w7mmzRpEvKC0tmzZ5eZ/rd6YeqFqv2ZecYYY4wxxmobJXhnPj09HfXq1XPmX+z9RtX9wtRS+axUKsYYY4wxxq4ikt8CANSrVy8kmC/Pb/XC1FL5rFQqxhhjjDHGriJSwKxS+pp6YSoH84wxxhhjjF1A9hlVXqcmXpjKj9kwxhhjjDF2AeGv+itghw0bhqysLMycORMnTpxAu3btKvXC1MmTJ2Pu3Llo2LBhlV+YWu135qvyFqyNGzdCCFFq2r9/f3VnkzHGGGOMMYfwV/3OPGC/MPXw4cPw+/3Yvn07brnlFmfZokWLsHHjxpD0JS9M9fv9SEtLc+7iV1a1BvMlb8F68sknsXPnTtx8883o379/yDeSshw4cAAnTpxwppYtW1ZnNhljjDHGGAvlK3s8+StNtQbzVX0LVom4uDgkJCQ4kyzL1ZlNxhhjjDHGQlCxr6azUCnV9sx8yVuwpk+fHjK/ordglejcuTN8Ph/atGmDp556Cr169So3rd/vD3kTV25uLgDA1H2ALmAYBgABM2DC0A2YARmG6YehyzBlAegWTL9pzzMEDF0BDAum34Jh+GHqMiQjAEMHLAgYhs/+WxIwTHu/hu6DsOwxQc2A5GzLkiSQJGAKAdMvw9BNe7luwFAkQACmLGAYAZBk75t0giGLYDoLhhGAGQBMFTB1ghkQMHQThixB0k07T7LkpJcNwy6rEbDLAoAkez+mLGDoFsyAsPdj+EAkwTRkezuKBEsIgABTEiAZEBaCebBgkQAZBGEBFgkYhh+SYQXzZEFYOG8fEhBA8PhY5455QHGOIRFgBmR7fcNnlxMCpm7ZeTP9MHQfLAJMv2SX2/DDNBRIwe1BtyDpFKxf065f3YChS7BIQOiW0zbsZRYk3YShy5CCZTEDEky/AAJkH6fguLIQgOm3y0MWguuW7EuHCLYLkgQk3YQpCUg6wdBlWOeX2xAgw4ShKzB0GYahA4YBQyeYul0uYegwdAAWYOgmYOgwDSV4zIJlN30wdLt9mQGfc5wNw3/u2ATrArplpzcsGLpyru0aCkxdhimda5N23aiQDN3Ok2y3D+iWXTZDt/NIwbKbfhi6AjMg2+3Dyb9p169uBs/Bc+3Srj/dWS4bAZAIlt0ChGHaZbPssgmDYErCWcduR0ZwfQOmJMEUApYQMAwdhq5A0k37XDXMkPNd6ATDtDtkgmS3A0OHKUmAYUJYBDNg51EKEMgASCf7GIhg+xB2OQ1FQDZMO38Byy6zX4EZsI8VGQTDMJz6NnXZLrvhA5Hdts1gnu1zwQ/JMECQYOgUrCf7nDd0A8LQYckyYOgwdHFeXuxjUVKvZsDOs2TA/qyL4Dlk2sdDt2BY/uC5Z7fvkvPaCJ4PdtuhYDuTg8fV7huECRjBvsr0l+wz2I8Ez1fJ1IN9od3niJLz22/vSxBg6kqw/D6ACKYh28coIAMGBberOH0lCeHUhSkLkFFyLotgO/RBMnQIw4KhB4+rnyACFOwHSsplQjb8MHSc65sMcsps93N2HRm6BcmgYD6sYF9qwlAkSE4ez+1fGAZAgGT6AcjB5RRcT4ahSKBg3ZKEYB9tQQpQsD4smJJ9HsMMwDQsu44kOPmzhL2uRYChEySDYEkCJgmnvzMMA5JhBc832c6DbkI48+39CdOy8yXZ+bL7YHLqu6R/sQjBPkM+r51I546/s1+/vU/dvqYZRsBu6wELpt/uTy0ACACmZOefgsfb0O1rhiDAsgQEEUgHhEnn9R12/uw6ta8zdl0YkE2/fV5Ikt3nBtu3FCxXSR9p6gRYdr4RAAzDb1+fDdPu33Wyr3vBdUCw8yLOXYsJwukr7diBnM+WJOw2THY/YcriXL4pmG8DMHT7um1fFxSYfnL6YCIBS1bO9QO6CbPIrgsEyDmWhm4Er1OS02cZRgCmLjttsiTOMAMyoBMkwz7HS2IUMgChE0i3nJjIDPhgOddwMxhXCKf9lxy/kusLGZbdLoxA8HqsOH2Hfe7beSBJQBgGDF2BMAiC7ONgCQEygv1ycEz1K5FeXFDTWagcqiYZGRkEgL777ruQ+bNmzaJWrVqVuc7+/fvp7bffpu3bt9PmzZtp3LhxJISgTZs2lbufGTNmEACeeOKJJ5544oknnmrZlJ6eflnjz8uhuLiYEhISCAAlJCRQcXFxTWepQoKoer4SHT9+HI0aNcLmzZvRvXt3Z/6sWbPwwQcfVPpHrYMHD4YQAitXrixz+YV35i3LwpEjR9CpU6dSb+xidUdeXh6aNGnCdVyHcR3XfVzHdR/Xcd13qXVMRMjPz0fDhg0hSVfeSOk+nw+BQACapsHtdtd0dipUbY/ZXMpbsMpy4403YvHixeUud7lcpV6rW9IoKvvGLlZ7cR3XfVzHdR/Xcd3HdVz3XUode73easrNr+d2u6/4IL5EtX0VupS3YJVl586dSExMvNzZY4wxxhhjrNar1pdGTZkyBcOHD0e3bt3QvXt3vP3226XegpWRkYH3338fADBnzhw0a9YMbdu2RSAQwOLFi7F06VIsXbq0OrPJGGOMMcZYrVStwXxV34IVCAQwdepUZGRkwOPxoG3btli9ejUGDBhQpf26XC7MmDGj1OM3rO7gOq77uI7rPq7juo/ruO7jOq551fYDWMYYY4wxxlj1uvJ+PswYY4wxxhirFA7mGWOMMcYYq6U4mGeMMcYYY6yW4mCeMcYYY4yxWoqDecYYY4wxxmqpOhfMz5s3D82bN4fb7UbXrl3xzTff1HSWWCXNnj0b1113HSIjIxEXF4c777wTBw4cCElDRHj66afRsGFDeDwe3Hrrrdi7d29IGr/fj0cffRSxsbEIDw/Hf//3f+PYsWO/ZVFYJcyePRtCCEyaNMmZx/VbN2RkZOCBBx5ATEwMwsLC0KlTJ2zfvt1ZzvVcuxmGgaeeegrNmzeHx+NBixYtMHPmTFiW5aThOq5dvv76awwePBgNGzaEEAIrVqwIWX656jM7OxvDhw+H1+uF1+vF8OHDkZOTU82luwpQHfLxxx+Tqqr0zjvv0L59+2jixIkUHh5OR44cqemssUq4/fbbaeHChfTTTz/Rrl27aODAgdS0aVMqKChw0rzwwgsUGRlJS5cupT179tCwYcMoMTGR8vLynDRjx46lRo0a0bp162jHjh3Uq1cv6tixIxmGURPFYmXYunUrNWvWjDp06EATJ0505nP91n5nz56lpKQkGjlyJH3//feUlpZG//znP+nf//63k4bruXZ77rnnKCYmhlatWkVpaWn0j3/8gyIiImjOnDlOGq7j2mXNmjX05JNP0tKlSwkALV++PGT55arPfv36Ubt27Wjz5s20efNmateuHQ0aNOi3KmadVaeC+euvv57Gjh0bMq9169Y0ffr0GsoR+zVOnTpFAGjTpk1ERGRZFiUkJNALL7zgpPH5fOT1emn+/PlERJSTk0OqqtLHH3/spMnIyCBJkmjt2rW/bQFYmfLz86lly5a0bt06SklJcYJ5rt+6Ydq0adSzZ89yl3M9134DBw6khx9+OGTekCFD6IEHHiAiruPa7sJg/nLV5759+wgAbdmyxUmTmppKAGj//v3VXKq6rc48ZhMIBLB9+3b07ds3ZH7fvn2xefPmGsoV+zVyc3MBANHR0QCAtLQ0ZGZmhtSxy+VCSkqKU8fbt2+HrushaRo2bIh27dpxO7hCjB8/HgMHDsRtt90WMp/rt25YuXIlunXrhrvvvhtxcXHo3Lkz3nnnHWc513Pt17NnT/zrX//CL7/8AgD48ccf8e233zpva+c6rlsuV32mpqbC6/XihhtucNLceOON8Hq9XOe/klLTGbhczpw5A9M0ER8fHzI/Pj4emZmZNZQrdqmICFOmTEHPnj3Rrl07AHDqsaw6PnLkiJNG0zRERUWVSsPtoOZ9/PHH2LFjB3744YdSy7h+64ZDhw7hzTffxJQpU/DEE09g69at+NOf/gSXy4UHH3yQ67kOmDZtGnJzc9G6dWvIsgzTNDFr1izce++9APhcrmsuV31mZmYiLi6u1Pbj4uK4zn+lOhPMlxBChHwmolLz2JVvwoQJ2L17N7799ttSyy6ljrkd1Lz09HRMnDgRX331Fdxud7npuH5rN8uy0K1bNzz//PMAgM6dO2Pv3r1488038eCDDzrpuJ5rr08++QSLFy/Ghx9+iLZt22LXrl2YNGkSGjZsiBEjRjjpuI7rlstRn2Wl5zr/9erMYzaxsbGQZbnUt7tTp06V+jbJrmyPPvooVq5ciQ0bNqBx48bO/ISEBACosI4TEhIQCASQnZ1dbhpWM7Zv345Tp06ha9euUBQFiqJg06ZNeOONN6AoilM/XL+1W2JiItq0aRMyLzk5GUePHgXA53Fd8Je//AXTp0/HPffcg/bt22P48OGYPHkyZs+eDYDruK65XPWZkJCAkydPltr+6dOnuc5/pToTzGuahq5du2LdunUh89etW4cePXrUUK5YVRARJkyYgGXLlmH9+vVo3rx5yPLmzZsjISEhpI4DgQA2bdrk1HHXrl2hqmpImhMnTuCnn37idlDDevfujT179mDXrl3O1K1bN9x///3YtWsXWrRowfVbB9x0002lhpT95ZdfkJSUBIDP47qgqKgIkhQaPsiy7AxNyXVct1yu+uzevTtyc3OxdetWJ83333+P3NxcrvNfqyZ+dVtdSoamfO+992jfvn00adIkCg8Pp8OHD9d01lgljBs3jrxeL23cuJFOnDjhTEVFRU6aF154gbxeLy1btoz27NlD9957b5nDYzVu3Jj++c9/0o4dO+h3v/sdD3d2hTp/NBsirt+6YOvWraQoCs2aNYsOHjxIS5YsobCwMFq8eLGThuu5dhsxYgQ1atTIGZpy2bJlFBsbS4899piThuu4dsnPz6edO3fSzp07CQC99tprtHPnTmdo78tVn/369aMOHTpQamoqpaamUvv27XloysugTgXzRERz586lpKQk0jSNunTp4gxryK58AMqcFi5c6KSxLItmzJhBCQkJ5HK56JZbbqE9e/aEbKe4uJgmTJhA0dHR5PF4aNCgQXT06NHfuDSsMi4M5rl+64bPP/+c2rVrRy6Xi1q3bk1vv/12yHKu59otLy+PJk6cSE2bNiW3200tWrSgJ598kvx+v5OG67h22bBhQ5nX3xEjRhDR5avPrKwsuv/++ykyMpIiIyPp/vvvp+zs7N+olHWXICKqmf8JMMYYY4wxxn6NOvPMPGOMMcYYY1cbDuYZY4wxxhirpTiYZ4wxxhhjrJbiYJ4xxhhjjLFaioN5xhhjjDHGaikO5hljjDHGGKulOJhnjDHGGGOsluJgnjHGGGOMsVqKg3nGGGOMMcZqKQ7mGWOMMcYYq6U4mGeMMcYYY6yW+v/ovSoeFtkGTAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import torch\n", + "\n", + "# Example tensor, replace with cls_embedding\n", + "# cls_embedding = torch.randn(1, 768) # Simulating an embedding tensor\n", + "\n", + "# Plotting the tensor values\n", + "plt.figure(figsize=(10, 0.5))\n", + "plt.imshow(cls_embedding, aspect='auto', cmap='viridis')\n", + "plt.colorbar()\n", + "plt.title(\"Visualization of CLS Embedding\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2e21e7fc-aaa3-4a34-9720-69ba897e06f5", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}