Skip to content

Instantly share code, notes, and snippets.

@UmarZein
Created December 1, 2023 06:01
Show Gist options
  • Save UmarZein/c76bdf56b5e9c714f6452d51fac48937 to your computer and use it in GitHub Desktop.
Save UmarZein/c76bdf56b5e9c714f6452d51fac48937 to your computer and use it in GitHub Desktop.
Nagel–Schreckenberg modelling
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "39e4aabc-0cc1-4950-acab-b9aaa3f0794d",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"M = 100\n",
"p = 0.3\n",
"v0 = 0\n",
"d = 2\n",
"nc = 70\n",
"tmax = 1000\n",
"vmax = 5"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "f3fb0cf8-ef1b-410c-bc7f-ee9fde34c322",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import random\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"def to_mat(X):\n",
" s=np.zeros((1,M))\n",
" for i in X:\n",
" if i<100:\n",
" s[0,i]=1\n",
" return s\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "35a3b8ca-f598-4087-a3dd-815885abdc21",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n"
]
}
],
"source": [
"for i in range(1,2):\n",
" print(i)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "09016e16-69db-4c91-9fa8-f4ef41ba94ce",
"metadata": {},
"outputs": [],
"source": [
"np.clip"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "9fb2e1c1-19b0-4e48-b358-ab971e348500",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0.],\n",
" [1., 1., 1., 0., 1., 1., 1., 1., 0., 1., 0., 1., 0., 1., 0., 1.,\n",
" 1., 1., 1., 1., 0., 0., 0., 1., 1., 0., 0., 0., 1., 1., 1., 0.,\n",
" 1., 1., 0., 1., 1., 0., 1., 1., 1., 0., 0., 1., 0., 0., 1., 1.,\n",
" 1., 1., 0., 1., 1., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
" 0., 0., 0., 1., 1., 0., 1., 1., 1., 0., 0., 0., 1., 1., 1., 1.,\n",
" 1., 1., 1., 1., 1., 1., 1., 1., 0., 1., 1., 1., 1., 1., 1., 0.,\n",
" 1., 1., 1., 1.]])"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.concatenate([rec,curr])"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "18e5da71-5b50-4ad2-ae15-c961f0e494af",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"\n",
"X=list(range(M))\n",
"random.shuffle(X)\n",
"X=(np.array(X[:nc])).astype(int)\n",
"V=(np.zeros(len(X))+v0).astype(int)\n",
"\n",
"#mainloop\n",
"rec=np.zeros((1,M)).astype(int)\n",
"for i in range(tmax):\n",
" curr=to_mat(X)\n",
" rec=np.concatenate([rec,curr])\n",
" X2=X.copy()\n",
" V+=1\n",
" r=(np.random.rand(V.shape[0])<p)*d\n",
" V-=r\n",
" V=np.clip(V,0,vmax)\n",
" for i in range(len(X)):\n",
" lanjut=True\n",
" if V[i]==0: continue\n",
" for j in range(1,min(V[i]+1,V.shape[0]-1)):#cek tabrakan\n",
" if X[i]+j>=M: continue\n",
" if curr[0,X[i]+j]==1:\n",
" lanjut=False\n",
" V[i]=j-1\n",
" break\n",
" if not lanjut: continue\n",
" X2[i]+=V[i]\n",
" \n",
" X=X2.copy()"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "d139cfc7-295a-4ceb-b2ac-8e6f279f594c",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x1f0a778ab50>"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAL0AAAULCAYAAAB4fKP/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+40lEQVR4nO3df5BV9X3/8dfKwgp02fJD9nIbtDizqRpIULBWtMIMCG0kxqQTiaAxE5piUXSDRqSmDTpfF6UNOgktqY6jVuvgdCqN7dgoSQwNpUYGQwKYajMhiMp203R7FyLuIpzvH+Te3Hs4Pz7nx91f7+djZmfYcz/nc86F1/3cz697afA8zxNgyBkDfQNAfyP0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwZ9iG/m/+5m80bdo0nXnmmZo1a5a+973vpa5r/fr1uvjii9Xc3KzJkyfrmmuu0euvv15TxvM8rVu3TsViUaNHj9a8efO0f//+1NdraGhQe3t7rvW//fbbuv766zVx4kSNGTNGM2fO1O7du3O7xvvvv68vfelLmjZtmkaPHq1zzz1X9957r06ePJnr88jMG4a2bNnijRw50nvkkUe81157zbvtttu8sWPHegcPHkxV36JFi7zHHnvM27dvn7dnzx7vqquu8s4++2zv6NGjlTL333+/19zc7P3jP/6jt3fvXm/JkiXelClTvJ6enkTXeuWVV7zf/u3f9j784Q97t912W271/+///q93zjnneJ/97Ge973//+96BAwe8b33rW95PfvKT3K7x//7f//MmTpzo/cu//It34MAB7x/+4R+83/iN3/Aeeuih3K6Rh2EZ+t/93d/1brrppppj5513nnfXXXflUn9XV5cnydu+fbvneZ538uRJr1AoePfff3+lzHvvvee1tLR4X//6153rPXLkiNfW1uZt27bNmzt3biX0edS/Zs0a7/LLLw99PI9rXHXVVd7nPve5mmOf/OQnveuvvz63a+Rh2HVv+vr6tHv3bi1cuLDm+MKFC7Vz585crlEqlSRJEyZMkCQdOHBAnZ2dNddsamrS3LlzE13z5ptv1lVXXaUFCxbUHM+j/ueee06zZ8/Wpz71KU2ePFkXXnihHnnkkVyvcfnll+vb3/623njjDUnSD3/4Q+3YsUMf/ehHc7tGHhr77Ur95H/+53904sQJtba21hxvbW1VZ2dn5vo9z9Pq1at1+eWXa/r06ZJUqTfomgcPHnSqd8uWLXr11Ve1a9eu0x7Lo/6f/vSn2rx5s1avXq0/+7M/0yuvvKJbb71VTU1N+sxnPpPLNdasWaNSqaTzzjtPI0aM0IkTJ3Tffffpuuuuy+155GHYhb6soaGh5nfP8047lsYtt9yiH/3oR9qxY0du1zx06JBuu+02vfjiizrzzDNDy2V5TidPntTs2bPV0dEhSbrwwgu1f/9+bd68WZ/5zGdyucYzzzyjp556Sk8//bQ+9KEPac+ePWpvb1exWNSNN96YyzXyMOy6N5MmTdKIESNOa9W7urpOa2GSWrVqlZ577jm99NJL+sAHPlA5XigUJCn1NXfv3q2uri7NmjVLjY2Namxs1Pbt2/XVr35VjY2NlTqyPKcpU6boggsuqDl2/vnn680338zlOUjSF7/4Rd1111369Kc/rRkzZuiGG27QF77wBa1fvz63a+Rh2IV+1KhRmjVrlrZt21ZzfNu2bZozZ06qOj3P0y233KJnn31W3/nOdzRt2rSax6dNm6ZCoVBzzb6+Pm3fvt3pmvPnz9fevXu1Z8+eys/s2bO1bNky7dmzR+eee26m+iXpsssuO22a9Y033tA555yTy3OQpHfffVdnnFEbqREjRlSmLPO4Ri76bcjcj8pTlo8++qj32muvee3t7d7YsWO9n/3sZ6nq+9M//VOvpaXF++53v+sdPny48vPuu+9Wytx///1eS0uL9+yzz3p79+71rrvuukxTcdWzN3nU/8orr3iNjY3efffd5/3Xf/2X9/d///femDFjvKeeeiq3a9x4443eb/3Wb1WmLJ999llv0qRJ3p133pnbNfIwLEPveZ7313/9194555zjjRo1yrvooosq04tpSAr8eeyxxyplTp486X35y1/2CoWC19TU5F1xxRXe3r17U1/TH/o86v/nf/5nb/r06V5TU5N33nnneQ8//HDN41mv0dPT4912223e2Wef7Z155pneueee6919991eb29vrs8jqwbP44PhsGXY9emBOIQe5hB6mEPoYQ6hhzmEHuYM69D39vZq3bp16u3tHbLXGA7Pob+u4WpYz9P39PSopaVFpVJJ48aNG5LXGA7Pob+u4WrQt/R5fuwPkAZ56J955hm1t7fr7rvv1g9+8AP9/u//vv7wD/+wsjMQSGNQ76ffuHGjli9frj/+4z+WJD300EN64YUXtHnz5sp21TAnT57U22+/LenUW2u9lOuu1zXqXf9wuYbneTpy5IiKxeJpOz2DCg9Kvb293ogRI7xnn3225vitt97qXXHFFaeVf++997xSqVT5ee2110I3ivEzfH8OHToUm61B29In/djf+vXrdc8995x2/OCrv60bL/pI5fetb+wNveYnPjijptwnPjijprz/97jjQXX6jwXdU7m+crnqe6k+5r9G2L0G3V/cPcfV73Je0vOry7per1yu5+hJnXPRz9Tc3Bx7jUEb+jLXj5atXbtWq1evrvze09OjqVOn6saLPqJvHz71vSqLijM1rjn4rW9Rcaa+fXhP5c+f+p2LfvX7Gb7Hzwg5L7jexoaRlT+Paz7jtOuUj/vP+fX1JekMNTaM1LjmMyr1lc+prs9/r4uKF0lS4P2V6wv/e/DXFf53F/X34Hq+v2z1cwxT/Xdx6gXwM6ePHQ7a0Cf92F9TU5Oampr66/YwhA3a0Fd/7O8Tn/hE5fi2bdv08Y9/PNdrLSrO1Avv7Al9TFLg41Hn+R9fVJxZ+b1cZ1C9QWXCrhN03OWe0j6fekp67Sz3OmhDL0mrV6/WDTfcoNmzZ+vSSy/Vww8/rDfffFM33XRTbteIC3xYOKTg4LjUG1beX2fSgCZ5Eaa5nySqz0/bqNTLoA79kiVL9Itf/EL33nuvDh8+rOnTp+v555+vfJg5i7iQVbe0aequbuGr6wx6zOXewuqNKh92btz1sr44srTCLuf6yywqztTWN17V+A+6XWNQh16SVq5cqZUrV2aqI2ko6tH6uLbaQd2buHpd68xSn2vZLOenCXzZqYHsT52uO6hXZIF6GPQtfT2EtTBRA8ywc5M+nrV83nWmfUdwva7rIDzNALz62PwpH3K+T3Ohr2fgk9xD3LVcrp21e5FFllmiNOWSXj+KqdBn6benbYn813MZyLrct/9aLvcYVm8eY5gk7xjV101zzWE/kO0PUYPHtDMjYe8gSWZsomZVXF4w9ZqTj2o86j09GXbt+VMYyAKhTLb0/TV4S9N3L5/vPydpC5plYc31vpIMRvMea5ze4h93Ptdk6F2lmanJs5/seh+u5Qdq4JtnwxK0KCed2mlJnz6E6z9AmqBJShX4LK1ymgWepILeuVyv21+zSUkWp8yF3kXWQZ7kPnh0mUJ1vc/+7F5U1ysFzyQFHa/3/bhgIAtzaOl/Jcl0YJr+ethUW/X8vUudQYPjtK1q1nnytPUOZCsvEXpJ6ZftXctL0fPYeXZxoq7tel5QOdeZqLzn6V1nx5IwG/q004lhdYXNLkT1udNMTSZdzU0rr4BmvYe4F5BUXpxi702ktOFJuvKaZFYlzRx4moFrXlOpaZ5f1mlLKXhVO+k8PQNZmGOypc+Ly0BuIOba6z1QzGuxLKq8FL3niD59P+ivvnY9A1+vhbk860pyj9VYkU0pbGDpP+Y/J2x2I+msUNh1XFu6PMKadLYkrzGCy32VrxN0H6zIOkgzlRh07qLizMSBd32LzjNQeczJlyV9jlnu0X99ujd1lGVBJ2lXyLXVrveMTFidWaZWk1wvycxYli4lszcwh5Ze+b71p7lOltmbrO88QeXiZp/yHugG1V8+FtYN9XcrGcgmkCZgroPONNep93Rj2DWl4OBVH8+7G5V0wc1/b9X3xUA2oywvhKDHpfiWrN798sHGJfCuf7dJ0ad3lGSglaRO13Pq9Q5QrjduRsZfrr/vM0+EHubQvYkR1H8sG8gWzeWtP49pw/48v7oeKb5LmBahrxK3YBUUtLjVyrxfGC5dojSzNVF15jlDlPT8eoxLCP2vxP2jJZ1pcJnFSdpi9Uf4ksq68uoyE+bayLgi9HIbpCbp3sQFPmkXyfUfOu2sU9SLOWtXwl+v5LaNIercqH8TFwxkYQ4tfQIuLW5/DiBd++T9cS9J63Xt/oW16mw4y1nalcKkdWY5P8sLRYpfTXYJV9pV5qTdP3/4/VsQJLYh5Ma17x3VB47qx5b/8aLGBuVz81i5dZ0hyXPAnHYmqfp+wu61uizbEFLKe3osLmRR16pXqJKWS/uuFzfXHnQs6vGy6paegSzgiJb+V1wWouLOl9JNx8XdS9w9Zq2vuusU142T8utaxc3X5zEnH4TQB0g73x13ftrZn6hAxN2b/7yoe6lXty5pF8n1vqvL8WVP/STri6M/V06DJGm5856pCbqHuIF90Dm//p3/lCEVlxDEDaCC/tHLdca1YHHXTsJlpibuHSfp/cR1V+LOTXO9NBjIwhxa+gSSDk5dW74krXLSd6OoMq73k3Te3qVL49/3k/dgNQqhdxQ38Er7j+c6U5O1vrTnJ53RSTpAHYgxDqGPkMciUlQfOmngXVvQtJL2ybNOy1bXH9ZY1GPaktCn4DoYdDk/6LGkQXIdBIa9I6VZY0gzDemvP+7vLmzGK+sLgIEszKGlDxHWGiWdr07SpZHcF5KSimo1swxaXc5LMwFQfX/lP1c/FnbMBaFPICog/n8ol1VVl+slPSesnjwGiVED0aSB978Ig7pWUd3ILI0AoQ8Q15Kl6QMnvd5gk7R1D6tDCg+sax8+qAzbEHKSZvYmy1x+GkmnCNPUlSbweTUMQYEPLsM2hMxc+uRJphCjWra4c8PKZnmBRc3exF0j6dRp2nFCVNlqSVt6Zm9gDi19Amm6ElGzDVm7HUkkHVynGbSGXSesTNjfTdJZGbo3dZK2K5FmyjNsZiNJPWHdsLQLPXlPZbq84ILuMY/pW7o3Ecp/wa7/2FErjnm16ouKM3Odgkyy5lBveYxbXNDSZ5R19qb6PCl6tiNrSF27DkkG63lxna7MAy09zKGlTyFukaVcJqw/6lJ/Hm/zQavEcV2u/lq9Lf856Fjcu0zWfj2hTyjNwCzqvLTl4s5P+yKp11ghqGsVFv6o+vLo7hD6BFxXLJMOZPP6R82z/512WtVlWrdcr+tqa94vBEIfw6Ur4y/fn9sQynVI7gF1qS/PwWtUVy/o7zTNrFcSDGRhDi19BtWtVdggrB5TbkH3kLRsXveV11gmqHy9/u4IfQpRMw79fR/1mmnpD/6Au4wHwga/bC3uJ2FhqVef2PUaLgPret1rdb1S/J4al/573vdI6BOKe/tN290Ie1xK1gKHTQ3WQ9Jp2DSrrUlewK4YyMIcWvqchK1AJmn1q89Pswjmcr2gVdqkdcQJ2ruTZI4+qMsTt3K79Y1X+e938hY2UxO3DSHssfL5cWVd6sz6gstyThpR/fig7pnL854/hf9+py5c+8hpBpmu5ye5lqusYwf/sXpO04YtdCX5EAl9+pwlCXySMkleHFmu46Jeq86uz7H6RZrmORB6mEP3Jgcuq4hxrVjSAWqWVj5t+STdIP+4J8l0ZdxCFItTA8ilDxs2yKw+llfwXLpW/r5w3mOHtGsDaeqvDT8fDB+0XAay1Y9JbgPnqHJZFofi7tH13KAXm+viXtiMTjX+x/B+lGWmJumgN03XRQqf284yTZpE0LXD7jHsHTHuBcv/GF5ncf3L8u9hAXdtmeOOuR6PCn9e/K133FpGXDfN5dyypH16Zm9gDi19DrK06nF1hR1zOR618ulyH0nPc3kHdKnDpU9/+nUZyPaLPLspaa6dx5RlkrrDykrBQS/LY9Yn7SA8CKGvkyyDzqTHgq7psnYQdh/12n/jOv/uWk8Z8/QDLOl0XNjxLO8SaYOb5oXqf5GFBTduYB11TtyLIWn3hoEszKGlz0ma/n1UXXm08q5z82kHrVEbwVy6KnHdsbD1hawIfQ7yWLGMqiuu/jT9Yte68zjH303JoxuUZTBL6AdQ3NSmSwvsOk7Ie4U36Jjr7E3Y8wqbas0z8BKhHxAu3Q6XQNZz2tKlzrymR8uyBD7J3hsGsjCH0NfZouLMyBYxz1Y+rtuQ9BpJrl+PRTF/qx/Wyr/wzp5fbThzQ/emjtIOSvPqmqSZlcnrev5wBo1fwo6VRY0Tyo//+jG2IQwo1xY37cyJv+6wwWSeL5647QEuMzJJtxL4y/uPMXszSLisIqZtgfNYuc2j9a9+jmmmF+NesFH37a837LEo9OlhDi19TlxXZNN2O1xa9DxXhV3PSTLFWI9p1DQIfZ25/oMnDUY95uJdrimFbw8I68K41p110ckVoa+DpK161hmdLNsQXOqMuoe0q6VBIQ+6Zj0Q+gGWdNCZ5yDYtWzY71lD6To9mfc7AANZmEPoc5Zk9TVpv7xcPulANa/+f/XqcvU7Tl51x73jla+XFaHvJ/45bdd+vOt2hHotRCXZ7uBSX9ixJPdXlvZ506evk6z/sHkNgKV0M0JRA1nXgar/2nGzP0kxZTlIuc6CVJfvjxmfJMK2EYSV9T8eFvD+nnItI/R1lKQPn+d8fpqxQnWdUV0a/7XjZlqSzPT011w9fXqYQ0tfB2ELL3lt8nIpl7TeNOdH9fNd+/R5z8y4IPR1lkf/tV4rsq4zNXHbhsvC9tmE/R0EvWiSDpjTIPR1knVaL2kdWaS5Tpb+d9yLIOyFlBdCP8DyXFDKstUg6HHp16Hzd0lcZ3Oi6qw+5j8e9HvYsaQYyMIcQj+A6r1tIOya/n6zf2Uz7FhZ3vP/YVOlWVeDw9C9GQBR/3BZZl/ymNlJujiWZk4+bOAd9XvQgLca33sziIXtlfG3wC7n5v2OkGWfTJp3rSTPJ+7vh68AGYayzKeHlXddIQ5bsY3q8sSdn+Se/e8m/nqToqWHObT0Q0BQvz3PVt5l701QnUH3ETdeqeZ/FwhquaP69GkXsQh9P0rTJZGShTHqfJd7yjJOyLJgFXT9vLs1ZYS+n7gM6KKOufa/48oHLTq53HfaoOU9oxM2VuD/nBpE8phXTvqCyeM6YS+k8rE0IY6adiyX89+Dy4vm1GP8n1NAKFr6QShr6510zjzr2KH6nKiWOeqdovo8lwUr/zG6N0NIVN89rmuUZO7d9XjSfr7rPbqMCVzm84PWBpJ2bwj9IJG0tc2yelpd1j9IjHphJFlUKnNd3Ao63/WdIyn69INA+R+2P7YX+AeLYceC6ihznfnxXzuovqAtGXHXzorQwxy6N4OMa4sbNpWYpe6s0szpR63ShnXBqssG1RGH0A+gNH3lPHdBus6BR/Wpw/rpUXPtacYHUau0EluLBz2XPnTQOWmmEZPO5oTVI/26/x32zuIPtesUadBjZf4Xj/94GVuLB7G0QahntySIa6scNafuco24LorLam5StPQwh5a+H4X1q6Xot/o0+27y6Ou73J/rYDKsrOs7RdSANylCP4BcB4lR56Z5TAqfaw+6p7BgpxljVJ/rry9JsOnewIl/ESzs8bDAuywkJbmXamne6dKipR8AWf4x03R5XM5JWmfSc126P35Bm8uqj6dF6PtJ9T9+2kWkpF0elxmYoHOCFohc66su5y+bdjEpqv4y5umBCLT0g0yaVj5sa0Ka7QxxfXrXe4q6ZnXdru8YceedWpz6qdN90NIPsCzdnerHkqyuZl0NjlqRTfLCCOvHu9xPFrT0/Sis/xxVXko3wEx6X2HXce3T+98l0vbf8x60BiH0A8Bl9ibPefqoQXTcQDbuekEvhDQb28JEzeqkRfcG5tDS9zPXFjPtvHjS+whbDS6Luh/X7Qp5o08/DOTVN/fXFTZD4z+W5hpxdfhfxGF7bwYCoR9g9Qp80GNSsmlN12uW64161wiaCh2o8NOnH0Bppw6T7J50HcC63E9Qi53mflyuVU+EHubQvRkikrSMWVrRoHl2/7tF2nFBVPemP7s7tPQDIOmqaL0Dn2aV1uUekm6O66/uDi39IJM2tNLpraXL7E2SFtx1l2V12ajy9d6NGYbQD3GuG9SyzN5knebMutEs764P3RuYQ+gHiaB+dVxf27WVjzs3zbXzVo/dmGHo3gwCaefMXTd2VR+P6tO7Xjvqflw2l8VtInPp02fp7hD6QSjNyqr/mP940q0D/nsJC1k99tzUu09P6IeQJN2WrLMyri+SPKc5y/z3HffOkBR9ephDSz9EpBm0BrWeQeeGjQGi7iWsTv/5aVrjqIFrVOvvitAPMJeVySRz8VlWbrMuToU9nkefPOr8F97hP1obkpIMUMuPpelPpxl4Jj0nbDq0Xiusp+rlP1obEoIGnf7HXOuR0s2gZO2KxN2TNLj20kuEfshJMs8e11cPKudaVxZRMzX9gdkbmEPoB6G4gWvSVt515ibLnHua7RLlx4IWo+q5/YHuzQDLMiBNumqbZLYm64A3qGtVxi5L1Ihr5dNsBMu6curSUgfNOpWFvdjKj7msMvtleT6EfghwDa3rNgWXxSfXMJbLubxrVPNPaYadG3XttAg9zKFPP0hknWt3OTfJhrW018syxVnvvnwZLf0gENad8HdFgspFzehEdWVcF8RcukJRfXqXfUFhZfPuy5fR0g9Safbk+FtZ11mZJO8U5XJBL8jqx/znVNcf1nqHHQ/a8uxSXxhCPwTEBT4ocHmvrEa9Y5QF1R8W2OrHwx5zuacy/s8pIAKhH4SSzMm7ThumuYck44Gw43H9cv+KrMuUZ1CZU//nlBtCP8RUh9H/4pCSz3WnfYFUXy9pHS599/LvrudvfWOv8/Xp0w8yafewuNQZNBPkcp0k1806dvDXVRbX90/yvwsS+kEirqV26VKE7XfJ0vrHDZhduh5Jrx0U7DwHwXRvYA4t/SAV1xVJ+s6QdFAadz/la4e1ymlb4bgp0LCySRD6QSiuvy1FByJt4KOCHTTIDJuTdynrIo+FqCCEfpCpx0DWX0dZkuu4BD5J2Xq+A8ShTz9EpOmGhD0WtcfH5Tr+ALqsI4SdX12Pq6yDZ0IPc+jeDGMuU5auK75ZuhP++4ibkkzafz9Vju+9GfZc5s/jdmAm6TKVz6n+Pc09++8zqpxL2TTo3gxiLntv+vPaLvtk6nEfeV+H0A9SYYNOl3JZtyv4j0luAc9jsB1WviyPFwDdm0EoyTx9VBfGpT5/nf7yQd0ll65JXNm0XaY85u5p6WEOLf0QErWyKgV/WiroeHVdrqu31fWFXStoI1rSrQRJBq5pB7i09EOAS3iTzMLE1VX+s+tCVdDMUFpZF65cEPpBLMvsjf/FEDZILYfVH3jXF5LrfWSto1rW+gj9IBUXvCRdnajAx9WbZkYmbJ49zxdSlvoIPcxhIDvEuA5O87xO2PRi0BjAf05QnWV5bW9IitAPIUlnb/K+TtIy5XJlQS8av3psO/CjezOEuSw6JRmgxvX9/a15mvuNOz8s8HmNByRa+iHLJfAuA1KXldao1VPX+fiwOsuSzueH3Y8LWnqYQ0s/BPjn06XknzRymZ70P1a+TtAqq//8sD1BWVZX07T+Lgj9EOEa9rgXSNTAMm6Q7O/W+I9FXSdNQKP691kGu3RvDAkayLqs3EadWxb0Agpr7fNeoU2K0A9x1WEM20SWtK4ke3TCjkdtoeiP/TVRCD3MoU8/iKWdDgyrK247cJKdkmHl0s7j16v/HoSWfggL2yUZd04eOx/D7sX1eJJ6g2Spk5Z+CAjqaycJk2tfP27vTtw0psufq8/JIksdhH6ISTp1WX1O0OMug9aox+NEddH6Y59NELo3MIfQDxFB899x5fzHowadQY+l7adHzd9XH8/6LpIWoR9GXPr5cQNZ/wvB3z0JmvGJGi8kGWCX5bmjMgihH+KCVkpdz5NO3zqQZHEpz1kZ/30EPc7WYiSeDgwb3KaZp89b3JpEnoNgWvphLKi19m9E829jKB+vLu8vF3W9rHP1rvt0sowHCD3MIfTDQL1WWdPei3R6Hzxty+wya7WoOJP/PNmSPMIet9IaVS5Jnf57TtInj+vTJ/nPk2nphyjXLQVpphP9/XfXNYKw+yifG3Y8y0pvGoR+mMky+xI3jRl2juv6QDWXqdF6IfQwh9APMVm2B4TVVxY0tZmkC+WvI8199EeLT+iHgSQBda0vbrbEZf5ccptnry7nen4WhH6YidpK4LqNOM+gJdkK7Rc2w5P1/gj9EBbX4sattJa5zqBErfCmHcimkXUPPqGHOYR+iHJp5YP22VRLuh/GP3cftnCVts6wMn50b4wLW4Tyd1+yBN7lAykuj4WVT7pFIejFkGQbAqEfwpJ8QCPNVGaSKUv/8bIsU6hJ6ji1DcENe2+GgaCtwlkGey4fHknygisLm5ZMUkf19dOipYc5tPRDXNIuTtSnklweT3puUNlqaVr/sD79+A+6nU9LPwyl3cDVn1sBqq+ZxyxNkj49oUekqNkbl+3LWa8dhClLVPinLNN+pjWqvMu+m3q/UzBlCSTEQHYYCBpMuuyFiXsXSFpnUN1Z98m44uOCkJR8l2VYHUnK+6+d5tx6I/TDSNI+fZJyUee7vmuUDfSLIPfQr1+/XhdffLGam5s1efJkXXPNNXr99ddryniep3Xr1qlYLGr06NGaN2+e9u/fX1Omt7dXq1at0qRJkzR27FhdffXVeuutt/K+3WEnSesatTEt6SA46XX9hvRnZLdv366bb75ZL7/8srZt26b3339fCxcu1C9/+ctKmQ0bNmjjxo3atGmTdu3apUKhoCuvvFJHjhyplGlvb9fWrVu1ZcsW7dixQ0ePHtXixYt14sSJvG8ZxjR4nufV8wI///nPNXnyZG3fvl1XXHGFPM9TsVhUe3u71qxZI+lUq97a2qoHHnhAK1asUKlU0llnnaUnn3xSS5YskSS98847mjp1qp5//nktWrTotOv09vaqt7e38ntPT4+mTp2qefq4GhtG1vMpDkpRm8CqywTtxgw67he1wpt1b0yaQfD73nF9V99QqVTSuHHjIsvWvU9fKpUkSRMmTJAkHThwQJ2dnVq4cGGlTFNTk+bOnaudO3dKknbv3q3jx4/XlCkWi5o+fXqljN/69evV0tJS+Zk6dWq9ntKw4bKnPey8qG5Qll2W5fPrOQiua+g9z9Pq1at1+eWXa/r06ZKkzs5OSVJra2tN2dbW1spjnZ2dGjVqlMaPHx9axm/t2rUqlUqVn0OHDuX9dIasvFZLXT8amOe16zEIrus8/S233KIf/ehH2rFjx2mPNTQ01Pzued5px/yiyjQ1NampqSn9zaLCZZ7d372J6tL4W+2s2579Xnhnj+ZP+ZBzHXVr6VetWqXnnntOL730kj7wgQ9UjhcKBUk6rcXu6uqqtP6FQkF9fX3q7u4OLYNkknx4O6oPn2WfTZpPSbnWm0Tuofc8T7fccoueffZZfec739G0adNqHp82bZoKhYK2bdtWOdbX16ft27drzpw5kqRZs2Zp5MiRNWUOHz6sffv2VcoAaeXevbn55pv19NNP6xvf+Iaam5srLXpLS4tGjx6thoYGtbe3q6OjQ21tbWpra1NHR4fGjBmjpUuXVsouX75ct99+uyZOnKgJEybojjvu0IwZM7RgwYK8b3nYSrLXPW39eX+VR73utVruod+8ebMkad68eTXHH3vsMX32s5+VJN155506duyYVq5cqe7ubl1yySV68cUX1dzcXCn/4IMPqrGxUddee62OHTum+fPn6/HHH9eIESPyvuVhKe4D3dXBcvkQievKbtbAxm0nzuMFUfd5+oHS09OjlpYWs/P0UviXO1U/HjZP7z8v7Fieg9S0ygPZQTNPj4GX17chxM2f1+ODJC4GfCALDHbspx/G8uyGBI0HwsYNWa7THwi9AXl8CCTJt5z5zxtswad7gwp/2NNsUw467lpHfyH0hgXta4nahBY1uHVd7a2+1kAh9DCH0KOiP7siA/npKUIPJ1k/S+t6jSB5X5PQG5OkD+7/sIhL3fV4UUS9GNJcjylLQ8KmItNOKQZ9+0J/SnvftPQwh5bemKgNZlErrUnqH4wLUtVo6ZHrQpTLNykMNFp61AhafIrbkhBXX9lg2Y9D6A1L0hUJezEkGRBHzc335wuB7g3MIfQIFDWfHzXQTfO9OP09BiD0iFXdlXF5IWQJcX+8AAg9TuP6HTf+rQlRn6ctH+/Pb0cLw0DWuLAWOqpc9e9B8/5hW5YZyGJQc+nKBAW++vegd4CwPfrV5wVdK0+EHuYQesTuvEw6kE17najzyvJo9Qk9KsIGonl8WWu53qQfK8zrfqoRevS7gfpSqDJCj1TCvvMm7mtBgrYvpOnuZHnREHqYQ+iRWNQWYpcW3L9JLW6gGvVVJWHnRCH0SMUf7rhFqjRhjjo3qp44hB6nSfLNB0HhjttDH/cOUK0e345M6OHE9YUQ9A4Q9iWv1eVc6qw+h+4NkAAbzhDIP9jM0p3wL3pVt9JRXaPy4/7jwfUdd74fWnr0G9ftDknrS4rQw1mSvTNx+3Sk+Bkd/xdJ5bWKS+jhxP/BEsn960LCygYNUPsDoYc5hB6R/J+sivrKj7h9N3FlXT5swtZiDJisq6kuZYPm85N0rcIQesRy/YBItaDtCf7Hs95Tta1v7HU+l9DDSdIV0KjpxDw+lOKv4xMfnOFcF6GHOYQeiWX5Lpt63UMShB6Z+Gd08qzTtT62FmPAJHkHCJqeDPpCqXKZPLHhDHUR921m/g+aRM30+NcKsiL0GBD1asVd0L2BOYQe/aYeg940CD0GlbBtxOy9wbDTn996RugxIKK+FDbrF8XGIfQwh9DDHEKPARP32dd6dXEIPQaNqC+G8r842HCGIS/qS2HLj0c9lgShhznsvcGgEfVNaP5jWTaeEXoMOi5f2Jol9HRvMOgFBZ7ZGwxZaT4lxVd1AwnRp8eQEzTg3frGqxr/QbfzCT2GrOrw9xxxP4/uDYYFvuwJQw776YE6IvQYNKK+qjvuPL7AFUOay3+87EefHsNKmv9FPAqhx5DE3hsgAUIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcype+jXr1+vhoYGtbe3V455nqd169apWCxq9OjRmjdvnvbv319zXm9vr1atWqVJkyZp7Nixuvrqq/XWW2/V+3ZhQF1Dv2vXLj388MP68Ic/XHN8w4YN2rhxozZt2qRdu3apUCjoyiuv1JEjRypl2tvbtXXrVm3ZskU7duzQ0aNHtXjxYp04caKetwwD6hb6o0ePatmyZXrkkUc0fvz4ynHP8/TQQw/p7rvv1ic/+UlNnz5dTzzxhN599109/fTTkqRSqaRHH31UX/nKV7RgwQJdeOGFeuqpp7R3715961vfqtctw4i6hf7mm2/WVVddpQULFtQcP3DggDo7O7Vw4cLKsaamJs2dO1c7d+6UJO3evVvHjx+vKVMsFjV9+vRKGb/e3l719PTU/ABBGutR6ZYtW/Tqq69q165dpz3W2dkpSWptba053traqoMHD1bKjBo1quYdolymfL7f+vXrdc899+Rx+xjmcm/pDx06pNtuu01PPfWUzjzzzNByDQ0NNb97nnfaMb+oMmvXrlWpVKr8HDp0KPnNw4TcQ7979251dXVp1qxZamxsVGNjo7Zv366vfvWramxsrLTw/ha7q6ur8lihUFBfX5+6u7tDy/g1NTVp3LhxNT9AkNxDP3/+fO3du1d79uyp/MyePVvLli3Tnj17dO6556pQKGjbtm2Vc/r6+rR9+3bNmTNHkjRr1iyNHDmypszhw4e1b9++Shkgrdz79M3NzZo+fXrNsbFjx2rixImV4+3t7ero6FBbW5va2trU0dGhMWPGaOnSpZKklpYWLV++XLfffrsmTpyoCRMm6I477tCMGTNOGxgDSdVlIBvnzjvv1LFjx7Ry5Up1d3frkksu0Ysvvqjm5uZKmQcffFCNjY269tprdezYMc2fP1+PP/64RowYMRC3jGGkwfM8b6Bvoh56enrU0tKiefq4GhtGDvTtoM7e947ru/qGSqVS7HiOvTcwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCnLqF/++23df3112vixIkaM2aMZs6cqd27d1ce9zxP69atU7FY1OjRozVv3jzt37+/po7e3l6tWrVKkyZN0tixY3X11VfrrbfeqsftwpjcQ9/d3a3LLrtMI0eO1L/+67/qtdde01e+8hX95m/+ZqXMhg0btHHjRm3atEm7du1SoVDQlVdeqSNHjlTKtLe3a+vWrdqyZYt27Niho0ePavHixTpx4kTetwxjGjzP8/Ks8K677tK///u/63vf+17g457nqVgsqr29XWvWrJF0qlVvbW3VAw88oBUrVqhUKumss87Sk08+qSVLlkiS3nnnHU2dOlXPP/+8Fi1aFHsfPT09amlp0Tx9XI0NI/N7ghiU3veO67v6hkqlksaNGxdZNveW/rnnntPs2bP1qU99SpMnT9aFF16oRx55pPL4gQMH1NnZqYULF1aONTU1ae7cudq5c6ckaffu3Tp+/HhNmWKxqOnTp1fK+PX29qqnp6fmBwiSe+h/+tOfavPmzWpra9MLL7ygm266Sbfeeqv+7u/+TpLU2dkpSWptba05r7W1tfJYZ2enRo0apfHjx4eW8Vu/fr1aWloqP1OnTs37qWGYyD30J0+e1EUXXaSOjg5deOGFWrFihT7/+c9r8+bNNeUaGhpqfvc877RjflFl1q5dq1KpVPk5dOhQtieCYSv30E+ZMkUXXHBBzbHzzz9fb775piSpUChI0mktdldXV6X1LxQK6uvrU3d3d2gZv6amJo0bN67mBwiSe+gvu+wyvf766zXH3njjDZ1zzjmSpGnTpqlQKGjbtm2Vx/v6+rR9+3bNmTNHkjRr1iyNHDmypszhw4e1b9++Shkgrca8K/zCF76gOXPmqKOjQ9dee61eeeUVPfzww3r44YclnerWtLe3q6OjQ21tbWpra1NHR4fGjBmjpUuXSpJaWlq0fPly3X777Zo4caImTJigO+64QzNmzNCCBQvyvmUYk3voL774Ym3dulVr167Vvffeq2nTpumhhx7SsmXLKmXuvPNOHTt2TCtXrlR3d7cuueQSvfjii2pubq6UefDBB9XY2Khrr71Wx44d0/z58/X4449rxIgRed8yjMl9nn6wYJ7elgGdpwcGO0IPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MOc3EP//vvv60tf+pKmTZum0aNH69xzz9W9996rkydPVsp4nqd169apWCxq9OjRmjdvnvbv319TT29vr1atWqVJkyZp7Nixuvrqq/XWW2/lfbswKPfQP/DAA/r617+uTZs26cc//rE2bNigv/zLv9TXvva1SpkNGzZo48aN2rRpk3bt2qVCoaArr7xSR44cqZRpb2/X1q1btWXLFu3YsUNHjx7V4sWLdeLEibxvGcY0eJ7n5Vnh4sWL1draqkcffbRy7I/+6I80ZswYPfnkk/I8T8ViUe3t7VqzZo2kU616a2urHnjgAa1YsUKlUklnnXWWnnzySS1ZskSS9M4772jq1Kl6/vnntWjRotj76OnpUUtLi+bp42psGJnnU8Qg9L53XN/VN1QqlTRu3LjIsrm39Jdffrm+/e1v64033pAk/fCHP9SOHTv00Y9+VJJ04MABdXZ2auHChZVzmpqaNHfuXO3cuVOStHv3bh0/frymTLFY1PTp0ytl/Hp7e9XT01PzAwRpzLvCNWvWqFQq6bzzztOIESN04sQJ3XfffbruuuskSZ2dnZKk1tbWmvNaW1t18ODBSplRo0Zp/Pjxp5Upn++3fv163XPPPXk/HQxDubf0zzzzjJ566ik9/fTTevXVV/XEE0/or/7qr/TEE0/UlGtoaKj53fO80475RZVZu3atSqVS5efQoUPZngiGrdxb+i9+8Yu666679OlPf1qSNGPGDB08eFDr16/XjTfeqEKhIOlUaz5lypTKeV1dXZXWv1AoqK+vT93d3TWtfVdXl+bMmRN43aamJjU1NeX9dDAM5d7Sv/vuuzrjjNpqR4wYUZmynDZtmgqFgrZt21Z5vK+vT9u3b68EetasWRo5cmRNmcOHD2vfvn2hoQdc5d7Sf+xjH9N9992ns88+Wx/60If0gx/8QBs3btTnPvc5Sae6Ne3t7ero6FBbW5va2trU0dGhMWPGaOnSpZKklpYWLV++XLfffrsmTpyoCRMm6I477tCMGTO0YMGCvG8ZxuQe+q997Wv68z//c61cuVJdXV0qFotasWKF/uIv/qJS5s4779SxY8e0cuVKdXd365JLLtGLL76o5ubmSpkHH3xQjY2Nuvbaa3Xs2DHNnz9fjz/+uEaMGJH3LcOY3OfpBwvm6W0Z0Hl6YLAj9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9zCD3MIfQwh9DDHEIPcwg9zEkc+n/7t3/Txz72MRWLRTU0NOif/umfah73PE/r1q1TsVjU6NGjNW/ePO3fv7+mTG9vr1atWqVJkyZp7Nixuvrqq/XWW2/VlOnu7tYNN9yglpYWtbS06IYbbtD//d//JX6CgF/i0P/yl7/URz7yEW3atCnw8Q0bNmjjxo3atGmTdu3apUKhoCuvvFJHjhyplGlvb9fWrVu1ZcsW7dixQ0ePHtXixYt14sSJSpmlS5dqz549+uY3v6lvfvOb2rNnj2644YYUTxGo1eB5npf65IYGbd26Vddcc42kU618sVhUe3u71qxZI+lUq97a2qoHHnhAK1asUKlU0llnnaUnn3xSS5YskSS98847mjp1qp5//nktWrRIP/7xj3XBBRfo5Zdf1iWXXCJJevnll3XppZfqP//zP/U7v/M7sffW09OjlpYWzdPH1dgwMu1TxBDxvndc39U3VCqVNG7cuMiyjXle+MCBA+rs7NTChQsrx5qamjR37lzt3LlTK1as0O7du3X8+PGaMsViUdOnT9fOnTu1aNEi/cd//IdaWloqgZek3/u931NLS4t27twZGPre3l719vZWfi+VSpKk93VcSv2yxlDxvo5LOtXwxsk19J2dnZKk1tbWmuOtra06ePBgpcyoUaM0fvz408qUz+/s7NTkyZNPq3/y5MmVMn7r16/XPffcc9rxHXo++RPBkHXkyBG1tLRElsk19GUNDQ01v3ued9oxP3+ZoPJR9axdu1arV6+u/H7y5EkdPHhQM2fO1KFDh2Lf8tLq6enR1KlT63aNetc/XK7heZ6OHDmiYrEYWzbX0BcKBUmnWuopU6ZUjnd1dVVa/0KhoL6+PnV3d9e09l1dXZozZ06lzH//93+fVv/Pf/7z095FypqamtTU1FRz7IwzTo3Tx40bV7d/zLJ6X2M4PId6XyOuhS/LdZ5+2rRpKhQK2rZtW+VYX1+ftm/fXgn0rFmzNHLkyJoyhw8f1r59+yplLr30UpVKJb3yyiuVMt///vdVKpUqZYC0Erf0R48e1U9+8pPK7wcOHNCePXs0YcIEnX322Wpvb1dHR4fa2trU1tamjo4OjRkzRkuXLpV06tW4fPly3X777Zo4caImTJigO+64QzNmzNCCBQskSeeff77+4A/+QJ///Of1t3/7t5KkP/mTP9HixYudZm6ASF5CL730kqdT8yE1PzfeeKPneZ538uRJ78tf/rJXKBS8pqYm74orrvD27t1bU8exY8e8W265xZswYYI3evRob/Hixd6bb75ZU+YXv/iFt2zZMq+5udlrbm72li1b5nV3dye61/fee8/78pe/7L333ntJn+agucZweA79dQ1XmebpgaGIvTcwh9DDHEIPcwg9zCH0MIfQwxxCD3MIPcwh9DCH0MMcQg9z/j+Nkup49RcYMAAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 400x1600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.matshow(rec)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "138bc3d9-b0a8-4aaa-94c5-e14c300e7d99",
"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.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment