diff --git a/examples/dbi/dbi_gradient_descent.ipynb b/examples/dbi/dbi_gradient_descent.ipynb index dd670a1aa5..42ec0e5e9b 100644 --- a/examples/dbi/dbi_gradient_descent.ipynb +++ b/examples/dbi/dbi_gradient_descent.ipynb @@ -59,7 +59,7 @@ "output_type": "stream", "text": [ "OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\n", - "[Qibo 0.2.9|INFO|2024-06-04 16:43:26]: Using qibojit (numba) backend on /CPU:0\n" + "[Qibo 0.2.9|INFO|2024-06-05 09:24:34]: Using qibojit (numba) backend on /CPU:0\n" ] }, { @@ -102,11 +102,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "[Qibo 0.2.9|WARNING|2024-06-04 16:43:26]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n", - "[Qibo 0.2.9|WARNING|2024-06-04 16:43:26]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n", - "[Qibo 0.2.9|WARNING|2024-06-04 16:43:26]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n", - "[Qibo 0.2.9|WARNING|2024-06-04 16:43:26]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n", - "[Qibo 0.2.9|WARNING|2024-06-04 16:43:26]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n" + "[Qibo 0.2.9|WARNING|2024-06-05 09:24:35]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n", + "[Qibo 0.2.9|WARNING|2024-06-05 09:24:35]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n", + "[Qibo 0.2.9|WARNING|2024-06-05 09:24:35]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n", + "[Qibo 0.2.9|WARNING|2024-06-05 09:24:35]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n", + "[Qibo 0.2.9|WARNING|2024-06-05 09:24:35]: Calculating the dense form of a symbolic Hamiltonian. This operation is memory inefficient.\n" ] } ], @@ -119,46 +119,130 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import time" + ] + }, + { + "cell_type": "code", + "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "28.220450268812606\n", - "28.223132798914378\n", - "28.093794720905777\n", - "28.100809863185763\n", - "28.057596740621463\n" + "28.206198951111503\n", + "time: 0.11498689651489258\n", + "28.144041319221383\n", + "time: 0.439410924911499\n", + "28.065227127350624\n", + "time: 0.7849717140197754\n", + "27.930760882541414\n", + "time: 1.1270809173583984\n", + "27.769688464665336\n", + "time: 1.4545462131500244\n", + "27.44839471035425\n", + "time: 1.829698085784912\n", + "27.090730050419577\n", + "time: 2.202849864959717\n", + "26.941092910253285\n", + "time: 2.6179568767547607\n" ] } ], "source": [ "# Use training to find a better d\n", - "train_space = np.linspace(1,501, 5)\n", + "train_space = np.linspace(1,1001, 8)\n", + "a = []\n", + "t = []\n", "for train_epochs in train_space:\n", + " t0 = time.time()\n", " d_train_coef, d_train, s_train = gradient_descent_step(dbi, int(train_epochs), d_coef_pauli, ParameterizationTypes.pauli, pauli_operator_dict)\n", - " print(dbi.loss(s_train, d_train))" + " print(dbi.loss(s_train, d_train))\n", + " a.append(dbi.loss(s_train, d_train))\n", + " print(\"time:\", time.time()-t0)\n", + " t.append(time.time()-t0)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "27.898907073320544\n" + "28.171401276160193\n", + "time: 0.1944119930267334\n", + "28.191844384679904\n", + "time: 0.3255119323730469\n", + "28.166377416035623\n", + "time: 0.47450780868530273\n", + "28.185332757113756\n", + "time: 0.6087417602539062\n", + "28.16638555335546\n", + "time: 0.7880942821502686\n" ] } ], "source": [ - "d_train_coef, d_train, s_train = gradient_descent_step(dbi, int(train_epochs), d_coef_pauli, ParameterizationTypes.pauli, pauli_operator_dict)\n", - "print(dbi.loss(s_train, d_train))" + "max_evals_space = np.linspace(100, 500, 5)\n", + "b = []\n", + "tt = []\n", + "for max_evals in max_evals_space:\n", + " t0 = time.time()\n", + " d_train_coef, d_train, s_train = gradient_descent(dbi, d_coef_pauli, ParameterizationTypes.pauli, pauli_operator_dict, max_evals=max_evals)\n", + " print(dbi.loss(s_train, d_train))\n", + " b.append(dbi.loss(s_train, d_train))\n", + " print(\"time:\", time.time()-t0)\n", + " tt.append(time.time()-t0)" ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Off-diagonal norm')" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGwCAYAAABB4NqyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABmpUlEQVR4nO3dd1yV5f/H8ddhix4QVIaCQm7EPUrDVaaWWWZ9M7+lWbYMd5nZtqGVI7V+2vimDXOUaWmWuVGcuTUVF4oDxAmIsu/fHyRFgHJY5wDv5+NxP/Tc5zrX+ZzbW86b+77u6zYZhmEgIiIiUo7YWbsAERERkZKmACQiIiLljgKQiIiIlDsKQCIiIlLuKACJiIhIuaMAJCIiIuWOApCIiIiUOw7WLsAWZWRkcObMGcxmMyaTydrliIiISD4YhkFCQgLVq1fHzu7Gx3gUgHJx5swZ/P39rV2GiIiIFMDJkyfx8/O7YRsFoFyYzWYgcwO6ublZuRoRERHJj/j4ePz9/bO+x29EASgX1097ubm5KQCJiIiUMvkZvqJB0CIiIlLuKACJiIhIuaMAJCIiIuWOxgCJiEiRSk9PJzU11dplSBnl5OR000vc80MBSEREioRhGMTExHD58mVrlyJlmJ2dHYGBgTg5ORWqHwUgEREpEtfDj5eXF66urppIVorc9YmKo6OjqVmzZqH2MQUgEREptPT09KzwU6VKFWuXI2VYtWrVOHPmDGlpaTg6Oha4Hw2CFhGRQrs+5sfV1dXKlUhZd/3UV3p6eqH6UQASEZEio9NeUtyKah/TKbASlJ5hsDXyIrEJSXiZXWgT6Im9nX5YiIiIlDQFoBKybF80Y5fsJzouKWudr7sLb/YMonuwrxUrExERKX90CqwELNsXzaDZO7KFH4CYuCQGzd7Bsn3RVqpMRMT2pGcYbDp6gZ93nWbT0QukZxjWLslinTp1Yvjw4dYuI9/Wrl2LyWQqlikMTCYTP/30U5H3W1hWDUDjx4+ndevWmM1mvLy86NWrFxEREdnaXLlyhcGDB+Pn50eFChVo2LAhM2bMuGG/X3zxBe3bt8fDwwMPDw+6dOnC1q1bi/Oj5Ck9w2Dskv3k9t/3+rqxS/aXyv/gIiJFbdm+aEI+WE3fLzYzbN4u+n6xmZAPVhfbL4omk+mGy4ABAwrU78KFC3nnnXeKttgiYmvhbN26dfTs2ZPq1auXaFiyagAKCwsjNDSUzZs3s2LFCtLS0ujatSuJiYlZbUaMGMGyZcuYPXs2Bw4cYMSIEQwZMoSff/45z37Xrl1L3759WbNmDZs2baJmzZp07dqV06dPl8THymZr5MUcR37+yQCi45LYGnmx5Ir6t4x0iFwPexdk/plRuJH1IiIFYY2j5dHR0VnLlClTcHNzy7Zu6tSp2drnd4ZrT09PzGZzkddbFiUmJtK0aVM++eSTEn1fqwagZcuWMWDAABo1akTTpk2ZNWsWUVFRbN++PavNpk2bePzxx+nUqRMBAQE888wzNG3alG3btuXZ73fffcfzzz9Ps2bNaNCgAV988QUZGRmsWrWqJD5WNrEJeYeff/o07Chhh86RlFrC4WP/YpgSDF/fCz8OzPxzSnDm+tJIYU7EZhiGwdWUtHwtCUmpvLn4zxseLX9r8X4SklLz1Z9h5O+ouo+PT9bi7u6OyWTKepyUlETlypX5/vvv6dSpEy4uLsyePZsLFy7Qt29f/Pz8cHV1pXHjxsydOzdbv/8+yhIQEMC4ceN48sknMZvN1KxZk88///yGtXXq1IkhQ4YwfPhwPDw88Pb25vPPPycxMZEnnngCs9lM7dq1+e2337K9bv/+/dxzzz1UqlQJb29v+vXrx/nz5wEYMGAAYWFhTJ06Neso1/Hjx7Neu337dlq1aoWrqyvt2rXLcVZmxowZ1K5dGycnJ+rXr8+3336b7fnDhw/ToUMHXFxcCAoKYsWKFTf9N7j77rt599136d27903bFiWbGgQdFxcHZCbn60JCQli8eDFPPvkk1atXZ+3atRw6dChHKr+Rq1evkpqamq3ff0pOTiY5OTnrcXx8fAE/QU5eZpd8tQs7dI6wQ+dwcbTjtluq0LFeNTrWq0Zg1YrFd1np/sXwfX/494+c+OjM9Q9/A0H3Fc97F4f9i2HZaIg/8/c6t+rQ/YPS9TlEyohrqekEvfF7kfRlADHxSTR+a3m+2u9/uxuuTkXzFTd69GgmTZrErFmzcHZ2JikpiZYtWzJ69Gjc3NxYunQp/fr145ZbbuHWW2/Ns59Jkybxzjvv8Morr7BgwQIGDRpEhw4daNCgQZ6v+frrr3nppZfYunUr8+fPZ9CgQfz000888MADvPLKK3z00Uf069ePqKgoXF1diY6OpmPHjjz99NNMnjyZa9euMXr0aB5++GFWr17N1KlTOXToEMHBwbz99ttA5sSC10PQq6++yqRJk6hWrRrPPfccTz75JBs2bABg0aJFDBs2jClTptClSxd++eUXnnjiCfz8/OjcuTMZGRn07t2bqlWrsnnzZuLj423qVNu/2UwAMgyDkSNHEhISQnBwcNb6adOm8fTTT+Pn54eDgwN2dnb873//IyQkJN99v/zyy9SoUYMuXbrk+vz48eMZO3ZsoT9DbtoEeuLr7kJMXFKuv9mYgMqujtwV5M26Q+eJiU9ibcQ51kacA6Cmp2tWGGpbuwoVnYvonywjPTMs5Pn7lgmWvQwNeoCdfdG8Z3Eqa2FORGzG8OHDcxydePHFF7P+PmTIEJYtW8YPP/xwwwB0zz338PzzzwOZoeqjjz5i7dq1NwxATZs25bXXXgNgzJgxvP/++1StWpWnn34agDfeeIMZM2awZ88ebrvtNmbMmEGLFi0YN25cVh8zZ87E39+fQ4cOUa9ePZycnHB1dcXHxyfH+7333nt07NgRyPzu7NGjB0lJSbi4uDBx4kQGDBiQ9RlGjhzJ5s2bmThxIp07d2blypUcOHCA48eP4+fnB8C4ceO4++678964VmQzAWjw4MHs2bOH8PDwbOunTZvG5s2bWbx4MbVq1WLdunU8//zz+Pr65hlo/unDDz9k7ty5rF27FheX3I/GjBkzhpEjR2Y9jo+Px9/fv3Af6C/2dibe7BnEoNk7MJH96/n6cZ3xvRvTPdgXwzA4dPYKYYdiCTt0jq2RF4m6eJVvN5/g280ncLK3o3Wgx1+ByIt63pUsPzpkGHDpOOz4JvuRkpwNIf40nNgAgR0se4+SVtbCnEgZUcHRnv1vd8tX262RFxkw64+btvvqida0Ccz9aP6/37uotGrVKtvj9PR03n//febPn8/p06ezziJUrFjxhv00adIk6+/XT7XFxsbm+zX29vZUqVKFxo0bZ63z9vYGyOpn+/btrFmzhkqVKuXo6+jRo9SrVy/f7+fr65vVd82aNTlw4ADPPPNMtva333571hmZAwcOULNmzazwA9C2bdsbvp812UQAGjJkCIsXL2bdunXZNty1a9d45ZVXWLRoET169AAy/3F27drFxIkTbxqAJk6cyLhx41i5cmW2f9R/c3Z2xtnZuWg+TC66B/sy47EWOeYB8vnXPEAmk4n6Pmbq+5h5pkNtEpPT2HT0AusiYrh0MAxTwllij1Xm/SMNGPfrQXzdXbKODt1etypuLrncEyU9FaL3wMnNELUZTm6BK2fzX/z8flC3KwSEQGB78AgEW5vp9cTGfIa5jZmfQURKhMlkyvdpqPZ1q930aLmPuwvt61Yr8Qlk/x1sJk2axEcffcSUKVNo3LgxFStWZPjw4aSkpNywn3/ft8pkMpGRkWHxa/657vovwdf7ycjIoGfPnnzwwQc5+roeaPL7fv/u+5/rrjMMI2tdbuOubHlmcKsGIMMwGDJkCIsWLWLt2rUEBgZmez41NZXU1FTs7LKP1ba3t7/pTjNhwgTeffddfv/99xzp3Rq6B/tyV5CPRTNBV3R2oAtb6BI5GpLPQObtT7hgX5U3U/rzS1wr5v1xknl/nMTezkTLmh50vcWJLuYT1LqyF9OpLXB6B6Rdy96xnSN43gLnI3K+6b8lXYa932cuAG41IKD934Goci3LAlFGemYQuXIWKnlDrXYFOypzJTbzs53ZAQeX5u81v7+SeTSrar2/l4pFfNPGovp8IuVMfo6Wv9kzyCZmz1+/fj33338/jz32GJAZEA4fPkzDhg2tXBm0aNGCH3/8kYCAABwccv+Kd3JyKtB9tBo2bEh4eDj9+/fPWrdx48aszx0UFERUVBRnzpyhevXqQOaFTLbKqgEoNDSUOXPm8PPPP2M2m4mJiQHA3d2dChUq4ObmRseOHRk1ahQVKlSgVq1ahIWF8c033zB58uSsfvr370+NGjUYP348kHna6/XXX2fOnDkEBARk9VupUqVcDwuWFHs7E21rW/CFm8e4lirpF/jY/iMGdfyYNZe8uHJ0AzWv7KHVmUPUi8l5qX+Giwd2NW8F/1uh5m1QvTnYO2Ve7RUfnaP/TCZw84X7/g+iNsHx9XBqW+aRlD3zMhcAd/9/BaKaN/48BRmknBQPZ3Zmhp3TOzL/Hncy7/Z5idmTufxTBc+/wlDdfwSjupnBzt7C/x4ahC1SKPk9Wm5tderU4ccff2Tjxo14eHgwefJkYmJibCIAhYaG8sUXX9C3b19GjRpF1apVOXLkCPPmzeOLL77A3t6egIAAtmzZwvHjx6lUqVKeFwj926hRo3j44Ydp0aIFd955J0uWLGHhwoWsXLkSgC5dulC/fn369+/PpEmTiI+P59VXX71pv1euXOHIkSNZjyMjI9m1axeenp7UrHmD75RCsmoAuj6hYadOnbKtnzVrVtbkU/PmzWPMmDE8+uijXLx4kVq1avHee+/x3HPPZbWPiorKdpRo+vTppKSk8NBDD2Xr98033+Stt94qls9S5G4yrsUENNowlEbGX0fC/vEvGWn48kd6PbYb9diWUY/IZF+aXPKkY7VqdDJVo4m9S+ZvUd0/+Ctg5fH7VvcPoM4dmQtAytXMU2jHwzMD0entmUFk95zMBTIDUECHvwOR+1+nNPM7SDk1Cc7uyww6p7dnhp7zh3PZDqbMsFKjJVRvBusmQOL5PLaXCVyrQKfRcOEonD+U2WfcSbh2MfP04MnN2V9i5whVaucMRlXqgotbzrfQIGyRIlGQo+Ul7fXXXycyMpJu3brh6urKM888Q69evbKuZLam6tWrs2HDBkaPHk23bt1ITk6mVq1adO/ePet78sUXX+Txxx8nKCiIa9euERkZma++e/XqxdSpU5kwYQJDhw4lMDCQWbNmZX2H29nZsWjRIgYOHEibNm0ICAhg2rRpdO/e/Yb9btu2jc6dO2c9vj4m9/HHH+err76yfCPkk8nI72QJ5Uh8fDzu7u7ExcXh5pbLl11JiFyfOSfPzdg5ZIaA60d3/G8lxdmTbccvZl1afzAmIdtLKrs60r5uNTrVq0YX0xbc1772r6MWNaD7+zf/wk5JzBxXlBWIdoDxr8OqHoGZp4EifoVrl/Luy7FiZuCIPQAZuUw05l4TajT/K/C0AN+m2YNIVgCBXMNcbgEkJTF7ILr+54XDkHaD+ZvMvn+Hoar1Mk8nLh58g7FVpswjQcP36nSYlFlJSUlERkYSGBiY5wUnIkXhRvuaJd/fCkC5sIkAtHdB5sSEN9NrBjT77w2bRMddY91fYWj94fMkJKVle76xb0Ue9T1NqyqpBATcgkPg7QX7ok5OgKgtmWHo+Ho4sytnIMoP1yp/B50aLTL/rFTt5q/L9RRUPsPcP2VkQPypnMHo/CHLBpD/2+O/aBC2lFkKQFJSiioA2cRVYJKLSt75a+d+88v1fd0r0Kd1Tfq0rklaegY7T14mLCIzEO09Hcfe6ERejq4MgNn5GiF1d2VeXVa/Gr7uFfJfs7MZ6nbJXCBz7E7UZvjjf3A4H5Oh3foc3PZ85mm0glw5EHRf5qXuhR2EbGeXWUPlmlDnX1caXrsMF45kD0Wnt0NCPqboL0x4EhGRIqUAZKtqtcs8bXLDQcrVM9tZwMHejtYBnrQO8OTFbvU5l5DM+sOZYWjdoXNcuprKb/ti+G1f5sDx+t5mOtbPvNS+VYAHzg43DxPpGcY/zt+3pE1bF+zzE4Aa3AsetSz6PDnY2RfvUZYKlcGvVeZyXX5PV+Y31IqISLFTALJVdvb5GKT8fqHHlFQzO9O7hR+9W/iRnmGw93TcX0eHYtl18jIRZxOIOJvA5+uO4epkT7vaVbImYqxZxTVHf8v2Ree4gqOGmyMrK/hQ4dpZijLM2YxiCqsiIlJ8NAYoFzYxBui6ohrXUgCXElMIP3I+azD1uYTkbM/fUrUiHf46Vdb2liqsjYhl0OwduV2vRTe7rcxwmvpXdMvnIOXSpCCDsEXKEI0BkpKiQdDFyKYCENjE5HoZGQYHYuIJO5R5n7IdJy6RlvH3ruNkbwKTiZS03CeoNAF9Ku1ivOtsTFYIcyXCimFVxNoUgKSkKAAVI5sLQDYoPimVjUcuZN63LOIcZ+JucNn4P8wd2Jq2DhFld6ZkGwirItagACQlRVeBiVW5uTjSPdiH7sE+GIbB5+uOMf63gzd9XcyVVGhehi8FL+5B2CIiUiTsbt5E5MZMJhNN/Crnq+1bi//kzZ/3sTXyIhkZOvgoImVTp06dGD58uLXLyLe1a9diMpm4fPlykfdtMpn46aefirzfwlIAkiLRJtATX3cXbjR7jwmIu5bK15tO8PBnm2j7/ireWvwn244rDInIP2SkZ04vsXdB5p8ZBZhQNZ9MJtMNl+u3ZbLUwoULeeedd4q22CJia+Fs/PjxtG7dGrPZjJeXF7169SIiIh836y4knQKTIpGfOzlP69ucSs4O/LInmuX7Yzgbn8xXG4/z1cbj+Li5cE9jX3o08aW5f2XsbOi+PyJSgkr4psLR0X9PYjp//nzeeOONbF++FSpknww2NTUVR0fHm/ab3xuMCoSFhREaGkrr1q1JS0vj1VdfpWvXruzfv5+KFSsW2/vqCJAUmet3cvZxzz4ozcfdhRmPtaBn0+p0buDFpIebsu21Lnz5eCt6N6+B2dmBmPgkZm6I5MEZGwn5YDXv/rKfXScvozH6IuXI9ekk/hl+4O+bCu9fXORv6ePjk7W4u7tjMpmyHiclJVG5cmW+//57OnXqhIuLC7Nnz+bChQv07dsXPz8/XF1dady4MXPnzs3W77+PsgQEBDBu3DiefPJJzGYzNWvW5PPPP79hbZ06dWLIkCEMHz4cDw8PvL29+fzzz0lMTOSJJ57AbDZTu3Ztfvvtt2yv279/P/fccw+VKlXC29ubfv36cf78eQAGDBhAWFgYU6dOzTrKdfz48azXbt++nVatWuHq6kq7du1yHImZMWMGtWvXxsnJifr16/Ptt99me/7w4cN06NABFxcXgoKCWLFixU3/DZYtW8aAAQNo1KgRTZs2ZdasWURFRbF9+/abvrYwFICkSHUP9iV89B3Mffo2pj7SjLlP30b46DvoHuybrZ2zgz13NvRmcp9m/PFaF77o34pezapT0cmeM3FJ/C88kl7/t4GQD9Yw/tcD7DmlMCRS6hhG5k2H87MkxcNvL5H7ZKJ/rVs2OrNdfvorwp8Xo0ePZujQoRw4cIBu3bqRlJREy5Yt+eWXX9i3bx/PPPMM/fr1Y8uWLTfsZ9KkSbRq1YqdO3fy/PPPM2jQIA4evPHFI19//TVVq1Zl69atDBkyhEGDBvGf//yHdu3asWPHDrp160a/fv24evUqkHlEq2PHjjRr1oxt27axbNkyzp49y8MPPwzA1KlTadu2LU8//TTR0dFER0fj7//3LZVeffVVJk2axLZt23BwcODJJ5/Mem7RokUMGzaMF154gX379vHss8/yxBNPsGbNGgAyMjLo3bs39vb2bN68mU8//ZTRo0dbvL3j4uKA4j+Kpsvgc6HL4K0nKTWdsEPnWLonmpUHznI15e9z//6eFejRuDr3NvGlUXU3TAW5X5iIFItcL01OSYRx1a1T0CtnwMmy0ydfffUVw4cPzxoIfPz4cQIDA5kyZQrDhg274Wt79OhBw4YNmThxIpB59KZZs2ZMmTIFyDwC1L59+6wjJoZh4OPjw9ixY3nuuedy7bNTp06kp6ezfv16ANLT03F3d6d379588803AMTExODr68umTZu47bbbeOONN9iyZQu///737YdOnTqFv78/ERER1KtXL0dtkDkIunPnzqxcuZI777wTgF9//ZUePXpw7do1XFxcuP3222nUqFG2I1cPP/wwiYmJLF26lOXLl3PPPfdw/Phx/Pz8gMyjO3fffTeLFi2iV69eN/03MAyD+++/n0uXLmV97n/TZfBSJrk42tOtkQ/dGvlwLSWdsEOx/LInmlUHYjl58Rqfhh3l07Cj1KriSo+/xgwF+SoMiUjxadWqVbbH6enpvP/++8yfP5/Tp0+TnJxMcnLyTcerNGnSJOvv10+1xcbG5vs19vb2VKlShcaNG2et8/bOvMfg9X62b9/OmjVrqFSpUo6+jh49Sr169fL9fr6+vll916xZkwMHDvDMM89ka3/77bczdepUAA4cOEDNmjWzwg9A27Ztb/h+/zZ48GD27NlDeHi4Ra8rCAUgsVkVnOzpHuxL92BfrqaksebgOZbuPcPqg7GcuHCV6WuPMn3tUQKrVswKQw18zApDIrbC0TXzSEx+nNgI3z1083aPLsjfffUcc96rsKD+HWwmTZrERx99xJQpU2jcuDEVK1Zk+PDhpKSk3Likfw2eNplMZGTkPnv+jV7zz3XXf95d7ycjI4OePXvywQcf5OjreqDJ7/v9u+9/rrvOMIysdbmdULLk5/GQIUNYvHgx69atyxaiiosCkJQKrk4O9GiSGXISk9NYfTCWpXuiWRMRS+T5RD5Zc4RP1hyhdrWK9GiSeZqsnrfZ2mWLlG8mU/5PQ9W+I383Fa59h9VnV1+/fj33338/jz32GJAZEA4fPkzDhg2tWhdAixYt+PHHHwkICMDBIfeveCcnJ9LTLZ9aoGHDhoSHh9O/f/+sdRs3bsz63EFBQURFRXHmzBmqV8889blp06ab9msYBkOGDGHRokWsXbuWwMBAi2srCA2CllKnorMDPZtW59N+Ldn++l1MfaQZXYO8cXKw4+i5RKatOkzXj9Zx1+Qwpqw8xJHYBGuXLCI3Y2efeak7QI4Zxf563P19q4cfgDp16rBixQo2btzIgQMHePbZZ4mJibF2WQCEhoZy8eJF+vbty9atWzl27BjLly/nySefzAo9AQEBbNmyhePHj3P+/PmbHoW6btSoUXz11Vd8+umnHD58mMmTJ7Nw4UJefPFFALp06UL9+vXp378/u3fvZv369bz66qv5qnn27NnMmTMHs9lMTEwMMTExXLt2reAbIh8UgKRUq+TswP3NavB5/1Zsf60LU/o0o0tDL5zs7Tgce4UpKw/TZfI6un20jmmrDnP03BVrlywieQm6Dx7+Btz+darGrXrmehu5qfDrr79OixYt6NatG506dcLHxydfA3xLQvXq1dmwYQPp6el069aN4OBghg0bhru7O3Z2mV/5L774Ivb29gQFBVGtWjWioqLy1XevXr2YOnUqEyZMoFGjRnz22WfMmjWLTp06AWBnZ8eiRYtITk6mTZs2PPXUU7z33ns37XfGjBnExcXRqVMnfH19s5b58+cXeDvkh64Cy4WuAiv94q6lsnL/WZbujWb94XOkpv+9mzf0dePeJr7c09iXwKrFN8mWSHlSpDdD1U2F5QZ0FZjIDbhXcOTBln482NKPuKupLN8fw9K90YQfPs+B6HgORMcz4fcIGlV3yxxb1NiXWlUUhkRsgm4qLCVAAUjKPHdXR/7Typ//tPLn8tUUlv95ll/2RrPhyHn+PBPPn2fi+XBZBI1ruGeFIX/PoruCREREbI8CkJQrlV2deLi1Pw+39udiYgrL/8w8MrTx6AX2no5j7+k43v/tIE39MsPQPY198fNQGBIRKWsUgKTc8qzoxCNtavJIm5pcuJLM73+e5Zc9Z9h87AK7T8Wx+1Qc4349SDP/ylljhqpXrnDDPtMzDLZGXiQ2IQkvswttAj2x141dRURsjgKQCFClkjP/vbUm/721JucSkln2ZwxL95xhS+RFdp28zK6Tl3l36QFa1vKgR+PMMPTvm74u2xfN2CX7iY5Lylrn6+7Cmz2DctwLTaSs0nU1UtyKah/TVWC50FVgcl1sQhLL9sXwy55o/jh+Mdv9FVsHZIahuxv7sjPqEoNm78gxfdv1Yz8zHmuhECRlWnp6OocOHcLLy4sqVapYuxwpw+Li4jhz5gx16tTJMVO2Jd/fCkC5UACS3JyNT+K3vdEs3RvNH8cvZXvOyd5ESnru/5VMgI+7C+Gj79DpMCnToqOjuXz5Ml5eXri6uuq2NFLkMjIyOHPmDI6OjtSsWTPHPqbL4EWKgbebCwNuD2TA7YFEx13j172Zp8l2RF3OM/xA5qT+0XFJbI28SNva+s1Yyi4fHx+Am97gU6Qw7Ozscg0/llIAEikAX/cKDAwJZGBIIF9tjOStxftv+prYhKSbthEpzUwmE76+vnh5eZGammrtcqSMcnJyyprVujAUgEQKqb53/k6TepkLOTuuSClhb2+Pvb1mbhbbpnuBiRRSm0BPfN1dcty+8Z/sTHDiYiIZGRpyJyJiCxSARArJ3s7Emz2DgJz3sL4uw4CXf9xLr+kb2H7iUh6tRESkpCgAiRSB7sG+zHisRY65gXzdXfi4b3NevachlZwd2HMqjgdnbGT4vJ1Ex12zUrUiIqLL4HOhy+CloG40E/S5hGQm/h7B99tPYhhQwdGe0M61ear9Lbg4aryEiEhhaR6gQlIAkuK091Qcby35M+tUmJ9HBV7r0ZBujXw0b4qISCEoABWSApAUN8MwWLz7DON/PUhMfObl8W1vqcIbPYNo6Kt9TkSkIBSACkkBSErK1ZQ0Pl17lM/WHSM5LQM7Ezx6ay1G3lUPj4pO1i5PRKRUUQAqJAUgKWknL17l/d8OsnRvNADuFRwZ0aUuj91WCwd7XasgIpIfCkCFpAAk1rLp6AXGLvmTgzEJANTzrsQb9zYipG5VK1cmImL7FIAKSQFIrCk9w2Du1igmLY/g0tXM2wncFeTNaz0aUqtKRStXJyJiuxSACkkBSGxB3NVUpqw6xDebTpCeYeBkb8fA9oGEdq5DJWfdxUZE5N8UgApJAUhsyeGzCbz9y37WHz4PgJfZmdHdG/BA8xrY2emyeRGR6yz5/rbq6Mrx48fTunVrzGYzXl5e9OrVi4iIiGxtrly5wuDBg/Hz86NChQo0bNiQGTNm3LTvH3/8kaCgIJydnQkKCmLRokXF9TFEilVdbzPfPNmG//VvRa0qrsQmJPPCD7t5YMZGdkbpthoiIgVh1QAUFhZGaGgomzdvZsWKFaSlpdG1a1cSExOz2owYMYJly5Yxe/ZsDhw4wIgRIxgyZAg///xznv1u2rSJPn360K9fP3bv3k2/fv14+OGH2bJlS0l8LJEiZzKZ6BLkzfIRHXj57gZUdLJn98nLPDB9IyO/38XZv+YSEhGR/LGpU2Dnzp3Dy8uLsLAwOnToAEBwcDB9+vTh9ddfz2rXsmVL7rnnHt55551c++nTpw/x8fH89ttvWeu6d++Oh4cHc+fOvWkdOgUmti42PokPf49gwfZTALg62RPauQ4DQwJ1Ww0RKbdKzSmwf4uLiwPA09Mza11ISAiLFy/m9OnTGIbBmjVrOHToEN26dcuzn02bNtG1a9ds67p168bGjRtzbZ+cnEx8fHy2RcSWebm5MPE/Tfk59Haa16zM1ZR0JvweQdeP1vH7nzHY0O81IiI2yWYCkGEYjBw5kpCQEIKDg7PWT5s2jaCgIPz8/HBycqJ79+5Mnz6dkJCQPPuKiYnB29s72zpvb29iYmJybT9+/Hjc3d2zFn9//6L5UCLFrKl/ZX58rh0f9WmKt5szURev8uy323nsyy0cOptg7fJERGyWzQSgwYMHs2fPnhynqKZNm8bmzZtZvHgx27dvZ9KkSTz//POsXLnyhv39+6aShmHkeaPJMWPGEBcXl7WcPHmycB9GpATZ2Zl4oLkfq1/oxODOdXBysGPDkQvcPXU9b/68j8tXU6xdooiIzbGJyUSGDBnC4sWLWbduHX5+flnrr127xiuvvMKiRYvo0aMHAE2aNGHXrl1MnDiRLl265Nqfj49PjqM9sbGxOY4KXefs7Iyzs3MRfRoR66jo7MCL3erzcCt/xv16gGV/xvD1phP8vPsML9xVj75tauq2GiIif7HqT0PDMBg8eDALFy5k9erVBAYGZns+NTWV1NRU7Oyyl2lvb09GRkae/bZt25YVK1ZkW7d8+XLatWtXdMWL2KiaVVz5tF9LvnvqVup7m7l8NZXXf/6THtPC2XjkvLXLExGxCVY9AhQaGsqcOXP4+eefMZvNWUdt3N3dqVChAm5ubnTs2JFRo0ZRoUIFatWqRVhYGN988w2TJ0/O6qd///7UqFGD8ePHAzBs2DA6dOjABx98wP3338/PP//MypUrCQ8Pt8rnFLGG2+tUZenQkMzbaqw4RMTZBP77vy10b+TDqz0a4u/pau0SRUSsxqqXwec1JmfWrFkMGDAAyBzQPGbMGJYvX87FixepVasWzzzzDCNGjMh6fadOnQgICOCrr77K6mPBggW89tprHDt2jNq1a/Pee+/Ru3fvfNWly+ClrLl8NYWPVhxi9paozNtqONjxdPtAnu9Uh4q6rYaIlBG6FUYhKQBJWRURk8Dbv/zJhiMXAPB2c+bluxvQq1mNPH8hEREpLRSACkkBSMoywzBYvv8s7y7dz8mL1wBoUbMyb/ZsRFP/ytYtTkSkEBSACkkBSMqDpNR0vgyP5P/WHOFqSjoAD7X046Xu9fEyu1i5OhERyykAFZICkJQnZ+OT+GDZQRbuOA1ARSd7htxZlyduD8DZQbfVEJHSQwGokBSApDzaEXWJsUv2s/vkZQACqrjyWo8g7mzopfFBIlIqKAAVkgKQlFcZGQaLdp7m/WUHOZeQDED7ulV5494g6nqbrVydiMiNKQAVkgKQlHdXktP4vzVH+HJ9JCnpGdjbmejfthbD76yHu6ujtcsTEcmVAlAhKQCJZDpxIZF3lx5gxf6zAHi4OvJC1/r0bVMTe7vM02LpGQZbIy8Sm5CEl9mFNoGeWc+JiJQkBaBCUgASyW794XO8vWQ/h2OvANDAx8xb9zXi8tUUxi7ZT3RcUlZbX3cX3uwZRPdgX2uVKyLllAJQISkAieSUlp7B7M0nmLziEPFJaXm2u37sZ8ZjLRSCRKREWfL9rVtDi0i+ONjbMeD2QNaO6sx/b/XPs93136jGLtlPeoZ+vxIR26QAJCIW8azoRM8mNW7YxgCi45LYGnmxZIoSEbGQApCIWCw2IenmjSxoJyJS0hSARMRi+b1Vhm6pISK2SgFIRCzWJtATX3cXbnSxuwk4/9dkiiIitkYBSEQsZm9n4s2eQQB5hiADGDJvJy//uIerKXlfNSYiYg0KQCJSIN2DfZnxWAt83LOf5vJ1d+GT/zZncOc6mEww74+T9Pw4nP1n4q1UqYhITpoHKBeaB0gk/240E/TGo+cZMX8XZ+OTcbK3Y8w9DRjQLkA3VxWRYqGJEAtJAUik6FxMTOGlBXtYeSDzdhp3NPBiwkNNqFLJ2cqViUhZo4kQRcRmeFZ04ov+LXnn/kY4Odix+mAsd09dz4Yj561dmoiUYwpAIlLsTCYT/doGsHjw7dT1qkRsQjKPfbmF9387SGp6hrXLE5FySAFIREpMAx83Fg8O4dFba2IY8GnYUR76dBMnLiRauzQRKWcUgESkRFVwsue9Bxrz6WMtcK/gyO6Tl+kxLZyfdp62dmkiUo4oAImIVXQP9uW3Ye1pE+DJleQ0hs/fxcjvd3ElWXMGiUjxUwASEaupXrkCc5+5jRFd6mFngoU7TnPvtPXsOXXZ2qWJSBmnACQiVmVvZ2JYl7rMf7YtNSpX4PiFq/SevpHPwo6SkaFZOkSkeCgAiYhNaB3gya9D23NPYx/SMgzG/3aQx2dt1R3lRaRYKACJiM1wd3Xk//7bgvd7N8bF0Y71h89z95T1rImItXZpIlLGKACJiE0xmUw80qYmvwwJoYGPmQuJKTwx6w/e+WU/yWnp1i5PRMoIBSARsUl1vMz8FHo7A9oFAPBleCS9p2/k6Lkr1i1MRMoEBSARsVkujva8dV8j/te/FR6ujvx5Jp57p4Xz/baT6DaGIlIYCkAiYvO6BHmzbHgH2tWuwrXUdF5asIeh83YRn5Rq7dJEpJRSABKRUsHbzYVvB97KS93rY29nYsnuM9wzdT3bT1yydmkiUgopAIlIqWFvZ+L5TnVY8Fxb/D0rcOrSNR7+bBOfrD5MuuYMEhELKACJSKnTvKYHS4e2576m1UnPMJi4/BCP/m8zMXGaM0hE8kcBSERKJTcXR6Y+0oyJ/2mKq5M9m49dpPvUdazYf9bapYlIKaAAJCKllslk4qGWfvwyJITgGm5cvprK099s442f95GUqjmDRCRvCkAiUurdUq0SCwfdztPtAwH4ZtMJev3fBg6fTbByZSJiqxSARKRMcHKw49UeQXz9ZBuqVnLiYEwC934czndbTmjOIBHJQQFIRMqUjvWq8duwDnSoV43ktAxeXbSPQbN3cPlqirVLExEbogAkImVONbMzXw1ozWs9GuJob2LZnzHcPXU9W45dsHZpImIjFIBEpEyyszPxVPtbWDjodgKrViQ6Lom+X2xm8opDpKVnWLs8EbEyBSARKdMa+7nzy5AQ/tPSjwwDpq06zCOfb+bUpavWLk1ErMiqAWj8+PG0bt0as9mMl5cXvXr1IiIiIlsbk8mU6zJhwoQb9j1lyhTq169PhQoV8Pf3Z8SIESQlaZI0kfKoorMDE/7TlKmPNMPs7MC2E5e4e+p6lu6JtnZpImIlVg1AYWFhhIaGsnnzZlasWEFaWhpdu3YlMTExq010dHS2ZebMmZhMJh588ME8+/3uu+94+eWXefPNNzlw4ABffvkl8+fPZ8yYMSXxsUTERt3frAa/DmtP85qVSUhKI3TODsYs3MPVlDRrlyYiJcxk2ND1oefOncPLy4uwsDA6dOiQa5tevXqRkJDAqlWr8uxn8ODBHDhwIFubF154ga1bt7J+/fqb1hEfH4+7uztxcXG4ublZ/kFExKalpmcwZeUhpq89imFA7WoV+bhvC4Kq6/+7SGlmyfe3TY0BiouLA8DT0zPX58+ePcvSpUsZOHDgDfsJCQlh+/btbN26FYBjx47x66+/0qNHj1zbJycnEx8fn20RkbLL0d6OUd0a8N3AW/F2c+bouUR6/d8GvtoQqTmDRMqJAh0BOn36NBs2bCA2NpaMjOxXUwwdOrRAhRiGwf3338+lS5fyPErz4Ycf8v7773PmzBlcXFxu2N/HH3/MCy+8gGEYpKWlMWjQIKZPn55r27feeouxY8fmWK8jQCJl38XEFF5asJuVB2IBuLOBFx8+1IQqlZytXJmIWMqSI0AWB6BZs2bx3HPP4eTkRJUqVTCZTH93ZjJx7NixAhUdGhrK0qVLCQ8Px8/PL9c2DRo04K677uLjjz++YV9r167lkUce4d133+XWW2/lyJEjDBs2jKeffprXX389R/vk5GSSk5OzHsfHx+Pv768AJFJOGIbBN5tO8N6vB0hJy8DL7MxHfZpxe52q1i5NRCxQrAHI39+f5557jjFjxmBnVzRn0IYMGcJPP/3EunXrCAwMzLXN+vXr6dChA7t27aJp06Y37K99+/bcdttt2a4Umz17Ns888wxXrly5ad0aAyRSPh2IjmfI3J0cib2CyQTPdazNyLvq4WhvU6MFRCQPxToG6OrVqzzyyCNFEn4Mw2Dw4MEsXLiQ1atX5xl+AL788ktatmx50/BzvcZ/12dvb49hGDq/LyJ5aujrxpLBIfRtUxPDgBlrj/LQp5uIupA5Z1B6hsGmoxf4eddpNh29QHqGfp6IlFYOlr5g4MCB/PDDD7z88suFfvPQ0FDmzJnDzz//jNlsJiYmBgB3d3cqVKiQ1S4+Pp4ffviBSZMm5dpP//79qVGjBuPHjwegZ8+eTJ48mebNm2edAnv99de57777sLe3L3TdIlJ2VXCyZ3zvxnSoW5XRP+5h98nL3DNtPQ+38uO3fTFEx/09n5ivuwtv9gyie7CvFSsWkYKw+BRYeno69957L9euXaNx48Y4Ojpme37y5Mn5f/N/jB/6p1mzZjFgwICsx59//jnDhw8nOjoad3f3HO07depEQEAAX331FQBpaWm89957fPvtt5w+fZpq1arRs2dP3nvvPSpXrnzTunQKTEQATl++xvB5O/nj+KVcn7/+E2zGYy0UgkRsQLGOAXrnnXd48803qV+/Pt7e3jkGQa9evbpgVdsQBSARuS45NZ2W767kSnLukyWaAB93F8JH34G9Xe6/1IlIybDk+9viU2CTJ09m5syZ2Y7QiIiUVTuiLucZfgAMIDouia2RF2lbu0rJFSYihWLxSGZnZ2duv/324qhFRMTmxCbk7x6C+W0nIrbB4gA0bNiwm87DIyJSVniZbzzpqqXtRMQ2WHwKbOvWraxevZpffvmFRo0a5RgEvXDhwiIrTkTE2toEeuLr7kJMXBJ5DZj0dXehTWDut/AREdtkcQCqXLkyvXv3Lo5aRERsjr2diTd7BjFo9g5MkGsI6tbIWwOgRUoZiwJQWloanTp1olu3bvj4+BRXTSIiNqV7sC8zHmvB2CX7s80DVMnZgSvJaczdepKHWvoTXCPnNB0iYpssvgze1dWVAwcOUKtWreKqyep0GbyI5CY9w2Br5EViE5LwMrvQqpYHz3y7jTUR5/DzqMCSwSF4VHSydpki5Vax3grj1ltvZefOnQUuTkSktLK3M9G2dhXub1aDtrWr4Ohgx5Q+zalVxZVTl64xdN5O3R5DpJSweAzQ888/zwsvvMCpU6do2bIlFStWzPZ8kyZNiqw4ERFb5+7qyGf9WvLA/21k/eHzTFwewejuDaxdlojchMWnwHK7CarJZMIwDEwmE+np6UVWnLXoFJiIWGrx7jMMnZt5dHzGoy24u7FujSFS0op1JujIyMgCFyYiUlbd17Q6e09d5ov1kbz4w27qeFWirrfZ2mWJSB4sDkBlefCziEhhjO7egH2n49l07ALPfLudnwffjpuL481fKCIlzuJB0ABHjx5lyJAhdOnShbvuuouhQ4dy9OjRoq5NRKRUcbC345P/Nqe6uwuR5xMZOX83GRoULWKTLA5Av//+O0FBQWzdupUmTZoQHBzMli1baNSoEStWrCiOGkVESo0qlZz5tF9LnBzsWHngLJ+sOWLtkkQkFxYPgm7evDndunXj/fffz7b+5ZdfZvny5ezYsaNIC7QGDYIWkcL6fttJXlqwB5MJZj7ems4NvKxdkkiZV6zzAB04cICBAwfmWP/kk0+yf/9+S7sTESmTHm7lz2O31cQwYOi8nRw/n2jtkkTkHywOQNWqVWPXrl051u/atQsvL/2GIyJy3Rv3NqJFzcokJKXx7LfbuZqSZu2SROQvFl8F9vTTT/PMM89w7Ngx2rVrh8lkIjw8nA8++IAXXnihOGoUESmVnBzsmPFYS+79OJyIswm8tGAPH/dtjsmkG6eKWJvFY4AMw2DKlClMmjSJM2fOAFC9enVGjRrF0KFDy8R/bI0BEpGi9Mfxi/T9fDNpGQav3tOQpzvcYu2SRMokS76/LQ5A/5SQkACA2Vy2JvtSABKRovbNpuO88fOf2Jlg9sBbaVenqrVLEilzinUQ9D+ZzeYyF35ERIpDv9tq0btFDTIMGDx3J6cvX7N2SSLlmsUB6OzZs/Tr14/q1avj4OCAvb19tkVERHIymUyMe6AxwTXcuJiYwqDZ20lKLf33ThQprSweBD1gwACioqJ4/fXX8fX1LRNjfkRESoKLoz2fPtaSnh+Hs+dUHK//tI8PH2qin6MiVmBxAAoPD2f9+vU0a9asGMoRESnb/Dxc+bhvC/rP3MIP20/RxL8y/W7TPRZFSprFp8D8/f0pxLhpEZFyL6RuVV7q3gCAt5f8yfYTF61ckUj5Y3EAmjJlCi+//DLHjx8vhnJERMqHZzvcQo/GvqSmGwyavYPY+CRrlyRSrlh8GbyHhwdXr14lLS0NV1dXHB0dsz1/8WLp/01Gl8GLSElITE7jgekbOHT2Cq1qeTDn6dtwcijUxbki5Zol398WjwGaMmVKQesSEZF/qOjswGf9WnHfx+FsO3GJd5fu5+37g61dlki5UKiJEMsqHQESkZK06sBZBn69DYCJ/2nKQy39rFyRSOlUYhMhiohI4d3Z0Jthd9YF4NVFe9l3Os7KFYmUfQpAIiI2YNiddbmzgRfJaRk8++12LiamWLskkTJNAUhExAbY2ZmY3KcZAVVcOX35GkPm7iAtPcPaZYmUWQpAIiI2wr2CI5/1a4Wrkz0bjlxgwvIIa5ckUmYpAImI2JD6PmY+fKgJAJ+FHWPpnmgrVyRSNuXrMvjevXvnu8OFCxcWuBgREYF7m1Rn76k4Plt3jFELdlPHqxL1fczWLkukTMlXAHJ3dy/uOkRE5B9GdavPvjNxbDhygWe/3cbPg0Nwr+B48xeKSL5oHqBcaB4gEbEFFxNT6PlxOKcvX+POBl580b8Vdna6c7xIXjQPkIhIGeBZ0YlPH2uJk4Mdqw7GMm31YWuXJFJmWHwrDIAFCxbw/fffExUVRUpK9rkqduzYUSSFiYgINPZzZ9wDjXnxh91MWXmYxjXcubOht7XLEin1LD4CNG3aNJ544gm8vLzYuXMnbdq0oUqVKhw7doy77767OGoUESnXHmrpR/+2tQAYPn8XkecTrVyRSOlncQCaPn06n3/+OZ988glOTk689NJLrFixgqFDhxIXp+nbRUSKw2s9gmhVy4OEpDSe/XYbiclp1i5JpFSzOABFRUXRrl07ACpUqEBCQgIA/fr1Y+7cuUVbnYiIAODkYMf0R1vgZXbm0NkrvPTjHnQNi0jBWRyAfHx8uHDhAgC1atVi8+bNAERGRlr8n3H8+PG0bt0as9mMl5cXvXr1IiIi+8ynJpMp12XChAk37Pvy5cuEhobi6+uLi4sLDRs25Ndff7WoPhERW+Ll5sKMx1rgaG9i6Z5oPl93zNoliZRaFgegO+64gyVLlgAwcOBARowYwV133UWfPn144IEHLOorLCyM0NBQNm/ezIoVK0hLS6Nr164kJv59fjs6OjrbMnPmTEwmEw8++GCe/aakpHDXXXdx/PhxFixYQEREBF988QU1atSw9OOKiNiUlrU8eaNnIwA+WHaQ8MPnrVyRSOlk8TxAGRkZZGRk4OCQeQHZ999/T3h4OHXq1OG5557DycmpwMWcO3cOLy8vwsLC6NChQ65tevXqRUJCAqtWrcqzn08//ZQJEyZw8OBBHB0tnzhM8wCJiC0zDINRC/awYPspPFwdWTIkBD8PV2uXJWJ1lnx/29REiEeOHKFu3brs3buX4ODgHM+fPXsWPz8/vv76a/773//m2c8999yDp6cnrq6u/Pzzz1SrVo3//ve/jB49Gnt7+xztk5OTSU5OznocHx+Pv7+/ApCI2Kyk1HT+8+km9p6OI7iGGwuea4eLY86fbyLliSUBqEDzAF2+fJmtW7cSGxtLRkZGtuf69+9fkC4xDIORI0cSEhKSa/gB+PrrrzGbzTe9N9mxY8dYvXo1jz76KL/++iuHDx8mNDSUtLQ03njjjRztx48fz9ixYwtUt4iINbg42vNpv5b0/DicfafjeXXRPib+pwkmk2aKFskPi48ALVmyhEcffZTExETMZnO2/2wmk4mLFy8WqJDQ0FCWLl1KeHg4fn5+ubZp0KABd911Fx9//PEN+6pXrx5JSUlERkZmHfGZPHkyEyZMIDo6552VdQRIREqrjUfO89iXW8gw4O37G9G/bYC1SxKxmmK9FcYLL7zAk08+SUJCApcvX+bSpUtZS0HDz5AhQ1i8eDFr1qzJM/ysX7+eiIgInnrqqZv25+vrS7169bKd7mrYsCExMTE5Zq4GcHZ2xs3NLdsiIlIatKtTlZfvbgDA20v2s+14wX4Oi5Q3Fgeg06dPM3ToUFxdCz/gzjAMBg8ezMKFC1m9ejWBgYF5tv3yyy9p2bIlTZs2vWm/t99+O0eOHMl2eu7QoUP4+voWapC2iIgterr9LdzbxJe0DINB3+3gbHyStUsSsXkWB6Bu3bqxbdu2Innz0NBQZs+ezZw5czCbzcTExBATE8O1a9eytYuPj+eHH37I8+hP//79GTNmTNbjQYMGceHCBYYNG8ahQ4dYunQp48aNIzQ0tEjqFhGxJSaTiQ8fakJ9bzPnEpJ5/rsdpKRl3PyFIuWYxYOge/TowahRo9i/fz+NGzfOcZn5fffdl+++ZsyYAUCnTp2yrZ81axYDBgzIejxv3jwMw6Bv37659hMVFYWd3d9Zzt/fn+XLlzNixAiaNGlCjRo1GDZsGKNHj853bSIipYmrkwOf9WtJz0/C2X7iEm//8ifv9mps7bJEbJbFg6D/GTRydGYykZ6eXuiirE3zAIlIabX64FkGfr0Nw4APH2rCw638rV2SSIkp1kHQ1ydCzG0pC+FHRKQ0u6OBN8PvrAfAaz/tY8+py9YtSMRGWRyARETEtg25ow5dGnqTkpbBc99u58KV5Ju/SKScKVAACgsLo2fPntSpU4e6dety3333sX79+qKuTURECsDOzsTkPk0JrFqRM3FJDJm7k7R0DYoW+SeLA9Ds2bPp0qULrq6uDB06lMGDB1OhQgXuvPNO5syZUxw1ioiIhdxcHPmsX0tcnezZePQCH/4eYe2SRGyKxYOgGzZsyDPPPMOIESOyrZ88eTJffPEFBw4cKNICrUGDoEWkrPh1bzTPf7cDgI/7Nqdn0+pWrkik+BTrIOhjx47Rs2fPHOvvu+8+IiMjLe1ORESK0T2NfXmuY20AXlqwh4Mx8VauSMQ2WByA/P39WbVqVY71q1atwt9fl1uKiNiaUd3qE1KnKtdS03n22+3EXU21dkkiVmfxRIgvvPACQ4cOZdeuXbRr1w6TyUR4eDhfffUVU6dOLY4aRUSkEOztTHzctzn3fhzOiQtXGT5/J18+3ho7O905Xsovi8cAASxatIhJkyZljfdp2LAho0aN4v777y/yAq1BY4BEpCzadzqOB2dsJDktg6F31mXkXfWsXZJIkbLk+7tAAaisUwASkbJq4Y5TjPx+NwBf9G/FXUHeVq5IpOgU6yBoEREpvXq38GNAuwAARs7fxdFzV6xbkIiVWByAPDw88PT0zLFUqVKFGjVq0LFjR2bNmlUctYqISBF4tUdDWgd4kJCcxnPfbudKcpq1SxIpcRYHoDfeeAM7Ozt69OjB2LFjeeutt+jRowd2dnaEhoZSr149Bg0axBdffFEc9YqISCE52tvxf4+2wNvNmcOxV3hpwW40GkLKG4vHAD344IPcddddPPfcc9nWf/bZZyxfvpwff/yRjz/+mM8//5y9e/cWabElRWOARKQ82H7iEo98vonUdIPR3RswqFNta5ckUijFOgbo999/p0uXLjnW33nnnfz+++8A3HPPPRw7dszSrkVEpAS1rOXBW/c1AmDC7wdZf/iclSsSKTkWByBPT0+WLFmSY/2SJUvw9PQEIDExEbPZXPjqRESkWP23TU0ebuVHhgFD5u7k5MWr1i5JpERYPBHi66+/zqBBg1izZg1t2rTBZDKxdetWfv31Vz799FMAVqxYQceOHYu8WBERKVomk4m37w8mIiaB3afieG72dn4c1A4XR3trlyZSrAo0D9CGDRv45JNPiIiIwDAMGjRowJAhQ2jXrl1x1FjiNAZIRMqbM5ev0fPjcC4kptC7eQ0mPdwUk0kzRUvpookQC0kBSETKo41Hz9Pvy62kZxi81TOIAbcHWrskEYuU2ESI165dIz4+PtsiIiKlU7vaVRlzdwMA3l16gK2RF61ckUjxsTgAXb16lcGDB+Pl5UWlSpXw8PDItoiISOk1MCSQnk2rk5Zh8Px3O4iJS7J2SSLFwuIANGrUKFavXs306dNxdnbmf//7H2PHjqV69ep88803xVGjiIiUEJPJxAcPNqaBj5nzV5IZ9N12ktPSrV2WSJGzOAAtWbKE6dOn89BDD+Hg4ED79u157bXXGDduHN99911x1CgiIiXI1cmBz/q1xM3FgZ1Rlxm7ZL+1SxIpchYHoIsXLxIYmDkwzs3NjYsXM88Rh4SEsG7duqKtTkRErKJWlYpM7dsckwnmbIli/h9R1i5JpEhZHIBuueUWjh8/DkBQUBDff/89kHlkqHLlykVZm4iIWFHn+l6M7FIPgNd/+pPdJy9btyCRImRxAHriiSfYvXs3AGPGjMkaCzRixAhGjRpV5AWKiIj1hHauw11B3qSkZ/Dc7O2cv5Js7ZJEikSh5wGKiopi27Zt1K5dm6ZNmxZVXValeYBERP6WkJTK/Z9s4Nj5RG67xZPZA2/Fwb5Qs6iIFIsSmwcIoGbNmvTu3bvMhB8REcnO7OLI5/1bUtHJns3HLvL+bwetXZJIoeXrXmDTpk3jmWeewcXFhWnTpt2w7dChQ4ukMBERsR11vMxMergpz83ewf/CI2ns5869TaqzNfIisQlJeJldaBPoib2dbp8hpUO+ToEFBgaybds2qlSpknUFWK6dmUwcO3asSAu0Bp0CExHJ3YfLDjJ97VEc7U24V3Dk/JWUrOd83V14s2cQ3YN9rVihlGe6F1ghKQCJiOQuPcPg3o/XcyA6Icdz14/9zHishUKQWEWJjgESEZHy5eI/jvr80/Xfpscu2U96hn63FtuWrzFAI0eOzHeHkydPLnAxIiJi27ZGXuRsQt6XwhtAdFwSWyMv0rZ2lZIrTMRC+QpAO3fuzPZ4+/btpKenU79+fQAOHTqEvb09LVu2LPoKRUTEZsQm5O/mqPltJ2It+QpAa9asyfr75MmTMZvNfP3111l3f7906RJPPPEE7du3L54qRUTEJniZXYq0nYi1WDwIukaNGixfvpxGjRplW79v3z66du3KmTNnirRAa9AgaBGR3KVnGIR8sJqYuCRy+/IwAT7uLoSPvkOXxEuJK9ZB0PHx8Zw9ezbH+tjYWBIScl4VICIiZYe9nYk3ewYBf1/19U8G8GbPIIUfsXkWB6AHHniAJ554ggULFnDq1ClOnTrFggULGDhwIL179y6OGkVExIZ0D/ZlxmMt8HHPeZrLxdGO4BruVqhKxDIWnwK7evUqL774IjNnziQ1NRUABwcHBg4cyIQJE6hYsWKxFFqSdApMROTm0jOMrJmgq1R0YuLyCHadjKNNgCdzn7lNR4GkxJXIRIiJiYkcPXoUwzCoU6dOmQg+1ykAiYhY7sSFRO6Zup7ElHRGdatPaOc61i5JypkSmQixYsWK/Pnnn2Uu/IiISMHUqlKRt+7LvEDmoxWH2HPqsnULErmBQs0E/eyzz+Y6IFpERMqnh1r6cU9jH9IyDIbP28XVlDRrlySSq0IFoMLeRmz8+PG0bt0as9mMl5cXvXr1IiIiIlsbk8mU6zJhwoR8vce8efMwmUz06tWrULWKiMjNmUwmxj3QGB83F46dT+TdpQesXZJIrvIVgOLj44vlzcPCwggNDWXz5s2sWLGCtLQ0unbtSmJiYlab6OjobMvMmTMxmUw8+OCDN+3/xIkTvPjii5qgUUSkBFV2dWLSw00BmLMlihX7daZAbE++BkHb29sTHR2Nl5cXd9xxBwsXLqRy5cqEh4fTqlUrXFyKZsbPc+fO4eXlRVhYGB06dMi1Ta9evUhISGDVqlU37Cs9PZ2OHTvyxBNPsH79ei5fvsxPP/2Urzo0CFpEpPDeW7qfL9ZH4lnRiWXD22t2aCl2RT4IulKlSly4cAGAtWvXZl3+HhISUmThByAuLg4AT0/PXJ8/e/YsS5cuZeDAgTft6+2336ZatWr5apucnEx8fHy2RURECufFbvVp6OvGxcQURv2wp9DDJkSKUr7uBdalSxc6d+5Mw4YNgczJEJ2cnHJtu3r16gIVYhgGI0eOJCQkhODg4FzbfP3115jN5ptOuLhhwwa+/PJLdu3ala/3Hj9+PGPHjrW0ZBERuQFnB3umPtKMnh+HE3boHF9vPM6A2wOtXZYIkM8ANHv2bL7++muOHj1KWFgYjRo1wtXVtUgLGTx4MHv27CE8PDzPNjNnzuTRRx+94VGnhIQEHnvsMb744guqVq2ar/ceM2YMI0eOzHocHx+Pv79//osXEZFc1fM288o9DXlz8Z+M++0g7epUpZ632dplieRvDFB8fHzWubTOnTuzaNEiKleuXGRFDBkyhJ9++ol169YRGJj7bwfr16+nQ4cO7Nq1i6ZNm+bZ165du2jevDn29vZZ6zIyMgCws7MjIiKC2rVr37AejQESESk6hmHwxFd/sDbiHA18zPw8+HacHexv/kIRCxX5GCAPDw9iY2OBzEsci4phGAwePJiFCxeyevXqPMMPwJdffknLli1vGH4AGjRowN69e9m1a1fWct9999G5c2d27dqlIzsiIiXMZDLx4UNN8KzoxMGYBCb+HnHzF4kUM4sHQYeFhWUNgi6s0NBQZs+ezZw5czCbzcTExBATE8O1a9eytYuPj+eHH37gqaeeyrWf/v37M2bMGABcXFwIDg7OtlSuXBmz2UxwcHCeY5dERKT4eJld+PDBJgB8sT6S8MPnrVyRlHcWD4I2DKPIBkHPmDEDgE6dOmVbP2vWLAYMGJD1eN68eRiGQd++fXPtJyoqCju7Qs3pKCIixaxLkDf/vbUmc7ZE8cIPu1g2rAMeFfVLqVhHvsYAXbt2LWsQ9KRJk3j66afzHAT90UcfFXmRJU1jgEREisfVlDTu/TicY+cSuTvYh+mPtijSoRVSvhXr3eCLYxC0rVEAEhEpPntPxfHA9A2kZRh8+FATHm6lsZlSNIr1bvBr1qyhcuXKnD9/PmtckIiISH419nNnZNd6AIxd/CcnLiTe5BUiRc+iAHT58mVCQ0OpWrUq3t7eeHl5UbVqVQYPHszly5eLqUQRESlrnu1QmzaBniSmpDNs3i5S0zOsXZKUM/k+BXbx4kXatm3L6dOnefTRR7MGRB84cIA5c+bg7+/Pxo0b8fDwKO6ai51OgYmIFL/Tl6/Rfco6EpLSGHpnXUbeVc/aJUkpVyxjgIYPH86qVatYuXIl3t7e2Z6LiYmha9eu3HnnnRoELSIi+fbzrtMMm7cLOxP88FxbWtbK/V6QIvlRLGOAfvrpJyZOnJgj/AD4+Pjw4YcfsmjRIsurFRGRcuv+ZjV4oHkNMgwYPn8XCUlFM8+cyM3kOwBFR0fTqFGjPJ8PDg4mJiamSIoSEZHyY+z9jahRuQInL17jrcX7rV2OlBP5DkBVq1bl+PHjeT4fGRlJlSpViqImEREpR9xcHJnySDPsTPDjjlMs3RNt7ZKkHMh3AOrevTuvvvoqKSkpOZ5LTk7m9ddfp3v37kVanIiIlA+tAzx5vlMdAMYs3MOZy9du8gqRwsn3IOhTp07RqlUrnJ2dCQ0NpUGDBgDs37+f6dOnk5yczLZt28rEzUY1CFpEpOSlpmfw0IyN7D4VR9tbqvDdU7diZ6dZoiX/im0m6MjISJ5//nmWL1/O9ZeZTCbuuusuPvnkE+rUqVO4ym2EApCIiHUcO3eFHtPCuZaazpi7G/Bsx9rWLklKkWK9FQbApUuXOHz4MAB16tTB07NsXbaoACQiYj3ztkbx8sK9ONqbWPT87QTXcLd2SVJKFOutMAA8PDxo06YNbdq0KXPhR0RErKtPa3+6BnmTmm4wfP4urqWkW7skKYMKFIBERESKi8lk4v0Hm+BlduZI7BXG/3bA2iVJGaQAJCIiNsezohMT/9MUgG82nWDNwVgrVyRljQKQiIjYpA71qvHE7QEAjFqwm/NXkq1bkJQpCkAiImKzRndvQH1vM+evpPDSgj0U4LodkVwpAImIiM1ycbRnat9mODnYsfpgLLO3RFm7JCkjFIBERMSmNfBxY3T3zMl331u6nyOxV6xckZQFCkAiImLznmgXQPu6VUlKzWD4/J2kpGVYuyQp5RSARETE5tnZmZj4n6Z4uDqy73Q8k1ccsnZJUsopAImISKng7ebC+N5NAPhs3VE2Hb1g5YqkNFMAEhGRUqN7sA99WvljGDDy+13EXU21dklSSikAiYhIqfJGzyACqrgSHZfEqz/t1aXxUiAKQCIiUqpUdHZgyiPNsbcz8cueaBbtPG3tkqQUUgASEZFSp5l/ZYbfWReAN37+k5MXr1q5IiltFIBERKRUer5zHVrV8uBKchoj5u8iLV2Xxkv+KQCJiEipZG9n4qM+zajk7MC2E5eYvvaotUuSUkQBSERESi1/T1fevr8RAFNXHWZn1CUrVySlhQKQiIiUag80r0HPptVJzzAYMX8Xiclp1i5JSgEFIBERKdVMJhPv9gqmursLxy9c5e0l+61dkpQCCkAiIlLquVdwZHKfZphMMH/bSZbti7Z2SWLjFIBERKRMuO2WKjzboTYALy/cS0xckpUrElumACQiImXGyLvqEVzDjctXU3nxh91kZGiWaMmdApCIiJQZTg52TOnTHBdHO8KPnGfmhkhrlyQ2SgFIRETKlDpelXitRxAAHy6L4EB0vJUrElukACQiImXOo7fWpEtDL1LSMxg+bxdJqenWLklsjAKQiIiUOSaTifcfbELVSk5EnE3gg2UHrV2S2BgFIBERKZOqVnJmwkNNAZi14Thhh85ZuSKxJQpAIiJSZnVu4EX/trUAePGH3Vy4kmzlisRWKACJiEiZ9so9DanjVYlzCcm8vHAvhqFL40UBSEREyjgXR3umPtIMR3sTK/afZd4fJ61dktgABSARESnzGlV3Z1S3+gC8vWQ/x85dsXJFYm1WDUDjx4+ndevWmM1mvLy86NWrFxEREdnamEymXJcJEybk2e8XX3xB+/bt8fDwwMPDgy5durB169bi/jgiImLDngq5hXa1q3AtNZ3h83eRmp5h7ZLEiqwagMLCwggNDWXz5s2sWLGCtLQ0unbtSmJiYlab6OjobMvMmTMxmUw8+OCDefa7du1a+vbty5o1a9i0aRM1a9aka9eunD59uiQ+loiI2CA7OxOTHm6KewVH9pyKY8rKQ9YuSazIZNjQaLBz587h5eVFWFgYHTp0yLVNr169SEhIYNWqVfnuNz09HQ8PDz755BP69++f4/nk5GSSk/++MiA+Ph5/f3/i4uJwc3Oz/IOIiIjNWronmtA5OzLvHP9MW9oEelq7JCki8fHxuLu75+v726bGAMXFxQHg6Zn7znj27FmWLl3KwIEDLer36tWrpKam5tnv+PHjcXd3z1r8/f0tK1xEREqNHk18ebCFH4YBI+bvIj4p1doliRXYTAAyDIORI0cSEhJCcHBwrm2+/vprzGYzvXv3tqjvl19+mRo1atClS5dcnx8zZgxxcXFZy8mTukJARKQse+u+IGp6unL68jXe+GmftcsRK7CZADR48GD27NnD3Llz82wzc+ZMHn30UVxcXPLd74cffsjcuXNZuHBhnq9zdnbGzc0t2yIiImWX2cWRj/o0w97OxE+7zvDzLo0RLW9sIgANGTKExYsXs2bNGvz8/HJts379eiIiInjqqafy3e/EiRMZN24cy5cvp0mTJkVVroiIlAEta3kwuHMdAF77aR+nLl21ckVSkqwagAzDYPDgwSxcuJDVq1cTGBiYZ9svv/ySli1b0rRp03z1PWHCBN555x2WLVtGq1atiqpkEREpQ4bcUYfmNSuTkJTGyPm7Sc+wmeuCpJhZNQCFhoYye/Zs5syZg9lsJiYmhpiYGK5du5atXXx8PD/88EOeR3/69+/PmDFjsh5/+OGHvPbaa8ycOZOAgICsfq9c0cRXIiLyNwd7O6b0aUZFJ3u2Hr/Ip2FHrV2SlBCrBqAZM2YQFxdHp06d8PX1zVrmz5+frd28efMwDIO+ffvm2k9UVBTR0dFZj6dPn05KSgoPPfRQtn4nTpxYrJ9HRERKn1pVKvLmfY0A+GjFIfacumzdgqRE2NQ8QLbCknkERESk9DMMg9A5O/h1bwy3VK3IL0NDcHVysHZZYqFSOw+QiIiINZhMJsY90BgfNxeOnU/k3aUHrF2SFDMFIBEREaCyqxOTHs680GbOlihW7D9r5YqkOCkAiYiI/OX2OlV5un3mFcmjf9xDbEKSlSuS4qIAJCIi8g8vdqtPQ183LiamMOqHPWiobNmkACQiIvIPzg72TH2kGc4OdoQdOsfXG49buyQpBgpAIiIi/1LP28yYuxsAMO63gxw6m2DliqSoKQCJiIjk4vF2AXSsV42UtAyGzt1Jclq6tUuSIqQAJCIikguTycSE/zTBs6ITB2MSmPh7hLVLkiKkACQiIpIHL7MLHz6YeTPtL9ZHEn74vJUrkqKiACQiInIDXYK8+e+tNQF44YddXEpMsXJFUhQUgERERG7itR4NuaVqRc7GJ/PKor26NL4MUAASERG5CVcnB6Y+0hwHOxO/7Yvhh+2nrF2SFJICkIiISD409nNnZNd6AIxd/CcnLiRauSIpDAUgERGRfHq2Q23aBHqSmJLOsHm7SE3PsHZJUkAKQCIiIvlkb2fioz7NMLs4sOvkZT5efcTaJUkBKQCJiIhYoEblCrzbKxiAT1YfZvuJi1auSApCAUhERMRC9zerQa9m1ckwYPj8XVy+msKmoxf4eddpNh29QHqGrhKzdQ7WLkBERKQ0ertXMH8cv8TJi9doO34111L/vlWGr7sLb/YMonuwrxUrlBvRESAREZECcHNx5JHW/gDZwg9ATFwSg2bvYNm+aGuUJvmgACQiIlIA6RkGc7ZG5frc9RNgY5fs1+kwG6UAJCIiUgBbIy8SHZeU5/MGEB2XxNZIDZK2RQpAIiIiBRCbkHf4KUg7KVkKQCIiIgXgZXbJVzsne33V2iL9q4iIiBRAm0BPfN1dMN2k3fD5O/lw2UHirqWWSF2SPwpAIiIiBWBvZ+LNnkEAOULQ9ceBVV1JTjOYvvYoHT5cw6dhR0n61xVjYh0KQCIiIgXUPdiXGY+1wMc9++kwH3cXPn2sBatf6MTn/VpS16sScddSef+3g3ScsIa5W6NI033ErMpkGIauz/uX+Ph43N3diYuLw83NzdrliIiIjUvPMNgaeZHYhCS8zC60CfTE3s6U7fmFO04xZeVhTl++BsAtVSvyQtf63B3sg53dzU6kSX5Y8v2tAJQLBSARESkOSanpfLcliv9bc4SLiSkANK7hzkvd6xNSpyomk4JQYSgAFZICkIiIFKeEpFT+tz6S/60/RmJK5pigdrWr8FL3BjTzr2zd4koxBaBCUgASEZGScP5KMv+35gjfbY4i5a8xQd0b+fBit3rU8TJbubrSRwGokBSARESkJJ28eJUpKw+zcOcpDAPsTPBQSz+Gd6lH9coVrF1eqaEAVEgKQCIiYg0RMQlMXB7Biv1nAXBysKP/bbV4vnMdPCs6Wbk626cAVEgKQCIiYk3bT1zig2UHs+4jVsnZgWc63MLAkEAqOjtYuTrbpQBUSApAIiJibYZhEHboHB8ui2B/dDwAVSs5MbhzHf57ay2cHDSV378pABWSApCIiNiKjAyDX/ZGM2l5BCcuXAXAz6MCL3Stx31Na2Sbb6i8UwAqJAUgERGxNanpGcz/4yRTVx3mXEIyAA18zIzqVp87GnhpDiEUgApNAUhERGzV1ZQ0vtp4nBlrj5KQlAZAq1oejL67Aa0DPK1cnXUpABWSApCIiNi6y1dTmBF2lK82HCc5LXMOoTsaeDGqW30a+pbP7y4FoEJSABIRkdIiJi6JaasPM/+Pk6RnGJhMcH/T6oy8qz41q7hau7wSpQBUSApAIiJS2hw7d4XJKw7xy55oABztTfRtU5PBd9TBy+xyk1eXDQpAhaQAJCIipdXeU3F8+PtB1h8+D0AFR3sGhgTyTMdbcHNxtHJ1xUsBqJAUgEREpLTbeOQ8H/wewe6TlwGo7OrI851q079tAC6O9tYtrphY8v1t1VmUxo8fT+vWrTGbzXh5edGrVy8iIiKytTGZTLkuEyZMuGHfP/74I0FBQTg7OxMUFMSiRYuK86OIiIjYlHZ1qvLT8+349LGW1PGqxOWrqYz79SCdJ65l/h9RpP1189XyyqoBKCwsjNDQUDZv3syKFStIS0uja9euJCYmZrWJjo7OtsycOROTycSDDz6YZ7+bNm2iT58+9OvXj927d9OvXz8efvhhtmzZUhIfS0RExCaYTCa6B/uwbFh7PnyoCdXdXYiOS2L0j3vpOmUdv+2NpryeCLKpU2Dnzp3Dy8uLsLAwOnTokGubXr16kZCQwKpVq/Lsp0+fPsTHx/Pbb79lrevevTseHh7MnTs3R/vk5GSSk5OzHsfHx+Pv769TYCIiUqYkpaYze/MJ/m/NES5dTQWgiZ87o7s34PY6Va1cXeGVmlNg/xYXFweAp2fuEzmdPXuWpUuXMnDgwBv2s2nTJrp27ZptXbdu3di4cWOu7cePH4+7u3vW4u/vX4DqRUREbJuLoz1Ptb+FdS91ZuiddXF1smfPqTge/d8WHvvfFvacumztEkuMzQQgwzAYOXIkISEhBAcH59rm66+/xmw207t37xv2FRMTg7e3d7Z13t7exMTE5Np+zJgxxMXFZS0nT54s2IcQEREpBcwujoy8qx7rXurMgHYBONqbCD9ynvs+2cDz323n6Lkr1i6x2DlYu4DrBg8ezJ49ewgPD8+zzcyZM3n00Udxcbn5fAb/vieKYRh53ifF2dkZZ2dnywoWEREp5apWcuat+xoxMCSQj1YeYtHO0/y6N4bf/zzLf1r6MaxLXXzdK1i7zGJhE0eAhgwZwuLFi1mzZg1+fn65tlm/fj0RERE89dRTN+3Px8cnx9Ge2NjYHEeFREREBPw9XZn8cDN+G9aeLg29Sc8wmPfHSTpOWMu4Xw9wKTHF2iUWOasGIMMwGDx4MAsXLmT16tUEBgbm2fbLL7+kZcuWNG3a9Kb9tm3blhUrVmRbt3z5ctq1a1fomkVERMqqBj5u/O/xVvw4qC1tAjxJScvg83XH6PDhGj5ZfZirKWnWLrHIWDUAhYaGMnv2bObMmYPZbCYmJoaYmBiuXbuWrV18fDw//PBDnkd/+vfvz5gxY7IeDxs2jOXLl/PBBx9w8OBBPvjgA1auXMnw4cOL8+OIiIiUCS1reTL/2duY9URrGvq6kZCcxsTlh+jw4Vq+2XSclLTSP4eQVS+Dz2tMzqxZsxgwYEDW488//5zhw4cTHR2Nu7t7jvadOnUiICCAr776KmvdggULeO211zh27Bi1a9fmvffeu+ng6es0E7SIiEimjAyDJXvOMGn5IaIuXgWgpqcrL3StR88m1bGzy/273Bp0K4xCUgASERHJLiUtg/l/RDF11RHOX8mcO6+Bj5nR3RvQqX61PA9qlCQFoEJSABIREcnd1ZQ0Zm04zqdrj5KQnDkmqE2AJy91r0+rgNzn8SspCkCFpAAkIiJyY5cSU/g07ChfbTxO8l9jgro09OLFbvVp4GOd704FoEJSABIREcmf6LhrTFt1mO+3nSI9w8Bkggea1WDEXfXw93Qt0VoUgApJAUhERMQyR89dYfLyQyzdGw2Ao72JR2+tRWjnOlQz/z3ZcHqGwdbIi8QmJOFldqFNoCf2RTSQWgGokBSARERECmbPqctM+D2C9YfPA+DqZM9TIYE83eEWNhw5z9gl+4mOS8pq7+vuwps9g+ge7Fvo91YAKiQFIBERkcLZcOQ8Hy47yO5TmTc6r+hkT2JKeo5214/9zHisRaFDUKm9G7yIiIiUDbfXqcpPobfz6WMtCKzqmmv4Abh+FGbskv2kZ5TcMRkFIBERESkWJpOJ7sG+vHN/8A3bGUB0XBJbIy+WTGEoAImIiEgxu5DPm6nGJiTdvFERUQASERGRYuVldinSdkVBAUhERESKVZtAT3zdXcjrYncTmVeDtQksuZmkFYBERESkWNnbmXizZxBAjhB0/fGbPYOKbD6g/FAAEhERkWLXPdiXGY+1wMc9+2kuH3eXIrkE3lIOJfpuIiIiUm51D/blriCfYpsJ2hIKQCIiIlJi7O1MtK1dxdpl6BSYiIiIlD8KQCIiIlLuKACJiIhIuaMAJCIiIuWOApCIiIiUOwpAIiIiUu4oAImIiEi5owAkIiIi5Y4CkIiIiJQ7mgk6F4ZhABAfH2/lSkRERCS/rn9vX/8evxEFoFwkJCQA4O/vb+VKRERExFIJCQm4u7vfsI3JyE9MKmcyMjI4c+YMhmFQs2ZNTp48iZubm7XLKrPi4+Px9/fXdi5m2s4lQ9u5ZGg7l4zStp0NwyAhIYHq1atjZ3fjUT46ApQLOzs7/Pz8sg6lubm5lYp/+NJO27lkaDuXDG3nkqHtXDJK03a+2ZGf6zQIWkRERModBSAREREpdxSAbsDZ2Zk333wTZ2dna5dSpmk7lwxt55Kh7VwytJ1LRlnezhoELSIiIuWOjgCJiIhIuaMAJCIiIuWOApCIiIiUOwpAIiIiUu6U+wA0ffp0AgMDcXFxoWXLlqxfv/6G7cPCwmjZsiUuLi7ccsstfPrppyVUaelmyXZeu3YtJpMpx3Lw4MESrLj0WbduHT179qR69eqYTCZ++umnm75G+7PlLN3O2p8tN378eFq3bo3ZbMbLy4tevXoRERFx09dpf7ZMQbZzWdqfy3UAmj9/PsOHD+fVV19l586dtG/fnrvvvpuoqKhc20dGRnLPPffQvn17du7cySuvvMLQoUP58ccfS7jy0sXS7XxdREQE0dHRWUvdunVLqOLSKTExkaZNm/LJJ5/kq73254KxdDtfp/05/8LCwggNDWXz5s2sWLGCtLQ0unbtSmJiYp6v0f5suYJs5+vKxP5slGNt2rQxnnvuuWzrGjRoYLz88su5tn/ppZeMBg0aZFv37LPPGrfddlux1VgWWLqd16xZYwDGpUuXSqC6sgkwFi1adMM22p8LLz/bWftz4cXGxhqAERYWlmcb7c+Fl5/tXJb253J7BCglJYXt27fTtWvXbOu7du3Kxo0bc33Npk2bcrTv1q0b27ZtIzU1tdhqLc0Ksp2va968Ob6+vtx5552sWbOmOMssl7Q/lyztzwUXFxcHgKenZ55ttD8XXn6283VlYX8utwHo/PnzpKen4+3tnW29t7c3MTExub4mJiYm1/ZpaWmcP3++2GotzQqynX19ffn888/58ccfWbhwIfXr1+fOO+9k3bp1JVFyuaH9uWRofy4cwzAYOXIkISEhBAcH59lO+3Ph5Hc7l6X9udzfDd5kMmV7bBhGjnU3a5/besnOku1cv3596tevn/W4bdu2nDx5kokTJ9KhQ4dirbO80f5c/LQ/F87gwYPZs2cP4eHhN22r/bng8rudy9L+XG6PAFWtWhV7e/scRyFiY2Nz/BZxnY+PT67tHRwcqFKlSrHVWpoVZDvn5rbbbuPw4cNFXV65pv3ZerQ/58+QIUNYvHgxa9aswc/P74ZttT8XnCXbOTeldX8utwHIycmJli1bsmLFimzrV6xYQbt27XJ9Tdu2bXO0X758Oa1atcLR0bHYai3NCrKdc7Nz5058fX2LurxyTfuz9Wh/vjHDMBg8eDALFy5k9erVBAYG3vQ12p8tV5DtnJtSuz9bbfi1DZg3b57h6OhofPnll8b+/fuN4cOHGxUrVjSOHz9uGIZhvPzyy0a/fv2y2h87dsxwdXU1RowYYezfv9/48ssvDUdHR2PBggXW+gilgqXb+aOPPjIWLVpkHDp0yNi3b5/x8ssvG4Dx448/WusjlAoJCQnGzp07jZ07dxqAMXnyZGPnzp3GiRMnDMPQ/lxULN3O2p8tN2jQIMPd3d1Yu3atER0dnbVcvXo1q43258IryHYuS/tzuQ5AhmEY//d//2fUqlXLcHJyMlq0aJHt8r/HH3/c6NixY7b2a9euNZo3b244OTkZAQEBxowZM0q44tLJku38wQcfGLVr1zZcXFwMDw8PIyQkxFi6dKkVqi5drl+e+u/l8ccfNwxD+3NRsXQ7a3+2XG7bFzBmzZqV1Ub7c+EVZDuXpf3ZZBh/jRITERERKSfK7RggERERKb8UgERERKTcUQASERGRckcBSERERModBSAREREpdxSAREREpNxRABIREZFyRwFIREREyh0FIBEpM9auXYvJZOLy5cvWLkVEbJxmghaRUqtTp040a9aMKVOmAJCSksLFixfx9vbGZDJZtzgRsWkO1i5ARKSoODk54ePjY+0yRKQU0CkwESmVBgwYQFhYGFOnTsVkMmEymfjqq6+ynQL76quvqFy5Mr/88gv169fH1dWVhx56iMTERL7++msCAgLw8PBgyJAhpKenZ/WdkpLCSy+9RI0aNahYsSK33nora9eutc4HFZFioSNAIlIqTZ06lUOHDhEcHMzbb78NwJ9//pmj3dWrV5k2bRrz5s0jISGB3r1707t3bypXrsyvv/7KsWPHePDBBwkJCaFPnz4APPHEExw/fpx58+ZRvXp1Fi1aRPfu3dm7dy9169Yt0c8pIsVDAUhESiV3d3ecnJxwdXXNOu118ODBHO1SU1OZMWMGtWvXBuChhx7i22+/5ezZs1SqVImgoCA6d+7MmjVr6NOnD0ePHmXu3LmcOnWK6tWrA/Diiy+ybNkyZs2axbhx40ruQ4pIsVEAEpEyzdXVNSv8AHh7exMQEEClSpWyrYuNjQVgx44dGIZBvXr1svWTnJxMlSpVSqZoESl2CkAiUqY5Ojpme2wymXJdl5GRAUBGRgb29vZs374de3v7bO3+GZpEpHRTABKRUsvJySnb4OWi0Lx5c9LT04mNjaV9+/ZF2reI2A5dBSYipVZAQABbtmzh+PHjnD9/PusoTmHUq1ePRx99lP79+7Nw4UIiIyP5448/+OCDD/j111+LoGoRsQUKQCJSar344ovY29sTFBREtWrViIqKKpJ+Z82aRf/+/XnhhReoX78+9913H1u2bMHf379I+hcR69NM0CIiIlLu6AiQiIiIlDsKQCIiIlLuKACJiIhIuaMAJCIiIuWOApCIiIiUOwpAIiIiUu4oAImIiEi5owAkIiIi5Y4CkIiIiJQ7CkAiIiJS7igAiYiISLnz/82JHwYl8CK9AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(t, a, label='Train method 1', marker='o')\n", + "plt.plot(tt, b, label='Train method 2', marker='o')\n", + "plt.legend()\n", + "plt.xlabel('time')\n", + "plt.ylabel('Off-diagonal norm')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {