diff --git "a/scripts/3.14.ipynb" "b/scripts/3.14.ipynb" new file mode 100644--- /dev/null +++ "b/scripts/3.14.ipynb" @@ -0,0 +1,916 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: pennylane in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.38.0)\n", + "Requirement already satisfied: numpy<2.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (1.23.5)\n", + "Requirement already satisfied: scipy in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (1.14.1)\n", + "Requirement already satisfied: networkx in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (2.5)\n", + "Requirement already satisfied: rustworkx>=0.14.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (0.15.1)\n", + "Requirement already satisfied: autograd in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (1.7.0)\n", + "Requirement already satisfied: toml in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (0.10.2)\n", + "Requirement already satisfied: appdirs in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (1.4.4)\n", + "Requirement already satisfied: autoray>=0.6.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (0.7.0)\n", + "Requirement already satisfied: cachetools in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (5.5.0)\n", + "Requirement already satisfied: pennylane-lightning>=0.38 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (0.38.0)\n", + "Requirement already satisfied: requests in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (2.32.3)\n", + "Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (4.12.2)\n", + "Requirement already satisfied: packaging in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (24.1)\n", + "Requirement already satisfied: decorator>=4.3.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from networkx->pennylane) (5.1.1)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests->pennylane) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests->pennylane) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests->pennylane) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests->pennylane) (2024.8.30)\n" + ] + } + ], + "source": [ + "!pip install pennylane" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average execution time per iteration: 0.0012 seconds\n" + ] + } + ], + "source": [ + "import time\n", + "import numpy as np\n", + "import networkx as nx\n", + "import pennylane as qml\n", + "\n", + "# Define your AGN graph structure\n", + "G = nx.hexagonal_lattice_graph(3, 3)\n", + "nx.set_node_attributes(G, values=0, name=\"state\")\n", + "\n", + "# Define the quantum device and circuit\n", + "dev = qml.device(\"default.qubit\", wires=4)\n", + "\n", + "@qml.qnode(dev)\n", + "def quantum_decision_circuit(theta):\n", + " qml.RX(theta[0], wires=0)\n", + " qml.RY(theta[1], wires=1)\n", + " qml.CNOT(wires=[0, 1])\n", + " qml.RY(theta[2], wires=2)\n", + " qml.CNOT(wires=[1, 2])\n", + " qml.RX(theta[3], wires=3)\n", + " return qml.probs(wires=[0, 1, 2, 3])\n", + "\n", + "@qml.qnode(dev)\n", + "def complex_quantum_circuit(theta):\n", + " qml.Hadamard(wires=0)\n", + " qml.RX(theta[0], wires=0)\n", + " qml.CNOT(wires=[0, 1])\n", + " qml.RY(theta[1], wires=1)\n", + " qml.CRX(theta[2], wires=1, control=0)\n", + " qml.T(wires=2)\n", + " qml.CNOT(wires=[2, 3])\n", + " return qml.probs(wires=[0, 1, 2, 3])\n", + "\n", + "# Define benchmarking function\n", + "def run_benchmark(iterations=100):\n", + " total_time = 0\n", + " for _ in range(iterations):\n", + " # Generate random theta values for the quantum circuit\n", + " theta = np.random.rand(4)\n", + " \n", + " # Start timing\n", + " start_time = time.time()\n", + " \n", + " # Run quantum circuit\n", + " probabilities = quantum_decision_circuit(theta)\n", + " \n", + " # Map probabilities to AGN nodes\n", + " for i, node in enumerate(G.nodes()):\n", + " G.nodes[node][\"state\"] = probabilities[i % len(probabilities)]\n", + " \n", + " # End timing\n", + " end_time = time.time()\n", + " \n", + " # Calculate time for this iteration\n", + " total_time += (end_time - start_time)\n", + " \n", + " avg_time = total_time / iterations\n", + " print(f\"Average execution time per iteration: {avg_time:.4f} seconds\")\n", + "\n", + "# Run the benchmark\n", + "run_benchmark()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Padded Data:\n", + " [[0.89209269 0.65063517 0.66753295 0. ]\n", + " [0.06997607 0.50499087 0.80499266 0. ]\n", + " [0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. ]]\n", + "Running benchmark with simple circuit:\n", + "Average execution time per iteration: 0.0010 seconds\n" + ] + }, + { + "data": { + "image/png": "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WjBser50CvJ2OkNXRq1Wm30tCIJN05+WziMIgsXzGgzG3805OTkAgL///hsBAQFm+91OgX9OTg78/PzMapJMSs/omd7L25WTkwOlUonDhw+XWR6l9Eynvb19mQaWo0aNwo0bN7Bw4UIEBQVBq9UiMjJSSgnb2q3vDwDp/agJDKJkiEEUUe0RBMGqlFpddvHiRbz66qv46quvsGrVKowaNQqbN2+GQqFAhw4dsGrVKnh7e8PFxcXi64ODg7FlyxapQLw00wxIQkKCNOtya12O6W4xfQWlCS1atEBRURH2798vpfNu3LiB8+fPIzw83Orv+U4qXWBdUerOkn379pX5ukWLFgCADh06IDExESqVSirEthWNRlPm/Wjfvj30ej2Sk5Nx7733WnW83bt344svvsCAAQMAGG9WSE1NNdtHrVZX+DPg4uICf39/7N692+w67t69G126dLFqPLbGwnIZkgrL9QyiiKh8BQUFSExMNHuYPsD0ej2efvppREVFYcyYMVi+fDlOnDiBefPmAQCeeuopeHp6YvDgwdi5cydiY2Oxfft2vPzyy7h27RoAY5H1vHnzsGjRIkRHR+PIkSNSUbW9vT3uuecezJkzB2fPnsWOHTswbdo0s/EFBQVBEASsW7cOKSkp0sxNaWFhYRg8eDDGjRuHXbt24fjx43j66acREBCAwYMH1+Tlu23Ozs6YPHkyXn31VaxYsQIXL16UrtGKFSsqfO3u3bsxd+5cXLhwAYsXL8avv/4q1Z717dsXkZGRGDJkCP79919cvnwZe/bswdtvv41Dhw7d1piDg4ORk5ODLVu2IDU1FXl5eWjatCmeeuopjBw5EqtXr0ZsbCwOHDiA2bNn4++//67weGFhYfjhhx9w9uxZ7N+/H0899ZS0+G/pc27ZsgWJiYlIT0+3eJzXX38dH330EVatWoXz589jypQpOHbsmFk9Xm1gECVD2uKZqIJCBlFEVL4NGzbAz8/P7NG9e3cAwAcffIArV67gyy+/BGCsH1m2bBmmTZuG48ePw8HBAf/99x8aNWqERx55BC1atMDYsWORn58vzUyNGjUKCxYswBdffIGWLVti0KBBZndLffvttygqKkLHjh0xceJEzJo1y2x8AQEBePfddzFlyhT4+PhI7RFutXz5cnTs2BGDBg1CZGQkRFHE+vXry6TS6qL3338f77zzDmbP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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Running benchmark with complex circuit:\n", + "Average execution time per iteration: 0.0010 seconds\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlEAAAHHCAYAAACfqw0dAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACvT0lEQVR4nOydeXRT5dbGnwxN0rmFzqW0pZQZWkCoBa+AFIuAUgdEFEFEUD5RsKIXEJkVRUFAUQQVUOGKKHJRsIhcUJnnUcAChULpSOcpaZPz/ZGckzlN2qQ5SfdvrSzoyZuTN2maPNnDswUMwzAgCIIgCIIgbELo7A0QBEEQBEG4IiSiCIIgCIIgGgGJKIIgCIIgiEZAIoogCIIgCKIRkIgiCIIgCIJoBCSiCIIgCIIgGgGJKIIgCIIgiEZAIoogCIIgCKIRkIgiCIIgCIJoBCSiCIJwGebPnw+BQODsbZhl//79EAgE2L9/v7O34lIMHDgQ3bp1c/Y2rEYgEGDq1KnO3gbBA0hEEYSNfPrppxAIBEhKSrK4rqCgADNnzkT37t3h4+MDmUyG9u3bY8KECThw4IDe2g0bNkAgEEAmkyEnJ8foXNZ+yDz33HMQCAQmLzKZzLYH6iSqq6sxf/583ggRS8+p7uW5555z9lZNEhMTY/Q6iI+PxxtvvIHi4mJnb48gXBqxszdAEK7Gpk2bEBMTg2PHjuHq1ato37690Zpjx45h+PDhqKiowFNPPYWXXnoJUqkUWVlZ2L59OzZs2IA//vgD999/v97t5HI53nvvPXz88ceN3p9UKsUXX3xhdFwkEjX6nM1JdXU1FixYAEAtHnWZM2cOZs6c2az7efHFF5GSksL9nJWVhblz52Ly5Mn417/+xR2Pi4tDUlISampqIJFImnWPDZGYmIjXX38dAFBbW4uTJ09ixYoV+OOPP3Ds2DEn744gXBcSUQRhA1lZWTh06BC2bduGF198EZs2bcK8efP01pSUlCAtLQ1isRhnzpxBp06d9K5fvHgxvvvuO3h6ehqdPzExEevWrcOsWbMQERHRqD2KxWKMHTu2UbflO2KxGGJx875tJScnIzk5mfv5xIkTmDt3LpKTk00+z3yM+EVGRurt9YUXXoCPjw8+/PBDZGZmIj4+3om7cw0YhkFtba3Jv1ui5ULpPIKwgU2bNiEwMBDDhw/HE088gU2bNhmtWbNmDXJzc7FixQojAQWo6ynGjBmDPn36GF03e/ZsKJVKvPfeew7ZP6D+MBg0aBCCg4NRUFDAHVcoFOjevTvi4uJQVVXFHf/222/Ru3dveHp6olWrVnjqqadw69Yto/MePXoUw4YNQ2BgILy9vdGjRw+sXLmSu37gwIFGkSVAnS6LiYkBANy4cQPBwcEAgAULFnApqPnz5wMwXRNVX1+PRYsWIS4uDlKpFDExMZg9ezbkcrneupiYGIwYMQIHDhxA3759IZPJ0K5dO3z99dc2PX+WMFUTxaZiz507hwEDBsDLywvt27fHDz/8AAD4448/kJSUBE9PT3Ts2BG///670XlzcnLw/PPPIzQ0FFKpFF27dsVXX33VpL2GhYUBgJEovXz5Mp544gm0atUKMpkM99xzD3bs2KG3hk0/Hzx4EOnp6QgODoa3tzceffRRFBYWGt3Xr7/+igEDBsDX1xd+fn7o06cPNm/ebLTu77//xqBBg+Dl5YXIyEgsXbpU73r2+f3++++xYMECREZGwtfXF0888QTKysogl8sxffp0hISEwMfHBxMmTDB6Haxfvx4PPPAAQkJCIJVK0aVLF3z22WdGe2FfL7t378Y999wDT09PfP7552afz8WLF0MoFDYpiky4HiSiCMIGNm3ahMceewwSiQRjxoxBZmYmjh8/rrfm559/hqenJx577DGbzx8bG4tx48Zh3bp1uHPnTqP3WVRUZHQpLy8HoBZxX331FWpra/HSSy9xt5k3bx4uXryI9evXw9vbGwDwzjvvYNy4cYiPj8fy5csxffp07N27F/fffz9KS0u52+7Zswf3338//v77b0ybNg3Lli3DoEGD8Msvv9i07+DgYO4D7dFHH8U333yDb775xuJz+cILL2Du3Lno1asXPvroIwwYMABLlizBU089ZbT26tWreOKJJzBkyBAsW7YMgYGBeO6553Dx4kWb9mkrJSUlGDFiBJKSkrB06VJIpVI89dRT2LJlC5566ikMGzYM7733HqqqqvDEE0+goqKCu21+fj7uvfde/P7775g6dSpWrlyJ9u3bY+LEiVixYoVV919XV8e9Dm7fvo2ff/4Zy5cvx/3334/Y2Fhu3cWLF3Hvvffi0qVLmDlzJpYtWwZvb2+kpaXhp59+MjrvK6+8grNnz2LevHmYMmUKfv75Z6OC6w0bNmD48OEoLi7GrFmz8N577yExMREZGRlGz9HQoUORkJCAZcuWoVOnTvj3v/+NX3/91eh+lyxZgt27d2PmzJl4/vnnsW3bNrz00kt4/vnn8c8//2D+/Pl47LHHsGHDBrz//vt6t/3ss88QHR2N2bNnY9myZYiKisL//d//YfXq1Ub3c+XKFYwZMwZDhgzBypUrkZiYaPL5nTNnDubOnYvPP/8cr7zyitnfA+GGMARBWMWJEycYAMyePXsYhmEYlUrFtGnThpk2bZreusDAQCYxMdHo9uXl5UxhYSF3qays5K5bv349A4A5fvw4c+3aNUYsFjOvvvoqd/2AAQOYrl27NrjH8ePHMwBMXlJTU/XWfv755wwA5ttvv2WOHDnCiEQiZvr06dz1N27cYEQiEfPOO+/o3e78+fOMWCzmjtfX1zOxsbFMdHQ0U1JSordWpVLpPYYBAwaY3HN0dDT3c2FhIQOAmTdvntHaefPmMbpvW2fOnGEAMC+88ILeuhkzZjAAmP/973/csejoaAYA8+eff3LHCgoKGKlUyrz++utG92WO48ePMwCY9evXG123b98+BgCzb98+7tiAAQMYAMzmzZu5Y5cvX2YAMEKhkDly5Ah3fPfu3UbnnjhxIhMeHs4UFRXp3ddTTz3F+Pv7M9XV1Rb3yz5uw0v//v2Nzjl48GCme/fuTG1tLXdMpVIx/fr1Y+Lj47lj7Os1JSVF73f82muvMSKRiCktLWUYhmFKS0sZX19fJikpiampqdG7L8PXBgDm66+/5o7J5XImLCyMefzxx7lj7PPbrVs3RqFQcMfHjBnDCAQC5qGHHtK7j+TkZL3XFsMwJp+v1NRUpl27diaft4yMDKP1AJiXX36ZYRiGef311xmhUMhs2LDBaB3h/lAkiiCsZNOmTQgNDcWgQYMAqCM6o0ePxnfffQelUsmtKy8vh4+Pj9Htn332WQQHB3OXf//73ybvp127dnj22Wexdu1a5Obm2rxPmUyGPXv2GF0MU4STJ09GamoqXnnlFTz77LOIi4vDu+++y12/bds2qFQqPPnkk3oRrbCwMMTHx2Pfvn0AgNOnTyMrKwvTp09HQECA3n042o5g165dAID09HS942wR9c6dO/WOd+nSRa8YPDg4GB07dsT169cduk8fHx+9yFjHjh0REBCAzp0763V5sv9n98MwDH788Uc8/PDDYBhG7/eQmpqKsrIynDp1qsH7T0pK4l4Hv/zyC9555x1cvHgRjzzyCGpqagAAxcXF+N///ocnn3wSFRUV3P3cvXsXqampyMzMNOocnTx5st7v+F//+heUSiVu3rwJQB2hrKiowMyZM41qxQxfGz4+Pnp1WxKJBH379jX5uxk3bhw8PDz0Hh/DMHj++eeNHvetW7dQX1/PHdOtaSorK0NRUREGDBiA69evo6ysTO/2sbGxSE1NNfGMqn83bGTw22+/xfjx402uI9wbKiwnCCtQKpX47rvvMGjQIGRlZXHHk5KSsGzZMuzduxcPPvggAMDX1xeVlZVG51i4cCGX6hgyZIjF+5szZw6++eYbvPfee3p1RdYgEon0usks8eWXXyIuLg6ZmZk4dOiQ3gdMZmYmGIYxW3TMfohdu3YNAJzi83Pz5k0IhUKjDsmwsDAEBARwH+Ysbdu2NTpHYGAgSkpKHLrPNm3aGIkGf39/REVFGR0DwO2nsLAQpaWlWLt2LdauXWvy3Lp1beYICgrSe00MHz4cHTt2xBNPPIEvvvgCr7zyCq5evQqGYfD222/j7bffNntfkZGR3M+Gz2dgYKDe/m15bZh6jgIDA3Hu3DmjtYb3yz5vpp5PlUqFsrIytG7dGgBw8OBBzJs3D4cPH0Z1dbXe+rKyMu5cAPRSnYZ8/fXXqKysxGeffYYxY8Y0+PgI94REFEFYwf/+9z/k5ubiu+++w3fffWd0/aZNmzgR1alTJ5w9exZ1dXV635Z79Ohh9f21a9cOY8eOxdq1ax3a0r9//36u8Pb8+fN6XWgqlQoCgQC//vqrSXsEU9E2SwgEAjAMY3RcN4rXWKyNeJmzeTC1L3ti7n4b2o9KpQIAjB071mykw5bXlS6DBw8GAPz555945ZVXuPuaMWOG2eiLoVi15/Npy7ka+3xeu3YNgwcPRqdOnbB8+XJERUVBIpFg165d+Oijj7jngMVSJ17//v1x5swZfPLJJ3jyySfRqlUrs2sJ94VEFEFYwaZNmxASEmKy+HTbtm346aefsGbNGnh6emLEiBE4cuQIfvrpJzz55JONvs85c+bg22+/NSqMtRe5ubl45ZVX8OCDD0IikXAfntHR0QDUvkcMwyA2NhYdOnQwe564uDgAwIULFyxGwAIDA02mZgyjRbakAKOjo6FSqZCZmYnOnTtzx/Pz81FaWso9FlclODgYvr6+UCqVVkcXrYVNcbFR03bt2gFQRxjtdV+6rw1TfmrNzc8//wy5XI4dO3boRbPY1LQttG/fHkuXLsXAgQMxdOhQ7N27F76+vvbcLuECUE0UQTRATU0Ntm3bhhEjRuCJJ54wukydOhUVFRVcG/iUKVMQGhqK1157Df/884/R+az9lh4XF4exY8fi888/R15enl0fEwBMmjQJKpUKX375JdauXQuxWIyJEydy+3vssccgEomwYMECoz0zDIO7d+8CAHr16oXY2FisWLFCr2OPXaf7eC5fvqzXAn/27FkcPHhQ7zZeXl4AYHQuUwwbNgwAjLrUli9fDkCdtnJlRCIRHn/8cfz444+4cOGC0fWm7ASs5eeffwYAJCQkAABCQkIwcOBAfP755yZr8RpzXw8++CB8fX2xZMkS1NbW6l3n6OifKdhIle59l5WVYf369Y06X48ePbBr1y5cunQJDz/8MFdfRrQcKBJFEA2wY8cOVFRU4JFHHjF5/b333ovg4GBs2rQJo0ePRqtWrfDTTz/h4YcfRkJCAp566in06dMHHh4euHXrFrZu3QrAdH2OIW+99Ra++eYbXLlyBV27drVqv/X19fj2229NXvfoo4/C29sb69evx86dO7Fhwwa0adMGAPDxxx9j7Nix+Oyzz/B///d/iIuLw+LFizFr1izcuHEDaWlp8PX1RVZWFn766SdMnjwZM2bMgFAoxGeffYaHH34YiYmJmDBhAsLDw3H58mVcvHgRu3fvBgA8//zzWL58OVJTUzFx4kQUFBRgzZo16Nq1K2e/AKhTKF26dMGWLVvQoUMHtGrVCt26dTNZV5OQkIDx48dj7dq1KC0txYABA3Ds2DFs3LgRaWlpXBOAK/Pee+9h3759SEpKwqRJk9ClSxcUFxfj1KlT+P33360a3ZKTk8O9JhQKBc6ePYvPP/8cQUFBei35q1evxn333Yfu3btj0qRJaNeuHfLz83H48GHcvn0bZ8+etWnvfn5++Oijj/DCCy+gT58+ePrppxEYGIizZ8+iuroaGzdutO3JaCJs1PXhhx/Giy++iMrKSqxbtw4hISGNauIA1H////3vfzFs2DA88cQT2L59u14an3BzmrcZkCBcj4cffpiRyWRMVVWV2TXPPfcc4+Hhodcynpuby7zxxhtMly5dGE9PT0YqlTLt2rVjxo0bp9dmzzD6FgeGsLYFTbU4AMBkZWUxt27dYvz9/ZmHH37Y6PaPPvoo4+3tzVy/fp079uOPPzL33Xcf4+3tzXh7ezOdOnViXn75ZebKlSt6tz1w4AAzZMgQxtfXl/H29mZ69OjBfPzxx3prvv32W6Zdu3aMRCJhEhMTmd27dxtZHDAMwxw6dIjp3bs3I5FI9OwODC0OGIZh6urqmAULFjCxsbGMh4cHExUVxcyaNUuvTZ9h1C3rw4cPN3rM5qwXzNEYiwNTvztz+4FO+zxLfn4+8/LLLzNRUVGMh4cHExYWxgwePJhZu3Ztg/s1tDgQCoVMSEgIM2bMGObq1atG669du8aMGzeOCQsLYzw8PJjIyEhmxIgRzA8//MCtMfd6NfX4GYZhduzYwfTr14/x9PRk/Pz8mL59+zL/+c9/GnyODF8b7Pm3bt2qt87cftjXS2Fhod5eevTowchkMiYmJoZ5//33ma+++or7+9B93kz9fhjG9O/ov//9LyMWi5nRo0czSqXS5O0I90PAME6IqRIEQRAEQbg4VBNFEARBEATRCEhEEQRBEARBNAISUQRBEARBEI2ARBRBEARBEEQjIBFFEARBEATRCEhEEQRBEARBNAIy23QgKpUKd+7cga+vr8On2RMEQRAEYR8YhkFFRQUiIiIgFJqPN5GIciB37twxmipOEARBEIRrcOvWLW6qgylIRDkQdhjlrVu34Ofn5+TdEARBEARhDeXl5YiKimpwqDSJKAfCpvD8/PxIRBEEQRCEi9FQKQ4VlhMEQRAEQTQCElEEQRAEQRCNgEQUQRAEQRBEI6CaKIIgCCtQKpWoq6tz9jYIgrADHh4eEIlETT4PiSiCIAgLMAyDvLw8lJaWOnsrBEHYkYCAAISFhTXJx5FEFEEQhAVYARUSEgIvLy8yziUIF4dhGFRXV6OgoAAAEB4e3uhzkYgiCIIwg1Kp5ARU69atnb0dgiDshKenJwCgoKAAISEhjU7tUWE5QRCEGdgaKC8vLyfvhCAIe8P+XTel1pFEFEEQRANQCo8g3A97/F2TiCIIgiAIgmgEJKIIgiAIXjFw4EBMnz7dqXu4ceMGBAIBzpw549R9tFTmz5+PxMREZ2+jQUhEEQRBuCHPPfccBAKB0WXo0KHO3hrH/v37IRAIjOwjtm3bhkWLFjnsfufPn2/yudG9REVFITc3F926dXPYPviA4e9gw4YNCAgIaNY9CAQCbN++Xe/YjBkzsHfv3mbdR2Og7jyCIFyKGoUSnpKmm+S1BIYOHYr169frHZNKpU7ajfW0atXKoeefMWMGXnrpJe7nPn36YPLkyZg0aRJ3TCQSISwszKH7aE4UCgUkEkmz3Z9SqYRAIIBQ2LhYjY+PD3x8fOy8K/tDkSiCIFyG7adz0G3+bvx89o6zt+ISSKVShIWF6V0CAwMBqCMQEokEf/31F7d+6dKlCAkJQX5+PgDg1q1bePLJJxEQEIBWrVph5MiRuHHjht59fPXVV+jatSukUinCw8MxdepUAKbTYaWlpRAIBNi/fz9u3LiBQYMGAQACAwMhEAjw3HPPATBO55WUlGDcuHEIDAyEl5cXHnroIWRmZnLXs9GT3bt3o3PnzvDx8cHQoUORm5tr8nnx8fHRe05EIhF8fX31jhnun43Y7N69Gz179oSnpyceeOABFBQU4Ndff0Xnzp3h5+eHp59+GtXV1dx9qVQqLFmyBLGxsfD09ERCQgJ++OEHi7+3mJgYLFq0CGPGjIG3tzciIyOxevVqvTWlpaV44YUXEBwcDD8/PzzwwAM4e/Ysdz2bDvviiy8QGxsLmUxm8T7ZxzhhwgSUlZVxEbn58+cDAORyOWbMmIHIyEh4e3sjKSkJ+/fvN/od7NixA126dIFUKkV2djaOHz+OIUOGICgoCP7+/hgwYABOnTql91gB4NFHH4VAIOB+NkznqVQqLFy4EG3atIFUKkViYiIyMjK469nf17Zt2zBo0CB4eXkhISEBhw8fbvBxNwUSUQRBuAwnbhZDqWJwPqfMaXtgGAbVinqnXBiGsdvjYIXKs88+i7KyMpw+fRpvv/02vvjiC4SGhqKurg6pqanw9fXFX3/9hYMHD3LiRKFQAAA+++wzvPzyy5g8eTLOnz+PHTt2oH379lbdf1RUFH788UcAwJUrV5Cbm4uVK1eaXPvcc8/hxIkT2LFjBw4fPgyGYTBs2DC91vTq6mp8+OGH+Oabb/Dnn38iOzsbM2bMaOKzZMz8+fPxySef4NChQ5zIXLFiBTZv3oydO3fit99+w8cff8ytX7JkCb7++musWbMGFy9exGuvvYaxY8fijz/+sHg/H3zwARISEnD69GnMnDkT06ZNw549e7jrR40axQm4kydPolevXhg8eDCKi4u5NVevXsWPP/6Ibdu2WVXb1a9fP6xYsQJ+fn7Izc1Fbm4u9xxOnToVhw8fxnfffYdz585h1KhRGDp0qJ6Yra6uxvvvv48vvvgCFy9eREhICCoqKjB+/HgcOHAAR44cQXx8PIYNG4aKigoAwPHjxwEA69evR25uLvezIStXrsSyZcvw4Ycf4ty5c0hNTcUjjzyid/8A8NZbb2HGjBk4c+YMOnTogDFjxqC+vr7Bx95YKJ1HEITLUFmrfjOsV9pPTNhKTZ0SXebudsp9/70wFV4S69+2f/nlF6OUyOzZszF79mwAwOLFi7Fnzx5MnjwZFy5cwPjx4/HII48AALZs2QKVSoUvvviCawVfv349AgICsH//fjz44INYvHgxXn/9dUybNo07f58+fazam0gk4tJ2ISEhZutwMjMzsWPHDhw8eBD9+vUDAGzatAlRUVHYvn07Ro0aBUDt9bNmzRrExcUBUH/oL1y40Kq92MLixYvRv39/AMDEiRMxa9YsXLt2De3atQMAPPHEE9i3bx/+/e9/Qy6X491338Xvv/+O5ORkAEC7du1w4MABfP755xgwYIDZ++nfvz9mzpwJAOjQoQMOHjyIjz76CEOGDMGBAwdw7NgxFBQUcOnZDz/8ENu3b8cPP/yAyZMnA1Cn8L7++msEBwdb9dgkEgn8/f0hEAj0UpnZ2dlYv349srOzERERAUCdEs3IyMD69evx7rvvAlD/Dj799FMkJCRwt33ggQf07mPt2rUICAjAH3/8gREjRnB7Y0ewmOPDDz/Ev//9bzz11FMAgPfffx/79u3DihUr9KJ0M2bMwPDhwwEACxYsQNeuXXH16lV06tTJqufAVkhEEQThMlTK1SJKqVI5eSeuwaBBg/DZZ5/pHdOtN5JIJNi0aRN69OiB6OhofPTRR9x1Z8+exdWrV+Hr66t3+9raWly7dg0FBQW4c+cOBg8e7NDHcOnSJYjFYiQlJXHHWrdujY4dO+LSpUvcMS8vL05AAepRHuxYD3vSo0cP7v+hoaHw8vLiBBR77NixYwDUkaDq6moMGTJE7xwKhQI9e/a0eD+s6NL9ecWKFQDUv5vKykojF/2amhpcu3aN+zk6OtpqAWWJ8+fPQ6lUokOHDnrH5XK53h4kEone8wMA+fn5mDNnDvbv34+CggIolUpUV1cjOzvb6vsvLy/HnTt3OPHK0r9/f70UJqD/+2HHuRQUFJCIIgiCqGAjUSrnRaI8PUT4e2Gq0+7bFry9vRtMrx06dAgAUFxcjOLiYnh7ewMAKisr0bt3b2zatMnoNsHBwQ0WDLPX66Ygm+IM3RAeHh56PwsEArumP03dj0AgMHm/Ko3Ir6ysBADs3LkTkZGReuuaUuBfWVmJ8PBwvZokFt2IHvu7bCqVlZUQiUQ4efKk0XgU3Uinp6enkYHl+PHjcffuXaxcuRLR0dGQSqVITk7mUsL2xvD3A4D7fTgCElEEQbgM2kiU80SUQCCwKaXGZ65du4bXXnsN69atw5YtWzB+/Hj8/vvvEAqF6NWrF7Zs2YKQkBD4+fmZvH1MTAz27t3LFYjrwkZAcnNzuaiLYV0O2y2mVCrN7rFz586or6/H0aNHuXTe3bt3ceXKFXTp0sXmx9yc6BZYW0rdmeLIkSNGP3fu3BkA0KtXL+Tl5UEsFnOF2PZCIpEY/T569uwJpVKJgoIC/Otf/7LpfAcPHsSnn36KYcOGAVA3KxQVFemt8fDwsPga8PPzQ0REBA4ePKj3PB48eBB9+/a1aT/2hgrLCYJwGVgR5cxIlCshl8uRl5end2E/wJRKJcaOHYvU1FRMmDAB69evx7lz57Bs2TIAwDPPPIOgoCCMHDkSf/31F7KysrB//368+uqruH37NgB1kfWyZcuwatUqZGZm4tSpU1xRtaenJ+6991689957uHTpEv744w/MmTNHb3/R0dEQCAT45ZdfUFhYyEVudImPj8fIkSMxadIkHDhwAGfPnsXYsWMRGRmJkSNHOvLpazK+vr6YMWMGXnvtNWzcuBHXrl3jnqONGzdavO3BgwexdOlS/PPPP1i9ejW2bt3K1Z6lpKQgOTkZaWlp+O2333Djxg0cOnQIb731Fk6cONGkPcfExKCyshJ79+5FUVERqqur0aFDBzzzzDMYN24ctm3bhqysLBw7dgxLlizBzp07LZ4vPj4e33zzDS5duoSjR4/imWee4Yb/6t7n3r17kZeXh5KSEpPneeONN/D+++9jy5YtuHLlCmbOnIkzZ87o1eM5AxJRBEG4DGw6z5mRKFciIyMD4eHhepf77rsPAPDOO+/g5s2b+PzzzwGo60fWrl2LOXPm4OzZs/Dy8sKff/6Jtm3b4rHHHkPnzp0xceJE1NbWcpGp8ePHY8WKFfj000/RtWtXjBgxQq9b6quvvkJ9fT169+6N6dOnY/HixXr7i4yMxIIFCzBz5kyEhoZy9giGrF+/Hr1798aIESOQnJwMhmGwa9cuo1QaH1m0aBHefvttLFmyBJ07d8bQoUOxc+dOxMbGWrzd66+/jhMnTqBnz55YvHgxli9fjtRUdRpZIBBg165duP/++zFhwgR06NABTz31FG7evInQ0NAm7bdfv3546aWXMHr0aAQHB2Pp0qUA1L+DcePG4fXXX0fHjh2RlpaG48ePo23bthbP9+WXX6KkpAS9evXCs88+i1dffRUhISF6a5YtW4Y9e/YgKirKbK3Yq6++ivT0dLz++uvo3r07MjIysGPHDsTHxzfp8TYVAeOIpDEBQF0M5+/vj7KyMrPhcIIgrKfDW79CoVTh4YQIfDzGcmGuPaitrUVWVpbVPjsEYQ9iYmIwffp0p4++cXcs/X1b+/lNkSiCIFwCeb0SCqW6QJS68wiC4AMkogiCcAlYjyjAuT5RBEEQLLwQUatXr0ZMTAxkMhmSkpI4jw1zbN26FZ06dYJMJkP37t2xa9cuvesZhsHcuXMRHh4OT09PpKSk6OXpb9y4gYkTJ3I2/HFxcZg3b55ey+X+/fsxcuRIhIeHw9vbG4mJiSZbfQmCaB7YonKAaqII9+bGjRuUynMRnC6itmzZgvT0dMybNw+nTp1CQkICUlNTzZqkHTp0CGPGjMHEiRNx+vRppKWlIS0tDRcuXODWLF26FKtWrcKaNWtw9OhReHt7IzU1FbW1tQCAy5cvQ6VS4fPPP8fFixfx0UcfYc2aNZyLL3s/PXr0wI8//ohz585hwoQJGDduHH755RfHPiEEQZikQjcSRSKKIAge4PTC8qSkJPTp0weffPIJALUpVlRUFF555RXO8l6X0aNHo6qqSk/M3HvvvUhMTMSaNWvAMAwiIiLw+uuvczN/ysrKEBoaig0bNnCW8YZ88MEH+Oyzz3D9+nWzex0+fDhCQ0Px1VdfWfXYqLCcIOzH4Wt3MWad2jvnvvZB+PaFpAZu0XTYwtOYmBijtmyCIFybmpoa3Lhxw3ULyxUKBU6ePImUlBTumFAoREpKitnJy4cPH9ZbDwCpqanc+qysLOTl5emt8ff3R1JSksVpzmVlZXrjEBq7hiAIx6CbzqtvpsJytoW+urq6We6PIIjmg/27bopVhlNtd4uKiqBUKo18LUJDQ3H58mWTt8nLyzO5Pi8vj7uePWZujSFXr17Fxx9/jA8//NDsXr///nscP36c81QxhVwuh1wu534uLy83u5YgCNuolGtHhjRXTZRIJEJAQABXXuDl5WU01oIgCNeCYRhUV1ejoKAAAQEBRqNsbME9Zhc0gZycHAwdOhSjRo3CpEmTTK7Zt28fJkyYgHXr1qFr165mz7VkyRIsWLDAUVsliBZNpZNqotjJ8o4YZksQhPMICAjg/r4bi1NFVFBQEEQiEfLz8/WO5+fnm31gYWFhFtez/+bn53MTnNmfExMT9W53584dDBo0CP369cPatWtN3t8ff/yBhx9+GB999BHGjRtn8fHMmjUL6enp3M/l5eWIioqyeBuCIKyjwkndeQKBAOHh4QgJCXHoAF2CIJoPDw+PJkWgWJwqoiQSCXr37o29e/ciLS0NgLqwfO/evWbt/5OTk7F371699s89e/YgOTkZABAbG4uwsDDs3buXE03l5eU4evQopkyZwt0mJycHgwYNQu/evbF+/XqTE8n379+PESNG4P3338fkyZMbfDxSqbRJk7kJgjCPs32iRCKRXd50CYJwH5yezktPT8f48eNxzz33oG/fvlixYgWqqqowYcIEAMC4ceMQGRmJJUuWAACmTZuGAQMGYNmyZRg+fDi+++47nDhxgoskCQQCbkZTfHw8YmNj8fbbbyMiIoITajk5ORg4cCCio6Px4YcforCwkNsPG8nat28fRowYgWnTpuHxxx/n6qkkEgkVlxOEE9C1OCCfKIIg+IDTRdTo0aNRWFiIuXPnIi8vD4mJicjIyOAKw7Ozs/WiRP369cPmzZsxZ84czJ49G/Hx8di+fTu6devGrXnzzTdRVVWFyZMno7S0FPfddx8yMjK4FsY9e/bg6tWruHr1Ktq0aaO3H9bxYePGjaiursaSJUs4AQcAAwYMwP79+x31dBAEYQZndOcRBEFYwuk+Ue4M+UQRhP14YeMJ/H5JXQ8Z09oL+98Y5OQdEQThrriETxRBEIS16FockGM5QRB8gEQUQRAuAc3OIwiCb5CIIgjCJXCWTxRBEIQ5SEQRBOESUHceQRB8g0QUQRAuga7ZZr2SuvMIgnA+JKIIguA98nolFPVa4USRKIIg+ACJKIIgeE+VXKn3M9VEEQTBB0hEEQTBe3SLygGKRBEEwQ9IRBEEwXsqNB5RIqEAgDoSRT7BBEE4GxJRBEHwHrYzL8DTgztGwSiCIJwNiSiCIHgPm87z99KKKJqfRxCEsyERRRAE72HdynUjUVQXRRCEsyERRRAE72E9ogK8JNwx6tAjCMLZkIgiCIL3VJqoiVIqSUQRBOFcSEQRBMF7KjXdeX6eujVRJKIIgnAuJKIIguA9bHeer0wMscbmgGqiCIJwNiSiCILgPZU6IkrrFUXdeQRBOBcSUQRB8B62sNxH6kGRKIIgeAOJKIIgeA8bifLRi0SRiCIIwrmQiCIIgvewPlG+UjHEIvXbFkWiCIJwNiSiCILgPayI0otEkcUBQRBOhkQUQRC8p6JWbXHgI6XuPIIg+AOJKIIgeE8FdecRBMFDSEQRBMFrFPUqyOvVgsmXuvMIguARJKIIguA1VZp6KADwloqoO48gCN5AIoogCF7DFpV7eoggFgkhFlJ3HkEQ/IBEFEEQvKZCxyMKAEWiCILgDSSiCILgNWxnnq9ULaLEIrYmigrLCYJwLiSiCILgNZzRpmEkinyiCIJwMiSiCILgNbpGmwCoO48gCN5AIoogCF7D1URJqSaKIAh+QSKKIAhew0WipB4AAA+anUcQBE8gEUUQBK+prDVTE0UiiiAIJ0MiiiAIXqM7Nw/QrYmi7jyCIJwLiSiCIHhNhbnuPIpEEQThZEhEEQTBayprDbvzqCaKIAh+wAsRtXr1asTExEAmkyEpKQnHjh2zuH7r1q3o1KkTZDIZunfvjl27duldzzAM5s6di/DwcHh6eiIlJQWZmZnc9Tdu3MDEiRMRGxsLT09PxMXFYd68eVAoFHrnOXfuHP71r39BJpMhKioKS5cutd+DJgjCKrSF5eQTRRAEv3C6iNqyZQvS09Mxb948nDp1CgkJCUhNTUVBQYHJ9YcOHcKYMWMwceJEnD59GmlpaUhLS8OFCxe4NUuXLsWqVauwZs0aHD16FN7e3khNTUVtbS0A4PLly1CpVPj8889x8eJFfPTRR1izZg1mz57NnaO8vBwPPvggoqOjcfLkSXzwwQeYP38+1q5d69gnhCAIPQzNNskniiAI3sA4mb59+zIvv/wy97NSqWQiIiKYJUuWmFz/5JNPMsOHD9c7lpSUxLz44osMwzCMSqViwsLCmA8++IC7vrS0lJFKpcx//vMfs/tYunQpExsby/386aefMoGBgYxcLueO/fvf/2Y6duxo9WMrKytjADBlZWVW34YgCH0GfbCPif73L8zR63cZhmGYGd+fYaL//Qvz6b6rTt4ZQRDuirWf306NRCkUCpw8eRIpKSncMaFQiJSUFBw+fNjkbQ4fPqy3HgBSU1O59VlZWcjLy9Nb4+/vj6SkJLPnBICysjK0atVK737uv/9+SCQSvfu5cuUKSkpKbHugBEE0mnIDs02anUcQBF9wqogqKiqCUqlEaGio3vHQ0FDk5eWZvE1eXp7F9ey/tpzz6tWr+Pjjj/Hiiy82eD+692GIXC5HeXm53oUgiKZRKdcMIKbuPIIgeIbTa6KcTU5ODoYOHYpRo0Zh0qRJTTrXkiVL4O/vz12ioqLstEuCaJnUKVWorVNHnHypO48gCJ7hVBEVFBQEkUiE/Px8veP5+fkICwszeZuwsDCL69l/rTnnnTt3MGjQIPTr18+oYNzc/ejehyGzZs1CWVkZd7l165bJdQRBWEeVpqgcALxpdh5BEDzDqSJKIpGgd+/e2Lt3L3dMpVJh7969SE5ONnmb5ORkvfUAsGfPHm59bGwswsLC9NaUl5fj6NGjeufMycnBwIED0bt3b6xfvx5Cof5TkZycjD///BN1dXV699OxY0cEBgaa3JtUKoWfn5/ehSCIxsMOH5Z5CLmZedSdRxAEX3B6Oi89PR3r1q3Dxo0bcenSJUyZMgVVVVWYMGECAGDcuHGYNWsWt37atGnIyMjAsmXLcPnyZcyfPx8nTpzA1KlTAQACgQDTp0/H4sWLsWPHDpw/fx7jxo1DREQE0tLSAGgFVNu2bfHhhx+isLAQeXl5erVOTz/9NCQSCSZOnIiLFy9iy5YtWLlyJdLT05vvySGIFo7h8GGAfKIIguAPYmdvYPTo0SgsLMTcuXORl5eHxMREZGRkcEXc2dnZelGifv36YfPmzZgzZw5mz56N+Ph4bN++Hd26dePWvPnmm6iqqsLkyZNRWlqK++67DxkZGZDJZADUEaWrV6/i6tWraNOmjd5+GEb9xuzv74/ffvsNL7/8Mnr37o2goCDMnTsXkydPdvRTQhCEhgqD4cMAzc4jCII/CBhWNRB2p7y8HP7+/igrK6PUHkE0gv9dzsfzG06ge6Q/fn7lPgDAyt8z8dHv/+CZpLZ459HuTt4hQRDuiLWf305P5xEEQZjDZCRKRDVRBEHwAxJRBEHwFsO5eQB15xEEwR9IRBEEwVsqWbdykzVRJKIIgnAuJKIIguAt3PBhikQRBMFDSEQRBMFbKixGoqg7jyAI50IiiiAI3sKJKD2fKPXbFvlEEQThbEhEEQTBWwyHDwNUE0UQBH8gEUUQBG/haqJkVBNFEAT/IBFFEARv4brzpOQTRRAE/yARRRAEb6mw6BNFheUEQTgXElEEQfAWy915FIkiCMK5kIgiCIK3sOk8X1PdeSSiCIJwMiSiCILgJfVKFWrqlACoO48gCH5CIoogCF5SJVdy//c2VRNFPlEEQTgZElEEQfCSKoU6lechEkAi1r5VUSSKIAi+QCKKIAheUqdUd99JRPpvU9SdRxAEXyARRRAEL2FFlIdY/22KfKIIguALJKIIguAlinq1SDKORFF3HkEQ/IBEFEEQvETBRqIMRBTVRBEEwRdIRBEEwUu4miixuZooElEEQTgXElEEQfCSuno2EiXQO06RKIIg+AKJKIIgeImioUiUkrrzCIJwLiSiCILgJYp6czVR6p8pEkUQhLMhEUUQBC+p0ziSG4ookYhqogiC4AckogiC4CXmzDapJoogCL5AIoogCF7SYE2UigHDkJAiCMJ5kIgiCIKXKBrozgMACkYRBOFMSEQRBMFL6syYbYp0RBTNzyMIwpmQiCIIgpeYr4nS/kx1UQRBOBOxszdA2M7HezORX1GLyf+KQ9vWXs7eDkE4BLY7z1xNFEAdegRBOBeKRLkgP53OwbdHspFXXuvsrRCEw5Cb9YnSiiilkkQUQRDOg0SUC8J+M2cLbwnCHTFXEyUUCiDQ6CiKRBEE4UxIRLkgnIhSKp28E4JwHNzsPLHA6DryiiIIgg+QiHJB2EJbikQR7gwbiZKKjN+mtF5R9DdAEITzIBHlgrCRKDmJKMKNUZhJ5wE0P48gCH5AIsoF8aBIFNECUNRrZueJLUWiSEQRBOE8nC6iVq9ejZiYGMhkMiQlJeHYsWMW12/duhWdOnWCTCZD9+7dsWvXLr3rGYbB3LlzER4eDk9PT6SkpCAzM1NvzTvvvIN+/frBy8sLAQEBJu/n+PHjGDx4MAICAhAYGIjU1FScPXu2SY/VXmhrokhEEe6LucJygGqiCILgB04VUVu2bEF6ejrmzZuHU6dOISEhAampqSgoKDC5/tChQxgzZgwmTpyI06dPIy0tDWlpabhw4QK3ZunSpVi1ahXWrFmDo0ePwtvbG6mpqait1doBKBQKjBo1ClOmTDF5P5WVlRg6dCjatm2Lo0eP4sCBA/D19UVqairq6urs+yQ0AlZE1VEkinBj6szMzgN0IlFkcUAQhBOxyWxTpVLhjz/+wF9//YWbN2+iuroawcHB6NmzJ1JSUhAVFWXTnS9fvhyTJk3ChAkTAABr1qzBzp078dVXX2HmzJlG61euXImhQ4fijTfeAAAsWrQIe/bswSeffII1a9aAYRisWLECc+bMwciRIwEAX3/9NUJDQ7F9+3Y89dRTAIAFCxYAADZs2GByX5cvX0ZxcTEWLlzIPaZ58+ahR48euHnzJtq3b2/T47Q3bKEtRaIId4ZNV0tE1J1HEAQ/sSoSVVNTg8WLFyMqKgrDhg3Dr7/+itLSUohEIly9ehXz5s1DbGwshg0bhiNHjlh1xwqFAidPnkRKSop2M0IhUlJScPjwYZO3OXz4sN56AEhNTeXWZ2VlIS8vT2+Nv78/kpKSzJ7TFB07dkTr1q3x5ZdfQqFQoKamBl9++SU6d+6MmJgYq8/jKMgnimgJWCosF4moO48gCOdjVSSqQ4cOSE5Oxrp16zBkyBB4eHgYrbl58yY2b96Mp556Cm+99RYmTZpk8ZxFRUVQKpUIDQ3VOx4aGorLly+bvE1eXp7J9Xl5edz17DFza6zB19cX+/fvR1paGhYtWgQAiI+Px+7duyEWm3/K5HI55HI593N5ebnV92kLJKKIloDlmijqziMIwvlYFYn67bff8P3332PYsGEmBRQAREdHY9asWcjMzMQDDzxg1002NzU1NZg4cSL69++PI0eO4ODBg+jWrRuGDx+Ompoas7dbsmQJ/P39uYut6U1rYT9U5JTOI9wYc7PzAOrOIwiCH1glojp37mz1CT08PBAXF9fguqCgIIhEIuTn5+sdz8/PR1hYmMnbhIWFWVzP/mvLOU2xefNm3LhxA+vXr0efPn1w7733YvPmzcjKysJ///tfs7ebNWsWysrKuMutW7esvk9boEgU0RLQ1kRRdx5BEPzE5u68jIwMHDhwgPt59erVSExMxNNPP42SkhKrzyORSNC7d2/s3buXO6ZSqbB3714kJyebvE1ycrLeegDYs2cPtz42NhZhYWF6a8rLy3H06FGz5zRFdXU1hEIhBAJtQSv7s8pCDYZUKoWfn5/exRGwHyp1FIki3BhL6TyKRBEEwQdsFlFvvPEGV+tz/vx5vP766xg2bBiysrKQnp5u07nS09Oxbt06bNy4EZcuXcKUKVNQVVXFdeuNGzcOs2bN4tZPmzYNGRkZWLZsGS5fvoz58+fjxIkTmDp1KgBAIBBg+vTpWLx4MXbs2IHz589j3LhxiIiIQFpaGnee7OxsnDlzBtnZ2VAqlThz5gzOnDmDyspKAMCQIUNQUlKCl19+GZcuXcLFixcxYcIEiMViDBo0yNanzO5QJIpoCWgLyy1159HfAEEQzsMmiwNA3QHXpUsXAMCPP/6IESNG4N1338WpU6cwbNgwm841evRoFBYWYu7cucjLy0NiYiIyMjK4wvDs7GwIhVqd169fP2zevBlz5szB7NmzER8fj+3bt6Nbt27cmjfffBNVVVWYPHkySktLcd999yEjIwMymYxbM3fuXGzcuJH7uWfPngCAffv2YeDAgejUqRN+/vlnLFiwAMnJyRAKhejZsycyMjIQHh5u61Nmd6QkoogWAPlEEQTBd2wWURKJBNXV1QCA33//HePGjQMAtGrVqlHdaFOnTuUiSYbs37/f6NioUaMwatQos+cTCARYuHAhFi5caHbNhg0bzHpEsQwZMgRDhgyxuMZZkGM50RJgvyRQdx5BEHzFZhF13333IT09Hf3798exY8ewZcsWAMA///yDNm3a2H2DhDE0O49oCVB3HkEQfMfmmqhPPvkEYrEYP/zwAz777DNERkYCAH799VcMHTrU7hskjGELy+Ukogg3ps5SJEpE3XkEQTgfmyNRbdu2xS+//GJ0/KOPPrLLhoiG4WbnUTqPcGMsFZZTJIogCD5gVSSqqqrKppPaup6wDerOI9wdhmE4EWUqnUfdeQRB8AGrRFT79u3x3nvvITc31+wahmGwZ88ePPTQQ1i1apXdNkgY44qF5QzDYPvpHHx//BZO3ixBWU2ds7dE8BiligGjCTKZMtukSBRBEHzAqnTe/v37MXv2bMyfPx8JCQm45557EBERAZlMhpKSEvz99984fPgwxGIxZs2ahRdffNHR+27RSF2wsPzEzRJM33JG71iwrxSJUQH48IkE+HuZHidEtEzqdKwLqDuPIAi+YpWI6tixI3788UdkZ2dj69at+Ouvv3Do0CHU1NQgKCgIPXv2xLp16/DQQw9BJBI5es8tHldM5xVWqAcze0tE8JV5IK+8FoUVcuz5Ox9/XS3EiB4RTt4hwSd0o6wWHcvJJ4ogCCdiU2F527Zt8frrr+P111931H4IK3BFiwN2r4ltA7DphXtRUVuHiRtP4FhWMWoUSifvjuAbuq9ty47lJKIIgnAeNlscEM7HFWuiDIfJ+so8EOCpTuGRVQNhCOdWLtKfYclCNVEEQfABElEuiCum8+QmOq2kHurUrys9DqJ5qLNgbwDo+kTRa4cgCOdBIsoFYaM5LhmJEmtr5lzxcRDNAyeiTNgbABSJIgiCH5CIckFccQCxYToPAKQeGuf1Otd5HETzIDfxetGFuvMIguADJKJcEDYlpmKAeheJ4mgjUdqXnDYSRYXlhD6sxYGpzjyAIlEEQfCDRomov/76C2PHjkVycjJycnIAAN988w0OHDhg180RptH9YHGVVBgrlKRiikQRDVNnwa0coO48giD4gc0i6scff0Rqaio8PT1x+vRpyOVq/5+ysjK8++67dt8gYYzuB4urpPTYyIJeYTnVRBFm0A4fNl1YTj5RBEHwAZtF1OLFi7FmzRqsW7cOHh5al+n+/fvj1KlTdt0cYRqxUAC269tVBIipmihWUFEkijDEVDenLjQ7jyAIPmCziLpy5Qruv/9+o+P+/v4oLS21x56IBhAIBNp6IheJRMlN1ERJNZ16riIEieZDG4kyVxOlPk41UQRBOBObRVRYWBiuXr1qdPzAgQNo166dXTZFNIyreUWZLCxnI1H1VFhO6NNQYbnWJ4pEFEEQzsNmETVp0iRMmzYNR48ehUAgwJ07d7Bp0ybMmDEDU6ZMccQeCRNIXcy1XKE0YXHgYkKQaD7qTLxedKHuPIIg+IBNs/MAYObMmVCpVBg8eDCqq6tx//33QyqVYsaMGXjllVccsUfCBK42P0+hiTaZjkS5xmMgmg9TkUtdqDuPIAg+YLOIEggEeOutt/DGG2/g6tWrqKysRJcuXeDj4+OI/RFmcId0HlsTRSKKMETRwNgXikQRBMEHbBZRLBKJBF26dLHnXggbcLXCcvZDUUqRKMIKtLPzqDuPIAj+YrOIqq2txccff4x9+/ahoKAAKoM3MbI5aB4krlYTZWrsi4tF04jmo+GaKE13HvlEEQThRGwWURMnTsRvv/2GJ554An379oVAYDrcTjgWd0jnUXceYQ5ra6IonUcQhDOxWUT98ssv2LVrF/r37++I/RBWInExt2/TPlGuJQSJ5kNBs/MIgnABbLY4iIyMhK+vryP2QtiAy0WiTKRnqCaKMEeDNVEiqokiCML52Cyili1bhn//+9+4efOmI/ZDWInLFZazDtSmHMtd5DEQzQfnWC6m2XkEQfAXm9N599xzD2pra9GuXTt4eXnpzc8DgOLiYrttjjAPFZYT7gwbiZI22J1HIoogCOdhs4gaM2YMcnJy8O677yI0NJQKy52Eq6bzpCZqoqiwnDBE0UA6j2bnEQTBB2wWUYcOHcLhw4eRkJDgiP0QVuJqheWWuvNUDFCvVEFs5gOTaHko6jWF5eRYThAEj7H5U6tTp06oqalxxF4IG3C5SJQFx3KAissJfRoqLKfuPIIg+IDNIuq9997D66+/jv379+Pu3bsoLy/XuxDNgyuJKJWK4T7sTHXnAa7xOIjmgzPbbDASRa8bgiCch83pvKFDhwIABg8erHecYRgIBAIolVTf0hy4UneebspR90NRJBRALBSgXsVQJIrQQ9uIQLPzCILgLzaLqH379jliH4SNuFJ3nq5AMowsSMRC1CuULiEGieajocJyrU8UiSiCIJyHzSJqwIABjtgHYSNsJKrOBUSUrkAynIUmEQtRrVBShx6hR8M1UTQ7jyAI52OViDp37hy6desGoVCIc+fOWVzbo0cPu2yMsIwruX3rupUbWmJIXehxEM1HnUYcNVwTRSKKIAjnYVVheWJiIoqKirj/9+zZE4mJiUaXnj172ryB1atXIyYmBjKZDElJSTh27JjF9Vu3bkWnTp0gk8nQvXt37Nq1S+96hmEwd+5chIeHw9PTEykpKcjMzNRb884776Bfv37w8vJCQECA2fvasGEDevToAZlMhpCQELz88ss2Pz5H4UqF5ZaGybqSGCSaD1PmrLpQTRRBEHzAKhGVlZWF4OBg7v/Xr19HVlaW0eX69es23fmWLVuQnp6OefPm4dSpU0hISEBqaioKCgpMrj906BDGjBmDiRMn4vTp00hLS0NaWhouXLjArVm6dClWrVqFNWvW4OjRo/D29kZqaipqa2u5NQqFAqNGjcKUKVPM7m358uV46623MHPmTFy8eBG///47UlNTbXp8jsRdRBSNfiFM0eDsPOrOIwiCB1iVzouOjoZIJEJubi6io6PtdufLly/HpEmTMGHCBADAmjVrsHPnTnz11VeYOXOm0fqVK1di6NCheOONNwAAixYtwp49e/DJJ59gzZo1YBgGK1aswJw5czBy5EgAwNdff43Q0FBs374dTz31FABgwYIFANSRJlOUlJRgzpw5+Pnnn/W6EPmUqvRwIbNNS1EF9hjVRBG6aAvLqTuPIAj+YrVPFMPY981KoVDg5MmTSElJ0W5GKERKSgoOHz5s8jaHDx/WWw8Aqamp3PqsrCzk5eXprfH390dSUpLZc5piz549UKlUyMnJQefOndGmTRs8+eSTuHXrli0P0aG40tw5hcb2wmQkysN1HgfRfDTsE6U+TjVRBEE4E6fN2SgqKoJSqURoaKje8dDQUOTl5Zm8TV5ensX17L+2nNMU169fh0qlwrvvvosVK1bghx9+QHFxMYYMGQKFQmH2dnK5vNnMR13JJ0puqSZKRDVRhDHs69psd56IIlEEQTgfmywOvvjiC/j4+Fhc8+qrrzZpQ3xApVKhrq4Oq1atwoMPPggA+M9//oOwsDDs27fPbG3UkiVLuFSho2EFiStZHJhK50k9qCaKMIa68wiCcAVsElFr1qyBSCQye71AILBaRAUFBUEkEiE/P1/veH5+PsLCwkzeJiwszOJ69t/8/HyEh4frrUlMTLRqXwC423bp0oU7FhwcjKCgIGRnZ5u93axZs5Cens79XF5ejqioKKvv1xZcqavNYnceRaIIE9Q1FInSEVHstASCIIjmxqZ03okTJ0x25TWmO08ikaB3797Yu3cvd0ylUmHv3r1ITk42eZvk5GS99YC6foldHxsbi7CwML015eXlOHr0qNlzmqJ///4AgCtXrnDHiouLUVRUZLGwXiqVws/PT+/iKCSuVFhuob5FWxNFheWEFkuvGUAbiQIoGkUQhPOwOhLliG966enpGD9+PO655x707dsXK1asQFVVFdetN27cOERGRmLJkiUAgGnTpmHAgAFYtmwZhg8fju+++w4nTpzA2rVruT1Onz4dixcvRnx8PGJjY/H2228jIiICaWlp3P1mZ2ejuLgY2dnZUCqVOHPmDACgffv28PHxQYcOHTBy5EhMmzYNa9euhZ+fH2bNmoVOnTph0KBBdn8eGoOHCxWWsylHqSkR5UJikGgeGIaxujsPUNdFic0HyAmCIByG1SLK3t15ADB69GgUFhZi7ty5yMvLQ2JiIjIyMrjC8OzsbAiF2g/efv36YfPmzZgzZw5mz56N+Ph4bN++Hd26dePWvPnmm6iqqsLkyZNRWlqK++67DxkZGZDJZNyauXPnYuPGjdzPrEnovn37MHDgQABqa4TXXnsNw4cPh1AoxIABA5CRkQEPDw+7Pw+NwZUKyy3XRGnSeXX8fxxE86BO0an/b85sU6zzvkCRKIIgnIXVImrevHkNFpU3hqlTp2Lq1Kkmr9u/f7/RsVGjRmHUqFFmzycQCLBw4UIsXLjQ7JoNGzaY9Yhi8fPzw5dffokvv/zS4jpnIXWhAcTW1ES5wuMgmoc6nXl4DdVEAdShRxCE87BJRBH8gevOc4FIlCWLA7Y7jwrLCRZdQU01UQRB8Bmn+UQRTUPiSpEopfl0niulJYnmQfe1oCuWdBEKBWDLNOtp9AtBEE6CRJSLwoqPOiUDFc+/iVuenUdjXwh96nREt6WGFvKKIgjC2ZCIclE8dAQJ36NRFmuiXMjvimge6hrozGPh5ucpSUQRBOEcSES5KLqpMVcWUVISUYQBDc3NY6H5eQRBOBubRVR+fj6effZZREREQCwWQyQS6V2I5kFPRPFcgLAiT2qqJkpMY18IfeQNuJWzcJEoElEEQTgJm8a+AMBzzz2H7OxsvP322wgPD6dxC05CKBTAQyRAnZLh/fw8SucRtsBaHDQkoqgmiiAIZ2OziDpw4AD++usvm2bREY5BIhKiTqnkfRTHmnQejX0hWKxN52kjUfx+/RME4b7YnM6LiopyiHs5YTsSFxn9IrdkcUCRKMIA7fBhy1FuikQRBOFsbBZRK1aswMyZM3Hjxg0HbIewBTbdwXcBoo1EGdfMSV1ECBLNh9zaSJSIaqIIgnAuNqfzRo8ejerqasTFxcHLy8tollxxcbHdNkdYxlUMNxUWIgsUiSIMqbOysJy68wiCcDY2i6gVK1Y4YBtEY3CVdJ7lmijqziP0sbawnHyiCIJwNjaLqPHjxztiH0QjcJWRKZzFgcXCcn4/BqL5qLNQQ6cL1UQRBOFsbBZRAKBUKrF9+3ZcunQJANC1a1c88sgj5BPVzLACxJUtDmjsC2GIpdeLLtSdRxCEs7FZRF29ehXDhg1DTk4OOnbsCABYsmQJoqKisHPnTsTFxdl9k4RpXC6dZ0Jku8pjIJoPhZVjXygSRRCEs7G5O+/VV19FXFwcbt26hVOnTuHUqVPIzs5GbGwsXn31VUfskTCDyxSWW+i2YmuiqLCcYNHOziPHcoIg+I3Nkag//vgDR44cQatWrbhjrVu3xnvvvYf+/fvbdXOEZVzP4sC8T1S9ioFSxXAfjETLxfqaKOrOIwjCudgciZJKpaioqDA6XllZCYlEYpdNEdbhKoXl8nrzH4q6xeZ8fxxE82B7TRSJKIIgnIPNImrEiBGYPHkyjh49CoZhwDAMjhw5gpdeegmPPPKII/ZImMFV6onYkS6WIlHqdfx+HETzoLB2dp6IrYmi1w1BEM7BZhG1atUqxMXFITk5GTKZDDKZDP3790f79u2xcuVKR+yRMIPEVbrzLFgciIUCsBk86tAjgEbURJFPFEEQTsLmmqiAgAD897//RWZmJi5fvgwA6Ny5M9q3b2/3zRGWcRWPJUvpGYFAAIlYiNo6Fe9ru4jmgXMsFzfUnUc1UQRBOJdG+UQBQHx8POLj4+25F8JGuJooHkei6pUqsJ9x5gqFpWIRiSiCg4tcWmm2STVRBEE4C6tEVHp6OhYtWgRvb2+kp6dbXLt8+XK7bIxoGA8XKCzXFXjmCoVdpbaLaB6sTueJyCeKIAjnYpWIOn36NOrq6rj/E/zAFYb36gojcyKKXMsJXRT1msLyBrrzKBJFEISzsUpE7du3z+T/CefiCmabrIgSCLQfeoZQJIrQxdbCcurOIwjCWdjcnff888+b9ImqqqrC888/b5dNEdbhCuJD1yNKIDAjolzENJRoHqz1iaJIFEEQzsZmEbVx40bU1NQYHa+pqcHXX39tl00R1sGKDz5bHFga+cIi9VCPfuGzGCSaD61jueXuPBHbnUcWBwRBOAmru/PKy8s5c82KigrIZDLuOqVSiV27diEkJMQhmyRM4woWB3UWPKJYpBSJInRQWJnOo0gUQRDOxmoRFRAQAIFAAIFAgA4dOhhdLxAIsGDBArtujrCMS3TnWRj5wiL1YGu7qLCcaExNFIkogiCcg9Uiat++fWAYBg888AB+/PFHvQHEEokE0dHRiIiIcMgmCdO4UmG5pXSeq8wAJJoHqokiCMJVsFpEDRgwAACQlZWFtm3bmi0SJpoPV7I4sFwTxf/HQTQfdZoaJ0vRS0DXJ4peNwRBOAebHctv3ryJmzdvmr3+/vvvb9KGCOtxhQiO3IrCcld4HETzYW06jyJRBEE4G5tF1MCBA42O6UallFTX0my4wgBiq2qixOruPIpEEYBuYbmV3XkkogiCcBI2WxyUlJToXQoKCpCRkYE+ffrgt99+c8QeCTO4gk+UVTVRLpCWJJoPqokiCMJVsDkS5e/vb3RsyJAhkEgkSE9Px8mTJ+2yMaJhXGEAsfYDUWR2DY19IXSxuTuPfKIIgnASNkeizBEaGoorV67Y63SEFbhEJErZcDrPFR4H0XxwheUUiSIIgufYLKLOnTundzl79iwyMjLw0ksvITExsVGbWL16NWJiYiCTyZCUlIRjx45ZXL9161Z06tQJMpkM3bt3x65du/SuZxgGc+fORXh4ODw9PZGSkoLMzEy9Ne+88w769esHLy8vBAQEWLy/u3fvok2bNhAIBCgtLW3MQ3QIriA+2L1ZNNukmihCh7p6mp1HEIRrYLOISkxMRM+ePZGYmMj9f9iwYVAoFPjiiy9s3sCWLVuQnp6OefPm4dSpU0hISEBqaioKCgpMrj906BDGjBmDiRMn4vTp00hLS0NaWhouXLjArVm6dClWrVqFNWvW4OjRo/D29kZqaipqa2u5NQqFAqNGjcKUKVMa3OPEiRPRo0cPmx+bo3GFrjZbaqL4/DhYquT1GLxsP+ZsP+/srbgt1nR0AhSJIgjC+dgsorKysnD9+nVkZWUhKysLN2/eRHV1NQ4dOoROnTrZvIHly5dj0qRJmDBhArp06YI1a9bAy8sLX331lcn1K1euxNChQ/HGG2+gc+fOWLRoEXr16oVPPvkEgDoKtWLFCsyZMwcjR45Ejx498PXXX+POnTvYvn07d54FCxbgtddeQ/fu3S3u77PPPkNpaSlmzJhh82NzNC5htmlFOk/qQoXlf+eW41phFXaey3X2VtwShmF0aqIa6M4TUXceQRDOxWYRFR0drXeJiorSm6NnCwqFAidPnkRKSop2Q0IhUlJScPjwYZO3OXz4sN56AEhNTeXWZ2VlIS8vT2+Nv78/kpKSzJ7THH///TcWLlyIr7/+GkKh3crH7IauiGIYfn6QyG2KRPG/sLy4SgEAKK+t5+1z7sooVQzYp7Uhs02KRBEE4WxsVgavvvoqVq1aZXT8k08+wfTp0206V1FREZRKJUJDQ/WOh4aGIi8vz+Rt8vLyLK5n/7XlnKaQy+UYM2YMPvjgA7Rt29bq25SXl+tdHIlUpK4lYhj+fpBY5VjuQpGoEo2IUqoYVMrrnbwb96NOp9OOZucRBMF3bBZRP/74I/r37290vF+/fvjhhx/ssik+MGvWLHTu3Bljx461+jZLliyBv78/d4mKinLgDgEPsTbdwdd6IoUVRcKuVBNVUl3H/b+sps7CSqIx6L4GqCaKIAi+Y7OIunv3rkmvKD8/PxQVFdl0rqCgIIhEIuTn5+sdz8/PR1hYmMnbhIWFWVzP/mvLOU3xv//9D1u3boVYLIZYLMbgwYO5Pc+bN8/kbWbNmoWysjLucuvWLavvrzHopjv4KkAUGgd7y5Eo1+nOK6lWcP8nEWV/dOv7WJFkDurOIwjC2dgsotq3b4+MjAyj47/++ivatWtn07kkEgl69+6NvXv3csdUKhX27t2L5ORkk7dJTk7WWw8Ae/bs4dbHxsYiLCxMb015eTmOHj1q9pym+PHHH3H27FmcOXMGZ86c4ToP//rrL7z88ssmbyOVSuHn56d3cSRikRDs5wxfi8utszhwnUgUWxMFAOU1lM6zN3U6jQgNDTkXa+oU68lskyAIJ2GzY3l6ejqmTp2KwsJCPPDAAwCAvXv3YtmyZVixYoXNG0hPT8f48eNxzz33oG/fvlixYgWqqqowYcIEAMC4ceMQGRmJJUuWAACmTZuGAQMGYNmyZRg+fDi+++47nDhxAmvXrgWgnuM3ffp0LF68GPHx8YiNjcXbb7+NiIgIpKWlcfebnZ2N4uJiZGdnQ6lU4syZMwDUItHHxwdxcXF6+2SjbJ07d27QV6o5kYiFqK1T8VaAWDM7T+JCjuWlFIlyKNZ25gFUE0UQhPOxWUQ9//zzkMvleOedd7Bo0SIAQExMDD777DOMGzfO5g2MHj0ahYWFmDt3LvLy8pCYmIiMjAyuMDw7O1uvM65fv37YvHkz5syZg9mzZyM+Ph7bt29Ht27duDVvvvkmqqqqMHnyZJSWluK+++5DRkaGXhfh3LlzsXHjRu7nnj17AgD27dtncsgyX5GINCKKr5EoKzx/XDcSRSLK3lg7Nw+gmiiCIJyPzSIKAKZMmYIpU6agsLAQnp6e8PHxadImpk6diqlTp5q8bv/+/UbHRo0ahVGjRpk9n0AgwMKFC7Fw4UKzazZs2IANGzZYvceBAwfysqVdPZOunrcCxN3MNqmw3LEorJybBwAiEUWiCIJwLo0yP6qvr8fvv/+Obdu2ccLizp07qKystOvmiIaRaD5I+CpA5Fak81ypsFw3EkUiyv6wFgfWiCiKRBEE4WxsjkTdvHkTQ4cORXZ2NuRyOYYMGQJfX1+8//77kMvlWLNmjSP2SZiB767l7hSJqleqUF5LkShHUmflyBeAuvMIgnA+Nkeipk2bhnvuuQclJSXw9PTkjj/66KNGXXOE4+G7ALGlJorvkaiymjroZnRJRNkfaxoRWLjuPIpE8Zp6pQpvb7+AXedpVBLhftgcifrrr79w6NAhSCQSveMxMTHIycmx28YI6+C9iLIlEqUZX9NQa7uz0PWIAkhEOQKuJkpM3XnuwsmbJfjmyE0culaEYd3Dnb0dgrArNkeiVCoVlErjVvTbt2/D19fXLpsirIf9xs73dJ7UigHEAL+jUbpF5UDLFFEMw+BqQQXqHfR6q7PC4Z6Fq4kinyhew/7dVNSSrxrhftgsoh588EE9PyiBQIDKykrMmzcPw4YNs+feCCvgfSTKinSe7nV8FYOAtqicDZS1RIuD3RfzkbL8T3z42z8OOb8theUUiXIN2DrCGgX/feAIwlZsFlHLli3DwYMH0aVLF9TW1uLpp5/mUnnvv/++I/ZIWID9sOGtiLImnafzgSmv4+fjALTDh8P91H5jLTESde52KQDgakGFQ87Pjgmy5HDPIhZRd54rwH7ZqFLU89ImhiCags01UW3atMHZs2exZcsWnD17FpWVlZg4cSKeeeYZvUJzonmQukF3nkAggEQshKKev6ahgDYtERPkjTtltZpCc/7WcDmCO6U1ABw38qau3naLA+rO4zesiFIx6nS9zEPk5B0RhP2wWUQVFhYiODgYzzzzDJ555hm9686fP4/u3bvbbXNEw/A+nWdlt5VUI6LkdfwN+bOF5TFB3jh07S7qVQyqFUp4SxvlWeuS3CmtBQA9qwd7orBp7At157kC5Tq1UNUKJYkowq2wOZ3XvXt37Ny50+j4hx9+iL59+9plU4T1SHiezpNb6fvD94gaoK2Jigzw5OpxHCUm+MqdMjYS5ZjHXWeDY7mYaqJcAt3XSrWCissJ98JmEZWeno7HH38cU6ZMQU1NDXJycjB48GAsXboUmzdvdsQeCQvw2WyTYRirzRM513Ie10Sxw4dbe0vg7+kBoGXVRSlVDPLK2EiUg9J5Sut9okTkWO4SlOmJKP5GmgmiMdgsot58800cPnwYf/31F3r06IEePXpAKpXi3LlzePTRRx2xR8ICfE7n1asYzpxSKrIcwuezGGRhI1EBXjoiqrrliKjCCjknWCrl9Q6xOWjMAGKKRPEb3WgtiSjC3WjU7Lz27dujW7duuHHjBsrLyzF69GiEhYXZe2+EFXjw2CdKV9hZm87jcySKLSxv5S2BXwuMRLGpPJZKuf2jUYpGWhxQ1xd/0W1CqHbAa4YgnInNIurgwYPo0aMHMjMzce7cOXz22Wd45ZVXMHr0aJSUlDhij4QF+ByJskVEaSNR/P2mykaiWnl7tMh0HtuZx+KIDj3baqK0aygaxV8oEkW4MzaLqAceeACjR4/GkSNH0LlzZ7zwwgs4ffo0srOzqTPPCUh5XFjORsdEQgEXNTCHlMdiENAfPqyXzmvJIsoBRfWcY7k1Y190OvioLoq/6P6NVFFhOeFm2Nyb/dtvv2HAgAF6x+Li4nDw4EG88847dtsYYR2uEImypkhYwvMhxLrDhwM8PeDvqf7TaUmu5ay9AYsjHjsrvC2NCWIR6whzikTxkzqlSi/6RK7lhLthcyTKUEBxJxIK8fbbbzd5Q4Rt8LkgW25DkTDXncdTEcV6RPl7ekAsElIkCg6KRNmQztONblIkip8YzsurIhFFuBlWi6hhw4ahrKyM+/m9995DaWkp9/Pdu3fRpUsXu26OaBg+DyC2pdOKfRz8FVHaonIALVNEaQrL2QiQI2qiFKxjuRWvGZGAIlF8x/Dvo4bSeYSbYbWI2r17N+RyOffzu+++i+LiYu7n+vp6XLlyxb67IxrEownpPEW9Cudvl0HloA8ghQ2eP3xOSwK69gZq8dQSRVSuJp0XF+wDwPmRKKFQADYYVU+jX3iJYcqXIlGEu2G1iDJsIaaWYn7QFMfyFb//g4c/OYCfz92x97YAaPdkzTBZzuKgnp9vsuzw4VZe6kiUn6xliajaOiXuap6DjmG+ABxUE2VD9BLQdug5KhJVKa/n7WvSFTAU2lQTRbgbjfKJIvhDUyI4/+RXAACuFVbZdU8sNqXzeB6JYtN5gS00ncfWQ3lJRIhqpR407gjXcq1juXVDnTnXcqX9RVReWS2S3vkdL35z0u7nbikYpnyryCeKcDOsFlECgcBoWn1Lml7PV5oyc66oUh1ZqHTQCA/W88mdCssDNek8rdlmy/hQyNWMe4kI8OQEpCO786xJ5wGOdS0/cv0uqhRK7L9SiKwix3zRcHcMv2RU83jAOEE0BqstDhiGwXPPPQepVAoAqK2txUsvvQRvb28A0KuXIpqPpkRw7lapf2cVDhqi2xiLA75GotiaKMNIVEsZQJyjiUSF+8u4VKaza6IArVeUI7rzLuWVc///5ewdvDI43u734e6wrxGBAGAYciwn3A+rRdT48eP1fh47dqzRmnHjxjV9R4RNSDQz6eoaEYm6y0aiHPTGZpvFAb9rotjhw2xNlL8mIqWoV6G2TgmZh+XZgK4Om86LDPDkonCO6c6ztSbKcZGoy7kV3P9/PkciqjGw0cpgHykKKuTkWE64HVaLqPXr1ztyH0QjaWwEp0ah5N7QDL1c7IU71UTpDh8GAB+JGEIBoGLUKQt3F1FsZ15EgKeDI1FqMWRN9BLQqYlyQHfeZZ1I1D/5lbiSV8EV1RPWwabzwv1lJKIIt4QKy10cD006w9ZaIjaVBwAVDopE2VLfIuW5Y7mhT5RQKGhRQ4hZj6hwfxn8HOjWbms6z1HdecVVCuSXq/9G+sW1BgD8fNYxXazuDNt8EOYvAwBUk08U4WaQiHJxGutYzqbygGaoibIhncf3SFQrbw/uWEvq0NNL53GRKAek8zgRZWN3np1F1OVcdRQqurUXnurbFoA6pUfWLrbBCu0wP1ZEUSSKcC9IRLk4jRUfupEoh3XnsT5RVkWi+NudZzh8mIUTUdXuLaIYhuHm5kXo1ERVyutRb2enfL7URF3KU9dDdQrzRUrnEHh6iHDzbjXO3S5r4JaELuzfTZi/2haDRBThbpCIcnHYwnJbRVSRXiSKaqIsYTh8mKWlRKJKq+tQo2lND/OXwVemLaW0d1OCzd15DvKJYiNRncL84CURY3DnEACU0rMV9m8jzF/d1U3pPMLdIBHl4tgjnVdTp7R7RAHQGfvi4t15hsOHWVpKTRRbDxXkI4HMQwQPkRBeErV4t3eHHldYbmUkSuSgSNRlTSSqc7i6kPyRhAgAwC/nch02JskdYV8fYX7qSFSdkuHlFyWCaCwkolwc9sNGqWJs+iC5W6nv6+UImwN38Yni3Mq9PPSOt5RIlG4qj8VRHXp19TYWlovs351Xr1ThSj6bzvMDAAzoGAxfmRh55bU4cbPEbvfl7rCvj3BNYTlAo18I94JElIujW4Bri1cUOweNxREpPdt8ovhbE2VotMnSckSUOhIV4a8johzUoSe3IXoJACIHdOfduFsFRb0KXhIR2rbyAqB+faZ2DQNAKT1rqa1Tcl+KWvtIuPeq6jpK6RHuA4koF0f3w8YWAdIcIsqWdB6vI1EGw4dZHDn+hE9w9gYB2miCIyJRDMPo1ERZ150ndkB33iWNyWbHMF8Ihdp9PKxJ6e06n+uQ9Le7wf5dCAWAt0QMT42XGhWXE+4EiSgXRzdVZosAMUznOcLmoDEWB3yMRLHpvAADEcUKCfePRKnTeZG66TwHuJYrVQxXwG+r2aY9I1GsySabymPpF9carbwluFulwMFrd20655cHsrDy90y77dEVYAW2r8wDQqEA3lJ19LJaTiKKcB9IRLk4AoGA+8CxpbicLSxnv/HzpSaKnyLK2CMKaIHpPL2aKE06z47iu06nw87WAcT2jESx417YonLdPQ3vHg4A+P74LavPp6hX4Z2df+Oj3/9Bfnmt3fbJd9jh3OzfiaeEjURROo9wH0hEuQG2psIYhuF8oqIC1TUfDknnsT5RNplt8u9bakM1Ue4+hDhXZ/gwi58DUpm6r1/bu/PsJ74vaewNOof7GV03RmO8uftiHgoqrBNEpTUKsBqPHeTcEmBfG2z9nLdEE4midB7hRvBCRK1evRoxMTGQyWRISkrCsWPHLK7funUrOnXqBJlMhu7du2PXrl161zMMg7lz5yI8PByenp5ISUlBZqZ+KP2dd95Bv3794OXlhYCAAKP7OHv2LMaMGYOoqCh4enqic+fOWLlyZZMfqyNgP3CsLSwvr63nvvVHt9aIKEdEohpRE8XHSBQ7fDjQTE2UO0ei6pUq5JWbSOc5wLVcN5IqFtpYE2Unn6iy6jrcKVM/XlNz8rpE+KFX2wDUqxhsPXHbqnOW6pix5pW1nEgU++WCfa1oI1Ekogj3wekiasuWLUhPT8e8efNw6tQpJCQkIDU1FQUFBSbXHzp0CGPGjMHEiRNx+vRppKWlIS0tDRcuXODWLF26FKtWrcKaNWtw9OhReHt7IzU1FbW12jcwhUKBUaNGYcqUKSbv5+TJkwgJCcG3336Lixcv4q233sKsWbPwySef2PcJsANsSs7aSBRbD+UrFaO1j9oEz9k1Ubp+V3wbrcFFolqgiMqvkEPFqF9jQZrXCuCY7jz2S4BEJIRAYO3YF/t257H1ULrjbQx5JikaALD5aLZV96srou60wEgU+3firRFRVZTOI9wIp4uo5cuXY9KkSZgwYQK6dOmCNWvWwMvLC1999ZXJ9StXrsTQoUPxxhtvoHPnzli0aBF69erFiRuGYbBixQrMmTMHI0eORI8ePfD111/jzp072L59O3eeBQsW4LXXXkP37t1N3s/zzz+PlStXYsCAAWjXrh3Gjh2LCRMmYNu2bXZ/DpqKrVEctjOvtY8EPppiT0eMftHWRIkaXMtaHDCMfm0MHzAcPszCfjjU1ql4aRJqD9hUXpi/TK9TzRHdebZ25gH2r4kyNNk0xfAe4fD39EBOaQ3+/KewwXOyNXVAS4tEqd9T2NeKlyadRz5RhDvhVBGlUChw8uRJpKSkcMeEQiFSUlJw+PBhk7c5fPiw3noASE1N5dZnZWUhLy9Pb42/vz+SkpLMntNaysrK0KpVqyadwxFwheU2RqJaeUu4AmFnWxzo1k3Z6r7uaLSRKP3IhK9MDDZg4q7RqBwTHlGAY7rzbJ2bBwAikX278y7lmu7M00XmIcITvdsAADYdvdngOXVnK+a2IBFVZlAT5UWRKMINcaqIKioqglKpRGhoqN7x0NBQ5OXlmbxNXl6exfXsv7ac0xoOHTqELVu2YPLkyWbXyOVylJeX612aA4kmimOt+NBGoqTwlWmHydobm9J5Ot1Y8jr+fFPVHT5sWFguFArgK3WM6SRfMGVvADgmEqWwcW4eYP9I1CUuEmVeRAHA00nqAvP/XS5osFhcNxKVW9by0nnaSJT6fYoiUYQ74fR0nitw4cIFjBw5EvPmzcODDz5odt2SJUvg7+/PXaKiopplf7Z257H2BkE+EvhwkSgH1EQprbc4EAoF2touHkWizA0fZvH3cu+6KPZDP8JQRDmkJkr9RNsiouzZnadUMfhHI6I6WUjnAUBcsA+S27WGigG2HMu2uLa0pmVGoliBzf6NeGm+cFSRTxThRjhVRAUFBUEkEiE/P1/veH5+PsLCwkzeJiwszOJ69l9bzmmJv//+G4MHD8bkyZMxZ84ci2tnzZqFsrIy7nLrlvVeMk1BKrKtO49N57X2lsLXkek8G9Mz3OiXOv6IKDaK4CcT6w0fZnH34nK2EFrXrRxwTHdenY0jXwD7RqKyi6tRU6eEVCxETGvvBtc/c686GvXd8VsW//ZKdSJRBRXyFuN2XmYYidI4ltfQ2BfCjXCqiJJIJOjduzf27t3LHVOpVNi7dy+Sk5NN3iY5OVlvPQDs2bOHWx8bG4uwsDC9NeXl5Th69KjZc5rj4sWLGDRoEMaPH4933nmnwfVSqRR+fn56l+bAQ2xbd16RicJyZ/tEAfodenzBXFE5i7uLqBwTw4cBbU1UpbzebqLAFnNWFq47zw7NCJc19VAdw3y5CJclHuwShiAfCQoq5Nh7Kd/supIq7WtDqWJQaDAtwF1h6+W4miiKRBFuiNPTeenp6Vi3bh02btyIS5cuYcqUKaiqqsKECRMAAOPGjcOsWbO49dOmTUNGRgaWLVuGy5cvY/78+Thx4gSmTp0KQO3gPX36dCxevBg7duzA+fPnMW7cOERERCAtLY07T3Z2Ns6cOYPs7GwolUqcOXMGZ86cQWVlJQB1Cm/QoEF48MEHkZ6ejry8POTl5aGwsOFunOamsYXlujVRFXIHpvOsjkRpugztEIlafzAL7/16ucl2CeaMNlk4EVXtfiJKpWK4SJRhTRQbwQTsV0/H1USJndOdpy0qt5zKY5GIhXjyHnXKftNR8ym90hr9OZUtJaXHpfM89WuiyCeKcCfEDS9xLKNHj0ZhYSHmzp2LvLw8JCYmIiMjgysMz87OhlCo/RDu168fNm/ejDlz5mD27NmIj4/H9u3b0a1bN27Nm2++iaqqKkyePBmlpaW47777kJGRAZlMm5KYO3cuNm7cyP3cs2dPAMC+ffswcOBA/PDDDygsLMS3336Lb7/9llsXHR2NGzduOOrpaBScxYHV6TxNTZS3hPswdKzFga2RqKa9yapUDN7ddQl1SgZP3tMG7YJ9Gn2uEjMeUSzaSJT7pSj2Xi5AWU0dfKRitG3lpXedh0gIL4kI1QolymvqjeYKNoa6etsLy+05O8/aonJdnujdBp/uv4ZD1+5CpWL0bCBYWJ8ogUBt4ZFbWgu0bfJ2eY+5wnIa+0K4E04XUQAwdepULpJkyP79+42OjRo1CqNGjTJ7PoFAgIULF2LhwoVm12zYsAEbNmwwe/38+fMxf/58s9fzCa47z2afKP2aKIZhrDY5tAbba6LsE4kqq6njipSziqqaJqI0H4DmRJS7DiFmGAaf7LsKABh7bzRkHsZeX34yD7WIslNTQmMKy+0ZibpVXA0AiA1quB6KJUojLpUqBiXVCs68VhdWRMW09kZWUVWL6NBjGEbrE+Wp7xNFkSjCnXB6Oo9oOrak89g3e0Bd58PWRNWrGLuOXGEYxuZ0nq0RNXOwIhFQi6imYG74MIufm9ZEHbx6F2dvlUIqFmLifbEm19i7Q4+NQFpbQwfo+kQ1/bVbpElzB/saCyFzeIiECNB0n+m+7nRhX0OsgWdLSOdVKZRcdJD9ouFNkSjCDSER5QbYYnFQUq0Aw6hTC4FeHvCWaA0jHeH5o7u/hpDaGFEzR7HOh9mNu00TUey5zKWr3HUI8Sf71LMmx/Rta1ZU2Nsrqq7eeZEopYrhftfBJqJJlmDH4RRVGBeM19YpuS8nnTUGni3BtZwV1hKREDIP9e+TZucR7giJKDdAasMAYrYeKtBLArFICKFQAB+J/euidIWQ1TVRIvsMIS6u0n6Y3SiqbtK5SnWidqZwx+68EzeKceR6MTxEArw4oJ3ZdfZ2LVc0YuyLvWbnlVQroNJ8uTD3uzZHa836IhORKDYKJRYK0D5EnVa+0wLSebpu5WyJgLeU0nmE+0Eiyg2wxaRS6xGl/aBwhFdUY0SU1MO2LkNz2Cudl1tWg0PX7gIA2gR6mlzDRaLcSESxtVCP92qDcH/TjxsANzLIfjVRznMsZ1N57JcLWwjyNR+JYu0NArw8EK7pcGxJkSjdIc6eHpTOI9wPElFugC3pPF2PKBZHjH7RjSqY6lgyhTYS1bRvqmy0DVB/62/s+Rb/cgnVCiV6tQ1A/7ggk2vcLRJ1IacM+68UQigAXhoQZ3Gtn50FZKNm57HdeU30iSqq0Lr420qQ5gvJ3SpjEcXaGwR4SRDhr+4Ozi+vdXvDTbao3FfH5Z/tzqutU9lt1iFBOBsSUW6ARKRx+rZCROl6RLE4YvRLY4wTpR72r4liGG3XlS38+U8hdp7PhVAALErrZlYIupuIWq2JQj2cEIGYBrrU7O1aXmfDmCAWe0eigmysh9K9DSvEdCnlujs90NpHCrFQABUDtzfcZIW1v46IYtN5AFDDo/mYBNEUSES5AbZEonQ9olgcmc6zJapgr5oowy6pLBvrouT1SszbcREAMC45Bl0j/M2uZT8kqhVKq8fu8JWrBRXIuKge0v1/A9s3uN7+3XnOm53XFBHFfiExGYmqZsWEBCKhAKF+6mgUO9jZXdGOfNEKJ6lYyDWxVDtg4LkrUVZT16gvdwT/IBHlBtgyLoV9o9eLRDlg9Iu8ESLKXjVRbGE5G6W4YWNd1No/riOrqArBvlKkP9jB4lo/nW/arh6N2nYqBwwDDOkSio5WuHbbvTvPiTVRhU2KREk05zBfWB6osUEI16T03L0uin1N6P59CAQCeJNXFADg6XVHMHj5Hyg0UUdHuBYkotwAVqjU2RCJauXdPDVRjYtE2acmqmukOoKUZcbmIPtuNXadz9UzP7xVXM0VVs8Z3lmvMNYUIqEAvhoR6uoiKkcz4qVvTCur1tu9O68xNVEi+3TncTVRvrbXRHGRKBMpOvY1wXpJscXl7m64yb4mdNN5gNbmoKoFF5czDIN/8iugqFfhwp0yZ2+HaCK8cCwnmobElu68KuMCWl8H1kTZElWQ2pCWtARbE9W7bSDO3io1G4ma/M0JXNaM+ogN8kZyXGtcLaiEvF6F5Hat8UhChFX35+fpgQp5vcuLqPxydXQkxM+6aIyvg7rzJDZYHFgbiapWqH8/5roNm5LOY32liirlRq7/JQY+Y2wkyt0NN7lIlMGXEG+JCIUAalpwJKpSXs+5818vrMKgjk7eENEkKBLlBthWE2WczvN1QDqvUYXl4qbXRDGM1pG9d3QgANPpvMIKOSeghAK1FcLmo9k4llUMsVCAhSO7Wj0Cx12Ky/PL1a8Ntm6nIbh0np0ed2PSedbOzhv/1THcv3Sf2TQa51beqJootUCqrVMZpalKDSJRYX6siHLvSJSuT5Qunpp0XlULFlGs7QUAXC+sdOJOCHtAkSg3gO3Os6WwXNcniuvOs2c6T7MXW0Z42CIGzVFeq/2W1ys6AABwp6wWtXVKvflvp7JLAAAdQn3ww5R+OHa9GIeu3cXpWyV4rGck4kMbrglicQevKIZhuEiU1SLK077deQrWsdyG14w1kSiVisGZW6WoUzK4lFeOMH/jx9eUSJS3VAxPDxFq6pQoqpTrdaGVVmvNbQEgIqCFRKJM+EQB2tEvNS04ncd+yQOaPpaKcD4kotwAbuZcA7VEtXVKTijpRaI0b3R2jUQ1oiaKHfvSlEgUm8rzlogQ5ieDn0yM8tp63LxbrVcszYqo3tGB8JN5IKVLKFK6hDbqPlkRda3Adb9VVsrruShKqJXpPLbzqlJej3qlymaTSkMUTYpEmX/NFFTIOWF9p9Q4AqRSMdqu1UbURAHqaNTtkhoUVSoQ3VprDcEOsOYiUZp0Yq6bd+exwtpsTZS85UaiinVE1PVCElGuDqXz3AD22+21wiqLaQ1WYHiIBHqtx2x3XqUjfKKaORJVrNN9KBAIEKvxOjL8xnfqplpE9Wob2Oj7YrkvXm3EuXr/NRzILGry+ZwBm8rzlYnhJbHuu5WvTpTBHk0J2ZoGAGtFHACINWNf6i2YbeaUalvJTYmospo6LpLV2tv2SBSg4xVlUFzOWhwEeGoiUZooWEGFextucpEoT8NIlKY7rwX7RJXqiKi88lpUtXC7B1eHRJQb0DHUF94SESrl9fgnv8LsOm0qT6pX7+PnSJ+oRtVENf4Ntsig+5A1jNQdRKyoV+HcbXVXTK/opouoZ5LaIi0xAkoVgymbTuKqC0akbE3lAWrRy47yaGqHXr1SxdWoWfLlMsSamqjbJVrhZMqfiRU+/p4eNol+XdhGDV23fIZhtOk8b7WY0DXcLHDj9vZyEz5RgNa1vCX7RBVX6X9ZpZSea0Miyg0Qi4ToqYmonNBEWExRxEVp9FMWPjppGXshb4zFgR0Ky9loG1vzFaNJregWl/+dWw55vQoBXh5o14ArtzUIBAK893gP9I4OREVtPSZuPK7nms4Hyqrr8NvFPLOGoFoRZVskhjPcbGIU81phFeT1KvhIxYhu5WX17aypidIXUcaRKK1HVONSeerbGkeiqhRKbl9sJErXcNNd66KUKoYrGzBM53lJ2fl5LTcSVWLw3nCNistdGhJRbgIbUTllQUQVs5Eog+JZh9REcek8UQMrtbA1UU1L5+lHokyl807qpPKs7cBrCJmHCGuf7Y2oVp64ebcaL31zssl+V/bkg98uY/I3J7H9dI7J67nOPF/rI1GA/Tr0Lmr8cjqH+1o9axEARCJrIlE66TwTXXFs9LIxReUsrblIlFZEsR+WUrGQqwUCdG0O3LNDr1LnfcTXoLDcizPbbLmRKN3CcoAiUa4OiSg34Z5oNhJVbHYN51burf+N21cnEqWy02DQxqTz7BGJ4sxEfcyn83SLyu1Jax8pvhrfB75SMY7dKMa8/1606/mbAlvAyqbMDOEiUSY61yyh7dBrqogqB2BbKg+wPRKVV1ZrJLiKNGm1IN/GiyhtJEr7AWlotMnCGm66q2s5+7g9PURGkWgundeSI1EaERWpeR1QcblrQyLKTejZNgACAXCruAYF5abfnE3ZGwDawnIAqLTTN8TGFJbbw2yz2EAoxmrSefnlcu7brz2Lyg2JD/XF6md6AQC2nLjFm6JRdryEuXldnIiyUUiwNS9NrYliI1FdIvxsup013Xk5OiKqTskYFX9z9gbejU/ntTaRzisxsDdgYSNR7jo/TzvyxbhBgUSU1ieKzR5cL6J0nitDIspN8JV5oKPG2+ikmZRekZl0nsxDxEWMKu3l+aNUv0k2xieqKWmwu1w6T/0Y/b08uLllN4qqcae0BrlltRAJBUiIsi3qYS33dwhGkI8UDAPeFJmzdT+3SkynkBpTWA7YJxLFMIxOJMo2EcV155mJRKlUDG5r6qDY13iOQV1UUzyiWNh6Kn0RZSYSxc7PK3fPdB6b2jWshwIonQdoxXXvtgEAgKzCKjCMfTIARPNDIsqNuCdG/c3GnIi6a6awHNAx3LSbcWITIlFNaP02LCwHwPn23LhbxaXyOof7Wt3K3xg6hPoAgMVuyeZCXq/kWu1vF1ebfMNma6JCbBVRdqiJulVcg4raeniIBIgPsd7kFGi4O6+oUg5FvQoioQBdI9UCzbC4nKuJsnc6T/NhyRaVs7h7JKrMjNEmQJEoQPselRAVAJFQgCqFkvv7I1wPElFuRO9oyx16nKGgCRGlrYuyj1dUY2qi2D2UVNU1ujbLsLAc0C8uP+nAVJ4uHTRRwUweRKJ0P9hNzfhjGAYFFeoPdFNu3pbQduc1XnyzqbyOYb42WwxwNVFmfKLYyFuYnwxRgequP2MRZY9IlPq2ZTV13GufjUSx9gYs7Pw+d62J0qbzLEWiWqaIUtteqJ+fED8Z2mo6USml57qQiHIj7oluBUD9oVRrwsyOm5tnwlCQrYuy2wgPzYeaLR+KMa29IRULUSmv1ysEtxaGYXTSeVoRpWtzcCq7FID9i8oNYUXUFTOF3M1JoYEf0a1ifRFRUl3HOXrbOjvOHpEoLpUXbnt6taFIFNuZFxnoiQhNIa9hBIgrLG+CxUGApwe3F1bIsx+W/mYiUe5quMnWxxl6RAHaSBRfagWbmyqFkou0t/KScBYrVFzuupCIciPaBHoixFeKOiXDmUmyMAyDIjbVZSES5cx0nlgk5GpizueUNbDamEp5PXe/uo8xJkj9be9KfgUuas7r+EiUOp2XyYN0npGIKtEvLmcjIq29JTZHguxRE8VGoth0my2IRZa789j6pzaBnogMYNNoWhHJMIxdLA6EQgEn3NnIlnZunn5EJsjNDTfZ14KpmihvjU9UTQt1LDe0vYglEeXykIhyIwQCgU5KT9/qoEqh1AoMk5Eo9Rue/QrLbU/nAUCPNgEAYCQCrYGNAHh6iPTqndg3qnO3y1CvYhDsK0WbQE+bz28L7ADjO2W1qLDjOJ3GwKbqWAw79PI119taDwXoRqKaks5rXFE5oE3nmevOY+0N2gR6aSNROv5MFfJ67rUa3ISaKEBbh8eJKDMWB0I9w033Ky4vMzPyBQA8PdR/ly11dh5bVM4K7nbB6i9blM5zXUhEuRm9zZhu5mq+fXtJRHrGfyza0S/2qolSv0naGtnoHqlO6ZxvhIgylcoDtF5RLL3taLJpDn9PD87929l1UYaRqNsGHXoFjXQrB5ruWF5YIUdBhRwCAdApzHYRJWqgO08rokyn89hUno9UDJmH9cawpmBFGFt7yH5gBngZR37ZeZfu6FpebqGwnItEtdDuPPaLHvuaaBdMkShXh0SUm8GKqJM3S7guLIZh8H7GZQBakWKIvUe/NCadBwA92qj3d+FOmUUXalNoHdn1P7T8ZB563Xq9ogNsOm9j4YrLnZzSY0UUK5IM03lsZ1BYkyJRjRNRbCovNsgb3lLbuyXFVtZEtQnQiqjiKgVqNIXNRRaaLWzFMBJVxhaWmxBRYZri8lw37NBj6ypNpfPYL3DVdcoW2dbP1sm10jQbsCLqdkk1ryYcENZDIsrN6BrhD6lYiJLqOlzXjBPYdioHv18qgEQkxMKR3Uzezu41UZoUiS0+UYA6vO0lEaFaocR1G2dKmerMY9GNRjm6qJyFbdf/J58fkSj2cRum8/LKm5DO42qiGve6aaxTOYvIgmM5wzCc0WabQC/4ycTw1nyIsyk9e3TmsbDnYCOi2kiUsZiI0BSXn7xZ0iRzWT7CPm7TZpvqYwwD1Na51+O2BvY9ihXWwT5S+ErFUDFA9l3TRrgEvyER5WZIxEIkRAUAAE7eKEFeWS3m/6wePzJ9SDw6hpn24bH3/LzGWBwA6g/FbpoPVFvrosyl8wBth55EJGz0B7at8MUrii1eZovpb5fU6EUBmpTO04lgWuo0u1VcjV/P5xpZV/zdhHoowHIkqqhSAXm9CkKB2rpBIBDopPTsL6I41/IKOVQqxuzYFwDc32HGxTwM+egPZFzIc4vITFl1HS5omjfah/gYXe+pkzJtiYabpQYu9gKBALGaaNQ1Sum5JCSi3BDd4vKZ286horYeCVEBmPyvdmZvw1oc2K8mqnHpPADorknp2dqhZzjyRZdYTYde10i/Jte+WEs8l87jRySqR5sACAXq2YS6dVKNHT4M6A+YtZQKnrXtPKZsOoV1f13XO8515jVSROlaHBiKEDaVF+Yn416HrIhi02jauXlNT+dxruVVClTU1oPVdYZmmwDwaM9ILH28B4J9peqB1d+exJh1R7jnw1XZ/Xce6pQMOob6or0J41SRUACZh/p30RK9oopZEaXzHsXZHFBxuUtCIsoNYYcRbz99B/uvFEIiFuLDJ3pAbCEq5Gvnmih5E0QUWxd17napTbczHPmiy8jESCRGBeDF++Ns3k9jiddEovLKa40MLpsLhmG4kS/h/jLO6FG3Lood+WKr0Sag/v2y0QVzHXoMw3C/y49+/wc3NR5gFbV1uKFJYTQ2OsiOfQGMo1G6nXksrIhirQ8K7WBvwBKkE4liU1reEuMhvIA6AvFknyjsmzEQUwe1h1QsxJHrxRj9+RGjRgA+UVghx9UC85HVX87lAgBG9Ag3u8a7BRtusnPzdG0vuA49ikS5JCSi3BA2bcPWJb0+pAMXFTGHvWui5I1M5wHa4veLd8ptMiM0NfKFJaqVF7a/3B9Du4XZvJ/G4ifz4IwVLX3wOJLyWq13VrCvFFGtNCJKY7hZr1RxKa2QRqTzAG3tCyscDCmslHM1U7V1Ksz+6TwYhsGlXPVzEu4vM5mCtQaRSNtlaVgXxYqoSB07C0OvKMfURMl17A0sPy4fqRgzUjvifzMGIjLAE5XyelzgcTTq+Q3H8dDKv7iUnS7FVQocvFoEABiREGH2HGxxeVULTOcZWhwAuh16FIlyRUhEuSGB3hLEaf4we7YNwAsW0ngsbFrGHpGo/PJaZGmK2tm5dbYQ09obvlIx5PUqm+wBLBWWOwtWvDqruLxQ4wHlJ1O38LOjT9ji8qJKBVSMOs1iyj/MGqJbsTUdph/jVc1jb+0tgVQsxMGrd/HDydtNTuUB2poowFQkStOZpyOiDL2i7FsTpX7d3a1UcKaKpuqhTBEZ4IluGrNRvhYYK1UM/s4tR52SwWf7rxldn3EhD0oVg64Rfpw3mynYSFSNFZEod6gT08WwsBzQH0tFuB4kotyUlwe1R9/YVvjoyUSubsQS9qyJ2n0xDwDQq21Ao1JEQqEA3RrhF3XXjMWBM+kQ4tzicraonPUwitLM6mLTeWwqL9hHatXrxBRskbS5ETesEO7ZNhCvDekAAFi88xL+/KcQANClCYX+uns2jETpupWzsOlM1iuKFVHBdqiJYl939SqGS1masjcwBztHLbuYnyLqbqWcE6q7LuQaRU5+OXcHADCih/koFKATiWrgC9sv5+4gYcFv2H+loLFb5h2lJmwvWBFVUl3HiW/CdSAR5aY81qsNvn8x2cho0hz2TOftOq+ui3iom/m6iIbg6qJySq2+zV2usLzpUQV70cHJxeWFRiJKP53HiqjQRohdlk7h6sd42YyIuqoRUfGhPnjhvlh0jfBDWU0d9l1Ri6imRKJEOqapdQapX1M1UZE63XkMw6Cown41UVKxiPs7uqoRGP5WRqIA/oso1goDUFsUfP6HtkmgsEKOI9fvArBcDwVYP/pl98V8lNfW47e/8xu7ZV7BMIxOYbn2deElEXOWF1Rc7nqQiCIAAL6asS/yelWTfGuKKuU4lqUeOdOU+iOuQ8/KSFS1op7znWnFo0hUvI02B2XVdUY2AE1BK6LUb9JcOs8gEhXahJEnnRqMRKmPx4f4QCwS4v3He+hFkJoiooRCASeMjl7XjjpiGMZkOi/UXwqBpkPxdkkN90FuDxEFaAc4s8LRcG6eJbgoIV9FVJk2NQwA207f5sbW/HohFyoGSIgK4B6HOawd/cI+D9ec7PhvL6p1Rm8ZRijZ4nKyOXA9eCGiVq9ejZiYGMhkMiQlJeHYsWMW12/duhWdOnWCTCZD9+7dsWvXLr3rGYbB3LlzER4eDk9PT6SkpCAzM1NvzTvvvIN+/frBy8sLAQEBJu8nOzsbw4cPh5eXF0JCQvDGG2+gvt49iyF9dCauNyWl99vFfKgYdXF4Q2+mlugRGQAAuJRbYZWoY1N5ErGQM1TkA2xNVEGFnPOIMce+KwVIXPQbPv7fVbvdP9uZF2KQzsstq0W9UqW1N2iE0SYLG23LK6/lXLp14SJRmpb3bpH+eOG+WADqmiFWBDWWkYnq9NFPp29zx+5WKVBbp4JAoE3hAepoESt0zmo6Bj09RI1ySzcFm9K7WqD+MDRlb2AO3UgUH2uBWMGdHNcafWNboU7J4Iu/sgAAv5xVR58fbiAKBWgjUQ35RHEiyk2EBVtULhEL4WXwHkXjX1wXp4uoLVu2ID09HfPmzcOpU6eQkJCA1NRUFBSYzoMfOnQIY8aMwcSJE3H69GmkpaUhLS0NFy5c4NYsXboUq1atwpo1a3D06FF4e3sjNTUVtbXacLRCocCoUaMwZcoUk/ejVCoxfPhwKBQKHDp0CBs3bsSGDRswd+5c+z4BPEEkFHB/2E0pLv/1giaV171pXXBRrTzh7+kBhVJlVRRHtzPP0XPxbMFHKuZEQkPF5esP3gDDADvP37Hb/ReW66fzgn2kkIiFUKoY5JbVaiNRjezMA9RNCexjvJxXrnddSZWCG60SF6JNLU9P6YBxydGY/3DXJv++HusVCQDYf6WQq3FiU3mhvjIjiwG2uJw1c7WHRxQLZ3Og2Ye1heWAuotQIFBHLO7ysDaGTeeF+cnwfwPVViH/OZaNS7nlOK4ZeD6se8Miin2fsWRxUCWv556Dokq5SXHuarD2Bq28jN+j2Loo6tBzPZwuopYvX45JkyZhwoQJ6NKlC9asWQMvLy989dVXJtevXLkSQ4cOxRtvvIHOnTtj0aJF6NWrFz755BMA6ijUihUrMGfOHIwcORI9evTA119/jTt37mD79u3ceRYsWIDXXnsN3bt3N3k/v/32G/7++298++23SExMxEMPPYRFixZh9erVUCj49wZnD5paF1VarcDha+q6iKbUQwFqHx2tX1TDKT0+duaxWJPSK6yQ40BmoWZdpd18pdhIFBt9EQoFaBPA1kVVI7+CtTdofCQK0Kb0DOui2NqgyABPbuQHoC4uXjiyG9J6RjbpfgGgfYgvEtr4o17F4OezagGaU2JcVM7CCr6zt0oB2C+VBxg3NTRkcaCLVCxCuOb3wMe6qLwyTdTSX4YBHYLRNcIP1QolXvzmJBhG7U8XYUVU0csKnyjD+Y7X3KBWyNIYIDadRx16rodTRZRCocDJkyeRkpLCHRMKhUhJScHhw4dN3ubw4cN66wEgNTWVW5+VlYW8vDy9Nf7+/khKSjJ7TnP30717d4SGhurdT3l5OS5evGj1eVwJbYde40TUnr/zUa9i0CnM12KLs7WwflHnrSgutzTyxdlYM4j457N3oFsKdTq7xC73bVhYDgBtdDr0CnSiC02hoxkRxRbUs0LSUTyqEWPbTuUAMG1vwMJ6d7FeR/YUUYbnsqUmCuB3XVReuVqYhvmpR+hM0USjWMHXUEE5izYSZf59xtDmwR3qokx5RLGwruU371bbPHidcC5OFVFFRUVQKpV6QgUAQkNDkZeXZ/I2eXl5Ftez/9pyTlvuR/c+DJHL5SgvL9e7uBLa+XmNi4L8ekH9vFgT0rcG2yJR5ke+OJt4zubA/AfBf8+oP/zZD5hTN+0ronSNNKMCtR16eVw6zz4i6opBOo8tKm8f7FgR9XBCBMRCAc7nlCEzv8JkZx4LGy2pUti3qBzQzs9jsSUSBejURfHQK4otLGcF90PdwrkvSwKB9X/31kSiDCNx7lAXZcojiiUiwBMSsRAKpYozgiVcA6en89yJJUuWwN/fn7tERUU5e0s20ZTRL+W1dTiQqXYrfshOruDd2wQAUHd91TbQDm1p5Iuz4SJRZlzLrxVW4uztMoiEAkwZoP52f8IOIqpOqeKel2CdD3c22nG1oJLzrWlKTRQAdApTd9j9k1+pVxSta2/gSFr7SDGwYwgAYNvpHIuRKMOUU7AduzkNz2VLTRTAb5sDrglBE8kTCbXRqH/FB1udErYmEsWKYPY9yZyRqytRwnpEeRu/JkRCAWJaq3/37vBYWxJOFVFBQUEQiUTIz9f3AcnPz0dYmOkP4rCwMIvr2X9tOact96N7H4bMmjULZWVl3OXWrVtW3x8faEpN1P8uFUChVKF9iE+DI2asJcJfhtbeEtSrGFzKtRzV46PRJgs7zb6oUsF9G9Xlv6fVUaj744PwYFf1a+vMrVKbRt6Ygn1OREKB3rdf1ubgpCZlKBEL4e9p24e9Ie2CveEhEqBSXs99AAJaEWVqGK29eVxTYL79dA5uakRIpIWaKJagJtg7GGIYibLFbBMA2rbmp4iqlNdzX650U7+jerfB18/3xUdPJlh9LmsKy9nHf398MAD3EBaskWYrM6+JdkFUF+WKOFVESSQS9O7dG3v37uWOqVQq7N27F8nJySZvk5ycrLceAPbs2cOtj42NRVhYmN6a8vJyHD161Ow5zd3P+fPn9boE9+zZAz8/P3Tp0sXkbaRSKfz8/PQurgTrFdWYSBTXlWfH2XQCgYDzizpxw3JkxtLcPGfjLRVzERHD4nKGYbD9jLoYOq1nJOJDfOArFaNaoTRrXlkpr7eqboJN5QX5SCDU8WViDTfZ69kal6bgIRIiTpOyY/2iKmrrkKtJAbFC0pE80DkEfjIxcstquVZx0+k8/YiJPc1ZDVODfjLbrBP4WhPFpvJ8pWI9OwiBQID7OwQbiUdLcOk8Cz5R7OMf0FEtorLvVhuZqboa2sJy0+9RsWRz4JI4PZ2Xnp6OdevWYePGjbh06RKmTJmCqqoqTJgwAQAwbtw4zJo1i1s/bdo0ZGRkYNmyZbh8+TLmz5+PEydOYOrUqQDUf9TTp0/H4sWLsWPHDpw/fx7jxo1DREQE0tLSuPNkZ2fjzJkzyM7OhlKpxJkzZ3DmzBlUVqq/8Tz44IPo0qULnn32WZw9exa7d+/GnDlz8PLLL0Mq5V/KyB6wXlHlNtZEVcnrsV/jPt3UrjxDHuikTtF8dzzboncOnwvLAW1Kz9CQ8lR2KbKLq+ElEWFIl1AIhQL0jFYPkD5pIqV3/nYZei3ag9nbzjd4n4WV6g++EF990RBlICyamspj4Uw3NUKRrWMJ8ZU2OdJlDVKxyGjwraFgAtSvEamO7UGQHaOXupFQP5kYYhsHcLPpvNzyWsjrG54t11zYw9mexYv1iaoz/WWNYRguEtU3phW8JCLNKB1+CUtbsVRYDmiLyykS5Vo4XUSNHj0aH374IebOnYvExEScOXMGGRkZXBF3dnY2cnNzufX9+vXD5s2bsXbtWiQkJOCHH37A9u3b0a1bN27Nm2++iVdeeQWTJ09Gnz59UFlZiYyMDMhk2jeAuXPnomfPnpg3bx4qKyvRs2dP9OzZEydOnAAAiEQi/PLLLxCJREhOTsbYsWMxbtw4LFy4sJmemeaHq4myIp0nr1fir8xCLPj5Ih5a+Rfk9SpEt/ZC53D7pm0e7RkJL4kI1wqrcFgzVsIUXGE5D9N5gLZIftlvV3DihtZZmy0oH9o1jPuGfo8FEbXh0A0o6lX46XROg2K3oNy4Mw9Q1+n46EQTmmpvwNJRUxfFRtDYbkRH10Ppwqb0ALU4lIqNjVcFAoFeXZQ903m+UjHnS2VrUTmgjqR6SURgGK1NAx8wLCpvCl4eGhFlJhJVWCGHvF4FoUCdjo3j3LxdO6VXrPGJMlcnxxpukohyLexj09tEpk6dykWSDNm/f7/RsVGjRmHUqFFmzycQCLBw4UKLgmfDhg3YsGGDxX1FR0cbuaG7M9ZYHNQrVXh312VsOZ7NdTcBgEQkxEsD4uxudOkr88CjPSOx6Wg2vj1yE/3igkyuK67kb2E5ADx/XywOXi3C8RslGPvlUXz2TG/cFx/E+RqN1PFL6m1GRFXK67m5hAqlCnsv5ePRnm3M3idnb2CQahEIBGgT6MmJnVBf+4ioTgYdelw9lIM783Tp1TYQ0a29cPNutclUHktEgIz7sLJnd55AIECQtwR3ympttjdgb9+2lRcu51Ugu7ia8w9yNvbq4gTApQPN1USxHlHh/p6aNLE3zueUubyIKm0gEhWrqYnKKa1BjULJDWom+I3TI1EEf/CTWa6Jqleq8Nr3Z/HVwSxUKZQI9pVi9D1RWDO2N07NHYIxfds6ZF/PJkcDUA8kzdcZgspSW6fkBB1f03l+Mg98/XwSHugUgto6FSZ9fQJvb7+Akuo6BPlI0T+uNbc2ISoAQoH6zZSNAADArnO5ekNbd57LhSU4o00TkRbdkTz2SuexNgfXC6sgr1dqRZSdGg2sQSAQ4PFeamEZb6EOK0IzCkYiEtpct9QQbGSrMZEogJ91UezfXZh/018rrDioMtOdx6by2NQmG4ly9VohSxYHgPq9i41S3bjr2o+1JUEiiuDw4brzjNNEdUoVpn13Bj+fvQMPkQAfj+mJo7MG4/0nemBotzC99JC96RTmh74xraBUMfjPsWyj69k3Jw+RwO4fiPbEUyLC58/2RlpiBOpVDL47ru7efCQhQq92xkcq5iwDdKNRW0+q16dpZsX9+U+RxZSeKY8oFt26qDA71LkAahNLX5kY9SoG1wqqkMnNzGveaMqUgXF4//HuSH+wg9k1bDovyMf+Y4LY5gZb7Q1Yonloc2DPdJ63Jm1do1CarHPMvqtOY7INEO14nM6rqK3Dz2fvNDjfs0ahhJwdPmzhi552/AuJKFeBRBTBYc7iQFGvwtTNp7DzfC4kIiHWjO2NhxMi9Dq+HM1YTTTqP8eyjbp0dL/h8Wlunik8REIsfzIRz/WL4Y6l9YwwWndPjH5K73phJY7fKIFQAMx8qDPah/hwKT1zFJhJ5wHaDyjAuPC8sQgEAi6ld/Z2KZeWaW4R5SESYnSfthYfF2tzYM96KBY2PWirvQELH20O8u2YzmMjUfUqBgoTHXfs64aLRGlmLl4rqOTdYOZP/ncVr/znNJbv+cfiumJ2+LDI8oD0WK64nH+CkTANiSiCw1RNVGGFHC9vPoXdF/MhEQvx+bO9MbhzqLlTOIyhXcMQ5CNBfrkcv/+tLxz43plniFAowLyHu2DJY90xd0QX9NCYiurC1UVpvJx+OHkbAHB/h2CE+cs4d2hLKT1TI19YdCNR9krnAdqU3q7zuWAY9dgTW9rfm4sBHYPRJdwPT95jf0PcPrGtAAA92wY06vZRXCSKR4XlXDrPDoXlOiKixkRdFCse2echprU3BAKgvLaeG2bNF05r5i9+f+KWxW5K1iMqwMvD4hc9LnVJxeUuA39zH0Szw459Ka5SYP6Oizh0rYgbVSIVC7F23D0Y0CHYKXuTiIV4qk9bfLLvKr45chMP6YyY4HtnnikEAoHFGrJebdUi6mJOGark9dxMuFG91R/6w7uHY9XeTC6lx9azsTAMY1lE6dVE2ScSBWidyw9pBlHHN4PJZmMI9ZNh17R/OeTcT94ThYe6hXF/T7aiHf1SBYZhnB5drVeq9DzFmoqHSAiJSD3ipEqhRIBB/f9tAxEl8xAhKtAL2cXVuFZYafL17AwYhuE6UIurFNjzdz5G9DCOKgMN2xuwUDrP9aBIFMHB1hPV1Cmx4dAN/JNfCYEA6Bbph/UT+jhNQLGMSWoLoUD9AX1VM0JFUa/iuszsaZrobNoEeiLUT4p6FYNP919FXnktArw8kNJF7ZvVIdQHccHeZlN6VQolV4Ru6kMnNsgbHUN90b99az3zxKbCpvNYM9D2zWhvwCcaK6AAdapRIFD/Dk053Dc3RZUKqBi18729oopsSq/GoLhcXq9Eribq1VZH6Mdp2v/5VBdVWCnnRrkAwHfHzE+oaKionKUdZ7jJv9QlYRqKRBEcwb5SDOsehqsFlUiKbY3+7VsjKba1xULI5iQywBODO4diz9/5eOunC5CIhThxo4QTCyE8+YZqDwQCAXpHB2LX+Tys/fM6AGBkQgTneyQQCNTRqP9dxc5zeUZWBwWaDyIfqZjzn9JFIhbi12n/gr2DHB3C9CNPzWlv4C7IPEQI85Mht6wW2cXVTk+Hsqm8EF8pRHaqg/SWiFBWU4cqA6+onJIaMIw65ac7fSAu2Af7rhTiWgF/IjSZmih9oJcHSmvqcOBqEW7erUJ0a2+jtaUW5ubpEqO5bXltPYqrFE7/3RMNQ5EogkMgEODTZ3rjt9cGYFFaNwztFs4bAcXy7L3qAvOjWcX4K7MINXVKtPaW4JGECIzXKdZ2B9iUXp1S/Y10lEH9zvAebJdeoVGXnqVUHotQKLB7qshP5qE3m645jTbdiSgedeixnXn2TPt6mpmfd0tjMBoV6KX32owL4V+HHjt9oE9MK/xLM+Nvy3HT0ShrI1EyDxH390Omm64BRaIIl+K+9kF4rl8M7pTWIDmuNfrFBaFDqI/T60YcAVtcDgCdw/3QNUJ/FiOb0rtWWGVkvMl5RDnhm2zHMF/klKo/DPlaE8V32rbywrGsYl54RXEeUXYUUVrDTf10nmFROQsfXcszNSUFHcN80SXcD3/+U4jvT9zGa0M6wMNg3A9bE2VNx2a7YG/klNbgelEV7olpZf+NE3aFIlGESyEUCjD/ka5YO+4eTOgfi45hvm4poACga4Q/N+NtVO82Ro+TTekBwM5zeXrXWROJchRsh56PVGzXzr+WRFs+RaLs2JnH4ulhJhJlYLTJwtZEsW7efICNRMWH+iKlSyiCfKQoqpRj76UCo7UlXDqvYRFFxeWuBYkoguApErEQLw6IQ3K71ni8t+nxLsN6qEWUYUrPmSKKjZi5s8B1NHwSUfll9hdRbCSKjdCw3OIiUZ56x1k3b4bhR5pL3Zmnjop1DPWFh0iIJzR/o6YMgUs4G5aGGw7akVeUS0EiiiB4TPqQDvjP5Hvh72n6zbdjqC/Xpffpvmvc8QIniqgHu4QhfUgHzHu4S7Pft7ugHf3ifK+oXDu6lbMkaLzRdpy5o3fccOQLi0Ag4FVKL7esFhXyeoiFAi5y9FQfdc3in5mFuF2iL35ZsWjNKKBYNxlz01IgEUUQLoxAIMAbqR0BAGv+uIY//ikE4NxIlEQsxKuD402aiBLWwYqIO2U1DY4UcTT2dCtnGdM3CmKhACduluBCThl33JyIAvhlc/CPxh8qNsgbEk3KPSbIG/3iWoNhgO9P3NZbz0WirKmJ0oiym3erOasQgr+QiCIIF2dot3CMvVdt3Jm+5QwKymudKqKIphPkI4GnhwgMA65I3xkwDOOQmqgQPxlnmPvN4ZsAgLLqOm5aQptAUyKKjUQ5P0LDiqgOBsO1WQPdLcez9Yrmi20oLI8I8IRErDYjvePE3z1hHSSiCMINmDO8CzqF+eJulQLTt5xBQYXW24dwPQQCAS/qoirk9Vzxtz3TeQAwXjMPc/uZHJRWK7jHGewr5SwQdGnHpbn4EIlS78FQRD3YNRRhfjLkl8sxf8dFAOrRNrV17PDhhmuiREIBYjTzE/kQdSMsQyKKINwAmYcInzzdC54eIhy6dpebMUaRKNeFD15RbFG5n0xsUtg0hd7Rgegc7gd5vQrfn7hlNHjYEN10nuEQ8uZGG4nS90GTikVYPjoBAoE6pbf9dA5XD+UhEnDzSRtCO4jY+VE3wjIkogjCTWgf4oNFad24n4UC9xqF09JoyxWXN4+Iqq1TorZO3z7AEak8FoFAwEWjvj2SzQmGqEBPk+vbtvJCoJcHautU+GjPP3bfj7WoVNrOPEOHfgDoFxeEVx6IBwC89dN5nM4uBaAuKre2W7UdFZe7DCSiCMKNeKJ3GzzWMxIA0NrHfmM6iOYnWpPSYf2IHElJlQIPfvQnHvhwPyp0rDIc4Vauy8jESPjJxMgurubcvs1FosQiId55tDsA4NP91/CnpomiubldUoOaOiUkIiGizez11Qfao29sK1QplJj54zkA1hWVs1AkynUgEUUQbsaitG4YfU8U3niwo7O3QjQB1rH+j38K8d8zOQ67H4ZhMHPbOWQXV+NOWa3eIF1HuJXr4ikRYbTGGsCcW7kuw7qH45kkTRPF99rav+aETeXFhfhALDL9ESoWCbHqqZ4I9PJAhVxdYB7gZf1QajZ1SSKK/5CIIgg3w1sqxvtP9MCTfaIaXkzwlm6R/pg6qD0AYNa288jMd0xEasvxW9h9MZ/7+csDWZytgiPTeSxj743WG4RtSUQBwNsj1E0URZUKvLblTLPbAFwxUw9lSJi/DMufTOR+bmXDHNLYIPW5+eTQTpiGRBRBEARPeW1IB/SLa41qhRJTNp1Clby+4RvZwLXCSiz4+W8AwIwHOyDEV4q88lrsOKs2wcwrU1tlOCqdBwDRrb0xsEMw97O5dB6LbhPFwat38dn+qw7bmykyzdgbmGJQpxC8eH87ANpxSNYQ6OXBGeye1/HRIvgHiSiCIAieIhIKsGpMT4T6SXG1oBKztp0Hw9gn8qKoV2H6d2dQU6dEv7jW+L+B7TGhfywAYO2f18AwjMPTeSzj+sUAAKRioVWCrX2IDxaO7AoAWL7nHxy+dteR29Pjihl7A3PMfKgTdr36L/zfwPZW34dAIECfGHU6d/I3J3DiRrHtGyWaBRJRBEEQPCbIR4pPnu4FkVCAHWfv4NsjN+1y3uV7/sH5nDIEeHlg+ZOJEAoFeDqpLXykYvyTX4n9VwqbJZ0HAAPig/FGake893h3q5shnujdBo/2jISKASZuPI5D14ocukcAqFeqOO+mjlaKKIFAgC4RfpyzubUseawHEtr4o7S6Dk9/cRQ7z+U2eJuy6jqkbzmDj/b8YzexTViGRBRBEATP6RPTCjOHdgIAzP/5b4z+/DBW7c3EiRvFjfJM+iuzEJ//qZ61+N5jPTiR5O/pgTF91bV0n+6/iqJKx6fzAEAoFODlQe3xaE/Tg7ZNIRAI8O6j3fGv+CBUK5SYsP449l8pcOAugZvF1VDUq+DpIUIbM1YM9iLYV4r/TL4XKZ1DoahX4eXNp7Duz+tmxVFZdR3GfnkU207nYOXeTPxHp0GAcBwkogiCIFyAF/4Vi8d6RkKpYnA0qxjL9/yDJ9YcRsKC3/DWT+f1rAksce52KV765iQYRj00d2i3ML3rn78vFmKhAMdvlIBh1CaRrW0oim5OPCUirBt3D1I6h0Ber8Kkr09g98W8Bm9XXKXgUpW2wNZDxYf6QNgM9iFeEjE+f7Y356f1zq5LeP37s0ZdiayAOp9TBommY3DBzxdxKbfc4Xts6QgYivk5jPLycvj7+6OsrAx+fn7O3g5BEC4OwzDIKqrCoWt3cfjaXRy+fhfFmuG2kQGe+OCJHujXPsjs7TPzK/Dk54dRUl2H5HatsX5CH8g8jJ3IX//+LH48dZs778GZDzjmAdkJRb0Kr205g53ncyESCjDroU4I9ZNxBqJVCiVu3q3GtYJKXC2s5J6ze9u1wrjkGAzpEgoPM3YFuqz8PRMf/f4PHu/VBsueTHD0w+JgGAZfHsjCO7sugWEAb4kI/zeoPSbeFwt5nYoTUK28Jdj0QhKWZlzGviuFaBfsjZ+n3gdvK53SCS3Wfn6TiHIgJKIIgnAkKhWDw9fvYta285zP0rjkaMx8qBO8JPofnLeKq/HEmkPIL5cjoY0/Nk261+wYkit5FUhd8ScAoFfbAGz7v/6OfSB2oF6pwps/nMO209Z5agkFAOuOEOonxdN9o/FQ9zC0C/I26//08uZT2HkuF7OHdcLk++PstXWrOXmzGAt/uYSzt0oBqAWur0yMy3kVaOUtweZJSegU5ofiKgWGrfwLeeW1eLRnJJY/mWC1WzqhhkQUDyARRRBEc1Alr8eSXy/h2yPZAIA2gZ5I6RyKrhF+6BbpjwAvDzy19ghu3q1GfIgPvn8xGYENpOgmrD+GfVcKMax7GD59pndzPIwmo1IxWPW/TOy/UgiZhxAyDxE8PUSQaWqY2of4IC5YfSmpVmDz0Wx8dzybmzUJABKxEB1DfdE53Bedw/3QMcwXHUN90dpHiiHL/0BmQSXWT+iDQR1DnPYYd5y9g/czLiNX4yjf2luCzZPu1bNROH6jGE+tPQKlisHSxy37xjEMg5o6pZHwbsmQiOIBJKIIgmhO/sosxJs/nOM+XA1pE+iJH17qZ1W3XWZ+Bd7+7wW88kA8+ltIEbo68nolMi7k4btjt3DudimqzJhbBvlIUFylgIoBDs18ABEBji0sb4gahRJfHriOEzdLMHtYZ5OWC6v3XcUHu69A5iHEQ93CEeDlgUAvCQK9PFApV+KqJr15raASlfJ6DOoYjPmPdEV0a28nPCJ+QSKKB5CIIgiiuamorcPvl/JxIaccF3LKcPFOOSrl9QjxlWLrS8n0AWkBlYpBdnE1LuWW41JuOf7OrUBmQQWyi6vBflIG+0pxbPZgl0iPqVQMnttw3KY5gxKxEFMGxGHKwDiuXk6lYvBPQQXO3y5DkK8UXcL9EOIrNfkcqFRMsxTdszAM45DfBYkoHkAiiiAIZ6NSMbhdUoMAbw/4yayf30ZoqVbUIzO/ElcLKtEt0t8m93Fnw0ba8spqUVJdh9JqBUqqFZCKRWgf4sNdGAZYvPNv/JWp9tuKauWJRxMjcT6nDCdvlqC8Vt8tv5W3BF3C/RDmL0NRpRwF5XIUVMhxt0qOCH9P9ItrjX7tW6NfXBBCfKXILKjE0et3cSSrGMezilFao99N6iEUoH2oL7pH+qFbhD+6RfqjQ6ivSX8tlYrBiZsl+Ol0Do5m3cXu6fdb1RhgCySieACJKIIgCMJVYBgGv17Iw8Kf/+aMVlm8JCJ0i/RHcZUC1wsrYcvIQh+pGJWNGFkkEQnRJcIPCW38kRAVgLatvPC/ywX475k7yCmt4dZtfL4vBuiMDrIHJKJ4AIkogiAIwtWoktdj3V/XkVVUhYQ2AegT0wqdw325rsXaOiX+ya/A33fKcbdKgWAfKYL9pAjxlaK1txRX8itw6FoRDl+7i/M5ZWAYwNNDhN7RgUiKbYWkdq2NzEqrFUpcyi3HhTtluJBThgs55SirMe995isVY2i3MDzaMxJJ7Vpb7XRvLSSieACJKIIgCKIlU1Zdh5zSGrQP8bFp9A3DqOvTzt4uw9lbpTh7qxRZRVXoFR2IR3tG4oFOISY9zuyFtZ/f1M9IEARBEIRD8PfygL+X7bV4AoEA0a29Ed3aG48kRDhgZ/aBxr4QBEEQBEE0Al6IqNWrVyMmJgYymQxJSUk4duyYxfVbt25Fp06dIJPJ0L17d+zatUvveoZhMHfuXISHh8PT0xMpKSnIzMzUW1NcXIxnnnkGfn5+CAgIwMSJE1FZWam3Zvfu3bj33nvh6+uL4OBgPP7447hx44ZdHjNBEARBEK6N00XUli1bkJ6ejnnz5uHUqVNISEhAamoqCgpMT+M+dOgQxowZg4kTJ+L06dNIS0tDWloaLly4wK1ZunQpVq1ahTVr1uDo0aPw9vZGamoqamu13QbPPPMMLl68iD179uCXX37Bn3/+icmTJ3PXZ2VlYeTIkXjggQdw5swZ7N69G0VFRXjssccc92QQBEEQBOE6ME6mb9++zMsvv8z9rFQqmYiICGbJkiUm1z/55JPM8OHD9Y4lJSUxL774IsMwDKNSqZiwsDDmgw8+4K4vLS1lpFIp85///IdhGIb5+++/GQDM8ePHuTW//vorIxAImJycHIZhGGbr1q2MWCxmlEolt2bHjh2MQCBgFAqFVY+trKyMAcCUlZVZtZ4gCIIgCOdj7ee3UyNRCoUCJ0+eREpKCndMKBQiJSUFh/+/vfuPibr+4wD+PDjuFJE7FbwTBcHC+YvsBGVo0/aFic5Ms1IZEZLTqbhEZ2Y201aKUDoVTastNTUVV2rSrOjQczg8EX8LiVMMUg6HhKD4k3t9/2h+1vmj8PhxHT0f22fA+/M6Pq97/nH32uc+d5eX99jb5OXlOdQDQGxsrFJfUlICm83mUKPT6RAZGanU5OXlQa/XIyIiQqmJiYmBh4cHrFYrACA8PBweHh7YsGED6uvrcf36dWzevBkxMTHw8uIH1hEREf3XuXSIqqysRH19PQwGg8O6wWCAzWZ77G1sNtvf1j/4+U81nTs7fnmkWq1Gx44dlZqQkBD8/PPPWLBgAbRaLfR6PX7//XdkZmY+8f7cuXMHNTU1DhsRERG1Ti6/JurfymazYcqUKUhMTER+fj4sFgs0Gg1ee+01yBM+Wis1NRU6nU7ZAgOf/K3ZRERE5N5cOkT5+fnB09MTFRUVDusVFRUwGo2PvY3RaPzb+gc//6nm4QvX79+/j6qqKqVm7dq10Ol0SE9Ph8lkwtChQ7FlyxaYzWblJb+Hvffee7h+/bqylZWVNSQGIiIickMuHaI0Gg3Cw8NhNpuVNbvdDrPZjKioqMfeJioqyqEeALKzs5X6kJAQGI1Gh5qamhpYrValJioqCtXV1SgoKFBqcnJyYLfbERkZCQCoq6uDh4djPJ6eD77R2v7Y3rRaLXx9fR02IiIiaqVa5jr3J9u+fbtotVrZuHGjFBYWytSpU0Wv14vNZhMRkYSEBJk/f75Sf+jQIVGr1fLpp59KUVGRLFq0SLy8vOT06dNKzbJly0Sv18uePXvk1KlTMmbMGAkJCZFbt24pNSNGjBCTySRWq1Vyc3MlNDRU4uLilP1ms1lUKpV8+OGHUlxcLAUFBRIbGyvdu3eXurq6Bt03vjuPiIjI/TT0+dvlQ5SISEZGhgQFBYlGo5FBgwbJ4cOHlX3Dhg2TxMREh/rMzEzp2bOnaDQa6du3r/zwww8O++12uyxcuFAMBoNotVqJjo6Wc+fOOdRcu3ZN4uLixMfHR3x9fSUpKUlqa2sdarZt2yYmk0natWsn/v7+8vLLL0tRUVGD7xeHKCIiIvfT0OdvfgFxM+IXEBMREbmfhj5/8915RERERE7gEEVERETkBLWrG2jNHrxSyg/dJCIich8Pnrf/6YonDlHNqLa2FgD4oZtERERuqLa2Fjqd7on7eWF5M7Lb7bhy5Qrat28PlUrVZP+3pqYGgYGBKCsr4wXrzYxZtxxm3XKYdcti3i2nqbIWEdTW1iIgIOCRz4z8K56JakYeHh7o1q1bs/1/fqBny2HWLYdZtxxm3bKYd8tpiqz/7gzUA7ywnIiIiMgJHKKIiIiInMAhyg1ptVosWrQIWq3W1a20esy65TDrlsOsWxbzbjktnTUvLCciIiJyAs9EERERETmBQxQRERGREzhEERERETmBQxQRERGREzhEuaG1a9ciODgYbdq0QWRkJI4cOeLqltxeamoqBg4ciPbt26Nz584YO3Yszp0751Bz+/ZtJCcno1OnTvDx8cGrr76KiooKF3XcOixbtgwqlQopKSnKGnNuWpcvX8Ybb7yBTp06oW3btggLC8PRo0eV/SKCDz74AF26dEHbtm0RExOD8+fPu7Bj91RfX4+FCxciJCQEbdu2xTPPPIOPPvrI4bvXmLVzDh48iNGjRyMgIAAqlQq7d+922N+QXKuqqhAfHw9fX1/o9XpMnjwZN27caHRvHKLczI4dOzBnzhwsWrQIx44dQ//+/REbG4urV6+6ujW3ZrFYkJycjMOHDyM7Oxv37t3D8OHDcfPmTaVm9uzZ2Lt3L3bu3AmLxYIrV65g3LhxLuzaveXn5+Pzzz/Hc88957DOnJvOH3/8gSFDhsDLywv79u1DYWEhli9fjg4dOig16enpWL16NdavXw+r1Yp27dohNjYWt2/fdmHn7ictLQ3r1q3DmjVrUFRUhLS0NKSnpyMjI0OpYdbOuXnzJvr374+1a9c+dn9Dco2Pj8fZs2eRnZ2NrKwsHDx4EFOnTm18c0JuZdCgQZKcnKz8XV9fLwEBAZKamurCrlqfq1evCgCxWCwiIlJdXS1eXl6yc+dOpaaoqEgASF5enqvadFu1tbUSGhoq2dnZMmzYMJk1a5aIMOem9u6778oLL7zwxP12u12MRqN88sknylp1dbVotVrZtm1bS7TYaowaNUreeusth7Vx48ZJfHy8iDDrpgJAdu3apfzdkFwLCwsFgOTn5ys1+/btE5VKJZcvX25UPzwT5Ubu3r2LgoICxMTEKGseHh6IiYlBXl6eCztrfa5fvw4A6NixIwCgoKAA9+7dc8i+V69eCAoKYvZOSE5OxqhRoxzyBJhzU/v+++8RERGB119/HZ07d4bJZMKXX36p7C8pKYHNZnPIW6fTITIyknk/pcGDB8NsNqO4uBgAcPLkSeTm5mLkyJEAmHVzaUiueXl50Ov1iIiIUGpiYmLg4eEBq9XaqOPzC4jdSGVlJerr62EwGBzWDQYDfv31Vxd11frY7XakpKRgyJAh6NevHwDAZrNBo9FAr9c71BoMBthsNhd06b62b9+OY8eOIT8//5F9zLlpXbx4EevWrcOcOXOwYMEC5Ofn4+2334ZGo0FiYqKS6eMeU5j305k/fz5qamrQq1cveHp6or6+HkuWLEF8fDwAMOtm0pBcbTYbOnfu7LBfrVajY8eOjc6eQxTRQ5KTk3HmzBnk5ua6upVWp6ysDLNmzUJ2djbatGnj6nZaPbvdjoiICCxduhQAYDKZcObMGaxfvx6JiYku7q51yczMxNatW/HNN9+gb9++OHHiBFJSUhAQEMCsWzG+nOdG/Pz84Onp+cg7lSoqKmA0Gl3UVesyc+ZMZGVlYf/+/ejWrZuybjQacffuXVRXVzvUM/unU1BQgKtXr2LAgAFQq9VQq9WwWCxYvXo11Go1DAYDc25CXbp0QZ8+fRzWevfujdLSUgBQMuVjSuO98847mD9/PiZOnIiwsDAkJCRg9uzZSE1NBcCsm0tDcjUajY+8+er+/fuoqqpqdPYcotyIRqNBeHg4zGazsma322E2mxEVFeXCztyfiGDmzJnYtWsXcnJyEBIS4rA/PDwcXl5eDtmfO3cOpaWlzP4pREdH4/Tp0zhx4oSyRUREID4+XvmdOTedIUOGPPJRHcXFxejevTsAICQkBEaj0SHvmpoaWK1W5v2U6urq4OHh+JTq6ekJu90OgFk3l4bkGhUVherqahQUFCg1OTk5sNvtiIyMbFwDjbosnVrc9u3bRavVysaNG6WwsFCmTp0qer1ebDabq1tza9OnTxedTicHDhyQ8vJyZaurq1Nqpk2bJkFBQZKTkyNHjx6VqKgoiYqKcmHXrcNf350nwpyb0pEjR0StVsuSJUvk/PnzsnXrVvH29pYtW7YoNcuWLRO9Xi979uyRU6dOyZgxYyQkJERu3brlws7dT2JionTt2lWysrKkpKREvvvuO/Hz85N58+YpNczaObW1tXL8+HE5fvy4AJAVK1bI8ePH5bfffhORhuU6YsQIMZlMYrVaJTc3V0JDQyUuLq7RvXGIckMZGRkSFBQkGo1GBg0aJIcPH3Z1S24PwGO3DRs2KDW3bt2SGTNmSIcOHcTb21teeeUVKS8vd13TrcTDQxRzblp79+6Vfv36iVarlV69eskXX3zhsN9ut8vChQvFYDCIVquV6OhoOXfunIu6dV81NTUya9YsCQoKkjZt2kiPHj3k/ffflzt37ig1zNo5+/fvf+zjc2Jioog0LNdr165JXFyc+Pj4iK+vryQlJUltbW2je1OJ/OXjVImIiIioQXhNFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQRETWj4OBgrFy50tVtEFEz4BBFRK3GpEmTMHbsWADAiy++iJSUlBY79saNG6HX6x9Zz8/Px9SpU1usDyJqOWpXN0BE9G929+5daDQap2/v7+/fhN0Q0b8Jz0QRUaszadIkWCwWrFq1CiqVCiqVCpcuXQIAnDlzBiNHjoSPjw8MBgMSEhJQWVmp3PbFF1/EzJkzkZKSAj8/P8TGxgIAVqxYgbCwMLRr1w6BgYGYMWMGbty4AQA4cOAAkpKScP36deV4ixcvBvDoy3mlpaUYM2YMfHx84Ovri/Hjx6OiokLZv3jxYjz//PPYvHkzgoODodPpMHHiRNTW1jZvaET01DhEEVGrs2rVKkRFRWHKlCkoLy9HeXk5AgMDUV1djf/9738wmUw4evQofvzxR1RUVGD8+PEOt9+0aRM0Gg0OHTqE9evXAwA8PDywevVqnD17Fps2bUJOTg7mzZsHABg8eDBWrlwJX19f5Xhz5859pC+73Y4xY8agqqoKFosF2dnZuHjxIiZMmOBQd+HCBezevRtZWVnIysqCxWLBsmXLmiktInIWX84jolZHp9NBo9HA29sbRqNRWV+zZg1MJhOWLl2qrH311VcIDAxEcXExevbsCQAIDQ1Fenq6w//86/VVwcHB+PjjjzFt2jR89tln0Gg00Ol0UKlUDsd7mNlsxunTp1FSUoLAwEAAwNdff42+ffsiPz8fAwcOBPDnsLVx40a0b98eAJCQkACz2YwlS5Y0LhgialI8E0VE/xknT57E/v374ePjo2y9evUC8OfZnwfCw8Mfue0vv/yC6OhodO3aFe3bt0dCQgKuXbuGurq6Bh+/qKgIgYGBygAFAH369IFer0dRUZGyFhwcrAxQANClSxdcvXr1qe4rETU/nokiov+MGzduYPTo0UhLS3tkX5cuXZTf27Vr57Dv0qVLeOmllzB9+nQsWbIEHTt2RG5uLiZPnoy7d+/C29u7Sfv08vJy+FulUsFutzfpMYio8ThEEVGrpNFoUF9f77A2YMAAfPvttwgODoZa3fCHv4KCAtjtdixfvhweHn+ewM/MzPzH4z2sd+/eKCsrQ1lZmXI2qrCwENXV1ejTp0+D+yGifwe+nEdErVJwcDCsVisuXbqEyspK2O12JCcno6qqCnFxccjPz8eFCxfw008/ISkp6W8HoGeffRb37t1DRkYGLl68iM2bNysXnP/1eDdu3IDZbEZlZeVjX+aLiYlBWFgY4uPjcezYMRw5cgRvvvkmhg0bhoiIiCbPgIiaF4coImqV5s6dC09PT/Tp0wf+/v4oLS1FQEAADh06hPr6egwfPhxhYWFISUmBXq9XzjA9Tv/+/bFixQqkpaWhX79+2Lp1K1JTUx1qBg8ejGnTpmHChAnw9/d/5MJ04M+X5fbs2YMOHTpg6NChiImJQY8ePbBjx44mv/9E1PxUIiKuboKIiIjI3fBMFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQREREROeH/vlcn4HgM4BQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import time\n", + "import numpy as np\n", + "import networkx as nx\n", + "import pennylane as qml\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Define your AGN graph structure\n", + "G = nx.hexagonal_lattice_graph(3, 3) # Adjust dimensions as needed for scalability\n", + "nx.set_node_attributes(G, values=0, name=\"state\") # Initialize node states\n", + "\n", + "# Define the quantum device and circuits\n", + "dev = qml.device(\"default.qubit\", wires=4)\n", + "\n", + "@qml.qnode(dev)\n", + "def quantum_decision_circuit(theta):\n", + " qml.RX(theta[0], wires=0)\n", + " qml.RY(theta[1], wires=1)\n", + " qml.CNOT(wires=[0, 1])\n", + " qml.RY(theta[2], wires=2)\n", + " qml.CNOT(wires=[1, 2])\n", + " qml.RX(theta[3], wires=3)\n", + " return qml.probs(wires=[0, 1, 2, 3])\n", + "\n", + "@qml.qnode(dev)\n", + "def complex_quantum_circuit(theta):\n", + " qml.Hadamard(wires=0)\n", + " qml.RX(theta[0], wires=0)\n", + " qml.CNOT(wires=[0, 1])\n", + " qml.RY(theta[1], wires=1)\n", + " qml.CRX(theta[2], wires=[0, 1]) # Control qubit is 0, target qubit is 1\n", + " qml.T(wires=2)\n", + " qml.CNOT(wires=[2, 3])\n", + " return qml.probs(wires=[0, 1, 2, 3])\n", + "\n", + "# Define tensor padding function\n", + "def pad_tensor(tensor, target_shape, pad_value=0):\n", + " original_shape = tensor.shape\n", + " padded_tensor = np.full(target_shape, pad_value, dtype=tensor.dtype)\n", + " slices = tuple(slice(0, min(original_shape[dim], target_shape[dim])) for dim in range(len(target_shape)))\n", + " padded_tensor[slices] = tensor\n", + " return padded_tensor\n", + "\n", + "# Define benchmarking function with data collection for analysis\n", + "def run_benchmark(iterations=100, use_complex_circuit=False):\n", + " exec_times = []\n", + " for _ in range(iterations):\n", + " # Generate random theta values for the quantum circuit\n", + " theta = np.random.rand(4)\n", + " \n", + " # Select circuit to run based on the argument\n", + " circuit = complex_quantum_circuit if use_complex_circuit else quantum_decision_circuit\n", + " \n", + " # Start timing\n", + " start_time = time.time()\n", + " \n", + " # Run the selected quantum circuit\n", + " probabilities = circuit(theta)\n", + " \n", + " # Map probabilities to AGN nodes\n", + " for i, node in enumerate(G.nodes()):\n", + " G.nodes[node][\"state\"] = probabilities[i % len(probabilities)]\n", + " \n", + " # End timing\n", + " end_time = time.time()\n", + " \n", + " # Calculate time for this iteration and store it\n", + " exec_times.append(end_time - start_time)\n", + " \n", + " avg_time = np.mean(exec_times)\n", + " print(f\"Average execution time per iteration: {avg_time:.4f} seconds\")\n", + " \n", + " # Plot execution times for each iteration\n", + " plt.plot(range(iterations), exec_times, label=\"Execution Time per Iteration\")\n", + " plt.xlabel(\"Iteration\")\n", + " plt.ylabel(\"Execution Time (s)\")\n", + " plt.title(\"AGN Execution Time Benchmark\")\n", + " plt.legend()\n", + " plt.show()\n", + "\n", + "# Example usage of padding with real-time data\n", + "real_time_data = np.random.rand(2, 3) # Simulate variable input size\n", + "padded_data = pad_tensor(real_time_data, (4, 4))\n", + "print(\"Padded Data:\\n\", padded_data)\n", + "\n", + "# Run the benchmark with the simple circuit\n", + "print(\"Running benchmark with simple circuit:\")\n", + "run_benchmark(iterations=100, use_complex_circuit=False)\n", + "\n", + "# Run the benchmark with the complex circuit\n", + "print(\"\\nRunning benchmark with complex circuit:\")\n", + "run_benchmark(iterations=100, use_complex_circuit=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a larger AGN graph structure for scalability testing\n", + "G_large = nx.hexagonal_lattice_graph(5, 5) # Try a 5x5 hexagonal lattice\n", + "nx.set_node_attributes(G_large, values=0, name=\"state\") # Initialize node states to 0\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "noise_dev = qml.device(\"default.mixed\", wires=4)\n", + "\n", + "@qml.qnode(noise_dev)\n", + "def noisy_quantum_circuit(theta):\n", + " qml.RX(theta[0], wires=0)\n", + " qml.DepolarizingChannel(0.1, wires=0) # Add depolarizing noise\n", + " qml.RY(theta[1], wires=1)\n", + " qml.CNOT(wires=[0, 1])\n", + " qml.RY(theta[2], wires=2)\n", + " qml.DepolarizingChannel(0.05, wires=2)\n", + " qml.CNOT(wires=[1, 2])\n", + " qml.RX(theta[3], wires=3)\n", + " return qml.probs(wires=[0, 1, 2, 3])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# Define a more complex quantum circuit with additional qubits and gates\n", + "dev_extended = qml.device(\"default.qubit\", wires=6)\n", + "\n", + "@qml.qnode(dev_extended)\n", + "def extended_quantum_circuit(theta):\n", + " qml.Hadamard(wires=0)\n", + " qml.CRX(theta[0], wires=[0, 1])\n", + " qml.CRY(theta[1], wires=[1, 2])\n", + " qml.CZ(wires=[2, 3])\n", + " qml.RZ(theta[2], wires=4)\n", + " qml.CNOT(wires=[4, 5])\n", + " return qml.probs(wires=[0, 1, 2, 3, 4, 5])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def run_consistency_test(theta_values, expected_outcome, iterations=100):\n", + " consistent_count = 0\n", + " for _ in range(iterations):\n", + " result = quantum_decision_circuit(theta_values)\n", + " decision = np.argmax(result)\n", + " if decision == expected_outcome:\n", + " consistent_count += 1\n", + " \n", + " consistency_rate = (consistent_count / iterations) * 100\n", + " print(f\"Consistency Rate: {consistency_rate:.2f}%\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: qiskit in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (1.2.4)\n", + "Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.15.1)\n", + "Requirement already satisfied: numpy<3,>=1.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.23.5)\n", + "Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.14.1)\n", + "Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.13.1)\n", + "Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.3.9)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (2.9.0.post0)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (5.3.0)\n", + "Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (4.12.2)\n", + "Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.13.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit) (1.16.0)\n", + "Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit) (6.1.0)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit) (1.3.0)\n", + "Requirement already satisfied: qiskit-aer in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.15.1)\n", + "Requirement already satisfied: qiskit>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-aer) (1.2.4)\n", + "Requirement already satisfied: numpy>=1.16.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-aer) (1.23.5)\n", + "Requirement already satisfied: scipy>=1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-aer) (1.14.1)\n", + "Requirement already satisfied: psutil>=5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-aer) (6.1.0)\n", + "Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.15.1)\n", + "Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (1.13.1)\n", + "Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.3.9)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (2.9.0.post0)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (5.3.0)\n", + "Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (4.12.2)\n", + "Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.13.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit>=1.1.0->qiskit-aer) (1.16.0)\n", + "Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit>=1.1.0->qiskit-aer) (6.1.0)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit>=1.1.0->qiskit-aer) (1.3.0)\n", + "Requirement already satisfied: qiskit-ibmq-provider in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.20.2)\n", + "Requirement already satisfied: qiskit-terra>=0.18.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (0.46.3)\n", + "Requirement already satisfied: requests>=2.19 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (2.32.3)\n", + "Requirement already satisfied: requests-ntlm<=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (1.1.0)\n", + "Requirement already satisfied: numpy<1.24 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (1.23.5)\n", + "Requirement already satisfied: urllib3>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (2.2.3)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (2.9.0.post0)\n", + "Requirement already satisfied: websocket-client>=1.5.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (1.8.0)\n", + "Requirement already satisfied: websockets>=10.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (13.1)\n", + "Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit-ibmq-provider) (1.16.0)\n", + "Requirement already satisfied: rustworkx>=0.13.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (0.15.1)\n", + "Requirement already satisfied: ply>=3.10 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (3.11)\n", + "Requirement already satisfied: psutil>=5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (6.1.0)\n", + "Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (1.14.1)\n", + "Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (1.13.1)\n", + "Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (0.3.9)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (5.3.0)\n", + "Requirement already satisfied: symengine>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (0.13.0)\n", + "Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (4.12.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibmq-provider) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibmq-provider) (3.10)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibmq-provider) (2024.8.30)\n", + "Requirement already satisfied: ntlm-auth>=1.0.2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm<=1.1.0->qiskit-ibmq-provider) (1.5.0)\n", + "Requirement already satisfied: cryptography>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm<=1.1.0->qiskit-ibmq-provider) (43.0.3)\n", + "Requirement already satisfied: cffi>=1.12 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cryptography>=1.3->requests-ntlm<=1.1.0->qiskit-ibmq-provider) (1.17.1)\n", + "Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit-terra>=0.18.0->qiskit-ibmq-provider) (6.1.0)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit-terra>=0.18.0->qiskit-ibmq-provider) (1.3.0)\n", + "Requirement already satisfied: pycparser in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm<=1.1.0->qiskit-ibmq-provider) (2.22)\n", + "Collecting qiskit-ibm-runtime\n", + " Downloading qiskit_ibm_runtime-0.32.0-py3-none-any.whl.metadata (19 kB)\n", + "Requirement already satisfied: requests>=2.19 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.32.3)\n", + "Requirement already satisfied: requests-ntlm>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.1.0)\n", + "Requirement already satisfied: numpy>=1.13 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.23.5)\n", + "Requirement already satisfied: urllib3>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.2.3)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.9.0.post0)\n", + "Requirement already satisfied: websocket-client>=1.5.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.8.0)\n", + "Collecting ibm-platform-services>=0.22.6 (from qiskit-ibm-runtime)\n", + " Downloading ibm_platform_services-0.59.0-py3-none-any.whl.metadata (9.0 kB)\n", + "Collecting pydantic>=2.5.0 (from qiskit-ibm-runtime)\n", + " Downloading pydantic-2.9.2-py3-none-any.whl.metadata (149 kB)\n", + "Requirement already satisfied: qiskit>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.2.4)\n", + "Collecting ibm-cloud-sdk-core<4.0.0,>=3.22.0 (from ibm-platform-services>=0.22.6->qiskit-ibm-runtime)\n", + " Downloading ibm_cloud_sdk_core-3.22.0-py3-none-any.whl.metadata (8.6 kB)\n", + "Collecting annotated-types>=0.6.0 (from pydantic>=2.5.0->qiskit-ibm-runtime)\n", + " Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", + "Collecting pydantic-core==2.23.4 (from pydantic>=2.5.0->qiskit-ibm-runtime)\n", + " Downloading pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl.metadata (6.6 kB)\n", + "Requirement already satisfied: typing-extensions>=4.6.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (4.12.2)\n", + "Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit-ibm-runtime) (1.16.0)\n", + "Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (0.15.1)\n", + "Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (1.14.1)\n", + "Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (1.13.1)\n", + "Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (0.3.9)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (5.3.0)\n", + "Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (0.13.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.10)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (2024.8.30)\n", + "Requirement already satisfied: ntlm-auth>=1.0.2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.5.0)\n", + "Requirement already satisfied: cryptography>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (43.0.3)\n", + "Requirement already satisfied: cffi>=1.12 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.17.1)\n", + "Collecting PyJWT<3.0.0,>=2.8.0 (from ibm-cloud-sdk-core<4.0.0,>=3.22.0->ibm-platform-services>=0.22.6->qiskit-ibm-runtime)\n", + " Downloading PyJWT-2.9.0-py3-none-any.whl.metadata (3.0 kB)\n", + "Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit>=1.1.0->qiskit-ibm-runtime) (6.1.0)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit>=1.1.0->qiskit-ibm-runtime) (1.3.0)\n", + "Requirement already satisfied: pycparser in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.22)\n", + "Downloading qiskit_ibm_runtime-0.32.0-py3-none-any.whl (3.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.0/3.0 MB\u001b[0m \u001b[31m1.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading ibm_platform_services-0.59.0-py3-none-any.whl (340 kB)\n", + "Downloading pydantic-2.9.2-py3-none-any.whl (434 kB)\n", + "Downloading pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl (1.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.8/1.8 MB\u001b[0m \u001b[31m4.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", + "Downloading ibm_cloud_sdk_core-3.22.0-py3-none-any.whl (69 kB)\n", + "Downloading PyJWT-2.9.0-py3-none-any.whl (22 kB)\n", + "Installing collected packages: PyJWT, pydantic-core, annotated-types, pydantic, ibm-cloud-sdk-core, ibm-platform-services, qiskit-ibm-runtime\n", + "Successfully installed PyJWT-2.9.0 annotated-types-0.7.0 ibm-cloud-sdk-core-3.22.0 ibm-platform-services-0.59.0 pydantic-2.9.2 pydantic-core-2.23.4 qiskit-ibm-runtime-0.32.0\n" + ] + } + ], + "source": [ + "!pip install qiskit\n", + "!pip install qiskit-aer\n", + "!pip install qiskit-ibmq-provider\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "ImportError", + "evalue": "Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QuantumCircuit\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexecute_function\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m execute\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviders\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mibmq\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m IBMQ\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/__init__.py:38\u001b[0m\n\u001b[1;32m 36\u001b[0m _suppress_error \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39menviron\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQISKIT_SUPPRESS_1_0_IMPORT_ERROR\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m) \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mint\u001b[39m(_major) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _suppress_error:\n\u001b[0;32m---> 38\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(\n\u001b[1;32m 39\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQiskit is installed in an invalid environment that has both Qiskit >=1.0\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m and an earlier version.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m You should create a new virtual environment, and ensure that you do not mix\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 42\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m dependencies between Qiskit <1.0 and >=1.0.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 43\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Any packages that depend on \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mqiskit-terra\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m are not compatible with Qiskit 1.0 and\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m will need to be updated.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Qiskit unfortunately cannot enforce this requirement during environment resolution.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 46\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m See https://qisk.it/packaging-1-0 for more detail.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 47\u001b[0m )\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_accelerate\u001b[39;00m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_numpy_compat\u001b[39;00m\n", + "\u001b[0;31mImportError\u001b[0m: Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail." + ] + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "from qiskit.execute_function import execute\n", + "from qiskit.providers.ibmq import IBMQ\n", + "from qiskit_aer import Aer\n", + "\n", + "IBMQ.save_account('86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc')\n", + "\n", + "\n", + "\n", + "# Save your IBMQ account credentials (only needs to be done once)\n", + "# Replace 'YOUR_API_TOKEN' with your actual IBM Quantum Experience API token\n", + "IBMQ.save_account('86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc')\n", + "\n", + "# Load IBMQ account and select backend\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider('ibm-q')\n", + "backend = provider.get_backend('ibm_brisbane')\n", + "\n", + "# Define a simple Qiskit quantum circuit\n", + "def qiskit_circuit(theta):\n", + " qc = QuantumCircuit(4)\n", + " qc.rx(theta[0], 0)\n", + " qc.ry(theta[1], 1)\n", + " qc.cx(0, 1)\n", + " qc.ry(theta[2], 2)\n", + " qc.cx(1, 2)\n", + " qc.rx(theta[3], 3)\n", + " qc.measure_all()\n", + " return qc\n", + "\n", + "# Run on IBM Q backend\n", + "theta_values = [0.3, 0.7, 1.2, 0.5]\n", + "qc = qiskit_circuit(theta_values)\n", + "job = execute(qc, backend, shots=1024)\n", + "result = job.result()\n", + "counts = result.get_counts(qc)\n", + "print(\"Qiskit simulation results:\", counts)\n", + "\n", + "# Optionally, run on Aer simulator\n", + "aer_backend = Aer.get_backend('qasm_simulator')\n", + "aer_job = execute(qc, aer_backend, shots=1024)\n", + "aer_result = aer_job.result()\n", + "aer_counts = aer_result.get_counts(qc)\n", + "print(\"Aer simulation results:\", aer_counts)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "ename": "ImportError", + "evalue": "Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[4], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviders\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mibmq\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m IBMQ\n\u001b[1;32m 5\u001b[0m IBMQ\u001b[38;5;241m.\u001b[39msave_account(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 8\u001b[0m \u001b[38;5;66;03m# Load account and check available backends\u001b[39;00m\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/__init__.py:38\u001b[0m\n\u001b[1;32m 36\u001b[0m _suppress_error \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39menviron\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQISKIT_SUPPRESS_1_0_IMPORT_ERROR\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m) \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mint\u001b[39m(_major) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _suppress_error:\n\u001b[0;32m---> 38\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(\n\u001b[1;32m 39\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQiskit is installed in an invalid environment that has both Qiskit >=1.0\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m and an earlier version.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m You should create a new virtual environment, and ensure that you do not mix\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 42\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m dependencies between Qiskit <1.0 and >=1.0.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 43\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Any packages that depend on \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mqiskit-terra\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m are not compatible with Qiskit 1.0 and\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m will need to be updated.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Qiskit unfortunately cannot enforce this requirement during environment resolution.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 46\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m See https://qisk.it/packaging-1-0 for more detail.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 47\u001b[0m )\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_accelerate\u001b[39;00m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_numpy_compat\u001b[39;00m\n", + "\u001b[0;31mImportError\u001b[0m: Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail." + ] + } + ], + "source": [ + "from qiskit.providers.ibmq import IBMQ\n", + "\n", + "\n", + "\n", + "IBMQ.save_account('86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc')\n", + "\n", + "\n", + "# Load account and check available backends\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n", + "print(provider.backends())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ibmqfactory.load_account:WARNING:2024-11-01 20:26:27,158: Credentials are already in use. The existing account in the session will be replaced.\n", + "/var/folders/11/rgx5c08d3v573lbh0msqtrqw0000gp/T/ipykernel_9370/2896483965.py:11: DeprecationWarning: The method ``qiskit.providers.provider.ProviderV1.get_backend()`` is deprecated as of qiskit 1.1. It will be removed no earlier than 3 months after the release date. The abstract Provider and ProviderV1 classes are deprecated and will be removed in 2.0. You can just remove it as the parent class and a `get_backend` method that returns the backends from `self.backend`.\n", + " backend = provider.get_backend('ibm_brisbane')\n", + "/var/folders/11/rgx5c08d3v573lbh0msqtrqw0000gp/T/ipykernel_9370/2896483965.py:28: DeprecationWarning: The function ``qiskit.execute_function.execute()`` is deprecated as of qiskit 0.46.0. It will be removed in the Qiskit 1.0 release. This function combines ``transpile`` and ``backend.run``, which is covered by ``Sampler`` :mod:`~qiskit.primitives`. Alternatively, you can also run :func:`.transpile` followed by ``backend.run()``.\n", + " job = execute(qc, backend, shots=1024)\n" + ] + }, + { + "ename": "RequestsApiError", + "evalue": "'400 Client Error: Bad Request for url: https://api.quantum.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/devices/ibm_brisbane/properties?version=1. qiskit-ibmq-provider is no longer supported. Refer to the migration guide at https://docs.quantum.ibm.com/api/migration-guides/qiskit-runtime-from-ibmq-provider for instructions on how to migrate existing code to Qiskit Runtime primitives., Error code: 2418.'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mHTTPError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/api/session.py:278\u001b[0m, in \u001b[0;36mRetrySession.request\u001b[0;34m(self, method, url, bare, **kwargs)\u001b[0m\n\u001b[1;32m 277\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mrequest(method, final_url, headers\u001b[38;5;241m=\u001b[39mheaders, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m--> 278\u001b[0m \u001b[43mresponse\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraise_for_status\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m RequestException \u001b[38;5;28;01mas\u001b[39;00m ex:\n\u001b[1;32m 280\u001b[0m \u001b[38;5;66;03m# Wrap the requests exceptions into a IBM Q custom one, for\u001b[39;00m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;66;03m# compatibility.\u001b[39;00m\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/requests/models.py:1024\u001b[0m, in \u001b[0;36mResponse.raise_for_status\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1023\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m http_error_msg:\n\u001b[0;32m-> 1024\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HTTPError(http_error_msg, response\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m)\n", + "\u001b[0;31mHTTPError\u001b[0m: 400 Client Error: Bad Request for url: https://api.quantum.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/devices/ibm_brisbane/properties?version=1", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mRequestsApiError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[35], line 28\u001b[0m\n\u001b[1;32m 26\u001b[0m theta_values \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m0.3\u001b[39m, \u001b[38;5;241m0.7\u001b[39m, \u001b[38;5;241m1.2\u001b[39m, \u001b[38;5;241m0.5\u001b[39m]\n\u001b[1;32m 27\u001b[0m qc \u001b[38;5;241m=\u001b[39m qiskit_circuit(theta_values)\n\u001b[0;32m---> 28\u001b[0m job \u001b[38;5;241m=\u001b[39m \u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mqc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbackend\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshots\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1024\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 29\u001b[0m result \u001b[38;5;241m=\u001b[39m job\u001b[38;5;241m.\u001b[39mresult()\n\u001b[1;32m 30\u001b[0m counts \u001b[38;5;241m=\u001b[39m result\u001b[38;5;241m.\u001b[39mget_counts(qc)\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/utils/deprecation.py:97\u001b[0m, in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 0\u001b[0m \n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/execute_function.py:294\u001b[0m, in \u001b[0;36mexecute\u001b[0;34m(experiments, backend, basis_gates, coupling_map, backend_properties, initial_layout, seed_transpiler, optimization_level, pass_manager, shots, memory, seed_simulator, default_qubit_los, default_meas_los, qubit_lo_range, meas_lo_range, schedule_los, meas_level, meas_return, memory_slots, memory_slot_size, rep_time, rep_delay, parameter_binds, schedule_circuit, inst_map, meas_map, scheduling_method, init_qubits, **run_config)\u001b[0m\n\u001b[1;32m 291\u001b[0m experiments \u001b[38;5;241m=\u001b[39m pass_manager\u001b[38;5;241m.\u001b[39mrun(experiments)\n\u001b[1;32m 292\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 293\u001b[0m \u001b[38;5;66;03m# transpiling the circuits using given transpile options\u001b[39;00m\n\u001b[0;32m--> 294\u001b[0m experiments \u001b[38;5;241m=\u001b[39m \u001b[43mtranspile\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43mexperiments\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 296\u001b[0m \u001b[43m \u001b[49m\u001b[43mbasis_gates\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbasis_gates\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 297\u001b[0m \u001b[43m \u001b[49m\u001b[43mcoupling_map\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcoupling_map\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 298\u001b[0m \u001b[43m \u001b[49m\u001b[43mbackend_properties\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbackend_properties\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 299\u001b[0m \u001b[43m \u001b[49m\u001b[43minitial_layout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minitial_layout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 300\u001b[0m \u001b[43m \u001b[49m\u001b[43mseed_transpiler\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mseed_transpiler\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 301\u001b[0m \u001b[43m \u001b[49m\u001b[43moptimization_level\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moptimization_level\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 302\u001b[0m \u001b[43m \u001b[49m\u001b[43mbackend\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbackend\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 303\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m schedule_circuit:\n\u001b[1;32m 306\u001b[0m experiments \u001b[38;5;241m=\u001b[39m schedule(\n\u001b[1;32m 307\u001b[0m circuits\u001b[38;5;241m=\u001b[39mexperiments,\n\u001b[1;32m 308\u001b[0m backend\u001b[38;5;241m=\u001b[39mbackend,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 311\u001b[0m method\u001b[38;5;241m=\u001b[39mscheduling_method,\n\u001b[1;32m 312\u001b[0m )\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/compiler/transpiler.py:339\u001b[0m, in \u001b[0;36mtranspile\u001b[0;34m(circuits, backend, basis_gates, inst_map, coupling_map, backend_properties, initial_layout, layout_method, routing_method, translation_method, scheduling_method, instruction_durations, dt, approximation_degree, timing_constraints, seed_transpiler, optimization_level, callback, output_name, unitary_synthesis_method, unitary_synthesis_plugin_config, target, hls_config, init_method, optimization_method, ignore_backend_supplied_default_methods, num_processes)\u001b[0m\n\u001b[1;32m 335\u001b[0m _check_circuits_coupling_map(circuits, coupling_map, backend)\n\u001b[1;32m 337\u001b[0m timing_constraints \u001b[38;5;241m=\u001b[39m _parse_timing_constraints(backend, timing_constraints)\n\u001b[0;32m--> 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _given_inst_map \u001b[38;5;129;01mand\u001b[39;00m inst_map\u001b[38;5;241m.\u001b[39mhas_custom_gate() \u001b[38;5;129;01mand\u001b[39;00m target \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 340\u001b[0m \u001b[38;5;66;03m# Do not mutate backend target\u001b[39;00m\n\u001b[1;32m 341\u001b[0m target \u001b[38;5;241m=\u001b[39m copy\u001b[38;5;241m.\u001b[39mdeepcopy(target)\n\u001b[1;32m 342\u001b[0m target\u001b[38;5;241m.\u001b[39mupdate_from_instruction_schedule_map(inst_map)\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/backend_compat.py:397\u001b[0m, in \u001b[0;36m__init__\u001b[0;34m(self, backend, name_mapping, add_delay, filter_faulty)\u001b[0m\n\u001b[1;32m 0\u001b[0m \n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/ibmqbackend.py:458\u001b[0m, in \u001b[0;36mIBMQBackend.properties\u001b[0;34m(self, refresh, datetime)\u001b[0m\n\u001b[1;32m 455\u001b[0m datetime \u001b[38;5;241m=\u001b[39m local_to_utc(datetime)\n\u001b[1;32m 457\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m datetime \u001b[38;5;129;01mor\u001b[39;00m refresh \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_properties \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 458\u001b[0m api_properties \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_api_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackend_properties\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdatetime\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdatetime\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 459\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m api_properties:\n\u001b[1;32m 460\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/api/clients/account.py:100\u001b[0m, in \u001b[0;36mAccountClient.backend_properties\u001b[0;34m(self, backend_name, datetime)\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Return the properties of the backend.\u001b[39;00m\n\u001b[1;32m 91\u001b[0m \n\u001b[1;32m 92\u001b[0m \u001b[38;5;124;03mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 97\u001b[0m \u001b[38;5;124;03m Backend properties.\u001b[39;00m\n\u001b[1;32m 98\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 99\u001b[0m \u001b[38;5;66;03m# pylint: disable=redefined-outer-name\u001b[39;00m\n\u001b[0;32m--> 100\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maccount_api\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbackend_name\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproperties\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdatetime\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdatetime\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/api/rest/backend.py:68\u001b[0m, in \u001b[0;36mBackend.properties\u001b[0;34m(self, datetime)\u001b[0m\n\u001b[1;32m 65\u001b[0m query[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwhere\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m extra_filter\n\u001b[1;32m 66\u001b[0m params[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfilter\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mdumps(query) \u001b[38;5;66;03m# type: ignore[assignment]\u001b[39;00m\n\u001b[0;32m---> 68\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mjson()\n\u001b[1;32m 70\u001b[0m \u001b[38;5;66;03m# Adjust name of the backend.\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m response:\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/requests/sessions.py:602\u001b[0m, in \u001b[0;36mSession.get\u001b[0;34m(self, url, **kwargs)\u001b[0m\n\u001b[1;32m 594\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request. Returns :class:`Response` object.\u001b[39;00m\n\u001b[1;32m 595\u001b[0m \n\u001b[1;32m 596\u001b[0m \u001b[38;5;124;03m:param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[1;32m 597\u001b[0m \u001b[38;5;124;03m:param \\*\\*kwargs: Optional arguments that ``request`` takes.\u001b[39;00m\n\u001b[1;32m 598\u001b[0m \u001b[38;5;124;03m:rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 599\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 601\u001b[0m kwargs\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m--> 602\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mGET\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/api/session.py:300\u001b[0m, in \u001b[0;36mRetrySession.request\u001b[0;34m(self, method, url, bare, **kwargs)\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[38;5;66;03m# Modify the original message on the chained exceptions.\u001b[39;00m\n\u001b[1;32m 298\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_modify_chained_exception_messages(ex)\n\u001b[0;32m--> 300\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m RequestsApiError(message, status_code) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mex\u001b[39;00m\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", + "\u001b[0;31mRequestsApiError\u001b[0m: '400 Client Error: Bad Request for url: https://api.quantum.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/devices/ibm_brisbane/properties?version=1. qiskit-ibmq-provider is no longer supported. Refer to the migration guide at https://docs.quantum.ibm.com/api/migration-guides/qiskit-runtime-from-ibmq-provider for instructions on how to migrate existing code to Qiskit Runtime primitives., Error code: 2418.'" + ] + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "from qiskit.execute_function import execute\n", + "from qiskit.providers.ibmq import IBMQ\n", + "from qiskit.tools.monitor import job_monitor\n", + "\n", + "# Load IBMQ account\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n", + "\n", + "# Choose the 'ibm_brisbane' backend\n", + "backend = provider.get_backend('ibm_brisbane')\n", + "\n", + "# Define a simple Qiskit quantum circuit\n", + "def qiskit_circuit(theta):\n", + " qc = QuantumCircuit(4)\n", + " qc.rx(theta[0], 0)\n", + " qc.ry(theta[1], 1)\n", + " qc.cx(0, 1)\n", + " qc.ry(theta[2], 2)\n", + " qc.cx(1, 2)\n", + " qc.rx(theta[3], 3)\n", + " qc.measure_all()\n", + " return qc\n", + "\n", + "# Run on IBM Q backend\n", + "theta_values = [0.3, 0.7, 1.2, 0.5]\n", + "qc = qiskit_circuit(theta_values)\n", + "job = execute(qc, backend, shots=1024)\n", + "result = job.result()\n", + "counts = result.get_counts(qc)\n", + "print(\"Qiskit simulation results:\", counts)\n", + "\n", + "# Optionally, run on Aer simulator\n", + "aer_backend = Aer.get_backend('qasm_simulator')\n", + "aer_job = execute(qc, aer_backend, shots=1024)\n", + "aer_result = aer_job.result()\n", + "aer_counts = aer_result.get_counts(qc)\n", + "print(\"Aer simulation results:\", aer_counts)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "ename": "ImportError", + "evalue": "cannot import name 'PrimitiveResult' from 'qiskit.primitives' (/Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/primitives/__init__.py)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[31], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QuantumCircuit\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit_ibm_runtime\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QiskitRuntimeService, Sampler\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Initialize the Qiskit Runtime service\u001b[39;00m\n\u001b[1;32m 5\u001b[0m service \u001b[38;5;241m=\u001b[39m QiskitRuntimeService(channel\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mibm_quantum\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/__init__.py:204\u001b[0m\n\u001b[1;32m 201\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mlogging\u001b[39;00m\n\u001b[1;32m 202\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mwarnings\u001b[39;00m\n\u001b[0;32m--> 204\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mqiskit_runtime_service\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QiskitRuntimeService\n\u001b[1;32m 205\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mibm_backend\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m IBMBackend\n\u001b[1;32m 206\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mruntime_job\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RuntimeJob\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/qiskit_runtime_service.py:27\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviders\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexceptions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QiskitBackendNotFoundError\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviders\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviderutils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m filter_backends\n\u001b[0;32m---> 27\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit_ibm_runtime\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ibm_backend\n\u001b[1;32m 28\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproxies\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ProxyConfiguration\n\u001b[1;32m 29\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mhgp\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m to_instance_format, from_instance_format\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/ibm_backend.py:50\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mprovider_session\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 46\u001b[0m Session \u001b[38;5;28;01mas\u001b[39;00m ProviderSession,\n\u001b[1;32m 47\u001b[0m )\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m qiskit_runtime_service \u001b[38;5;66;03m# pylint: disable=unused-import,cyclic-import\u001b[39;00m\n\u001b[0;32m---> 50\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mruntime_job\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RuntimeJob\n\u001b[1;32m 52\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mclients\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RuntimeClient\n\u001b[1;32m 53\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexceptions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m IBMBackendApiProtocolError, IBMBackendValueError, IBMBackendApiError\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/runtime_job.py:28\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[38;5;66;03m# pylint: disable=unused-import,cyclic-import\u001b[39;00m\n\u001b[1;32m 27\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit_ibm_runtime\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m qiskit_runtime_service\n\u001b[0;32m---> 28\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mconstants\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m API_TO_JOB_STATUS\n\u001b[1;32m 29\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexceptions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 30\u001b[0m RuntimeJobFailureError,\n\u001b[1;32m 31\u001b[0m RuntimeInvalidStateError,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 34\u001b[0m RuntimeJobTimeoutError,\n\u001b[1;32m 35\u001b[0m )\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mresult_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ResultDecoder\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/constants.py:20\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mnoise_learner_result_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m NoiseLearnerResultDecoder\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mestimator_result_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m EstimatorResultDecoder\n\u001b[0;32m---> 20\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msampler_result_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m SamplerResultDecoder\n\u001b[1;32m 21\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mrunner_result\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RunnerResult\n\u001b[1;32m 24\u001b[0m QISKIT_IBM_RUNTIME_API_URL \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttps://auth.quantum-computing.ibm.com/api\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/utils/sampler_result_decoder.py:17\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;124;03m\"\"\"Sampler result decoder.\"\"\"\u001b[39;00m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Dict\n\u001b[0;32m---> 17\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mprimitives\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m PrimitiveResult\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mresult_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ResultDecoder\n\u001b[1;32m 22\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mSamplerResultDecoder\u001b[39;00m(ResultDecoder):\n", + "\u001b[0;31mImportError\u001b[0m: cannot import name 'PrimitiveResult' from 'qiskit.primitives' (/Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/primitives/__init__.py)" + ] + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "from qiskit_ibm_runtime import QiskitRuntimeService, Sampler\n", + "\n", + "# Initialize the Qiskit Runtime service\n", + "service = QiskitRuntimeService(channel=\"ibm_quantum\")\n", + "\n", + "# Define a simple quantum circuit\n", + "def qiskit_circuit(theta):\n", + " qc = QuantumCircuit(4)\n", + " qc.rx(theta[0], 0)\n", + " qc.ry(theta[1], 1)\n", + " qc.cx(0, 1)\n", + " qc.ry(theta[2], 2)\n", + " qc.cx(1, 2)\n", + " qc.rx(theta[3], 3)\n", + " qc.measure_all()\n", + " return qc\n", + "\n", + "# Define theta values and create the circuit\n", + "theta_values = [0.3, 0.7, 1.2, 0.5]\n", + "qc = qiskit_circuit(theta_values)\n", + "\n", + "# Use the Sampler primitive to run the circuit on ibm_brisbane\n", + "with Sampler(session=service) as sampler:\n", + " job = sampler.run(circuits=qc, shots=1024)\n", + " result = job.result()\n", + " counts = result.get_counts(qc)\n", + " print(\"Results from ibm_brisbane using Qiskit Runtime Sampler:\", counts)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: qiskit in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (1.2.4)\n", + "Requirement already satisfied: qiskit-ibm-runtime in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.32.0)\n", + "Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.15.1)\n", + "Requirement already satisfied: numpy<3,>=1.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.23.5)\n", + "Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.14.1)\n", + "Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.13.1)\n", + "Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.3.9)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (2.9.0.post0)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (5.3.0)\n", + "Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (4.12.2)\n", + "Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.13.0)\n", + "Requirement already satisfied: requests>=2.19 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.32.3)\n", + "Requirement already satisfied: requests-ntlm>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.1.0)\n", + "Requirement already satisfied: urllib3>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.2.3)\n", + "Requirement already satisfied: websocket-client>=1.5.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.8.0)\n", + "Requirement already satisfied: ibm-platform-services>=0.22.6 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (0.59.0)\n", + "Requirement already satisfied: pydantic>=2.5.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.9.2)\n", + "Requirement already satisfied: ibm-cloud-sdk-core<4.0.0,>=3.22.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (3.22.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (2.23.4)\n", + "Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit) (1.16.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.10)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (2024.8.30)\n", + "Requirement already satisfied: ntlm-auth>=1.0.2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.5.0)\n", + "Requirement already satisfied: cryptography>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (43.0.3)\n", + "Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit) (6.1.0)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit) (1.3.0)\n", + "Requirement already satisfied: cffi>=1.12 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.17.1)\n", + "Requirement already satisfied: PyJWT<3.0.0,>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from ibm-cloud-sdk-core<4.0.0,>=3.22.0->ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (2.9.0)\n", + "Requirement already satisfied: pycparser in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.22)\n" + ] + } + ], + "source": [ + "!pip install --upgrade qiskit qiskit-ibm-runtime" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "ename": "ImportError", + "evalue": "Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QuantumCircuit\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit_ibm_runtime\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QiskitRuntimeService, Sampler\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Initialize the Qiskit Runtime service\u001b[39;00m\n", + "File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/__init__.py:38\u001b[0m\n\u001b[1;32m 36\u001b[0m _suppress_error \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39menviron\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQISKIT_SUPPRESS_1_0_IMPORT_ERROR\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m) \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mint\u001b[39m(_major) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _suppress_error:\n\u001b[0;32m---> 38\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(\n\u001b[1;32m 39\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQiskit is installed in an invalid environment that has both Qiskit >=1.0\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m and an earlier version.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m You should create a new virtual environment, and ensure that you do not mix\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 42\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m dependencies between Qiskit <1.0 and >=1.0.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 43\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Any packages that depend on \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mqiskit-terra\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m are not compatible with Qiskit 1.0 and\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m will need to be updated.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Qiskit unfortunately cannot enforce this requirement during environment resolution.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 46\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m See https://qisk.it/packaging-1-0 for more detail.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 47\u001b[0m )\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_accelerate\u001b[39;00m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_numpy_compat\u001b[39;00m\n", + "\u001b[0;31mImportError\u001b[0m: Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail." + ] + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "from qiskit_ibm_runtime import QiskitRuntimeService, Sampler\n", + "\n", + "# Initialize the Qiskit Runtime service\n", + "service = QiskitRuntimeService(channel=\"ibm_quantum\")\n", + "\n", + "# Define a simple quantum circuit\n", + "def qiskit_circuit(theta):\n", + " qc = QuantumCircuit(4)\n", + " qc.rx(theta[0], 0)\n", + " qc.ry(theta[1], 1)\n", + " qc.cx(0, 1)\n", + " qc.ry(theta[2], 2)\n", + " qc.cx(1, 2)\n", + " qc.rx(theta[3], 3)\n", + " qc.measure_all()\n", + " return qc\n", + "\n", + "# Define theta values and create the circuit\n", + "theta_values = [0.3, 0.7, 1.2, 0.5]\n", + "qc = qiskit_circuit(theta_values)\n", + "\n", + "# Use the Sampler primitive to run the circuit on ibm_brisbane\n", + "with Sampler(session=service) as sampler:\n", + " job = sampler.run(circuits=qc, shots=1024)\n", + " result = job.result()\n", + " counts = result.get_counts(qc)\n", + " print(\"Results from ibm_brisbane using Qiskit Runtime Sampler:\", counts)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'IBMQ' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mcsv\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m \u001b[43mIBMQ\u001b[49m\u001b[38;5;241m.\u001b[39msave_account(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mlog_execution_time\u001b[39m(execution_time, file_name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbenchmark_log.csv\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(file_name, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m file:\n", + "\u001b[0;31mNameError\u001b[0m: name 'IBMQ' is not defined" + ] + } + ], + "source": [ + "import csv\n", + "\n", + "IBMQ.save_account('86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc')\n", + "\n", + "\n", + "def log_execution_time(execution_time, file_name=\"benchmark_log.csv\"):\n", + " with open(file_name, mode='a') as file:\n", + " writer = csv.writer(file)\n", + " writer.writerow([execution_time])\n", + "\n", + "# Example of logging execution time within the benchmark function\n", + "def run_benchmark_with_logging(iterations=100):\n", + " total_time = 0\n", + " for _ in range(iterations):\n", + " theta = np.random.rand(4)\n", + " start_time = time.time()\n", + " probabilities = quantum_decision_circuit(theta)\n", + " end_time = time.time()\n", + " exec_time = end_time - start_time\n", + " total_time += exec_time\n", + " log_execution_time(exec_time) # Log each execution time\n", + " \n", + " avg_time = total_time / iterations\n", + " print(f\"Average execution time per iteration: {avg_time:.4f} seconds\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: qiskit in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (1.2.4)\n", + "Requirement already satisfied: qiskit-ibm-runtime in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.32.0)\n", + "Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.15.1)\n", + "Requirement already satisfied: numpy<3,>=1.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.23.5)\n", + "Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.14.1)\n", + "Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.13.1)\n", + "Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.3.9)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (2.9.0.post0)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (5.3.0)\n", + "Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (4.12.2)\n", + "Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.13.0)\n", + "Requirement already satisfied: requests>=2.19 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.32.3)\n", + "Requirement already satisfied: requests-ntlm>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.1.0)\n", + "Requirement already satisfied: urllib3>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.2.3)\n", + "Requirement already satisfied: websocket-client>=1.5.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.8.0)\n", + "Requirement already satisfied: ibm-platform-services>=0.22.6 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (0.59.0)\n", + "Requirement already satisfied: pydantic>=2.5.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.9.2)\n", + "Requirement already satisfied: ibm-cloud-sdk-core<4.0.0,>=3.22.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (3.22.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (2.23.4)\n", + "Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit) (1.16.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.10)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (2024.8.30)\n", + "Requirement already satisfied: ntlm-auth>=1.0.2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.5.0)\n", + "Requirement already satisfied: cryptography>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (43.0.3)\n", + "Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit) (6.1.0)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit) (1.3.0)\n", + "Requirement already satisfied: cffi>=1.12 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.17.1)\n", + "Requirement already satisfied: PyJWT<3.0.0,>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from ibm-cloud-sdk-core<4.0.0,>=3.22.0->ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (2.9.0)\n", + "Requirement already satisfied: pycparser in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.22)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install -U qiskit qiskit-ibm-runtime" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}