{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Creating Discrete Bayesian Networks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Defining a Discrete Bayesian Network (BN) involves specifying the network structure and its parameterization in terms of Tabular Conditional Probability Distributions(CPDs), also known as Conditional Probability Tables (CPTs).\n", "\n", "There are few ways to define a BN in pgmpy:\n", "1. Load an example model from bnlearn repository (https://www.bnlearn.com/bnrepository/).\n", "2. Define the network manually.\n", "3. Generate a random network." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Load an Example Model\n", "\n", "pgmpy provides a method `pgmpy.utils.get_example_model` to quickly load any model from the bnlearn repository: https://www.bnlearn.com/bnrepository/" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdkAAAEbCAIAAAAZBWnqAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd1wTdx8H8F8mSSCEvTeIDNk4GIKKgigK4qwCror6tKLWWtw46qhWcSuiIGrBBSouECkgCIIgAiJ7ygx7JmTd80cUraICCTmC9/7jeT0kd7/7nIVvLne/gYIgCCAQCAQCVmi4AyAQCAQCqcUIBAIxDCC1GIFAIOCHhTuAILDZ7KampsbGxq6urra2NgAAjUaj0+kAADExMRwOh0ajKRSKuLi4nJwchUKBOy8CgfjhjKhaDEFQaWlpbm5uSUlJaWlpaWlpWVlZQ0NDY2Nj/xvB4XAyMjIKCgra2tpaWlpaWlo6OjrGxsaysrJDlxyBQPzgUMLej6K2tjYhISE1NTUzM/P169fcy15FRUWtD+Tk5OTk5GRlZWVkZMhkMplMBgAQiUQCgQAA6OjoYLFYEAS1tra2t7fX19c3NjY2NjbW1NT0FnRumyoqKmZmZmZmZjY2NjY2NqKiovCeOAKBGEmEshZ3d3dHRUXFxMTEx8fn5+djsVgTExNzc3MzMzNzc3MjIyMSicTHwzU0NGRmZmZmZr569erVq1fFxcU4HG7s2LGTJk2aMWOGlZUVGo3cdkcgEDwRplrc3t5+7969O3fuREdH9/T0cKuhvb29ra2tmJiYwGLU1NTEx8cnJCT8+++/xcXFCgoKbm5u7u7uU6ZMwWAwAouBQCBGEuGoxRkZGRcuXAgNDaXRaBMmTJg/f/6CBQsUFRXhzgVKS0vv379/69at5ORkRUVFT09Pb29vLS0tuHMhEAghM6xrMYvFCg0NPXz4cG5urqmp6cqVK5csWSIpKQl3rj4UFRVdunQpJCSESqU6Oztv2bLF1tYW7lAIBEJoDNMbnUwm8/z587q6uitXrrSwsHj58mVmZuavv/46PAsxAGDUqFGHDh2qrKy8fft2a2vrxIkT7e3tY2Ji4M6FQCCEw3CsxQ8ePBgzZszGjRunT59eVFQUEhJiaWkJd6h+weFwc+bMSUpKSkhIIBKJjo6OM2bMyM/PhzsXAoEY7oZXLS4rK3Nycpo9e7apqWl+fv7Zs2c1NDTgDjUYdnZ2UVFRcXFxtbW1xsbGv/32G41GgzsUAoEYvoZRLQ4JCTE1Na2trX327NmNGzfU1dXhTsSrSZMmpaennz59Ojg42MLC4tWrV3AnQiAQw9SwqMXd3d2LFi1asWLFzz///PLly5H01AuDwXh7e2dnZysoKFhZWZ08eRLuRAgEYjiCfwx0fX397NmzS0pKoqOjp06dCnecIaGqqvr06dO//vpr48aNhYWFJ06cQHoiIxCIT8Hcp62iomLSpEk4HO7hw4ejRo2CMYlgREREeHp6Tps27datWzgcDu44CARiuICzFjc0NNja2pJIpKdPn0pLS8MVQ8BSUlK4zyevXLmCDJ5GIBBcsNUCOp0+Y8YMNpv9+PHjH6cQAwCsrKzu3Llz+/btzZs3w50FgUAMF7DV4i1bthQXF0dHRysoKMCVAS4ODg5BQUH+/v6PHj2COwsCgRgW4KnFMTExJ0+ePH36tLa2NiwBvgLqKIm9sHXRWAX7E1VDe6TFixd7eHisXLlyQHMrIxCIkQqG+8UQBBkbG48ePfr27dsCPvT31J2eabQzprGVOd7/3YsNKkN7sLa2Nn19/cWLF//9999DeyQEAjHswVCLIyIi5s+fn5WVNWbMGAEfuj9e79Az2y8hgFoMAPD399+5c2dpaamcnNyQH2yA2Gx2fX19dXV1bW1tfX19e3s7i8Xq7OxkMpni4uIYDIZMJouLi6uoqCgoKKiqqiKT6yMQvIChFtvb28vIyISHhwv4uP30zt9G7Te2YGpxd3e3hobGxo0bt27dOuQH+x4mk/ny5cvnz5/n5OTk5ua+ffuWuyQgAIBCoUhISGAwGO7ygO3t7Ww2u7Ozs7W1lcFgcLdRU1MzNDQcM2aMpaWlnZ3dD/gYAIHghaDvF7e0tCQnJ//000+8NMIourHWTktKQm2q793sYP+LdVBHSWzgtsXjlWyPljU+9/car0YRkxkz//QrGmhJPbl8ghqZSFaftPlR/cc2IGqC/3J7XVlRgpiCwbS15zJa37+BQqF6N3q9Qw/1nt7uNwAAev7NP2aZKIuJEKR1p/0WXsLi5TQAIJFIs2fPfvjwIW/N8KS0tPTo0aNTp06VkJCwsbHx9/dvaGhwcHA4d+5cUlJSaWkpjUZrbW0tLy8vKSnJyspKT08vLCwsKSmpr6/v6empq6vLysqKjIz83//+Jy0tHRMTs2TJEkVFRT09vbVr1z558oTJZMJ4dgiE0IAE6/r16zgcrrW1lYc2ig5Zjlp2q6id1l4af9BB2vZUbfUJJ2kKDgCg6brlyNUXNR0tOadmyAC06eKtW/wfF7V1NaT4TcAB2V/iONwm2p78okk233S/qLWDmnVjnYkoIFnue82EIAh6528DwHj/dxAEsWqe+s7zOvYoo6yZxuJAUHnQTM2J26OL2roaMk65KqHQejsymDz+g4SHh2MwmObmZh7bGSgqlfrXX3+ZmpoCAKSkpJYsWXLx4sXCwkLeW+7o6IiKitq2bZuFhQUAQEJCwsvLKyEhgfeWEYgRTNC1eM+ePXp6ejw10X11JtDzfUnn/lR5ctu5WgiCoBw/QwCM9he834pzfykBiC57wHr/c8F+IwCmnm+EIAjiZPqOAsq/xrM/bJvlZ4QChClnK6GPtZhReNnT+df7tZwPx2XGrpIz3Jf34ceKo2MBIC26zdO5QFB5eTkAIC0tjcd2+i81NfWnn34SERGRkJBYs2ZNTEwMk8nrJ8rXlJeX+/v7jxs3DgBgYGBw6tSprq6uIToWAiHUBH2Poq6ujtc7iURNTcX8vyYbu20Nfl7do7pu/xoFAACQk5MDAI/Hv98KJSYmCsDHaR/weDwA778vZ1y/XgTGmJh8OHmUsffPEwA97mFs9/tXGHmB8yb9rfH3KReF3jsW2U+fUnN36n+4aaG+6SUA3bm5PJ0LAAoKCigUqqamhsd2+uPFixczZswYP358cXHxuXPnqqurz507N3XqVCx2qKYlUVdX37BhQ2pqakZGho2Nja+vr7a2tr+/f3d39/d3RiB+JIKuxR0dHWQymbc2bPbe3O8oUX7v0ApbTe2p2x/XcgAAoP/jiaGKincA/KccKOnokABUU1P3YZOuysrGNyd+C6z4+GSzoaEBTDhe9d/PsuxdvJ0LEBERwePx7e3tPLbzbbW1tV5eXlZWVq2trZGRkWlpacuXL+fvatnfZm5ufuHChYqKitWrV+/evVtHR+fKlSsCOzoCMfwJuhbLyclRqVQeG5G03RZdVBjt720lXR97wHXu8ZIB7Y5SVlYEoDAvj/PxNRwOC0S0tJTe/yhiufvGoYmc6I2ep4s+bEWhUMDr8JtFnM/b40lra2tPT8/Q9TqAIOj48eOjR49OTk5+8OBBcnLyrFmzhuhY3yUjI7N79+6ioiJnZ+dly5Y5OjqWlZXBFQaBGFYEXYsVFRWrq6t5aoIeuvPPtxBB3XFDQHLBs/X6zLSUdPb7+w9sNvvDZhwO5/MfAYvFAgAAM1dXVVB/PTCy88O7Vbm57WKuC2cQAGAwGACw2UB3Y9g5F0LiH0v2Z3N7bZna21PoiVudFxx+8KamvbutJu9Z8Jrfr/F0LgBUVVUBAIaoFtfX1zs7O//xxx8bN2588+bNzJkzh+IoAyUnJ3fp0qWkpKTa2lozM7Nbt27BnQiBGAYEfH86Pj4eAFBUVDT4JmhXZ+JHe51/VtZK66yMWqtHmnymjNNTdXmOFADkWYHlNDYEMVuf/2GEAsBo8/MWJgRxaCUBLmQAJF2DKukcCIJqbiyQB0B59vHk6s6OmpQTLkpSTgFlHIjdVXJ2hjgAlDmXK2lsqPHxKk00WnPZ3VoWBEHsPH87sU//7bC6GxPaefwHOXXqlLi4OIPB4LGdL6WkpMjLy2tpaaWmpvK9cb6g0Wj/+9//AAC//vori8X6/g4IxMgl6FrMZDIlJCROnDgx+CZooWdPZ9zbO89YTkxc2Wz+vqe1HFrwJxd8hn45d5aI9P6IWXgrx8/w49szg2kQBEH0wttbZ5soiYkQJNQs5m67XUSHIChn++iPG5rsy8v85GfKyscQ1J5xYbW9thSBKKU5dsGBp1W81w9nZ+d58+Z9Y4PGxsZBNBsZGUkikWbNmtXW1jbYaAJy8+ZNIpHo5ubW3d0NdxYEAjaCrsUQBC1dutTQ0JDNZn9/05GuuLgYi8WGhYV9YxtTU9Ply5fX1tb2v9kbN25gsVhvb29hudhMSkqSkpKaNGkSjUaDOwsCAQ8YavHbt2/RaPTt27z2zB0BVq5cqa2t/Y3uvQwGA4vFolAoIpF44MCB/pSqmJgYPB6/YcMGviYdcjk5OZKSkm5ubsLy+YFA8BcMtRiCoIULF44aNaqzsxOWow8T6enpOBxux44dHR0dX9smKyvr491pLFZeXj4kJITD4Xxt+/z8fDKZ7OHh8Y1thq2kpCQSibRx40a4gyAQMIBnjaWamhpjY+N58+adP39e8EcfDuh0+tixY1EoVE5ODgqF0tLSMjExMTY2NjY2NjEx0dTU5E6LcfXq1WXLlnE47/vRodFoCILMzMxOnTplbW39WZsMBsPKygqLxSYlJQnpYnqhoaEeHh4PHjyYMWMG3FkQCIGCbb278PDw+fPnX7lyxcPDA5YAMIIgaNmyZffv38/KymIymdkfZGVllZaWcjgccXFxIyMjIyOjsrKyuLi43rnQuLBYLJvNdnd3P3r0qLq6eu/r27dvP3XqVGZm5jCboX9gli5dGhUVlZ+fLykpCXcWBEKAYLwm/+OPP7grQMOYARa//fYbHo+Pior68q2Ojo6UlJTz58+vXbvWxsaGQqF87T8cDocTERHx9fVtb2+HIKi8vJxAIJw8eVLgZ8NnbW1tcnJymzZtgjsIAiFQcNZiDoezYsUKEon04MEDGGMIEofD8fX1RaPR169f78/2UlJS3/4oxWKxcnJyAQEBS5YsGTVq1GD6KXdXPgvZ7Wmrarojc8D7Do3Tp0+LiIiUl5fDHQSBEBw4azEEQSwWa/ny5RgM5vTp0/AmEQAajbZo0SI8Hn/lypX+bF9fX//tQvwpFAq1c+fOQaTqCl0iJ0UAAIzePlxqMYPBUFZW3r59O9xBEAjBgW0daC4MBhMUFLR3795169Z5e3t3dXXBm2foFBcX29vbR0dHR0VFeXp69meXTztR9EKj0b3P5bBYrJaWlpubm4ODA5FInD59OjTwu/+kn67Vvz4wbqC7DSUcDrd06dLLly9/MoYdgRjhYK7FXNu2bQsPD4+IiDAzM0tNTYU7Dv8FBgaamZkxmcyUlJTJkyf3c6/s7GwAQO+ElmJiYmZmZkuXLt23b9/du3cLCwtpNFpJScmdO3d6enoWLVpkbW396aIkAyAjIzOY3YaQl5dXdXX1iPxlQCD6BveF+Ud1dXUzZ85Eo9Genp719fVwx+GPvLy86dOno1AoHx+fnp6eAe176tSpdevWnT17NjY2tqam5mub0el0AoHQz/sefaNdnfn+HsWdhe8nfJ57C4I+GRTuFNzBbs2POrN5nrnctHM15Xe3uxhIE0mKlqtv9t7VpRVGbHc115ASo6hZLjr2gteVShQVFQ8fPsxjIwiEsBhGtRiCIA6HExQUpKCgICUldeLECTqdDneiwautrV2zZg0Ggxk3btyLFy+G7kDci0eelkf6WIshZkvSBv3eWgz1NGX4jccC4BTcUXDAVoqMAQDoOPvs++dVfWdr9oGJBCCxLIoJQRDUdH+ZMkpp/qWc5s6mzAvuitwajrY+WfWtI3/DnDlz5s6dO/iTQiCEyvCqxVzt7e2+vr4EAkFRUfHIkSPcPltCpLS0dO3atQQCQUlJ6dvD5Pjizp07AICBXnT/xye1GIKghHWKvbUYgqDM7aMBcArugCAIStmkAcA4/3fv36o4agXez6/fc30eHsj/kvj+nfJDlkBsZnDD4DNBGzZssLa25qEBBEKYDIv7xZ8hk8mHDh0qLS1dsmTJnj17NDQ0fv/997y8PLhzfQeHw4mJiVm4cKGurm5UVNSxY8dKSkq8vLwGeQ+335qamshk8sfVpXj2WVMEAqH3/8vJyQJA7H2BRCJ9WLgKQyKJgLaGhvejUhQUFEBnRkYBDzGkpaUbGxt5aACBECbDsRZzcS+KKyoqNm7cePv2bQMDg4kTJwYFBTU1NcEd7XMFBQX79u3T0dFxdHSsqqoKDg4uLCzkXhoL4OgsFktgI56/vpAVxnnrYUfxe3t+f1DW0V2fdiLkGVCY7mTCw7HwePz79QkRiB/A8K3FXFJSUjt27CgtLY2OjlZUVPzll1/k5eUdHBxOnz4N7/I8bDb75cuXO3bsMDQ01NPTO336tJubW25u7vPnzz08PIZuNc8vSUtLt7a2wt79C6u30v93Z1L2zvEKsgbzQ0V//if2jIvY9/f7qsbGxuHXvwOBGCqCKxm8QKPRjo6Ojo6OHR0djx8/vnPnzvbt29etW6eurj5p0qTJkyfb2Nhoa2sP9d0ABoORnZ2dmJgYFxf37NmztrY2dXV1Nze3s2fP2traflxzWrBkZWU5HA6VSlVUVBxkE0wms3cBKgBwOBwAnZ2dAIgBACAajc5deBWIATqdDgCut+x/unBVT+oO94e2T2PvqPDpn6G2tlZWVpY/bSEQw55w1OJeZDJ5wYIFCxYsYDAYL168iIuLi4uLW716dU9Pj7i4uKmpqZmZmZGRkY6OjpaWlrKycv8Xh/5ST09PeXl5aWlpUVHR69evMzMzc3NzmUymtLS0nZ3dvn37pkyZYmho+P2GhpiJiQkajU5LS3N1dR1UA+ymuGfZADQnxuR2mRmKYjS0tTEg+fqlN3N+ls69fv5yShcABbss5VL2RU9NKgKAlBRXs2qhEp5VFxOfDUBP0r8VPdrqaaHXChJqVLG/f2gWJao2ed3F0IPT5Ad3XmlpaQsWLBjcvgiE0IFtnjY+otFoWVlZ3HKZmZn59u1b7vg9ERERDQ0NeXl5GRkZ7v+KiopSKBTu0DUxMTEAQGtrKwRBPT093d3dzc3NDQ0NjY2NjY2N1dXVVVVV3MkqZWVlTUxMuIXe1NRUT0+PlxI/FIyMjJydnQ8fPjyYnaN+FnO+9H68o/L6lKrjE2hZJz1+2vOoDKM9fcPp83Oeu057oLV81RzauQVH09/vNP5I4rzbEzd/GIphf6r20dgLdlP9Mjr/27jiuuc1Jz+f3LMfGhoa5OXlkckzET+OkVCLv1RXV1dSUhISEhIWFubh4dHS0kKlUhsbG7u6utrb29lsNoPB4NZrCQkJFApFIBCIRKKUlJTMB4qKilpaWtra2tra2uLi4nCf0Hds3rw5PDy8uLgYvg8JTuXNX/e1/x7wsxYaAAAgVndbXemzA8tuOqddmzXwUGfOnPH19a2trSWTyXzPikAMQyOzFnPZ2NioqKjcuHED7iBDrqCgQE9PLzY2dsqUKbAEgAqOjrfO3NVwzeXTsguVXzicOs934XfmmuuLubm5qalpUFAQ3yIiEMPb8PquzUf5+fkpKSmrVq2CO4ggjB49euLEiQcPHoQrAL0wu7D5wZ//O/0ws5za3sPoaqzMenhq1w01r8EU4ujo6MzMTG9vb/4HRSCGqxF7Xbxx48Z79+7B+rVdoFJSUmxsbB49ejR9+nQ4jk8rfnT2yMlrMa9Lalo44qpG9nNXb9uy1ExywD1bOByOpaWlmpra3bt3hyIoAjE8jcxazGAwVFRU1q9fv337drizCM6cOXPevn2bkZHBfSwppI4fP7558+bs7Gx9fX24syAQgjMyrxnDw8NbWlqWLVsGdxCBOn/+fFtb2/r16+EOMng5OTlbt27dvXs3UogRP5qReV08ZcoUMpl87949uIMI2v37911dXc+ePbtmzRq4swxYfX29jY2Nmpra06dPf5A7SwhELyEb69EfpaWl8fHxkZGRcAeBwaxZs/bt2/fLL79IS0vPnz8f7jgD0N7ezu1KHBYWhhRihGA0NTXV1tZSqVQOh8Pt7QoAEBUVxePxJBJJSUlJUVFRREREMGFGYC0ODAxUUlJydnaGOwg8tm/fTqVSPT092Wz2okWL4I7TL42NjS4uLrW1tc+fP5eXH+Q4PQTi2/Ly8tLT03Nzc9+8eZOfn19dXU2n07+7l4yMjIaGxpgxYwwMDIyNja2srIZowMFIq8UsFuvKlSsrV66Ea3aI4cDf3x+LxS5ZsqS6unrTpk1wx/mO0tJSZ2dnJpMZHx+vqakJdxzEiFJdXR0ZGfnvv/8+e/aMSqXi8Xh9fX1DQ8MVK1aoqqpyr3zl5eXRaLS4uDi3aHR1dTEYjO7u7urq6rq6uqqqqpKSkjdv3jx58qSmpgaDwZiamtrZ2Tk7O0+aNImfUyTCOHfyUIiIiEChUMXFxXAHgd+xY8fQaPTChQu547yHp/DwcElJSQsLi9raWrizIEaOurq6I0eOTJgwAYVCiYmJubi4HDlyJDU1lclk8tJsfX397du3fXx8jI2NAQBSUlJeXl5RUVFsNpv3zCOtFjs7Ozs6OsKdYrh48uSJgoKClpbWs2fP4M7yuba2Nu4DRm9v7+7ubrjjIEaIhISEhQsX4vF4SUnJ5cuXR0ZG0mi0oThQaWnp0aNHbWxsUCiUlpbWwYMHGxp4WcdmZNXid+/eYTCYW7dufX/THwZ3RVcUCrV06dLhs6JraGiooqKitLT0zZs34c6CGCESExO5cwBYWFgEBAR0dnYK5riFhYW+vr7cqcd8fHwG/Q1vRNViPz8/GRkZoV6xdIiEh4erqalRKJRdu3Y1N/O6QjMvHj9+bGVlhUajvb29GxsbYUyCGDGys7Pt7OwAAE5OTsnJybBk6OzsPHLkiJycnJiY2J9//jmIKjRyajGbzVZXV9+8eTPcQYapzs7OP//8U1pamkKhbN26taysTJBH7+npuXHjxoQJEwAAM2fOTE9PF+TRESNVZ2fnpk2bsFjs+PHjU1JS4I4DdXV1HThwQFRUVFdX9+nTpwPad+TU4ocPHwIA3r59C3eQYa29vf3AgQNKSkpoNNrZ2fnmzZtD/VUuOzt7y5Yt8vLyGAzG1dU1LS1tSA+H+HG8fv1aT09PUlLy/PnzfHl6xi8VFRVz5sxBoVCbNm3q/wLtI6cWz5kzx97eHu4UwoHJZEZERDg5OWEwGCKROGfOnMuXL5eXl/Or/e7u7ri4OF9f31GjRgEAVFVV/fz83r17x6/2EYiAgAACgWBvbz9sf69CQkLExMQsLS37mXCEjIGur69XVVUNDg5esmQJ3FmECZVKvXfvXkRERFxcXE9Pj5qamp2dnYmJiZGRkaGhoYqKSj/b6e7uzsvLy8nJefPmzYsXL16+fMlgMHR0dObMmePu7j5+/PihXooQ8eOAIGjnzp0HDhzYuXPnrl27hvNIgsLCQnd39/b29sePH393PbYRUosPHTr0119/VVdXk0gkuLMIJTqdnpaWFh8fn5ycnJOTU1NTAwAgEAhKSkpKSkry8vISEhIYDIbbH76zs5PJZHZ2dra0tFRVVdXV1TU0NHC319HRqaqq2r59+8KFC1VVVeE+LcRIA0HQ6tWrL1++HBgYuHTpUrjjfF9ra6urq2tOTk50dPTYsWO/seVIqMUQBI0ePXr69OknT56EO8sI0dzc/ObNm/Ly8urq6tra2vr6+ra2Njab3dbWxuFwuAP2yWQyhUJRUVGRl5dXVVU1MDDQ0tICABgYGEycOPHixYtwnwRiBPrjjz+OHz8eERHh4uICd5b+otPpc+fOffnyZWJi4ujRo7+63dDdLhGY2NhYAEBmZibcQRAQBEGBgYE4HI6Pd58RCK5Tp06h0ehr167BHWTAurq6rKys1NXVvzEeZCRcF//0009lZWUvXryAOwgCAACYTOaoUaNcXV1PnDgBdxbEyPH69esJEybs2LFjx44dcGcZjObmZnNzcxMTk7t37/b5+EToJydsamq6e/fuD7KunVDA4XAbN268ePEilUqFOwtihOjp6Vm8eLGVldW2bdvgzjJIUlJS165de/ToUUBAQJ8bCH0tvnr1KhaLXbBgAdxBEB+tWrVKTEwMuS5G8MupU6cqKiquXLki1HNb29ra/vbbbzt27Ghtbf3yXSE+Ma6LFy8uXryYTCbDHQTxEYlEWr9+/enTp/v8nUMgBqS5ufnAgQO//fabgHrmNN/xUJEadzBrKNretm0bCoXqc8l24a7FycnJubm5P//8M9xBEJ/79ddf0Wj0mTNn4A6CEHpBQUEQBP3xxx8COyIEQWBoOsRTKBRfX9/z5893dXV99pZwP7tbvnz5q1evsrKG5BMMwaPt27cHBASUl5cL9brUCNgZGhpOmjRpxHyuNzU1KSsrBwQEfNY/Woivi9va2m7duuXt7Q13EETffvvtt56enkuXLsEdBCHEsrOz3759KxTDOvpJWlraxcUlLCzss9eFuBaHhoZyOJzFixfDHQTRN2lp6ZUrV/79998MBgPuLAhhlZiYKCEhYWlpyUsj7Moov/njNGRFCaIyOjbLzme+vz/AKLqx1k5LSkJtqu/d7GD/i3UA0N4lXd27zF7DZGv6t/flhYODQ0pKCnep048E1dmZ/8zNzb28vOBOgfiWd+/e4fH4wMBAuIMghJWHh4eTkxNvbRQessSJTv0ro7a9tTBskQpAT/i7EoIgqOiQ5ahlt4raae2l8QcdpG1P1UIdVxZKS4gAALR9X35zX55wb6tmZWV9+qKwXhdnZGS8evUK6VY8zKmoqHh6eh46dIjFYsGdBSGUysvLdXV1eWuDxuRITZgz31yBTBm1aImDKKekpAwAQHuRmI6R11AlE8ia9luC/eywAIh5Xm9889eE7+7LG+78hRUVFZ++KKy1+OLFi6NHj7axsYE7COI7tm7dWlFRcfv2bZFEuBcAACAASURBVLiDIIRSU1OTtLQ0b20Y78ioe/o/lbrUa34e1mtudAEmkwkAIGpqKub/NdnYbWvw8+oe1XX71ygAAACQlZX97r68IRKJoqKijY2Nn74olLWYRqNdv37d29sbmYlx+NPW1p43b96+ffs4HA7cWRDCh0ajEYlEHhthVUfvch5tvvoRxvnv/QulAcTtPWaz9+Z+R4nye4dW2GpqT93+uJb7G/rf8SRf2ZdXJBKpu7v701eEoxZzp2Tsdf369e7ubk9PT7jyIAZk69ateXl53IVXEIgBkZSUbGlp4amJzjifiTOCKAfSMkJ3LbFWJnzSuO226KLCaH9vK+n62AOuc4+X9H9fXkAQ1NLS8tn1vnDUYgcHBzs7u9DQUDqdDgAIDAx0c3P7zzcJxDBmbGzs4uKyf/9+uIMghI+MjMxnl2IDlngtpEx0xopFKr2TznOvbemhO/98CxHUHTcEJBc8W6/PTEtJZwPAvQvx/gnH1/blTXNzM4vFEspa3NbWlpSU5OHhIScn5+XllZKSgjy1Ey7bt29PTU39999/4Q6CEDJjxox59eoVT00oKSmBjph/ble0UbNuHQx43g26qTVvw0PjOzL3uS8LSCxvo3e1tTMgkt3k8RjAavo34TUANSlx+TTO1/flqWcb94zGjBnzn1d57p4hCDIyMr2BcTgcAMDY2DggIKCjowPuaIj+mjx58tSpU+FOgRAyt27dwmKxvP2lN0T/Ya8qTlYYM2NLRFHZVXdZUaWJG+9VdYWePZ1xb+88YzkxcWWz+fue1nIg6M6Sj0s2mewr+tq+vK10umfPHk1Nzc9eFI4x0GQyubOz89NXuLfXCQSCp6enj4+PgYEBTNEQ/fX06dNp06Y9f/7c2toa7iwIoUGlUpWVla9cufLTTz/BnYVvzMzMLC0tAwMDP31ROGoxHo/vsycJCoUSExNLTU3V19cXfCrEQFlbW8vJyd29exfuID8uDofD4XCwWCzcQQbA1dWVRqM9efIE7iD8kZGRYWlp+eVFiRDUYjab/bVfHQwGEx0d7eDgIOBIiMG5d+/enDlzsrKyjIyM4M4yYjGZzIKCgtzc3Ddv3lRWVtbU1NTU1FCpVAaD0d7e3ruZmJgYHo+Xl5eXl5dXUVFRUVExNDQ0NDTU19cnEPjUXYBP7t+/7+bmlpmZaWxsDHcWPvDw8MjMzMzNzf3sdSGoxR0dHeLi4l++jkKhgoODR9KkISMeBEEmJiZGRkb//PMP3FlGlK6urmfPnj179iwhISE9PZ3JZGKx2FGjRmlpaSkqKiorK8vLy+PxeHFxcRQKhUaj2Wx2Z2cng8Gor6+vra2trq6urKzMy8tjMBgYDMbExMTOzm7SpEl2dnaSkpJwnxyAIMjGxkZcXDwqKgruLLzKysoyNze/cePGvHnzPn+Pp1vQAlFXV/flKaHR6F27dsEdDTFg165dw2AwhYWFcAcZCZqamoKDg2fPns29ktXX11+zZs21a9eysrJ6enoG2hqTyczLy7tx44aPj4+pqSkajcbhcNOmTTt37lxtbe1Q5O+/+Ph4AMCdO3fgjcEjFotla2s7YcIEDofz5btCUItLS0s/K8RYLHb+/Pl9ng9imGOxWKNGjfL29oY7iHB7/vy5p6cngUAQERGZOXPmxYsX6+rq+HuI5ubmsLCw+fPni4mJYbFYd3f36OhoNpu3DgSD1djYaGtrKyEhUVFRAUsAvti9e7eIiMjXVqwXglr82Y0VHA5nZWVFp9PhzoUYpICAABwOJ9R/VHDhcDh37961sLAAAJibm1+4cKGtrW2oD0qj0UJDQ+3s7AAAurq6ISEhLBZr0K1xOJzjx4+3t7f3Z+OGhoYLFy44OjpisVgCgaCmpjZx4kQajTboo8MoOjoai8WePHnyaxsIQS1++fLlp1fEampqVCoV7lCIwWMwGGpqahs3boQ7iJCJiooyNTVFoVDu7u5paWmCD/DmzZulS5dy70Rfv359EC20tbW5ubkBAP75559vbNbY2BgSEuLi4oLD4QgEgouLS0hISFtbW05OjqSk5Jw5c3j5MIBFWlqamJiYp6fnN77NC0EtTkhI4BZiDAZDoVCQW40jwLFjx0gkEvKZ2k/v3r3jPupxdXX9bNJbwSsuLl66dCkajXZwcMjLy+v/jtnZ2VpaWjgcDo1Gz549+8sN+izBn11BJyUlEYlEDw8PBoPB65kISlpamoyMjLOz87czC0Et5j48RaFQeDw+OTkZ7jgIPujq6pKVld2xYwfcQYTA1atXyWSytrb248eP4c7yUUpKipmZGR6P//vvv/vz5Obq1asEAqG3cyoej++9u9LQ0MAtwVgslkgk9lmCPxUTE0Mmkx0dHft5owNeDx8+FBUVdXZ27urq+vaW8NTi5ubmt2/fJiQkPHz48ObNmzdu3AgICAgICAgLC7t58+b9+/fj4uLevHnDvW4KDw/n1uJvf69BCJe9e/dSKJSWlha4gwxfHR0dXl5eKBRq48aNw/AmKYvFOnjwIBaLdXZ2bmho+NpmdDp93bp13D/h3puNKBTqwoULX5bgfo51zsjIUFBQMDAwyMnJ4d8J8Rmbzd6/fz8Wi12+fDmTyfzu9kNeizs6OuLj40+fPr1u3TonJydNTU0REZEv+6hJSkpKSkr+d+LQ90/quLMZTZgwwd/f/8mTJ8hf78jQ2toqISFx8OBBuIMMU/X19ZaWlrKysg8fPoQ7y7ekpKRoaGjo6OgUFxd/+W5FRYW5ufmXY7UwGIyKigqJROKW4M7OzoEet7Ky0tbWlkgknj17dhh2qaqqqnJwcMDj8f7+/v2MNyRjPRobG2NiYuLj41+8eJGbm8tms6WkpHR1dfX09HR1dVVVVeXl5RUUFOTk5MhkMolE+mx3Op3e0dFBpVKpVGptbW1ERMSbN2/k5eXz8/OpVCoKhdLT0xs3bpydnd306dOVlJT4nh8hGFu3bg0KCiorK/vyd+AHV1pa6ujoiEKhoqKitLW14Y7zHVQqdebMmZWVlY8fPzY3N+99/eHDh4sXL6bRaH1OYIDH46urqz+d9mugWCzWnj17Dh48OH78+LNnz5qYmAy6KT5iMpknT57cs2ePgoJCWFgYt9NLv/DxoyAvL2/37t3jxo1Do9FYLNbGxmbTpk03b96srORpsb7MzMzeK/y6urp79+5t27Zt8uTJ3P7txsbGvr6+r1694scZIASqvr6eSCR+o5fPj6mmpkZLS8vCwkKInm12dHQ4OjrKyMhwn+axWKxdu3Zxx/h9rfKgUKgbN27wfujMzEwrKyssFrt69Wp4O0qy2exbt24ZGBgQCAQ/P7+B3lbiQy1ubGw8fvz42LFjAQBKSkre3t4REREC6PbY3d396NEjHx8fLS0tAICBgcH+/furqqqG+rgIPvr1119VVVUHMUhspGprazMxMdHT0/vGHdjhqaury9raWl1dPScnZ8qUKRgM5mtVmAuLxc6dO5cvh+ZwOJcvX9bU1MTj8atXrx5Q7w6+6Onp+eeff8aMGYNGoxctWtTn7Zrv4qkWFxYW+vj4iIqKiouLe3p6RkZG9ucW9VBIT0/38fGRk5PD4XDz589HulsIi8rKSjweHxQUBHeQ4WLx4sUKCgpCOhCmqalJTU0Nj8f380s5gUD4bu+C/mMwGBcvXtTW1kahUPb29v/88w8fG/+agoICX19fOTk5LBa7aNGi3NzcQTc1yFqcm5vr5uaGQqF0dXXPnDkziFvvQ4FOp1++fNnMzAwAMGXKlBcvXsCdCPF9y5cv19bWFrre+0PhypUrKBQqOjoa7iCDVFFRsXDhQgwGY2lpOf8DNzc3+w+srKzGfKCtra2urh4TE8PfDGw2Oyoqys3NDYvFkkikuXPn/vPPP/z9ksFms1+9euXn58edblBVVXX37t28fyMfcC2uqalZuXIldzKne/fuwTU+/dvi4uJsbW25I5SQsSHDXFFREQaD4cutQ6HW3NwsLS29YcMGuIPw6tixYyIiIiUlJfDGqKurCwgIcHR0xOFwKBTK0NBw7dq1ISEhGRkZg+ggWF1dHR0d/ddff7m4uEhISAAAVFRU1q1bFxcXx6/LiAH0o4Ag6NKlS5s3b6ZQKH/++efixYu/cWN+OHjw4MGWLVtKS0v9/Pw2bdokXPNn/1AWLlxYUFCQmZn5aRfUH83vv/9+5cqVoqIiCoUCdxaesNlsY2NjY2PjsLAwuLMAAEBbW1tiYuKzZ88SExMzMzN7enowGIyWlhZ31mZFRUUpKSkxMTEcDicmJkan01ksVkdHR3d3d319fVVVVV1dXVFRUXNzMwBASUnJ2trazs7O3t7eyMiIv7+u/a3FtbW1Hh4eCQkJ69ev37dvn7B0QmKxWEeOHNm7d6+hoWFoaKiuri7ciRB9yMrKMjMzu3///syZM7mvNDY2xsbGLly4EN5gAtPU1KSionL48GHusIihx6hNuxMcGHjpqe6lsrOT+N36nTt35s6d+/btWz09PX63zRMWi1VcXPzmzZu8vLzq6mruRPstLS1dXV0MBqOjo4NAIOBwODKZTCQSubPsy8vL6+joGBgYGBkZfbZyM5/15+I5MTFRUVFx9OjRsMxIwrv8/PyxY8dSKJR79+7BnQXRtxkzZkyYMAGCoKqqqg0bNhAIBF1dXbhDCc6JEyfExMT4tZZu1al9wd8eEcW+t0JJWhQFgPTqOL4c8r84HI6WltbmzZuHoO0R6/u1ODg4GIfDubq6CqCb2tCh0+k///wzCoU6cOAA3FkQfUhKSkKj0XPnzsVisdwH8SQSCe5QgmNhYbFy5Ur+tNWZ8D+tqYHfH53aGTwTM0S1GIKg3bt3y8vLD8/nScPTd2rxuXPn0Gj0tm3bhuEow0E4deoUGo1GpqQZbnJycpYsWcJdSOLTL21C/fHffy0tLWg0mk9f2hrueakB4NCPWgw9XE4eulr86tUrAMBwni9iuPlWLb5w4QIKhdq/f7/A0ghAcHAwBoNB1mcaJlJSUlxcXFAo1GdVmIuX3ppC5NGjRygUii+j7CJX6fQx2wuYewuCIChn+2juj07BHRAEQY9XUoD06nuZgd52WhQCUd5k3l+Jjbxn4GKxWOLi4gEBAfxqcMT7ai1OSEjA4XC7d+8WZBrBuHjxIgqFGtxk2Ag+Ki8v//bSlsLb03ZAjh49qqyszK/Wig5a9F4XM1uSNuj31mKopynDbzz2P7WYoDfvUHhWbUvd639WGRKBqEMg/wauWllZrV+/nm/NjXR9d0qrqamZN2/e7Nmzd+3a1Z8HgMJl5cqV69evX7FixZs3b+DO8kNTV1f/999/KRRKn90NMRhMVVWV4FMJXmNjo6ys7FC0jJWwmTNVsfdHvJS529T/zjQkav+Lr7uxgoS8yeLz/2zW747dfSSJX0eXlZVtbGzkV2sjXt+1eP369eLi4iEhISO1v+eRI0dMTEy8vb05HA7cWX5opqam8fHxJBLpy3KMxWJ/kFrc1tbGHT4wFD4bkcydUatPaBMXZ1VQnZXFr0NLSkq2tLTwq7URr49a/PDhw9u3b589e1ZUVHQgTTFq024cWDVVW/N/8XwKN3SwWGxAQEB6enpgYCDcWX50veX4s9lkOBxOdXU1XKkESVRUtLOzE+4UAABZWVkAWlv51VxnZyeZTOZXayNeH7V479697u7ujo6OA2uJE7Vjzi8HLsWWdgjHlaaRkdHatWv379/PYrHgzvKjMzMzi4+PFxUV/bQcM5nMiooKGFMJjLS0dFNTE9wpAAA1NTWAoKPDr+YaGxt5mZ74R/N5LU5OTk5LS9u8efPAW5p9qbri9IzvTJQ3rPz222/cuerhDoIAZmZmcXFxn10dl5eXw5dIcDQ1Nd+9e9fV1cWX1lAoFABQ73BaHA4HQO9lN0Sj0QFoaGjoY0fWi/DIWun5ns58iQEAKCgo0NDQ4FdrI97ntfjy5cvm5uYTJkwYVGuicnLCMTaaS11d3cXFJSgoCO4gCAAAMDc3/6wc19TUwBtJMGxsbFgs1suXL/nSmoSkJABFmRnUgouHQ6uBhrY2BiRfv/Smras2+dLucyldALzaZSk391KTrJIStjliz/bw7Lq2hpx/vJdfwK0MPjpbnC8xSkpK6urqrK2t+dLaD+GzfhWampp+fn6D7pbxlR6L7LaC6HN/zLeQdzxfkf73TC1xKYs9qQwI4tTHH1tmN0qGJCIqrz91zdn0FgiC2K35UWc2zzOXm3aupvzudhcDaSJJ0XL1zfIPB2FWPNq7cJw6hUCU0pjgdSKledBxIejixYskEolOp/PQBoKfUlJSPr1ZMUymYx1qGhoa27Zt409bTU83WyuKy5qtDC1mQxDU/fqEu74UgSBr6LY/ru7tn+OVJ/y049K/ZZ0ciNP8MtDHyUCOiCfK6TmsPfuiiX8jus6dO0ckEpG/rP77Ty3mfiVMSEgYdHNf6bGYt99GmowBAFgsPhb6Ku2Us6r6LzH0tie/aJLNN90vau2gZt1YZyIKSJb7XjMLDthKkTEAAB1nn33/vKrvbM0+MJEAJJZFMSEIgqrCFigqTj/2rLK9m/rkF10AxOeGNQ06cFlZGQDg2bNng24BwXfJyckkEonbh6egoADuOIKwdetWZWXlkTSJ89ixYz08POBOIUz+U4vj4uIAALzMu8y9Lo778CP79S59FFBenwhBUNof2gCobkj6sPAHJ9N3FFD+Nf7DeHVOlp8RChCmnK2EIChlkwYA4/zfvX+v4qgVABOOV0EQPXq5LGZaQP37N3KOjJOScbnI03p6RCIxJCSElxYQfJeUlEQkEgEAYWFhMTExZ8+e3bVr1+rVq11dXa2srCwsLEaNGqWlpaWoqKiurq6lpWVgYGBhYWFvb79o0SIfH58///zz6tWrqampzc28fGsSnMLCQhQKdffuXbiD8Ed6ejoAIC4uDu4gwuQ/nTqpVCoGg/n2UKgBQZu4OKvuPZaV1QRsZWSkASCOHv3hiBnXrxeBMX+YfLhjjTL2/nnCnvVxD2O71y6Tk5MFgNjbFZJEIgHQymQCkPbwYYPqCgu592+M+T216XceQ8rJyVGpVB4bQfAFh8MpKChITU198eKFqqpqYWHhTz/9BACQkpJSUlLiLh+uqakpIiJCoVDQaDSBQGAwGBwOh06n02i0zs7OmpqajIyMhoaGioqKnp4eAICsrKyxsfGECRPGjx8/btw4eXl5uM+yD6NGjXJzc9uxY4eLi8t3V4ob/rZt2zZu3Dh7e3u4gwiT/9RiGo2Gx+P5+qvwvsdiKwCY/w4bgSoq3gGg1t0NwIde7ko6OiSQUlNTB8BXZ6mnUhtAY0MDBADfBqGQSCR+PcJGDE59ff2TJ0+ioqJiYmIaGhqIRKK5ubmLi4uIiAidTt+2bdsgukZxOJyKiorCwsL8/PzMzMzw8HDuFH1jxoxxcnKaPn36xIkTRUT6mrwBJocOHRozZszFixdXr14NdxaePH78+MmTJ/Hx8SN1pNgQ+U8tlpGRodFo3d3d/JsqvqamBhBsdJQBqPvvGyhlZUUACvPyOEDpQ93F4bBAREtL6YuNP5KSkgSdd6/e9Z8+h1+dyKlUqpyc3Pe3Q/BbW1vb7du3r1279uzZMywWa2tru3nz5kmTJpmamvZOFdTT0zO4iolGozU1NTU1NZ2cnLivtLS0vHjxIiYm5tGjR0ePHhUXF3d3d/fw8Jg8eTK8K9RwOJzMzMz79+9TKJTff//dwcFBh3+dfAWssbHx559/XrhwIXJRPFD/+RXkfn2rra3lV+u9PRYJAHA4HAA+GVdh5uqqCuqvB0b2Djiqys1tF3NdOIMAAJ1OB4DNZr9/5+O+YydPFgVNYatm+0Xm1nf1dNRkP/z7571PBp2wp6enpaUFqcUC9vLlyyVLligoKPz666+ysrK3b99uamqKjY3dvHnz2LFjP52zjY+XrpKSks7OzseOHXv79m15efnevXvfvHkzdepUNTW1vXv38uU+1blz5/o/aqOzszM8PHzp0qXy8vKWlpbXr1/38vLS1NRcvHgxnU7nPYzgcTicZcuW4XC48+fPw51FCH1685hGoxEIhCtXrgz69nP6Tn0sSnbStttZta3U7GvL9cR0VkZSIYjdWXjSiQyA1rZXHzeuubFAHgDl2ceTqzs7alJOuChJOQWUcSAOveKMEwkAmUVh1T0cCGLUXpsvDYDYzIByOoeZfWgC8dMTELc5njv4p8/cx5VlZWWDbgHRfxwOJyIigtvn1Nzc/NKlS62trfBGysvL27Jli4yMDIFAWLFiRX5+/uDaaW5udnV1BQB898+nvr4+JCSEewcGjUZbWFj4+fmlp6dz3y0oKJCUlHRzcxPGPhVr164lEAjJyclwBxFKn/cvnjx58tKlSwffXt89Ft8dGf++corJyuttSvqwNb3w9tbZJkpiIgQJNYu5224X0SEIajj1yZeb8UcSe/cFANifqoWg5uTjXuNVySJi8vrT/nfpVT8mzf66nTt3amtr89ICop/i4uLGjx+PQqHc3Nx46Tc5FLq7uwMCAvT19bFYrLe3d3V19YB2T0pKUlRUxOFwaDTa3d29z23evHlz6NAhGxsbFApFIpFcXFwCAgJqa2v7bI1EIq1YsUK4yvH27dsxGMydO3fgDiKsPq/Fx44dExcXb29vhyWNgLFYLE1NzRGwCvowV1VVxb1mdHR0zMjIgDvOV7FYrODgYDU1NRKJdODAASaT+d1dOBzO8ePHMRhM7xPvTwc4MJnMxMREHx8fVVVVAICcnJynp2dkZOR3R0A8fPiQSCTOmTOnu7ubDyc2xFgs1po1azAYzKVLl+DOIsQ+r8UtLS1iYmInTpyAJY2A3b59G41GFxcXwx1kxOJwOOfOnaNQKKNGjXry5AnccfqFRqMdPHiQSCSampp++5Ojvr7ewcHhy+d+t27dunnzpqenJ4VCAQAYGBj4+vomJiYOaKGypKQkKSkpKyurykqeus8PtaamJhcXFyKRiFwR86iPdT1+/fVXFRWVEX9pzGQyTUxM3Nzc4A4yYrW3t3PXEvXx8RG6ocwlJSUODg5YLPbQoUN9bhATEyMtLf3l0lA4HI5AIIiIiDg6Op45c4aXSvr27Vt9fX1paelhOwYkMTFRTU1NRUUFuUfMuz5qMXeVgRG/OMqRI0dEREQG/awG8W25ubm6urqKioqJiYlwZxkkDoezd+9eNBrt5eVFo9F6X2cymbt27UKhUF/rCScpKcmvVVM7OztXrlyJQqE8PDz6vLkMl9bWVh8fHywWO2vWrMZGvq2S9yPre7077gKdsbGxAk4jMDk5OaKionv27IE7yMiUnp4uLS1tbW1dU1MDdxZePXr0SFJS0sHBgXtpX15ebmlp+d3xUK9evfpuy/139+5ddXV1CQkJf3//Tz8VYMFkMoODgxUUFGRlZS9dujQyVogfDvquxRwO56effpKSkioqKhJwIAFoamrS1ta2tbXt6emBO8sIlJKSQqFQpk+fLhTPnfrj9evXsrKyEydOvHLlipiYWJ+r830Kj8fzfdHerq6ubdu2EYlEJSWlkydPwvJvy2AwgoODdXR0cDjc2rVrm5oGPycX4ktfXQe6q6vL3NxcT09vBFzafKqtrc3a2lpDQ4OXKZAQX1NSUiItLT1r1qwRNllieno6d64i7h1hERERERERPB6Pw+H6HOlrZGQ0FDGoVKqvry+JRKJQKN7e3tnZ2UNxlC9VV1cfOnRITU0Nh8N5enoWFhYK5rg/FBTUuwDAF6qrqx0cHDgcTmxsLLdTjrBraWmZPn16VVVVbGysnp4e3HFGms7OTmtrawwG8/z5c/4Nox8WiouLIyIidu7c6eDgMHXq1J6enra2Nu6ERO3t7XQ6vaWlpauri06nt7a2MhgMJpOZl5c3RPMQUanUS5cuBQYGlpeXjx8/3t3dfe7cuVpaWnw/UE1NzZ07dyIiIhISEmRlZVesWOHt7a2urs73AyEA+GIu+c/U1dWNGTNGTU1tOHcL7aeioiIjIyPu7F9wZxmZVq9eLSsrW1FRAXeQoRIUFIRCoYbJVJBsNvvx48fLli2TlpYGABgYGKxduzYsLOzdu3ff3/nr6urqIiIiNmzYYG5ujkajyWTyokWLIiIiGAwGv5Ij+vSt62KupqamRYsWJSUlnTt3btmyZYL4fBgCDx488PT01NbWjoiIUFNTgzvOCJSammptbX3t2jXuLJcjlaura35+flZW1jcWtxcwFosVHx8fExPz7Nmz9PR0FoslKSlpZGRkYGCgra2toKCgoqKioKCAx+PJZDL3ZjeHw2lra2OxWPX19VVVVXV1dWVlZW/fvs3JyeFOnGtsbGxnZzd16tSpU6cOnzMd4fpTsFkslp+fHxqNdnFxqaqqGuKPBz7r6ury9fVFo9Genp5dXV1wxxmxLCwsnJyc+NxoU8QSZcmxB15/8cb7VbvM5SafEmxHr4qKClFR0b///lugR+23zs7O+Pj406dPr1mzxs7OTlVVFY/Hf7sCYLFYZWVlKyurn3/+2d/fPyYmBvZJQn5M/arFXNHR0RoaGlJSUkFBQWw2+/s7DAN3795VVVWVlZUNCwuDO8tIFh8fDwBITU3lc7tNEYuVJMYe/FiLq07tC26BIKjo0CRZCSwAwEbAtRiCoI0bN6qpqfVnhPQwUVdXl5WVlZ6eHhcXFxMTExMTExsbm56enpmZWVNTIyx/yyPeAGoxBEEdHR3cDt7GxsYPHjwYokx8kZiYyJ2HZcmSJUiXiaE2f/58a2vrIT9MZ8L/tKYGfpgM6sXvGrDU4tLSUgwGEx4eLugDI0a0gU2hzZ2qIjs7W0dHZ9asWdbW1rdv3/44zfAwAEFQVFSUk5PTxIkTS0tLL126dO3atUGsCoHoPyaT+fjxYy8vryE+TmPk/zzPln58vCErKzvER+ybpqamnZ1dZGQkLEdHjFSDWc5AX18/PDw88+b/WwAAIABJREFUJSVFXl5+4cKFOjo6f//9d01NDd/DDUhTU9OZM2cMDQ2dnZ3ZbHZERIShoaG3t/fOnTsZDAa82Ua2tLS0zs7OqVOn8tAGPf/mH7NMlMVECNK6034LL2EBAGjvkq7uXWavYbI1HYDm+95WC65UAhC7ShKFQk2/3PlhIS7WuwfbXfSkiaLKE9bdeff1BjnthU/O+y6wVHAKqMw46qJNkbbcm8YcXNwpU6Y8ffqUh/NFIL7A43V1SUnJ+vXrJSQkMBiMg4NDUFAQlUrlxwV7f7W2toaFhc2aNQuHw3Fnfe3tAM/hcAICAsTExMaMGcPfMamITx0/flxeXp6XFsqDZmpO3B5d1NbVkHHKVQmF1tuRwey4slBaQgQAoO37krtZ0UELABx671GUHRkPgNZ0n32hmdSOhhe7rYhAxvtfztcazNlvI03GAAAsFh8LfZV2yllV/ZeYQQ5I+ffffwEAdXV1vJw1AvEpXmsxF51ODw8PnzNnDnepgnHjxu3atSsxMXGIRmoyGIzU1NSDBw/a2dlhsVgMBjN9+vQrV650dHR8uXFpaam9vT0Oh/P19UX6SA6FrVu3mpmZDX5/ZuwqOcN9eR9+rDg6FgDSotsMCIKqjk/4Ti02P1z6/seSv8YCYHu67lsNpv2hDYDqhiReH7vl5+cDALKysnhsB4Ho9Z2R9f0kIiLi7u7u7u7e0dERGxv7+PHjy5cv7927F4fDGRsbjx8/3sTERFdXV09PT0FBYRDtNzU1FRQU5Ofn5+TkpKamZmZm0ul0eXl5JyentWvXTps2jdvdvU+amppxcXGBgYEbN26Mi4sLCQlBRtzxV1NT0zf+/b8v++lTam6ZPmrnpy/m5paBubqysrIANHxr596RyYBEIgHQRad/q0EZGWkAiKNH8/prz71VzZcl8hAILv7U4l5kMtnNzc3NzQ0AUFpampqampqampaWdvXq1Y6ODgAAhUJRVVWVl5fnzvMkLi5OIpHQaDR31u2Ojg4Wi0Wn09vb2xsaGqhUam1tbXV1NXc9RxKJpK+vP27cuNWrV48bN2706NH9XL4XhUJ5e3vb2touXbrUzMxs9+7dmzdvhnfp35GESCTSaLTB79/Q0AAmHK9KWa/8xVsD/o8EQdC3Gizn0yrx3d3dAABRUVG+tIZAAL7X4k9paWlpaWn1jsKqqakpLCwsLCysrq6ur6/nDvXp6Ojo6upis9nt7e0AADExMRwORyQSyWSyrKysiorK2LFjFRUVdXV1dXV1VVVV+5yHpZ8MDAxSUlKOHj26a9eu+/fvX758WXhXPh9WZGVlebpCpFAo4HX4zaJ1G0fx5+OR7w1+ob6+HnxYNx2B4IshrMWfUVJSUlJSmjRpksCO+CUsFuvr6ztjxgwvLy8TE5MDBw74+PjwUt8RAABNTc3KykoajfbxfsGAmNrbU46GbnVewDy+28NOS7SzIiv6RCRu/98e0kwmEwAWi8XdEIVCvb/yBQAAwGQyAUD19qjkcDjvt/16gx+34U1BQQEej1dUVOS1IQSiF9w3rOHBYDD8/PwwGIyTkxOPc6kgqqurAQAxMTGDbYCd528n9ukvJVZ3Y0I7BDEbH6xUAgBnfSCvmw1BUGPANABU18bU5wf+dTnn7QlnMgDS869W0tgQxKi7OlcKALFZFyt7OH03yO4sPOlEBkBrG899alasWGFnZ8drKwjEJ37QWsyVkpIyevRoCoUSEBAAdxbhpq+vz9uiXO0ZF1bba0sRiFKaYxcceFrFgiDozpKPi2eY7CuCIKjp6WZrRXFZs5WhL07Yf6y0FgdjDlp8/HFmcEdfDb47Mv79BmKy8nqbkgadlclkKisrI4vCIPjrh67FEAR1d3dzZw6aOXPmCJs1X5D++usvcXFxfi3yNsxdv34dg8GUlJTAHQQxovzofQmIROKhQ4cSEhLy8/NNTU0jIiL63IxOp3O/iSP6tGrVKjabHRQUBHeQIQdB0LFjx1xdXYdi7nbEj+xHr8Vctra2r169cnNzmzdv3oIFC5qbmz/bYOfOnXPnzuXDQ58RSlJSct26dXv27Kmrq4M7y9C6fPlyRkbGjh074A6CGHHgvjAfXh4/fqysrKygoBAZGdn7YmJiIgqFQqFQW7ZsgTHbMNfV1aWhobFgwQK4gwyh+vp6GRkZ3u6MIxB9Q2rx51paWry9vQEAnp6e7e3tnZ2dGhoa3NUQUChUdHQ03AGHr+joaDQafeLECbiDDAkGg2FnZ6elpdXe3g53FsQIhNTivt24cUNaWlpLS8vV1RWHw3G/Q6DRaElJyerqarjTDV8HDx7EYrEj8hNr1apVZDI5JycH7iCIken76939sKhUqru7+/Pnzz99EYfDjRs3LiEhAYPBfG3HAenp6aFSqUwmkzv+GwDAHRGOwWDk5OQGOXoCPhAEeXl5hYeH37t3b9q0aXDH4Q8Ignx8fM6fPx8RETFr1iy44yBGJqQWf1VbW5u+vj6VSv1ssnwMBuPn57dz586v7fg1LBYrOzs7Nzc3Nzf37du35eXldXV1DQ3fmvpGUlJSSUlJRUXFwMDA0NDQyMjI2Nh42K4FWVlZGRYWFhQUVFtby2Qyb9y4MXv2bLhD8YrFYq1du/bKlSuhoaFz586FOw5ixEJq8Vd5eXmFhYX12XcChUI9ffp0ypQp320EgqCXL18+efLk2bNnycnJXV1dIiIi+vr6+vr62tra8vLy3JmScDjcZ2v0stns+vr6mpqa2tra8vLy3NzcvLw87u7jxo2bNGnSlClTJk6cyK/Lc160tLTcv3//6tWrsbGxkpKS8+bNW7JkSWhoaGBgoJ+f344dO4R3Gqb6+vqFCxe+fPnyxo0bLi4ucMdBjGhw3iAZxu7evfuNfzQMBiMvL/+NZfQ4HE58fPwvv/yirKwMAFBRUfHw8Lhw4UJubu6g16xks9nFxcUhISErV64cNWoUAEBGRmbFihUPHz5ksViDPdHP9b8pOp0eGRk5f/58PB5PIBDmz58fGRn56QzRZ8+exePxM2fOrK0V+Jp0/BAbG6usrKyjo4PMU4wQAKQW96Grq0tVVRUA8I31zHE43PTp0zkczmf7NjU1HTt2bPTo0QAAExOT3bt3D9FfclFR0eHDh62srNBotKqq6p49e3h/qBgQELBp06Zvb8NmsxMTE318fGRkZNBotI2NTUBAwNe6FiQnJ2tqakpKSgYFBX35bzVstba2rlq1CoVCubu7t7S0fH8HBIJnSC3uW1dXV0xMjK+vr7GxMbdzcW9vil5oNPro0aO9uzQ0NPj5+VEoFDKZ7O3tnZmZKZioxcXFvr6+srKyOBzO09OzuLh4EI3Q6fTly5cDACQlJb925Z6bm+vn58cdb2ZgYODn51dWVvbdljs7Ozdu3IjBYOzs7FJSUgaRTZCYTGZAQICSkpK8vPzNmzfhjoP4gSC1+Pvq6+tDQ0NXrFihpKTEvSLm3tgFAGCx2NTU1O7u7h07doiKisrJyR0+fBiW/qd0Oj0gIEBDQwOPx//yyy/Nzc3937empmbs2LG9J/XgwYNP362urj5+/LiNjQ0AQFlZ2cfHZxCLB6alpdnZ2aFQqDlz5gzPr/xMJjM0NFRXVxePx69bt66xsRHuRIgfC1KLB6agoODMmTNubm5kMplbuWRkZNTV1cXFxQ8fPtzV1QVvPAaDceHCBXl5eTk5ueDg4P7cFnj16pWiomLvVT8Wi124cCEEQd3d3Tdv3nRxccFisRQKxdPTMzLy/+3dd1xT5/4H8CcJgbDCJggIuADZKkX2EFAZF0UFFbVVxFGwVevGa2t/XotWW6vVWhQBRUXBioIoSwwQKdAKWFmiTFlBRkBGICT5/RH1em0VSZCThO/7ryZn5JPXSz89PjnneRIFHJhOTk42NzdHCLm6uiYlJbHZbEHONlo6OzuPHDmiq6uLx+NXrlxZXV09/DEAjDboYj4NDQ1lZWXZ2Njwrhbr6+uxTvRfnZ2dX375JYFAcHd3f//vZpcvX5aSknp9RcwjKSnp5+cnIyMjKSnp4+MTFxfX398/Wtk4HE5qaqqHhwcOh9PT09u7d29paelonXxEBgcHb926FRAQICMjIy8vv3nzZph6DWAIuphPf/31l4GBgaqq6s2bN3t7e4VwhWkajaarq6upqZmdnf33rUNDQ7t27UIvF8t4exzcxMTk1KlTH/Xf6eXl5bt27eL9Rmpubh4aGpqTk8P3TSYfrrOzMy4ubs2aNWpqajgczs7O7pdffhkns30CYQZdzI/MzEwFBQVHR8eGhgass7xPR0fHwoULpaSkrly58ub7XV1dHh4e77o3mUAgODs7j01CNpt979694ODgSZMmIYQUFRV9fHwOHjyYkZExiv1YW1t79erVr776ytbWVkJCgkAg2NnZfffddzAcAYQHPOsxYtevXw8ICPD19Y2OjpaSksI6zjA4HM62bdtOnDhx4sSJkJAQhFBlZaWnp2d9fT2LxXrXUTgcrr6+XltbewyTosePH6ekpOTk5BQUFDx79gyPx+vo6Ojr6xsYGOjr62tra6upqVEolAkTJrxrAebW1tbXy4fX19c/fvy4oqKisrKyo6NDQkLC2NjY2tp6zpw57u7uSkpKY/nVABgWdPHIZGRkeHt7BwUFnThxQoQeJwsLC9u7d+/58+dVVFT8/f0HBwffU8QIISKRePDgwR07doxZwrc0NTX98ccf5eXllZWVFRUVVVVVby01zZu1g/ffQ0NDL168eHMrkUjU1tbmLR9uaGhoamo6c+bMdzU4AMIAungEiouLHR0dfXx8Lly4IEJFzLN79+6jR4/y7qyQlJR8/+rXLBZr+vTpJSUlYxZvWCwWq7W1lU6n0+n0np4e3pPivE0SEhLy8vI4HE5VVfX06dM1NTUFBQXYpgVgpCSG3wUghBDq7e1dtmyZpaVlVFSUyBUxQsjZ2fm3335rbGwMDAyUk/ufVZKJROJb7yCEJCQkmEym8MxDRCQStbS0eM+Uv0dLS8uqVatevHjx+qZDAEQCXBd/qKCgoJs3bxYXFw9bB0LrxYsXs2bN0tXVTUtLe/91sehqbW3V0NC4c+fOvHnzsM4CwAiI3vUdJvLz8yMjI0+fPi26RYwQkpeXv3jxYmZm5rVr17DO8rGoq6sbGhreu3cP6yAAjAxcF38QBwcHPB6flZUlwDm4PdXUK+fOnI165p9L26Y3WtFG7NNPP6XRaOXl5cJ/Ewh/goODCwsL8/LysA4CwAjAdfHwaDQajUb7/vvvBTsNPfqLpTuPXiloZmL7f7///Oc/DQ0N8fHxmKb4iFxcXB48eNDd3Y11EABGALp4eJGRkbNmzZo9e7Zgp9HYlNyavcd4dDIJQEdHx8vLKzIyEusgH4uzszObzabRaFgHAWAEoIuHMTg4GB8fv3r16lE5m7q6+qicR0Br166lUqkNDQ1YB/ko1NTUjI2NYcgYiBbo4mE8ePCgp6fHw8OD7zO05R5fYz9VWUZafcbq2GoOQgihvC3auFecf21DCKGeaG/e6/kRjMEnVz93nKysqOO268ZfUcciWlj0wutHN3kb6QQlN97Z622sKqugbbHou6zn/A13uLq6EolEMb5ydHZ2plKpWKcAYCSwfABbFBw9elRdXZ3vw/vy/m1KUp/3/b1nnc/L4kJMpXEIzTpSw+lrzP7OVRUh/V1/MF/Oa8npvuirH3DpSQ/7ySHLaavjn3T3d1dTw1xV7H9uvrN+gjwRISRl5rsv/P6zzvay+HVGkkjK8kg5n4tlWFlZbdq0ie/vJeR+++03AoEAS3IAEQJdPIzg4GABJsqpOGBOkJ0f0fLyJTt9gzpCs47UcLlcLrfuhK0E0tuc83Jqso7zXjYHn3C53L4YL2S46w8m7+36E6Gnm7lcbtc5DwKSDkh8NYFwf2awFkKUz+/yl2z16tUeHh78HSv82tvb8Xh8YmIi1kEA+FAwRjGMtrY2VVVVPg9+ePH8Q7b53LmUl6/xFham/92qE7jdX7k24tCVdoQQaog5P7hqzVSEkPSkSRMqDruYLdwTdb9xYOIXBzdqIITI2tpkhCcSX82tRnJZMJeM6H/+yV80VVXV9vZ2Pr+X0FNWVjYxMYFhCiBCoIuH0dPT8/fngz8Qq7z8KUJqamrv2C67YPvGab3Jh078xUWVkbHkwIAJCCGE7P4v7uBcxdqbhwLtJ01x23unmYMQQn978HriRG2EBgf5yyYvLy/ed325uLjAz3dAhEAXD0NBQYHBYPB3LEFSkoBQfX39u3bAz/jiK1ep0pOHbmZGJBoG+b6cdwwp2YemPqlMPbbeRoV+97sFi3+qermB++aTOR0dHUhCV5e/bAwGQ7znjXRxcXn48KEYX/sDMQNdPAwVFRW+/z7jZ9ta49HDyzGPOG++3fb8v7c/aHy2faVaR9y6pSmO6+a/fAyOeXnff8q4JN25W8JzH2dvns4q+P1P9stNHR39L4/klt/LopPcF/A560JbW5uKigp/x4oEJycnHA6Xk5ODdRAAPgh08TAMDAwePXrE4XCG3/XvtFZ/u3EKKj2y5NPw358xOqtTzySUIVT341yK8+Fy3i7S87cFm3La1H2DbF+vssEpOrBodXhObRezt6t7kCvj6DL75TZuxvdbrpZ19HXVpO1bd/TpJ/u+X8XnDcvFxcXTp0/n71iRoKioaGZmBkPGQFRAFw/Dzs6OwWCUlZXxdbSc64nMG6FzJdK2OBuZzN9fbuFirmbhu+Xg+TMbDV7tMz1wta3dukCj/x5F8Prx8uLWEwv01TRt9rStSLz8ud7LLTILAsx/85umrG6xPnPyN5l3Qk2I/MTq7u4uKyuztbXl60uJDBgyBqIE6xs5hN3Q0JCysnJYWNhH+4TmXzwWRH/AIp/pG1SQ7Gd3RuMjY2NjJSQkWltbR+NkwisxMRGHwz1//hzrIAAMD66Lh0EgEFasWBEVFcX9GBPacXsqIjedUg30+4CRWzabjdhs9mh87Llz5zw9Pd99g4eYcHR0FHh2PQDGCHTx8NauXVtZWZmamjqK5xy4u22qHB6Hl5++5XnwNz4yw+3P7irMetCFmH9m5rSzBPufQmlpaWZm5tq1awU6iyhQUFCYMWMGDBkDkQBdPDxzc3MfH59du3aN0lUpQgjh5BSVSDJqZkuOpiQETxlub0bEPMVZYUVchCp+dFT91zk+77Hj2blzp6mpqbe3tyAnERUwZAxEBcwl/0EqKipMTU1//vnnjRs3Yp1FICkpKR4eHunp6W5ublhnGQu3b9/29vZubm6mUCjD7w0AduC6+IMYGhru2LFj+/bt5eXlWGfhH51OX7NmzfLly8dJESOEHBwcJCQkYMgYCD+4Lv5QLBbLwcGhv7+fRqOJ4hrDLBbL09Ozurq6qKiITCZjHWfsWFtbz5w585dffsE6CADvA9fFH4pIJF65cuX58+e+vr4DAwNYxxkZDoezZs2a/Pz8+Pj4cVXECIaMgYiALh4BPT29O3fu/Pnnn8uWLWMymVjH+VBsNjs4ODg+Pv769eszZ87EOs5Yc3Z2rqioaGpqwjoIAO8DXTwy5ubmycnJWVlZc+fO7ezsxDrO8JhMpr+///nz569evTp+honf5ODgICkpCUPGQMhBF4+YnZ1dTk5ObW2tjY3Nw4cPsY7zPjU1NU5OTlQqNS0tbeHChVjHwYaMjIylpSXcZQyEHHQxP4yNjfPy8jQ0NKytrU+ePCmcv3/GxcXNmDGDyWTm5uY6ODhgHQdLMGQMhB90MZ80NTXv3r27Z8+erVu3Ojg4CNUFcnV1tY+Pz9KlS1euXJmfn29gYDD8MWLN2dn5yZMnjY2NWAcB4J2gi/lHIBC+/vrrgoICDodjaWkZHByM+Sr37e3toaGhJiYmVVVVmZmZJ0+eJJFI2EYSBra2tlJSUjBMAYQZdLGgZsyYcf/+/fDw8Fu3bk2dOjUkJKSmpmbsY7S0tOzdu3fSpElnz549cOBAcXGxi4vL2McQTjIyMlZWVjBMAYQZdPEowOFwgYGBT58+PXbsGK+RPTw8EhISWCzWx/5oDoeTkZHh5+eno6Nz5syZ0NDQmpqabdu2EYl8TWwsvmDIGAg5eO5ulA0NDSUlJYWHh6enpysqKv7rX/9atGiRu7u7tLT0KH4Ki8XKyspKSEhISEhobm62t7dfv369n58fjEi8y7179+bMmVNbW6vL7wqBAHxU0MUfS21t7bVr1xISEvLy8ohE4ieffOLo6GhnZ2diYqKjo8PHCel0+qNHj3Jzc7Ozs/Py8np7ey0sLBYtWuTn52doaDjq+cUMk8lUUlIKDw//9NNPsc4CwD+ALv7ompub7969m52dnZOTU1FRgRBSUFAwNjaePHmyhoaGlpYWhUKRkpIik8l4PJ5AILBYrJ6enoGBATqd3tzc3NTUVF9f/+jRI94SqHp6eo6Ojo6OjnPmzJk0aRLWX06UuLi46OnpRUVFYR0EgH8AXTymOjs7S0pKSktLS0tL6+rqeFVLp9P/PjMyDoejUCi8stbW1jYyMjIxMTExMVFX53OxUfDtt99GRkbW1dVhHQSAfwBdLBQ4HE5XV9fQ0BCHw5GUlJSTk4Mf30Zddna2k5NTTU2Nnp4e1lkAeBvcRyEU8Hi8kpKSmpoahUJRUlKCIv4YrK2tZWRk4G4KIJygi8F4ISkpaWNjA10MhBN0MRhHnJ2doYuBcIIuBuOIi4tLQ0NDVVUV1kEAeBt0MRhHrKysZGVl37o0hp+vgTCALgbjCJFItLOzo1KpfX196enpe/funT179p49e7DOBQCSwDoAAGOkv78/Ly+PzWYnJycrKCgMDQ2RSKSBgYHFixdjHQ0A6GIg7rq6un766aeMjIyCgoLBwUEpKanBwUHeuASTySQQCBQKBeuMAEAXA3FHJpNpNBqNRuO9fGsNbzabDY8yAmEA48VAzOFwuOjoaDk5uXftoKGhMZZ5APhH0MVA/GlpaR05cgSP/+c/7TBGAYQBzEcBxgUul+vm5paTk/PWBP84HG5gYAAeOgeYgy4G40Vtba2xsXFfX9+bb5LJ5K6uLqwiAfAajFGA8UJPT+/w4cNvjVSoqalhlQeAN0EXg3EkODjYxsbmzREJ+OEOCAnoYjCO4PH4mJgYAoHAe4nD4bS0tLCNBAAPdDEYXyZNmhQWFobD4RBCRCIRrouBkIAuBuPOl19+aWVlxRupgAc9gJCALgbjDh6Pv3DhAg6HGxwchJuLgZCAZ6DBuMNisYaGhgICAqKjo1NTU3Nycnp6erq7u3mrDkpLS5NIJBKJJC8vT6FQtLS0NDQ0pk2bZmRkJC8vj3V2ILbg/mIwLlRVVWVnZ1Op1KKiosePHw8ODiKEiESinp6evr4+mUyWl5fH4/EKCgp9fX0DAwNMJrO7u5tOpzc0NNDpdN7+enp6pqamDg4Ojo6Os2bNkpCASxkwaqCLgdhis9lZWVkJCQmJiYn19fXS0tLW1tazZ882MTExNjaePn16dXU1mUwe9lYKLpdbU1NTWlpaWlr64MGDnJwcOp0uJyc3b948X19fb29vBQWFsflGQIxBFwMxVFlZGR4efuHChba2NlNTU19fX3d3dysrK0lJyVE5f0VFBZVKvXHjBm+JEG9v7w0bNri5ub1rygsAhgVdDMRKZmZmWFjY3bt3dXR0goKCli1bNnXq1I/3cQwGIykpKSIiIjs7e8qUKVu3bg0KCpKSkvp4nwjEFXQxEBOZmZnffPMNjUZzd3ffvHmzh4fHWF6llpWVnTp1KjIyUkVFZffu3Rs2bID5hsCIwD+pgMhrbGz09/d3dXWVlZXNzc1NS0vz8vIa4+ECIyOjU6dOVVVVLV68eMeOHRYWFm+tcArA+0EXA9EWHh4+ffr0wsLC27dvp6Sk2NjYYBhGU1Pz+PHjZWVlkydPdnV1Xb169YsXLzDMA0QIjFEAUdXZ2blu3bobN27s3Lnz66+/JpFIWCf6Hzdv3ly/fj2ZTI6NjbW0tMQ6DhB20MVAJD19+nT+/PlMJjMmJsbFxQXrOP+spaVl1apVOTk5UVFRy5cvxzoOEGowRgFET0FBga2trYqKSmFhodAWMUJIQ0MjNTV106ZNK1as+PHHH7GOA4QaPDgERExRUZG7u7u9vX1cXJysrCzWcYaBx+OPHj2qpaW1fft2Doezfft2rBMBIQVdDERJVVWVp6enpaXl9evXReg23q1bt0pJSW3atElZWTkwMBDrOEAYwXgxEBn9/f2WlpaysrKZmZlycnJYxxmx0NDQH3744f79+/BTHvg76GIgMoKDg2NjY4uLi3V1dbHOwg8ul+vt7f348ePCwkIymYx1HCBc4Lc7IBqoVOrp06fPnj0rokWMEMLhcOfOnevu7t63bx/WWYDQgetiIAK4XO4nn3xCoVCSk5OxziKos2fPhoSElJaWTps2DessQIhAFwMREB8fv3z58uLiYhMTE6yzCIrNZpuZmVlYWFy6dAnrLECIQBcDEeDu7i4rK3vjxg2sg4yOqKiojRs3NjQ0qKmpYZ0FCAsYLwbCrq6uLjMzU5xuBfP39yeRSJcvX8Y6CBAi0MVA2KWlpcnIyHh4eGAdZNTIysp6eXmlpKRgHQQIEehiIOzu379vbW3N33TAJ51xr6huoqKS/Sa8F97R3d2Vab/u8rfUmBde/+AH7ykKKpb/V8Bi16d842elpyZLklWdarf616JehPK2aL8+ifOvbQgh1BPtzXs9P4LB35eys7PLzc1ls9n8HQ7EEBcA4WZmZrZ7927+jh1sr0jcOVsWIcl54a0cLrc7brG62RdxJR2D5QftVOQJCKFZAT9eLiz42WOibkj6o0OWRFm3ww+auxmVscu0Ed76aD2X09eY/Z2rKkL6u/5gcnjn5XRf9NUPuPSkh83nlyooKEAIPXnyhM/jgdiBLgbCTkND4/jx4wKcgH59xUSE09t0r4m6zXNDEv0k2pocAAAGoElEQVT1hoKdUxCauIXGevXGwwMzKa6nqnkvkj6TRWqfZ/Fe1J2wlUB6m3Ne7tpx3svmoCA9+uzZM4TQ/fv3BTgHECswRgGEXWdnp7KysgAnUPc9c22XadMp35nfqx/52Vv99QZVVRWEJhsYvJ6VxezfD1oygrVb8i9+s9J249VexGKxeFt0Arf7K9dGHLrSjhBCDTHnB1etEWQdPRUVFYRQe3u7AOcAYgW6GAg7CQmJ15XIJxmr0H8vlGO0FND+oL9xDycOh3trx6HG1K89DGZuuE3wOHpwqQrivr7lU3bB9o3TepMPnfiLiyojY8mBARMEScT7RqO1LjUQA9DFQNipqKgIeP3IbbgSfNHk8jlflPS536G/3tnrPfe+dPCMVPiu4MHlr1fYav3vOiH4GV985SpVevLQzcyIRMMgXwVBEqG2tjaEkKqqqkBnAWIEuhgIO01Nzfr6ev6P78kLXZ/kferf3oGRMUEa+fsWb814efMDh8NBaGho6NWeORfP18h6Bi7TJrx6h/vmo1Aan21fqdYRt25piuO6+QLO11lXV4cQmjBBoItrIE6gi4Gwmz179u+//87fsaznuYcWLPjd/eBibRxCim77t7vgnp7yX3gws677xZPkzAqEmpubX+2tqamJXqRfulbX1fowPiz8fh/qa20q++0ytZe3XXr+tmBTTpu6b5At4V2f+IFyc3N1dHQ0NTUFPA8QH1j/eAjAMK5evSohIcFgMPg4NmYB74+53c/NXC6387TrP/wVkFOjGG6jcblcLvd56k6niWR5DRPP3def1MQsUpPVdNh6s+GNG9fqfrCzO1Yr+JeaO3fu0qVLBT8PEBswHwUQdt3d3RMmTPjhhx82btyIdZaW054bZWJufKYi0FkaGxt1dXVjY2P9/PxGKRgQeTBGAYQdmUxesmRJREQExjm4PRWRm06pBvoJVsQIoaioKCUlJR8fn9GIBcQEdDEQASEhIYWFhYmJiZh8+sDdbVPl8Di8/PQtz4O/8ZER7GwMBuOnn35av369CK3XB8YAdDEQAVZWVn5+frt3737jpoexg5NTVCLJqJktOZqSEDxF0LOFhYXhcLidO3eORjQgPmC8GIiGqqoqMzOzr7766sCBA1hn4V9+fr6Dg8OxY8dCQkKwzgKEC3QxEBnh4eEhISF37951cnLCOgs/urq6Zs6cqa+vf/v27b8/8gfGOehiIEqWLFmSlZVFo9EMDAywzjIyAwMDXl5eZWVlRUVFFAoF6zhA6EAXA1HS19fn5ubW1NREo9G0tbWxjvOh2Gx2QEBAamoqlUq1sLDAOg4QRvDbHRAlMjIyt27dkpeXt7e3Ly8vxzrOB+nv71+8eHFSUtKNGzegiMG7QBcDEaOsrJyVlTVx4kR7e3sqlYp1nGHQ6XRXV1cajZaRkeHs7Ix1HCC8oIuB6FFWVk5LS3N1dXVzc9u/f7/QrlSUnp5ubm7e2tpKo9FsbW2xjgOEGnQxEEnS0tJxcXHHjx8/fPiwk5NTaWkp1on+R3d395YtW+bPn+/i4lJYWGhoaIh1IiDsoIuBCAsJCcnPzx8cHJwxY8aOHTtevHiBdSLE5XIvXbpkaGh46dKlyMjI2NhYMpmMdSggAqCLgWgzMzPLz8+PiIiIjo7W09Pbv38/g8Hn2swC4nK5SUlJlpaWq1atcnNzKysr++yzzzBJAkQR3NMGxARvnofjx4/jcLg1a9asX79+zO5BZjAYMTExv/76a0VFhZ+f3759+4yNjcfmo4HYgC4GYoXBYJw+ffrMmTN1dXWOjo7Lly9fuHDhR3q2gslkpqenX7t27dq1azgcbvny5Vu2bIEWBvyBLgZiiMPhpKamRkZG3r59m8lk2tnZubu7Ozk5WVlZkUik4Y9/Ny6XW1ZWlp2dTaVS79y509vba21tvXLlyhUrVsC4MBAEdDEQZ/39/SkpKTdv3rx37159fb2UlJSZmZmpqamxsbGRkdHEiRMnTJigrKz8nsMbGxubm5sfP35cWlpaUlJSVFTU3t5OJpPt7Oy8vLx8fX1hnSQwKqCLwXhRV1eXlZVVVFRUUlJSUlLS0tLCe59EIikrK5NIJGlpaRKJxOFwurq6OBxOR0dHd3c3bx9ZWVkjIyNTU1MzMzN7e3sLCwsCQdAl7wB4E3QxGKcYDEZjY2NTU1Nzc3NnZyeTyezr6xsYGMDj8QoKCgQCQVFRkUKhaGpqampqamhowMxq4KOCLgYAAOzB/cUAAIA96GIAAMAedDEAAGDv/wHEkyShoOFZtwAAAABJRU5ErkJggg==", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Imports\n", "from IPython.display import Image\n", "from pgmpy.utils import get_example_model\n", "\n", "# Load the model\n", "asia_model = get_example_model('asia')\n", "\n", "# Visualize the network\n", "viz = asia_model.to_graphviz()\n", "viz.draw('asia.png', prog='neato')\n", "Image('asia.png')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Nodes in the model: ['asia', 'tub', 'smoke', 'lung', 'bronc', 'either', 'xray', 'dysp'] \n", "\n", "Edges in the model: [('asia', 'tub'), ('tub', 'either'), ('smoke', 'lung'), ('smoke', 'bronc'), ('lung', 'either'), ('bronc', 'dysp'), ('either', 'xray'), ('either', 'dysp')] \n", "\n", "CPDs in the model: \n", "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]\n" ] } ], "source": [ "import pprint\n", "\n", "# Access attributes of the model\n", "nodes = asia_model.nodes()\n", "edges = asia_model.edges()\n", "cpds = asia_model.get_cpds()\n", "\n", "print(f\"Nodes in the model: {nodes} \\n\")\n", "print(f\"Edges in the model: {edges} \\n\")\n", "print(f\"CPDs in the model: \")\n", "pprint.pp(cpds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Defining the Model Manually\n", "Defining a network in pgmpy involves two steps:\n", "1. Define the network structure\n", "2. Define the parameterization, i.e. CPDs\n", "\n", "And lastly, CPDs can be associated with the network. Taking an example of the Cancer network from the bnlearn repository as shown below." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAD7CAYAAABqkiE2AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOydd1zU9R/HX3fcsZdM2aCo5AAULMVdKblXmg1HaZYNG5ZWrvpppqapmaW5d6WWq1QcpSgukK2gKEMEZMgeB3f3+v2hkrhSubvvAd/n43EP5Xvf7+fzuu94fT/z/ZGQJERERBosUqEFiIiICItoAiIiDRzRBEREGjgyoQVoA6VSiYKCAuTn56OoqAhlZWVQKBQAgKqqKpSUlFTva2ZmBkNDQwCAoaEhzMzMYGlpCWtrazRq1AgyWb08RQ0OpVKJvLw83LhxA2VlZSgoKMDt5rD8/Pzq/aytrSGRSCCRSGBtbQ1TU1PY2NjAxsYGcrlcKPlapc7d4enp6bh06RKuXr2K9PR0ZGRk4OrVq7h27Rqys7NRUFCA4uJijeVnbm4Oa2tr2Nvbw9XVFa6urnB2doabmxvc3Nzg7e0Nd3d3jeUn8mSkpKQgISEBqampSE1NRVpaGlJSUpCRkYG8vDwUFRXVOg8LCwvY2NjA1dUV7u7u8PDwgLu7Ozw9PeHj4wNPT09IJBIN/BrdItHX3oHMzEyEh4cjOjoaFy5cQGJiIi5evFj9gBsbG8PFxQXOzs5wd3eHs7MzHB0dq9/g1tbW1R8jIyOYmpoCAKRSKaysrKrzKSoqgkqlAgCUl5ejoqIChYWF1SWJgoICFBQUIDs7G9euXcPVq1eRkZGB9PR0lJeXA7hZmmjRogVatGgBHx8f+Pn5ISAgAK6urjo+a/UfpVKJmJgYnDp1CtHR0YiLi0NcXFz1Q25lZQUPDw94eHjA09MTzs7OsLe3r36b29rawszMDNbW1tVpNmrUqPr/d5YQCgsLUVJSghs3buDGjRvIy8tDXl4erl27hpSUlGqzuV2SsLCwQMuWLeHr64s2bdqgQ4cO8Pf31/sShF6YQEVFBU6ePInQ0FCEh4cjIiICGRkZkEgkaNKkCXx8fODj41P9kLVo0QIODg5Cy0ZOTg4SExOrPwkJCbhw4QKuXLkCtVqNxo0bIyAgAIGBgejcuTM6deoEExMToWXXKSorK3H8+HEcOXIEJ06cwNmzZ1FaWgpra2v4+/ujVatWaNOmDVq3bo2WLVvWeKB1RWFhIc6fP4+4uDjExsYiPj4eUVFRuHHjBkxNTREYGIigoCA8++yz6Nq1K4yMjHSu8WEIYgJqtRqnT5/G4cOHceTIEZw8eRIVFRXw8vLC008/jYCAgOrPnW/tukJRURHOnTuHiIgIRERE4OzZs0hKSoKRkRE6dOiAHj164LnnnkPHjh1hYGAgtFy9IzMzE3v27MG+fftw+PBhFBcXo0WLFggKCkJQUBA6duyIp556ClKp/rZrk0RiYiJOnjyJEydOICwsDBcuXICZmRmeffZZ9O7dG/3799eL0qLOTEChUCA0NBR79uzBtm3bkJmZicaNG6NLly54/vnn0atXL3h6eupCiiBcv34dx44dw6FDh3Dw4EEkJyfDxsYGffv2Rf/+/dG7d2+Ym5sLLVMwCgsLsWvXLmzbtg379++HXC5Hp06d8Pzzz2PgwIHw8fERWmKtuX79Og4cOIC9e/ciJCQExcXF6NixI4YNG4aXX35ZuNIttYharebRo0c5atQoWlhYUCKRsH379pwzZw7j4+O1mbXek5iYyHnz5rFjx46USqU0MzPjq6++ykOHDlGlUgktT2ecPHmSL7/8Mo2MjGhsbMwhQ4Zw+/btLC8vF1qaVqmoqODOnTs5fPhwmpiY0NDQkMOGDeOxY8d0rkUrJpCVlcU5c+awWbNmBMDAwEAuXbqU6enp2siuzpOZmcmffvqJHTp0IAB6enryq6++qrfnq6qqips2beLTTz9NAAwICODq1atZUFAgtDRBKCoq4vr166uvf9u2bblmzRpWVlbqJH+NmsDly5c5ceJEmpiY0NramuPHj+e5c+c0mUW9JyEhgVOmTKGjoyMNDQ05cuRIxsXFCS1LI6hUKm7ZsoXNmzenXC7nSy+9xBMnTggtS684c+YMX3vtNRoaGtLLy4vr1q2jUqnUap4aMYHz589z6NChlEqlbNasGZcvX17vi3PaRqFQcPXq1XzqqacokUjYv39/RkdHCy3riQkJCWGbNm1oYGDAUaNG8fLly0JL0mtSU1M5btw4ymQy+vj4cO/evVrLq1YmkJOTw3feeYcymYz+/v7cvn17g6rP6gKVSsWdO3cyMDCQBgYGHDduHDMzM4WW9chkZ2fztddeIwAOHjyY58+fF1pSneLixYscPnw4AXDYsGHMyMjQeB5PZAJqtZo//fQTra2t6eTkxNWrV4sPv5ZRq9XcuHEj3dzcaGFhwcWLF1OtVgst66Hs2LGDtra2dHNz4+7du4WWU6fZt28fvby8aG1tzc2bN2s07cc2gYyMDPbu3ZsGBgacMmUKi4uLNSpI5OGUlZVx5syZlMvlfPbZZ5mamiq0pHuoqqriJ598QolEwvHjx7OoqEhoSfWC0tJSvv/++wTA9957jwqFQiPpPpYJhISE0NbWlt7e3gwLC9OIAJEnIzw8nC1btqS1tbVevWWLiorYo0cPmpqacv369ULLqZf8+uuvtLCwYFBQEG/cuFHr9B7ZBNauXUu5XM5XX32VJSUltc5YpPaUlZVx3LhxNDAw4LJly4SWw4KCAnbs2JFOTk51uhGzLnD+/Hm6ubmxXbt2zM3NrVVaj2QC33zzDSUSCadOnar39dCGyJw5c6qvj1CUlJTw6aefpouLCxMSEgTT0ZC4cuUKPT096evrW6sxFv9pAmvWrKFEIuEPP/zwxJmIaJ9169ZRIpFw6dKlguT/6quv0s7OjpcuXRIk/4ZKamoqnZycOGjQoCd+QT/UBA4dOkS5XM5p06Y9UeI6oSyNx9Z/yZGd3eg/LfLB22pD3u981aUR28+Jqn1aWmTevHk0MDDQeRvBDz/8QAMDA4aEhOg0X+2jZlHSIa747CUGOnbl4qtC67k/oaGhlMvlnDt37hMd/0ATKC4uppubG1966SWNVwE2DgSBOz8Sykwsaefhy+dem85t5x+9Nbl0y6t0sDEmALaYGvnAbY9D+tJZXJt/x4a83/mKszXbf6PfJkCSb7zxBh0cHDTSYPQoZGVl0dzcnDNnztRC6lW89vd3HNPtKbpamdLS2Zf9PlrB46mJnPfVamq/XyqTS/vY0VoOAs9wkZ6aAHnzBWBsbPxEvUUPNIFPPvmENjY2zM7OrpW4+6NkScrP7GMKwvEN/lVQQUVJOs9ufJf+ZiAs2nNOxGN0f6R9x6fvfuDvt+1RKDnKd5o8z5X5/72rPlJYWEhnZ2e+/fbbOslvwoQJdHFxYWlpqcbTzv9zLF3lTfjSj6FMKSxnWV4SQ9dNZldHCRG8UgcmcJPIqS303gQqKyvp7e3NUaNGPfax9zWBzMxMyuVy/vTTT7UW92BO8gMXEC4f8OQdWxPnBBAAjfqs4SM/h2Ub2OfuB/5+2/6THO4a5U7guTprAiS5adMmSqVSrQ/Nzc7Oplwu56pVq7SS/oqeUqLXz7y7XFgROYNt+ujOBNK+C9J7EyDJrVu3UiqVPnZp4L5RGbZu3QpTU1OMHj1aB5OZa9K8wzOwAaA4fx6XAQBE9tFFeL1bc9ibGcO8cUv0nPATIgruOEgiwT2R3Wps24kRMsmtAJIvYjsAIA7TfG5vewHrSm5gz/iOGL4hDcBhvNno1vacqzi+8X8Y080Tfp+H35HBw3SpUZh4AD9OHoYAx15YnpmKXdP6o5WdKcyc2+PtbakaP293MmLECDg4OGDz5s1azWfnzp2Qy+UYMWKEVtKvqlID4TuwKaGixnYj//cwvosUAFF8+TBWfvEKnnHujIXJuTixaBSecbeCuV1rDPvhHMqRj9Pfv44O7hYwsfBA90//wvUaqf33/XV33MCoaT7VwUglEh98GQcAFUj4bTL6+7nA3MgYts174uMdl6GEGkUXQ7B8ynAENg7GirQILOzXFFa2gfjfmSqNnq+hQ4fC2toav//+++MdeD9nCAwM5JtvvqkRd3ow9y8JXPu+KwFQ0mUJM0kWhrxLL4t2nLTnEguKsxn96/v0MwNNA2cxqurWQeUb2ffut/5d26ryj/PDp0BgKLfd2kWRF8GZz8gIBHPtrdfKpW8CapQEije8RFtrIwJg0ylnq5N/uK5EzulsQwsDEPBm74mzuPncdZYUxHBOF2PCegz3V1GrfPzxx2zRooVW8+jTpw+HDBmitfQztwyhLUCYNOWA6b8w5sbdQ9OvcUmwLa3kIODFgZ99y42nMlicH8ulfewIqT9f+fwzLtp3iYWlOTw5swPlsOe7f//bxvUo99fVRZ3uKAkomXFoCl8c9R3/ikjmjXIl1SRT1vSlV5epPHCpkKU5EVw60JkSqQ+nRcTy6062t+6FAL7y3RaeO7OUvd08+O7BCo2fs1GjRrFr166Pdcw9JqBWq2lsbMxNmzZpTNj9uWUCjmO4K7uEirJcxu36gp0agZA4cfSuPFIdySnNQJf3/uG/l1/N6JltKIExn/0x7eamRzABkjz6vlMNEyBv1/cebAIkyfTF7HCnCTyirpOTPAk8XaMYmbqwI4EOXKzlUAEHDhwgAObk5GgtDw8PD86fP19r6ZOljF41mq0tbzYgSyyas//ktQzPqTm1NnZmKwJt+HXiv9vUe0bTGGYcs/eOfRO/ZhuAzy+/NbjmEa/jvyZQyYvrRrL3e3uYeWdbedVhvunQirMu3LEtdSHbAzQdsZ2VJM9MbkrAjR8e1677//jjj7Szs3usY+6pDmRlZaGiokJ3YbRLTmPRiA7wauyK9q9vREGbkZh/8AxWDrABIn7BL5eA1n5+d6ySIoHv+HHogAr8/edhlD1GVrfXF7gTY2Pj/z7Q3h72d/79iLocHOwBmODOLG5GPa5ClWZLgvfg7e0NAEhN1U7VgySysrLg4uKilfRvYgrfsesQmXQGaz7tB29ewp75r6O9dwDe2ZYM5a29boblMsSdl1dibg4zoGYMR0NDGOLm2hMAHvP+qsSFlS+i+wJPLFjaD43vrCHEHMKh7HhMf0rybzXBYxLOAiiLj0cyADs7WwBN0KKFdqP8u7i4IDc3tzoS9qNwjwncDp+ss6it1r3wzeFYXCssR1leGuKObsCnz7lCDoCpqbgKoKzsrkfd2RvepgAzMpClC41SaY0T9ai6hAyEedvcHudmeBwqKiqgUChgaWmplfTvRGbfHq/P34OEqzH4bUZfuJdF46dXBmJu7M3wmE96nh/v/iJK09KQG7cEH69MRY3AnDk5yEEHLE4nyLs+MTPQHPe2K2iL24F5H2edhXvO3u3op+np6RqS9eRIXFzgBODihQtQ1/hGDrkMMGrSBM6irvuibTM3MTGBpaUlsrK0Z8Obv56HlDv+llq3xrCv9iJsRV+YK2Px6+/na5X+411HIwR++SvmdlHjwEcj8cOlO46wsoIVorDjt0t3paN7MjMzIZPJYGdn98jH3GMClpaWaNSoEa5cuaJRcU9E24EY6AZc/2UldpfcsT09HvFF5hj4Uh8YA0BVFapwc2GKau6z7eYiECX4dxUyory8AkAOcnJubrnp2ESNGMx3p/WIuioqKgCocGttEwA3w60DStwpVRtER0dDJpOhadOmWsvD1dUVaWlpWkuf4auwNOzeCp9zW384QgIbm5sLiNws3tc8z1Crob7vtse/jpWVlTfTR3N8tPUn9DMOxeRXv0ZM5a39/buhm1UFQj/vjeHz9yIuowhlhRm4cGwt3v5kE/Kgu+uelpYGJyenxwtlf7+GgsGDB7Nnz561baN4CEoWJ69gb1MQpr25IqWED4qilvHrcDoCdBmwmGHXSliccZJL+jnTJngFk9U308rdNYaNARoGzWFcifIB28jclcE0gAWDF8eyoCSDJ1bN4Js9XAmAxjb2HLIql7krehJw44SD15mwch43p1cxd+9YOgOUB83hhTLVI+lSV6RyWbApATuO2HqNCjXJykxuGmZLwJx9V6SwQotzsbR/Dclx48axffv2Wkt/40AQjQI4/vs/GZ1eyIqKIqZHbOOHHSxp4PUmD+STakU61w22IWDB/itTWK4iWVXAE5PbUAKwzacnmF9FUl3Oyyv60QJgo4FrmHbr5P/XdVSVXuaPfSwJWHHwujSWq8jcfW/SSyql15idzFSSpIoXFnWlOe4aCStrzo+OFlFVcpHfB1sQaMIvtBxys3v37nz55Zcf65j7msDvv/9OAwMDrUW7vXfYMIi+a3n/qIQVvLj9cw7wc6a5kTGt3QM49IvtvHS7d2XfWJrdmY7LBzx5v20kWRbFJUOeoo2xMe1bDeLXf2fx/Oxn6NLhZU5bfYTJJWoy7xA/DXKipX1bjt2SRNUfr9LgzrT8ZvHSf+rK4dJuNX/fM9+G8ttnam7rtlQ7YcLy8vJoZGSk9fn8+/bto0QiYUpKilbS3zR3Hi9mnOO2uePYo4UDzYxMaeflxxfeXc7T2UqS5Vzbt+Y5bTUzln+8alRjm8FL2271INzvfnvYdYzl1BY10/ebdeFWj9K/26zG7iNZxIif32K3pjY0NrGhV/vhnHMonUperXHdze0d6TPpuFbOV3Z2Ng0MDLht27b/3vkO7msCFRUVdHFx4dixYzUiTkS3fPjhh7Szs9N61CeFQkFnZ2e+//77Ws1H5NH47LPPaGtr+9jxPh44d+C3336jRCIRQ0LXMWJiYiiTybhmzRqd5Pfzzz9TLpeLU4gFJj09naamply0aNFjH/vQZch69+6NS5cu4eTJk7C3t3/QbiJ6QkFBATp16gRbW1scPXpUJ91SSqUSfn5+aNy4MUJCQsS1FQVArVZjwIABuHDhAs6fP//YC54+tIN106ZNkEql6Nu37719qSJ6RVVVFYYNG4aCggJs3rxZZ/3SMpkMW7duxalTpzBt2jSd5ClSk6+//hohISHYsGHDk614/F9FhcTERNra2jI4OFiMGqunlJWVcdCgQbS0tBQstt/atWspkUi4evVqQfJvqGzdupUGBga1iij1SDEGw8PD2bhxY7Zt25bXrl174sxENM/169fZoUMH2tra8vhx7bQ6PyozZsygVCrl8uXLBdXRUNiwYQMNDAz48ccf1yqdR442nJyczKeeeoqurq48cuRIrTIV0QwnTpygl5cXmzZtysTExP8+QAfMmjWLEomE//vf/8SgtFpCrVZz/vz5lEql/Oyzz2qd3mOtO3Djxg0OGTKEUqmUH330kbjeoEAoFAp+/vnnNDAwYN++fbUU/enJWbZsGQ0NDdm3b1+dhTlrKBQWFnLo0KGUyWRcuHChRtJ8omXI1q1bRysrK60vlChyLwcPHmSbNm1obm7OFStW6O3bNiwsjK6urvTw8OC+ffuEllMvOHLkCL29vdm4cWP+888/Gkv3iRckTUlJ4dChQwmAPXv2FBeb0DLnz59n3759CYD9+/dnUlKS0JL+k+vXr1cvpvnyyy8zKytLaEl1kpycHI4ZM4YSiYQDBw7U+KKktV6a/NSpUwwKCqJUKmW/fv3E5ck0THR0NEeOHEmZTMaWLVvyzz//FFrSY/Pnn3/S09OT5ubmnDJlSq0WymhIlJaWcu7cuWzUqBGdnJy0Ngy81iZA3myo2LZtGwMDAwmA3bt35549e6hUPmhakMjDUKlUPHDgAHv16kUA9Pf355YtW+r0ys8lJSWcNWsWra2taWdnx/nz57OwsFBoWXpJSUkJlyxZQkdHR1pYWHDGjBlaPVcaMYE7OXz4MF944QVKJBK6uLjw888/58WLFzWdTb3kypUrnDFjBt3d3QmAzz77LPfv3y+0LI1y48YNfvHFFzQ3N6eFhQXff/99venZEJqkpCR+/PHHtLa2pomJCSdNmqTV8HC30bgJ3ObSpUucOnUqXV1dKZFI2KlTJy5YsEDrYbDrGikpKVy8eDG7du1KiURCJycnTp48mRcuXPjvg+sw+fn5XLhwIZs0aUKJRMLnn3+e69ata3Clg+LiYm7cuJEvvPACpVIp3d3dOXfu3FovMvo4aM0EbqNUKrlv3z6OGjWKNjY2BEBfX19Onz6dx48fZ2VlpbYl6BVVVVUMCwvjV199xXbt2hEAra2t+corr3DPnj2sqtJyGGI9Q6VScffu3Rw0aBCNjIxobGzMF198kb/++ivz8+vw4g8PobCwkNu3b+eIESNoampKuVzOfv36cceOHYJUoR86gUjTKJVKHD16FDt37sTu3buRlpYGMzMzdO7cGT169EC3bt3g7+//aME/6wiVlZWIiorCsWPH8PfffyM0NBTFxcVwdXVF//79MWjQIPTo0eNW1KOGTX5+Pnbs2IEtW7bg2LFjkEgk6NixI3r37o1evXrBz88PMpl2A3VqA5VKhdjYWBw4cAD79+/HiRMnoFarERQUhFdeeQXDhg2Dra2tYPp0agJ3k5SUhL///rv6k5WVBblcjtatWyMwMBCBgYFo164dWrRoAQsLC6FkPjKlpaVITEzEuXPnEB4ejoiICMTExKCyshIODg7o3r07evTogR49eqBFixZCy9Vr8vPzcfDgQezbtw/79+9HVlYWzM3N8fTTT6NTp07o2LEj2rVrB0dHR6Gl3kNOTg4iIyMRFhaGsLAwnDp1CsXFxXBwcEBwcHC1qQn54N+JoCZwN5cuXUJ4eHj1JzIyEsXFxQBuxrNr0aIFmjdvjhYtWsDDwwPOzs5wdXVF48aNdRLZl7fCbF+7dg3Xrl1DamoqLl68iMTERFy8eLE63p6ZmRnatm1bbWSBgYFo3ry5zmb21TdI4vz58wgLC8OJEydw8uRJXLx4EQBga2sLX19ftGzZEq1atYKnpyc8PDzg6el5K7y7digvL0dKSgpSU1ORmpqK+Ph4xMfHIy4uDtnZ2QCApk2bIigoCEFBQejUqRNatWolaATqB6FXJnA3arUaly9fRkJCAhITE6s/ly5dqhHlVi6Xo3HjxnB0dESjRo1gbW1d/a+1tTWkUmmNqLtWVlaQSqUgiYKCf9ebKigogFqtRkFBAfLz82v8e/36dWRmZv4bsx434903a9YMPj4+1ebk4+MDb29vcV69lsnNzUVMTAzi4uIQFRWFbdu2gSRKS0ur97G3t4ezszPs7OxgZ2cHGxsb2NjYwMLCAmZmZtXrUFhYWEAmk0GlUlWH6q6qqkJJSQlKSkpw48YN5OXl4caNG8jJyUFGRkb1gw7cvJ98fHzQpk0btGrVCq1bt4avr++t9RD0H702gYehUCiQkZGB9PR0XL16tfrC3H5obz/A+fn5NS7u3Q/+bUMA/r0Z7jSQ2/93cHCAs7Mz3N3dceXKFYwZMwbbt2/H0KFDBfn9Iv8yfvx4bNu2DdHR0bCyskJaWlr1WzojIwN5eXnVD/GNGzdQXFyM8vLyW9Ggb8boV6lUkEql1XH7jYyMYGpqCnNz82rzsLGxgZ2dHZycnKpLHB4eHrC2thby59eaOmsCQjN+/Hhs374d0dHRcHNzE1pOg2Xnzp0YPHgwfvnlF7z00ktCy6mTiCbwhJSWlqJdu3bw8PDAgQMHxPq+AGRkZMDX1xeDBw/GypUrhZZTZ9G/Voo6gpmZGbZs2YJ//vkHP/zwg9ByGhxqtRqjR49Go0aN8N133wktp04jmkAtCAgIwBdffIHJkycjNjZWaDkNioULF+Lo0aPYtGlTneg+1mfE6kAtUSqV6NKlCxQKBU6dOnXflY9FNMu5c+fQsWNHzJo1C5MnTxZaTp1HNAENcPnyZbRt2xbvvfce5syZI7Scek1ZWRkCAgLg4OCAI0eOiF2xGkCsDmiApk2b4ttvv8W8efPwzz//CC2nXvPhhx8iKysLGzduFA1AQ4glAQ0yYMAAxMbGIjo6GpaWlkLLqXeI3YHaQTQBDZKTkwNfX18EBwdj3bp1QsupV4jdgdpDNAENs3//fvTp0we//PILhg8fLrSceoFarUZwcDBSUlJw7tw5sTdAw4htAhrmhRdewLhx4/D222/j6tWrQsupF4jdgdpFLAloAXE0oeYQuwO1j2gCWiIiIgIdO3bEwoUL8f777wstp04idgfqBrE6oCXE0YS1R+wO1A1iSUCLiKMJnxyxO1B3iCagZcTRhI+P2B2oW0QT0AErVqzAO++8g8OHD6N79+5Cy9FrxO5A3SOagI4QRxM+Gt9++y2mTp2K0NBQPPPMM0LLaRCIDYM6YvXq1aioqMDEiROFlqK3nDt3DtOmTcPs2bNFA9AhYklAh4ijCR+M2B0oHKIJ6BgxNuH9uTNYqLu7u9ByGhSiCegYcTThvYjdgcIitgnoGDE2YU0yMjIwbtw4jBs3TjQAgRBLAgLx5ZdfYt68eThz5gzatGkjtBxBELsD9QPRBARCHE0odgfqC2J1QCBkMhk2bdqEpKQkfPnll0LL0Tlid6D+IJYEBKYhjiYUuwP1C9EE9ICGNppQ7A7UL8TqgB7QkEYT7ty5EytXrsTy5ctFA9ATxJKAntAQRhOKswP1E9EE9Ij6PJpQ7A7UX8TqgB6xaNEi2NvbY+zYsahv3iwGC9VfRBPQI+rraEKxO1C/EasDesjDRhMePnwYrVq1QuPGjQVSd38UCgWMjIzu2S52B+o/YklAD5k2bRr8/f0xevRoVFZWAgAqKirw8ccfo2fPnti/f7/ACu9l06ZNGDhwIHJzc2tsF4OF1gEoopckJSXRwsKCn3/+OaOioujj40OZTEapVMphw4YJLe8eBg0aRAC0s7NjSEgISfKPP/4gAP7yyy8CqxN5GGJ1QI9Zvnw5PvzwQ6hUKgA35xsAgIWFBfLz8/XmzVpVVYVGjRqhtLQUUqkUarUab7zxBnbu3IkhQ4aI3YF6jlgd0FPS0tKwZcsWVFZWQqlUVhsAABQXFyM8PFxAdTU5duwYSktLAdzsCgSA9evXo6KiAuPGjRNSmsgjIJqAHrJt2za0adMGp0+fvm9XoaGhoV61C/z111/3zIJUqVSoqnAb5fgAACAASURBVKpC165dsWTJknrX5VmfEKsDeoRKpcLIkSOxdetWSCSShz44AQEBelMaaNq0Ka5cufLA7yUSCfr27Yu1a9fCzs5Oh8pEHgWxJKBHGBgYYPz48XB0dIRMJnvovpGRkcjLy9ORsgdz+fLlhxrAbfbu3Yu5c+fqQJHI4yKagJ7RvXt3JCYmYtCgQf+576FDh3Sg6OH8+eefDzUsuVwOExMTbNiwAQsWLNChMpFHRTQBPcTKygq//fYb1q9fD2NjY8jl8nv2MTAw0It2gT179lQ3Bt6NVCqFv78/YmNjMXLkSB0rE3lUxDYBPSchIQHDhw/HhQsXavQQAICtrS1ycnIEi1hcWlqKRo0aoaqqqsZ2mUwGtVqN6dOnY/r06XrTlSlyf8SSgJ7j4+ODiIgIfPHFF5BIJJBK/71keXl5iImJEUzbkSNH7msAHh4eOHv2LL788kvRAOoAognUAeRyOb766iuEhITAzs6uunogl8sFrRL8+eef1V2Dt83p9ddfR3R0NNq1ayeYLpHHQ6wO1DGys7MxatQoHDx4EGq1Gp07d0ZoaOgD96+oqEBeXh7y8vJQWlpaPainrKwMCoUCwM3Zi7cfZmtra5iZmcHW1ha2trYPfZM7OTkhKysLcrkclpaW2LhxI3r37q3BXyuiC0QTqIOQxPfff49PP/0UJLFz505kZWUhJSUFycnJSE5ORnp6evWDXxsaNWoEBwcHuLm5wdPTE15eXvD09IRUKsXLL78MAOjXrx/WrFkDe3t7Tfw8ER0jmkAdIi8vDydOnMDp06cRHR2N8PBwXL9+HQBgamoKLy+v6o+bmxvs7OxgZ2dX/Va3sLCAiYlJ9f63p/6WlJRU1+2LiopQXFxcXXrIyclBdnY2UlNTq03m6tWr1fs7OTmhW7du8Pf3R1BQENq3bw9jY2MBzo7IkyKagB5TXFyM/fv348iRIwgNDcX58+chkUjg4+MDPz8/+Pn5oWXLllCr1Rg4cKDOdCmVSowfPx7+/v64fv06YmJiEBkZiWvXrsHY2Bjt27dHly5dEBwcjE6dOomNg3qOaAJ6RkZGBnbu3Ildu3bh6NGjUCqV1Q9Vly5d0KlTJ9jY2AgtE2q1ukZPBQAkJycjNDQUx44dw9GjR5GUlARbW1v06dMHAwYMQN++fatLIiL6g2gCeoBCoUBISAg2btyIP/74A4aGhnj22WfRv39/DBgwQO+iCD0qV65cwZ49e7B3714cPXoUJiYmGDhwIEaNGoXnnntOXJFZX9Bh7AKRu0hLS+OkSZNobW1NmUzGvn378rfffmN5ebnQ0jTO9evXuWjRIvr5+REAmzVrxmXLlrG0tFRoaQ0e0QQEIDY2lq+99hrlcjldXFw4d+5cZmZmCi1LZ0RGRvLtt9+miYkJ7ezsOGPGDObm5gotq8EimoAOuXr1Kl9//XVKpVK2adOG69ato0KhEFqWYGRnZ3PmzJm0s7OjtbU1582bVy9LQfqOaAI6oKKigtOnT6eJiQm9vLy4ZcsWqtVqoWXpDcXFxZw+fTrNzMzo7u7O7du3Cy2pQSGagJY5e/YsW7VqRQsLCy5cuJAVFRVCS9Jbrl27xjfeeIMSiYTDhw9nTk6O0JIaBOLcAS1BErNnz0bHjh3h6OiImJgYfPzxx/eNzS9yE2dnZ6xevRoHDhzAqVOn0Lp1a72ImVDvEdqF6iMlJSV88cUXKZfLuWTJErHo/wQUFhbylVdeoUwm45IlS4SWU695eAwrkccmLy8PPXv2xNWrVxESEoLu3bsLLalOYmlpic2bN8PX1xcfffQRLl68iKVLl4pjC7SAaAIapLCwEMHBwcjPz8fp06fRpEkToSXVeaZMmYLmzZtjxIgRMDAwwJIlS4SWVO8QTUBDKBQK9OnTB1lZWTh27JhoABpk8ODB2LJlC0aMGAErKyv873//E1pSvUJsGNQQkydPRlxcHA4dOiQagBYYOnQoli9fjtmzZ2Pfvn1Cy6lXiHMHNMCePXswcOBAbN68uXqOvYh2GDVqFA4cOIDo6Og6O6dC3xBLArWkqqoKH3zwAV577TWtGQAL4vH7gvfQ7+kWcLUxham1C1p2H4n/bTmDtNi5eOfbJK3kq48sW7YMJiYmmDlzptBS6g9Cd0/UdZYvX05DQ0MmJydrJf0bYfPZ201Oo2aD+b+tJ3gpu5jlpTlMjdrHpe90or0E9PzklFby1ldWr15NuVzOpKQkoaXUC0QTqCXNmjXjO++8o5W0VVdWslcjUOo9gUcK7reHgue/f55ur/+plfz1laqqKnp7e3PixIlCS6kXiNWBWhAfH49Lly5paWGNYvz26ccIybfAiPkL0MPqfvsY4qn3luJN13xUAlCl7cfMYU/D094MxmZ28O40BssjSwGoUZh4AD9OHoYAx15YnpmKXdP6o5WdKcyc2+Ptbal3pKlE2r5ZGPGMJ6xNTGHr1RGjvz+F/OrvK5Dw22T093OBuZExbJv3xMc7LkMJNYouhmD5lOEIbByMFWkRWNivKaxsA/G/M1V3C68VMpkMr7zyCnbu3CkudKoJhHahusy8efPo6OhIlUql+cRzV/F5GQjjF7n9kaYbXOTcQDnNnp/HiMwiFlzcyhGuoLTDAqYxkXM629DCAAS82XviLG4+d50lBTGc08WYsB7D/VU3U0nfOpxOTi/wu2NpLCrLZsi7zQlYcujWPJJkypq+9OoylQcuFbI0J4JLBzpTIvXhtIhYft3J9lYeAXzluy08d2Ype7t58N2Dmp8vER4eTgCMiYnReNoNDdEEasGYMWPYp08f7SR+4iM6AUTTKYx8pAOiOaudI59bdqV6y57RZoT9BB699ffJSZ4Enuaiq/8elbqwI4EOXJxOsuIAX7c3YM8V1//dIfZbPm1jx36r0siqw3zToRVnXeCdCbA9QNMR21lJ8szkpgTc+OHxqif95Y+ESqWiTCbjr7/+qtV8GgLiYKFakJmZCVdXV+0kXliIQgAwMcGjReXzxbSILExDFbJOb8JPS3/E6h2lgHEVbhfGHRzsAZjgzmDApqamAApQVQXgzJ/4M8cNbwQ4/LtD609wOu+Tm/8/9xMOZccj+SkJpt+dfXw8kjEUdna2AEzQooV2by2pVAoHBwdkZGRoNZ+GgNgmUAuKi4thYWGhncS9vOAFAOlXcfURq73Kawcwo3cLtHvrLxj0XoCvX7IFSNw+/O7AoPeQnY0c5CIn5wEZ5uQgBx2wOJ0g7/rEzEBzQKdj+62srFBUVKSz/OorognUAkdHx+q4/xrHZxAG+QAo+BM7jz5Cw1rJ35jYpQ/WWM3BmYgtmPFqEFweN/y/jQ0aoQQ7N+5E8f2+t7KCFaKw47dLuP86xLolKytLHDCkAUQTqAVOTk5IT0/XUuqt8fG3Y+CMLPz8/mcIe9ALrzgcm9eeQF7oJqxPNkOfN0bA9c4w/3eUBCoqKgCooFL9+/XNZcWVUCoBtO+BHmZA3tY3MWDmbsRfL4WiOAMxfy7AuP+FoNK/G7pZVSD0894YPn8v4jKKUFaYgQvH1uLtTzYh7+70tEhJSQny8/Ph7Oys3YwaAsI2SdRtNmzYQCMjIxYVFWkphwrG/tifTgagUdP+nLb2EOPSb7CssoKFmRd4dNNXfPudH3mulGTUNHoD9By1jSkF1xn12xy+2NqEkPXjuvjt3LT/PJcFmxKw44it16hQk6zM5KZhtgTM2XdFCivUVYyZ24EmAHHnx7ITF8crSap4YVFXmt/9vaw5PzpaRFXJRX4fbEGgCb84p6VTcos//viDUqmUWVlZ2s2oASCaQC3Izc2lTCbjtm3btJpPYeyv/OqNF+jvaU8LI0Oa2rjSp9NwfrYyjNereydzeGByN7pZWrBx6z787PdLTN44hPZmzuzy0Wp+1qXmg/vMt6H89pma27otzSR5g2GLR/EZNwsamTvyqZ7vcPW5/DvUFDHi57fYrakNjU1s6NV+OOccSqeSV2ukZ27vSJ9Jx7V2TsaOHcuOHTtqLf2GhDiBqJa88MILKC8vx9GjR4WW0mDIzs5GkyZN8PXXX+ODDz4QWk6dR2wTqCUzZszAsWPHxFh4OuSbb76BpaUl3nzzTaGl1AvEkoAG6NevH1JSUnD27FlxrT0tExUVhQ4dOuC7777DO++8I7SceoFoAhogPT0d/v7+ePHFF7F8+XKh5dRbSktLERgYCAcHBxw5ckRc7VhDiNUBDeDq6oqVK1fi559/xsqVK4WWUy9RqVQYPXo0cnJysGXLFtEANIg4bFhDDB48GF999RXefvttGBsba2lmYcNErVZjzJgx2LdvH/766y+4uLgILaleIZqABpk+fTrKysrw+uuvo6ysDG+99ZbQkuo8FRUVeOONN/DHH39g9+7d6Natm9CS6h2iCWiYb775BkZGRpgwYQLi4uKwaNEiyGTiaX4SMjMzMXjwYCQmJmL37t3o2bOn0JLqJWLDoJbYtm0bXn/9dbRr1w7r1q0TIxA/Jvv27cO4ceNgYWGB3bt3o3nz5kJLqreIDYNaYtiwYQgLC0NhYSF8fX3xww8/iFFwHoHCwkKMHTsWffr0Qffu3XHq1CnRALSNYGMVGwiVlZWcO3cuDQ0NGRgYyL///ltoSXqJSqXi+vXr6eTkRAcHB+7YsUNoSQ0GsSSgZeRyOaZMmYIzZ86gUaNG6NGjBwYOHIjY2FihpekFJLFr1y60adMGb775JoYNG4bz589jyJAhQktrMIgmoCP8/PwQEhKC/fv3IyUlBX5+fujTpw8OHz4stDRBUCgUWLVqFVq1aoXBgwejZcuWiI+Px5IlS2Brayu0vAaFaAI6Jjg4GFFRUdizZw/Ky8vx/PPPo23btli6dCny8vKElqd1Lly4gClTpsDDwwPvvfceOnTogNjYWGzbtg3e3t5Cy2uQiL0DAhMeHo5ly5Zh+/btqKysRL9+/fDKK68gODgY5ubmQsvTCOnp6di1axc2btyI06dPw93dHaNHj8aECRPg5OQktLwGj2gCekJJSQl27NiBdevWITQ0FDKZDD169MCAAQMQHBxcp7oYVSoVzp07hz///BN79uxBZGQkzMzMMGjQIIwZMwY9evT473iHIjpDNAE9JCcnp/oBCgkJQUlJCVxdXdG1a1d07doVQUFB8PHxgVwuF1oqgJsBV6OjoxEaGorQ0FAcP34cxcXFcHV1Rb9+/TBgwAD06NEDxsaPG/RQRBeIJqDnKBQKnDlzBkePHkVoaCjCwsJQUlICQ0NDtGrVCr6+vmjdujWaN28OLy8veHl5aa0akZ2djeTkZCQnJyMhIQGxsbGIjo7GlStXQBLOzs7o2rUrunTpgq5du6JVq1Y6jT4s8mSIJlDHUCqViI+PR0xMDGJiYnD48GHEx8ejsrKyeh97e3u4urrCwcEBtra2sLOzg62tLYyNjWFtbQ0AMDQ0hJmZGYCbA3TUajWUSiWKi4tRUlKCvLw85OTkIDc3F7m5uUhOTkZpaSmAm8uAyeVy+Pn5oXfv3vD19YW/vz88PT11fj5Eao9oAnWYoqIitG7dGp07d8aqVauq39LJyclIT09Hbm4u8vLyqj8KhQL5+TdXFVQoFCgrKwNwM36/VCqFXC6Hubk5zM3Nq83j9sfd3b26pOHm5oYJEyZg165diIuLg6Ojo5CnQaSWiCZQhxk/fjz++OMPxMfHw8HB4b8P0CBFRUVo06YN2rZti507d+o0bxHNIjbR1lH+/vtvrFq1CsuWLdO5AQCApaUl1qxZg927d+PXX3/Vef4imkMsCdRBysrK4Ovri5YtW2L37t2Cann77bexfft2xMfHi9WCOopoAnWQ999/H5s2bUJcXJzgUXZKS0vh5+eHVq1aYdeuXYJqEXkyxOpAHePkyZP48ccfsWTJEsENAADMzMywcuVK7NmzB1u2bBFajsgTIJYE6hAKhQJt27aFp6cn/vrrL6Hl1OC9997D5s2b9aJ0IvJ4iCZQh/j000/x888/Iy4uDm5ubkLLqUFZWRn8/Pzg4+ODPXv2CC1H5DEQqwN1hDNnzmDRokVYsGCB3hkAAJiammLdunX466+/sGHDBqHliDwGYkmgDqBQKBAYGAh7e3scPnxYr4fifvDBB1i/fj1iY2P10qxE7kU0gTrAtGnTsGjRIsTExKBp06ZCy3koZWVl1UOIDxw4oNeGJXITsTqg50RHR2P+/PmYN2+e3hsAcLNasH79ehw5cgRr164VWo7IIyCWBPQYpVKJDh06wNDQEMePH69Tc/AnTZqEVatWITY2Fu7u7kLLEXkIognoMbNmzcLXX3+NyMhIPPXUU0LLeSwUCgXatWsHZ2dnhISEiNUCPabuvFoaGBcuXMCcOXMwe/bsOmcAAGBkZITVq1dXz3EQ0V/EkoAeolar0aVLFyiVSoSFhdXpFXinTJmCZcuWISYmpk6FSGtIiCagh8yfPx8zZsxAeHg4WrduLbScWqFQKBAQEABHR0ccOnRIrBboIWJ1QM+4ePEivvzyS0yfPr3OGwBws1qwYcMGhIaGYvny5ULLEbkPYklAj1Cr1ejevTuKiopw9uxZvQkkqgm++OILfP/994iKihLXF9AzRBPQI5YsWYJPPvkEp06dQkBAgNByNIpCoUD79u1haWmJY8eO1anuzvqOeCX0hJSUFEybNg2ff/55vTMA4Ga1YP369Thz5gyWLVsmtByROxBLAnoASQQHByM9PR3nzp2r1/H5Z8yYgYULFyIqKgrNmjUTWo4IRBPQC1asWIF33nkHoaGhCAoKElqOVrk9CtLIyAjHjh2r092f9QWxOiAw165dw2effYZPPvmk3hsAcHPNgtWrVyM8PBxLly4VWo4IxJKA4PTp0weXL19GVFQUTExMhJajM7766ivMnz8fkZGRaN68udByGjSiCQjIunXrMHbsWPzzzz/o0qWL0HJ0ilKpRMeOHSGXyxEaGipWCwRErA4IRFZWFiZNmoT333+/wRkAcLNasH79ekRGRmLRokVCy2nQiCUBgRg6dCjOnTuH2NhYrS0gWheYPXs2Zs+ejYiICLRq1UpoOQ0S0QQEYOvWrXj11Vdx4MAB9OzZU2g5gqJUKhEUFASpVIoTJ06I1QIBEKsDOiY3Nxcffvghxo8f3+ANAPi3WhAdHY0FCxYILadBIpYEdMyIESNw/PhxxMXFVS8TLgLMnTsXX375Zb2YOVnXEE1Ah+zZswcDBgzAX3/9hd69ewstR69Qq9Xo1q0bSktLcfr06Xo1eUrfEasDOqKgoAATJkzAmDFjRAO4D1KpFKtWrUJCQgLmz58vtJwGhVgS0BGjR49GSEgI4uPjYWNjI7QcvWXBggWYOnUqzp49C19fX6HlNAhEE9Agubm5sLGxuWea7L59+9CnTx/s2LEDQ4YMEUhd3eB2TIXi4mKcOXOmRrXg0KFDOH36NKZOnSqgwnoIRTTGF198waCgICYmJlZvKywspJubG19++WUBldUtLl++TDMzM3755ZckyeLiYr711luUSCT08PAQVlw9RDQBDdK+fXtKJBIaGhry22+/pVKp5Jtvvkk7Oztev35daHl1iu+++44ymYzLly+nm5sb5XI5ARAAU1NThZZXrxCrAxqirKwMVlZWUCqVAG42dHl6eiI5ORlbt27FSy+9JLDCukVpaSn8/Pxw5coVSKVSqFQqAICBgQFWrVqFMWPGCCuwHiH2DmiI48ePVxsAcLNum5aWBolEgsjISFRWVgqorm4RFhaGNm3aIDU1FSSrDQAAJBIJDh8+LKC6+odoAhri6NGjMDQ0rLFNqVRCrVZjwYIF8PPzQ3h4uEDq6gZlZWX46KOP0LlzZ1y9erWGqd5GqVTiwIEDAqirv4gmoCEOHjz4wLe9SqVCUlISOnTogJkzZ0Ksgd2fn3/+GUuWLAGA+xrAbXJycpCQkKArWfUe0QQ0QGlpKSIjIx+6j0Qigbm5OYKCgsQFOB7Ahx9+iJ07d8LCwgIymeyB+8lkMhw5ckSHyuo3oglogBMnTjz0zWVgYICWLVsiMjISwcHBOlRW9xgwYABiY2PRtm3bB84oJImDBw/qWFn9RTQBDXC/9oA7eeONN3DmzBl4eXnpUFXdxd3dHWFhYfjkk08gkUjuGXylUqlw6NChGg2GIk+OaAIa4H7tATKZDCYmJvjll1/w888/P9QkRO5FJpNh7ty52LlzJ8zNze+ZUFRSUoLo6GiB1NUvRBOoJWVlZfe0B8hkMnh5eSE8PFwcH1BLBgwYgLi4OPj7+9eoHsjlcrGrUEOIJlBL7h4fIJFI8NJLLyEyMhItW7YUUFn9wc3NDWFhYZg6dWp19UCpVCIkJERoafWCBzfB1lMqKyuRnZ2N7OxsFBYWQqVSobS0FJWVlZDL5TA3N4dUKoWVlRUcHBzg6Oj40KL8nQtoGBgY4Mcff8TYsWN19XMaDDKZDF999RUCAgIwcuRIFBUV4fjx46isrLzn+hQUFKCwsBCFhYWoqqpCfn5+9XcKhQJlZWXVf5uYmNRY8cna2hqGhoawsrKClZVVgwj8Um+HDScnJyMiIgIJCQmIj49HQkICrl27hpycnMdOy87ODi4uLvDx8UHLli3x1FNPoW3btvD29sYzzzyDM2fOwMPDAzt37oS/v78Wfo1IeXk5kpKSkJqaitjYWPzwww/IyMhAUFAQFAoFcnNzUVhYiIKCAo3nbW1tDSsrK9ja2sLZ2RlOTk41/vXw8IC3tzdMTU01nrcuqDcmkJSUhL/++guhoaE4ceIEMjMzYWBgAC8vL7Rs2RI+Pj5wd3eHi4tL9Rve2toaUqkUpqamMDIyQmVlJUpLS0ES+fn51SWGa9eu4erVq9WGkpycDKVSCQcHB+Tm5qJly5ZYu3YtAgMDhT4NdZ7r168jOjoa0dHRSEpKwqVLl5CUlIT09PTqQVZWVlZwdnZGRUUFLC0t0atXL9jb28PKygqNGjWClZUVLC0tYWVlBSMjI1haWlaX1mQyGSwsLKrzKykpQVVVFYCbQ70LCwtRWVlZXZK4bSyFhYXIyclBZmYmMjMzkZGRgczMzBqlDFdXV3h7e8Pb2xvNmjWDr68v/Pz84OTkpMMz+PjUaRM4d+4ctm7dir179yIhIQGNGjVC586d0alTJ3Tu3BkBAQFaWdxToVDg3Llz2LBhA0JDQ5GVlYW8vDw0a9YM/fv3x4gRI9C+fXuN51vfuH79Ok6cOIEzZ84gKioK0dHRyMrKAgC4uLigRYsWNR6qZs2aoUmTJjVWarpy5QqaNGki1E9AeXk5kpOTq83qtnFdvHgRV69eBQA4ODjAz88Pbdu2RWBgIDp37qxXxlDnTKCgoAAbNmzAmjVrEB0dDW9vbwwcOBD9+vVD586dHzrSTNOoVCoYGBhApVLh5MmT2Lt3L3bt2oWEhAS0bt0ab7zxBkaNGgVbW1udadJnUlNT8c8//+DYsWM4ceIEEhMTqwdS+fv7w8/PD/7+/vD3968X5yw/Px9RUVHVBhcVFYW4uDioVCp4e3ujc+fO6Nq1K7p37y7sGBIBpi8/EVlZWZw5cyatra1pYmLCYcOG8eDBg1Sr1UJLu4fw8HBOnDiRtra2NDMz48SJExvkHHilUsnw8HDOnDmTAQEBlEgklMlkDAgI4MSJE/nbb78xLy9PaJk6paSkhKGhoZw7dy779etHS0tLAmCTJk04fvx47t69mxUVFTrVpPcmkJeXx4kTJ9LQ0JDOzs789ttvWVRUJLSsR6KkpISLFy+mu7s75XI533rrLWZnZwstS6solUru27ePI0eOpJWVFQGwefPm/Oijj3jw4EGd3+D6jkKh4JEjR/jJJ5+wZcuWBEALCwu++uqr3Lt3LysrK7WuQW9NQKlUcunSpbS1taWjoyN/+umnOnsDVVZWcs2aNXRxcaGVlRUXLFjAqqoqoWVplNulH0dHRwJghw4duGjRIiYlJQktrU6RnJzMH374gZ07d6ZEIqGdnR3feecdnjp1Smt56qUJJCUlsVOnTjQyMuLkyZNZWFgotCSNUFJSwunTp9PExISBgYE8f/680JJqhUKh4G+//cbnn3+eAOjp6ckpU6bUiLEo8uSkpaVx8eLFbNeuHQGwXbt2XLFiBcvKyjSaj96ZwNq1a2lubk5/f3/GxMQILUcrJCQk8Omnn6aJiQl//PFHoeU8NkVFRZw9ezYbN25MmUzGF198kf/884/Qsuo1YWFhfPnllymXy+ng4MCZM2eyoKBAI2nrjQmoVCpOmjSJEomEkydPpkKhEFqSVqmqquLMmTMplUo5YcKEOlE9KC8v58KFC2lvb08rKyt+/vnnTEtLE1pWgyIjI4MzZsygjY0NbWxsOHfuXJaWltYqTb0wAYVCwUGDBtHY2JibN28WWo5O+f3332lmZsbg4GCNF/M0ydatW+nq6kpTU1NOnjy5wbXq6xv5+fmcNm0azc3N2bhxY65fv/6J0xLcBKqqqjh48GBaWlryxIkTQssRhPDwcNra2vKFF17Qu8bP1NRU9u3blxKJhG+++SYzMjKEliRyB9nZ2Xz33XcplUrZs2dPXr58+bHTENwEXnvtNZqbm/P48eNCSxGU8PBwWltbc/DgwXoz9mHDhg20sLBgixYtePToUaHliDyEkydPsnXr1jQ1NeXKlSsf61hBTeD777+ngYEBDxw4IKQMvSE0NJRyuZxz5swRVEdVVRU//vhjSiQSTpo0ieXl5YLqEXk0FAoFp06dSolEwgkTJjzyGAPBTCA8PJyGhoacNWuWUBL0ksWLF9PAwIDHjh0TJP/S0lL26tWLpqam3LJliyAaRGrH77//TgsLC3bt2vWRutcFmTugVqvRsWNHmJqa4vDhw/fEkGvo9OvXDykpKYiKitLpXIjKykoMGDAAEREROHDgANq1a6ezvEU0S3x8PHr16oVmzZph3759NSZd3YPWbek+rFmzhjKZrN6OA6gtSUlJNDIy4vff0s3HLAAAE2dJREFUf6+zPFUqFYcOHUorKytGREToLF8R7REXF0c7Ozv26dPnoV3QOjcBtVpNb29vvvXWWxpJb99Yq+qFKv/9eHDK2Vs7/P0ubWt858JJJzWStVaZNGkSXVxcdDZ+4Pvvv6dcLmdoaKhW0t869O5rBEJiQLmxBe1cmzPgueGc+O0uJtauy1vkLs6ePUsTExN+8803D9xH5yYQEhJCAIyNjdVIeurKIqae/ZWfP+9MA4CQOPPFzSn8t329krE/D6CbgS07TVzN48mF1P6UjNqTmppKAwMD/v7771rPKzk5mebm5tVLgWsHJUvT1nGgJQirIVwZn8zsUgXLC68x/u+NnDHEh2YAjTwGcHls/R4opmvmz59PIyMjxsXF3fd7nZvAyJEj2blzZ80nrEzhpuHulAKEdR+uv3Zzc+HfE9nMyJ3D11+sEw//nfTu3ZuDBg3Sej4jRoxg69atdTBKM5JTmoKwfYt/3/NdKaMX9WQjgFLPsTyQr2UpDQilUsmnn36a/fr1u+/3OjcBd3d3zp49WzuJK+L5bdeb87Ot+6xhevpWDnL24qtbk6ms3knFwsQD/GnyMAY49uLy1HAu6NuEljYB/Op0JZWp+zjjxfb0sDOlkaktmwaN5k/nSkie5AcudxZnu/GnnJspFq/tW709eKXm7t7FixfTxsaGKpVKY2neTW5uLo2MjGo14uzReZgJkGQ21/UzJyBh4NwNj3y+FRd/4dtdvNjIyo3PTf6D0Wu+48rMSmZF7OC37/blU25juTf9L37RtyVtTS3p4jeYX/+TTTVVLEjYz2Wfvsh2Dj35U0YKd07tx5a2JjR1CuRbv6XcoU3N6/98xzFdm9HO1Ihmjk/x+bd/ZHiNy13OC79+yn6+zjQzNKJNs+f50fYk3q7QPfje0j7bt2+ngYHBfeNa6NQEkpOTCUC73V+5+zmuqQEBKzp7+HL0tlTWfIQu8OtOtrQwAIEAvvLdFp47s5S93Tz47sFYzg2U0+z5eYzILGLBxa0c4QpKOyxgGtUsu3aMc56zI9CcU85W/FvlUBdx0+DmfGXzJZZo8HmNjIzUaNXpfixevJjW1ta1Hn/+aPyXCZDl20fQBCDazmbcI53vS5wb2Ixjtl1iUXkRr/zzDZ+z7cylmfs43smCcoAw8uXg6St44mo+885v45stDQmjQH57IYFzOtvcuhe82XviLG4+d50lBTGc08WYsB7D/bee4MKQd+ll0Y6T9lxiQXE2o399n35moGngLEbd2idlTV96dZnKA5cKWZoTwaUDnSmR+nBaRBXJiw+5t7RPZWUl/9/euYdFVe57/DvDDDNchhEEBxxUQI2LBJQ7U5R41KysFNlq+nRRjyZktDfbMjuaZaby4KldbPemI7Q1C7ebnbU1zGMa5ikdNRQcNS4HSS4id7nJZbjN9/yBjIOioM4FaD7Psx6eZ613/d7fennXd72z3nf9fgqFoscHsElF4MiRIwTAyspKo9bTmv0hg21AODzB7Zd7LpO2ejSBEfzTcf0Xb+e48WEFp8df0u3Zv9iOcFlB3Xq5wq0MFoEe0cd0Cs/qz/nMpM28aODr0Gg0BMCUlBQDW75BeHg4586dazT73eldBJi5gb4AIV/G78ne27spic/Ah2+dvrHcumjrWv53KUnWcftMK8LmeabcGAqy+YdXqQSoWHGEWpIn3/AgMIEf6/WVwj9PIjCRccUktWf51lhQ+dr/6j1QtDy3/kEKIOW0T4rItiNcPmwcN2ZT3wgfAWi78Cu29qVvGZnFixdzxowZt+w36QR9VVUVhEIhHB0djVgLUZqmQqtPIIbUH8bryxJxuYdSzs5DAXjB21t/Hj4A69LLkPqqO8p+3oX1LwbjlX81Am1taOsqMnIpVj3nhIK/xyL5aueu4qTP0frSf2CMga9EIpFAJpOhoqLCwJZvkJ+fD29vb6PZv2tIEAA6OtAB9N7eNp7wdMvBlqkBmLPmM6iutGDEHzbjFVcAcIC7uwMgFEOsl9tUOjUMTzgA5WfO4DKAYcNcANhAPyZtZ/jwNrS1AUhPRvJFwD8wUC9bjwABES9jIjQ4euAIms6nIrUiE+/4CiAQXN9GvYHTAJoyM5Hfl75lZLy9vXHp0qVb9ptUBJqamiCVSm+bbdYQtKhj8OKnAUg88R3+MssJdYdX4eXEwlvK3S49ePuVQ3h3pjcejvwfWM38EJsXDL3RMQEAdghb9QrGNh5A7NbzIHKx458OWPq8caLH2tvbo6GhwSi2AUCj0dx5IYmJ0eTkoAAAvL3RKU29tfdkvP/lZjwxpADfxC7FFM/RePztgyjVdh7teSHaCIxwB9DaitbblrkBCwtxGeiWtAQAMHwMxtgCLClBWWUlKjERccUEedN2/l08gL70LeNia2uL5ubmW/abVAScnJzQ1NQEjUZjnApqvsdrEaewdNe7eEjqikUJWzHL6RoOr1qKxMI+NHXDUfwx5GnskMcgLX033n0hGMoeIpYLH/oDXp8uQebfYvHND39His/LCJcb/nJI4urVq3B2dja88esMGTIE1dXVRrN/d1Qi+bNvoYEVJiyYC4/re3trb8cpa3HoYi4OfRyBSUPLcSQmDHPjfr1R4JYbrRrV1YBo1CgM74NXAqUSbgBys7Oh7XZEDLEIkHh5YbhcDjnU+PrLizeVuU4f+5Yxqaqq6nEUblIRcHFxAQDjDG+bsrD1xXUQb/oCS0Zdvyy3F5DwyXwMu/YDVoavxjG95DRarRZAO/TSCALHduHzfDs8vXQh3PUHK7d0IlcsXvUiXKq/xPIF3+Gx5U9BYvgrQm1tLVpbW40qAuPGjUN6errR7PedZlyIewGvH2iAyOeP+OjVsXrH7tDemt14Z1MWKB2FJ/6UgBP/9xOifduQdvIMdInLNdWo1nsAMvsofiyXYkbYk7AFrj+UOqCf6bxb/3goDGEjgPLkT5GiPygrzkRmvT3CFjwNaVAoQuUaHFszE8/917f4paQeTXUlyP7pM7yyaheu9rlvGY+MjAz4+/vfesBE7yRIknV1dbSysuLXX39tMJstNb/y2K73ONfHjh6vfs/69u7Htc05fP93ndNJ9oER3PlzEetqc7n1SRkBL67N0CusXscxAD0W7WFBbTnVX8Zwnr8NIXqWOzO/4j+O6k/nZHH9gwLC711mGuxqunPo0CEC4JUrV4xUA7lv3z4KhUIWFBT0Xvi+aGdD0U7OkYOQz+WOvDLWt7Sx5Vo5c376BzfM96MdQPvAV7i3oKdVkrdp7+YkPmPtzUXbfmJ+bTMbir7jCh9bTo3PJ0l+HzmUEEgZEJHMzKuNrL10iG9PltNmwmZeaCW1mkLGP2lLwJkL/3mFLVqSraXcNX8oAXs+k1BAjZYs+ddzVABUzo7jiSsNvFZykn95djidnkxgvpYkO5j98WO0v3lVpOgBrvyx/i77luEpKyujWCzuMWiPydcJPPzww4yOjjaYvbdGd290+bKDekePMUrRw3JVvc3eRUGfN7piGVTy0OpQjnCQ0dX/af7nvy8yP+n3dLEbzpCV37D4pum/wj9P5uSPjXfzrFu3jg888IDR7JOdnw27ubnxnXfeMWo9PS4bhoAiqQNdRvhxypzl3PBFGivusEq6x/Zu3s1P/pbOb96fx4Bh9nRQPsT5G1NZen0+8fvIoYTdAsbGz6efk4TWDqM46aWPePIqSVbyr6HdfXr0g2P84NHu+0L/WkpSw9yv1nB24HDaS6QcMnI85679ihe7xYCpZ3piJENHO1Fq40TPR55jTGrx9TUqd9e3DM2WLVvo5OTU42fhJheBNWvWcMSIEWxvb++9cL+mlJ/MDOPOKuNY12q19PHx4WuvvWacCvTYuHEjZTKZCUYD98O9tXenCCzmwd6LDlpKSkro5OTE1atX93jc5CLw66+/UigUct++faau2nBorzF7+1yOe+kbGmuJTWpqKgGY5EvLlpYW+vv7c9q0af0mqlE37qO9v3t5CCF9kd8axbGBQXh4OD09PXnt2rUej5vlU+KZM2dy0qRJ/bPD3QFN6uscbSfoHCbKHmO8EfNqzJgxgyEhIcar4CbS0tIoEom4Zs0ak9XZG/fb3u216VzzkICAD1//qYqtA6u7GYTNmzdTKBTeMTycWUTg7NmztLKyYlJSkjmqv2daTr3P3w21o0vAPH6oMl603b1791IgEJg8ulBSUhKFQiFjY2NNWu/tuK/2rvmU0296B2HI7zoGAvHx8RQIBNy2bdsdy5ktvFhkZCTd3NxYXl5uLhf6JTU1NfTw8ODzzz9vlvq3bt1KgUDA9evXD7iRmoVOtFott2zZ0mdBN5sI1NTU0MvLi9OnTx8ELwkNg1ar5axZs6hUKs0qjtu2baO1tTXnzJkzYJK/WuiksbGRCxcupEgkYlxcXJ/OMWu04YyMDEqlUoNOGQ5k3n77bYrF4n6Rf+HYsWNUKBT08fH5zYeDHyikpaXR39+fzs7OTE1N7fN5Zs87kJycTCsrK65du9bcrpiVmJgYCgQC7tixw9yu6Lh8+TKfeuopCoVCRkVFDZrEsIONhoYGrly5klZWVpw2bRrz8/Pv6nyziwBJ7ty5k0KhkG+++aZRA2j0R7RaLdevX0+BQMD4+Hhzu9MjSUlJdHZ2plKpZEJCQp/j2VswLu3t7dyxYwdHjRpFR0dHbt++/Z7e4/QLESDJXbt2USKRMCws7LbzmYONpqYmLly4kGKxmImJieZ2545UVlYyKiqK1tbWHD16NJOSkn5zgt1f0Gq1TE5Opre3N8ViMZcvX87S0tJ7ttdvRIAkjx8/ThcXF/r6+vLMmTPmdseonD9/ngEBAXR0dLyr32/mprCwkBERERSJRPTy8mJsbKwlOamJqK+vZ0JCAseNG0ehUMj58+czNzf3vu32KxEgOzvZ1KlTKRaLuWHDhkGXorytrU0X/TU4OPieEkj2B3JzcxkVFUWZTEZ7e3uuWLGCarXa3G4NSn755RdGR0fTwcGBdnZ2jIyMZFZWlsHs9zsRIDsTYXz00Ue0sbHhmDFjuHfvXnO7ZBAOHjxIX19fSiQSxsTEDIqp0bq6OsbFxXHs2LEEQD8/P27atImXLl3q/WQLt6WwsJCxsbEMCAggAHp6evKDDz5gdXW1wevqlyLQRUFBARcsWECBQMDQ0FAePnzY3C7dE0ePHuWMGTMIgOHh4czLM+J6YzOh1WqpUqkYFRVFFxcXCgQCPvroo9y4cSPT09MtC4/6gFqtZkxMDIODgykQCOjk5MTIyEj++OOPRn3/0q9FoAuVSsXHH3+cADh+/Hju3r2732fKbWlp4Z49ezhx4sTOz1FDQ3n06FFzu2US2traeODAAS5btoxubm4EQDc3Ny5btozJyclGjY8wkCgtLeWePXsYERFBd3d3AqBCoeCSJUuYkpJisp/CA0IEujh9+jTnzZtHkUhER0dHRkVF8eeff+5XT5n09HRGR0fT2dmZVlZWDAsL48mTAyDvmZHQarVMT0/npk2bOGnSJIpEIgKgl5cXFy1axMTERF64cMFk6dbMRXt7OzMzM7l9+3YuWbJE9/PJysqKEyZM4Hvvvce0tDSzzLiYJSvx/VJaWoovvvgCO3fuRE5ODpRKJZ599lnMnj0bISEhkMlkJvOlsbERKpUKKSkp2L9/P4qKijB27FgsWbIEixYtgru7u8l8GQg0NDTg1KlTOH78OI4fP45Tp06hsbERUqkU/v7+CAoKQlBQEAIDA+Ht7a0LSTeQqKqqQm5uLs6fP4+zZ89CrVbjwoULaG5uhq2tLSZMmICQkBBMnjwZwcHBJu2vPTEgRUCfjIwM7N+/H/v370dGRgaEQiEefPBBTJkyBY888gj8/Pzg4+MDe3v7+66rqakJOTk5yMrKwunTp6FSqXDu3Dm0t7cjKCgIs2fPxqxZszB+/PjbRjO20J329nZkZmZCrVZDrVbj3LlzUKvVqKmpAQDI5XKMGTNGt3l5ecHV1RXu7u5QKBRQKBQm97miogLl5eUoLi5GWVkZ8vPzcfHiReTl5SEvLw+1tbU63/VFLSgoCP7+/hCLxSb3+U4MeBHQp6ysDCqVCiqVCidOnIBarUZLSwsEAgFGjhyJkSNHws3NDa6urlAoFJDJZJBIJJBKpbCxsYFGo0FzczNaW1tRX1+v+2eXlJTg8uXLKCgoAElYW1sjMDAQwcHBCA4OxuTJk6FUKs19+YOKoqIi3U2Vl5enu8ny8/PR2NioK2dtbY1hw4ZBoVBgyJAhkMvlkMvlcHBwgFwuh62tLaytrWFnZ6c7Rz/ibm1tLbpugaamJrS0tKC5uRl1dXWoq6tDfX096urqUFNTg8rKSpSVlaG1tVV3vq2tLTw9PbsJVdfm4eFh/IYyAINKBG6mo6MD+fn5yMrKQnZ2NoqLi1FSUoLy8nJUVFSgoaEBGo1Gd/N3iYFEIoG9vb2ucymVSgwfPhy+vr7w8/ODl5cXRCJR7w5YMAoNDQ26p/CVK1dQVlaGyspK1NTU6G7erq3rf9sV5r6jowP19fU6WzKZTPe/lEgksLW1hVQq1YlJ1+bo6AhnZ2e4urpCqVTq/jo4OJilDQzJoBYBCxYs9I5J8w5YsGCh/2ERAQsWfuNYRMCChd84IgB7zO2EBQsWzMf/AxbWdXko0RXeAAAAAElFTkSuQmCC", "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(\"images/cancer.png\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pgmpy.models import DiscreteBayesianNetwork\n", "from pgmpy.factors.discrete import TabularCPD\n", "\n", "# Step 1: Define the network structure.\n", "cancer_model = DiscreteBayesianNetwork(\n", " [\n", " (\"Pollution\", \"Cancer\"),\n", " (\"Smoker\", \"Cancer\"),\n", " (\"Cancer\", \"Xray\"),\n", " (\"Cancer\", \"Dyspnoea\"),\n", " ]\n", ")\n", "\n", "# Step 2: Define the CPDs.\n", "cpd_poll = TabularCPD(variable=\"Pollution\", variable_card=2, values=[[0.9], [0.1]])\n", "cpd_smoke = TabularCPD(variable=\"Smoker\", variable_card=2, values=[[0.3], [0.7]])\n", "cpd_cancer = TabularCPD(\n", " variable=\"Cancer\",\n", " variable_card=2,\n", " values=[[0.03, 0.05, 0.001, 0.02], [0.97, 0.95, 0.999, 0.98]],\n", " evidence=[\"Smoker\", \"Pollution\"],\n", " evidence_card=[2, 2],\n", ")\n", "cpd_xray = TabularCPD(\n", " variable=\"Xray\",\n", " variable_card=2,\n", " values=[[0.9, 0.2], [0.1, 0.8]],\n", " evidence=[\"Cancer\"],\n", " evidence_card=[2],\n", ")\n", "cpd_dysp = TabularCPD(\n", " variable=\"Dyspnoea\",\n", " variable_card=2,\n", " values=[[0.65, 0.3], [0.35, 0.7]],\n", " evidence=[\"Cancer\"],\n", " evidence_card=[2],\n", ")\n", "\n", "# Step 3: Add the CPDs to the model.\n", "cancer_model.add_cpds(cpd_poll, cpd_smoke, cpd_cancer, cpd_xray, cpd_dysp)\n", "\n", "# Step 4: Check if the model is correctly defined.\n", "cancer_model.check_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Generating a Random Model\n", "pgmpy offers methods to:\n", "1. Generate a completely random network\n", "2. Given a network structure, generate random CPDs.\n", "\n", "### Generate a completely random model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pgmpy.models import DiscreteBayesianNetwork\n", "\n", "random_model = DiscreteBayesianNetwork.get_random(n_nodes=8, edge_prob=0.4, n_states=2, latents=True)\n", "\n", "# Visualize the network\n", "viz = random_model.to_graphviz()\n", "viz.draw('random.png', prog='neato')\n", "Image('random.png')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Nodes in the model: [0, 1, 5, 6, 2, 3, 7, 4] \n", "\n", "Edges in the model: [(0, 1), (0, 5), (0, 6), (1, 2), (1, 3), (1, 5), (1, 7), (2, 5), (2, 7), (3, 5)] \n", "\n", "CPDs in the model: \n", "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]\n" ] } ], "source": [ "import pprint\n", "\n", "# Access attributes of the model\n", "nodes = random_model.nodes()\n", "edges = random_model.edges()\n", "cpds = random_model.get_cpds()\n", "\n", "print(f\"Nodes in the model: {nodes} \\n\")\n", "print(f\"Edges in the model: {edges} \\n\")\n", "print(f\"CPDs in the model: \")\n", "pprint.pp(cpds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate random CPDs for a given network structure" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Nodes in the model: ['Pollution', 'Cancer', 'Smoker', 'Xray', 'Dyspnoea'] \n", "\n", "Edges in the model: [('Pollution', 'Cancer'), ('Cancer', 'Xray'), ('Cancer', 'Dyspnoea'), ('Smoker', 'Cancer')] \n", "\n", "CPDs in the model: \n", "[,\n", " ,\n", " ,\n", " ,\n", " ]\n" ] } ], "source": [ "# Taking the example of the cancer model. \n", "\n", "cancer_random = DiscreteBayesianNetwork(\n", " [\n", " (\"Pollution\", \"Cancer\"),\n", " (\"Smoker\", \"Cancer\"),\n", " (\"Cancer\", \"Xray\"),\n", " (\"Cancer\", \"Dyspnoea\"),\n", " ]\n", ")\n", "\n", "cancer_random.get_random_cpds(n_states=3, inplace=True)\n", "\n", "# Access attributes of the model\n", "nodes = cancer_random.nodes()\n", "edges = cancer_random.edges()\n", "cpds = cancer_random.get_cpds()\n", "\n", "print(f\"Nodes in the model: {nodes} \\n\")\n", "print(f\"Edges in the model: {edges} \\n\")\n", "print(f\"CPDs in the model: \")\n", "pprint.pp(cpds)" ] } ], "metadata": { "anaconda-cloud": {}, "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.10.0" } }, "nbformat": 4, "nbformat_minor": 4 }