From 12808b9670aff8c7b9eb2a9da6c639d7f7fa9417 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Fri, 7 Aug 2020 20:23:52 -0400 Subject: [PATCH] Added notebook file. --- parallel-java.ipynb | 288 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 parallel-java.ipynb diff --git a/parallel-java.ipynb b/parallel-java.ipynb new file mode 100644 index 0000000..49d6fc5 --- /dev/null +++ b/parallel-java.ipynb @@ -0,0 +1,288 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_result(single, threads, manager, streams, sizes, xLab=\"Tasks\", yLab=\"Execution Time (MS)\", title=\"Execution Times\"):\n", + " plt.title(title)\n", + " if len(sizes) == len(single):\n", + " plt.plot(sizes, single, label=\"Single Threaded\")\n", + " if len(sizes) == len(threads):\n", + " plt.plot(sizes, threads, label=\"Vanilla Threads\")\n", + " plt.plot(sizes, manager, label=\"Parallel Task Queue\")\n", + " plt.plot(sizes, streams, label=\"Parallel Stream\")\n", + " plt.legend(bbox_to_anchor=(0.6, 0.95), loc='upper left', borderaxespad=0.)\n", + " plt.xlabel(xLab)\n", + " plt.ylabel(yLab)\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3jUVdbA8e9JI4EQAiQU6UgTSAghFBdQFAVUDCKioqK8FlwruspaV1kV167YBUVAEAsuiG1FEcSCCkE6BKSXAAlIGglp9/3jzsQJpEySmUnhfJ4nT2Z+9c4E5sxt54oxBqWUUgrAr6oLoJRSqvrQoKCUUqqQBgWllFKFNCgopZQqpEFBKaVUIQ0KSimlCmlQUKckERkoIok+uM8kEZnt7fu4S0RmiMgTPrrXThE5zxf3Up6jQUF5hYiME5F1InJMRA6IyBsiEl6F5TEi0sH53BjzgzGmc1WVx0lEwh3vzQHHe7VORP6vqsulTl0aFJTHicg9wNPARKAB0A9oA3wjIkFeuF+Ap6/pC4734lvse3Mm9r2aCDwlIv/wwv1q5PukfEuDgvIoEQkD/g3cYYz5nzEm1xizE7gcaAtc4zhukojME5EPRSRdRFaJSA+X65wmIp+ISLKI7BCRO132Oc+dLSJpwDgR6SMiy0XkqIgkicirzgAkIsscp64RkQwRuUJEBonIXpdrniEiSx3nbxCReJd9M0TkNRH5wlHWX0XkdJf9U0Rkj4ikiUiCiAx08+0aC7QGRhtjdjjeq/8BdwKPiUiYiNwnIvNOeI+niMjLjscNROQdx2veJyJPiIi/Y984EflJRF4UkcPAJMclGpbyWrqIyDcickREEkXkcpd9F4nI747XuUdEJuFCRMaKyC4ROSwiD7n5HqjqxhijP/rjsR9gGJAHBBSzbyYw1/F4EpALXAYEAvcCOxyP/YAE4BEgCGgPbAeGnnDuJY5jQ4Be2BpJADb4bALucrm3ATq4PB8E7HU8DgT+AB503O9cIB3o7Ng/AzgM9HFcfw7wgcu1rgEaO/bdAxwAgl3KOruE9+oDYGYx2wMc7+FQbC3iGFDfsc8fSAL6OZ7PB94C6gFNgN+Amx37xjmuc4fjmiGlvRbHNfYA/+fY1xNIAbq6vGdRjvc8GjgIXOLY1xXIAM4C6gAvOO59XlX/m9Sf8v1oTUF5WgSQYozJK2ZfkmO/U4IxZp4xJhf7IRKM/WDvDUQaYx4zxuQYY7YD04ArXc5dboxZYIwpMMZkGWMSjDG/GGPyjK2ZvAWc7WaZ+wGhwFOO+30HfA6McTlmvjHmN8frmgPEOHcYY2YbYw477v089kPRnf6KCMd7UoTjHilAhDFmF7AKGOnYfS5wzBjzi4g0BS7EBr9MY8wh4EWKvk/7jTGvOMqWVcZrGQ7sNMa86zj+d+ATYLSjXEuNMesc7/laYC5/vceXAZ8bY5YZY44D/wIK3HgPVDWjbYzK01KACBEJKCYwNHfsd9rjfGCMKXA055yG/VZ/mogcdTnWH/ihuHMBRKQTNrDEAXWx/7YT3CzzacAeY4zrh9guoIXL8wMuj49hg4jz3vcCN7iUPYyiwa8kKdj3pAhH238Ef71X72MD1CzgKsdzsLWIQCBJRJyn+1H0vSnyPpXxWtoAfU943wOA9xzl6gs8BXTH1qjqAB87jjuNon/PTEeTlaphtKagPG05cBy41HWjiIQCFwCLXTa3ctnvB7QE9mM/XHYYY8JdfuobYy50OffE9L5vAJuBjsaYMGxTkOCe/UArRxmcWgP7yjrR0X/wT2yfSUNjTDiQ6ua9vwUuEJF6J2wfhX0Pf3E8/xgYJCItsTUGZ1DY4zguwuV9CjPGdHO5VnnSIO8Bvj/hfQ81xtzi2P8+sBBoZYxpALzp8jqTKPr3rIttUlM1jAYF5VHGmFRsR/MrIjJMRAJFpC3wEbAXx7dOh14icqnjm/Fd/PVB+BuQ7uhkDRERfxHpLiK9S7l1fSANyBCRLsAtJ+w/iO2bKM6v2G/M/3SUdxBwMbbNvyz1sW3nyUCAiDyCrSm44z3se/KxiLR13Hso8DIwyfFeYoxJBpYC72KD5SbH9iRgEfC8o1PaT0ROFxF3m81O9DnQydFhHOj46S0iZ7i81iPGmGwR6YOttTjNA4aLyABHB/9j6OdLjaR/NOVxxphnsN/Un8N+UP+K/RY62NHe7PQpcAXwJ3YkzqXGjsDJx7Zvx2A7n1OAt7FDNktyL/ZDKh3b//DhCfsnATMdo4sud91hjMnBBoELHPd6HbjWGLPZjZf7NfA/YAu2ySmb4ptsTuJ4L85zHP8r9r16AXjIGPPsCYe/7zj2/RO2X4ttytmIfR/nUUyTlJvlSQeGYPsk9mObmZ7GNhMB3IodFZWOHQTwkcu5G4DbHOVLcpSlcHSXqjnEGF1kR/meYzhjB2PMNVVdFqXUX7SmoJRSqpAGBaWUUoW0+UgppVQhrSkopZQqVKMnr0VERJi2bdtWdTGUUqpGSUhISDHGRBa3r0YHhbZt27Jy5cqqLoZSStUoIrKrpH1eaz4SkekickhE1rts+1BEVjt+dorIasf2tiKS5bLvTW+VSymlVMm8WVOYAbyKzdcCgDHmCudjEXkemw7AaZsxJgallFJVxmtBwRizzJHe4CRis3ddjs34qJRSqpqoqtFHA4GDxpitLtvaORbw+L4ci5QopZTyoKrqaB6DzcXulAS0NsYcFpFewAIR6WaMSTvxRBEZD4wHaN26tU8Kq5RSpwqf1xQcGTEvxSVhmTHmuDHmsONxArAN6FTc+caYqcaYOGNMXGRksSOqlFJKVVBVNB+dB2w2xriujxvpsq5se6AjdvlFpZRSPuTNIalzsQuudBaRvSJyg2PXlRRtOgK7rutaxxDVecDfjTFHvFU2parchgWQfqDs45TyMW+OPhpTwvZxxWz7BLsWrFK137Ej8PF1cObtMHRyVZdGqSJq9IxmpWqk5ET7+8Bar98qNzeXvXv3kp2d7fV7qeovODiYli1blnqMBgWlfC3FGRTWgTEg7i4lXX579+6lfv36tG3bFvHifVT1Z4zh8OHD7N1b+oJ4miVVKV9L3mJ/Z/0Jqd5dsTI7O5vGjRtrQFCICI0bNy6z1qhBQSlfS0kE/yD7+MA6r99OA4JycuffggYFpXwtORE6nAeIT/oVlCoPDQpK+dLxDEjdA6f1hMYdIKn2B4XJkyfTrVs3oqOjiYmJ4ddffwXgxhtvZOPGjRW65s6dO+nevbtbxx4+fJiYmBhiYmJo1qwZLVq0KHy+ZcsWt69TWaGhoeU6ftKkSTz33HNeKk3JtKNZKV867Ej3FdEJmkfDnhVVWx4vW758OZ9//jmrVq2iTp06pKSkkJOTA8Dbb7/tkzI0btyY1atXA/aDNjQ0lHvvvRewwcUdeXl5BAScGh+XWlNQypecncyRXaBZNKTutvMWaqmkpCQiIiKoU6cOABEREZx22mkADBo0qHCRrNDQUB566CF69OhBv379OHjwIADbtm2jX79+REVF8fDDDxf7bTs/P5+JEyfSu3dvoqOjeeutt8pVxvz8fG666Sa6devGkCFDyMrKKizfXXfdRVxcHFOmTCEhIYGzzz6bXr16MXToUJKSkgCYNm0avXv3pkePHowaNYpjx44BsGPHDs4888zCsrt69tlnC8v76KOPFm6fPHkynTp1YsCAASQmJpbrdXjKqRH6lKoukjeD+EOj9tAsym47uB7aneX1W//7sw1s3H9SjslK6XpaGI9e3K3E/UOGDOGxxx6jU6dOnHfeeVxxxRWcffbZJx2XmZlJv379mDx5Mv/85z+ZNm0aDz/8MBMmTGDChAmMGTOGN98sfu2td955hwYNGrBixQqOHz9O//79GTJkCO3atXPrNWzdupW5c+cybdo0Lr/8cj755BOuueYaAHJycli5ciW5ubmcffbZfPrpp0RGRvLhhx/y0EMPMX36dC699FJuuukmAB5++GHeeecd7rjjDiZMmMAtt9zCtddey2uvvVZ4v0WLFrF161Z+++03jDHEx8ezbNky6tWrxwcffMDq1avJy8sjNjaWXr16ufUaPElrCkr5UsoWGxACgmxNAWp1v0JoaCgJCQlMnTqVyMhIrrjiCmbMmHHScUFBQQwfPhyAXr16FTbrLF++nNGjRwNw1VVXFXuPRYsWMWvWLGJiYujbty+HDx9m69atxR5bnHbt2hETE3PSvQGuuMKuC5aYmMj69es5//zziYmJ4Yknnigc779+/XoGDhxIVFQUc+bMYcOGDQD89NNPjBljEzuMHTu2SHkXLVpEz549iY2NZfPmzWzdupUffviBkSNHUrduXcLCwoiPj3f7NXiS1hSU8qXkRIjsbB+HRkL95j4bgVTaN3pv8vf3Z9CgQQwaNIioqChmzpzJuHHjihwTGBhYOFzS39+fvLw8t69vjOGVV15h6NChFSqfs2nLeW9n8xFAvXr1Cu/RrVs3li9fftL548aNY8GCBfTo0YMZM2awdOnSwn3FDQE1xvDAAw9w8803F9n+0ksvVaj8nqY1BaV8JS8Hjmz/KyiArS34YK5CVUlMTCzyrX316tW0adPG7fP79evHJ5/YtGgffPBBsccMHTqUN954g9zcXAC2bNlCZmZmJUp9ss6dO5OcnFwYFHJzcwtrBOnp6TRv3pzc3FzmzJlTeE7//v0Ly+y6fejQoUyfPp2MjAwA9u3bx6FDhzjrrLNYsGABWVlZpKen89lnn3n0NbhLawpK+cqRbWDyIcI1KETBH99CbhYEhlRd2bwkIyODO+64g6NHjxIQEECHDh2YOnWq2+e/9NJLXHPNNUyePJlhw4bRoEGDk4658cYb2blzJ7GxsRhjiIyMZMGCBZ58GQQFBTFv3jzuvPNOUlNTycvL46677qJbt248/vjj9O3bl8jISPr27Ut6ejoAU6ZM4aqrruLpp59mxIgRhdcaMmQImzZt4swzzwRsE9vs2bOJjY3liiuuoEePHjRp0oTevXt79DW4S4wxVXJjT4iLizPO0QtKVXsbFtjsqOOX2nkKABs/hY+uhZuWQItYj99y06ZNnHHGGR6/rq8cO3aMkJAQRIQPPviAuXPn8umnn1Z1sWq0TZs20bVr1wRjTFxx+7WmoJSvpDiGo0a4LCro7Gw+sNYrQaGmS0hI4Pbbb8cYQ3h4ONOnT6/qItV6GhSU8pXkRGjQGoLq/bUtvA3UCavVI5AqY+DAgaxZs6aqi3FK0Y5mpXwlJREiT1h63M/P9ivU4s5mVbNoUFDKFwryIWVr0U5mp2ZRdgJbQb7vy6XUCTQoKOULR3dDXnbR4ahOzaIh95gdrqpUFdOgoJQvODuZiwsKzZ0zm7XtXFU9rwUFEZkuIodEZL3Ltkkisk9EVjt+LnTZ94CI/CEiiSJSsamJSlVXznWZIzqdvC+iM/gF1sp+hXPOOYevv/66yLaXXnqJW265pdzXWrhwIU899RRQNK30uHHjmDdvnlvXmDx5cmHabH9//8LHL7/8crmuUxlVlRLbXd6sKcwAhhWz/UVjTIzj50sAEekKXAl0c5zzuoj4e7FsSvlWciLUi4S6jU7eFxAETc6olQvujBkz5qSZyB988EFhTqDyiI+P5/77769UeR566CFWr17N6tWrCQkJKXx85513unV+edJv1FReCwrGmGWAuzmBRwAfGGOOG2N2AH8AfbxVNqV8LiXRpssuSbNoOyy1Bk8mLc5ll13GF198UbiGws6dO9m/fz8DBw7klltuIS4ujm7duhVJH922bVseffRRYmNjiYqKYvPmzQDMmDGD22+/vdT7PfbYY/Tu3Zvu3bszfvx4yjs5d9myZfztb3+jffv2hbWGpUuXMnDgQOLj4+natWuJqbozMjIYPHhwYbldJ9mVlBL75ZdfpmvXrkRHR3PllVeWq6zeUhXzFG4XkWuBlcA9xpg/gRbALy7H7HVsU6rmM8auoxB1WcnHNI+G1bMh/QCENfdOOb663/NNVM2i4IKnStzdqFEj+vTpw1dffcWIESP44IMPuPzyyxERJk+eTKNGjcjPz2fw4MGsXbuW6GjbvxIREcGqVat4/fXXee6559xekOf222/nkUceAWxm0s8//5yLL77Y7ZeTlJTEjz/+yObNm4mPj+eyy+zfbNWqVaxfv5527doxderUYlN1t2rVivnz5xMWFkZKSgr9+vUjPj6eVatWlZgS+6mnnmLHjh3UqVOHo0ePul1Ob/J1R/MbwOlADJAEPF/eC4jIeBFZKSIrk5OTPV0+pTwv4yAcTy2+k9nJdWZzLePahOTadPTRRx8RGxtLz5492bBhQ5GlOS+99FLg5FTWZVmyZAl9+/YlKiqK7777rjBpnbsuueQS/Pz86Nq1a+FCPwB9+vQpXJ+hpFTdxhgefPBBoqOjOe+889i3bx8HDx4sNSV2dHQ0V199NbNnz642K7v5tBTGmMJ3WUSmAZ87nu4DWrkc2tKxrbhrTAWmgs195J2SKuVBybb5o9hOZqemjrTWB9ZCJy+NsyjlG703jRgxgrvvvptVq1Zx7NgxevXqxY4dO3juuedYsWIFDRs2ZNy4cWRnZxee40xnXZ402tnZ2dx6662sXLmSVq1aMWnSpCLXdIdrGm3XpidnCm3n9uJSdc+YMYPk5GQSEhIIDAykbdu2Zd7/iy++YNmyZXz22WdMnjyZdevWVXlw8GlNQURc68UjAefIpIXAlSJSR0TaAR2B33xZNqW8xnUJzpIEh9nFd2phuovQ0FDOOeccrr/++sJaQlpaGvXq1aNBgwYcPHiQr776qtL3cX4AR0REkJGR4bWRRCWl6k5NTaVJkyYEBgayZMkSdu3aBVBiSuyCggL27NnDOeecw9NPP01qamphOu2q5LWQJCJzgUFAhIjsBR4FBolIDGCAncDNAMaYDSLyEbARyANuM8bo9E5VO6Qk2vxG9ZuVflyzqFo7V2HMmDGMHDmysBmpR48e9OzZky5dutCqVSv69+9f6XuEh4dz00030b17d5o1a+a11NMlpeq++uqrufjii4mKiiIuLo4uXeyXgJJSYufn53PNNdeQmpqKMYY777yT8PBwr5S5PDR1tlLeNmO4XS/hpsWlH7fsOfjucbh/NwSfvG5ARdT01NnK88pKna0zmpXyNtclOEtT2Nm8vvTjlPIiDQpKeVPWn5B5yL2g4Ex3UQtnNquaQ4OCUt7k7GQuLjvqieo3g3pNauWwVFVzaFBQyptSHLNXT1xHoSTNomrlCCRVc2hQUMqbkhPBv45dYc0dzaPtvIa8HO+WS6kSaFBQypuSE+2kNT838zs2i4KCXEje5N1yKVUCDQpKeVNxS3CWplkP+7sWdTY7U1R3796d0aNHc+zYsUpfc+fOnXTv3h2wCeuGDx9e6vHFHfP1118Xps4ODQ2lc+fOxMTEcO2117pdDnfSbRtjeOKJJ+jYsSOdOnXi7LPPZu3a6ttEqEFBKW/JyYSje9zrZHZq1B4C61X/foWcTChwL/2EM0X1+vXrCQoK4s0333TrPG+nqR46dGhh6uy4uDjmzJnD6tWrmTVrlkfv89prr/Hzzz+zZs0atmzZwkMPPUR8fDyZmZkevY+naFBQyltStgKmfDUFPz9o1r36jkAyxmZyTdkCR/eW+/SBAwfyxx9/8Nlnn9G3b1969uzJeeedV5h8btKkSYwdO5b+/fszduxYdu7cycCBA4mNjSU2Npaff/651OtnZmZy/fXX06dPH3r27FkkfbW7Skrpff/99xemub733ntPOu9f//oX48aNIz+/aDKGp59+mldffZW6desCMGTIEAYOHMicOXMAmwbEad68eYwbNw6A5ORkRo0aRe/evenduzc//fRT4XvkukhP9+7dC5MGzp49mz59+hATE8PNN998UlncUT3S8ilVG6W4kfOoOM2iYc0HUFBgg4SHPP3b02w+srlyF8nLdtQQBDB0adqT+/o+6N6peXl89dVXDBs2jAEDBvDLL78gIrz99ts888wzPP+8TZq8ceNGfvzxR0JCQjh27BjffPMNwcHBbN26lTFjxlBaFoPJkydz7rnnMn36dI4ePUqfPn0477zzyvUSi0vp3aJFC+bPn8/mzZsRkZPSXE+cOJH09HTeffddRKRwe1paGpmZmbRv377I8XFxcUWywhZnwoQJ3H333QwYMIDdu3czdOhQNm0qua9p06ZNfPjhh/z0008EBgZy6623MmfOnHI1h4EGBaW8JzkRxB8anV6+85pFwYpp8OcOaFzOc73GQG42mHzwDwK/AMg9ZreVISsri5iYGMDWFG644QYSExO54oorSEpKIicnpzAtNdgV1kJCQgDIzc3l9ttvZ/Xq1fj7+7Nly5ZS77Vo0SIWLlxY+E06Ozub3bt3l+uVfvTRR0ydOpW8vDySkpLYuHEjXbt2JTg4mBtuuIHhw4cX6Z94/PHH6du3L1OnTi3Xfcry7bffFgkcaWlppSbMW7x4MQkJCYW5lbKysmjSpEm576tBQSlvSUmERu3scpvl4Tqz2YNB4b4+91XsxLzjcGS7/R3eCuo2ttsP/+EIFAUgJddonH0Kru644w7+8Y9/EB8fz9KlS5k0aVLhPtc01S+++CJNmzZlzZo1FBQUEBwcXGpRjTF88skndO5ctB/HdW2E0pSU0jsgIIDffvuNxYsXM2/ePF599VW+++47AHr37k1CQgJHjhyhUaOiy62GhYVRr149tm/fXqS2kJCQwJAhQwCK1CxcU20XFBTwyy+/nPSaAwICKMjPt015IoXnGGO47rrr+M9//uPWay2J9iko5S3JieXrZHaKPMPWMKpDv0JOpm0Gy8+1AcoZEMCuOV2QC9mp5b5samoqLVrYxRVnzpxZ6nHNmzfHz8+P9957r8w28qFDh/LKK68UroXw+++/l6tcJaX0zsjIIDU1lQsvvJAXX3yRNWv+ymY7bNgw7r//fi666CLS09NPuubEiRO58847ycrKAmwNYMOGDYWrujVt2pRNmzZRUFDA/PnzC88bMmQIr7zySuFzZ2Bt26Y1q379ETIPsWrVKnbs2AHA4MGDmTdvHocOHQLgyJEjhem7y0NrCkp5Q36u/XbdpfShksUKDLb9EFU9Aik7Ff7caZuKGreHwJCi++uE2aakzBQIaViuS0+aNInRo0fTsGFDzj333MIPthPdeuutjBo1ilmzZjFs2LAitYji/Otf/+Kuu+4iOjqagoIC2rVrx+eff17qOa5KSumdnp7OiBEjyM7OxhjDCy+8UOS80aNHk56eTnx8PF9++WVh8xfYWtHRo0eJjo4mNzeXnJwc1q9fX1gDeOqppxg+fDiRkZHExcUVNhG9/PLL3HbbbURHR5OXl8dZZ53Fm6+/yqhBPZn19ht0630Wfc/sT6dOdiBD165deeKJJxgyZAgFBQUEBgby2muv0aaNmxMnHTR1tlLekJwIr/WBkW9BjwosyD7/77BtCdybWPaxpahw6uyMZEjbC4F17TBZ/8Dij0s/COn7bRA7MWiok2RkZDBy5Eh69+7Nk08+Wb6TizTjtYa6jco+pxhlpc7WmoJS3pDs+DAvbQnO0jSLgjVzIeMQhJa/s7DCjIG0fZCZDHUaQMM2pc/GrtsY0pNsbSG8VcnHKcAOP/3mm2/Kf2JOpg0IxthmvDr1PV84B+1TUMobKh0UnJ3NPmxCKsi3I54yk21/QaN2Zafn8A+wTUdZR9yezKbKKesopPxhO/MjOnk1IIAGBaW8IyURGrSCOqFlH1ucZjaFg8/6FfJz7Wii7FQIawENWoLLqJhS1Yu0I5COHfFuGU9FGYdsoA4MtgEhsPTRV56gzUdKeYMzEV5FhTS07ca+qCnkZtmmiYI8aNgeQsq5FGhQXdv3kJliA4S7wUSVzLUZL7iBzbLrblLFStKaglKeVlBgU1y4s9paaZpFez8x3vF0W1ZTAI07lD8gONWLhPzj9nqqcgry4YizGa8JNHSjGc+D3AoKItJEREaKyG0icr2I9BEpZbaKPWe6iBwSkfUu254Vkc0islZE5otIuGN7WxHJEpHVjh/3MmYpVR2l7oa8rMrVFMAGhcPb4HjJs1gr5dhhe33/QFvWoNKHe5YqJNwOXc1M8Vz5TkXOZrzjqbYJr0ELn9e8yvpgP0dEvga+AC4AmgNdgYeBdSLybxEJK+H0GcCwE7Z9A3Q3xkQDW4AHXPZtM8bEOH7+Xv6XolQ1kVzBnEcnah4NGDi4odJFOkn6ATi62waCiI4QUKdy1xM/OxLpeKodMumiuqbOBjh27BhXX301UVFRdO/enQEDBpCRkcHRo0d5/fXXK13OcsnNshMF87LtMOB6kb69v0NZNYULgZuMMb2NMeONMQ8bY+41xsQDPYDfgfOLO9EYsww4csK2RcYY5xCFX4CWlSu+UtVQ4RKclW0+irK/Pd2vkHPMDiMNbmiHN/p5qGuxboT9faxobaG6ps4GmDJlCk2bNmXdunWsX7+ed955h8DAwFKDglfKVaQZr6PtR6gipQYFY8xEY0yx2aSMMXnGmAXGmE8qeO/rga9cnrcTkd9F5HsRGVjSSSIyXkRWisjK5OTkCt5aKS9KTrQfkBWcXFQorAWENIKkNWUfWx4ZB2wajfCWpeYsKreAIPthlnnY9qsUo7qlzk5KSipMtwHQuXNn6tSpw/3338+2bduIiYlh4sSJLF26lIEDBxIfH0/Xrl3Jz89n4sSJ9O7dm+joaN566y3ATk4bPHgwsbGxREVFFd5/586ddOnShXHjxtGpUyeuvvpqvv32W/r370/HDu357dtPHc14nW3HfRUq9SuCiFwMrDXG7HI8fwQYBewCJhhjip+bXgYReQjIA+Y4NiUBrY0xh0WkF7BARLoZY9JOPNcYMxWYCnZGc0Xur5RXpWypfC0BbFtyc891Nh948kmOb9xos5v6B9mfSqpzRheaPeiSOrtepB3Wmv1n0TxJVM/U2ddffz1Dhgxh3rx5DB48mOuuu46OHTvy1FNPsX79+sJ8Q0uXLmXVqlWsX7+edu3aMXXqVBo0aMCKFSs4fvw4/fv3Z8iQIbRq1Yr58+cTFhZGSkoK/fr1Iz4+HoA//viDjz/+mOnTp9O7d2/enzOHH9PxP5cAACAASURBVL/8mIX//ZAnX5vJgs+v9FytrRLKKsFkoB+AiAwHrgHGAD2BN4Gh5b2hiIwDhgODjSPHhjHmOHDc8ThBRLYBnQDNYaFqFmMgeTN0H+WZ6zWLgl/fsh2QJaWaKI/8HEA8c63iBIXa/onMlMKgUJ1TZ8fExLB9+3YWLVrEt99+S+/evVm+fHmR3EVOffr0KSznokWLWLt2beFSnKmpqWzdupWWLVvy4IMPsmzZMvz8/Ni3b19hLahdu3ZERdkmwW7dujL4zB5I5kGiesaxc8rMahEQoOygYIwxzl6hS4F3jDEJQIKI3Frem4nIMOCfwNku10VEIoEjxph8EWkPdAS2l/f6SlW5jEP2m3JFsqMWp1kP+0GesgWadqvcpSbebQNWaFMIO80z5TuRCNSNtHmTcjIhqF61T50dGhrKpZdeyqWXXoqfnx9ffvklo0adHNRdy2WM4ZVXXmHo0KHODWAKmPHudJIPHiDhpyUEBvjRtksPslP2QEE+dQL87Givgnz8jqdRh1yo3xy/41k+6T9xV1kNiiIioY7hp4OBxS77Sv3riMhcYDnQWUT2isgNwKtAfeCbE4aengWsFZHVwDzg78YYnR6pap7CTuZKDkd1cnY2e2Jmc/oB24dQz8u5lOo2svcpZXhqdUmd/dNPP/Hnn38CkJOTw8aNG2nTpg3169cvNg02AMYw9Ky+vDHlWXL3rYUD69jy40Iyt/9K6r4tNKkfQGD6bpZ8/jG7du+BzEOQfcR2Iufn2sDpF2hzWtVvVu0m+5VVU3gJWA2kAZuMMSsBRKQnth+gRMaYMcVsfqeEYz8BKtphrVT1UZjzyEM1hYiOEBDiGIFU3H8pN+VmQfZRW0vw93IzhZ+/7SA/drjEGkl1SZ29bds2brnlFowxFBQUcNFFFzFq1ChEhP79+9O9e3cuuOACLrroInuCMXB0NzeOGszOHduJPX80xkBkZGMWzJ3J1dfdyMWXjyVqyDXE9YqlS5fO0OQMGyQD6kATxzDlOqGVmxfiRWWmzhaRFkATYI0xpsCxrTkQWNLIJF/R1Nmq2vniXru+8gN7PPcNcNq5No3EOPfXBXAqTJ19ZKedQ9Ckm/eDAtgglLwZ6je334ZrA0dAIOtIjX5dlUqdLSKxLk9j5OR/5FUaFJSqdlISbdORJ5sEmkXDhv8WLr9YbrnZdjRQaBPfBASwaysEhdraQmjTatdEUm61JCC4o6x/ISuB9YCzcdD1L2uAc71RKKVqrOQtcLqH/1s0j4aEd+2HUsPyraIFOOYl+KAv4UT1Im2Gz+xUmwajpjIGUvfYgBDarFYHBCg7KPwDuAzIAj4A5htjvJSIRakaLuuo/QD2VCezk+vaCuUNCvm5mGNZSGhT7w1DLUlwA9uhmplSc4OCMyA4azw1PCC4s9JmWTOaXzLGDADuAFoBi0XkIxGJ8UwRlapFUjyU8+hETbrab/oVGIEUnL6Dw5n5mKrIoyMC9SIgJ902YdU0xkDqXpeA0LxGN4MZYzh8+HCZw3rdamA0xmwXkU+BEGAsdmLZ6tLPUuoUU9nV1koSVNfmwynvzObD22i59G72nvsayVu3ebZM7irIh7RkOJBl14ioSbL+tDmJ6oRBSCqQWtUlqrTg4GBatiw95VxZHc3tgSuBEcAebBPSk8aYLE8VUqlaIyUR/OtAw7aev3bzaNhVet6fk/zwAoH5mbTrGgv1m3q+TO76ZAokfgX3bPL6UpIeYQx8dR/89hb87U7o91iNriGUV1mT1/4ALgf+h52I1hq4RUT+ISL/8HbhlKpRkrfYhWq8sSBKs2jHSlyH3Tv+yA5YMxd6/V/VBgSAPuNtE9LaD6u2HO4wBv73gA0IZ94O559aAQHKDgqPAfOBAiAUOxvZ9Ucp5ZS82TOJ8IpT3jTaPzxvc+n0n+Cd8pRHyzho3gN+m2Y/dKsrY2DRw/DrG9D3FhjyxCkXEKCM5iNjzCQflUOpmi03yw4ZjbnKO9d3HYF0+jmlH/vnLltLiLsewpp7pzzlIWJrC5/eBjt/hHYlZsZ3X3aqbarz1EL2xsA3/4Llr0Kfm2HYf07JgABlr7z2sIiU2DskIuc6sqcqdWpL2QoYz3cyO9VrbNdXcKez+ccX7Gil/nd5pywV0X2U7Wj+bWrlrrM3AT65EZ5pD8+0g/evhBXv2IBcUcbAt5Pg51eg901wwdOnbECAskcfrQM+F5FsYBWQjE2E1xGIAb4FnvRqCZWqCQqHo3qp+QhsbaGsYalH98DvcyD2Wru+b3URGAI9x8Ly1yB1X/nKlp8LGz+FX9+EvSsgqD7E3QAY2PI1bHGs1RXZBTqeDx2HQKt+dtGfshgDix+Dn16yNasLnz2lAwKU3Xz0KfCpiHQE+mPXaE4DZgPjdRSSUg7Jm+2388YdvHePZlGw9Wu7nGZJq3P9+KL9PeBu75WjonrfYL+NJ7wL5z5c9vGZKfbYFe/Y5UMbtYdhT9smumDH0vAXPGMXut+6yP788qa9R1B9OH2QDRAdzi++Gc0YWDLZ1qx6jYMLnz/lAwK4P09hK7DVy2VRquZKToSG7WwmTG9pHm3TLx/aaDtvT5S6D35/D3peA+GtvFeOimrYFjoNhYQZcNbEkt+rA+ttZ+/ajyH/OLQ/By6eYj/c/U5o8RaxmWQjOsKZt8HxDNjxPWz9xv5s+swe1yzKnt9xCLTsbXNALX0Klj1ra1UXvXjytU9R1WOpH6VqOk8twVka187m4oLCjy/aoDGwGo8W730TbPkfbFwI0aP/2l6QD4lf2m/6u3606cJjroK+f/8r3bQ76oRCl4vsjzFwaJOjFvEN/DTF1gqCG9j3cucPEHMNDJ+iAcGFBgWlKis/166o1WmYd+8T3tp+oBXXr5C2H1bNtB+k4a29W47KOP1c2wy0YpoNCllHbe3mt6m2s7hBKzs3oOdYu1hPZYhA0672Z8BddsTStiXwxzewYxn0vtE2P2lAKEKDglKVdWQHFOR6PufRiUTsN9zi5ir8NMVRS7jHu2WoLD8/+2H89YN2FNHmLyE3E1r/zc4L6HyR99J7BzeAbpfYH1Uit0KkiHQSkcUist7xPFpE3OgpUuoU4OklOEvTLAoOboB8lzV90w/YdvoeV3onxYanxVxt11rY+Kn9gL55GVz/FXQd4bv1HlSJ3P0LTAMmAm8BGGPWisj7wBPeKphSNYa3EuEVp1k05GXbETfOtvafptgmrOpeS3AKCYe//2BHCIVWQfZWVSp3G9PqGmN+O2FbXrFHKnWqSdliJ5b5Itlbc2dns2MSW/pBWDkdoq+wbfU1RaP2GhCqKXeDQoqInI5dbQ0RuQxIKuskEZkuIoeczU6ObY1E5BsR2er43dCxXUTkZRH5Q0TWnrAUqFLVlzdzHp0oopNN73BgjX3+88uQnwNn3eub+6taz92gcBu26aiLiOwD7gJuceO8GcCJQzLuBxYbYzoCix3PAS7AzpTuCIwH3nCzbEpVnYICm+IiwkdBwT8QmpxhRyBlJNuJXVGjofHpvrm/qvXcCgrGmO3GmPOASKCLMWaAMWanG+ctA46csHkEMNPxeCZwicv2Wcb6BQgXkWqQzUupUqTthdxjvulkdmoWZZuPfn7ZTu46a6Lv7q1qPbc6mkUkHLgWaAsEiGMquDHmzgrcs6kxxtn0dABwJntvgV3Ix2mvY1uRZioRGY+tSdC6dTUej61ODcmOnEe+qimATUP9+3s2F1D3UXY2r1Ie4u7ooy+BX7AJ8go8dXNjjBGRciVYN8ZMBaYCxMXFVePk7OqUkLzZ/vb2HAVXzpnN+blaS1Ae525QCDbGeGru/EERaW6MSXI0Dx1ybN8HuCZsaenYplT1lZIIdRvb1Na+0rSbXUDnjHjfdXCrU4a7Hc3vichNItLcMXqokYhUdA76QuA6x+PrgE9dtl/rGIXUD0h1aWZSqnpK3uLbpiOw+X3GfQnDX/TtfdUpwd2aQg7wLPAQjmGpjt+lDowWkbnAICBCRPYCjwJPAR+JyA3ALuwa0GCbqC7Ergt9DPg/t1+FUlXBGNt8VBVpE1r39f091SnB3aBwD9DBGJNSnosbY8aUsGtwMcca7NBXpWqGzGTIPurb/gSlvMzd5iPnt3ellJMv01so5SPu1hQygdUisgQ47txYwSGpStUOhYnwtLNX1R7uBoUFjh+llFPyFpvtM6warYWsVCW5uxznzLKPUuoUk5Jom450XV9Vi5QaFETkI2PM5SKyjr9GHRUyxkR7rWRKVXfJidB+UFWXQimPKqum4BwIPdzbBVGqRslOhfQk7WRWtU5ZQeE1INYYs8sXhVGqxkjZan9rJ7OqZcoakqqNpUoVxzkcVecoqFqmrJpCCxF5uaSdOiRVnbKSN4N/EIS3qeqSKOVRZQWFLCDBFwVRqkZJ2QKNO+hC86rWKetf9GEdjqpUMZIT7boGStUyZfUp5PikFErVJOkH4Ogu7U9QtVKpQcEY089XBVGqxvj+GRA/iL687GOVqmHcTYinlAI4vA1WzYTY66Dx6VVdGqU8ToOCUuWxZLIddXT2P6u6JEp5hdtDJ0TEH2jqeo4xZrc3CqVUtZS0BtZ/AgPvgfrNqro0SnmFW0FBRO7Arpp2EChwbDaA5j5Sp45v/w0hDaH/hKouiVJe425NYQLQ2Rhz2JuFUara2rEMti2G8x+H4AZVXRqlvMbdPoU9QKo3C6JUtWUMfDvJrpvQ56aqLo1SXuVuTWE7sFREvqDoymsveKVUSlUnmz+HfQkQ/woEhlR1aZTyKneDwm7HT5Djp8JEpDPwocum9sAjQDhwE5Ds2P6gMebLytxLqUrLz4PFj9sU2T2uqurSKOV17q689m8AEQl1PM+o6A2NMYlAjON6/sA+YD7wf8CLxpjnKnptpTxuzVy7wtrl72meI3VKcKtPQUS6i8jvwAZgg4gkiEg3D9x/MLBN12tQ1VJuNiz9D7ToBWdcXNWlUcon3O1ongr8wxjTxhjTBrgHmOaB+18JzHV5fruIrBWR6SLSsLgTRGS8iKwUkZXJycnFHaKUZ6yYBmn74LxJug6zOmW4GxTqGWOWOJ8YY5YC9SpzYxEJAuKBjx2b3gBOxzYtJQHPF3eeMWaqMSbOGBMXGRlZmSIoVbLsVPjheTj9XGh3VlWXRimfcTcobBeRf4lIW8fPw9gRSZVxAbDKGHMQwBhz0BiTb4wpwNZC+lTy+kpV3E8vQ9afMPjRqi6JUj7lblC4HogE/uv4iXRsq4wxuDQdiUhzl30jgfWVvL5SFZN+EH55HbpdCqfFVHVplPIpd0cf/Ql4bOlNEakHnA/c7LL5GRGJwabP2HnCPqV8Z9kzkJ8D5z5c1SVRyudKDQoi8pIx5i4R+Qz7YV2EMSa+Ijc1xmQCjU/YNrYi11LKo45sh4QZEHutpsZWp6SyagrvOX7r3AF1aljyJPgFwtn3VXVJlKoSpQYFY0yC42GMMWaK6z4RmQB8762CKeVzSWth3ccw4B+aGludstztaL6umG3jPFgOpare4scgOFxTY6tTWll9CmOAq4B2IrLQZVd94Ig3C6ZUqbLToE59z00q2/kj/PENnP8YhIR75ppK1UBl9Sn8jJ1IFkHRyWTpwFpvFUqpEhkDK6fDV/dB064w6AHoNKxywcGZGrv+adBnvMeKqlRNVFafwi5gF3Cmb4qjVClys+HLe+D32dB2IKTugblXwmk9YdCD0PH8igWHzV/A3hVw8cuaGlud8txdjjOdv4akBgGBQKYxJsxbBVOqiNS98OFY2L8KzppoawimANZ8YOcVvD8aWsTBOQ/A6YPdDw4F+bYvoXFHiLnau69BqRrA3clr9Z2PRUSAEUA/bxVKqSJ2/ggfXQd5x+GKOXDGcMcOf4gdC9FXwJr3YdlzMHsUtOxjg0P7c8oODoWpsWdpamylcH/0USFjLQCGeqE8Sv3FGFj+OsyMh7qN4KbvXAKCi4Ag6DUO7lgFw1+0mU3fGwnvXgDbv7fXKU5uNiz5D5wWC2dUaB6mUrWOu81Hl7o89QPigGyvlEgpgJxj8Nmddt5Al+FwyRsQXEZrZUAQxF1vm4FWzYIfXoBZ8dCmP5zzILQdUPT4FW9D2l645HVNja2Ug7v1ZdcVRvKwuYlGeLw0SgH8uRM+vAYOrLf5hwbcA37lqNQG1IE+N0HPsY7g8DzMuMh2Tp/zILT521+psdufA+3P9tpLUaqmcbdP4f+8XRClAPhjMXxyg+1EvvpjO6KoogKDoe942++QMAN+fNE2KbUfBKHNIOsInKepsZVy5e5ynDNFJNzleUMRme69YqlTjjG2uWfOZXa+wPillQsIrgJDoN8tcOdqGDIZDm6AtR9At5F2OKtSqpC7zUfRxpijzifGmD9FRP83Kc84ng4LboVNC+0aBiNehaBKLexXvKC68LfbIe7/YONCzwUdpWoRd4OCn4g0dKyrgIg0Kse5SpUs5Q/48GpI2QJDnoAzb/d+p29QPYgZ4917KFVDufvB/jywXESc6ymPBiZ7p0jqlJH4Ffx3PPgFwNj5tq1fKVWl3O1oniUiK4FzHZsuNcZs9F6xVK1mDHz/DCx9Epr3gCtmQ3jrqi6VUoryTV5rhE1t8SqQLCLtvFQmVdutmmkDQvSVcP3XGhCUqkbcnbz2KHbCWmfgXWzuo9lAf+8VTdVKhzbDV/fbpqJL3ijf/AOllNe5+z9yJBAPZAIYY/Zj11RQyn25WTDvetvRO/ItDQhKVUPudjTnGGOMiBgAEan0eEER2YldlyEfyDPGxDlGNX0ItMXOmr7cOeJJ1QKLHoZDG+DqebrcpVLVlLtf1T4SkbeAcBG5CfgWeNsD9z/HGBNjjIlzPL8fWGyM6QgsdjxXtcGmz2yuoTNv1/kBSlVj7o4+ek5EzgfSsP0KjxhjvvFCeUYAgxyPZwJLgfu8cB/lS6l74dPboXkMDNa0EkpVZ+6mubjBGPONMWaiMeZe4DtH53NlGGCRiCSIiHMNxKbGmCTH4wNA02LKMl5EVorIyuTk5EoWQXldfh58chMU5MFl020mU6VUteVu89FgEflSRJqLSDfgFyrf0TzAGBMLXADcJiJnue40xhj+Wu3NdftUY0ycMSYuMjKykkVQXrfsWdj9M1z0PDQ+vapLo5Qqg7vNR1eJyBXAOuwIpKuMMT9V5sbGmH2O34dEZD7QBzgoIs2NMUki0hw4VJl7qCq28ye7VGb0ldDjyqoujVLKDe42H3UEJgCfALuAsSJSt6I3FZF6IlLf+RgYAqwHFgLXOQ67Dvi0ovdQVezYEfjvTdCwLVz0XFWXRinlJneHpH4G3GaMWexYo/kfwAqgWwXv2xSYby9FAPC+MeZ/IrICO9LpBmzwubyC11dVyRjbsZxxCG78BurolBalagp3g0IfY0waFLb1Py8in1X0psaY7UCPYrYfBgZX9Lo1RmYKzP87nHkrnH5u2cfXNCvehsQv7NoFul6BUjVKqc1HIvJPAGNMmoiMPmH3OG8VqtZbNQv++AbmjoFtS6q6NJ51YD18/RB0OB/63VrVpVFKlVNZfQquvYMPnLBvmIfLcmooKLBB4bRYaNwB5l4J25dWdak8IyfTprEICde8RkrVUGX9r5USHhf3XLlj5zL4c4ddHvLaT6FRe3j/StixzHdlKCiwgSj9gGev+78H7GI5I9+CUB0urFRNVFZQMCU8Lu65ckfCTAgOhzPioV4EXLsQGraB96+AnT96//5ZR23tZNYIeLG7nVi2L6Hy190w36bEHnAXnH5O5a+nlKoSZQWFHiKSJiLpQLTjsfN5lA/KV7tkpsDmz+2Y/cBguy00Eq77DBq0gjmjYdfP3rv/oU0w7RzYthjO+zf0vtGufjbtXHj7fFg3D/Jzy3/dP3fBwgnQIg7Oecjz5VZK+UypQcEY42+MCTPG1DfGBDgeO58H+qqQtcaauZCfA7HXFd0e2sQRGFrC7Mtg13LP33vDfJg22Lb7X/e5/UZ/wVPwj40w7Gk4lgKf3AAvRcOy5yDzsHvXzc+152HgsnfAX/9ZKFWTaU+grxhjm45a9oGmXU/eX7+pDQxhzWHOZbD7V8/ctyAfvnkEPh4HTbvB+O+hzZl/7Q8Og35/h9sT4KqPILIzfPc4vNjVzjU4sL706y/9D+xdARe/ZCeqKaVqNA0KvrJ7ORzeCr3GlXxM/Wb2W3xoU5g9CvasqNw9jx2B2ZfCT1Mg7noY94UNOsXx84NOQ+HaBXDrr9BjjG1OerM/zBgOmz63AcbV9u/hhxeg51joPqpyZVVKVQti56LVTHFxcWblypVVXQz3/He8bb+/Z7Ndeaw0afvh3Qvh2GEYuwBa9ir//ZLWwIfX2BFGF70AsWPLf41jR+zw2d+mQdpeCG8DfcZDz2ts1tM3+tuaxvilZb8mpVS1ISIJLuvYFKE1BV/I+hM2fgpRo9378Aw7DcZ9DnUbwXsjYd+q8t1vzYfwzhD7zf7//lexgAD2/gPugglrYPRMCGsBix6CF7rCuxfY13XZdA0IStUiGhR8Ye1HkJddetPRiRq0tE1JIeHw3iWw//eyz8nPha/ug/nj7Uig8d9XrJZxIv8A6HYJXP+VvWbXEXB0Nwz7DzTTQWhK1SbafORtxsAbf4OAOraZpbyO7oZ3L4LjaXDdQmh+UsooK+OQ7Uze9ZNNL3H+Y94dCVRQoDOWlaqhtPmoKu1dCYc2njwM1V3hrWHcZzbT6KwRkLS2+Hu8dbZtZrp0mv0G7+2hoRoQlKqV9H+2tyXMgMB6EHVZxa/RsK0drhpYzwYG12GiCTNt+75/ANywCKI127hSquI0KHhTdhps+C9Ejar8mgKN2tkaQ0AwzIq3fQyfTYDP7oS2A2xbf/Noz5RbKXXK0qDgTes+htxjEDvOM9dr1N6OSvIPgqmDbC1kwN1w9Tw7UkgppSrJ3UV2VEUkzICmUdAi1nPXbHy6HZX05b12NFO3Szx3baXUKU+Dgrfs/x0OrIULnwPxcJbxiA525rFSSnmYNh95S8JMCAixE9aUUqqG0KDgDcczbH9Ct5F28plSStUQPg8KItJKRJaIyEYR2SAiExzbJ4nIPhFZ7fi50Ndl85gN/4WcDOhVwbkJSilVRaqiTyEPuMcYs0pE6gMJIvKNY9+LxpjnqqBMnpUwEyK7QKu+VV0SpZQqF5/XFIwxScaYVY7H6cAmoIWvy+E1B9bDvpV2BrOnO5iVUsrLqrRPQUTaAj0B54oyt4vIWhGZLiINSzhnvIisFJGVycnJPippOayaaecR9LiyqkuilFLlVmVBQURCgU+Au4wxacAbwOlADJAEPF/cecaYqcaYOGNMXGRkpM/K65acY7D2Q5tFVCeTKaVqoCoJCiISiA0Ic4wx/wUwxhw0xuQbYwqAaUCfqihbpWz8FLJTK578TimlqlhVjD4S4B1gkzHmBZftrutEjgTKWBy4Glo1ExqdbnMRKaVUDVQVo4/6A2OBdSKy2rHtQWCMiMQABtgJ3FwFZau4Q5vtOsznP6YdzEqpGsvnQcEY8yNQ3Kfml74ui0etmgV+gdDjqqouiVJKVZjOaPaE3GxYMxe6XASh1azzWymlykGDgids/hyyjugMZqVUjadBwRMSZkB4G2g3qKpLopRSlaJBobIOb4OdP0DstbpusVKqxtNPscpaNRPEH3peU9UlUUqpStOgUBl5ObD6feh8AdRvVtWlUUqpStOgUBlbvoLMZJ3BrJSqNTQoVEbCDAhrCR0GV3VJlFLKIzQoVNSfu2DbEogdC37+VV0apZTyCA0KFfX7ezadhXYwK6VqEQ0KFZGbBb/Phg7nQYOWvr99fi6Ldy0mLSfN5/dWStVuGhTKwxibHvu1PpCeBH18m7PPGMPSPUsZuXAkdy29i5ELRrJk9xKflkEpVbtpUHDXgXUw82L46FoICoVrP4WO5/ns9tuObuPv3/6dO767Az/xY9KZkwgPDufOJXcy8fuJHM467LOyKKVqr6pInV2zZKbAksl2pFFwA7joeYgdB/6+eetSj6fy+urX+TDxQ+oG1uX+PvdzeefLCfQLJL5DPNPXTeettW+xPGk59/W+j+HthyOaulspVUFijKnqMlRYXFycWblypXcunp8Lv02DpU9BTgb0uQnOvs9ny2zmFeQxb8s8Xl39Kuk56YzuNJrbYm6jYfDJS1dvO7qNR35+hLXJaxnYYiCPnPkIzerpZDqlVPFEJMEYE1fsPg0Kxdj6LXz9AKRsgdPPhaH/gSZdPH+fEvyS9AtP//Y0fxz9gz7N+vDP3v+kc6POpZ6TX5DP3M1zefn3l/ETP+6OvZvRnUfjJ9pCqJQqSoOCu1K2wtcPwtZF0Ki9DQadhvpsJbU9aXt4buVzfLfnO1qEtuDeuHsZ3HpwuZqD9qbv5d/L/80vSb8Q2ySWf//t37Rt0NZ7hVZK1TgaFE6Qn57On7NnExwdTUh0NP4B+bDsWfj1TQgIgbP/CX3/DgFBXij1yTJzM5m2dhqzNs4iwC+A8dHjGdt1LHX861ToesYYFvyxgGdXPEtOQQ63xtzKtV2vJcBPu5CqWk5+DolHEtlweAOC0CC4AQ2CGhBeJ5wGdezvkIAQ7RdSXqVB4QTHVq5k1zVjC58HhRtCGmYR0jOWkFH3UqdHXyTA+x+gBaaAhdsWMmXVFFKyUog/PZ4JsRNoUreJR65/6NghJv8yme/2fMcZjc7g8f6Pl9kMVZbcglz2pe9jf8Z+Av0Di3yYBfn7JojWFMYY9mXsY23yWtalrGNtylo2Hd5EbkFuqecF+gXSoI4NFs731vk7rE5Y4fNAv8BKlS8iJILWYa0JCwqr1HVUzaNBoRj5GxaRPfthsv7YR9axpmQdDiT/qJ0MJiEhhHTrRnCPaEJ69CCkRw8Cmzb1SJnzC/JJz0ln69GtPL/yeTYc3kB0RDT39bmP6Mhoj9zDlTGGRbsW8eSvT5J2PI3ro67n5uibS/0Atxf1qgAADBpJREFUzyvIY3/Gfnan72ZX2i52p+1mV7r9vT9jPyY/j4YZkBYCuYF/faMNCQgp/DA78QPM+QHn+iHn/Knsh1t5FJgC0nPSSc9JJzggmAZBDQj098z9M3IyWH94vQ0CyTYIHMk+AkCwfzBdG3clOjKa6MhoujfuToBfAKnHUzl6/CipOamkHk/967nr45xUUrPt45yCHI+U1VXDOg1pHdaaNmFtaF3f8dvxvF5gPY/eyxhDZm4mqTmp5BXkefTap5q6AXWJrFux5X9rVFAQkWHAFMAfeNsY81RJx1Y4KGxfCrNG2GR2Qx6DbpdigNy9e8las5asNWvIWruG4xs3YXLtt7qApk0dAcIGijpdu5IZkFf4n/fE/8ypOSc8d+xPz0nHYN/zJiFNuKvXXVzU/iKvdwgfzT7KsyufZeG2hbRv0J5Hz3yUJnWbFPnA35W2i93pu9mXvo/8/Fwi0qDZn4Y2qUF0zKhHi6P+NE45Tt3kDCQvH4C8iHCymzckvWkof0YEk9w4gP0NDXvCcjlckEbq8VTSjqeRZ0r+AKgXWK/koBHUgPDg8JP21w+qT3Zedonv84l/h7TjafZ3ThoFpqDI/esG1D0pUIXXCScsKKzEb+qhgaHsSN3B2hRHAEhey/bU7YV/23YN2hEVEUWPyB5ERUTRoWEHjwS/rLyswtdW2ntaFmMMB48dLPJ335W2i0PHDhU5rnFwY9qEtaFV/VZFgkXr+q0BSv23Xtz/hbL+LSj3DWs7jGfPfrZC59aYoCAi/sAW4HxgL7ACGGOM2Vjc8RUNCusPreXqr64pswM5IM/Q9qChw35Dx32GDvsLaHrU7isAMoMhIwTSQyAjWMgIcT4X8urVIT+sHn4N6uMX/v/t3XuMXGUZx/Hvb9u99zJ7gW5pu9uWVBMKCgUREyBEDYUiFDRqTRNACYTEGokxCkER+ccA6h/GC6mRcAkKIUBsDAYqMSIGkIuFlmtb7FI2293edttud7vd3cc/zjuH07KXzuzMnMF5PsnknHn3nJlnnjNznjnvnH1PhupME7VNrcxqOom5tRma65q5aNFFNFQ35Bz/dDzX9Rx3PH8H3QPdyIzmsONv769m2aFZLOybQeueYRp6D1IVdvwQHT3VtLdT09FBTUcH1QsWMLJvL0c7Oxne0clwZyejfX0fPpFE9fz51CzuoLq9Axa2ceSUFgba5tDfUkf/2EBeO/ATNVWhmVM7JyoqIYYDwwc+smPrH+4/oefP1GY4o/WM6Cig9VMsb13O3Nq5ecWdtsGRQd4/8H5cJHYe3BkfLe4e3H3CjzPZUWO24BbqCK1SndJ4Civmrchr3Y9TUfgccLuZrQz3bwEws5+Nt3y+RWHXwC6+85ffsudQ7ofisw4fYXH3fhb19DN3YJRZg6M0Do3QODRMw9ARGgYHqRsemnD9MVUxWNfIYF0DY0prdFXD7BBNBw9Tk9jxH51Rzf7MyezNnMy+zDz2Ns2LpwcbM1MW0bqhAVr6emje30NzX28039dDy/5e6o8MxMuNSfTPbuHoCf2QP4ZpLJpiYRrdBwFViKoPp1aFUPhbIWSf3+LnzU7FTEQ1skr5Ad8wjWCMYGTfN8n8K+S/isLl301k/+lnc+X6u/Jad7KiUG7v5gXAzsT9D4DPJheQdANwA0B7e3teT9LW2MbpDV/nzb48BpSrgd6O6DaRqtER6o8cpn5ogPrBQ9QPDdAwFE3r4+lhlOe34EIwie1Lm9mbSez4Z2WwaXRjDdU10tW2lK62pR/5W/3gobhgtPT10NS/mxmj3o3gXL6Ozi3OP9KWW1GYkpmtB9ZDdKSQ7+P85PLlBYvJOef+X5Tbv7t2AYsS9xeGNueccyVQbkXhJWCZpCWSaoA1wIaUY3LOuYpRVt1HZjYiaR3wFNEpqfea2Rsph+WccxWjrIoCgJk9CTyZdhzOOVeJyq37yDnnXIq8KDjnnIt5UXDOORfzouCccy5WVsNc5ErSbqAzz9VbgT0FDKfQPL7pK/cYPb7p8fjy12Fm4w6x+rEuCtMh6eWJxv4oBx7f9JV7jB7f9Hh8xeHdR84552JeFJxzzsUquSisTzuAKXh801fuMXp80+PxFUHF/qbgnHPuoyr5SME559xxvCg455yLVWRRkHSJpHckbZN0c0oxLJL0d0lvSnpD0ndD++2SuiRtCrdViXVuCTG/I2llCWLcIWlziOPl0NYsaaOkrWHaFNol6Vchvtcl5Xfx2BOP7ZOJHG2SdEDSTWnmT9K9knolbUm05ZwvSdeE5bdKuqbI8d0t6e0QwxOSMqF9saTBRB7vSaxzdnhfbAuvoSDX3pwgvpy3Z7E+3xPE90gith2SNoX2kuevYMysom5EQ3JvB5YCNcBrwGkpxDEfWBHmZwPvAqcBtwPfH2f500KstcCS8BpmFDnGHUDrcW13ATeH+ZuBO8P8KuCvRBfnPQ94scTbdBfQkWb+gAuBFcCWfPMFNAPvhWlTmG8qYnwXAzPD/J2J+BYnlzvucf4dYlZ4DZcWMb6ctmcxP9/jxXfc338B3JZW/gp1q8QjhXOBbWb2npkNAw8Dq0sdhJl1m9mrYf4g8BbRNaonshp42MyOmNl/gW1Er6XUVgP3h/n7gSsT7Q9Y5AUgI2l+iWL6ArDdzCb77/ai58/MngX2jfO8ueRrJbDRzPaZ2X5gI3BJseIzs6fNLHux7BeIrnY4oRDjHDN7waI93AOJ11Tw+CYx0fYs2ud7svjCt/2vAX+a7DGKmb9CqcSisADYmbj/AZPvjItO0mLgLODF0LQuHM7fm+1uIJ24DXha0iuSbght88ysO8zvAualGF/WGo79MJZL/iD3fKWZx28RfXPNWiLpP5L+IemC0LYgxFTK+HLZnmnl7wKgx8y2JtrKJX85qcSiUFYkzQIeA24yswPA74BTgTOBbqJD0rScb2YrgEuBb0u6MPnH8E0n1XOaFV229Qrg0dBUTvk7RjnkayKSbgVGgIdCUzfQbmZnAd8D/ihpTgqhle32PM43OPaLSbnkL2eVWBS6gEWJ+wtDW8lJqiYqCA+Z2eMAZtZjZqNmNgb8ng+7OEoet5l1hWkv8ESIpSfbLRSmvWnFF1wKvGpmPSHWsslfkGu+Sh6npGuBLwFrQ+EidMvsDfOvEPXTfyLEkuxiKmp8eWzPNPI3E/gy8Egi7rLIXz4qsSi8BCyTtCR8y1wDbCh1EKEP8g/AW2b2y0R7sh/+KiB7psMGYI2kWklLgGVEP1gVK75GSbOz80Q/SG4JcWTPiLkG+HMivqvDWTXnAf2JbpNiOuYbWrnkLyHXfD0FXCypKXSVXBzaikLSJcAPgCvM7HCi/SRJM8L8UqJ8vRdiPCDpvPAevjrxmooRX67bM43P9xeBt80s7hYql/zlJe1futO4EZ358S5R9b41pRjOJ+pKeB3YFG6rgAeBzaF9AzA/sc6tIeZ3KPIZC0Rnb7wWbm9k8wS0AM8AW4G/Ac2hXcBvQnybgXNKkMNGYC8wN9GWWv6IilM3cJSor/i6fPJF1Le/Ldy+WeT4thH1wWffg/eEZb8Stvsm4FXg8sTjnEO0c94O/JowMkKR4st5exbr8z1efKH9PuDG45Ytef4KdfNhLpxzzsUqsfvIOefcBLwoOOeci3lRcM45F/Oi4JxzLuZFwTnnXGxm2gE4V+4kZU8rBWgDRoHd4f65Fo2xM9n61xKdcrquaEE6VyBeFJybgkX/mXomREM5A4fM7OepBuVckXj3kXN5kHS9pJckvSbpMUkNof2rkraE9mfHWe8ySc9Lap1qWefS4EXBufw8bmafMbNPEw17fl1ovw1YGdqvSK4g6SqiayqsMrM9ky3rXFq8KDiXn9Ml/VPSZmAtsDy0/wu4T9L1RBd8yfo88EPgMouukzDZss6lxouCc/m5D1hnZmcAPwXqAMzsRuBHRCN1vhJ+pIZonJvZRCNlMsWyzqXGi4Jz+ZkNdIfhz9dmGyWdamYvmtltRGcoZYdx7iQaJO0BScunWNa51PjZR87l58dEV8rbHaazQ/vdkpYRjYL6DNEos2cCmNnbktYCj0q6fIJlnUuVj5LqnHMu5t1HzjnnYl4UnHPOxbwoOOeci3lRcM45F/Oi4JxzLuZFwTnnXMyLgnPOudj/AC7a2xxJJxDkAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "single = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n", + "threads = [2, 10, 45, 31, 42, 36, 55, 66, 59, 85, 171, 98, 126, 138, 105, 111, 107, 121, 122, 134]\n", + "manager = [1, 1, 2, 10, 1, 3, 2, 1, 2, 1, 4, 3, 3, 1, 2, 2, 2, 2, 2, 2]\n", + "streams = [4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n", + "sizes = [1, 101, 201, 301, 401, 501, 601, 701, 801, 901, 1001, 1101, 1201, 1301, 1401, 1501, 1601, 1701, 1801, 1901]\n", + "plot_result(single, threads, manager, streams, sizes, title='Operational Overhead')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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bhbEN4bE5jqqR3nlrx+tZs3OnIDus0vLejzy+67lvj5kyBD+9re/kZyczHnnncdll13GoEGDTtru8OHD9O/fn4kTJ/LAAw/w6quv8tBDDzFu3DjGjRvHFVdcwX/+858yj/H6669Tv359li1bxrFjxxgwYABDhgyhffv2Hv0MGzZs4J133uHVV19lzJgxzJ49m6uvvhqA/Px8li9fTkFBAYMGDeKDDz4gKSmJd999lwcffJDJkyczcuRIbr75ZgAeeughXn/9de666y7GjRvHbbfdxrXXXstLL71Ucrx58+axYcMGvv/+e4wxDB8+nK+++oqEhASmT5/OypUrKSwspHfv3vTp08ejnyFQtMUfqQ7tgrotIDFJW/wq4iUmJpKRkcGkSZNISkrisssu48033zxpu7i4OIYNGwZAnz59SrpglixZwujRowG48soryzzGvHnzmDp1KikpKfTr1499+/axYcMGj2Ns3749KSkpJx0b4LLLLgNg/fr1rFq1it/97nekpKTw6KOPloyHX7VqFQMHDqR79+5MmzaN1atXA7B48WKuuMKOZbnmmmtOiHfevHn06tWL3r17s27dOjZs2MDXX3/NJZdcQnx8PPXq1WP48OEe/wyBoi3+SJWbBXWbQ51GsP+7cEejqpCKWubBFB0dzdlnn83ZZ59N9+7dmTJlCmPHjj1hm9jY2JKhhtHR0RQWFnq8f2MML7zwAkOHDvUpPlc3lOvYrq4egISEhJJjdO3alSVLlpz0/rFjx/L+++/Ts2dP3nzzTRYtWlTyWlnDJ40x/PnPf+bWW2894flnn33Wp/gDSVv8kSo32yb+xKY6qkdFvPXr15/Q+l65ciVt27b1+P39+/dn9uzZAEyfPr3MbYYOHcrLL79MQUEBAJmZmRw+fNiPqE/WqVMn9uzZU5L4CwoKSlr2ubm5tGjRgoKCAqZNm1byngEDBpTE7P780KFDmTx5MocOHQJgx44d7N69m7POOov333+fo0ePkpuby0cffRTQn8ET2uKPRMVFx7t64hKh4AgcOwS1vBsmplSoHDp0iLvuuosDBw4QExPDaaedxqRJkzx+/7PPPsvVV1/NxIkTOf/886lf/+QSJTfddBNbt26ld+/eGGNISkri/fffD+SPQVxcHLNmzeLuu+/m4MGDFBYWcs8999C1a1f+/ve/069fP5KSkujXrx+5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