From 5ad783df64d48bd32e9beccf4b4e0f532e1585bf Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Fri, 12 Jul 2024 14:14:19 -0400 Subject: [PATCH 01/13] started --- .../bloqs/multiplexers/unary_iteration.ipynb | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 8d4e7b4a46..505d80a342 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -22,12 +22,36 @@ "# limitations under the License." ] }, + { + "cell_type": "markdown", + "id": "ebb4d29d", + "metadata": {}, + "source": [ + "# Select" + ] + }, + { + "cell_type": "markdown", + "id": "8b7c37c9", + "metadata": {}, + "source": [ + "The `SELECT` operation, defined by $$ SELECT \\left( | i \\rangle \\otimes | \\psi \\rangle \\right) = |i \\rangle \\otimes U_i | \\psi \\rangle $$ is a fundamental primitive in quantum computing. In recent years techniques such as Quantum Singular Value Transformations (QSVT) have brought about a unifying way to construct virtually all known quantum algorithms. Qualtran has a few different techniques for implementing these oracles; this article aims to explain how the basic construction known as Unary Iteration is implemented. Towards the end variants such as SELECT-SWAP or QROAM, as well as pointers to specific implementations for physical systems such as chemical systems or Hubbard Models are mentioned. " + ] + }, { "cell_type": "markdown", "id": "49b5e1e6", "metadata": {}, "source": [ - "# Unary Iteration" + "## Unary Iteration" + ] + }, + { + "cell_type": "markdown", + "id": "347de8f3", + "metadata": {}, + "source": [ + "Throughout the following discussion we will use the universal gate set of Clifford + T gates. We also assume that the user has a control register `ctrl` that contains the state to be \"selected on\" and a system register `sys` that the target unitaries are applied to. We first will go through a very simple SELECT Circuit in which one has a `ctrl` register of 2 qubits, a system register of 1 qubit, and the target unitary to be applied is the identity if `ctrl` is 0, $X$ if `ctrl` is 1, $Y$ if `ctrl` is 2, and $Z$ if `ctrl` is 3. In symbols $$SELECT = |00 \\rangle \\langle 00 | \\otimes I + |01 \\rangle \\langle 01 | \\otimes X + |10 \\rangle \\langle 10 | \\otimes Y + |11 \\rangle \\langle 11 | \\otimes Z.$$" ] }, { From 3d474164694ee7e71d3f4e493381514b62d8c370 Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Wed, 17 Jul 2024 20:42:12 -0400 Subject: [PATCH 02/13] wip --- .../bloqs/multiplexers/unary_iteration.ipynb | 105 +++++++++++++++++- 1 file changed, 103 insertions(+), 2 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 505d80a342..0d4fe1135f 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -51,7 +51,108 @@ "id": "347de8f3", "metadata": {}, "source": [ - "Throughout the following discussion we will use the universal gate set of Clifford + T gates. We also assume that the user has a control register `ctrl` that contains the state to be \"selected on\" and a system register `sys` that the target unitaries are applied to. We first will go through a very simple SELECT Circuit in which one has a `ctrl` register of 2 qubits, a system register of 1 qubit, and the target unitary to be applied is the identity if `ctrl` is 0, $X$ if `ctrl` is 1, $Y$ if `ctrl` is 2, and $Z$ if `ctrl` is 3. In symbols $$SELECT = |00 \\rangle \\langle 00 | \\otimes I + |01 \\rangle \\langle 01 | \\otimes X + |10 \\rangle \\langle 10 | \\otimes Y + |11 \\rangle \\langle 11 | \\otimes Z.$$" + "Throughout the following discussion we will use the universal gate set of Clifford + T gates. We also assume that the user has a control register `ctrl` that contains the state to be \"selected on\" and a system register `sys` that the target unitaries are applied to. We first will go through a very simple SELECT Circuit in which one has a `ctrl` register of 3 qubits, a system register of 1 qubit, and the target unitaries to be applied are $U_0, U_1, \\ldots, U_7$. In symbols, $SELECT = \\sum_{i = 0}^7 |i\\rangle\\langle i | \\otimes U_i$. A typical assumption made when constructing a SELECT circuit is that we have access to a single qubit controlled version of the unitaries, i.e. $|1 \\rangle \\langle 1| \\otimes U_i$, where the $|1\\rangle \\langle 1|$ acts on one ancilla qubit that is not in the `ctrl` register. \n", + "\n", + "This constraint makes our job now fairly clear: we have to come up with a way of flipping an ancilla qubit, say from a register of ancilla qubits `a[n]`, if the `ctrl` register is in the state $|i\\rangle$ and applying the controlled $U_i$'s based on `a[n]`. We will be able to do this with just Toffolis and bit flips. First we will walk through the circuit that applies the first three controlled unitaries, as that is enough to get the big picture. \n", + "\n", + "To apply the first unitary we need to have an ancilla flipped to 1 if the `ctrl` qubits are all 0. This is done with Toffoli's and bit flips to implement AND" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "afdeeb4e", + "metadata": {}, + "outputs": [], + "source": [ + "from qualtran import BloqBuilder, QUInt, QAny, QBit\n", + "from qualtran.bloqs.basic_gates.rotation import CZPowGate\n", + "from qualtran.bloqs.basic_gates.toffoli import Toffoli\n", + "from qualtran.bloqs.basic_gates.x_basis import XGate\n", + "from qualtran.drawing.musical_score import draw_musical_score, get_musical_score_data\n", + "from qualtran.drawing import get_musical_score_data, draw_musical_score\n", + "\n", + "bb = BloqBuilder()\n", + "ctrl = bb.add_register_from_dtype(\"ctrl\", QAny(3))\n", + "ctrls = bb.split(ctrl)\n", + "anc = bb.add_register_from_dtype(\"anc\", QAny(2))\n", + "ancs = bb.split(anc)\n", + "system = bb.add_register_from_dtype(\"system\", QBit())\n", + "\n", + "for ix in range(len(ctrls)):\n", + " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", + "\n", + "[ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", + "[ancs[0], ctrls[2]], ancs[1] = bb.add(Toffoli(), ctrl=[ancs[0], ctrls[2]], target=ancs[1])\n", + "[ancs[1], system] = bb.add(CZPowGate(exponent=0.0), q=[ancs[1], system])\n" + ] + }, + { + "cell_type": "markdown", + "id": "a64e7a0c", + "metadata": {}, + "source": [ + "Now if we want to view the SELECT circuit so far we can run `join` all of our qubits together and draw the musical score diagram" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "b60a21a8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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qFBBlStX1qxZs+5oY9OmTbJYLPriiy9sVvvgwYO1cOFCSdKKFStUtWpVVa9eXRUrVtSwYcOs38BGRETolVdesdl6M8MRZ7wf5JJyPz8/BQQEyMfHR0lJSQoJCdGNGzf0ww8/6PPPP9fcuXM1fPhw6/I5c+a03l8KwHYSExPVt29fJSUlacGCBWrWrFmayzdr1kxfffWVkpKS1K9fPyUmJmZRpbaxfv16Pfnkk/r5558lSUlJSUpISFBSUpIk6ccff1S9evX0/fffO7JMpOPnn3/W448/ru+++06SlJycnGo77tu3T82bN9eyZcscWSbScfz4cdWqVUtr1qxRcnKydTum7Fd+//13dejQQZ988omDK4WnsufxKme8XYtLh+6UHeztVq1apdatW0uSunbtqqNHj2rPnj06ePCgIiIiNGHCBE2dOjXVe2bNmqXAwMC7BvIHcebMGa1du1adOnWSdPNAc/fu3dafDRs2aOXKlZKkVq1aadeuXTpy5IhN1p1ZWRm8bXEP97fffqsDBw5o/vz5ql69ulq2bKn33ntP4eHhunHjhh2qBpAiMjJShw4dUmhoqEJDQzP0nlatWik0NFSHDh1SVFSUnSu0nUuXLumZZ5655/97pJsh/MaNG2rdujWDxjmphIQEtWrVStevX7eG7NulbONnn33WZo+mhG0ZY9ShQwf9/fff6X55179/f24bgMPZ43iV4O06nCp0b9++XQ0aNFC1atVUtWpVjRw5UmfPnlWnTp1UvXp17d69W++++66eeeYZBQUFqXLlyjp37twd7axcuVJPP/20jhw5opUrV2r69Ony9/eXdPOs+Icffqj33nvPuvyVK1e0Zs0azZ8/XwcOHNDRo0et87p27apevXopMDBQZcuWVbt27XTjxg3FxcUpICBAp06dsi779ttva+jQoZKk2bNn65lnnrE+Gzt37tzy8rr5646Li1N8fHyq52Z37NhRM2fOtOFvM3OyInjbatC07du3q0qVKipSpIh1WlBQkP755x/t37/fVuUCuIuNGzdKkrp06XJf73vhhRckSRs2bLB5TfYya9YsxcXF3TNwp0hOTtaVK1c0f/78LKoM92P58uU6d+7cPQN3CmOMkpOT7/iSHs7hxx9/1K5duzJ0tYyPj48mTZpk/6KANNjreJXg7Rqc5jndly5dUtu2bbV06VI1bNjQetAy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mjWVPXt2lS5dWnPnzk235l9//VUNGzZUjhw5VKxYMY0fP/4Beg5kLVf7rMXFxalr166qUqWKfHx81LZt2zuWWb58uZo3b65ChQopT548qlevnr755ptUy9ytb+XLl09z3QD+H6EbAAAXduLECdWqVUtRUVH64IMPtHfvXq1fv15NmjRR3759NXjwYJ07d+6On65duypfvnx67rnndOnSJYWHh+vWsVWPHTumBQsWpDlPko4fP66QkBA1adJEu3fv1oABA9SjR487Dtpv9c8//+ipp55S8eLFtWvXLn3wwQd69913NX36dPv9ooBMcsXPWlJSknLmzKn+/furWbNmd13mu+++U/PmzbV27Vrt2rVLTZo0UWhoqH755ZdUy1WqVClVv77//vvM/DoBj8IjwwAAcGF9+vSRxWLRjh07Uo2AW6lSJXXr1k25cuWyjpKbYsGCBfriiy+0Zs0alSlTRteuXdOZM2fUokULJSUladq0adq2bZvGjRunHDly3HOeJE2bNk3/+te/9OGHH0qSKlSooO+//14TJ06856N+FixYoBs3bmj27NnKli2bKlWqpN27d+ujjz7SK6+8YqffFJA5rvhZ8/f319SpUyVJ27Zt05UrV+5YZtKkSalejxkzRqtWrdLXX3+tGjVqWKf7+PgoICDgvn9vAAjdAAC4rEuXLmn9+vUaPXr0XR85ky9fvjum7dq1Sz179tTYsWOtB+p+fn4aM2aM1q5dq9atWysxMVFRUVHy9fWVpDTnbd++/Y4zaEFBQRowYMA9696+fbuefPJJZcuWLdV7xo0bp8uXLyt//vz3+6sA7MpVP2sPIjk5WVevXlWBAgVSTT9y5IgeeeQR5ciRQ/Xq1dP777+vxx57zKbrBtwVl5cDAOCijh49KmNMhu+t/PPPP/X000/rmWee0eDBg63T4+LiNHz4cH388cdq3LixnnjiCTVr1kw7duxIc5508x7XIkWKpFpPkSJF9M8//+j69et3reNe70mZBzgbV/2sPYgJEyYoJiZGHTt2tE6rW7eu5s6dq/Xr12vq1Kk6fvy4GjZsqKtXr9psvYA7I3QDAOCibr33Mz0JCQlq3769ihQpohkzZqSad+3aNRUpUkTr16/Xo48+qldffVWzZ8/Wb7/9luY8wFN4ymftyy+/1MiRI7V48WIVLlzYOr1ly5bq0KGDqlatqqCgIK1du1ZXrlzR4sWLs6w2wJVxeTkAAC6qTJkyslgsOnToULrL9u/fX0eOHNHOnTuVI0eOVPMKFCigvn37pppWqlQplSpVSpLSnBcQEKALFy6kmn/hwgXlyZNHOXPmvGst93pPyjzA2bjqZ+1+LFy4UD169NCSJUvuOehainz58qls2bI6evRoptcLeALOdAMA4KIKFCigoKAghYeHKzY29o75KYMmTZ8+XbNnz9ayZcv06KOPptnm3LlzVaJEiQzPq1evniIjI1NN27Bhg+rVq3fPddSrV0/fffedEhISUr2nXLly3M8Np+Sqn7WM+uqrr/Tyyy/rq6++UkhISLrLx8TE6NixY3r44YczvW7AExC6AQBwYeHh4UpKSlKdOnW0bNkyHTlyRAcPHtTkyZNVr149bdu2Tf369dPw4cNVsmRJnT9/PtVPdHR0ptb/6quv6vfff9eQIUN06NAhTZkyRYsXL9brr79uXebTTz9VYGCg9fVzzz2nbNmyqXv37tq/f78WLVqkjz/+WAMHDsxULYA9ueJnTZIOHDig3bt369KlS4qOjtbu3bu1e/du6/wvv/xSL774oj788EPVrVv3rvUOHjxYW7Zs0YkTJ/TDDz/o6aeflre3t5599tlM9QnwGAYeISYmxkgykkxMTIyjy7ELT+gj4Co84fPoTH08e/as6du3rylevLjJli2bKVq0qGndurXZtGmT6dq1q7XOu/289NJLmV7/pk2bTPXq1U22bNlMyZIlzZw5c1LNHzFihClevHiqaXv27DENGjQw2bNnN0WLFjVjx47NdB0Pypm2JR5cVmxHV/ysFS9e/K71pGjUqFG69Xbq1Mk8/PDD1j536tTJHD16NNP9uRtP+Dx6Qh+RmsWY+xgZAi4rNjbW+uzImJiYuz7uwtV5Qh8BV+EJn0dP6KOnYFu6B7aje/CE7egJfURqXF4OAAAAAICdELoBAAAAALATQjcAAAAAAHZC6AYAAAAAwE4I3QAAAAAA2AmhGwAAAAAAOyF0AwAAAABgJ4RuAAAAAADshNANAAAAAICdELoBAAAAALATQjcAAAAAAHZC6AYAAAAAwE4I3QAAAAAA2AmhGwAAAAAAOyF0AwAAAABgJ4RuAAAAAADshNANAADu8Mcff2j48OGqXLmyHn30UVWsWFFvvvmmjh496ujSAI8THR2tKVOm6IknnlCxYsVUqlQpde3aVT/88IOMMY4uD0A6XDp0T5o0SefPn7dL23/++acqVaokSbpx44aGDh2q0qVLq0KFCqpcubJmzZplXfbEiRPy9vZW9erVVb16dZUvX17//e9/rfOHDx+uBQsWSJI2b96s9evXp1qXMUYNGzbUH3/8IUkaPHiwvvzyS7v0CwCAtBhjNHLkSP3rX//SmDFjtH//fp05c0YHDx7UhAkTVKZMGQ0ePFhJSUmOLhXwCKtWrdIjjzyi1157TTt27NDp06f1+++/a8GCBfr3v/+tp556SleuXHF0mXAT5Cv78HHYmm1g0qRJaty4sQICAmze9qpVq9S6dWtJUteuXRUfH689e/bI399fJ06cUMuWLXXjxg317t1bkpQ7d27t3r1b0s1vI8uVK6enn35alSpV0qhRo6ztbt68WVeuXFGLFi2s05YsWaKyZcuqePHikqQhQ4aoQYMG6tSpk7y9vW3eNwAA7uU///mPRo8eLUl3BOuU1x999JHi4uL06aefZnl9gCf5+uuv9fTTT0vSHWe0ExMTJUmbNm3SU089pc2bN8vPzy/La4R7IV/ZiXGAa9eumY4dO5oKFSqYqlWrmubNm5uQkBCzYMEC6zLffPONqVOnjjHGmBkzZpgKFSqYatWqmcqVK5sff/zRjBw50vj6+pqyZcuaatWqmV9++cXcuHHDDB061Dz++OOmWrVqpkOHDubSpUvGGGNeeukl07NnTxMYGGhKlChhXn75ZfPTTz+ZRo0amX/961/m9ddfT1VjcHCw+emnn8xvv/1mcubMaf76669U89esWWMefvhhY4wxx48fN3nz5rXOO3PmjClcuLA5efKkdd0TJ040v/zyiylSpIgpWLCgqVatmhk5cqQxxpimTZuajRs3pmq/RYsWZu3atTb4bd8UExNjJBlJJiYmxmbtOhNP6CPgKjzh8+iOfTx27JixWCzWfqX3s2fPHkeXbBPuuC09kbttx4SEBPPII49k6DNpsVhMeHi4o0u2CXfbjndjjz6Sr7I+X90Ph5zpXr9+va5cuaIDBw5Iki5duqRdu3ZpxIgReu655yRJ4eHheu211yRJgwYN0qFDh/Twww8rISFB8fHxqlu3rmbPnq1FixapevXqkqQxY8bI399fO3bskCS99957eueddxQeHi5J2rt3rzZt2iQvLy9VrFhRly9f1oYNG3Tj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3bvLGOPosgAAAIAHQugG4DSuXbumrl27qnfv3mrSpIlmzZqlHTt2aNq0aY4uDQAAAHgghG4ATuOtt96SMUZjx46VJJUoUUITJkzQkCFDdOLECccWBwAAADwAQjcAp7BlyxaFh4drzpw58vPzs07v1auX6tevz2XmAAAAcEmMXg7AKTRq1EiJiYl3nffNN99kcTUAAACAbXCmGwAAAAAAOyF0AwAAAABgJ4RuAAAAAADshNANAAAAAICdELrdUHx8vH7//XdHlwEAAADYzJEjR+456CrgzAjdbiY+Pl4dOnRQqVKltG3bNkeXAwAAAGTa2rVrVbZsWb344osEb7gcQrcbSQncERERkqTr1687uCIAAAAg865duyZJWrhwIcEbLofQ7SZSAve3336rqVOnOrocAAAAwOZmzJihxYsXE7zhUnwcXQAy79bAvXLlSlWoUMHRJQEAAAA298wzzyhfvnzq1KmTJGnevHny8SHSwLlxptvF3R64W7Ro4eiSAAAAALt55plntGjRIs54w2XwtZALu1fg9vX1lSS1a9dO2bJlsy6f8i1g8eLF73tdTz/9tGbMmGGDqgEAAOAJOnXqpMjIyPt+392OWePj4+Xl5SVvb29J/x+8OeMNV8BfpotK6wz3I488ohUrVujQoUM2WdemTZu0cuVKQjcAAAAybMWKFWrZsqXq1atnk/aqVaum3LlzW18TvOEq+Kt0QRm5pLxt27Y2W58xRj///LPN2gMAAIBnCAoKUp8+fezWPsEbroB7ul0M93DDXcXGxmry5MkKDAxUQECAsmXLpoCAAAUGBmry5MnWR4UAAADcinu84ewI3S6EwA13tWbNGpUuXVphYWGKiopSXFycHn30UcXFxSkqKkphYWEqVaqU1qxZ4+hSAQCAEyJ4w5kRul1ERgJ348aNZbFYZLFYtHv37gy1u3nzZut7bHlJOpBR06dPV+vWrXXx4kX16NFDe/bs0YEDB7R8+XIdPHhQv/76q3r27KmLFy+qdevWmj59uqNLRgbcerBz+PBhGWMcWA0AwJnY65iV4A1nReh2Afdzhrtnz546d+6cKleuLEnq37+/atWqpezZs6t69ep3LF+/fn2dO3dOHTt2tFf5wD1FRUWpT58+8vf31/r16zVjxgxVrVpVH330kWrUqKGPP/5YVapU0fTp07V+/Xr5+fmpT58+2rhx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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ctrl = bb.join(ctrls)\n", + "anc = bb.join(ancs)\n", + "cbloq = bb.finalize(ctrl=ctrl, anc=anc, system=system)\n", + "\n", + "msd = get_musical_score_data(cbloq)\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "id": "c7ea2c53", + "metadata": {}, + "source": [ + "The above bloq diagram shows the first controlled rotation applied to our system conditioned on all three control registers being in the 0 state. If we wanted to proceed with our additionally controlled rotations, we could do so naively by uncomputing the ancillas and undoing the $X$ operations on `ctrl`. After this reset, we could flip the two leading `ctrl` qubits and repeat the procedure to apply a controlled rotation if `ctrl` is in `001` or 1. The key insight of unary iteration is that this resetting leads to a lot of wasted computation, and by using these intermediately computed values we can save a lot of T gates. \n", + "\n", + "The next controlled operation we need to do for SELECT is $|001\\rangle\\langle001| \\otimes U_1$. By not uncomputing our work, the ancillas currently have information we can take advantage of. The first ancilla `ancs[0]` is 1 if the first two qubits of `ctrl` are 0 and is 0 otherwise. This information is useful if we want to SELECT on `000` (what we just did) or `001` (what we want to do now). Since `ancs[1]` stores `ancs[0] & ~ctrl[2]` we can simply flip \n", + "\n", + "Now all we have to do is uncompute the last ancilla bit and compute our new information. We use this bit of information and only uncompute the last bit stored in `ancs[1]`, which is 1 if (`~ctrls[0]` & `~ctrls[1]`) & `~ctrls[2]`. Uncomputing the last Toffoli between `ctrls[2]` and `ancs[0]` leaves `ancs[1]` in the $|0\\rangle$ state. Now we put the logical value `ancs[0] & ctrls[2]` in `ancs[1]`, which works to be `~ctrls[0] & ~ctrls[1] & ctrls[2]`, or `1` if `ctrls = 001` and `0` otherwise. This is done in qualtran in the following code block." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "cde42d80", + "metadata": {}, + "outputs": [], + "source": [ + "[ctrls[2], ancs[0]], ancs[1] = bb.add(Toffoli(), ctrl=[ctrls[2], ancs[0]], target=ancs[1])\n", + "ctrls[2] = bb.add(XGate(), q=ctrls[2])\n", + "[ctrls[2], ancs[0]], ancs[1] = bb.add(Toffoli(), ctrl=[ctrls[2], ancs[0]], target=ancs[1])\n", + "[ancs[1], system] = bb.add(CZPowGate(exponent=1./ 8.),q=[ancs[1], system])" + ] + }, + { + "cell_type": "markdown", + "id": "b1526953", + "metadata": {}, + "source": [ + "Now viewing the circuit diagram we see that we saved ourselves 2 Toffolis, the 1 that would have been used to uncompute `ancs[0]` and then recompute it. To move forward with the SELECT circuit, we would need to query `010`, which would require uncomputing `ancs[0]`, flipping `ctrls[1]`, and then storing `~ctrls[0] & ctrls[1]` into `ancs[0]`. Then we would be able to query `010` and `011` with this value of `ancs[0]` before uncomputing it and moving to `100` and so on. We see that by reusing information we save 2 Toffoli gates " ] }, { @@ -593,7 +694,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.10.14" } }, "nbformat": 4, From 579050f87e15cde38ff6bdd88903e3f70a61bb55 Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Thu, 25 Jul 2024 17:19:18 -0400 Subject: [PATCH 03/13] switched to simpler example --- .../bloqs/multiplexers/unary_iteration.ipynb | 221 ++++++++++++++---- 1 file changed, 179 insertions(+), 42 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 0d4fe1135f..436f1a831b 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -35,7 +35,7 @@ "id": "8b7c37c9", "metadata": {}, "source": [ - "The `SELECT` operation, defined by $$ SELECT \\left( | i \\rangle \\otimes | \\psi \\rangle \\right) = |i \\rangle \\otimes U_i | \\psi \\rangle $$ is a fundamental primitive in quantum computing. In recent years techniques such as Quantum Singular Value Transformations (QSVT) have brought about a unifying way to construct virtually all known quantum algorithms. Qualtran has a few different techniques for implementing these oracles; this article aims to explain how the basic construction known as Unary Iteration is implemented. Towards the end variants such as SELECT-SWAP or QROAM, as well as pointers to specific implementations for physical systems such as chemical systems or Hubbard Models are mentioned. " + "The `SELECT` operation, defined by $$ SELECT \\left( | i \\rangle \\otimes | \\psi \\rangle \\right) = |i \\rangle \\otimes U_i | \\psi \\rangle $$ is a fundamental primitive in quantum computing. In recent years techniques such as Quantum Singular Value Transformations (QSVT) have brought about a unifying way to construct virtually all known quantum algorithms. Qualtran has a few different techniques for implementing these oracles; this article aims to explain how the basic construction underlying a few of the implementations, known as Unary Iteration, is done. Towards the end, variants such as SELECT-SWAP or QROAM, as well as pointers to specific implementations for physical systems such as chemical systems or Hubbard Models are mentioned. " ] }, { @@ -51,61 +51,94 @@ "id": "347de8f3", "metadata": {}, "source": [ - "Throughout the following discussion we will use the universal gate set of Clifford + T gates. We also assume that the user has a control register `ctrl` that contains the state to be \"selected on\" and a system register `sys` that the target unitaries are applied to. We first will go through a very simple SELECT Circuit in which one has a `ctrl` register of 3 qubits, a system register of 1 qubit, and the target unitaries to be applied are $U_0, U_1, \\ldots, U_7$. In symbols, $SELECT = \\sum_{i = 0}^7 |i\\rangle\\langle i | \\otimes U_i$. A typical assumption made when constructing a SELECT circuit is that we have access to a single qubit controlled version of the unitaries, i.e. $|1 \\rangle \\langle 1| \\otimes U_i$, where the $|1\\rangle \\langle 1|$ acts on one ancilla qubit that is not in the `ctrl` register. \n", - "\n", - "This constraint makes our job now fairly clear: we have to come up with a way of flipping an ancilla qubit, say from a register of ancilla qubits `a[n]`, if the `ctrl` register is in the state $|i\\rangle$ and applying the controlled $U_i$'s based on `a[n]`. We will be able to do this with just Toffolis and bit flips. First we will walk through the circuit that applies the first three controlled unitaries, as that is enough to get the big picture. \n", - "\n", - "To apply the first unitary we need to have an ancilla flipped to 1 if the `ctrl` qubits are all 0. This is done with Toffoli's and bit flips to implement AND" + "Throughout the following discussion we will use the universal gate set of Clifford + T gates, with the goal of minimizing the number of T gates (and therefore Toffoli gates). We also assume that the user has a control register `ctrl` that contains the state to be \"selected on\" and a system register `sys` that the target unitaries are applied to. We will be very pedagogical and start off with a two qubit `ctrl` register (a 1 qubit `ctrl` is just a controlled version of your bloq), show how to add in additional register, and lastly explain how to move to an arbitrary `ctrl` register using segment trees. Throughout we will demonstrate how to build these bloqs from scratch using Qualtran, so lets import the necessary code now." ] }, { "cell_type": "code", - "execution_count": 44, - "id": "afdeeb4e", + "execution_count": 8, + "id": "756a61d0", "metadata": {}, "outputs": [], "source": [ "from qualtran import BloqBuilder, QUInt, QAny, QBit\n", "from qualtran.bloqs.basic_gates.rotation import CZPowGate\n", + "from qualtran.bloqs.basic_gates.cnot import CNOT\n", "from qualtran.bloqs.basic_gates.toffoli import Toffoli\n", "from qualtran.bloqs.basic_gates.x_basis import XGate\n", "from qualtran.drawing.musical_score import draw_musical_score, get_musical_score_data\n", - "from qualtran.drawing import get_musical_score_data, draw_musical_score\n", - "\n", + "from qualtran.drawing import get_musical_score_data, draw_musical_score" + ] + }, + { + "cell_type": "markdown", + "id": "ed1cce7d", + "metadata": {}, + "source": [ + "As a warmup we will first demonstrate how to do unary iteration with only 2 `ctrl` qubits, meaning we have possibly four nontrivial unitaries $U_0, \\ldots, U_3$ that we would like to perform on `sys` based on the state of `ctrl`. Given that we only have access to single qubit controlled unitaries, we will have to iterate through through these unitaries and determine whether or not the `ctrl` register is in the proper state in a single ancilla qubit, which we call `anc`. We can do this pretty straightforwardly using just Toffoli and X gates. The first half is to flip the `ctrl` qubits (0 -> 1 and 1 -> 0) using X, store the Toffoli of these two into `anc` so that `anc = ~ctrl[0] * ~ctrl[1]`, meaning `anc = 1` if and only if both `ctrl` qubits start out in the 0 state. After this we do our controlled $U_0$, which we will use a controlled Z rotation with the index as the rotation angle for demonstration purposes, and then uncompute. The Qualtran code for this is" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "baaa3142", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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mUOHDjmGXTjNyZMnTUxMjCkuLjYfffSRadGixUXLOnbsmJHkaGPGjBnm/vvvN8YYM3r0aDNu3DjHtAMHDjRt2rQxeXl5prCw0LRr184sWLDAGGPM008/7Zi2oKDAREdHm927dxtjjOncubP55z//WeZn3bJli4mMjDR79+51DNuzZ4+56qqrLvk3ys3N9cjr0KFDRpJJS0u7ZH0VNWnSJCPJTJ482SntAQAA+IPJkycbSWbSpElOaS8tLc2xT+yp/czykA0unw2szmeP2K5fv16NGjVS+/btJUkBAQGKjIwsc9pu3bopKiqqzHErVqzQXXfd5fg15FJCQkIknT/V4MUXX5QkPfTQQ0pISNDkyZNlt9slSX/+858VGhoqSWrTpo1++uknSdKIESPUpk0bPfvss/r73/+uNm3aqH79+pKkffv2lVnjvn371KtXL6Wmpqpu3bqO4dHR0frtt99UUFCgmjVrlllveHj4ZT+TFUyYMEFff/21JkyYoDFjxjj+PwAAAKBs+fn5mjBhgnr27On0I7VlndbrLsaYMoeTDS6fDazO724eVZZLBbxFixapd+/ekqSWLVtq586d+u2330pNs379ejVt2lS1a9dWVlaWNm3apKFDh6pBgwbq0aOHfv31V61YscIx/YWdyW63q7CwUJJ03XXX6c4779RHH32kGTNm6NFHH3VMFxoaqoKCglLLPXDggOLj4zV+/Hjde++9pcYVFBTIbrcrODi4cn8MC5o5c6aWLl2q5ORkn11RAQAAnKlmzZpKTk7W0qVLNWvWLE+X41XIBtbks0ds27Vrp507d+qLL75Q+/btVVxcrBMnTqh27drKycmpUBtnz57V+vXr9d5770mSbrzxRiUmJurhhx/W+++/r9DQUO3evVtjx4513Hlszpw5GjNmjKZMmeJo56233tKcOXPUo0ePyy5z5MiRuvfeexUeHq74+HjH8BYtWmj79u2OX5kOHjyouLg4jR07VgMHDryonW3btqlZs2YKCCj/t4vc3NwK/R2cLTc312m/5M2cOVPDhw9XcnKy3njjjQr9egYAAODvbDab3njjDUnSsGHDJEkPP/ywU9o+dOiQ150ZSDa4fDawOp8NtldeeaUWLVqkMWPG6NSpUwoICNDkyZP12GOPaejQoQoNDdW8efMu2UZmZqbuuOMOBQUFOYa99957mjBhgpo3b66AgADt2rVL6enpSkhIUEFBgebPn6/PP/+8VDv33XefHn/8cR0+fPiydd9222264oorNGzYsFIh7Z577tF7772nIUOGSJImTpyoX375RW+88YbjS2nkyJH6y1/+IklauXKl7rnnnksuq+Qid3cr7xSRyiLUAgAAVJ2rwm1YWJjH9jPLQza4fDawPE9f5OvNhg0bZv7+97+XO76oqMg88cQTJjY21vz2229OWea+fftMdHS0OXny5EXLatWqVamLwMtz5swZ07x5c3P06FGn1ORsp06dqvbNo1JTU40kk5ycbIqLi51YHQAAgH8pLi42ycnJRpKZOXNmldspuXnUqVOnnFid9yAbeDefPWLrDKmpqZccHxAQoJdeeslpy5s4caLmzp2rKVOmqFatWhcta+bMmdq9e3epC8HLsmvXLk2ZMkVXX32102rzJhypBQAAcB5XnpbsS8gG3s1mjJPOCwUqKDc3V7Vq1VJaWpruv//+Ss1LqAUAAHANY4xGjhyp6dOna+bMmZUOtx999JH69u2rU6dOed01tvB9HLGFZRBqAQAAXIcjt7Aygi0sgVALAADgeoRbWBXBFl6PUAsAAOA+hFtYEcEWXo1QCwAA4H6EW1gNN4+C2+Xn5ysiIkKFhYWOh0QHBQXpn//8p+Li4hzTEWoBAAA861I3lMrIyFBiYqLOnTsnSSouLlZgYKBOnDihkJAQT5UMP8URW7hdSEiIMjMztXnzZsewsWPHat26dY5gS6gFAADwvEsduV23bp2CgoL02muvOaZv0aIFoRYeQbCFR9x+++26/fbbHe8nTZrk+DehFgAAwHtcKtyGhYVp+PDhHqsNKEGwhVcpCbXDhw8n1AIAAHiJknB77tw5R7gFvAnX2MIrXHvttbrmmmu0adMmSeLB3gAAAF4oNzdXtWrVknT+tOOjR4/qwIEDHq4KkAI8XQBQoiTUSuJILQAAgBe6cB/twn03wNM4FRleYezYsdq/f79efvllT5cCAACACnjiiSd03XXXeboMQBKnIsOL5OXlOU4/zs3NVVhYmIcrAgAAwIXYX4O34lRkAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAH7t0KFDSk5OVkxMjGrUqKF69eopMTFRGRkZeu6552Sz2cp9/e1vfyvV1qBBg7R79+4yl1PeuDVr1uiWW25RjRo1dMMNN2jevHmXrXnTpk1q3769atasqXr16umll16qwicHAMB3EGwBAH5r9+7datWqlTIzM/Xyyy9r8+bNWrlypTp16qSkpCQ9/vjjOnjw4EWvQYMGKSIiQg888ICOHTumGTNmyBjjaPenn37S/PnzLzlOknbt2qXu3burU6dOysrK0qhRozRkyBD961//KrfmkydPqkuXLqpfv76++eYbvfzyy3ruuec0a9Ys1/2hAADwcoGeLgAAAE8ZMWKEbDabNmzYoLCwMMfwpk2b6qGHHlJ4eLjCw8NLzTN//ny9//77WrZsmW688UadPn1a+/fv11133aWioiKlpqbqyy+/1NSpU1WzZs1yx0lSamqq/vCHP+jVV1+VJN10003697//rZSUFCUkJJRZ8/z583X27FnNnTtXwcHBatq0qbKysvTaa6/p4YcfdtFfCgAA70awBQD4pWPHjmnlypV64YUXSoXaEhERERcN++abbzR06FBNmTLFETxDQ0P1P//zP1q+fLl69uypwsJCZWZmKigoSJIuOW79+vWKj48vtYyEhASNGjWq3LrXr1+vO++8U8HBwaXmmTp1qo4fP64rr7yysn8KAAAsj1ORAQB+6ccff5QxRo0bN67Q9EeOHNGf//xn3X333Xr88ccdwwsKCjRx4kS98cYb6tixo2677TbFx8drw4YNlxwnnb++NyoqqtRyoqKidPLkSeXn55dZR3nzlIwDAMAfEWwBAH7pwuteL+fcuXO65557FBUVpbfffrvUuNOnTysqKkorV65U3bp1NXz4cM2dO1c7duy45DgAAOA8nIoMAPBLN954o2w2m7Kzsy877WOPPaadO3dq48aNqlmzZqlxkZGRSkpKKjXs+uuv1/XXXy9JlxwXHR2tw4cPlxp/+PBh1a5dWyEhIWXWUt48JeMAAPBHHLEFAPilyMhIJSQkaMaMGcrLy7to/IkTJyRJs2bN0ty5c7Vw4ULVrVv3km3OmzdPDRo0qPC4tm3bKiMjo9SwVatWqW3btuUuo23btlq7dq3OnTtXap5GjRpxfS0AwG8RbAEAfmvGjBkqKipSmzZttHDhQu3cuVPbtm3TtGnT1LZtW3355ZdKTk7WxIkTFRMTo0OHDpV65eTkVGv5w4cP188//6wnn3xS2dnZ+t///V99/PHHGj16tGOaN998U3FxcY73DzzwgIKDgzV48GBt2bJFH330kd544w399a9/rVYtAABYmc1U5iIjwIXy8vIcj9XIzc0t8y6lAOBsBw8e1AsvvKD09HQdPHhQ11xzjVq1aqXRo0fr3Xff1bx588qdd+DAgZccXxFr1qzR6NGjtXXrVtWtW1cTJkzQoEGDHOOfe+45zZs3T7t373YM27Rpk5KSkrRx40ZdffXVSk5O1tixY6tVBwBUBPtr8FYEW3gNvigBAAC8G/tr8FacigwAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAMqVl5enadOmKS4uTtHR0QoODlZ0dLTi4uI0bdo0nT592tMler2CggIVFBR4ugyvR18DAFSHzRhjPF0EIJ3fqQkPD5ck5ebmKiwszMMVAf5t2bJlGjJkiA4dOiRJuuKKKxQZGaljx44pJydHkhQdHa3Zs2ere/funizVqxhjtG7dOqWmpmrhwoXKz8+XJIWEhOjee+/Vww8/rHbt2slms3m4Uu9BXwOsg/01eCuO2AIALjJr1iz17NlTR48e1ZAhQ/T9999r69at+uSTT7Rt2zZt2rRJQ4cO1dGjR9WzZ0/NmjXL0yV7hZ07d6pFixa64447lJaW5gi1kpSfn68FCxbojjvuUIsWLbRz504PVuo96GsAAGcg2AIASsnMzNSIESMUFhamlStX6u2331aLFi302muvqWXLlnrjjTfUvHlzzZo1SytXrlRoaKhGjBih1atXe7p0j8rKylLr1q2VnZ0tSSosLLxompJh2dnZat26tbKystxZotehrwEAnIVgCwBwKCwsVFJSkoqKijR//nzFx8dfcvr4+Hh9+OGHKioqUnJycplhzh8cOXJE8fHxysvLq9DfoLCwUHl5eYqPj9eRI0fcUKH3oa8BAJyJYOsEX3/9tbp27SpJysnJ0bBhwxQTE6NGjRqpVatWWrJkiWPaNWvWKCQkRLGxsYqNjVXTpk319ttvO8YPGTJEn332mSRp8eLF+s9//lNqWadPn1br1q116tQpSdK9996rdevWufojAvATGRkZys7OVmJiohITEys0T48ePZSYmKjs7GxlZma6uELvlJqaquPHj6uoqKjC8xQVFen48eOaOXOmCyvzXvQ1AL6KbOAZBFsnWLRokXr37i1jjLp166agoCDt2LFD27dv15w5c/TII49o+fLljukbNWqkrKwsZWVl6V//+pceffRRR2ecPXu2OnXqJKnszvvmm2+qV69eqlWrliTpmWee0VNPPeWmTwrA15Wc4jlgwIBKzde/f39J0qpVq5xek7c7e/aspk+fruLi4krPW1xcrGnTpuns2bMuqMy70dcA+CqygWcEeroAT3jwwQe1fft2nT17VvXq1dOcOXNUUFCg2NhYjRw5Uunp6crJydG0adPUrVs3SdL69ev1xBNP6NSpUzLGaPLkyerVq5ckaenSpVq1apUyMjK0Z88effbZZwoMPP+njY2N1fjx4zV58mRHWxc6efKkwsLCFBQUJEnq2LGjRo0apeDgYEe78+bN06OPPqohQ4Zo5syZ+vTTTx3zx8bG6ujRo9q2bZtuuummMj9vXl6eU/9+rnJhnVapGfA1u3btkiTVr19f1113nQ4cOHDRNFOnTtXUqVMd73//+9/r448/dszvb+vv8uXL9euvv1Z5/l9//VVLliwpcxvhy+hrgDVZdX/tUndv9rds4LOMHzpy5Ijj3y+++KIZNmyY2bVrl5Fk/vGPfxhjjFmxYoVp2LChMcaY3377zdSpU8esXbvWGGNMUVGR+e2334wxxuzYscO0a9fOGGPM1KlTTc+ePS9a3rfffmtq1qxpjDHms88+MzVr1jQ333yzuemmm0xwcLCZOXOmY9oOHTqYRYsWGWOMGThwoElJSXGM++WXX8xVV111Uft/+ctfzPTp08v9vJJ48eLFixcvXrx48fLbF9nA9/nlEdsFCxbo/fffV0FBgQoKCnT11VdLkmrWrKk+ffpIktq2bauffvpJ0vlfZBo1aqT27dtLkgICAhQZGSnp/041uJyQkBDHv0tON5Ckffv26fbbb1fr1q11yy23XLKNffv2KSoq6qLh0dHR2rdv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4ph2zZo1CgkJUWxsrGJjY9W0aVO9/fbbjvFDhgzRZ599JklavHix/vOf/5Ra1unTp9W6dWudOnVKknTvvfdq3bp1rv6IAIDLyMzMdITaynj55Zcd3/sAAOsjG3gOR2yradGiRerdu7eMMerWrZtatmypHTt2KDAwUFlZWerWrZuCgoLUrVs3SVKjRo2UlZUlSdq3b5+uv/569e3bV7Vq1Sp1k5HFixcrNjZWt912m2PYm2++qV69eqlWrVqSpGeeeUaPPfaY1q5d674PDAC4SEpKigIDAy95pLYsgYGBSklJUadOnVxUGQDAncgGnuOXR2zz8/N1//33q0mTJrr55pvVpUsX9ejRQwsWLHBM8+mnn+rWW2+VdP5Olk2aNFFsbKyaN2+ur776yjHd0qVL1atXL2VkZGjPnj167bXXFBh4/veC2NhYjR8/XpMnTy6zjpMnTyosLExBQUGSpI4dO2rx4sVavny5li5dqpdfflmxsbGOTj1z5kw98MADjvljY2N19OhRbdu2zbl/IABAhf38889atmxZpUOtdP605PT0dP38888uqAwAUBFkA9/gl0dsV65cqRMnTmjr1q2SpGPHjumbb77Rs88+6+gcM2bM0KOPPipJGjNmjLKzs/W73/1O586d05kzZyRJO3fuVO3atRUdHa333ntPrVq1UnBwcKlltW3bVmPGjHG83759u2JjY3X27Fn99NNPmj59umrWrFlqnm7duqlnz56KjY3VqFGjJEl79+5VTk6Orr/++ovaz8jI0E033VTmZ83Ly6viX8n9LqzVSnUD/oJ1tGyrV6+u1k2gjDHKyMhQVFSUE6uyNvoa4L2svH6GhYWVOdyfsoEv88tge/PNN2vbtm0aMWKEOnTooG7duulPf/qTRo0ape+++06RkZHasGGDPv74Y0lSXFycBgwYoMTERHXt2lUNGzaU9H+nGlxOSEiI49//fbrB7bffrtatW+uWW265ZBv79u0rc6cnOjpa+/btK3e+8PDwy9bnjdjBA7wb66hzPfzww3r44Yc9XYZXoq8B3stq62d5P0L6UzbwZX55KnJMTIy2bt2qu+66S19++aWaNWum48eP67HHHtP06dOVmpqqhx56SDVq1JAkLVy4UFOmTNG5c+fUrVs3paWlSTp/rntJ573lllv0zTff6Ny5c6WWtX79erVr167MOurWratb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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ "bb = BloqBuilder()\n", - "ctrl = bb.add_register_from_dtype(\"ctrl\", QAny(3))\n", + "ctrl = bb.add_register_from_dtype(\"ctrl\", QAny(2))\n", "ctrls = bb.split(ctrl)\n", - "anc = bb.add_register_from_dtype(\"anc\", QAny(2))\n", - "ancs = bb.split(anc)\n", - "system = bb.add_register_from_dtype(\"system\", QBit())\n", + "anc = bb.add_register_from_dtype(\"anc\", QBit())\n", + "sys = bb.add_register_from_dtype(\"sys\", QBit())\n", + "\n", + "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "\n", + "[anc, sys] = bb.add(CZPowGate(exponent=0.0), q=[anc, sys])\n", "\n", - "for ix in range(len(ctrls)):\n", - " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", "\n", - "[ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", - "[ancs[0], ctrls[2]], ancs[1] = bb.add(Toffoli(), ctrl=[ancs[0], ctrls[2]], target=ancs[1])\n", - "[ancs[1], system] = bb.add(CZPowGate(exponent=0.0), q=[ancs[1], system])\n" + "ctrl = bb.join(ctrls)\n", + "cbloq = bb.finalize(ctrl=ctrl, anc=anc, sys=sys)\n", + "\n", + "msd = get_musical_score_data(cbloq)\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.tight_layout()" ] }, { "cell_type": "markdown", - "id": "a64e7a0c", + "id": "d008f3ee", "metadata": {}, "source": [ - "Now if we want to view the SELECT circuit so far we can run `join` all of our qubits together and draw the musical score diagram" + "Now that we have the 0 state taken care of, we can repeat this process for the remaining states 1, 2, and 3. The insight is that the X patterns dictate which state is \"selected\" on." ] }, { "cell_type": "code", - "execution_count": 46, - "id": "b60a21a8", + "execution_count": 7, + "id": "b2f2af19", "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGvCAYAAABGu7ZlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABz7UlEQVR4nO3deZxOdf/H8fc1i2XGnmVK4rbve8RNlqFhxiDZWpQsCTFCVLqJbkKK1CB7ouxbYylmkKS4FdlDZJfCZIYZs3x/f3jM9TOWmWGua67t9Xw85pHrnHN9z+c7Z67TeV/nnO+xGGOMAAAAAACAzXk5ugAAAAAAANwVoRsAAAAAADshdAMAAAAAYCeEbgAAAAAA7ITQDQAAAACAnRC6AQAAAACwE0I3AAAAAAB2QugGAAAAAMBOCN0AAAAAANgJoRsAAAAAADshdAMAAAAAYCeEbgAAAAAA7ITQDQAAAACAnRC6AQAAAACwE0I3AAAAAAB2QugGAAAAAMBOCN0AAAAAANgJoRsAAAAAADshdAMAAAAAYCeEbgAAAAAA7ITQDQAAAACAnRC6AQAAAACwE0I3AAAAAAB2QugGAAAAAMBOCN0AAAAAANgJoRsAAAAAADshdAMAAAAAYCeEbgAAAAAA7ITQDQAAAACAnRC6AQAAAACwE0I3AAAAAAB2QugGAAAAAMBOCN0AAAAAANgJoRsAAAAAADshdAMAAAAAYCeEbgAAAAAA7ITQDQAAAACAnRC6AQAAAACwE0I3AAAAAAB2QugGAAAAAMBOCN0AAAAAANgJoRsAAAAAADshdAMAAAAAYCeEbgAAAAAA7ITQDQAAAACAnRC6AQAAAACwE0K3B9ixY4dmz57t6DJs6q+//tJHH32kv//+29GlAAAAAJkWHR2tjz/+WGfPnnV0KbAxQrcH6N+/v7p37653333X0aXYxF9//aXAwEANGjRIK1ascHQ5AAAAQKZt2LBBAwYMUOPGjQnebobQ7SEKFy6skSNHunzwTgnc58+fd3QpAAAAgM1FR0cTvN0ModtDtG7dWmPGjHHp4H1r4I6KinJ0OQAAAIDNrVu3TnFxcQRvN+Lj6AKQdd566y1J0ttvvy1JLhW+bw/clSpVcnRJAAAAgM2VKlVKmzZtUpMmTdS4cWNt3rxZjzzyiKPLQiYQut3QX3/9pWPHjllfX7161fpvVwzeaQXu33//XT/99JNN1lOmTBkVKFDAJm0BAADA/UVHR+vQoUM2aevIkSPWfxO83YvFGGMcXQRsq1q1avr1119TTRszZow1cEvS+++/r7ffflsjRoxw6uCdVuAuWbKkjh8/brN11axZU7t27bJZewAAAHBvTZs21aZNm2zW3iOPPKJjx44pR44ckqRjx46pSZMmypEjB8HbhRG63VCBAgXUtWtXvfzyy9ZplStXlsViSbWcswfv9C4pv3Tpks6cOWOTdc2YMUMLFy7Un3/+aZP2AAAA4P7KlCmjhg0b6vXXX7dJewEBASpUqFCqaQRv18fl5W7q4YcfVpUqVdJcxpkvNc/IPdwFChSw2eXgAQEBNmkHAAAAnqVQoULpHndnBpeauz5GL/dwb731ltONas6gaYDrio2N1eTJkxUYGKiAgABly5ZNAQEBCgwM1OTJk3Xt2jVHlwgAgMtJCd6Mau6aCN1wquBN4AZc15o1a1S6dGmFhYUpKipKcXFxevTRRxUXF6eoqCiFhYWpVKlSWrNmjaNLBQDA5RC8XRehG5KcI3hnNHA3btxYFotFFotFu3fvzlDbc+fOtb5nwIABtisagCRp+vTpat26tS5evKgePXpoz549OnDggJYvX66DBw/q119/Vc+ePXXx4kW1bt1a06dPd3TJmfbrr79q3LhxGjZsmD744AObjV6LrHXs2DF9+OGHGjZsmN5//30G1HRRZ8+e1SeffKJ33nlH//3vf7VlyxYxbBEcyV7HqwRvF2XgdvLnz2/Gjx//QO8dM2aMkWRGjBhh26LScfHiRVO1alVTuHBhs2/fvjSXbdSokenZs6c5d+6cSUhIMMYY88cff5jg4GCTM2dOU6hQITN48GDrPGOMuXbtmjl37pypV6+eCQsLu6PN0aNHm0KFCtm0T4CniIyMNN7e3iZ37txmw4YN1umDBg0ykszQoUOt0zZs2GBy5cplvL29Uy3rSn744QdTu3ZtI8l4e3sbX19f4+3tbSSZf//73+aXX35xdInIgIMHD5omTZoYScbLyyvVdqxataqJiopydInIgNOnT5s2bdoYLy8v63b08fExkkzJkiXNkiVLHF0i3Fzp0qXNkCFD7phuj+PVWx09etQUK1bMlClTxpw5c8amfYLtOf2Z7kmTJun8+fNpLlOiRIlU3yD9+eef1rOkN27c0NChQ1W6dGlVqFBBlStX1qxZs+5oY9OmTbJYLPriiy9sVvvgwYO1cOFCSdKKFStUtWpVVa9eXRUrVtSwYcOs38BGRETolVdesdl6M8MRZ7wf5JJyPz8/BQQEyMfHR0lJSQoJCdGNGzf0ww8/6PPPP9fcuXM1fPhw6/I5c+a03l8KwHYSExPVt29fJSUlacGCBWrWrFmayzdr1kxfffWVkpKS1K9fPyUmJmZRpbaxfv16Pfnkk/r5558lSUlJSUpISFBSUpIk6ccff1S9evX0/fffO7JMpOPnn3/W448/ru+++06SlJycnGo77tu3T82bN9eyZcscWSbScfz4cdWqVUtr1qxRcnKydTum7Fd+//13dejQQZ988omDK4WnsufxKme8XYtLh+6UHeztVq1apdatW0uSunbtqqNHj2rPnj06ePCgIiIiNGHCBE2dOjXVe2bNmqXAwMC7BvIHcebMGa1du1adOnWSdPNAc/fu3dafDRs2aOXKlZKkVq1aadeuXTpy5IhN1p1ZWRm8bXEP97fffqsDBw5o/vz5ql69ulq2bKn33ntP4eHhunHjhh2qBpAiMjJShw4dUmhoqEJDQzP0nlatWik0NFSHDh1SVFSUnSu0nUuXLumZZ5655/97pJsh/MaNG2rdujWDxjmphIQEtWrVStevX7eG7NulbONnn33WZo+mhG0ZY9ShQwf9/fff6X55179/f24bgMPZ43iV4O06nCp0b9++XQ0aNFC1atVUtWpVjRw5UmfPnlWnTp1UvXp17d69W++++66eeeYZBQUFqXLlyjp37twd7axcuVJPP/20jhw5opUrV2r69Ony9/eXdPOs+Icffqj33nvPuvyVK1e0Zs0azZ8/XwcOHNDRo0et87p27apevXopMDBQZcuWVbt27XTjxg3FxcUpICBAp06dsi779ttva+jQoZKk2bNn65lnnrE+Gzt37tzy8rr5646Li1N8fHyq52Z37NhRM2fOtOFvM3OyInjbatC07du3q0qVKipSpIh1WlBQkP755x/t37/fVuUCuIuNGzdKkrp06XJf73vhhRckSRs2bLB5TfYya9YsxcXF3TNwp0hOTtaVK1c0f/78LKoM92P58uU6d+7cPQN3CmOMkpOT7/iSHs7hxx9/1K5duzJ0tYyPj48mTZpk/6KANNjreJXg7Rqc5jndly5dUtu2bbV06VI1bNjQetAy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mjWVPXt2lS5dWnPnzk235l9//VUNGzZUjhw5VKxYMY0fP/4Beg5kLVf7rMXFxalr166qUqWKfHx81LZt2zuWWb58uZo3b65ChQopT548qlevnr755ptUy9ytb+XLl09z3QD+H6EbAAAXduLECdWqVUtRUVH64IMPtHfvXq1fv15NmjRR3759NXjwYJ07d+6On65duypfvnx67rnndOnSJYWHh+vWsVWPHTumBQsWpDlPko4fP66QkBA1adJEu3fv1oABA9SjR487Dtpv9c8//+ipp55S8eLFtWvXLn3wwQd69913NX36dPv9ooBMcsXPWlJSknLmzKn+/furWbNmd13mu+++U/PmzbV27Vrt2rVLTZo0UWhoqH755ZdUy1WqVClVv77//vvM/DoBj8IjwwAAcGF9+vSRxWLRjh07Uo2AW6lSJXXr1k25cuWyjpKbYsGCBfriiy+0Zs0alSlTRteuXdOZM2fUokULJSUladq0adq2bZvGjRunHDly3HOeJE2bNk3/+te/9OGHH0qSKlSooO+//14TJ06856N+FixYoBs3bmj27NnKli2bKlWqpN27d+ujjz7SK6+8YqffFJA5rvhZ8/f319SpUyVJ27Zt05UrV+5YZtKkSalejxkzRqtWrdLXX3+tGjVqWKf7+PgoICDgvn9vAAjdAAC4rEuXLmn9+vUaPXr0XR85ky9fvjum7dq1Sz179tTYsWOtB+p+fn4aM2aM1q5dq9atWysxMVFRUVHy9fWVpDTnbd++/Y4zaEFBQRowYMA9696+fbuefPJJZcuWLdV7xo0bp8uXLyt//vz3+6sA7MpVP2sPIjk5WVevXlWBAgVSTT9y5IgeeeQR5ciRQ/Xq1dP777+vxx57zKbrBtwVl5cDAOCijh49KmNMhu+t/PPPP/X000/rmWee0eDBg63T4+LiNHz4cH388cdq3LixnnjiCTVr1kw7duxIc5508x7XIkWKpFpPkSJF9M8//+j69et3reNe70mZBzgbV/2sPYgJEyYoJiZGHTt2tE6rW7eu5s6dq/Xr12vq1Kk6fvy4GjZsqKtXr9psvYA7I3QDAOCibr33Mz0JCQlq3769ihQpohkzZqSad+3aNRUpUkTr16/Xo48+qldffVWzZ8/Wb7/9luY8wFN4ymftyy+/1MiRI7V48WIVLlzYOr1ly5bq0KGDqlatqqCgIK1du1ZXrlzR4sWLs6w2wJVxeTkAAC6qTJkyslgsOnToULrL9u/fX0eOHNHOnTuVI0eOVPMKFCigvn37pppWqlQplSpVSpLSnBcQEKALFy6kmn/hwgXlyZNHOXPmvGst93pPyjzA2bjqZ+1+LFy4UD169NCSJUvuOehainz58qls2bI6evRoptcLeALOdAMA4KIKFCigoKAghYeHKzY29o75KYMmTZ8+XbNnz9ayZcv06KOPptnm3LlzVaJEiQzPq1evniIjI1NN27Bhg+rVq3fPddSrV0/fffedEhISUr2nXLly3M8Np+Sqn7WM+uqrr/Tyyy/rq6++UkhISLrLx8TE6NixY3r44YczvW7AExC6AQBwYeHh4UpKSlKdOnW0bNkyHTlyRAcPHtTkyZNVr149bdu2Tf369dPw4cNVsmRJnT9/PtVPdHR0ptb/6quv6vfff9eQIUN06NAhTZkyRYsXL9brr79uXebTTz9VYGCg9fVzzz2nbNmyqXv37tq/f78WLVqkjz/+WAMHDsxULYA9ueJnTZIOHDig3bt369KlS4qOjtbu3bu1e/du6/wvv/xSL774oj788EPVrVv3rvUOHjxYW7Zs0YkTJ/TDDz/o6aeflre3t5599tlM9QnwGAYeISYmxkgykkxMTIyjy7ELT+gj4Co84fPoTH08e/as6du3rylevLjJli2bKVq0qGndurXZtGmT6dq1q7XOu/289NJLmV7/pk2bTPXq1U22bNlMyZIlzZw5c1LNHzFihClevHiqaXv27DENGjQw2bNnN0WLFjVjx47NdB0Pypm2JR5cVmxHV/ysFS9e/K71pGjUqFG69Xbq1Mk8/PDD1j536tTJHD16NNP9uRtP+Dx6Qh+RmsWY+xgZAi4rNjbW+uzImJiYuz7uwtV5Qh8BV+EJn0dP6KOnYFu6B7aje/CE7egJfURqXF4OAAAAAICdELoBAAAAALATQjcAAAAAAHZC6AYAAAAAwE4I3QAAAAAA2AmhGwAAAAAAOyF0AwAAAABgJ4RuAAAAAADshNANAAAAAICdELoBAAAAALATQjcAAAAAAHZC6AYAAAAAwE4I3QAAAAAA2AmhGwAAAAAAOyF0AwAAAABgJ4RuAAAAAADshNANAADu8Mcff2j48OGqXLmyHn30UVWsWFFvvvmmjh496ujSAI8THR2tKVOm6IknnlCxYsVUqlQpde3aVT/88IOMMY4uD0A6XDp0T5o0SefPn7dL23/++acqVaokSbpx44aGDh2q0qVLq0KFCqpcubJmzZplXfbEiRPy9vZW9erVVb16dZUvX17//e9/rfOHDx+uBQsWSJI2b96s9evXp1qXMUYNGzbUH3/8IUkaPHiwvvzyS7v0CwCAtBhjNHLkSP3rX//SmDFjtH//fp05c0YHDx7UhAkTVKZMGQ0ePFhJSUmOLhXwCKtWrdIjjzyi1157TTt27NDp06f1+++/a8GCBfr3v/+tp556SleuXHF0mXAT5Cv78HHYmm1g0qRJaty4sQICAmze9qpVq9S6dWtJUteuXRUfH689e/bI399fJ06cUMuWLXXjxg317t1bkpQ7d27t3r1b0s1vI8uVK6enn35alSpV0qhRo6ztbt68WVeuXFGLFi2s05YsWaKyZcuqePHikqQhQ4aoQYMG6tSpk7y9vW3eNwAA7uU///mPRo8eLUl3BOuU1x999JHi4uL06aefZnl9gCf5+uuv9fTTT0vSHWe0ExMTJUmbNm3SU089pc2bN8vPzy/La4R7IV/ZiXGAa9eumY4dO5oKFSqYqlWrmubNm5uQkBCzYMEC6zLffPONqVOnjjHGmBkzZpgKFSqYatWqmcqVK5sff/zRjBw50vj6+pqyZcuaatWqmV9++cXcuHHDDB061Dz++OOmWrVqpkOHDubSpUvGGGNeeukl07NnTxMYGGhKlChhXn75ZfPTTz+ZRo0amX/961/m9ddfT1VjcHCw+emnn8xvv/1mcubMaf76669U89esWWMefvhhY4wxx48fN3nz5rXOO3PmjClcuLA5efKkdd0TJ040v/zyiylSpIgpWLCgqVatmhk5cqQxxpimTZuajRs3pmq/RYsWZu3atTb4bd8UExNjJBlJJiYmxmbtOhNP6CPgKjzh8+iOfTx27JixWCzWfqX3s2fPHkeXbBPuuC09kbttx4SEBPPII49k6DNpsVhMeHi4o0u2CXfbjndjjz6Sr7I+X90Ph5zpXr9+va5cuaIDBw5Iki5duqRdu3ZpxIgReu655yRJ4eHheu211yRJgwYN0qFDh/Twww8rISFB8fHxqlu3rmbPnq1FixapevXqkqQxY8bI399fO3bskCS99957eueddxQeHi5J2rt3rzZt2iQvLy9VrFhRly9f1oYNG3Tj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3bvLGOPosgAAAIAHQugG4DSuXbumrl27qnfv3mrSpIlmzZqlHTt2aNq0aY4uDQAAAHgghG4ATuOtt96SMUZjx46VJJUoUUITJkzQkCFDdOLECccWBwAAADwAQjcAp7BlyxaFh4drzpw58vPzs07v1auX6tevz2XmAAAAcEmMXg7AKTRq1EiJiYl3nffNN99kcTUAAACAbXCmGwAAAAAAOyF0AwAAAABgJ4RuAAAAAADshNANAAAAAICdELrdUHx8vH7//XdHlwEAAADYzJEjR+456CrgzAjdbiY+Pl4dOnRQqVKltG3bNkeXAwAAAGTa2rVrVbZsWb344osEb7gcQrcbSQncERERkqTr1687uCIAAAAg865duyZJWrhwIcEbLofQ7SZSAve3336rqVOnOrocAAAAwOZmzJihxYsXE7zhUnwcXQAy79bAvXLlSlWoUMHRJQEAAAA298wzzyhfvnzq1KmTJGnevHny8SHSwLlxptvF3R64W7Ro4eiSAAAAALt55plntGjRIs54w2XwtZALu1fg9vX1lSS1a9dO2bJlsy6f8i1g8eLF73tdTz/9tGbMmGGDqgEAAOAJOnXqpMjIyPt+392OWePj4+Xl5SVvb29J/x+8OeMNV8BfpotK6wz3I488ohUrVujQoUM2WdemTZu0cuVKQjcAAAAybMWKFWrZsqXq1atnk/aqVaum3LlzW18TvOEq+Kt0QRm5pLxt27Y2W58xRj///LPN2gMAAIBnCAoKUp8+fezWPsEbroB7ul0M93DDXcXGxmry5MkKDAxUQECAsmXLpoCAAAUGBmry5MnWR4UAAADcinu84ewI3S6EwA13tWbNGpUuXVphYWGKiopSXFycHn30UcXFxSkqKkphYWEqVaqU1qxZ4+hSAQCAEyJ4w5kRul1ERgJ348aNZbFYZLFYtHv37gy1u3nzZut7bHlJOpBR06dPV+vWrXXx4kX16NFDe/bs0YEDB7R8+XIdPHhQv/76q3r27KmLFy+qdevWmj59uqNLRgbcerBz+PBhGWMcWA0AwJnY65iV4A1nReh2Afdzhrtnz546d+6cKleuLEnq37+/atWqpezZs6t69ep3LF+/fn2dO3dOHTt2tFf5wD1FRUWpT58+8vf31/r16zVjxgxVrVpVH330kWrUqKGPP/5YVapU0fTp07V+/Xr5+fmpT58+2rhx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", + "image/png": "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cdvdy+k6Bm4iIiIiInInte9qXt0xdLsRAzcREREREamBwVs9DN1uwsBNRERERERqYvBWB0O3gwICAnD58mV4e3srU7t27Up94ToDNxERERERaUFlwTs/Px/t2rUrlW0MBgMWLlyoYsX6xxupOaioqAgff/wxCgoKAAB79uzBwoULcebMGYSEhDBwExERERGR5pR3c7WzZ88iNDQUo0ePRuvWrQEAvr6+GDx4MLy8vFSuWL94pttBXl5eGDp0KEaNGoVRo0ahR48eyjKz2Yxu3boxcBPOnDmDcePGoVmzZvD19UWjRo3Qq1cvpKWl4ZVXXoHBYKhwmj59eqltDRkyBMePHy/3eSpatn37drRt2xa+vr64/fbb8eGHH1ZZ8549e9C5c2f4+fmhUaNGePPNN+145UTVizPHOpG7qfm3au3atbj//vtRr149BAcH495778XmzZurrJl/q/RJzb727bffolOnTqhTpw78/f0RFhaGuXPnVlmzJ/a1G894d+/evdQZ7x49eij5ZujQoQzcDmLodpGSwP39998jMTGRgbsaO378ONq1a4f09HTMmTMHe/fuxaZNm9ClSxeMHTsWL7zwArKzs8tMQ4YMQa1atfDYY4/h4sWLWLBgAW68MOXo0aNYuXJlpcsA4NixY3jggQfQpUsXZGZm4tlnn8Xw4cMrPZi5fPkyunbtisaNG2PXrl2YM2cOXnnlFbz//vuuayginXPGWCdSi9p/q77++mvcf//9SElJwa5du9ClSxf06tULv/zyS4U182+VPqnd1wIDA/HMM8/g66+/RlZWFqZMmYIpU6ZU2m88ua9FRUUhMTERO3fuLBO8yYmEnCopKUkASJs2bcRkMgkAyc3NVbssUlGPHj2kQYMG5faDP//8s9zHrFixQkwmk2zatElERMxmsyQkJEjXrl0lLi5OJk2aJPfdd5989913lS4TEZk4caK0atWq1PYHDhwo3bp1q7Dm9957T2655RYpKChQ5k2aNElatGhh68snqjacMdaJ1KL236ry3HXXXTJ9+vQKl/NvlT5psa89/PDDMmjQoAqXe3pfy83NFQBiMpkkMjJSAEhSUpLaZXkUhm4nKwndNWrUEAAM3dXchQsXxGAwyGuvvWb1Y3766Sfx9/eXOXPmlFm2YcMGMZlMEh0dLYWFhVYt69y5s0yYMKHUusuWLZPg4OAK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vbQZWU8v+5TjQP/00m5a7mtaPS7SUpu5m6OZz1oGkQpu80cOMZvNqFGjBoDrdzWvjjff8ARmsxkffPAB1q1bh6+++goAUK9ePURERKBPnz546qmnVN+3WutrJW2WlJSEvXv34vz58wCA6Oho9O3bVxNtRp6DY9S+erTeZmQbPexTjgPPoId202pf0/JxkdbazBMxdLsIO69n0fL+ZG1E2u5rWq1Nq3WR/bS8T7Vam1br0jottxtrs51W6/IkLrl7ORERERERERExdBMRERERERG5DEM3ERERERERkYswdBMRERERERG5CEM3ERERERERkYswdBMRERERERG5CEM3ERERERERkYswdBMRERERERG5CEM3ERERERERkYswdBMRERERERG5CEM3ERERERERkYswdBMRERERERG5CEM3ERERERERkYswdBMRERERERG5CEM3ERERERERkYswdBMRERERERG5CEM3ERERERERkYswdBMRERERERG5CEM3ERERERERkYswdBMRERERERG5CEM3ERERERERkYswdBPpWEFBAZKSkpTf9+/fr2I1RHSznJwcfPzxx8rvp06dUrEaInVwHJC78LiItEoXofunn35Cjx49AFz/j3vkyJFo1qwZWrRogXbt2mH9+vXKutu3b4e/vz8iIyMRGRmJVq1aYcmSJcry4cOHY9u2bQCAxMREfP/996WeKy8vD+3bt8eVK1cAAI888gh27Njh6pdIZLPt27ejQYMGeOyxx5R599xzD3r27InLly+rWBkRAcCSJUtQv359jBkzRpkXFhaG5557DsXFxSpWRuQ+HAfkLjwu0j+PznyiAy+//LIsWrRIiouLJSoqSsaOHSvXrl0TEZFffvlFbr31VtmwYYOIiGzbtk3atGmjPPb3338XHx8fuXz5cpntPvnkkzJ37txS89544w2ZMWOG8vsvv/winTt3trnm3NxcASAAJDc31+bHk7ZobX8ePXpUfHx8xGg0KnWVTCaTSXr27Kl2iSKivXYjz6W1vpaUlFRmbJZMBoNBXnnlFbVL1FybkeO0tk85DjyX1tqNx0WO0Updesx81vJyVZi/evUqhgwZgr1798Lb2xshISHw8fHBY489prwDtWXLFvzrX//CDz/8gA8++AD//ve/4ePjA4vFgg8++AD33HMPACApKQmpqalIS0vDiRMnsG3b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", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -113,9 +146,48 @@ } ], "source": [ + "bb = BloqBuilder()\n", + "ctrl = bb.add_register_from_dtype(\"ctrl\", QAny(2))\n", + "ctrls = bb.split(ctrl)\n", + "anc = bb.add_register_from_dtype(\"anc\", QBit())\n", + "sys = bb.add_register_from_dtype(\"sys\", QBit())\n", + "\n", + "# SELECT on 0 = 00\n", + "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + "\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "[anc, sys] = bb.add(CZPowGate(exponent=0.0), q=[anc, sys])\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "\n", + "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + "\n", + "# SELECT on 1 = 01\n", + "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + "\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "[anc, sys] = bb.add(CZPowGate(exponent=1.0), q=[anc, sys])\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "\n", + "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + "\n", + "# SELECT on 2 = 10\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + "\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "[anc, sys] = bb.add(CZPowGate(exponent=2.0), q=[anc, sys])\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + "\n", + "# SELECT on 3 = 11\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "[anc, sys] = bb.add(CZPowGate(exponent=3.0), q=[anc, sys])\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "\n", "ctrl = bb.join(ctrls)\n", - "anc = bb.join(ancs)\n", - "cbloq = bb.finalize(ctrl=ctrl, anc=anc, system=system)\n", + "cbloq = bb.finalize(ctrl=ctrl, anc=anc, sys=sys)\n", "\n", "msd = get_musical_score_data(cbloq)\n", "fig, ax = draw_musical_score(msd)\n", @@ -124,35 +196,100 @@ }, { "cell_type": "markdown", - "id": "c7ea2c53", + "id": "ad85af61", "metadata": {}, "source": [ - "The above bloq diagram shows the first controlled rotation applied to our system conditioned on all three control registers being in the 0 state. If we wanted to proceed with our additionally controlled rotations, we could do so naively by uncomputing the ancillas and undoing the $X$ operations on `ctrl`. After this reset, we could flip the two leading `ctrl` qubits and repeat the procedure to apply a controlled rotation if `ctrl` is in `001` or 1. The key insight of unary iteration is that this resetting leads to a lot of wasted computation, and by using these intermediately computed values we can save a lot of T gates. \n", - "\n", - "The next controlled operation we need to do for SELECT is $|001\\rangle\\langle001| \\otimes U_1$. By not uncomputing our work, the ancillas currently have information we can take advantage of. The first ancilla `ancs[0]` is 1 if the first two qubits of `ctrl` are 0 and is 0 otherwise. This information is useful if we want to SELECT on `000` (what we just did) or `001` (what we want to do now). Since `ancs[1]` stores `ancs[0] & ~ctrl[2]` we can simply flip \n", - "\n", - "Now all we have to do is uncompute the last ancilla bit and compute our new information. We use this bit of information and only uncompute the last bit stored in `ancs[1]`, which is 1 if (`~ctrls[0]` & `~ctrls[1]`) & `~ctrls[2]`. Uncomputing the last Toffoli between `ctrls[2]` and `ancs[0]` leaves `ancs[1]` in the $|0\\rangle$ state. Now we put the logical value `ancs[0] & ctrls[2]` in `ancs[1]`, which works to be `~ctrls[0] & ~ctrls[1] & ctrls[2]`, or `1` if `ctrls = 001` and `0` otherwise. This is done in qualtran in the following code block." + "Now the above cirquit is correct (TODO: Should we add in testing?), but there is a lot of redundancy. For example, the two X gates done back to back on the `ctrls[0]` register can be cancelled. The second gate saving we could do is based on the identity that an X gate between two Toffoli's can be replaced with the same X gate and a CNot on the other control\n", + "$$\n", + "Toffoli \\cdot I \\otimes X \\otimes I \\cdot Toffoli = CNOT(1, 3) \\cdot I \\otimes X \\otimes I.\n", + "$$\n", + "Implementing these savings gives the final unary iteration bloq for 0,...,3 as" ] }, { "cell_type": "code", - "execution_count": 45, - "id": "cde42d80", + "execution_count": 12, + "id": "e9286106", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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2RPLli1DRkaGst57770HV1dX6PV61K5dG3/99RcAoH///li2bBlSU1Px3//+F7Vr10a5cuUAAHFxcVnWGBcXhzZt2mD+/PkoXbq0Mt/Lywvx8fFISUnJse4XVahQIfTt2xf379/HkSNHVH89IiIiIiIyvyNHjuD+/fvo06ePRU4pZ2ZTP7NZzd3L3d3dTS7buHEj3n33XQBAjRo1cP78ecTHxxutc+jQIVSrVg0eHh44duwYjh8/jt69e6N8+fJ455138M8//2DHjh3K+s7OzsrXer0e6enpAIBSpUrhX//6F9auXYs5c+bg448/VtZzdXXN9J9x/fp1NG7cGKNHj0b79u2NlqWkpECv18PJycnk9+bgYJ7/gg0bNqBXr17o0KEDunfvbpZtEhERERGRZXXv3h0dOnRAr169sGHDBrNs01yZI79mthelauiuX78+zp8/jwMHDgB4fMH9nTt34OHhgYSEhFxt49GjRzh06BACAwMBAJUrV0arVq3Qp08fJCcnAwAuXbqEESNGKHeiW7x4MYYPH47Lly/j0qVLuHTpEmbMmJHri/MHDx6M0NBQ3Lt3D40bN1bmV69eHX/++afy+MaNGwgKCsKIESOyDLpnzpyBr6+v2ZrclA0bNqBDhw54//33sXLlSjg6qn6pPhERERERqcDR0RErV67E+++/jw4dOpgteJvCzKZ+ZlM1DRYtWhQbN27EyJEjUb16ddSsWRO//PILBg0ahN69eyMgIMDoFvNZ2bNnD958800UKFBAmbd8+XJUqlQJfn5+qFy5Ml599VV8++23aNasGVJSUrBq1Sp07tzZaDvBwcH48ccfcevWrRzrrlu3LgoXLoz+/fsbnR7Rrl077Nq1S3k8ZswYXLlyBTNnzkRAQAACAgKwdOlSZfnOnTvRrl27HF/vRTBwExERERHZF0sGb2Y29TObTkRE1Vd4QR999BEaN25sckcYDAaMHDkSu3fvRmRkpMnrD/Li2rVrqFWrFs6dO2d0HYXBYEDt2rURERFhdB1AVh49eoRatWphz549KF68eJbrtG/fHvfv3zdqirxg4CYiIiIisl/p6eno0qULfvjhB6xduxZt27Z9ru00a9bsuTNHbthzZjMHqw/dljZmzBgsWbIEX375ZZanHxw5cgQPHz7Em2++me12/vzzT/z1119o2bKlyXVeJHQzcBMRERER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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "[ctrls[2], ancs[0]], ancs[1] = bb.add(Toffoli(), ctrl=[ctrls[2], ancs[0]], target=ancs[1])\n", - "ctrls[2] = bb.add(XGate(), q=ctrls[2])\n", - "[ctrls[2], ancs[0]], ancs[1] = bb.add(Toffoli(), ctrl=[ctrls[2], ancs[0]], target=ancs[1])\n", - "[ancs[1], system] = bb.add(CZPowGate(exponent=1./ 8.),q=[ancs[1], system])" + "bb = BloqBuilder()\n", + "ctrl = bb.add_register_from_dtype(\"ctrl\", QAny(2))\n", + "ctrls = bb.split(ctrl)\n", + "anc = bb.add_register_from_dtype(\"anc\", QBit())\n", + "sys = bb.add_register_from_dtype(\"sys\", QBit())\n", + "\n", + "# SELECT on 0 = 00\n", + "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + "\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "[anc, sys] = bb.add(CZPowGate(exponent=0.0), q=[anc, sys])\n", + "\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + "\n", + "# SELECT on 1 = 01\n", + "\n", + "ctrls[0], anc = bb.add(CNOT(), ctrl=ctrls[0], target=anc)\n", + "[anc, sys] = bb.add(CZPowGate(exponent=1.0), q=[anc, sys])\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "\n", + "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + "\n", + "# SELECT on 2 = 10\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + "\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "[anc, sys] = bb.add(CZPowGate(exponent=2.0), q=[anc, sys])\n", + "\n", + "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + "\n", + "# SELECT on 3 = 11\n", + "ctrls[0], anc = bb.add(CNOT(), ctrl=ctrls[0], target=anc)\n", + "[anc, sys] = bb.add(CZPowGate(exponent=3.0), q=[anc, sys])\n", + "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", + "\n", + "ctrl = bb.join(ctrls)\n", + "cbloq = bb.finalize(ctrl=ctrl, anc=anc, sys=sys)\n", + "\n", + "msd = get_musical_score_data(cbloq)\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.tight_layout()" ] }, { "cell_type": "markdown", - "id": "b1526953", + "id": "f0bf41d7", "metadata": {}, "source": [ - "Now viewing the circuit diagram we see that we saved ourselves 2 Toffolis, the 1 that would have been used to uncompute `ancs[0]` and then recompute it. To move forward with the SELECT circuit, we would need to query `010`, which would require uncomputing `ancs[0]`, flipping `ctrls[1]`, and then storing `~ctrls[0] & ctrls[1]` into `ancs[0]`. Then we would be able to query `010` and `011` with this value of `ancs[0]` before uncomputing it and moving to `100` and so on. We see that by reusing information we save 2 Toffoli gates " + "Now from these simplifications it is pretty clear that there are two groups of operations going on, the $U_0$ and $U_1$ half and the $U_2, U_3$ half. Since there are no more simplifications to make, we can now proceed to analyze what exactly the circuit is doing at each step, with the intent to generalize to larger control registers. The way we will go about this is by tracking the state of the ancilla qubit right before each CZ. We will do so using boolean algebra, if $x$ and $y$ are variables then $\\bar{x}$ denotes the logical NOT of $x$, $x \\oplus y$ the XOR operation, and $x \\otimes y$ the AND operation. We also use $c_0$ and $c_1$ to denote the state of the `ctrl` qubits 0 and 1 respectively.\n", + "\n", + "Before CZ**0.0, the state of the ancilla is just the output of the Toffoli, which is \n", + "$$|\\bar{c_0} \\otimes \\bar{c_1} \\rangle.$$ \n", + "\n", + "Now to get to the state before `CZ**1.0` we just have to do a CNOT with the control in the state $\\bar{c_0}$. This results in\n", + "$$ |\\bar{c_0} \\otimes \\bar{c_1} \\oplus \\bar{c_0} \\rangle = |\\bar{c_0} \\otimes (\\bar{c_1} \\oplus 1) \\rangle = |\\bar{c_0} \\otimes c_1 \\rangle.$$ \n", + "This is clearly only 1 if the control register is in 01 as we wanted.\n", + "\n", + "To get to the next `CZ` we have to perform two Toffoli gates. Instead of doing one after the other we can add into the ancilla the net result of both of them. As one Toffoli has the effect of adding in the logical multiplication of the two controls, the net effect of the two Toffoli's between `CZ**1.0` and `CZ**2.0` is to add in $\\bar{c_0} \\otimes c_1 \\oplus c_0 \\otimes \\bar{c_1}$. Adding this into the ancilla state from the previous expression gives us\n", + "$$ |\\bar{c_0} \\otimes c_1 \\oplus \\bar{c_0} \\otimes c_1 \\oplus c_0 \\otimes \\bar{c_1} \\rangle = |c_0 \\otimes \\bar{c_1} \\rangle $$\n", + "\n", + "By now it should be clear what the next state will be, the CNOT added into this last state gives us\n", + "$$ |c_0 \\otimes \\bar{c_1} \\oplus c_0 \\rangle = |c_0 \\otimes (\\bar{c_1} \\oplus 1) \\rangle = |c_0 \\otimes c_1\\rangle, $$\n", + "as it should. \n", + "\n", + "Now that we know the ins and outs of how the 4 unitary Unary Iteration works, lets introduce some abstraction so that we can extend it to more unitaries than just 4. The key tool we will use for this is a binary tree where the leaf nodes are the integers we are selecting on, but they should be thought of as intervals `[0, 1)`, `[1, 2)`, `[2, 3)`, `[3, 4)`. When we combine these leaf nodes into the next level, this node will store the union of the two intervals beneath it. So our second level (the one above the leafs) has two nodes `[0, 2)` and `[2, 4)`. The root node, which combines these two, has one interval `[0, 4)`. Now the unary iteration cirquit can be thought of as first descending this tree from the root node to the `[0, 1)` node, followed by then moving to it's neighboring node `[1, 2)`, and so on. Our goal is to capture how the circuit above actually implements these moves. " ] }, { From 34a04ae1764c133466ab15e5b923059c6b9c3457 Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Tue, 30 Jul 2024 11:00:38 -0400 Subject: [PATCH 04/13] tried using AND --- qualtran/bloqs/multiplexers/unary_iteration.ipynb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 436f1a831b..61443273ca 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "id": "756a61d0", "metadata": {}, "outputs": [], @@ -64,6 +64,7 @@ "from qualtran import BloqBuilder, QUInt, QAny, QBit\n", "from qualtran.bloqs.basic_gates.rotation import CZPowGate\n", "from qualtran.bloqs.basic_gates.cnot import CNOT\n", + "from qualtran.bloqs.mcmt.and_bloq import And\n", "from qualtran.bloqs.basic_gates.toffoli import Toffoli\n", "from qualtran.bloqs.basic_gates.x_basis import XGate\n", "from qualtran.drawing.musical_score import draw_musical_score, get_musical_score_data\n", @@ -80,15 +81,15 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "baaa3142", "metadata": {}, "outputs": [ { "data": { - "image/png": "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mUOHDjmGXTjNyZMnTUxMjCkuLjYfffSRadGixUXLOnbsmJHkaGPGjBnm/vvvN8YYM3r0aDNu3DjHtAMHDjRt2rQxeXl5prCw0LRr184sWLDAGGPM008/7Zi2oKDAREdHm927dxtjjOncubP55z//WeZn3bJli4mMjDR79+51DNuzZ4+56qqrLvk3ys3N9cjr0KFDRpJJS0u7ZH0VNWnSJCPJTJ482SntAQAA+IPJkycbSWbSpElOaS8tLc2xT+yp/czykA0unw2szmeP2K5fv16NGjVS+/btJUkBAQGKjIwsc9pu3bopKiqqzHErVqzQXXfd5fg15FJCQkIknT/V4MUXX5QkPfTQQ0pISNDkyZNlt9slSX/+858VGhoqSWrTpo1++uknSdKIESPUpk0bPfvss/r73/+uNm3aqH79+pKkffv2lVnjvn371KtXL6Wmpqpu3bqO4dHR0frtt99UUFCgmjVrlllveHj4ZT+TFUyYMEFff/21JkyYoDFjxjj+PwAAAKBs+fn5mjBhgnr27On0I7VlndbrLsaYMoeTDS6fDazO724eVZZLBbxFixapd+/ekqSWLVtq586d+u2330pNs379ejVt2lS1a9dWVlaWNm3apKFDh6pBgwbq0aOHfv31V61YscIx/YWdyW63q7CwUJJ03XXX6c4779RHH32kGTNm6NFHH3VMFxoaqoKCglLLPXDggOLj4zV+/Hjde++9pcYVFBTIbrcrODi4cn8MC5o5c6aWLl2q5ORkn11RAQAAnKlmzZpKTk7W0qVLNWvWLE+X41XIBtbks0ds27Vrp507d+qLL75Q+/btVVxcrBMnTqh27drKycmpUBtnz57V+vXr9d5770mSbrzxRiUmJurhhx/W+++/r9DQUO3evVtjx4513Hlszpw5GjNmjKZMmeJo56233tKcOXPUo0ePyy5z5MiRuvfeexUeHq74+HjH8BYtWmj79u2OX5kOHjyouLg4jR07VgMHDryonW3btqlZs2YKCCj/t4vc3NwK/R2cLTc312m/5M2cOVPDhw9XcnKy3njjjQr9egYAAODvbDab3njjDUnSsGHDJEkPP/ywU9o+dOiQ150ZSDa4fDawOp8NtldeeaUWLVqkMWPG6NSpUwoICNDkyZP12GOPaejQoQoNDdW8efMu2UZmZqbuuOMOBQUFOYa99957mjBhgpo3b66AgADt2rVL6enpSkhIUEFBgebPn6/PP/+8VDv33XefHn/8cR0+fPiydd9222264oorNGzYsFIh7Z577tF7772nIUOGSJImTpyoX375RW+88YbjS2nkyJH6y1/+IklauXKl7rnnnksuq+Qid3cr7xSRyiLUAgAAVJ2rwm1YWJjH9jPLQza4fDawPE9f5OvNhg0bZv7+97+XO76oqMg88cQTJjY21vz2229OWea+fftMdHS0OXny5EXLatWqVamLwMtz5swZ07x5c3P06FGn1ORsp06dqvbNo1JTU40kk5ycbIqLi51YHQAAgH8pLi42ycnJRpKZOXNmldspuXnUqVOnnFid9yAbeDefPWLrDKmpqZccHxAQoJdeeslpy5s4caLmzp2rKVOmqFatWhcta+bMmdq9e3epC8HLsmvXLk2ZMkVXX32102rzJhypBQAAcB5XnpbsS8gG3s1mjJPOCwUqKDc3V7Vq1VJaWpruv//+Ss1LqAUAAHANY4xGjhyp6dOna+bMmZUOtx999JH69u2rU6dOed01tvB9HLGFZRBqAQAAXIcjt7Aygi0sgVALAADgeoRbWBXBFl6PUAsAAOA+hFtYEcEWXo1QCwAA4H6EW1gNN4+C2+Xn5ysiIkKFhYWOh0QHBQXpn//8p+Li4hzTEWoBAAA861I3lMrIyFBiYqLOnTsnSSouLlZgYKBOnDihkJAQT5UMP8URW7hdSEiIMjMztXnzZsewsWPHat26dY5gS6gFAADwvEsduV23bp2CgoL02muvOaZv0aIFoRYeQbCFR9x+++26/fbbHe8nTZrk+DehFgAAwHtcKtyGhYVp+PDhHqsNKEGwhVcpCbXDhw8n1AIAAHiJknB77tw5R7gFvAnX2MIrXHvttbrmmmu0adMmSeLB3gAAAF4oNzdXtWrVknT+tOOjR4/qwIEDHq4KkAI8XQBQoiTUSuJILQAAgBe6cB/twn03wNM4FRleYezYsdq/f79efvllT5cCAACACnjiiSd03XXXeboMQBKnIsOL5OXlOU4/zs3NVVhYmIcrAgAAwIXYX4O34lRkAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAH7t0KFDSk5OVkxMjGrUqKF69eopMTFRGRkZeu6552Sz2cp9/e1vfyvV1qBBg7R79+4yl1PeuDVr1uiWW25RjRo1dMMNN2jevHmXrXnTpk1q3769atasqXr16umll16qwicHAMB3EGwBAH5r9+7datWqlTIzM/Xyyy9r8+bNWrlypTp16qSkpCQ9/vjjOnjw4EWvQYMGKSIiQg888ICOHTumGTNmyBjjaPenn37S/PnzLzlOknbt2qXu3burU6dOysrK0qhRozRkyBD961//KrfmkydPqkuXLqpfv76++eYbvfzyy3ruuec0a9Ys1/2hAADwcoGeLgAAAE8ZMWKEbDabNmzYoLCwMMfwpk2b6qGHHlJ4eLjCw8NLzTN//ny9//77WrZsmW688UadPn1a+/fv11133aWioiKlpqbqyy+/1NSpU1WzZs1yx0lSamqq/vCHP+jVV1+VJN10003697//rZSUFCUkJJRZ8/z583X27FnNnTtXwcHBatq0qbKysvTaa6/p4YcfdtFfCgAA70awBQD4pWPHjmnlypV64YUXSoXaEhERERcN++abbzR06FBNmTLFETxDQ0P1P//zP1q+fLl69uypwsJCZWZmKigoSJIuOW79+vWKj48vtYyEhASNGjWq3LrXr1+vO++8U8HBwaXmmTp1qo4fP64rr7yysn8KAAAsj1ORAQB+6ccff5QxRo0bN67Q9EeOHNGf//xn3X333Xr88ccdwwsKCjRx4kS98cYb6tixo2677TbFx8drw4YNlxwnnb++NyoqqtRyoqKidPLkSeXn55dZR3nzlIwDAMAfEWwBAH7pwuteL+fcuXO65557FBUVpbfffrvUuNOnTysqKkorV65U3bp1NXz4cM2dO1c7duy45DgAAOA8nIoMAPBLN954o2w2m7Kzsy877WOPPaadO3dq48aNqlmzZqlxkZGRSkpKKjXs+uuv1/XXXy9JlxwXHR2tw4cPlxp/+PBh1a5dWyEhIWXWUt48JeMAAPBHHLEFAPilyMhIJSQkaMaMGcrLy7to/IkTJyRJs2bN0ty5c7Vw4ULVrVv3km3OmzdPDRo0qPC4tm3bKiMjo9SwVatWqW3btuUuo23btlq7dq3OnTtXap5GjRpxfS0AwG8RbAEAfmvGjBkqKipSmzZttHDhQu3cuVPbtm3TtGnT1LZtW3355ZdKTk7WxIkTFRMTo0OHDpV65eTkVGv5w4cP188//6wnn3xS2dnZ+t///V99/PHHGj16tGOaN998U3FxcY73DzzwgIKDgzV48GBt2bJFH330kd544w399a9/rVYtAABYmc1U5iIjwIXy8vIcj9XIzc0t8y6lAOBsBw8e1AsvvKD09HQdPHhQ11xzjVq1aqXRo0fr3Xff1bx588qdd+DAgZccXxFr1qzR6NGjtXXrVtWtW1cTJkzQoEGDHOOfe+45zZs3T7t373YM27Rpk5KSkrRx40ZdffXVSk5O1tixY6tVBwBUBPtr8FYEW3gNvigBAAC8G/tr8FacigwAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAMqVl5enadOmKS4uTtHR0QoODlZ0dLTi4uI0bdo0nT592tMler2CggIVFBR4ugyvR18DAFSHzRhjPF0EIJ3fqQkPD5ck5ebmKiwszMMVAf5t2bJlGjJkiA4dOiRJuuKKKxQZGaljx44pJydHkhQdHa3Zs2ere/funizVqxhjtG7dOqWmpmrhwoXKz8+XJIWEhOjee+/Vww8/rHbt2slms3m4Uu9BXwOsg/01eCuO2AIALjJr1iz17NlTR48e1ZAhQ/T9999r69at+uSTT7Rt2zZt2rRJQ4cO1dGjR9WzZ0/NmjXL0yV7hZ07d6pFixa64447lJaW5gi1kpSfn68FCxbojjvuUIsWLbRz504PVuo96GsAAGcg2AIASsnMzNSIESMUFhamlStX6u2331aLFi302muvqWXLlnrjjTfUvHlzzZo1SytXrlRoaKhGjBih1atXe7p0j8rKylLr1q2VnZ0tSSosLLxompJh2dnZat26tbKystxZotehrwEAnIVgCwBwKCwsVFJSkoqKijR//nzFx8dfcvr4+Hh9+OGHKioqUnJycplhzh8cOXJE8fHxysvLq9DfoLCwUHl5eYqPj9eRI0fcUKH3oa8BAJyJYOsEX3/9tbp27SpJysnJ0bBhwxQTE6NGjRqpVatWWrJkiWPaNWvWKCQkRLGxsYqNjVXTpk319ttvO8YPGTJEn332mSRp8eLF+s9//lNqWadPn1br1q116tQpSdK9996rdevWufojAvATGRkZys7OVmJiohITEys0T48ePZSYmKjs7GxlZma6uELvlJqaquPHj6uoqKjC8xQVFen48eOaOXOmCyvzXvQ1AL6KbOAZBFsnWLRokXr37i1jjLp166agoCDt2LFD27dv15w5c/TII49o+fLljukbNWqkrKwsZWVl6V//+pceffRRR2ecPXu2OnXqJKnszvvmm2+qV69eqlWrliTpmWee0VNPPeWmTwrA15Wc4jlgwIBKzde/f39J0qpVq5xek7c7e/aspk+fruLi4krPW1xcrGnTpuns2bMuqMy70dcA+CqygWcEeroAT3jwwQe1fft2nT17VvXq1dOcOXNUUFCg2NhYjRw5Uunp6crJydG0adPUrVs3SdL69ev1xBNP6NSpUzLGaPLkyerVq5ckaenSpVq1apUyMjK0Z88effbZZwoMPP+njY2N1fjx4zV58mRHWxc6efKkwsLCFBQUJEnq2LGjRo0apeDgYEe78+bN06OPPqohQ4Zo5syZ+vTTTx3zx8bG6ujRo9q2bZtuuummMj9vXl6eU/9+rnJhnVapGfA1u3btkiTVr19f1113nQ4cOHDRNFOnTtXUqVMd73//+9/r448/dszvb+vv8uXL9euvv1Z5/l9//VVLliwpcxvhy+hrgDVZdX/tUndv9rds4LOMHzpy5Ijj3y+++KIZNmyY2bVrl5Fk/vGPfxhjjFmxYoVp2LChMcaY3377zdSpU8esXbvWGGNMUVGR+e2334wxxuzYscO0a9fOGGPM1KlTTc+ePS9a3rfffmtq1qxpjDHms88+MzVr1jQ333yzuemmm0xwcLCZOXOmY9oOHTqYRYsWGWOMGThwoElJSXGM++WXX8xVV111Uft/+ctfzPTp08v9vJJ48eLFixcvXrx48fLbF9nA9/nlEdsFCxbo/fffV0FBgQoKCnT11VdLkmrWrKk+ffpIktq2bauffvpJ0vlfZBo1aqT27dtLkgICAhQZGSnp/041uJyQkBDHv0tON5Ckffv26fbbb1fr1q11yy23XLKNffv2KSoq6qLh0dHR2rdv32VrAAAAAFAa2cA3+F2w/fe//61p06Zp/fr1qlOnjpYuXaqJEydKkmrUqCGbzSZJstvtFboJyOLFi/Xuu+9Kkm655RZNmzZN586dc5w+IJ3v/O3atStz/rp16+rWW29VRkbGZTtvaGioCgoKLhpeUFCgK664otz5cnNzL/s5vEFeXp5j5Tx8+DAP/AY8YPXq1erdu7d69OihtLS0UuOeeOIJvfXWW5IuXkf79u2r9PR0LVmyRHFxcW6t2dMWLlyogQMHVquNd999V3fffbeTKrIG+hpgTb62v+aP2cBX+V2wPX78uGrVqqWrrrpKZ8+erdDdKNu1a6edO3fqiy++UPv27VVcXKwTJ07ozJkzys3N1Y033ihJ6ty5s+rVq6fRo0fr9ddfV2BgoLKyspSSkqJ//OMfZbadk5Ojb775xnEzjAvVrl1bOTk5jveNGjXSkSNHlJ+fX+pXnm3btmnYsGHl1m/FL5ywsDBL1g1YXffu3dW4cWOlp6drzZo16t69u2PchRvlC9fR5cuXKz09XY0bN1a3bt0c1xH5i169eikkJET5+flVmj8kJES9e/f2u+88+hpgfb6wv+aP2cBX+d1dke+66y41atTIcfpAbGzsZee58sortWjRIj311FNq0aKFbrnlFn355ZdasmSJevbs6ZguICBAK1as0JkzZ9SwYUPFxMSobdu2WrhwoW6++WbHdNu3b3fc0vu2225T//79S7VTYsCAAfr444/VsmVLzZ49WzVr1lSXLl1KPeIgLy9Pmzdvvuzz/wCgIgIDA/Xmm2/KbrerX79+ysjIuOT0GRkZ6tu3r+x2u6ZPn+6XQeOKK67Q4MGDq/TZAwMDNWTIENWuXdsFlXk3+hoAb0A28CGevsjXyhISEszGjRvLHZ+fn28efPBB86c//cnk5+c7ZZlfffWV6d69u+P9W2+9ZZ555hmntO1pubm5jgv8c3NzPV0O4NdSU1NNQECAsdvt5pFHHjE//PCD+eGHHxzr6MaNG82IESOM3W43AQEBJjU11dMle9SOHTtMUFCQsdlsFb6Ric1mM8HBwWbHjh2eLt+j6GuAtbC/Vj6ygWfZjDHG3WEa1TN37lzde++9qlWrlmbNmqUHH3zQ8qeBSOd/YQoPD5d0/rpgX/hMgJUtW7ZMgwcP1uHDhyVJEREROnHiRKlpoqKiNGfOnFKnkfqrJUuWOG4ycrln2gYEnD9h6pNPPnE8HsKf0dcA62B/zfv4ajaoLIItvAZflID3ycvL0+zZs7V06VJt3rxZR48elSR16NBBffr00eDBg1lXL7Bq1Sr16dPH8WzH/97EltyEJCwsTJ988on+9Kc/ub1Gb0VfA6yB/TV4K4ItvAZflIB3Yx2tmJycHC1YsEAzZszQli1bSo1r1qyZkpKS9MADD/jldbUVRV8DvBfrJ7wVwRZegy9KwLuxjlaOMUZbt25Vs2bNJEk//PCDmjRp4jhqi/LR1wDvxfoJb+V3d0UGAMAdbDabGjRo4HjfoEEDQi0AAC5CsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAwAUOHDig2bNnO97Pnj1bBw4c8GBFAAD4LoItAABOtGrVKvXs2VP16tXT6NGjHcNHjx6tevXqqWfPnlq1apUHKwQAwPcQbAEAcILi4mI99dRT6tKli1asWKHi4mIZYxzjjTEqLi7WihUr1KVLF40bN67UeAAAUHWBni4AAABfMHbsWL3yyiuSpMLCwnKnKxk3ZcoUFRUV6aWXXnJLfQAA+DKO2FbT119/ra5du0qScnJyNGzYMMXExKhRo0Zq1aqVlixZ4ph2zZo1CgkJUWxsrGJjY9W0aVO9/fbbjvFDhgzRZ599JklavHix/vOf/5Ra1unTp9W6dWudOnVKknTvvfdq3bp1rv6IAIDLyMzMdITaynj55Zcd3/sAAOsjG3gOR2yradGiRerdu7eMMerWrZtatmypHTt2KDAwUFlZWerWrZuCgoLUrVs3SVKjRo2UlZUlSdq3b5+uv/569e3bV7Vq1Sp1k5HFixcrNjZWt912m2PYm2++qV69eqlWrVqSpGeeeUaPPfaY1q5d674PDAC4SEpKigIDAy95pLYsgYGBSklJUadOnVxUGQDAncgGnuOXR2zz8/N1//33q0mTJrr55pvVpUsX9ejRQwsWLHBM8+mnn+rWW2+VdP5Olk2aNFFsbKyaN2+ur776yjHd0qVL1atXL2VkZGjPnj167bXXFBh4/veC2NhYjR8/XpMnTy6zjpMnTyosLExBQUGSpI4dO2rx4sVavny5li5dqpdfflmxsbGOTj1z5kw98MADjvljY2N19OhRbdu2zbl/IABAhf38889atmxZpUOtdP605PT0dP38888uqAwAUBFkA9/gl0dsV65cqRMnTmjr1q2SpGPHjumbb77Rs88+6+gcM2bM0KOPPipJGjNmjLKzs/W73/1O586d05kzZyRJO3fuVO3atRUdHa333ntPrVq1UnBwcKlltW3bVmPGjHG83759u2JjY3X27Fn99NNPmj59umrWrFlqnm7duqlnz56KjY3VqFGjJEl79+5VTk6Orr/++ovaz8jI0E033VTmZ83Ly6viX8n9LqzVSnUD/oJ1tGyrV6+u1k2gjDHKyMhQVFSUE6uyNvoa4L2svH6GhYWVOdyfsoEv88tge/PNN2vbtm0aMWKEOnTooG7duulPf/qTRo0ape+++06RkZHasGGDPv74Y0lSXFycBgwYoMTERHXt2lUNGzaU9H+nGlxOSEiI49//fbrB7bffrtatW+uWW265ZBv79u0rc6cnOjpa+/btK3e+8PDwy9bnjdjBA7wb66hzPfzww3r44Yc9XYZXoq8B3stq62d5P0L6UzbwZX55KnJMTIy2bt2qu+66S19++aWaNWum48eP67HHHtP06dOVmpqqhx56SDVq1JAkLVy4UFOmTNG5c+fUrVs3paWlSTp/rntJ573lllv0zTff6Ny5c6WWtX79erVr167MOurWratb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", + "image/png": "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3bp12rx5s6KiovTTTz8pOjpa3t43N2tAQIDefPNNTZ482bmu37t8+bKKFy+uIkWKSJLat2+vUaNGycfHx7nexYsXa8SIEQoNDdW8efP0n//8x7l8QECAzp8/r4MHD6pevXq3fc9JSUku237u8vsa80O9eQHbLHNffPGFTp06ddfLnzx5Up9//rnatWvnwqryvuPHj0uSqlatqkqVKun06dO3tJk6daqmTp3qfH7//ffrk08+cS5PPwSQleLFi992XmHcPytwTCFz7tw5589/+9vfzJAhQ8zx48eNJPPvf//bGGPMZ599ZmrXrm2MMebChQvmT3/6k/nyyy+NMcY4HA5z4cIFY4wxR44cMa1btzbGGDN16lTTrVu3W17v//2//2eKFStmjDEmOjraFCtWzDRu3NjUq1fP+Pj4mHnz5jnbtmvXzqxevdoYY0z//v3N9OnTnfN+/vlnc88999yy/hdeeMHMmjUry/csiQcPHjx48ODBw6MP9s8KtkJ3pOKjjz7SsmXLlJKSopSUFJUvX16SVKxYMfXs2VOS1KpVK/3www+SbqbgOnXqqG3btpIkLy8vlStXTtJ/D63dia+vr/Pn9MNrknTq1Ck98sgjat68uZo2bZrlOk6dOqWKFSveMt3f39/St7IAAACexv5Z/leoQsVXX32lmTNnKjY2Vn/605+0bt06TZw4UZJUtGhR2Ww2SZLdbs/WOdVr1qzRkiVLJElNmzbVzJkzdePGDefhMulmp2/dunWmy1euXFktW7ZUVFTUHTutn5+fUlJSbpmekpKi0qVLZ7lsYmLind6KxyUlJTl/Kc+ePZvlIVLcxDbL3Oeff66nnnrK0jpWrVql4OBgF1WUP2zZskU9evRQly5dtHLlSuf03/ezESNGaMqUKRmW69WrlyIjI7V27VoFBgbmas0ACobCun9W0BSqUPHbb7+pZMmSuueee3T9+nXNmzfvjsu0bt1aR48e1bZt29S2bVulpaXp0qVLunbtmhITE1WrVi1JUseOHVWlShW9/PLLeu+99+Tt7a24uDhNnz5d//73vzNdd0JCgr777jvnQMffK1WqlBISEpzP69Spo3Pnzik5OTlDsj548KCGDBmS5XvIbzubxYsXz3c1exrb7L+eeOIJlS5dOsPvT06ULl1aTzzxRIbfs8IgJCREdevWVWRkpGJiYhQSEnJLGx8f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qmLFis5pwcHBunz5Mn/U/k98fLw++eQTjRgxQl5e2f91tdvtGjFihD755BOu1oM7Su9nd/PNeWpqaqHtZ+n3xunXr1+Oluvbt68kafPmzS6vCQWbuz43CRZwBe5TgRxz1VWezpw5k+EPoyTn8zNnzuRoXQ6HQ0lJSXdVR14WHR2t1NRU9erVK8fL9urVS6+88oqio6PVvXt3N1SHgiI6OloOh+Oul09NTS2U/ez48eOSpKpVq6pSpUo6ffr0LW2mTp2qqVOnOp/ff//9+uSTT5zLF8S/W8i57P7+ufJz84+4jwWsIlQgx9LvYL158+Y8c9nYL7/80nnX34LobrZz+jJ9+vRxdTnALQpzP2vZsmW22/788896+OGHJUmrVq3SqlWr3FUW8hEvLy89++yzni5D5cuX1+bNm1WrVi2NGTNGn332madLQj7C6U/Isb59++ry5ct6/fXXlZaWdtfr8ff319mzZzNMS3/uqrttFxR3820mN9oCgILF3Z+baWlpev3113X58mXnaXpAdnGkAjnWp08fpaWlqX///pJuXqM9J+f7p2vVqpXeeecdnTt3Tn/6058k3TzHuFSpUnrwwQdztK5HH31UkZGROa4hr9u3b58efvhhRUVFqWfPnjlaNv1872+++UYNGjRwR3koINL7mRWFsZ9t2bJFPXr0UJcuXbRy5coM89544w3NnDlTr7zyit5+++0M83r16qXIyEitXbtWgYGBuVky8qguXbpkq50rPzf/KC0tTS+++KIWLVqkJUuWFOqjj7g7hArclfSBiVaCxeOPP64HH3xQ/fr109///nedOXNGb775psLCwlS0aNEcrctut6t48eI5WiY/aNmypdq0aaOZM2fmOFTMnDlTbdu2zdGpGSicWrZsqVatWmnHjh05Pvpot9vVsmXLQtnPQkJCVLduXUVGRiomJkYhISHOeUWKFHH++/u/TRs3blRkZKTq1q2rzp0739UVt1Dw2O32bLVz5efm7/0xUOT04gOAxOlPsKBfv35asmSJFi1apBdffPGudkYiIyNlt9vVqlUr9e3bV3/+859v+VavsAsPD9cXX3yhqKiobC+zZcsWffnllwoPD3djZShIRo0adVenMzocjkJ7t3tvb2+9//77stvt6t279x1/R6OiotSrVy/Z7XbNmjWLQIEcc8fnJoECrsJfNFhi9YhF1apV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1kAhZR0q0tLSlJaWdsv0tWvXqlu3bpKkAQMG6NixY/r+++918OBBRUZGatq0aZozZ06GZSIiIhQYGJhp4Lgbv/zyizZu3KjnnntOklSlShVt2rRJ+/bt09dff605c+YoJiZGktSoUSMVLVpUW7dudclr5zWFp7cCAADkUYUpUMTGxurVV1/VlStXZIzRU089pdOnT+u5556Tr6+vFi9erDVr1mjv3r1KTEzUyZMntXnz5lvWs2bNGk2aNElHjx7VmjVrdPLkSRUvXlzSzaMa//znPxUaGqphw4ZJki5duqQNGzbo4MGDatSokY4dO6aaNWtKuhlKihYtqmPHjunkyZNq0KCBVq5cqbS0NFWrVk27du1SlSpVJElvvPGGHA6Hpk6dqkWLFumpp56SzWaTJD3yyCPO+kqXLq26devqxIkTzmm9e/fWvHnz1LFjR7dsW0/iSAUAAIAHuStQJCUleeSRlYsXL6pHjx7629/+pu+//15xcXEKDw/Xfffdp48//lhxcXEKCAiQdDN8LF26VAcOHFClSpUyrOfKlSs6dOiQHnroIe3evVu1atXSPffck6FNq1atFB8fr7Nnz0qSPvroIwUHB8vf3199+/bVokWLMrSPi4vT+vXrdfDgQZ09e1arVq1SsWLFNGjQIOcRj2vXrunDDz/U8OHDJUkxMTFq2bJlpu/1wIEDio2NVVBQUIaaoqKi7vA/lz8V3BgMAACQx6WkpKhXr17q0KGDy49Q+Pv7u2xdOWGMue282NhY1alTR23btpUkeXl5qVy5cpm27dy5sypWrJjpvM8++0ydOnVyHiHIiq+vr6Sbpz797W9/kyQNHDhQwcHBmjx5sux2uyTpySeflJ+fnySpRYsW+uGHHyRJw4cPV4sWLTRp0iT961//UosWLVS1alVJ0qlTpzKt8dSpU+revbvmzp2rypUrO6f7+/vrwoULSklJUbFixe5Ye37CkQoAAAAPKVKkiDp27KivvvpK27Zt83Q5eUqJEiVuO2/16tXq0aOHJKlJkyY6evSoLly4kKFNbGys6tevr1KlSikuLk579uzR4MGDVa1aNXXp0kW//vqrPvvsM2f73+/k2+12paamSpIqVaqkRx99VB9//LFmz56tESNGONv5+fkpJSUlw+uePn1aQUFBevPNN/XMM89kmJeSkiK73S4fH5+cbYx8gFABAADgIXa7XWvWrFHbtm0VEhKi6Ohol637zJkzSkxMzPVHVlq3bq2jR486A1RaWpouXryoUqVKKSEhIVvv6/r164qNjVX79u0lSbVq1VLXrl314osv6urVq5KkEydOaOzYsc6rL0VERGj06NH66aefdOLECZ04cULvvfdetgdsjxw5UuPHj9elS5cynM7UqFEjHT582Pk8Pj5egYGBGjt2rPr373/Leg4ePKgGDRrIy6vg7YIXvHcEAACQj/j6+rolWBQvXtwjj6yULVtWq1ev1rhx49SoUSM1bdpUX3/9tV566SUNHjxYAQEBGS4bm5mtW7eqTZs2KlKkiHPa0qVLVaNGDTVs2FC1atVSzZo19Y9//EPBwcFKSUnR8uXL1adPnwzrefbZZ/Wf//zHOeYiKw8//LBKly6t4cOHZzjl6umnn9bnn3/ufD5x4kT9/PPPmjFjhgICAhQQEKAPP/zQOX/Tpk16+umn7/h6+ZHNZHXiGwAAAHJFcnKyevTooW3btmnDhg3q0KHDXa3n448/Vq9evXTlypUsTyHKr4YOHaqgoKDb7pynpaVp3Lhx2rx5s6Kiom47ZiMnfvnlFzVv3lxHjhxRyZIlM7xWixYttGbNmgxjJzJz/fp1NW/eXFu3blX58uUt15TXECoAAADyCFcEi4IeKnLbxIkTtWjRIr3zzjuZntL03XffKTk5WW3atMlyPYcPH9YPP/ygzp07u6tUjyJUAAAA5CFWgwWhAp7AmAoAAIA8xF1jLAB3IlQAAADkMQQL5DeECgAAgDyIYIH8hFABAACQRxEskF8wUBsAACCPy2rw9r59+xQaGqobN25Iki5evKgTJ04wUBu5ytvTBQAAACBr6UcsevTooZCQkAzBYvXq1dqzZ0+Gy50+9NBDBArkKkIFAABAPpBVsChTpozmzJnj4QpRmDGmAgAAIJ9gjAXyKsZUAAAA5DO/H2PRtm1b7d27V6dPn/Z0WSjECBUAAAD5UHqw+M9//qN7772XUAGPYkwFAABAPpR+KtSzzz6r++67z9PloJDjSAUAAAAASxioDQAAAMASQgUAAAAASwgVAAAAACwhVAAAAACwhFABAAAAwBJCBQAAAABLCBUAAAAALCFUAAAAALCEUAEAAADAEkIFAAAAAEsIFQAAAAAsIVQAAAAAsIRQAQAAAMASQgUAAAAASwgVAAAAACwhVAAAAACwhFABAAAAwBJCBQAAAABLCBUAAAAALCFUAAAAALCEUAEAAADAEkIFAAAAAEsIFQAAAAAsIVQAAAAAsIRQAQAAAMASQgUAAAAASwgVAAAAACwhVAAAAACwhFABAAAAwJL/D7wOtzGgfqYuAAAAAElFTkSuQmCC", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -100,7 +101,7 @@ "ctrl = bb.add_register_from_dtype(\"ctrl\", QAny(2))\n", "ctrls = bb.split(ctrl)\n", "anc = bb.add_register_from_dtype(\"anc\", QBit())\n", - "sys = bb.add_register_from_dtype(\"sys\", QBit())\n", + "# sys = bb.add_register_from_dtype(\"sys\", QBit())\n", "\n", "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", @@ -203,7 +204,7 @@ "$$\n", "Toffoli \\cdot I \\otimes X \\otimes I \\cdot Toffoli = CNOT(1, 3) \\cdot I \\otimes X \\otimes I.\n", "$$\n", - "Implementing these savings gives the final unary iteration bloq for 0,...,3 as" + "Implementing these reductions gives the final unary iteration bloq for 0,...,3 as" ] }, { @@ -289,7 +290,7 @@ "$$ |c_0 \\otimes \\bar{c_1} \\oplus c_0 \\rangle = |c_0 \\otimes (\\bar{c_1} \\oplus 1) \\rangle = |c_0 \\otimes c_1\\rangle, $$\n", "as it should. \n", "\n", - "Now that we know the ins and outs of how the 4 unitary Unary Iteration works, lets introduce some abstraction so that we can extend it to more unitaries than just 4. The key tool we will use for this is a binary tree where the leaf nodes are the integers we are selecting on, but they should be thought of as intervals `[0, 1)`, `[1, 2)`, `[2, 3)`, `[3, 4)`. When we combine these leaf nodes into the next level, this node will store the union of the two intervals beneath it. So our second level (the one above the leafs) has two nodes `[0, 2)` and `[2, 4)`. The root node, which combines these two, has one interval `[0, 4)`. Now the unary iteration cirquit can be thought of as first descending this tree from the root node to the `[0, 1)` node, followed by then moving to it's neighboring node `[1, 2)`, and so on. Our goal is to capture how the circuit above actually implements these moves. " + "Now that we know the ins and outs of how the 4 unitary Unary Iteration works, lets introduce some abstraction so that we can extend it to more unitaries than just 4. The key tool we will use for this is a binary tree where the leaf nodes are the integers we are selecting on, but they should be thought of as intervals `[0, 1)`, `[1, 2)`, `[2, 3)`, `[3, 4)`. When we combine these leaf nodes into the next level, this node will store the union of the two intervals beneath it. So our second level (the one above the leafs) has two nodes `[0, 2)` and `[2, 4)`. The root node, which combines these two, has one interval `[0, 4)`. Now the unary iteration cirquit can be thought of as first descending this tree from the root node to the `[0, 1)` node, followed by then moving to it's neighboring node `[1, 2)`, and so on. Our goal is to capture how the circuit above actually implements these moves. As our leaf nodes are organized (left to right) as 00 , 01, 10, 11, our walk across these nodes " ] }, { From bda94fcc9ed8f4cdfd6afe97dbfb93d926b57ccd Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Wed, 31 Jul 2024 14:16:57 -0400 Subject: [PATCH 05/13] almost quantum --- .../bloqs/multiplexers/unary_iteration.ipynb | 315 +++++++++++++++++- 1 file changed, 307 insertions(+), 8 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 61443273ca..2bc8645ed4 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 8, "id": "756a61d0", "metadata": {}, "outputs": [], @@ -68,7 +68,8 @@ "from qualtran.bloqs.basic_gates.toffoli import Toffoli\n", "from qualtran.bloqs.basic_gates.x_basis import XGate\n", "from qualtran.drawing.musical_score import draw_musical_score, get_musical_score_data\n", - "from qualtran.drawing import get_musical_score_data, draw_musical_score" + "from qualtran.drawing import get_musical_score_data, draw_musical_score\n", + "import attrs" ] }, { @@ -81,15 +82,15 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "baaa3142", "metadata": {}, "outputs": [ { "data": { - "image/png": "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3bp12rx5s6KiovTTTz8pOjpa3t43N2tAQIDefPNNTZ482bmu37t8+bKKFy+uIkWKSJLat2+vUaNGycfHx7nexYsXa8SIEQoNDdW8efP0n//8x7l8QECAzp8/r4MHD6pevXq3fc9JSUku237u8vsa80O9eQHbLHNffPGFTp06ddfLnzx5Up9//rnatWvnwqryvuPHj0uSqlatqkqVKun06dO3tJk6daqmTp3qfH7//ffrk08+cS5PPwSQleLFi992XmHcPytwTCFz7tw5589/+9vfzJAhQ8zx48eNJPPvf//bGGPMZ599ZmrXrm2MMebChQvmT3/6k/nyyy+NMcY4HA5z4cIFY4wxR44cMa1btzbGGDN16lTTrVu3W17v//2//2eKFStmjDEmOjraFCtWzDRu3NjUq1fP+Pj4mHnz5jnbtmvXzqxevdoYY0z//v3N9OnTnfN+/vlnc88999yy/hdeeMHMmjUry/csiQcPHjx48ODBw6MP9s8KtkJ3pOKjjz7SsmXLlJKSopSUFJUvX16SVKxYMfXs2VOS1KpVK/3www+SbqbgOnXqqG3btpIkLy8vlStXTtJ/D63dia+vr/Pn9MNrknTq1Ck98sgjat68uZo2bZrlOk6dOqWKFSveMt3f39/St7IAAACexv5Z/leoQsVXX32lmTNnKjY2Vn/605+0bt06TZw4UZJUtGhR2Ww2SZLdbs/WOdVr1qzRkiVLJElNmzbVzJkzdePGDefhMulmp2/dunWmy1euXFktW7ZUVFTUHTutn5+fUlJSbpmekpKi0qVLZ7lsYmLind6KxyUlJTl/Kc+ePZvlIVLcxDbL3Oeff66nnnrK0jpWrVql4OBgF1WUP2zZskU9evRQly5dtHLlSuf03/ezESNGaMqUKRmW69WrlyIjI7V27VoFBgbmas0ACobCun9W0BSqUPHbb7+pZMmSuueee3T9+nXNmzfvjsu0bt1aR48e1bZt29S2bVulpaXp0qVLunbtmhITE1WrVi1JUseOHVWlShW9/PLLeu+99+Tt7a24uDhNnz5d//73vzNdd0JCgr777jvnQMffK1WqlBISEpzP69Spo3Pnzik5OTlDsj548KCGDBmS5XvIbzubxYsXz3c1exrb7L+eeOIJlS5dOsPvT06ULl1aTzzxRIbfs8IgJCREdevWVWRkpGJiYhQSEnJLGx8f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qmLFis5pwcHBunz5Mn/U/k98fLw++eQTjRgxQl5e2f91tdvtGjFihD755BOu1oM7Su9nd/PNeWpqaqHtZ+n3xunXr1+Oluvbt68kafPmzS6vCQWbuz43CRZwBe5TgRxz1VWezpw5k+EPoyTn8zNnzuRoXQ6HQ0lJSXdVR14WHR2t1NRU9erVK8fL9urVS6+88oqio6PVvXt3N1SHgiI6OloOh+Oul09NTS2U/ez48eOSpKpVq6pSpUo6ffr0LW2mTp2qqVOnOp/ff//9+uSTT5zLF8S/W8i57P7+ufJz84+4jwWsIlQgx9LvYL158+Y8c9nYL7/80nnX34LobrZz+jJ9+vRxdTnALQpzP2vZsmW22/788896+OGHJUmrVq3SqlWr3FUW8hEvLy89++yzni5D5cuX1+bNm1WrVi2NGTNGn332madLQj7C6U/Isb59++ry5ct6/fXXlZaWdtfr8ff319mzZzNMS3/uqrttFxR3820mN9oCgILF3Z+baWlpev3113X58mXnaXpAdnGkAjnWp08fpaWlqX///pJuXqM9J+f7p2vVqpXeeecdnTt3Tn/6058k3TzHuFSpUnrwwQdztK5HH31UkZGROa4hr9u3b58efvhhRUVFqWfPnjlaNv1872+++UYNGjRwR3koINL7mRWFsZ9t2bJFPXr0UJcuXbRy5coM89544w3NnDlTr7zyit5+++0M83r16qXIyEitXbtWgYGBuVky8qguXbpkq50rPzf/KC0tTS+++KIWLVqkJUuWFOqjj7g7hArclfSBiVaCxeOPP64HH3xQ/fr109///nedOXNGb775psLCwlS0aNEcrctut6t48eI5WiY/aNmypdq0aaOZM2fmOFTMnDlTbdu2zdGpGSicWrZsqVatWmnHjh05Pvpot9vVsmXLQtnPQkJCVLduXUVGRiomJkYhISHOeUWKFHH++/u/TRs3blRkZKTq1q2rzp0739UVt1Dw2O32bLVz5efm7/0xUOT04gOAxOlPsKBfv35asmSJFi1apBdffPGudkYiIyNlt9vVqlUr9e3bV3/+859v+VavsAsPD9cXX3yhqKiobC+zZcsWffnllwoPD3djZShIRo0adVenMzocjkJ7t3tvb2+9//77stvt6t279x1/R6OiotSrVy/Z7XbNmjWLQIEcc8fnJoECrsJfNFhi9YhF1apV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1kAhZR0q0tLSlJaWdsv0tWvXqlu3bpKkAQMG6NixY/r+++918OBBRUZGatq0aZozZ06GZSIiIhQYGJhp4Lgbv/zyizZu3KjnnntOklSlShVt2rRJ+/bt09dff605c+YoJiZGktSoUSMVLVpUW7dudclr5zWFp7cCAADkUYUpUMTGxurVV1/VlStXZIzRU089pdOnT+u5556Tr6+vFi9erDVr1mjv3r1KTEzUyZMntXnz5lvWs2bNGk2aNElHjx7VmjVrdPLkSRUvXlzSzaMa//znPxUaGqphw4ZJki5duqQNGzbo4MGDatSokY4dO6aaNWtKuhlKihYtqmPHjunkyZNq0KCBVq5cqbS0NFWrVk27du1SlSpVJElvvPGGHA6Hpk6dqkWLFumpp56SzWaTJD3yyCPO+kqXLq26devqxIkTzmm9e/fWvHnz1LFjR7dsW0/iSAUAAIAHuStQJCUleeSRlYsXL6pHjx7629/+pu+//15xcXEKDw/Xfffdp48//lhxcXEKCAiQdDN8LF26VAcOHFClSpUyrOfKlSs6dOiQHnroIe3evVu1atXSPffck6FNq1atFB8fr7Nnz0qSPvroIwUHB8vf3199+/bVokWLMrSPi4vT+vXrdfDgQZ09e1arVq1SsWLFNGjQIOcRj2vXrunDDz/U8OHDJUkxMTFq2bJlpu/1wIEDio2NVVBQUIaaoqKi7vA/lz8V3BgMAACQx6WkpKhXr17q0KGDy49Q+Pv7u2xdOWGMue282NhY1alTR23btpUkeXl5qVy5cpm27dy5sypWrJjpvM8++0ydOnVyHiHIiq+vr6Sbpz797W9/kyQNHDhQwcHBmjx5sux2uyTpySeflJ+fnySpRYsW+uGHHyRJw4cPV4sWLTRp0iT961//UosWLVS1alVJ0qlTpzKt8dSpU+revbvmzp2rypUrO6f7+/vrwoULSklJUbFixe5Ye37CkQoAAAAPKVKkiDp27KivvvpK27Zt83Q5eUqJEiVuO2/16tXq0aOHJKlJkyY6evSoLly4kKFNbGys6tevr1KlSikuLk579uzR4MGDVa1aNXXp0kW//vqrPvvsM2f73+/k2+12paamSpIqVaqkRx99VB9//LFmz56tESNGONv5+fkpJSUlw+uePn1aQUFBevPNN/XMM89kmJeSkiK73S4fH5+cbYx8gFABAADgIXa7XWvWrFHbtm0VEhKi6Ohol637zJkzSkxMzPVHVlq3bq2jR486A1RaWpouXryoUqVKKSEhIVvv6/r164qNjVX79u0lSbVq1VLXrl314osv6urVq5KkEydOaOzYsc6rL0VERGj06NH66aefdOLECZ04cULvvfdetgdsjxw5UuPHj9elS5cynM7UqFEjHT582Pk8Pj5egYGBGjt2rPr373/Leg4ePKgGDRrIy6vg7YIXvHcEAACQj/j6+rolWBQvXtwjj6yULVtWq1ev1rhx49SoUSM1bdpUX3/9tV566SUNHjxYAQEBGS4bm5mtW7eqTZs2KlKkiHPa0qVLVaNGDTVs2FC1atVSzZo19Y9//EPBwcFKSUnR8uXL1adPnwzrefbZZ/Wf//zHOeYiKw8//LBKly6t4cOHZzjl6umnn9bnn3/ufD5x4kT9/PPPmjFjhgICAhQQEKAPP/zQOX/Tpk16+umn7/h6+ZHNZHXiGwAAAHJFcnKyevTooW3btmnDhg3q0KHDXa3n448/Vq9evXTlypUsTyHKr4YOHaqgoKDb7pynpaVp3Lhx2rx5s6Kiom47ZiMnfvnlFzVv3lxHjhxRyZIlM7xWixYttGbNmgxjJzJz/fp1NW/eXFu3blX58uUt15TXECoAAADyCFcEi4IeKnLbxIkTtWjRIr3zzjuZntL03XffKTk5WW3atMlyPYcPH9YPP/ygzp07u6tUjyJUAAAA5CFWgwWhAp7AmAoAAIA8xF1jLAB3IlQAAADkMQQL5DeECgAAgDyIYIH8hFABAACQRxEskF8wUBsAACCPy2rw9r59+xQaGqobN25Iki5evKgTJ04wUBu5ytvTBQAAACBr6UcsevTooZCQkAzBYvXq1dqzZ0+Gy50+9NBDBArkKkIFAABAPpBVsChTpozmzJnj4QpRmDGmAgAAIJ9gjAXyKsZUAAAA5DO/H2PRtm1b7d27V6dPn/Z0WSjECBUAAAD5UHqw+M9//qN7772XUAGPYkwFAABAPpR+KtSzzz6r++67z9PloJDjSAUAAAAASxioDQAAAMASQgUAAAAASwgVAAAAACwhVAAAAACwhFABAAAAwBJCBQAAAABLCBUAAAAALCFUAAAAALCEUAEAAADAEkIFAAAAAEsIFQAAAAAsIVQAAAAAsIRQAQAAAMASQgUAAAAASwgVAAAAACwhVAAAAACwhFABAAAAwBJCBQAAAABLCBUAAAAALCFUAAAAALCEUAEAAADAEkIFAAAAAEsIFQAAAAAsIVQAAAAAsIRQAQAAAMASQgUAAAAASwgVAAAAACwhVAAAAACwhFABAAAAwJL/D7wOtzGgfqYuAAAAAElFTkSuQmCC", + "image/png": "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mUOHDjmGXTjNyZMnTUxMjCkuLjYfffSRadGixUXLOnbsmJHkaGPGjBnm/vvvN8YYM3r0aDNu3DjHtAMHDjRt2rQxeXl5prCw0LRr184sWLDAGGPM008/7Zi2oKDAREdHm927dxtjjOncubP55z//WeZn3bJli4mMjDR79+51DNuzZ4+56qqrLvk3ys3N9cjr0KFDRpJJS0u7ZH0VNWnSJCPJTJ482SntAQAA+IPJkycbSWbSpElOaS8tLc2xT+yp/czykA0unw2szmeP2K5fv16NGjVS+/btJUkBAQGKjIwsc9pu3bopKiqqzHErVqzQXXfd5fg15FJCQkIknT/V4MUXX5QkPfTQQ0pISNDkyZNlt9slSX/+858VGhoqSWrTpo1++uknSdKIESPUpk0bPfvss/r73/+uNm3aqH79+pKkffv2lVnjvn371KtXL6Wmpqpu3bqO4dHR0frtt99UUFCgmjVrlllveHj4ZT+TFUyYMEFff/21JkyYoDFjxjj+PwAAAKBs+fn5mjBhgnr27On0I7VlndbrLsaYMoeTDS6fDazO724eVZZLBbxFixapd+/ekqSWLVtq586d+u2330pNs379ejVt2lS1a9dWVlaWNm3apKFDh6pBgwbq0aOHfv31V61YscIx/YWdyW63q7CwUJJ03XXX6c4779RHH32kGTNm6NFHH3VMFxoaqoKCglLLPXDggOLj4zV+/Hjde++9pcYVFBTIbrcrODi4cn8MC5o5c6aWLl2q5ORkn11RAQAAnKlmzZpKTk7W0qVLNWvWLE+X41XIBtbks0ds27Vrp507d+qLL75Q+/btVVxcrBMnTqh27drKycmpUBtnz57V+vXr9d5770mSbrzxRiUmJurhhx/W+++/r9DQUO3evVtjx4513Hlszpw5GjNmjKZMmeJo56233tKcOXPUo0ePyy5z5MiRuvfeexUeHq74+HjH8BYtWmj79u2OX5kOHjyouLg4jR07VgMHDryonW3btqlZs2YKCCj/t4vc3NwK/R2cLTc312m/5M2cOVPDhw9XcnKy3njjjQr9egYAAODvbDab3njjDUnSsGHDJEkPP/ywU9o+dOiQ150ZSDa4fDawOp8NtldeeaUWLVqkMWPG6NSpUwoICNDkyZP12GOPaejQoQoNDdW8efMu2UZmZqbuuOMOBQUFOYa99957mjBhgpo3b66AgADt2rVL6enpSkhIUEFBgebPn6/PP/+8VDv33XefHn/8cR0+fPiydd9222264oorNGzYsFIh7Z577tF7772nIUOGSJImTpyoX375RW+88YbjS2nkyJH6y1/+IklauXKl7rnnnksuq+Qid3cr7xSRyiLUAgAAVJ2rwm1YWJjH9jPLQza4fDawPE9f5OvNhg0bZv7+97+XO76oqMg88cQTJjY21vz2229OWea+fftMdHS0OXny5EXLatWqVamLwMtz5swZ07x5c3P06FGn1ORsp06dqvbNo1JTU40kk5ycbIqLi51YHQAAgH8pLi42ycnJRpKZOXNmldspuXnUqVOnnFid9yAbeDefPWLrDKmpqZccHxAQoJdeeslpy5s4caLmzp2rKVOmqFatWhcta+bMmdq9e3epC8HLsmvXLk2ZMkVXX32102rzJhypBQAAcB5XnpbsS8gG3s1mjJPOCwUqKDc3V7Vq1VJaWpruv//+Ss1LqAUAAHANY4xGjhyp6dOna+bMmZUOtx999JH69u2rU6dOed01tvB9HLGFZRBqAQAAXIcjt7Aygi0sgVALAADgeoRbWBXBFl6PUAsAAOA+hFtYEcEWXo1QCwAA4H6EW1gNN4+C2+Xn5ysiIkKFhYWOh0QHBQXpn//8p+Li4hzTEWoBAAA861I3lMrIyFBiYqLOnTsnSSouLlZgYKBOnDihkJAQT5UMP8URW7hdSEiIMjMztXnzZsewsWPHat26dY5gS6gFAADwvEsduV23bp2CgoL02muvOaZv0aIFoRYeQbCFR9x+++26/fbbHe8nTZrk+DehFgAAwHtcKtyGhYVp+PDhHqsNKEGwhVcpCbXDhw8n1AIAAHiJknB77tw5R7gFvAnX2MIrXHvttbrmmmu0adMmSeLB3gAAAF4oNzdXtWrVknT+tOOjR4/qwIEDHq4KkAI8XQBQoiTUSuJILQAAgBe6cB/twn03wNM4FRleYezYsdq/f79efvllT5cCAACACnjiiSd03XXXeboMQBKnIsOL5OXlOU4/zs3NVVhYmIcrAgAAwIXYX4O34lRkAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAAAAAJZGsAUAAAAAWBrBFgAAAABgaQRbAAAAAIClEWwBAH7t0KFDSk5OVkxMjGrUqKF69eopMTFRGRkZeu6552Sz2cp9/e1vfyvV1qBBg7R79+4yl1PeuDVr1uiWW25RjRo1dMMNN2jevHmXrXnTpk1q3769atasqXr16umll16qwicHAMB3EGwBAH5r9+7datWqlTIzM/Xyyy9r8+bNWrlypTp16qSkpCQ9/vjjOnjw4EWvQYMGKSIiQg888ICOHTumGTNmyBjjaPenn37S/PnzLzlOknbt2qXu3burU6dOysrK0qhRozRkyBD961//KrfmkydPqkuXLqpfv76++eYbvfzyy3ruuec0a9Ys1/2hAADwcoGeLgAAAE8ZMWKEbDabNmzYoLCwMMfwpk2b6qGHHlJ4eLjCw8NLzTN//ny9//77WrZsmW688UadPn1a+/fv11133aWioiKlpqbqyy+/1NSpU1WzZs1yx0lSamqq/vCHP+jVV1+VJN10003697//rZSUFCUkJJRZ8/z583X27FnNnTtXwcHBatq0qbKysvTaa6/p4YcfdtFfCgAA70awBQD4pWPHjmnlypV64YUXSoXaEhERERcN++abbzR06FBNmTLFETxDQ0P1P//zP1q+fLl69uypwsJCZWZmKigoSJIuOW79+vWKj48vtYyEhASNGjWq3LrXr1+vO++8U8HBwaXmmTp1qo4fP64rr7yysn8KAAAsj1ORAQB+6ccff5QxRo0bN67Q9EeOHNGf//xn3X333Xr88ccdwwsKCjRx4kS98cYb6tixo2677TbFx8drw4YNlxwnnb++NyoqqtRyoqKidPLkSeXn55dZR3nzlIwDAMAfEWwBAH7pwuteL+fcuXO65557FBUVpbfffrvUuNOnTysqKkorV65U3bp1NXz4cM2dO1c7duy45DgAAOA8nIoMAPBLN954o2w2m7Kzsy877WOPPaadO3dq48aNqlmzZqlxkZGRSkpKKjXs+uuv1/XXXy9JlxwXHR2tw4cPlxp/+PBh1a5dWyEhIWXWUt48JeMAAPBHHLEFAPilyMhIJSQkaMaMGcrLy7to/IkTJyRJs2bN0ty5c7Vw4ULVrVv3km3OmzdPDRo0qPC4tm3bKiMjo9SwVatWqW3btuUuo23btlq7dq3OnTtXap5GjRpxfS0AwG8RbAEAfmvGjBkqKipSmzZttHDhQu3cuVPbtm3TtGnT1LZtW3355ZdKTk7WxIkTFRMTo0OHDpV65eTkVGv5w4cP188//6wnn3xS2dnZ+t///V99/PHHGj16tGOaN998U3FxcY73DzzwgIKDgzV48GBt2bJFH330kd544w399a9/rVYtAABYmc1U5iIjwIXy8vIcj9XIzc0t8y6lAOBsBw8e1AsvvKD09HQdPHhQ11xzjVq1aqXRo0fr3Xff1bx588qdd+DAgZccXxFr1qzR6NGjtXXrVtWtW1cTJkzQoEGDHOOfe+45zZs3T7t373YM27Rpk5KSkrRx40ZdffXVSk5O1tixY6tVBwBUBPtr8FYEW3gNvigBAAC8G/tr8FacigwAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAAAAACyNYAsAAAAAsDSCLQAAAADA0gi2AAAAAABLI9gCAMqVl5enadOmKS4uTtHR0QoODlZ0dLTi4uI0bdo0nT592tMler2CggIVFBR4ugyvR18DAFSHzRhjPF0EIJ3fqQkPD5ck5ebmKiwszMMVAf5t2bJlGjJkiA4dOiRJuuKKKxQZGaljx44pJydHkhQdHa3Zs2ere/funizVqxhjtG7dOqWmpmrhwoXKz8+XJIWEhOjee+/Vww8/rHbt2slms3m4Uu9BXwOsg/01eCuO2AIALjJr1iz17NlTR48e1ZAhQ/T9999r69at+uSTT7Rt2zZt2rRJQ4cO1dGjR9WzZ0/NmjXL0yV7hZ07d6pFixa64447lJaW5gi1kpSfn68FCxbojjvuUIsWLbRz504PVuo96GsAAGcg2AIASsnMzNSIESMUFhamlStX6u2331aLFi302muvqWXLlnrjjTfUvHlzzZo1SytXrlRoaKhGjBih1atXe7p0j8rKylLr1q2VnZ0tSSosLLxompJh2dnZat26tbKystxZotehrwEAnIVgCwBwKCwsVFJSkoqKijR//nzFx8dfcvr4+Hh9+OGHKioqUnJycplhzh8cOXJE8fHxysvLq9DfoLCwUHl5eYqPj9eRI0fcUKH3oa8BAJyJYOsEX3/9tbp27SpJysnJ0bBhwxQTE6NGjRqpVatWWrJkiWPaNWvWKCQkRLGxsYqNjVXTpk319ttvO8YPGTJEn332mSRp8eLF+s9//lNqWadPn1br1q116tQpSdK9996rdevWufojAvATGRkZys7OVmJiohITEys0T48ePZSYmKjs7GxlZma6uELvlJqaquPHj6uoqKjC8xQVFen48eOaOXOmCyvzXvQ1AL6KbOAZBFsnWLRokXr37i1jjLp166agoCDt2LFD27dv15w5c/TII49o+fLljukbNWqkrKwsZWVl6V//+pceffRRR2ecPXu2OnXqJKnszvvmm2+qV69eqlWrliTpmWee0VNPPeWmTwrA15Wc4jlgwIBKzde/f39J0qpVq5xek7c7e/aspk+fruLi4krPW1xcrGnTpuns2bMuqMy70dcA+CqygWcEeroAT3jwwQe1fft2nT17VvXq1dOcOXNUUFCg2NhYjRw5Uunp6crJydG0adPUrVs3SdL69ev1xBNP6NSpUzLGaPLkyerVq5ckaenSpVq1apUyMjK0Z88effbZZwoMPP+njY2N1fjx4zV58mRHWxc6efKkwsLCFBQUJEnq2LGjRo0apeDgYEe78+bN06OPPqohQ4Zo5syZ+vTTTx3zx8bG6ujRo9q2bZtuuummMj9vXl6eU/9+rnJhnVapGfA1u3btkiTVr19f1113nQ4cOHDRNFOnTtXUqVMd73//+9/r448/dszvb+vv8uXL9euvv1Z5/l9//VVLliwpcxvhy+hrgDVZdX/tUndv9rds4LOMHzpy5Ijj3y+++KIZNmyY2bVrl5Fk/vGPfxhjjFmxYoVp2LChMcaY3377zdSpU8esXbvWGGNMUVGR+e2334wxxuzYscO0a9fOGGPM1KlTTc+ePS9a3rfffmtq1qxpjDHms88+MzVr1jQ333yzuemmm0xwcLCZOXOmY9oOHTqYRYsWGWOMGThwoElJSXGM++WXX8xVV111Uft/+ctfzPTp08v9vJJ48eLFixcvXrx48fLbF9nA9/nlEdsFCxbo/fffV0FBgQoKCnT11VdLkmrWrKk+ffpIktq2bauffvpJ0vlfZBo1aqT27dtLkgICAhQZGSnp/041uJyQkBDHv0tON5Ckffv26fbbb1fr1q11yy23XLKNffv2KSoq6qLh0dHR2rdv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4ph2zZo1CgkJUWxsrGJjY9W0aVO9/fbbjvFDhgzRZ599JklavHix/vOf/5Ra1unTp9W6dWudOnVKknTvvfdq3bp1rv6IAIDLyMzMdITaynj55Zcd3/sAAOsjG3gOR2yradGiRerdu7eMMerWrZtatmypHTt2KDAwUFlZWerWrZuCgoLUrVs3SVKjRo2UlZUlSdq3b5+uv/569e3bV7Vq1Sp1k5HFixcrNjZWt912m2PYm2++qV69eqlWrVqSpGeeeUaPPfaY1q5d674PDAC4SEpKigIDAy95pLYsgYGBSklJUadOnVxUGQDAncgGnuOXR2zz8/N1//33q0mTJrr55pvVpUsX9ejRQwsWLHBM8+mnn+rWW2+VdP5Olk2aNFFsbKyaN2+ur776yjHd0qVL1atXL2VkZGjPnj167bXXFBh4/veC2NhYjR8/XpMnTy6zjpMnTyosLExBQUGSpI4dO2rx4sVavny5li5dqpdfflmxsbGOTj1z5kw98MADjvljY2N19OhRbdu2zbl/IABAhf38889atmxZpUOtdP605PT0dP38888uqAwAUBFkA9/gl0dsV65cqRMnTmjr1q2SpGPHjumbb77Rs88+6+gcM2bM0KOPPipJGjNmjLKzs/W73/1O586d05kzZyRJO3fuVO3atRUdHa333ntPrVq1UnBwcKlltW3bVmPGjHG83759u2JjY3X27Fn99NNPmj59umrWrFlqnm7duqlnz56KjY3VqFGjJEl79+5VTk6Orr/++ovaz8jI0E033VTmZ83Ly6viX8n9LqzVSnUD/oJ1tGyrV6+u1k2gjDHKyMhQVFSUE6uyNvoa4L2svH6GhYWVOdyfsoEv88tge/PNN2vbtm0aMWKEOnTooG7duulPf/qTRo0ape+++06RkZHasGGDPv74Y0lSXFycBgwYoMTERHXt2lUNGzaU9H+nGlxOSEiI49//fbrB7bffrtatW+uWW265ZBv79u0rc6cnOjpa+/btK3e+8PDwy9bnjdjBA7wb66hzPfzww3r44Yc9XYZXoq8B3stq62d5P0L6UzbwZX55KnJMTIy2bt2qu+66S19++aWaNWum48eP67HHHtP06dOVmpqqhx56SDVq1JAkLVy4UFOmTNG5c+fUrVs3paWlSTp/rntJ573lllv0zTff6Ny5c6WWtX79erVr167MOurWratb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", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -101,7 +102,7 @@ "ctrl = bb.add_register_from_dtype(\"ctrl\", QAny(2))\n", "ctrls = bb.split(ctrl)\n", "anc = bb.add_register_from_dtype(\"anc\", QBit())\n", - "# sys = bb.add_register_from_dtype(\"sys\", QBit())\n", + "sys = bb.add_register_from_dtype(\"sys\", QBit())\n", "\n", "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", @@ -288,9 +289,307 @@ "\n", "By now it should be clear what the next state will be, the CNOT added into this last state gives us\n", "$$ |c_0 \\otimes \\bar{c_1} \\oplus c_0 \\rangle = |c_0 \\otimes (\\bar{c_1} \\oplus 1) \\rangle = |c_0 \\otimes c_1\\rangle, $$\n", - "as it should. \n", + "as it should. " + ] + }, + { + "cell_type": "markdown", + "id": "7543b9a3", + "metadata": {}, + "source": [ + "## Beyond 2 Control Qubits with Segment Trees\n", "\n", - "Now that we know the ins and outs of how the 4 unitary Unary Iteration works, lets introduce some abstraction so that we can extend it to more unitaries than just 4. The key tool we will use for this is a binary tree where the leaf nodes are the integers we are selecting on, but they should be thought of as intervals `[0, 1)`, `[1, 2)`, `[2, 3)`, `[3, 4)`. When we combine these leaf nodes into the next level, this node will store the union of the two intervals beneath it. So our second level (the one above the leafs) has two nodes `[0, 2)` and `[2, 4)`. The root node, which combines these two, has one interval `[0, 4)`. Now the unary iteration cirquit can be thought of as first descending this tree from the root node to the `[0, 1)` node, followed by then moving to it's neighboring node `[1, 2)`, and so on. Our goal is to capture how the circuit above actually implements these moves. As our leaf nodes are organized (left to right) as 00 , 01, 10, 11, our walk across these nodes " + "Now that we know the ins and outs of how the 2 qubit Unary Iteration works it is clear that if we wanted to do an arbitrary controlled qubit we could just extend this process: Compute the $n$-qubit AND of the `ctrl` qubits, using `n-1` ancillas, uncompute, and then flip the `ctrl` qubits to change which qubit we are selecting on. After this circuit is laid out, we can go back and perform cancellations to reduce the number of gates significantly. Although this would work, adding gates just to cancel them later is rather inefficient and it would be better if we could introduce structure which would let us get the correct gates from the start. The abstraction we will use which lets us do this is called a Segment Tree, or an interval tree, which we will develop a small example of now.\n", + "\n", + "A [Segment Tree](https://en.wikipedia.org/wiki/Segment_tree) is a way of organizing partial information about a collection of segments of the 1D real line, so a single position axis. The partial information allows us to query which intervals in the set contain a given query point on the line. For us, our intervals will all be disjoint, unit-length intervals but the partial information used in the Segment Tree will allow us to perform iterated select queries efficiently. " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "bfa89b97", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ancillas: [True, True]\n", + "ancillas: [True, False]\n" + ] + }, + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "class SegmentTree():\n", + " ctrl_bitsize: int\n", + " def __init__(self, ctrl_bitsize: int):\n", + " \"\"\"A segment tree with unit intervals that can iterate through all possible configurations of ctrl bits.\n", + " \"\"\"\n", + " # We need ctrl_bitsize - 1 ancillas, initialize them to 0\n", + " self.ancilla_bits = [False for ix in range(ctrl_bitsize - 1)]\n", + " self.ctrl_bitsize = int(ctrl_bitsize)\n", + " \n", + " def query(self, ctrl, q):\n", + " assert len(q) == self.ctrl_bitsize\n", + " self.ancilla_bits[0] = (ctrl[0] == q[0]) and (ctrl[1] == q[1])\n", + " for ix in range(1, len(self.ancilla_bits)):\n", + " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", + " print(\"ancillas:\", self.ancilla_bits)\n", + " return self.ancilla_bits[-1]\n", + "\n", + "st = SegmentTree(3)\n", + "st.query([True, False, True], [True, False, True])\n", + "st.query([True, False, True], [True, False, False])" + ] + }, + { + "cell_type": "markdown", + "id": "be8e069a", + "metadata": {}, + "source": [ + "Currently this recomputes all of the ancillas with every single query, which is bad if we only change the lower order bits. Lets look at a small example before adding in support for storing prior queries. Here we can see that the first half of the ancillas, corresponding to the higher order bits, do not change from changing the query to " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "8d871905", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ancillas: [True, True, False, False]\n", + "ancillas: [True, True, True, True]\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st = SegmentTree(5)\n", + "st.query([True, True, False, False, False], [True, True, False, True, False])\n", + "st.query([True, True, False, False, False], [True, True, False, False, False])" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "7f2d1604", + "metadata": {}, + "outputs": [], + "source": [ + "class SegmentTree():\n", + " ctrl_bitsize: int\n", + " def __init__(self, ctrl_bitsize: int):\n", + " \"\"\"A segment tree that queries a `ctrl` register with `query`s to apply an operation `op[q]` on a system register.\n", + " \"\"\"\n", + " # We need ctrl_bitsize - 1 ancillas, initialize them to 0\n", + " self.ancilla_bits = [False for ix in range(ctrl_bitsize - 1)]\n", + " self.ctrl_bitsize = int(ctrl_bitsize)\n", + " self.prev_query = None\n", + " \n", + " def query(self, ctrl, q):\n", + " assert len(q) == self.ctrl_bitsize\n", + " if self.prev_query is None:\n", + " self.ancilla_bits[0] = (ctrl[0] == q[0]) and (ctrl[1] == q[1])\n", + " for ix in range(1, len(self.ancilla_bits)):\n", + " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", + " self.prev_query = q\n", + " else:\n", + " # find first index where they differ\n", + " first_diff_ix = None\n", + " for ix in range(len(q)):\n", + " if q[ix] != self.prev_query[ix]:\n", + " first_diff_ix = ix\n", + " break\n", + " if first_diff_ix is None:\n", + " # the two queries are equal, we can just use the previously computed ancillas\n", + " return self.ancilla_bits[-1]\n", + " if first_diff_ix <= 1:\n", + " # we can't reause anything.\n", + " self.prev_query = None\n", + " return self.query(ctrl, q)\n", + " for ix in range(first_diff_ix - 1, len(self.ancilla_bits)):\n", + " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", + " print(\"computing new values for ix = \", ix, \", ancilla_bits[ix] = \", self.ancilla_bits[ix])\n", + " self.prev_query = q\n", + " print(\"ancillas:\", self.ancilla_bits)\n", + " return self.ancilla_bits[-1]" + ] + }, + { + "cell_type": "markdown", + "id": "32c0eba9", + "metadata": {}, + "source": [ + "So now we see that modifying a query only a little bit only recomputes a few ancillas:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "20143006", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ancillas: [True, True, False, False]\n", + "computing new values for ix = 2 , ancilla_bits[ix] = True\n", + "computing new values for ix = 3 , ancilla_bits[ix] = True\n", + "ancillas: [True, True, True, True]\n", + "computing new values for ix = 3 , ancilla_bits[ix] = False\n", + "ancillas: [True, True, True, False]\n" + ] + }, + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st = SegmentTree(5)\n", + "st.query([True, True, False, False, False], [True, True, False, True, False])\n", + "st.query([True, True, False, False, False], [True, True, False, False, False])\n", + "st.query([True, True, False, False, False], [True, True, False, False, True])" + ] + }, + { + "cell_type": "markdown", + "id": "06807ef5", + "metadata": {}, + "source": [ + "We see in the above example that changing the lowest order bit in the query requires us to only change the last ancilla bit, which makes intuitive sense. \n", + "TODO: Should write something about how this actually encodes a Segment tree?\n", + "\n", + "Now that we have a data structure that can query the state of `ctrl` given `q` our next goal is to extend it to act on a quantum `ctrl` register and utilize ancilla *qubits*, not bits. The key point to remember is that the query is still classical. Now the first thing we have to do to update our boolean logic to be reversible, as we currently just set our classical `ancilla_bits` to whatever we need them to be. One thing to keep in mind is that the uncomputation works in reverse, if we have ancillas $[c_0 \\land c_1, c_0 \\land c_1 \\land c_2, c_0 \\land c_1 \\land c_2 \\land c_3]$ we would uncompute them as $\\to [c_0 \\land c_1, c_0 \\land c_1 \\land c_2, 0] \\to [c_0 \\land c_1, 0, 0]$. One of the key insights is that when we uncompute and then recompute the ancillas, the most significant ancilla can simply be updated instead of uncomputed. This is the $Toffoli(a,b,c) \\cdot I \\otimes X \\otimes I \\cdot Toffoli(a,b,c) = CNOT(a, c) \\cdot I \\otimes X \\otimes I$ gate reduction we implemented. " + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "cfce9823", + "metadata": {}, + "outputs": [], + "source": [ + "class SegmentTree():\n", + " ctrl_bitsize: int\n", + " def __init__(self, ctrl_bitsize: int):\n", + " \"\"\"A segment tree that queries a `ctrl` register with `query`s to apply an operation `op[q]` on a system register.\n", + " \"\"\"\n", + " # We need ctrl_bitsize - 1 ancillas, initialize them to 0\n", + " self.ancilla_bits = [False for ix in range(ctrl_bitsize - 1)]\n", + " self.ctrl_bitsize = int(ctrl_bitsize)\n", + " self.prev_query = None\n", + " \n", + " def query(self, ctrl, q):\n", + " assert len(q) == self.ctrl_bitsize\n", + " if self.prev_query is None:\n", + " self.ancilla_bits[0] = (ctrl[0] == q[0]) and (ctrl[1] == q[1])\n", + " for ix in range(1, len(self.ancilla_bits)):\n", + " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", + " self.prev_query = q\n", + " else:\n", + " # find first index where they differ\n", + " first_diff_ix = None\n", + " for ix in range(len(q)):\n", + " if q[ix] != self.prev_query[ix]:\n", + " first_diff_ix = ix\n", + " break\n", + " if first_diff_ix is None:\n", + " # the two queries are equal, we can just use the previously computed ancillas\n", + " return self.ancilla_bits[-1]\n", + " if first_diff_ix <= 1:\n", + " # we can't reause anything.\n", + " self.prev_query = None\n", + " return self.query(ctrl, q)\n", + " # Uncompute the ancillas we will need\n", + " for ix in range(len(self.ancilla_bits) - 1, first_diff_ix - 1, -1):\n", + " print('uncompute ix = ', ix)\n", + " self.ancilla_bits[ix] = (self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])) ^ (self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1]))\n", + " # Now the \"uncompute\" for the most significant ancilla is actually an update\n", + " self.ancilla_bits[first_diff_ix - 1] = self.ancilla_bits[first_diff_ix - 1] ^ self.ancilla_bits[first_diff_ix - 2]\n", + " print(\"ancillas after uncomputation: \", self.ancilla_bits)\n", + " for ix in range(first_diff_ix - 1, len(self.ancilla_bits)):\n", + " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", + " print(\"computing new values for ix = \", ix, \", ancilla_bits[ix] = \", self.ancilla_bits[ix])\n", + " self.prev_query = q\n", + " print(\"ancillas before returning:\", self.ancilla_bits)\n", + " return self.ancilla_bits[-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "cf12b7ae", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ancillas before returning: [True, True, False, False]\n", + "uncompute ix = 3\n", + "ancillas after uncomputation: [True, True, True, False]\n", + "computing new values for ix = 2 , ancilla_bits[ix] = True\n", + "computing new values for ix = 3 , ancilla_bits[ix] = True\n", + "ancillas before returning: [True, True, True, True]\n", + "ancillas after uncomputation: [True, True, True, False]\n", + "computing new values for ix = 3 , ancilla_bits[ix] = False\n", + "ancillas before returning: [True, True, True, False]\n" + ] + }, + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st = SegmentTree(5)\n", + "st.query([True, True, False, False, False], [True, True, False, True, False])\n", + "st.query([True, True, False, False, False], [True, True, False, False, False])\n", + "st.query([True, True, False, False, False], [True, True, False, False, True])" + ] + }, + { + "cell_type": "markdown", + "id": "f8900632", + "metadata": {}, + "source": [ + "Now that we have all the reversible logic implemented and the iterative queries implemented we can finally move on to using this to build a bloq that acts on **quantum** registers! The new difference now is that instead of " ] }, { From 0b790e4d75c513fd4de6a5f360d84a01056cee03 Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Thu, 1 Aug 2024 15:52:42 -0400 Subject: [PATCH 06/13] work work work work work --- .../bloqs/multiplexers/unary_iteration.ipynb | 171 ++++++++++++++++-- 1 file changed, 154 insertions(+), 17 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 2bc8645ed4..61f239e7c6 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -56,12 +56,12 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "id": "756a61d0", "metadata": {}, "outputs": [], "source": [ - "from qualtran import BloqBuilder, QUInt, QAny, QBit\n", + "from qualtran import BloqBuilder, QUInt, QAny, QBit, Bloq, Signature, CompositeBloq, Soquet\n", "from qualtran.bloqs.basic_gates.rotation import CZPowGate\n", "from qualtran.bloqs.basic_gates.cnot import CNOT\n", "from qualtran.bloqs.mcmt.and_bloq import And\n", @@ -69,7 +69,12 @@ "from qualtran.bloqs.basic_gates.x_basis import XGate\n", "from qualtran.drawing.musical_score import draw_musical_score, get_musical_score_data\n", "from qualtran.drawing import get_musical_score_data, draw_musical_score\n", - "import attrs" + "import attrs\n", + "\n", + "def int_to_bool_list(num, bitsize):\n", + " x = [bool(num & (1< Signature:\n", + " return Signature([Register('ctrl', QAny(self.ctrl_bitsize)), Register('anc', QAny(self.ctrl_bitsize - 1)), Register('sys', QAny(self.sys_bitsize))])\n", + " \n", + " def query(self, q, bb, ancs, ctrls) -> CompositeBloq:\n", + " assert len(q) == self.ctrl_bitsize\n", + " print('query: ', q, \" prev_query: \", self.prev_query)\n", + " if self.prev_query is None:\n", + " for ix in range(len(q)):\n", + " if q[ix] is False:\n", + " ctrls[ix] = bb.add(XGate(), q = ctrls[ix])\n", + " [ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", + " for ix in range(1, len(ancs)):\n", + " [ancs[ix - 1], ctrls[ix + 1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ancs[ix - 1], ctrls[ix + 1]], target=ancs[ix]) \n", + " self.prev_query = q\n", + " else:\n", + " # find first index where they differ\n", + " first_diff_ix = None\n", + " for ix in range(len(q)):\n", + " if q[ix] != self.prev_query[ix]:\n", + " first_diff_ix = ix\n", + " break\n", + " if first_diff_ix is None:\n", + " # the two queries are equal, so we don't have to update anything.\n", + " return\n", + " if first_diff_ix <= 1:\n", + " print(\"Cannot reuse.\")\n", + " # we can't reause anything, but we need to reset the control ancillas\n", + " for ix in range(self.ctrl_bitsize):\n", + " if q[ix] is False:\n", + " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", + " self.prev_query = None\n", + " return self.query(q, bb, ancs, ctrls)\n", + " # Need to flip the ctrl bits to match the new query pattern\n", + " for ix in range(first_diff_ix, self.ctrl_bitsize):\n", + " if q[ix] != self.prev_query[ix]:\n", + " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", + " # Uncompute the ancillas we will need\n", + " for ix in range(len(ancs) - 1, first_diff_ix - 1, -1):\n", + " [ancs[ix - 1], ctrls[ix + 1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ancs[ix - 1], ctrls[ix + 1]], target=ancs[ix])\n", + " # Now the \"uncompute\" for the most significant ancilla is actually an update\n", + " ancs[first_diff_ix - 2], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ancs[first_diff_ix - 2], target=ancs[first_diff_ix - 1])\n", + "\n", + " for ix in range(first_diff_ix - 1, len(ancs)):\n", + " [ancs[ix - 1], ctrls[ix + 1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ancs[ix - 1], ctrls[ix + 1]], target=ancs[ix])\n", + " self.prev_query = q \n", + " return\n", + " \n", + " def build_composite_bloq(self, bb: BloqBuilder, ctrl: SoquetT, anc: SoquetT, sys: SoquetT) -> Dict[str, 'SoquetT']:\n", + " queries = list(self.ops.keys())\n", + " queries.sort()\n", + " ctrls = bb.split(ctrl)\n", + " ancs = bb.split(anc)\n", + " for q_int in queries:\n", + " q_bools = int_to_bool_list(q_int, self.ctrl_bitsize)\n", + " self.query(q_bools, bb, ancs, ctrls)\n", + " [ancs[-1], sys] = bb.add(self.ops[q_int], q=[ancs[-1], sys])\n", + " ctrl = bb.join(ctrls)\n", + " anc = bb.join(ancs)\n", + " return {'ctrl': ctrl, 'sys': sys, 'anc': anc}" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "9086b08f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "query: [False, False] prev_query: None\n", + "query: [False, True] prev_query: [False, False]\n", + "Cannot reuse.\n", + "query: [False, True] prev_query: None\n", + "query: [True, False] prev_query: [False, True]\n", + "Cannot reuse.\n", + "query: [True, False] prev_query: None\n", + "query: [True, True] prev_query: [True, False]\n", + "Cannot reuse.\n", + "query: [True, True] prev_query: None\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABuYAAAJ/CAYAAACEKWVaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACH1ElEQVR4nOzdd5RV1fk/4HfmDh2xC7FEAyoWRFQ0gqIiCIqKihoVCxawocEakmjURGNMYlcsKBZEookVkSIiRqIkVmwURSERQexIkTIz5/cHP+brSJty59wpz7PWWYt7T7nvnLVnc+d8zt4nL0mSJAAAAAAAAIAqlZ/rAgAAAAAAAKAuEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHABQq3z22Wdx/vnnR8uWLaNBgwax1VZbxeGHHx7jx4+Pq666KvLy8ta4/P73vy91rFNPPTVmzZq12s9Z07oXX3wxdt9992jQoEFsu+228cADD6yz5nfeeSc6deoUDRs2jK222ir+8pe/VOAnB8idbPa9ANVRLr9jPvHEE3HQQQfFpptuGs2aNYsOHTrE2LFj11mz75h1Qy7b5r/+9a/YZ599YuONN45GjRrFDjvsEDfddNM6a9Y2gbpOMAcA1BqzZs2KPfbYI1544YX461//Gu+++26MGTMmOnfuHP37949LLrkk5s6du8py6qmnxgYbbBC9e/eOr7/+OgYNGhRJkpQc96OPPoqHH354resiImbOnBmHHnpodO7cOSZPnhwXXHBB9O3bd60XTr777rvo1q1bbL311vHGG2/EX//617jqqqti8ODBVXeiALIoG30vQHWW6++YL730Uhx00EExatSoeOONN6Jz585x+OGHx1tvvbXGmn3HrBty3TabNGkS5513Xrz00ksxderUuPzyy+Pyyy9fazvTNgEi8pIf9qwAADVYjx494p133onp06dHkyZNSq379ttvY4MNNlhln4cffjj69OkTzz77bHTv3j0WL14c11xzTbzxxhtRVFQU7du3j5dffjn+/Oc/R7t27da4rmPHjjFw4MB49tln47333is5/vHHHx/ffvttjBkzZrU133nnnXHZZZfFZ599FvXr14+IiF//+tfx1FNPxbRp07J3cgCqSDb6XoDqLNffMVdn5513juOOOy6uuOKK1a73HbNuqI5ts1evXtGkSZN46KGHVrte2wSIiAQAoBb46quvkry8vOTaa68t8z6vv/560qhRo+Svf/3rKuueffbZJJPJJPvvv3+ybNmyMq3r1KlTMmDAgFLb3nfffUmzZs3WWMPJJ5+cHHHEEaXee+GFF5KISL7++usy/ywAuZDtvheguqkO3zF/rKioKNlqq62S2267bY3b+I5Z+1XHtvnmm28mzZs3T+655541bqNtAiSJqSwBgFphxowZkSRJ7LDDDmXa/vPPP4+jjjoqjj766LjkkktK3l+yZElcccUVccstt8QBBxwQe++9d3Tt2jVeffXVta6LWPF8h+bNm5f6nObNm8d3330X33///WrrWNM+K9cBVGfZ6nsBqqvq8B3zx66//vpYuHBh/OIXv1hjHb5j1n7VqW1uueWW0aBBg2jfvn30798/+vbtu8Y6tE0Az5gDAGqJpByzcy9fvjyOOeaYaN68edxzzz2l1i1evDiaN28eY8aMiS233DLOPvvsuO++++KDDz5Y6zqAuihbfS9AdVXdvmMOHz48fv/738ff//732GyzzSr981FzVae2OXHixHj99dfjrrvuiptvvjn+9re/ZeVnBKitCnJdAABANmy33XaRl5dXpucS/PKXv4wPP/wwXnvttWjYsGGpdRtttFH079+/1HutWrWKVq1aRUSsdV2LFi1i3rx5pdbPmzcvmjVrFo0aNVptLWvaZ+U6gOosW30vQHVVHb5jrvTII49E37594x//+Ed07dp1rbX4jln7Vae2+bOf/SwiInbZZZeYN29eXHXVVXHCCSesthZtE8CIOQCglthoo42ie/fuMWjQoFi0aNEq67/99tuIiBg8eHDcd9998fjjj8eWW2651mM+8MADsc0225R5XYcOHWL8+PGl3hs3blx06NBhjZ/RoUOHeOmll2L58uWl9mndunVsuOGGa60PINeqou8FqE6qw3fMiIi//e1vcdppp8Xf/va3OPTQQ9dZt++YtV91aZs/VlxcHEuXLl3jem0TQDAHANQigwYNiqKiothrr73i8ccfjw8//DCmTp0at956a3To0CFefvnlOP/88+OKK66Ili1bxmeffVZqmT9/fqU+/+yzz46PP/44fvWrX8W0adPijjvuiL///e9x4YUXlmxz++23R5cuXUpe9+7dO+rXrx9nnHFGvP/++/Hoo4/GLbfcEhdddFGlagFIS677XoCqlut+bvjw4XHKKafEDTfcED//+c9Xe1zfMeumXLfNQYMGxTPPPBMffvhhfPjhhzFkyJC4/vrr46STTirZRtsEWI0EAKAWmTNnTtK/f/9k6623TurXr59sscUWSc+ePZMJEyYkp556ahIRa1z69OlT6c+fMGFC0q5du6R+/fpJy5Ytk/vvv7/U+iuvvDLZeuutS7339ttvJ/vuu2/SoEGDZIsttkiuu+66StcBkKZc970AVS2X/dz++++/zuP6jll35bJt3nrrrcnOO++cNG7cOGnWrFmy2267JXfccUdSVFRUso22CbCqvCQpx5NCAQAAAAAAgAoxlSUAAAAAAACkQDAHAAAAAAAAKRDMAQAAAAAAQAoEcwAAAAAAAJACwRwAAAAAAACkQDAHAAAAAAAAKRDMAQAAAAAAQAoEcwAAAAAAAJACwRwAAAAAAACkQDAHAAAAAAAAKRDMAQAAAAAAQAoEcwAAAAAAAJAC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ZiVfYsuqcePG1a7dQF10yCGHxC233BKPPfZYnHTSSSXv/3CEbbNmzUpGXa/0+OOPl+zvd3nFc2Lfe++9Sh/DuYTqS3+ZHa1bt670MQoLC2P77bd3PqEa02dmx/bbbx/vv/9+qZmTymu99daLzTffPCvXSWo67TI7tt9++0qHchErvhM4n5RXvXr1yrxtNq9j/tCPQ7mjjz66wseC8qhzU1luuOGG8eSTT8avf/3raNu2bey+++7x8ssvxy9/+cvo169ftGvXLiZPnrzWY7zwwgux7777luo8hg4dGq1atYpddtkltttuu9h2223jr3/9a3Tv3j2WLFkSDz/8cJx44omljvOLX/winnvuuZJ0f2323nvvWH/99ePcc88tNX3mMcccE2PHji15fcUVV8T//ve/uOWWW6Jdu3bRrl27uP/++0vWjxkzJo455ph1fl5tUptCuZVWhnNvv/12HHLIIRUa2dGtW7fYaaed4uSTT4633347xo4dG5dffnn0798/GjRoUAVVA1WtS5cuscMOO8TTTz8dzz77bJn2GTVqVDz99NOxww47uCvs/zvqqKMqdbEjk8nEUUcdlcWKgGzTX2ZHhw4dolmzZpU6Rl5eXvTo0SNLFQFVQZ+ZHT179qxUKFdQUBCHHXaYUO7/0y6zo0ePHmV6TM/arL/++rH33ntnqSJYvaq4jimUI6dy/ZC7muiss85K/vGPf6xxfVFRUXLppZcm7dq1S7766qusfObs2bOTFi1aJN99990qn7XHHnskn3zyyTqPsXTp0mSXXXZJvvjii6zUlJZ999036dOnT4X2XbRoUdK5c+ekSZMmyUsvvZTdwqqBSZMmJeutt16y7777JgsWLFjrtqt78OmsWbOSQw45JGnUqFGyySabJBdffHGyfPnyMu2bJEnyyiuvJBGRvP/++5X5MYAsev7555NMJpOst956yfPPP58kSZIsXLiw5KHKF110Ualt11tvvSSTySTjxo3LVcnVzuuvv17ph1e/8cYbuf4xgHXQX2bHKaeckhQUFFSor8zLy0v22muvXP8IQBnoMyvvyy+/TPLy8ir1HfORRx7J9Y9RrWiX2bHnnntWuG0WFBRU+JodLF26NImI5MEHH1xlXVVcx/yh5cuXJyeccEKSyWSSxx57rDI/BlRInRsxlw133XXXWked5efnx1/+8pd46623sjLv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YIMN4sorr4w99tgjtt1221Jh2qRJk2LfffeNXXfdNdq2bVtqFNyIESPiiCOOiPHjx8d///vfuPHGG6OgoCAiItq1axeXX355XH311SXbT58+PWbOnBlDhw6Np556Kr777ruSdQcccEBccskl0alTp2jVqlWcffbZERExZ86caN68eSxevLhk2969e5f8It19993Ru3fvknXbb7997LrrriV1/FD9+vWjW7duMXz48MqeSuoo4RwAAAAAdZVQjmz6cfbw+9//PubMmRPHHXdctGvXLiZPnhxXXXVVHH300dG9e/do06ZNzJ07d5XjPPXUU3HUUUfFhx9+GE899VQMHjw4mjRpEhErRtfdcMMNpXKKb7/9Np599tkYNmxYTJkyJWbMmFGy7tRTT42zzjorunTpEttvv3306tUrli1bFkuWLIkWLVrEJ598UrLtb3/72xg4cGBERNx3331x9NFHR15eXkRE7LPPPtGiRYuIiFh//fVjhx12iFmzZpXse8IJJ8Tdd9+dvZNZg6ya3NRyN998c2y66aYREXHdddfFVVddFb/+9a9j/vz5JQ1/zJgxMWDAgOjRo0d8/fXXceSRR8Zjjz0WnTp1iuLi4vj2228jIuLDDz+MZs2aRYsWLWLo0KGxxx57RP369Ut9XocOHeLiiy8ueT1kyJA4+eSTY/PNN48DDzwwHnnkkTjzzDNL1n/00UcxYcKEWL58eey0004xadKk6NChQ3Tt2jWGDRsWZ555ZsybNy+ef/75GDx4cEREvPjii3HhhReW+Rx06NAhRowYEeecc84at1m0aFGZj5cLP6yvutdanRQWFmblOCvDuc6dO0fXrl3j+eefj0022SQrxwYAAACA6qiqQrnCwkLXOMuoJl4XXhmQ/diasof7778/Hn300WjXrl1ErAjdJk2aFG+99VY0b958leMsWLAgpk2bFnvuuWf84x//iO222y423njjUtt06NAh5s6dG/PmzYvmzZvH8OHDo3v37tGiRYs46aST4r777iv1CKzJkyfHhAkTokGDBrHffvvF448/HieccEKcccYZceedd8a1114bS5cujfvvvz/+/e9/R8Tac4opU6bEpEmT4q677ipVU//+/ct1LmuLOhfMDR8+PB566KFYsmRJLFmypCRMaNiwYfTq1SsiVjSIjz76KCJWJNatW7eOTp06RUREfn5+bLTRRhHxf9NYrkujRo0iYkUHO3To0PjnP/8ZERGnn356XH311aWCueOOOy4KCgqioKAg2rVrFx999FF06NAhBgwYEP369Yszzzwz7rnnnjjhhBOiadOmERExe/bs1f5CrkmLFi1i9uzZa91m5bFrgvL87ETstddeWTnOzjvvHMOHD4+DDjoohgwZUnJnBAAAAADURkOGDIm33347xo0bl9VQbtiwYTFs2LCsHK8uqSnXhZMkWe37a8sefqxHjx5r/HlHjx4dBx98cMlItbVZmVUMGTIk/vSnP0XEipyie/fucfXVV0cmk4mIiKOOOioaN24cESuuJ6/MS84999zYa6+94sorr4x//OMfsddee8XWW28dEWvOKWbPnh1HHHFE3HXXXbHllluWvN+iRYv46quvYsmSJdGwYcN11l6b1KmpLP/1r3/FrbfeGqNGjYr33nsvbrzxxliyZElERDRo0KCk4WYymSgqKlrn8Z566qmSYG733XePN954I5YvX15qm0mTJkXHjh0jImLkyJHx7bffRvfu3WObbbaJ/v37x5tvvhnvvfdeyfY/bICZTKZkhNNee+0VjRs3jgkTJsTgwYNLJcmNGzcu+TnKYsmSJSW/gFBRc+fOjfPOOy+22GKLOProo3NdDgAAAABUqaOPPjq22GKLOO+881Y7nSBUlbUNpPnhAKLddtstPvzww/jqq69KbTNp0qTYeeedo1mzZjF58uR45513ol+/frHNNtvEYYcdFl9++WWMHj26ZPs15RRbbLFF7LfffvHoo4/GoEGD4rzzzivZbnU5xcrHIV1++eVx7LHHllq3ZMmSyGQyq8xCWBfUqRFz33zzTay33nqx8cYbx7Jly8o0f2nHjh3jww8/jIkTJ5YaTrp06dJYuHBhbLfddhERceCBB8ZWW20VF154Ydx8881RUFAQkydPjptuuikee+yxiFiRQt98880lz46LiBg4cGAMGTIkbrrppnXWMmDAgDjllFNip512iu23377k/bZt28b06dNjq622KtN5mDp1auy6665r3WbhwoVlOlauLFq0qCR9nzdv3hqHA1Pa2WefHR9//HGljzN37tzo3LlzLFy4MF588cXYdttts1AdAAAAAFRf2267bbz44otxwAEHROfOnWPChAnxk5/8pFLHLCgoiJNOOqnUFH+sWW26Lrym7KFZs2Yxf/78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AAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAsA5JksSkSZPi6quvLnnv6quvjkmTJkWSJDmsDKD6+e6772L48OFx3nnnlbz3wAMPxLx583JYFUD19N5778UNN9xQ8vqyyy6LcePGRXFxcQ6roq6bN29ePPDAAyWvzzvvvBg+fHh89913uSsKoBbJS1xNogZatGhRNG3aNCIiFi5cGE2aNMlxRQDVlz6zcqZNmxbnnntuTJgwITKZTBQVFUVElPy7c+fOcccdd8QOO+yQ40qBytJfVk6SJDF48OD4zW9+E998800UFBREYWFhyfqGDRvGZZddFgMHDox69erlsFIgG/SZlTN37ty46KKL4pFHHon8/PySIG5l39m2bdu48847o2PHjjmutGbRLitn+fLlcd1118W1114bS5YsKXl/ZbvccMMN47rrrot+/fpFXl5eDiutebTN7HEuqQ2MmAMAWIOXXnop9txzz5g4cWJEREko98N/T5w4sdQ2AHVRUVFRnHXWWXH22WfHN998ExFRKpSLiFiyZElcccUV0bNnz1i0aFEuygSoFqZNmxbt27ePxx57LCKi1Oi4lX3n+++/H/vvv3888sgjOamRumfRokXRs2fPuPLKK0uFchH/1y6/+eabkv/vf/i3EQDlI5gDAFiNd955J7p16xaLFy9e5eLyDxUWFsbixYvjoIMOinfeeSfFCgGqjwsvvDDuvffedW6XJEk899xzceyxx5qmDaiT5s6dG506dYp58+at9TtmUVFRFBUVRe/evWPUqFEpVkhdVFxcHMcee2w899xzZZqq/5577omLLroohcoAaifBHADAjyxbtiyOP/74KCwsLNOF4+Li4igsLIzjjz8+li9fnkKFANXHc889F7fddluZn7lZXFwco0ePjrvvvruKKwOoXpIkib59+8a3335bptFGSZJEXl5enHzyyfHVV1+lUCF11V133RWjR48u800zSZLErbfeGuPGjaviygBqJ8EcAMCP3HjjjTFt2rRyTc9SVFQU06ZNixtvvLEKKwOoXpYuXRpnnHFG5OeX/0/LSy65JD777LMqqAqgenr88cdj1KhRax0p92PFxcUxf/78+NWvflWFlVGXzZ07Ny655JJy75efnx+nn356LF26tAqqAqjdBHMAAD+QJEncfffdZR758eN9Bw8eXAVVAVRPEyZMiNmzZ1doWsrvv/++5PlKAHXBvffeW6EbGYqKiuLhhx+O77//vgqqoq577LHHVnmmXFkUFxfH7Nmz48UXX8x+UQC1nGAOAOAHpk+fHrNmzarw/h9//HFMnz49ewUBVGMjRoyIgoKCCu2bl5cXTz31VHYLAqimFi5cGOPHj6/w8zWXLl0a48ePz3JVEPHkk09GXl5ehfYtKCiIESNGZLkigNpPMFcJr7/+ehxyyCERETF//vw466yzomXLltG6devYY4894umnn15ln/vvvz/y8vJi4sSJWavj2GOPjUmTJkVExLPPPht77LFHNGjQIC644IJS291+++1x7bXXZu1zAaA2evrppyt0J/NK+fn5q/0OAFDbJEkSTzzxRLmmZPuh4uLi+Oc//xnz58/PcmUA1c9zzz1X4f4yQgBC1Zg/f3689NJLFQ6MCwsL44knnqjQbCNA9skrag7BXCU8+eSTceSRR0aSJNGjR4+oV69efPDBBzF9+vQYMmRInHPOOTFq1KhS+wwZMiS6dOkSQ4YMyUoNr776anz99dfRoUOHiIjYbrvt4r777otLL710lW3PPPPMGDJkiD98AWAtnnzyyUr9YZkkSTz55JNZrAigenrzzTdj3rx5lTpGYWFhjB07NksVAVRflRlhHLGiv3zyyScrHKDA6owZM6Zcz9Venc8++yzeeuutLFUEVIa8ouao+DeCGur777+PU089Nd59992oV69eNG/ePOrXrx+9e/eO3r17R8SKu5h+97vfxX/+85+4995748Ybb4z69etHUVFR3HvvvfHzn/88IlZ8qRo3blyMHz8+/vvf/8aECRNKvmS1a9cuLr/88rj66qujR48eEbFiaqyZM2fGa6+9FjvttFN899130axZs4iIOOCAA6J9+/bxn//8J+bMmRMHHXRQ3HXXXTFnzpzYbbfdYubMmdG4ceOIiOjdu3d06tQpzjnnnLj77rtL6o6I2H777SMiVntBsH79+tGtW7cYPnx4nHPOOWs8R4sWLarsaa5yP6yxJtQLkEv6zPKZMmVKpYO5KVOmONdQA+kvy+ftt9+u9DEKCgrinXfeiUMPPTQLFQFp0meWz9tvv12pEXMREV9++WXMnTs3Nthgg+wUVQtpl+XzzjvvREFBQaXb5ttvvx2tW7fOUlW1k7aZPTXxXDZp0mSN6+QV684raqWkjnniiSeSbt26lbz+6quvkueeey7p0KFDyXs9e/ZMhg4dmiRJkjRr1iyZM2dOkiRJsmzZsmTBggVJkiTJBx98kHTs2DFJkiT585//nPTs2XOVz3rzzTeThg0blry+9NJLk4EDByZJkiRHHXVUcvfdd5es23///ZMjjzwyWb58ebJ48eJkm222SV555ZUkSZKkd+/eJdt+9tlnyaabblpSR8uWLZN33313lc++8sorkwEDBqzy/oMPPpgcffTRaz1HEWGxWCwWi8VisVgsFovFYrFYLBaLpZLL2sgr1p1X1EZ1birLXXfdNaZOnRrnnntuPProo1GvXr046KCDYv78+fHWW2/Ff//733j11VfjF7/4RUREdOnSJU4++eS45ZZbYubMmdG0adOI+L9hoevSqFGjiFgx5cDQoUPjtNNOi4iI008/fZXhoccdd1wUFBREo0aNol27dvHRRx9FRMSAAQNi0KBBERFxzz33xAknnFBSx+zZs6N58+Zl/vlbtGgRs2fPLvP2AAAAAABA9skr6mZeUeemsmzZsmVMmTIlXnjhhXj++efjV7/6VUyePDl++ctfxm233RbNmzeP008/PRo0aBAREY8//ni88cYb8eKLL0aPHj3immuuieOPPz6eeuqpePDBByMiYvfdd49bb701li9fHvXq1Sv5rEmTJkXHjh0jImLkyJHx7bffRvfu3SMiIkmSmDNnTrz33nvRpk2biIho2LBhyb6ZTKZkGPlee+0VjRs3jgkTJsTgwYPj+eefL9mucePGsWTJkjL//EuWLCn55VuThQsXlvl4ubJo0aKSX/B58+atdTgwQF2nzyyfTTfdNL7//vtKHaNRo0bxxRdfZKkiIC36y/J56KGHKj3lTL169WLAgAFx1VVXZacoIDX6zPLZc889Y+rUqZU+zkcffVSuC551jXZZPldddVXccsstsXz58kod56677oqTTjopS1XVTtpm9tS2cymvWHdeURvVuWBu9uzZseGGG0bPnj3j4IMPjqeeeio++eSTOPnkk+MPf/hDFBUVxWuvvRYRK1LjWbNmRfv27aN9+/bx5Zdfxquvvhr7779/LFy4MLbbbruIiDjwwANjq622igsvvDBuvvnmKCgoiMmTJ8dNN90Ujz32WESseIjizTffHGeffXZJLQMHDowhQ4bETTfdtM66BwwYEKecckrstNNOJfOyRkS0bds2pk+fHltttVWZfv6pU6fGrrvuutZtalpn1qRJkxpXM0Cu6DPXbf311690MLf++us7z1DD6S/XrUWLFpU+RlFRUTRv3ty5hhpOn7lum222WaWDufz8/PjJT35SJy9gVoR2uW7NmzeP4uLirBzHuS47bTN7asO5lFesO6+ojercVJbvvvtu7LPPPrHrrrvGbrvtFieffHK0bds2GjduHL169Yp99tmnpNEUFRXF6aefHm3atIl27drFG2+8ERdddFE8/fTT0bNnz5Jj5ufnx+jRo2Pp0qWx/fbbR8uWLaNDhw7x+OOPx6677hpz5syJ8ePHx7HHHluqlhNPPDGGDRsWy5YtW2fdxxxzTCxcuDDOO++8Vd4fO3Zsyevx48fHlltuGTfeeGMMGTIkttxyyxgxYkTJ+jFjxsQxxxxToXMHAHVB9+7dSx6OXBEFBQVx8MEHZ7EigOppv/32i/z8yv1JWVxcHF26dMlSRQDV10EHHRSZTKbC++fl5cXPf/5zoRxZdeCBB0ZRUVGljpGfnx/77bdfliqCukdeUTfzirwkSZJcF1EdFBUVxR577BG33XZbdOrUaa3bHnzwwXHNNddE+/btV7t+yZIl0bdv3/j8889jxIgRpYZ8VtTrr78evXv3jmnTppX643fhwoXRsWPHmDRp0jrvDpgyZUqcddZZMXHixErXk2uLFi0qmbd24cKFNf7OCICqpM8snyeeeCKOPvroSh/jqKOOylJFQFr0l+XXqVOneOWVVyp8t32LFi1izpw5kZeXl+XKgKqmzyyfd999N9q2bVvh/fPz8+O6666LSy+9NItV1T7aZfkkSRI/+clPYt68eRXaPz8/P/bZZ5946aWXslxZ7aNtZk9dOZfyitqtzo2YW50RI0ZEq1atokOHDuts5BErUtw1NfKIFXOvDhs2LJ577rmsNPK+fftGr1694vbbb1/ljtSmTZvGTTfdFDNnzlzncT755JO4++67K10PANRm3bp1KzUHe3nVq1cvunXrlsWKAKqvXr16VXjfgoKC6NWrl1AOqBPatGkTW265ZYX3Ly4uLjUaArIhLy8vevXqVeEZQ5IkqdR3AWD15BW1nxFz1Eh15c4IgGzQZ5Zfjx494rnnniv3tC6ZTCa6d+8ezz77bBVVBlQl/WX5ffTRR7HttttWeP+xY8e6mQFqKH1m+V1wwQUxaNCgKCwsLNd+eXl50bJly5gxY0YVVVZ7aJflN3bs2EpNxT9jxoxo1apVFiuqnbTN7HEuqQ2MmAMA+JFrrrkmKnLvUpIkcc0111RBRQDVU6tWreL0008v93OTCgoKolOnTnHQQQdVUWUA1c+vfvWrCo1USJIk/vKXv1RBRbDi+Yf77rtvuUfNZTKZOOOMM4RyABUgmAMA+JHdd989fvWrX5VrerW8vLwYOHBg7LbbblVYGUD1c/3118cmm2xSrnCuoKAghgwZYhpLoE7ZfPPN45ZbbinXPplMJo4++mjTBVJl8vPz47777ouCgoIy/7+cyWRik002ieuvv76KqwOonQRzAACr8Yc//CG6d+9epj9O8/Ly4uCDD44//OEPKVQGUL1suOGGJQ+RX1c4l5+fHwUFBTF8+PDYbrvtUqoQoPo47bTT4pxzzinTtplMJnbaaacYMmRIFVdFXbfddtvF8OHDIz8/f5XnRf1YJpOJhg0bxogRI2KDDTZIp0CAWkYwBwCwGvXq1YsRI0ZEnz59IiJWe7F55Xt9+vSJp59+usIPTQeo6fbaa694+eWXY9NNN13jBb1MJhONGzeOUaNGxVFHHZVyhQDVQ15eXgwaNCiuuOKKyMvLW+33x5X96AEHHBD/+te/Yv3110+7TOqgo446KkaNGhWNGzde4402+fn5sdlmm8Urr7wSe+21V8oVAtQegjkAgDWoV69e3H///TF+/Pjo0KFDqT9QM5lMdOzYMV544YW4//77o169ejmsFCD3dt1115gxY0ZcccUVsfnmm5dat9FGG0X//v1j5syZnisH1Hl5eXnx+9//Pt588804+OCDo379+qXW7bLLLvH3v/89xo0bF82aNcthpdQ13bp1i5kzZ0b//v1jww03LLVu8803jyuvvDI+/PDDaNu2bY4qBKgd8pIkSXJdBJTXokWLomnTphERsXDhwmjSpEmOKwKovvSZ2fPdd9/F9OnTIyKidevWLpRALaO/zJ4kSeLjjz+OL774ItZff/1o3br1OqfGAmoWfWb2LFmyJKZMmRLLly+Pli1bxqabbprrkmos7TJ7iouLY/r06TF//vzYdNNNo2XLlp4NWwnaZvY4l9QG5lsCACijZs2axZ577pnrMgCqvby8vGjVqlW0atUq16UAVHsNGzaM3XffPddlQCn5+fmx44475roMgFrJLYsAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcQCUVFRVFx44do1evXqXenz9/fmy11VZx2WWX5agygOpHn5k9ziUAAADUPII5gErKZDLxwAMPxJgxY+Lhhx8uef/888+PjTbaKK688socVgdQvegzs8e5BAAAgJqnINcFANQG22+/fVx33XVx/vnnx4EHHhivvvpqPPLII/Haa69F/fr1c10eQLWiz8we5xIAAABqlrwkSZJcFwHltWjRomjatGlERCxcuDCaNGmS44ogIkmSOPDAAyOT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xfDhw+Occ86pzKmuWRKoYv/4xz+SiEiuuuqqcu+7//77JwMGDCh53a9fv6Rbt26ltlm0aFESEcmoUaPWuu9KDz74YBIRFovFYrFYLBaLxWKxWCwWi8VS7uWVV15J5Trm2hQWFiYnn3xykp+fn7z++uvl2rc6eOWVV5K8vLykb9++SVFRUVaO2adPn6SgoCDn7eOHy7p8/vnnJf/+05/+lJx11lnJzJkzk4hIHnvssSRJkmT06NHJ9ttvnyRJknz11VfJZpttlrz00ktJkiRJUVFR8tVXXyVJkiQffPBB0rFjxyRJkuTPf/5z0rNnz1U+780330waNmxY8vrSSy9NBg4cmCRJkhx11FHJ3XffXbJu//33T4488shk+fLlyeLFi5NtttmmpO337t27ZNvPPvss2XTTTZMFCxYkSZIkLVu2TN59991VPvvKK69c4/X6o48+ep3nqjYxLpQq16hRo4hYMaIjSZIcVwMAAAAAULMVFhbGN998E/Xq1SvTM+qqmwYNGkRBQUF89dVXlXo0R003fPjwaN++fbRp0ybuvffemDx5ckRENGzYMHr16hURER06dIiPPvooIlaMlmvdunV06tQpIiLy8/Njo402ioj/m8ZyXVZery8sLIyhQ4fGaaedFhERp59++irTWR533HFRUFAQjRo1inbt2pXUMWDAgBg0aFBERNxzzz1xwgknRNOmTSMiYvbs2aVGiq5LixYtYvbs2WXevjYwlSVV7tBDD43BgwfHmWeeGRERt912W4Wf69GiRYt49dVXS703b968knXl8fXXX9fI/7TIvcsuuyxuueWWeOihh+KAAw4o9eXhj3/8Y9xzzz1xzjnnxMCBA0vez2QyMWHChDjllFPiggsuiGuuuSYXpVNLffnll7HNNttU+jht27aNV155pfIFwQ/oM7PHucyOq6++Om688cZKT2W58o9PgNqsefPmlZ4OrGnTplmZEhNWOvXUU+OJJ56o9HSWL7zwQuy1115Zqoq6YurUqbHnnnuWadtsXsf8saVLl8YxxxwT48aNi6effjp22WWXSh0vF3bfffd44oknolevXnHcccfFo48+GvXq1av0cffcc88YN25cFiqsev/617/i1ltvjUmTJsVmm20WI0aMiCuuuCIiVgSXK6+hZzKZMoWXTz31VDz44IMRseL83nrrrbF8+fJS53XSpEnRsWPHiIgYOXJkfPvtt9G9e/eIiEiSJObMmRPvvfdetGnTJiJWBIQrZTKZkmfP7rXXXtG4ceOYMGFCDB48OJ5//vmS7Ro3bhxLliwp83lYsmRJSVhYVwjmSEW/fv0iIiodznXo0CH++Mc/xueffx6bbbZZRESMGzcumjVrFjvttFO5jtWkSRPBHBVyyCGHxC233BKPPfZYnHTSSaXWrZyDuVmzZrH11luXWvf444+X7L+u+aWhPBo0aBCNGjWK77//vsLHyGQy0bJlS22TrNNnZo9zmR2tWrUq+WOyssdxPoHabsstt4zp06dX+hj6S7LpZz/7WeTn51c6mNtuu+20Tcpt5fO0yiKb1zF/6Meh3MpQpSY67LDDsh7OZTKZGvO7/c0338R6660XG2+8cSxbtizuvvvude7TsWPH+PDDD2PixInRqVOnKC4ujm+//TaWLl0aCxcujO222y4iIg488MDYaqut4sILL4ybb745CgoKYvLkyXHTTTfFY489FhERQ4YMiZtvvjnOPvvskuMPHDgwhgwZEjfddNM6axkwYECccsopsdNOO5U8Ry5ixY3f06dPj6222qpM52Hq1Kmx6667lmnb2sJUlqSmX79+MXjw4Bg0aFCcf/75FZrWslu3brHTTjvFySefHG+//XaMHTs2Lr/88ujfv380aNCgCqqGVXXp0iV22GGHePrpp+PZZ58t0z6jRo2Kp59+OnbYYYc48MADq7hC6pqCgoI45JBDIpPJVPgYRUVFcfjhh2exKlhBn5k9zmV2HHLIIZWeXr1p06ax7777ZqkigOrryCOPjIKCit/TXVBQUKYptaA8Dj300ErfZLPzzjvHlltumaWKYPWq4jpmbQrlVloZzo0cOTKOO+64Ss9sUZMcfPDB0bp165KpKdu1a7fOfTbccMN48skn49e//nW0bds2dt9993j55Zfj6aefjp49e5Zsl5+fH6NHj46lS5fG9ttvHy1btowOHTrE448/HrvuumvMmTMnxo8fH8cee2yp45944okxbNiwWLZs2TprOeaYY2LhwoVx3nnnrfL+2LFjS16PHz8+ttxyy7jxxhtjyJAhseWWW8aIESNK1o8ZMyaOOeaYdX5ebSKYI1WVDecymUyMHDkyMplMdOjQIU466aQ45ZRT4g9/+EMVVQyrKigoiNtvvz0ymUyccMIJMX78+LVuP378+Dj++OMjk8nEbbfdVqk/bGFNjjjiiErNyZ6XlxeHHnpoFiuCFfSZ2eNcZseWW25ZqbsxCwoK4tBDD83KNDsA1V3Pnj0rFYAUFhaWukgI2bDPPvuUzBZQEZlMpuS5TVCVsn0dszaGcivV1XCuXr168eijj8aMGTPiP//5T/zxj3+MyZMnxzbbbBPffvttyXZNmzYtdR197733jpdffjneeeedmDx5chx++OHx1FNPrXIzzAYbbBD33HNPfPzxxzFlypQ4+uij45JLLoklS5bE5ptvHosXL46NN9641D5t27aNL774IurXrx8vvvhiqWM+9thjceqpp5a8njx5cmy66aarXE867bTTYuzYsSXTYXfp0iVmz54d3333XSxYsCBmz55d8v1gypQpUVhYWOdufBTMkbrKhnNbb711jBo1KhYvXhxffPFFXH/99S40kbouXbrEoEGDYtGiRdG9e/c499xz4/3334/+/fvHxIkT4+yzz44pU6ZE//79o3v37rFo0aIYNGhQdO3aNdelU0v16NGjws/vzMvLi/bt25frwbxQHvrM7HEus6NXr14VHmVcWFho9AdQZ/z85z+PjTbaqML7b7TRRvHzn/88ixXBiptkjjjiiApfCyoqKoojjjgiy1XB6mXrOmZtDuVWqqvhXLaMGTMm2rdvv8b1DRs2jGHDhsVzzz1X6rlxFdW3b9/o1atX3H777ZGfXzpmatq0adx0000xc+bMdR7nk08+KdMUnrVOAjkyePDgJCKS/v37J8XFxavdZv/990/q1auXNGnSJHnnnXfKdNxhw4YlTZo0SfLz85MBAwassv7BBx9MIiJZunRpZcqHJEmSZOTIkUnz5s2TiEgiItlggw2Sli1bJhtssEHJe82bN09GjhyZ61KpA7p06ZIUFBSUtL2yLnl5eclNN92U6/KpA/SZ2eNcVs7777+f5OXllbu/jIikcePGyTfffJPrHwEgNf37908ymUy5+8tMJpP0798/1+VTS40cObJC/4/n5+cnW2+99RqvQ8G6vP/++0lEJK+88soq66riOmaSJMmSJUuSww47LGnQoEEyZsyYypRfIzzzzDNJvXr1kqOOOipZtmxZufbt06dPsu+++1ZRZZA9eUlSyQcsQCXcc889ceaZZ0b//v3jtttuW2W0x6effhrff/99RET89Kc/jfr166/zmAsWLIh58+ZFxIrhuptsskmp9UOHDo0+ffrE0qVLy3Q8WJdFixbFvffeGyNGjIj33nsvvvnmm9hwww2jTZs2ccQRR8QZZ5xRYx46S802bdq02GWXXco13VAmk4nWrVvHW2+9pU8kFfrM7HEuK+eiiy6KW265JYqLi8u13x133BHnnHNOFVUFUP189dVXsd1228W3335b5hlv8vLyYsMNN4wPP/ywUiPuYE2SJInDDjssnnvuuXJPtzpu3DizCVBhU6ZMiZ133jleeeWV6NChQ6l1VXEdsy6MlFudkSNHRq9eveKwww6LRx99tMzTyJ966qnx0UcfxcSJE6u4QqgcwRw5t65wLtsEc0BtdsMNN8Qll1xSpm3z8vKioKAg/v3vf8fuu+9exZUBVC+LFi2K3XbbLWbOnFmmC3qZTCb222+/eP7551eZqgWgtnvqqafiqKOOKvc+pgukKn366aexyy67xHfffVem523n5+dHv3794q677kqhOmqrtQVz2VZXQ7mVKhLOCeaoKfxFSc5V9plzAPyfiy66KC644IJ1bpefnx/16tWLf/zjH0I5oE5q0qRJjBkzJrbYYot1PucjPz8/dt9993jssceEckCddOSRR8att95aphtp8/Ly4rbbbhPKUeW22GKLGDNmTKy33nrrfHZsXl5e9OzZM2655ZaUqoPKqeuhXIRnzlG7GTFHtbG2kXNjx46NZ599NiufM3Xq1Hj++eeNmANqrSRJYtCgQTFw4MBYunRpqbtHM5lMFBcXxzbbbBMPPfRQ7LPPPjmsFCD3Pv/88+jTp0+MGTMmCgoKSo2eW/m6T58+cccdd0Tjxo1zWClA7j3xxBNx5plnxjfffBNJkpTcWJuXlxd5eXmx0UYbxd133x29evXKcaXUJdOnT4/evXvHm2++GZlMptTfPytvvrn00kvj6quvXmeAB+uycsTcMcccEz/5yU+ycsxTTz211A2zQrnS1jZy7tVXX41hw4aVvB43blxssskmRsxR7QnmqFbWFM799Kc/jaVLl0bz5s0jIqK4uDg++OCDiIjYfvvty33ncocOHeKuu+6q8mkzAXLp888/j7vuuitGjhwZr732WkRE9OjRI3r16hUnn3yymxMAfmD8+PHx0EMPxYMPPhgREdtuu20cfPDBceqpp8Yee+yR4+oAqo8FCxbEPffcE88880y8+OKLERFxwAEH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m3Tv4i9SX18flZWVCSaCiA0bNsTy5ctbXMyVlpa6yIY205bnMZVz0H4o5khNS5evLCsri169em13VfP5558fEydO/Nznb7uJd7du3RLJDbStRYsWxQsvvBCnnHJKnHLKKU3aZuzYsXHKKafECy+8EIsXL27jhDuGefPmtehK5m2y2awvp0CHUFVVFe+9916Lt8/n8/HMM89ETU1NgqmggXFRchzLZDz88MMtnmEc0VCAPPzww8kFgmi4b2RrVvvI5XLx8MMPK+BpE219HlM5B+2DYo5UJHlPuRkzZsTUqVOjX79+CSYECmXbUkHnnntus7Y755xzIiLiiSeeSDzTjqa2tjaqq6tb9eW0vr7eCSigQ1i6dGmrZhhHNJRzTz75ZEKJ4GPGRclxLJOxePHiVpUXuVwuFi1alGAiaPgsb01hHNFwnmrVqlUJJYIv1hbnMZVzsONr3acYNEGSpVySNm/eHJs3by50DOjw1qxZExERe++9d/Tu3TveeOONzzznhhtuiBtuuKHx5759+8acOXMat+/o/y+/9dZbiexnw4YNHf5YAu3f+vXro6SkpFVLs23bj/dMkmZclBzHMhnvv/9+q/fxwQcfOJYkasOGDa3+HI9o+B613377JZCIjqSurq7QESLi43KuvLw8Jk6cGA888EB06tSp0LGAJlLM0eZmzJgRVVVV8Ze//KVoSrmIMOMOiszRRx/d5Oe+9tprMWTIkIiImDt3bsydO7etYnUoq1evjh49ehQ6BsAO4eKLL46LL7640DFop4yLkuNYFl5dXZ0xJkVp9OjRhY4ArTJ27Ni444474sILL4y5c+fGmWeeWehIQBNZypI2d/LJJ8cuu+wSV111Vfz3v/8tdBwAAAAAgB3a2rVr4/rrr4+99947jj322ELHAZrBjDna3FFHHRWPP/54jBo1Kk466aR47LHHYueddy50rHj11Vdjzz33LHQM6PAWLlwYp556aowdOzb++Mc/bvfYlVdeGTNmzIgf//jHcc0112z32JlnnhkVFRXxyCOPxIgRI9KMXHQ2btwYffr0afV+jjzyyFi6dGkCiQCK13XXXRc33HBDq+6ZFBFx3333xYQJExJKBQ2Mi5LjWCZjr732avUFtrvsskusW7cuoUQQMWnSpHjwwQdbvZzl0qVLi2plJ3YMf/vb32LkyJGFjhFr166NYcOGRS6X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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qualtran.drawing._show_funcs import show_bloq\n", + "\n", + "\n", + "cbloq = UnaryIteration()\n", + "cbloq.ctrl_bitsize = 2\n", + "cbloq.sys_bitsize = 1\n", + "ops = dict()\n", + "for ix in range(4):\n", + " ops[ix] = CZPowGate(exponent=float(ix))\n", + "cbloq.set_ops(ops)\n", + "msd = get_musical_score_data(cbloq.decompose_bloq())\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.set_figwidth(18)\n", + "fig.set_figheight(7)\n" ] }, { From 2c00887b7a989fdd79442d027fccbf001f25e213 Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Thu, 8 Aug 2024 18:12:34 -0400 Subject: [PATCH 07/13] it works --- .../bloqs/multiplexers/unary_iteration.ipynb | 171 +++++++++++++----- 1 file changed, 130 insertions(+), 41 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 61f239e7c6..77560e5d54 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -499,7 +499,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 3, "id": "cfce9823", "metadata": {}, "outputs": [], @@ -521,6 +521,7 @@ " for ix in range(1, len(self.ancilla_bits)):\n", " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", " self.prev_query = q\n", + " return\n", " else:\n", " # find first index where they differ\n", " first_diff_ix = None\n", @@ -599,12 +600,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 61, "id": "5605cc96", "metadata": {}, "outputs": [], "source": [ - "from typing import Dict\n", + "from typing import Dict, List\n", "from qualtran import BloqBuilder, Register\n", "from qualtran._infra.composite_bloq import SoquetT\n", "from numpy import ndarray\n", @@ -613,6 +614,7 @@ " prev_query = None\n", " sys_bitsize: int\n", " ops: Dict[int, Bloq]\n", + " ctrl_inversions: List[bool] = None\n", "\n", " def set_ops(self, ops):\n", " self.ops = ops\n", @@ -623,6 +625,8 @@ " \n", " def query(self, q, bb, ancs, ctrls) -> CompositeBloq:\n", " assert len(q) == self.ctrl_bitsize\n", + " if self.ctrl_inversions is None:\n", + " self.ctrl_inversions = [False for _ in range(self.ctrl_bitsize)]\n", " print('query: ', q, \" prev_query: \", self.prev_query)\n", " if self.prev_query is None:\n", " for ix in range(len(q)):\n", @@ -631,38 +635,62 @@ " [ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", " for ix in range(1, len(ancs)):\n", " [ancs[ix - 1], ctrls[ix + 1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ancs[ix - 1], ctrls[ix + 1]], target=ancs[ix]) \n", - " self.prev_query = q\n", - " else:\n", - " # find first index where they differ\n", - " first_diff_ix = None\n", " for ix in range(len(q)):\n", - " if q[ix] != self.prev_query[ix]:\n", - " first_diff_ix = ix\n", - " break\n", - " if first_diff_ix is None:\n", - " # the two queries are equal, so we don't have to update anything.\n", - " return\n", - " if first_diff_ix <= 1:\n", - " print(\"Cannot reuse.\")\n", - " # we can't reause anything, but we need to reset the control ancillas\n", - " for ix in range(self.ctrl_bitsize):\n", - " if q[ix] is False:\n", - " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", - " self.prev_query = None\n", - " return self.query(q, bb, ancs, ctrls)\n", - " # Need to flip the ctrl bits to match the new query pattern\n", - " for ix in range(first_diff_ix, self.ctrl_bitsize):\n", - " if q[ix] != self.prev_query[ix]:\n", + " if q[ix] is False:\n", + " ctrls[ix] = bb.add(XGate(), q = ctrls[ix])\n", + " self.prev_query = q\n", + " return\n", + " # now we need to find where the previous and current query differ\n", + " first_diff_ix = None\n", + " for ix in range(len(q)):\n", + " if q[ix] != self.prev_query[ix]:\n", + " first_diff_ix = ix\n", + " break\n", + " if first_diff_ix is None:\n", + " # the two queries are equal, so we don't have to update anything.\n", + " return\n", + " \n", + " for ix in range(len(ancs) - 1, first_diff_ix - 1, -1):\n", + " print(\"uncompute ix: \", ix)\n", + " if ix == 0:\n", + " if self.prev_query[ix + 1] is False and self.ctrl_inversions[ix + 1] is False:\n", + " ctrls[ix + 1] = bb.add(XGate(), q=ctrls[ix + 1])\n", + " if self.prev_query[ix] is False and self.ctrl_inversions[ix] is False:\n", " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", - " # Uncompute the ancillas we will need\n", - " for ix in range(len(ancs) - 1, first_diff_ix - 1, -1):\n", - " [ancs[ix - 1], ctrls[ix + 1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ancs[ix - 1], ctrls[ix + 1]], target=ancs[ix])\n", - " # Now the \"uncompute\" for the most significant ancilla is actually an update\n", - " ancs[first_diff_ix - 2], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ancs[first_diff_ix - 2], target=ancs[first_diff_ix - 1])\n", - "\n", - " for ix in range(first_diff_ix - 1, len(ancs)):\n", - " [ancs[ix - 1], ctrls[ix + 1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ancs[ix - 1], ctrls[ix + 1]], target=ancs[ix])\n", - " self.prev_query = q \n", + " [ctrls[0], ctrls[1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[ix])\n", + " if self.prev_query[ix + 1] is False and self.ctrl_inversions[ix + 1] is False:\n", + " ctrls[ix + 1] = bb.add(XGate(), q=ctrls[ix + 1])\n", + " if self.prev_query[ix] is False and self.ctrl_inversions[ix] is False:\n", + " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", + " else:\n", + " if self.prev_query[ix + 1] is False and self.ctrl_inversions[ix + 1] is False:\n", + " ctrls[ix + 1] = bb.add(XGate(), q=ctrls[ix + 1])\n", + " [ctrls[ix + 1], ancs[ix - 1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ctrls[ix + 1], ancs[ix - 1]], target=ancs[ix])\n", + " if self.prev_query[ix + 1] is False and self.ctrl_inversions[ix + 1] is False:\n", + " ctrls[ix + 1] = bb.add(XGate(), q=ctrls[ix + 1])\n", + " self.ctrl_inversions[ix + 1] = False\n", + " \n", + " print(\"first diff ix, \", first_diff_ix)\n", + " if first_diff_ix > 0:\n", + " ctrls[first_diff_ix], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ctrls[first_diff_ix], target=ancs[first_diff_ix - 1])\n", + " self.ctrl_inversions[first_diff_ix] = True\n", + " for ix in range(first_diff_ix + 1, self.ctrl_bitsize): \n", + " print(\"compute ix: \", ix)\n", + " if ix == 1:\n", + " if q[ix] is False:\n", + " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", + " [ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", + " if q[ix] is False:\n", + " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", + " else:\n", + " if q[ix] is False:\n", + " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", + " print(\"ctrls: \", ctrls)\n", + " print(\"ancs: \", ancs[ix - 1])\n", + " [ctrls[ix], ancs[ix - 2]], ancs[ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[ix], ancs[ix - 2]], target=ancs[ix-1])\n", + " if q[ix] is False:\n", + " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", + " self.prev_query = q\n", " return\n", " \n", " def build_composite_bloq(self, bb: BloqBuilder, ctrl: SoquetT, anc: SoquetT, sys: SoquetT) -> Dict[str, 'SoquetT']:\n", @@ -681,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 62, "id": "9086b08f", "metadata": {}, "outputs": [ @@ -691,19 +719,18 @@ "text": [ "query: [False, False] prev_query: None\n", "query: [False, True] prev_query: [False, False]\n", - "Cannot reuse.\n", - "query: [False, True] prev_query: None\n", + "first diff ix, 1\n", "query: [True, False] prev_query: [False, True]\n", - "Cannot reuse.\n", - "query: [True, False] prev_query: None\n", + "uncompute ix: 0\n", + "first diff ix, 0\n", + "compute ix: 1\n", "query: [True, True] prev_query: [True, False]\n", - "Cannot reuse.\n", - "query: [True, True] prev_query: None\n" + "first diff ix, 1\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABuYAAAJ/CAYAAACEKWVaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACH1ElEQVR4nOzdd5RV1fk/4HfmDh2xC7FEAyoWRFQ0gqIiCIqKihoVCxawocEakmjURGNMYlcsKBZEookVkSIiRqIkVmwURSERQexIkTIz5/cHP+brSJty59wpz7PWWYt7T7nvnLVnc+d8zt4nL0mSJAAAAAAAAIAqlZ/rAgAAAAAAAKAuEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHABQq3z22Wdx/vnnR8uWLaNBgwax1VZbxeGHHx7jx4+Pq666KvLy8ta4/P73vy91rFNPPTVmzZq12s9Z07oXX3wxdt9992jQoEFsu+228cADD6yz5nfeeSc6deoUDRs2jK222ir+8pe/VOAnB8idbPa9ANVRLr9jPvHEE3HQQQfFpptuGs2aNYsOHTrE2LFj11mz75h1Qy7b5r/+9a/YZ599YuONN45GjRrFDjvsEDfddNM6a9Y2gbpOMAcA1BqzZs2KPfbYI1544YX461//Gu+++26MGTMmOnfuHP37949LLrkk5s6du8py6qmnxgYbbBC9e/eOr7/+OgYNGhRJkpQc96OPPoqHH354resiImbOnBmHHnpodO7cOSZPnhwXXHBB9O3bd60XTr777rvo1q1bbL311vHGG2/EX//617jqqqti8ODBVXeiALIoG30vQHWW6++YL730Uhx00EExatSoeOONN6Jz585x+OGHx1tvvbXGmn3HrBty3TabNGkS5513Xrz00ksxderUuPzyy+Pyyy9fazvTNgEi8pIf9qwAADVYjx494p133onp06dHkyZNSq379ttvY4MNNlhln4cffjj69OkTzz77bHTv3j0WL14c11xzTbzxxhtRVFQU7du3j5dffjn+/Oc/R7t27da4rmPHjjFw4MB49tln47333is5/vHHHx/ffvttjBkzZrU133nnnXHZZZfFZ599FvXr14+IiF//+tfx1FNPxbRp07J3cgCqSDb6XoDqLNffMVdn5513juOOOy6uuOKK1a73HbNuqI5ts1evXtGkSZN46KGHVrte2wSIiAQAoBb46quvkry8vOTaa68t8z6vv/560qhRo+Svf/3rKuueffbZJJPJJPvvv3+ybNmyMq3r1KlTMmDAgFLb3nfffUmzZs3WWMPJJ5+cHHHEEaXee+GFF5KISL7++usy/ywAuZDtvheguqkO3zF/rKioKNlqq62S2267bY3b+I5Z+1XHtvnmm28mzZs3T+655541bqNtAiSJqSwBgFphxowZkSRJ7LDDDmXa/vPPP4+jjjoqjj766LjkkktK3l+yZElcccUVccstt8QBBxwQe++9d3Tt2jVeffXVta6LWPF8h+bNm5f6nObNm8d3330X33///WrrWNM+K9cBVGfZ6nsBqqvq8B3zx66//vpYuHBh/OIXv1hjHb5j1n7VqW1uueWW0aBBg2jfvn30798/+vbtu8Y6tE0Az5gDAGqJpByzcy9fvjyOOeaYaN68edxzzz2l1i1evDiaN28eY8aMiS233DLOPvvsuO++++KDDz5Y6zqAuihbfS9AdVXdvmMOHz48fv/738ff//732GyzzSr981FzVae2OXHixHj99dfjrrvuiptvvjn+9re/ZeVnBKitCnJdAABANmy33XaRl5dXpucS/PKXv4wPP/wwXnvttWjYsGGpdRtttFH079+/1HutWrWKVq1aRUSsdV2LFi1i3rx5pdbPmzcvmjVrFo0aNVptLWvaZ+U6gOosW30vQHVVHb5jrvTII49E37594x//+Ed07dp1rbX4jln7Vae2+bOf/SwiInbZZZeYN29eXHXVVXHCCSesthZtE8CIOQCglthoo42ie/fuMWjQoFi0aNEq67/99tuIiBg8eHDcd9998fjjj8eWW2651mM+8MADsc0225R5XYcOHWL8+PGl3hs3blx06NBhjZ/RoUOHeOmll2L58uWl9mndunVsuOGGa60PINeqou8FqE6qw3fMiIi//e1vcdppp8Xf/va3OPTQQ9dZt++YtV91aZs/VlxcHEuXLl3jem0TQDAHANQigwYNiqKiothrr73i8ccfjw8//DCmTp0at956a3To0CFefvnlOP/88+OKK66Ili1bxmeffVZqmT9/fqU+/+yzz46PP/44fvWrX8W0adPijjvuiL///e9x4YUXlmxz++23R5cuXUpe9+7dO+rXrx9nnHFGvP/++/Hoo4/GLbfcEhdddFGlagFIS677XoCqlut+bvjw4XHKKafEDTfcED//+c9Xe1zfMeumXLfNQYMGxTPPPBMffvhhfPjhhzFkyJC4/vrr46STTirZRtsEWI0EAKAWmTNnTtK/f/9k6623TurXr59sscUWSc+ePZMJEyYkp556ahIRa1z69OlT6c+fMGFC0q5du6R+/fpJy5Ytk/vvv7/U+iuvvDLZeuutS7339ttvJ/vuu2/SoEGDZIsttkiuu+66StcBkKZc970AVS2X/dz++++/zuP6jll35bJt3nrrrcnOO++cNG7cOGnWrFmy2267JXfccUdSVFRUso22CbCqvCQpx5NCAQAAAAAAgAoxlSUAAAAAAACkQDAHAAAAAAAAKRDMAQAAAAAAQAoEcwAAAAAAAJACwRwAAAAAAACkQDAHAAAAAAAAKRDMAQAAAAAAQAoEcwAAAAAAAJACwRwAAAAAAACkQDAHAAAAAAAAKRDMAQAAAAAAQAoEcwAAAAAAAJAC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ZiVfYsuqcePG1a7dQF10yCGHxC233BKPPfZYnHTSSSXv/3CEbbNmzUpGXa/0+OOPl+zvd3nFc2Lfe++9Sh/DuYTqS3+ZHa1bt670MQoLC2P77bd3PqEa02dmx/bbbx/vv/9+qZmTymu99daLzTffPCvXSWo67TI7tt9++0qHchErvhM4n5RXvXr1yrxtNq9j/tCPQ7mjjz66wseC8qhzU1luuOGG8eSTT8avf/3raNu2bey+++7x8ssvxy9/+cvo169ftGvXLiZPnrzWY7zwwgux7777luo8hg4dGq1atYpddtkltttuu9h2223jr3/9a3Tv3j2WLFkSDz/8cJx44omljvOLX/winnvuuZJ0f2323nvvWH/99ePcc88tNX3mMcccE2PHji15fcUVV8T//ve/uOWWW6Jdu3bRrl27uP/++0vWjxkzJo455ph1fl5tUptCuZVWhnNvv/12HHLIIRUa2dGtW7fYaaed4uSTT4633347xo4dG5dffnn0798/GjRoUAVVA1WtS5cuscMOO8TTTz8dzz77bJn2GTVqVDz99NOxww47uCvs/zvqqKMqdbEjk8nEUUcdlcWKgGzTX2ZHhw4dolmzZpU6Rl5eXvTo0SNLFQFVQZ+ZHT179qxUKFdQUBCHHXaYUO7/0y6zo0ePHmV6TM/arL/++rH33ntnqSJYvaq4jimUI6dy/ZC7muiss85K/vGPf6xxfVFRUXLppZcm7dq1S7766qusfObs2bOTFi1aJN99990qn7XHHnskn3zyyTqPsXTp0mSXXXZJvvjii6zUlJZ999036dOnT4X2XbRoUdK5c+ekSZMmyUsvvZTdwqqBSZMmJeutt16y7777JgsWLFjrtqt78OmsWbOSQw45JGnUqFGyySabJBdffHGyfPnyMu2bJEnyyiuvJBGRvP/++5X5MYAsev7555NMJpOst956yfPPP58kSZIsXLiw5KHKF110Ualt11tvvSSTySTjxo3LVcnVzuuvv17ph1e/8cYbuf4xgHXQX2bHKaeckhQUFFSor8zLy0v22muvXP8IQBnoMyvvyy+/TPLy8ir1HfORRx7J9Y9RrWiX2bHnnntWuG0WFBRU+JodLF26NImI5MEHH1xlXVVcx/yh5cuXJyeccEKSyWSSxx57rDI/BlRInRsxlw133XXXWked5efnx1/+8pd46623sjLv9xVXXBE///nP47rrrov11ltvlc+6++67Y9asWes8zsyZM+O6666LTTbZpNI11QS1caTcj1V25NzWW28do0aNisWLF8cXX3wR119/fRQU1LkZbqFW6dKlSwwaNCgWLVoU3bt3j3PPPTemTJlSsv6MM86IKVOmRP/+/aN79+6xaNGiGDRoUKlpkuu63XffvWRqjIpo3rx57LbbblmsCKgK+svs6NmzZ8mzscsrLy8vevXqleWKgKqgz6y8jTfeODp27Fjh0UkFBQVx8MEHZ7mqmk27zI5evXpVuF0WFhZGz549s1wRrF62rmMaKUe1kOtkENalIiPmavtIuR8ry8i5/fffP6lXr17SpEmT5J133inTcYcNG5Y0adIkyc/PN2IOapiRI0cmzZs3X+WOxg022KDk382bN09GjhyZ61KrpUsvvTTJz88v9x2j+fn5yaWXXprr8oFy0F9WzoIFC5INNtigQnfaFxQUJDNmzMj1jwCUgz6zcu6+++4Kj0o64ogjcl1+taVdVs6MGTMqNPo9Ly8v2WCDDdY5gxOsybpGzGX7OmaSGClH9ZGXJElSwUwPUtGpU6do1apVPPDAA2Xavi6MlFudf//739GtW7fYddddY/To0dG0adNS6z/99NP4/vvvIyLipz/9adSvX3+dx1ywYEHJMxA32GCDVUZbTpo0KTp27Bjvv/9+pR60ClSNRYsWxb333htPPvlk/POf/4yIiE033TR22WWXOOKII+KMM87wgO41WLBgQbRu3TrmzZsXxcXFZdonPz8/mjdvHtOnT19lhDtQvekvK+ehhx6KU045pVz75OXlxRVXXBFXXXVV1RQFVBl9ZsUVFRXF3nvvHZMnTy7XaOOGDRvGtGnTYuutt67C6mo27bJyrrzyyrj66qujvJeJH3rooTjppJOqqCpqu2XLlkWDBg3iwQcfXOW7ZFVcxzRSjupEMEe1V55grq6GciutK5zLNsEc1AyLFi0q6Q8WLlzoD9IyeuGFF6Jr165l/uM0Ly8vnn/+eQ+ShxpMf1kxSZJEr169YsSIEWW6maGgoCB22WWXmDRpUjRo0CCFCoGqoM+smGnTpsXuu+8eS5cuLfMNYPfee2+cccYZVVxZ7aBdVszSpUujQ4cO8e6775YpNM5kMtGzZ894/PHHKzwNJqwtmMs2oRzVjWfMUWvU9VAuovLPnAPg/xx44IExbNiwyGQykZ+/5q9M+fn5UVBQEMOGDRPKAXVSXl5eDBs2LLp27brOi3OZTCZ23HHHGDVqlFAOqJN22GGHGD16dDRq1Cgymcwat1vZn/7xj38UylHlGjRoEKNGjYoddthhre0yYkXb7NKlSzz00ENCOWoEoRzVkRFzVHudOnWK2bNnx957713y3hlnnFHqYb1CudLWNnLuxRdfjLvvvjsrn/Pll1/G888/b8QcVHPuGq2cCRMmxBlnnBEzZ86MTCYTRUVFEREl/27ZsmXce++90blz5xxXClSW/rJyli9fHpdddlncdNNNkSRJFBcXl4w6LigoiKKiojj55JPjtttui2bNmuW4WqCy9JmV8+6778Zpp50Wb7zxRhQUFJSMUspkMlFcXBwbb7xx3HbbbXH88cfnuNKaRbusnO+++y7OP//8GDp0aKl2mZeXF/n5+ZGXlxcXXnhh/PGPf4x69erluFpqupUj5n7+85/Hz372s6wc84gjjijVbwrlqK4Ec1R7jz/+eNxxxx0lr6dMmRI/+9nP4pVXXokIodyarCmc69y5c0ydOjV23nnniFgxx/3EiRMjYkUIuq47o35s2223jdtuu61Mcz0DueGP08pbtmxZPProozFy5Mj4+9//HhERv/jFL+Lwww+P4447zh+lUEvoL7Pjo48+iuHDh8eYMWNKvrNffPHFcdJJJ0W7du1yWxyQNfrMyisuLo6RI0fGk08+WfL4jkMPPTQOPfTQOPnkk6v88RS1kXaZHZMnT45hw4bFDTfcEBERHTt2jIMPPjh69+4drVq1ynF11BZJksTvfve7mDRpUrn2W9O1zI8//jiWL18es2fPjgihHNWbYI4a54wzzoipU6fGK6+8IpRbh9WFc507d44tttgihg0bFhG+tEJd4Pc8e5xLqN38jmeX8wm1m9/x7HEus8e5zB7nkupqTW3z97//fdxzzz0xe/ZsoRzVnmfMUWMtXrw4DjnkEKHcWnjmHAAAAABQVwjlqAkEc9RIK0O5f/3rX/HEE08I5dZCOAcAAAAA1HZFRUVCOWqEglwXABXx9ttvR35+fhQXF8c+++yT63KqvZXhXLdu3WLBggXRunXrXJcEAAAAAJA1n332mVCOGsGIOWqc7bffPtZff/0oLi7OdSk1yspwbsMNNxTMAQAAAAC1RsuWLaNp06ZCOWoEI+aocQYOHBj9+vWLjTfeONel1Dh77713fPbZZ1G/fv1clwIAAAAAkBUnn3xy/OIXv4gGDRrkuhRYJyPmqJF0sBUnlAMAAAAAahvXjKkpBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHNQh3388cdx5ZVX5roMAAAAAKj1vvzyy/jNb34TH3/8ca5LAXKoINcFALnz6KOPxg033BCZTCaKiopyXQ4AAAAA1EpffvlldO3aNd5+++1o1qxZ/OY3v8l1SUCOGDEHdVzDhg2jWbNmkclk4ssvv8x1OQAAAABQq6wM5ebMmRMNGzbMdTlAjgnmoI5r2rRpTJw4MZo1axaHH364cA4AAAAAsuSHodyECROiadOmuS4JyDHBHBA777xzTJw4MT777LPo2rWrcA4AAAAAKunHodzOO++c65KAasAz5qAOWbp0aYwfP77k9bRp00r+vfPOO8eECROic+fO0bVr13j++edjk002yUWZAAAAAFCjrS2UmzZtWowaNarkddeuXaN+/fq5KBPIAcEc1CGXX355XH/99aXe69y5c8m/hXMAAAAAUDlrC+V22WWXGDp0aAwdOrTkvUsuuST++te/5qJUIAdMZQl1yJdffhnt27ePOXPmlCyjR48utc3KcG7OnDmmtQQAAACAcljX9JWjR48udW2uffv2rr9BHSOYgzqmfv368ZOf/KRkadCgwSrbCOcAAAAAoHzK8ky5Bg0alLo2ZwpLqHsEc8BqCecAAAAAoGzKEsoBRAjmgLUQzgEAAADA2gnlgPIQzAFrJZwDAAAAgNUTygHlJZgD1kk4BwAAAAClCeWAihDMVdLrr78ehxxySEREzJ8/P84666xo2bJltG7dOvbYY494+umnV9nn/vvvj7y8vJg4cWLW6jj22GNj0qRJERHx7LPPxh577BENGjSICy64oNR2t99+e1x77bVZ+1zqDuEcAAAAAKwglKOq3HzzzfHZZ5+tdZttttkmJk+eXPL6888/L2mDy5Yti4EDB8a2224bO+64Y7Rp0yaGDBmyyjEmTJgQeXl58dBDD2Wt9ksuuSQeeeSRiIh45JFHol27dtGmTZto06ZN3HDDDSXbvfPOOyW5Sl0kmKukJ598Mo488shIkiR69OgR9erViw8++CCmT58eQ4YMiXPOOSdGjRpVap8hQ4ZEly5dVvvLUBGvvvpqfP3119GhQ4eIiNhuu+3ivvvui0svvXSVbc8888wYMmRIzJ8/PyufTd0inAMAAACgrhPKUZXWFswVFxdHcXHxKu8//fTT0bNnz4iIOPXUU2PGjBnx9ttvx9SpU2PkyJFx/fXXx5133llqn2znFJ9++mmMGjUqjjvuuIiI2GqrrWLMmDHx3nvvxcsvvxx33nlnvPjiixER0bZt22jQoEG88MILWfnsmqbOBXMnnnhitG/fPtq2bRuHHnpofPbZZzFr1qzYYIMN4sorr4w99tgjtt1221Jh2qRJk2LfffeNXXfdNdq2bVtqFNyIESPiiCOOiPHjx8d///vfuPHGG6OgoCAiItq1axeXX355XH311SXbT58+PWbOnBlDhw6Np556Kr777ruSdQcccEBccskl0alTp2jVqlWcffbZERExZ86caN68eSxevLhk2969e5f8It19993Ru3fvknXbb7997LrrriV1/FD9+vWjW7duMXz48MqeSuoo4RwAAAAAdZVQjmz6cfbw+9//PubMmRPHHXdctGvXLiZPnhxXXXVVHH300dG9e/do06ZNzJ07d5XjPPXUU3HUUUfFhx9+GE899VQMHjw4mjRpEhErRtfdcMMNpXKKb7/9Np599tkYNmxYTJkyJWbMmFGy7tRTT42zzjorunTpEttvv3306tUrli1bFkuWLIkWLVrEJ598UrLtb3/72xg4cGBERNx3331x9NFHR15eXkRE7LPPPtGiRYuIiFh//fVjhx12iFmzZpXse8IJJ8Tdd9+dvZNZg6ya3NRyN998c2y66aYREXHdddfFVVddFb/+9a9j/vz5JQ1/zJgxMWDAgOjRo0d8/fXXceSRR8Zjjz0WnTp1iuLi4vj2228jIuLDDz+MZs2aRYsWLWLo0KGxxx57RP369Ut9XocOHeLiiy8ueT1kyJA4+eSTY/PNN48DDzwwHnnkkTjzzDNL1n/00UcxYcKEWL58eey0004xadKk6NChQ3Tt2jWGDRsWZ555ZsybNy+ef/75GDx4cEREvPjii3HhhReW+Rx06NAhRowYEeecc84at1m0aFGZj5cLP6yvutdanRQWFmblOCvDuc6dO0fXrl3j+eefj0022SQrxwYAAACA6qiqQrnCwkLXOMuoJl4XXhmQ/diasof7778/Hn300WjXrl1ErAjdJk2aFG+99VY0b958leMsWLAgpk2bFnvuuWf84x//iO222y423njjUtt06NAh5s6dG/PmzYvmzZvH8OHDo3v37tGiRYs46aST4r777iv1CKzJkyfHhAkTokGDBrHffvvF448/HieccEKcccYZceedd8a1114bS5cujfvvvz/+/e9/R8Tac4opU6bEpEmT4q677ipVU//+/ct1LmuLOhfMDR8+PB566KFYsmRJLFmypCRMaNiwYfTq1SsiVjSIjz76KCJWJNatW7eOTp06RUREfn5+bLTRRhHxf9NYrkujRo0iYkUHO3To0PjnP/8ZERGnn356XH311aWCueOOOy4KCgqioKAg2rVrFx999FF06NAhBgwYEP369Yszzzwz7rnnnjjhhBOiadOmERExe/bs1f5CrkmLFi1i9uzZa91m5bFrgvL87ETstddeWTnOzjvvHMOHD4+DDjoohgwZUnJnBAAAAADURkOGDIm33347xo0bl9VQbtiwYTFs2LCsHK8uqSnXhZMkWe37a8sefqxHjx5r/HlHjx4dBx98cMlItbVZmVUMGTIk/vSnP0XEipyie/fucfXVV0cmk4mIiKOOOioaN24cESuuJ6/MS84999zYa6+94sorr4x//OMfsddee8XWW28dEWvOKWbPnh1HHHFE3HXXXbHllluWvN+iRYv46quvYsmSJdGwYcN11l6b1KmpLP/1r3/FrbfeGqNGjYr33nsvbrzxxliyZElERDRo0KCk4WYymSgqKlrn8Z566qmSYG733XePN954I5YvX15qm0mTJkXHjh0jImLkyJHx7bffRvfu3WObbbaJ/v37x5tvvhnvvfdeyfY/bICZTKZkhNNee+0VjRs3jgkTJsTgwYNLJcmNGzcu+TnKYsmSJSW/gFBRc+fOjfPOOy+22GKLOProo3NdDgAAAABUqaOPPjq22GKLOO+881Y7nSBUlbUNpPnhAKLddtstPvzww/jqq69KbTNp0qTYeeedo1mzZjF58uR45513ol+/frHNNtvEYYcdFl9++WWMHj26ZPs15RRbbLFF7LfffvHoo4/GoEGD4rzzzivZbnU5xcrHIV1++eVx7LHHllq3ZMmSyGQyq8xCWBfUqRFz33zzTay33nqx8cYbx7Jly8o0f2nHjh3jww8/jIkTJ5YaTrp06dJYuHBhbLfddhERceCBB8ZWW20VF154Ydx8881RUFAQkydPjptuuikee+yxiFiRQt98880lz46LiBg4cGAMGTIkbrrppnXWMmDAgDjllFNip512iu23377k/bZt28b06dNjq622KtN5mDp1auy6665r3WbhwoVlOlauLFq0qCR9nzdv3hqHA1Pa2WefHR9//HGljzN37tzo3LlzLFy4MF588cXYdttts1AdAAAAAFRf2267bbz44otxwAEHROfOnWPChAnxk5/8pFLHLCgoiJNOOqnUFH+sWW26Lrym7KFZs2Yxf/78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AAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAAAAAAAApEMwBAAAAAABACgRzAAAAAAAAkALBHAAAAAAAAKRAMAcAsA5JksSkSZPi6quvLnnv6quvjkmTJkWSJDmsDKD6+e6772L48OFx3nnnlbz3wAMPxLx583JYFUD19N5778UNN9xQ8vqyyy6LcePGRXFxcQ6roq6bN29ePPDAAyWvzzvvvBg+fHh89913uSsKoBbJS1xNogZatGhRNG3aNCIiFi5cGE2aNMlxRQDVlz6zcqZNmxbnnntuTJgwITKZTBQVFUVElPy7c+fOcccdd8QOO+yQ40qBytJfVk6SJDF48OD4zW9+E998800UFBREYWFhyfqGDRvGZZddFgMHDox69erlsFIgG/SZlTN37ty46KKL4pFHHon8/PySIG5l39m2bdu48847o2PHjjmutGbRLitn+fLlcd1118W1114bS5YsKXl/ZbvccMMN47rrrot+/fpFXl5eDiutebTN7HEuqQ2MmAMAWIOXXnop9txzz5g4cWJEREko98N/T5w4sdQ2AHVRUVFRnHXWWXH22WfHN998ExFRKpSLiFiyZElcccUV0bNnz1i0aFEuygSoFqZNmxbt27ePxx57LCKi1Oi4lX3n+++/H/vvv3888sgjOamRumfRokXRs2fPuPLKK0uFchH/1y6/+eabkv/vf/i3EQDlI5gDAFiNd955J7p16xaLFy9e5eLyDxUWFsbixYvjoIMOinfeeSfFCgGqjwsvvDDuvffedW6XJEk899xzceyxx5qmDaiT5s6dG506dYp58+at9TtmUVFRFBUVRe/evWPUqFEpVkhdVFxcHMcee2w899xzZZqq/5577omLLroohcoAaifBHADAjyxbtiyOP/74KCwsLNOF4+Li4igsLIzjjz8+li9fnkKFANXHc889F7fddluZn7lZXFwco0ePjrvvvruKKwOoXpIkib59+8a3335bptFGSZJEXl5enHzyyfHVV1+lUCF11V133RWjR48u800zSZLErbfeGuPGjaviygBqJ8EcAMCP3HjjjTFt2rRyTc9SVFQU06ZNixtvvLEKKwOoXpYuXRpnnHFG5OeX/0/LSy65JD777LMqqAqgenr88cdj1KhRax0p92PFxcUxf/78+NWvflWFlVGXzZ07Ny655JJy75efnx+nn356LF26tAqqAqjdBHMAAD+QJEncfffdZR758eN9Bw8eXAVVAVRPEyZMiNmzZ1doWsrvv/++5PlKAHXBvffeW6EbGYqKiuLhhx+O77//vgqqoq577LHHVnmmXFkUFxfH7Nmz48UXX8x+UQC1nGAOAOAHpk+fHrNmzarw/h9//HFMnz49ewUBVGMjRoyIgoKCCu2bl5cXTz31VHYLAqimFi5cGOPHj6/w8zWXLl0a48ePz3JVEPHkk09GXl5ehfYtKCiIESNGZLkigNpPMFcJr7/+ehxyyCERETF//vw466yzomXLltG6devYY4894umnn15ln/vvvz/y8vJi4sSJWavj2GOPjUmTJkVExLPPPht77LFHNGjQIC644IJS291+++1x7bXXZu1zAaA2evrppyt0J/NK+fn5q/0OAFDbJEkSTzzxRLmmZPuh4uLi+Oc//xnz58/PcmUA1c9zzz1X4f4yQgBC1Zg/f3689NJLFQ6MCwsL44knnqjQbCNA9skrag7BXCU8+eSTceSRR0aSJNGjR4+oV69efPDBBzF9+vQYMmRInHPOOTFq1KhS+wwZMiS6dOkSQ4YMyUoNr776anz99dfRoUOHiIjYbrvt4r777otLL710lW3PPPPMGDJkiD98AWAtnnzyyUr9YZkkSTz55JNZrAigenrzzTdj3rx5lTpGYWFhjB07NksVAVRflRlhHLGiv3zyyScrHKDA6owZM6Zcz9Venc8++yzeeuutLFUEVIa8ouao+DeCGur777+PU089Nd59992oV69eNG/ePOrXrx+9e/eO3r17R8SKu5h+97vfxX/+85+4995748Ybb4z69etHUVFR3HvvvfHzn/88IlZ8qRo3blyMHz8+/vvf/8aECRNKvmS1a9cuLr/88rj66qujR48eEbFiaqyZM2fGa6+9FjvttFN899130axZs4iIOOCAA6J9+/bxn//8J+bMmRMHHXRQ3HXXXTFnzpzYbbfdYubMmdG4ceOIiOjdu3d06tQpzjnnnLj77rtL6o6I2H777SMiVntBsH79+tGtW7cYPnx4nHPOOWs8R4sWLarsaa5yP6yxJtQLkEv6zPKZMmVKpYO5KVOmONdQA+kvy+ftt9+u9DEKCgrinXfeiUMPPTQLFQFp0meWz9tvv12pEXMREV9++WXMnTs3Nthgg+wUVQtpl+XzzjvvREFBQaXb5ttvvx2tW7fOUlW1k7aZPTXxXDZp0mSN6+QV684raqWkjnniiSeSbt26lbz+6quvkueeey7p0KFDyXs9e/ZMhg4dmiRJkjRr1iyZM2dOkiRJsmzZsmTBggVJkiTJBx98kHTs2DFJkiT585//nPTs2XOVz3rzzTeThg0blry+9NJLk4EDByZJkiRHHXVUcvfdd5es23///ZMjjzwyWb58ebJ48eJkm222SV555ZUkSZKkd+/eJdt+9tlnyaabblpSR8uWLZN33313lc++8sorkwEDBqzy/oMPPpgcffTRaz1HEWGxWCwWi8VisVgsFovFYrFYLBaLpZLL2sgr1p1X1EZ1birLXXfdNaZOnRrnnntuPProo1GvXr046KCDYv78+fHWW2/Ff//733j11VfjF7/4RUREdOnSJU4++eS45ZZbYubMmdG0adOI+L9hoevSqFGjiFgx5cDQoUPjtNNOi4iI008/fZXhoccdd1wUFBREo0aNol27dvHRRx9FRMSAAQNi0KBBERFxzz33xAknnFBSx+zZs6N58+Zl/vlbtGgRs2fPLvP2AAAAAABA9skr6mZeUeemsmzZsmVMmTIlXnjhhXj++efjV7/6VUyePDl++ctfxm233RbNmzeP008/PRo0aBAREY8//ni88cYb8eKLL0aPHj3immuuieOPPz6eeuqpePDBByMiYvfdd49bb701li9fHvXq1Sv5rEmTJkXHjh0jImLkyJHx7bffRvfu3SMiIkmSmDNnTrz33nvRpk2biIho2LBhyb6ZTKZkGPlee+0VjRs3jgkTJsTgwYPj+eefL9mucePGsWTJkjL//EuWLCn55VuThQsXlvl4ubJo0aKSX/B58+atdTgwQF2nzyyfTTfdNL7//vtKHaNRo0bxxRdfZKkiIC36y/J56KGHKj3lTL169WLAgAFx1VVXZacoIDX6zPLZc889Y+rUqZU+zkcffVSuC551jXZZPldddVXccsstsXz58kod56677oqTTjopS1XVTtpm9tS2cymvWHdeURvVuWBu9uzZseGGG0bPnj3j4IMPjqeeeio++eSTOPnkk+MPf/hDFBUVxWuvvRYRK1LjWbNmRfv27aN9+/bx5Zdfxquvvhr7779/LFy4MLbbbruIiDjwwANjq622igsvvDBuvvnmKCgoiMmTJ8dNN90Ujz32WESseIjizTffHGeffXZJLQMHDowhQ4bETTfdtM66BwwYEKecckrstNNOJfOyRkS0bds2pk+fHltttVWZfv6pU6fGrrvuutZtalpn1qRJkxpXM0Cu6DPXbf311690MLf++us7z1DD6S/XrUWLFpU+RlFRUTRv3ty5hhpOn7lum222WaWDufz8/PjJT35SJy9gVoR2uW7NmzeP4uLirBzHuS47bTN7asO5lFesO6+ojercVJbvvvtu7LPPPrHrrrvGbrvtFieffHK0bds2GjduHL169Yp99tmnpNEUFRXF6aefHm3atIl27drFG2+8ERdddFE8/fTT0bNnz5Jj5ufnx+jRo2Pp0qWx/fbbR8uWLaNDhw7x+OOPx6677hpz5syJ8ePHx7HHHluqlhNPPDGGDRsWy5YtW2fdxxxzTCxcuDDOO++8Vd4fO3Zsyevx48fHlltuGTfeeGMMGTIkttxyyxgxYkTJ+jFjxsQxxxxToXMHAHVB9+7dSx6OXBEFBQVx8MEHZ7EigOppv/32i/z8yv1JWVxcHF26dMlSRQDV10EHHRSZTKbC++fl5cXPf/5zoRxZdeCBB0ZRUVGljpGfnx/77bdfliqCukdeUTfzirwkSZJcF1EdFBUVxR577BG33XZbdOrUaa3bHnzwwXHNNddE+/btV7t+yZIl0bdv3/j8889jxIgRpYZ8VtTrr78evXv3jmnTppX643fhwoXRsWPHmDRp0jrvDpgyZUqcddZZMXHixErXk2uLFi0qmbd24cKFNf7OCICqpM8snyeeeCKOPvroSh/jqKOOylJFQFr0l+XXqVOneOWVVyp8t32LFi1izpw5kZeXl+XKgKqmzyyfd999N9q2bVvh/fPz8+O6666LSy+9NItV1T7aZfkkSRI/+clPYt68eRXaPz8/P/bZZ5946aWXslxZ7aNtZk9dOZfyitqtzo2YW50RI0ZEq1atokOHDuts5BErUtw1NfKIFXOvDhs2LJ577rmsNPK+fftGr1694vbbb1/ljtSmTZvGTTfdFDNnzlzncT755JO4++67K10PANRm3bp1KzUHe3nVq1cvunXrlsWKAKqvXr16VXjfgoKC6NWrl1AOqBPatGkTW265ZYX3Ly4uLjUaArIhLy8vevXqVeEZQ5IkqdR3AWD15BW1nxFz1Eh15c4IgGzQZ5Zfjx494rnnniv3tC6ZTCa6d+8ezz77bBVVBlQl/WX5ffTRR7HttttWeP+xY8e6mQFqKH1m+V1wwQUxaNCgKCwsLNd+eXl50bJly5gxY0YVVVZ7aJflN3bs2EpNxT9jxoxo1apVFiuqnbTN7HEuqQ2MmAMA+JFrrrkmKnLvUpIkcc0111RBRQDVU6tWreL0008v93OTCgoKolOnTnHQQQdVUWUA1c+vfvWrCo1USJIk/vKXv1RBRbDi+Yf77rtvuUfNZTKZOOOMM4RyABUgmAMA+JHdd989fvWrX5VrerW8vLwYOHBg7LbbblVYGUD1c/3118cmm2xSrnCuoKAghgwZYhpLoE7ZfPPN45ZbbinXPplMJo4++mjTBVJl8vPz47777ouCgoIy/7+cyWRik002ieuvv76KqwOonQRzAACr8Yc//CG6d+9epj9O8/Ly4uCDD44//OEPKVQGUL1suOGGJQ+RX1c4l5+fHwUFBTF8+PDYbrvtUqoQoPo47bTT4pxzzinTtplMJnbaaacYMmRIFVdFXbfddtvF8OHDIz8/f5XnRf1YJpOJhg0bxogRI2KDDTZIp0CAWkYwBwCwGvXq1YsRI0ZEnz59IiJWe7F55Xt9+vSJp59+usIPTQeo6fbaa694+eWXY9NNN13jBb1MJhONGzeOUaNGxVFHHZVyhQDVQ15eXgwaNCiuuOKKyMvLW+33x5X96AEHHBD/+te/Yv3110+7TOqgo446KkaNGhWNGzde4402+fn5sdlmm8Urr7wSe+21V8oVAtQegjkAgDWoV69e3H///TF+/Pjo0KFDqT9QM5lMdOzYMV544YW4//77o169ejmsFCD3dt1115gxY0ZcccUVsfnmm5dat9FGG0X//v1j5syZnisH1Hl5eXnx+9//Pt588804+OCDo379+qXW7bLLLvH3v/89xo0bF82aNcthpdQ13bp1i5kzZ0b//v1jww03LLVu8803jyuvvDI+/PDDaNu2bY4qBKgd8pIkSXJdBJTXokWLomnTphERsXDhwmjSpEmOKwKovvSZ2fPdd9/F9OnTIyKidevWLpRALaO/zJ4kSeLjjz+OL774ItZff/1o3br1OqfGAmoWfWb2LFmyJKZMmRLLly+Pli1bxqabbprrkmos7TJ7iouLY/r06TF//vzYdNNNo2XLlp4NWwnaZvY4l9QG5lsCACijZs2axZ577pnrMgCqvby8vGjVqlW0atUq16UAVHsNGzaM3XffPddlQCn5+fmx44475roMgFrJLYsAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcAAAAAAAApEAwBwAAAAAAACkQzAEAAAAAAEAKBHMAAAAAAACQAsEcQCUVFRVFx44do1evXqXenz9/fmy11VZx2WWX5agygOpHn5k9ziUAAADUPII5gErKZDLxwAMPxJgxY+Lhhx8uef/888+PjTbaKK688socVgdQvegzs8e5BAAAgJqnINcFANQG22+/fVx33XVx/vnnx4EHHhivvvpqPPLII/Haa69F/fr1c10eQLWiz8we5xIAAABqlrwkSZJcFwHltWjRomjatGlERCxcuDCaNGmS44ogIkmSOPDAAyOT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xfDhw+Occ86pzKmuWRKoYv/4xz+SiEiuuuqqcu+7//77JwMGDCh53a9fv6Rbt26ltlm0aFESEcmoUaPWuu9KDz74YBIRFovFYrFYLBaLxWKxWCwWi8VS7uWVV15J5Trm2hQWFiYnn3xykp+fn7z++uvl2rc6eOWVV5K8vLykb9++SVFRUVaO2adPn6SgoCDn7eOHy7p8/vnnJf/+05/+lJx11lnJzJkzk4hIHnvssSRJkmT06NHJ9ttvnyRJknz11VfJZpttlrz00ktJkiRJUVFR8tVXXyVJkiQffPBB0rFjxyRJkuTPf/5z0rNnz1U+780330waNmxY8vrSSy9NBg4cmCRJkhx11FHJ3XffXbJu//33T4488shk+fLlyeLFi5NtttmmpO337t27ZNvPPvss2XTTTZMFCxYkSZIkLVu2TN59991VPvvKK69c4/X6o48+ep3nqjYxLpQq16hRo4hYMaIjSZIcVwMAAAAAULMVFhbGN998E/Xq1SvTM+qqmwYNGkRBQUF89dVXlXo0R003fPjwaN++fbRp0ybuvffemDx5ckRENGzYMHr16hURER06dIiPPvooIlaMlmvdunV06tQpIiLy8/Njo402ioj/m8ZyXVZery8sLIyhQ4fGaaedFhERp59++irTWR533HFRUFAQjRo1inbt2pXUMWDAgBg0aFBERNxzzz1xwgknRNOmTSMiYvbs2aVGiq5LixYtYvbs2WXevjYwlSVV7tBDD43BgwfHmWeeGRERt912W4Wf69GiRYt49dVXS703b968knXl8fXXX9fI/7TIvcsuuyxuueWWeOihh+KAAw4o9eXhj3/8Y9xzzz1xzjnnxMCBA0vez2QyMWHChDjllFPiggsuiGuuuSYXpVNLffnll7HNNttU+jht27aNV155pfIFwQ/oM7PHucyOq6++Om688cZKT2W58o9PgNqsefPmlZ4OrGnTplmZEhNWOvXUU+OJJ56o9HSWL7zwQuy1115Zqoq6YurUqbHnnnuWadtsXsf8saVLl8YxxxwT48aNi6effjp22WWXSh0vF3bfffd44oknolevXnHcccfFo48+GvXq1av0cffcc88YN25cFiqsev/617/i1ltvjUmTJsVmm20WI0aMiCuuuCIiVgSXK6+hZzKZMoWXTz31VDz44IMRseL83nrrrbF8+fJS53XSpEnRsWPHiIgYOXJkfPvtt9G9e/eIiEiSJObMmRPvvfdetGnTJiJWBIQrZTKZkmfP7rXXXtG4ceOYMGFCDB48OJ5//vmS7Ro3bhxLliwp83lYsmRJSVhYVwjmSEW/fv0iIiodznXo0CH++Mc/xueffx6bbbZZRESMGzcumjVrFjvttFO5jtWkSRPBHBVyyCGHxC233BKPPfZYnHTSSaXWrZyDuVmzZrH11luXWvf444+X7L+u+aWhPBo0aBCNGjWK77//vsLHyGQy0bJlS22TrNNnZo9zmR2tWrUq+WOyssdxPoHabsstt4zp06dX+hj6S7LpZz/7WeTn51c6mNtuu+20Tcpt5fO0yiKb1zF/6Meh3MpQpSY67LDDsh7OZTKZGvO7/c0338R6660XG2+8cSxbtizuvvvude7TsWPH+PDDD2PixInRqVOnKC4ujm+//TaWLl0aCxcujO222y4iIg488MDYaqut4sILL4ybb745CgoKYvLkyXHTTTfFY489FhERQ4YMiZtvvjnOPvvskuMPHDgwhgwZEjfddNM6axkwYECccsopsdNOO5U8Ry5ixY3f06dPj6222qpM52Hq1Kmx6667lmnb2sJUlqSmX79+MXjw4Bg0aFCcf/75FZrWslu3brHTTjvFySefHG+//XaMHTs2Lr/88ujfv380aNCgCqqGVXXp0iV22GGHePrpp+PZZ58t0z6jRo2Kp59+OnbYYYc48MADq7hC6pqCgoI45JBDIpPJVPgYRUVFcfjhh2exKlhBn5k9zmV2HHLIIZWeXr1p06ax7777ZqkigOrryCOPjIKCit/TXVBQUKYptaA8Dj300ErfZLPzzjvHlltumaWKYPWq4jpmbQrlVloZzo0cOTKOO+64Ss9sUZMcfPDB0bp165KpKdu1a7fOfTbccMN48skn49e//nW0bds2dt9993j55Zfj6aefjp49e5Zsl5+fH6NHj46lS5fG9ttvHy1btowOHTrE448/HrvuumvMmTMnxo8fH8cee2yp45944okxbNiwWLZs2TprOeaYY2LhwoVx3nnnrfL+2LFjS16PHz8+ttxyy7jxxhtjyJAhseWWW8aIESNK1o8ZMyaOOeaYdX5ebSKYI1WVDecymUyMHDkyMplMdOjQIU466aQ45ZRT4g9/+EMVVQyrKigoiNtvvz0ymUyccMIJMX78+LVuP378+Dj++OMjk8nEbbfdVqk/bGFNjjjiiErNyZ6XlxeHHnpoFiuCFfSZ2eNcZseWW25ZqbsxCwoK4tBDD83KNDsA1V3Pnj0rFYAUFhaWukgI2bDPPvuUzBZQEZlMpuS5TVCVsn0dszaGcivV1XCuXr168eijj8aMGTPiP//5T/zxj3+MyZMnxzbbbBPffvttyXZNmzYtdR197733jpdffjneeeedmDx5chx++OHx1FNPrXIzzAYbbBD33HNPfPzxxzFlypQ4+uij45JLLoklS5bE5ptvHosXL46NN9641D5t27aNL774IurXrx8vvvhiqWM+9thjceqpp5a8njx5cmy66aarXE867bTTYuzYsSXTYXfp0iVmz54d3333XSxYsCBmz55d8v1gypQpUVhYWOdufBTMkbrKhnNbb711jBo1KhYvXhxffPFFXH/99S40kbouXbrEoEGDYtGiRdG9e/c499xz4/3334/+/fvHxIkT4+yzz44pU6ZE//79o3v37rFo0aIYNGhQdO3aNdelU0v16NGjws/vzMvLi/bt25frwbxQHvrM7HEus6NXr14VHmVcWFho9AdQZ/z85z+PjTbaqML7b7TRRvHzn/88ixXBiptkjjjiiApfCyoqKoojjjgiy1XB6mXrOmZtDuVWqqvhXLaMGTMm2rdvv8b1DRs2jGHDhsVzzz1X6rlxFdW3b9/o1atX3H777ZGfXzpmatq0adx0000xc+bMdR7nk08+KdMUnrVOAjkyePDgJCKS/v37J8XFxavdZv/990/q1auXNGnSJHnnnXfKdNxhw4YlTZo0SfLz85MBAwassv7BBx9MIiJZunRpZcqHJEmSZOTIkUnz5s2TiEgiItlggw2Sli1bJhtssEHJe82bN09GjhyZ61KpA7p06ZIUFBSUtL2yLnl5eclNN92U6/KpA/SZ2eNcVs7777+f5OXllbu/jIikcePGyTfffJPrHwEgNf37908ymUy5+8tMJpP0798/1+VTS40cObJC/4/n5+cnW2+99RqvQ8G6vP/++0lEJK+88soq66riOmaSJMmSJUuSww47LGnQoEEyZsyYypRfIzzzzDNJvXr1kqOOOipZtmxZufbt06dPsu+++1ZRZZA9eUlSyQcsQCXcc889ceaZZ0b//v3jtttuW2W0x6effhrff/99RET89Kc/jfr166/zmAsWLIh58+ZFxIrhuptsskmp9UOHDo0+ffrE0qVLy3Q8WJdFixbFvffeGyNGjIj33nsvvvnmm9hwww2jTZs2ccQRR8QZZ5xRYx46S802bdq02GWXXco13VAmk4nWrVvHW2+9pU8kFfrM7HEuK+eiiy6KW265JYqLi8u13x133BHnnHNOFVUFUP189dVXsd1228W3335b5hlv8vLyYsMNN4wPP/ywUiPuYE2SJInDDjssnnvuuXJPtzpu3DizCVBhU6ZMiZ133jleeeWV6NChQ6l1VXEdsy6MlFudkSNHRq9eveKwww6LRx99tMzTyJ966qnx0UcfxcSJE6u4QqgcwRw5t65wLtsEc0BtdsMNN8Qll1xSpm3z8vKioKAg/v3vf8fuu+9exZUBVC+LFi2K3XbbLWbOnFmmC3qZTCb222+/eP7551eZqgWgtnvqqafiqKOOKvc+pgukKn366aexyy67xHfffVem523n5+dHv3794q677kqhOmqrtQVz2VZXQ7mVKhLOCeaoKfxFSc5V9plzAPyfiy66KC644IJ1bpefnx/16tWLf/zjH0I5oE5q0qRJjBkzJrbYYot1PucjPz8/dt9993jssceEckCddOSRR8att95aphtp8/Ly4rbbbhPKUeW22GKLGDNmTKy33nrrfHZsXl5e9OzZM2655ZaUqoPKqeuhXIRnzlG7GTFHtbG2kXNjx46NZ599NiufM3Xq1Hj++eeNmANqrSRJYtCgQTFw4MBYunRpqbtHM5lMFBcXxzbbbBMPPfRQ7LPPPjmsFCD3Pv/88+jTp0+MGTMmCgoKSo2eW/m6T58+cccdd0Tjxo1zWClA7j3xxBNx5plnxjfffBNJkpTcWJuXlxd5eXmx0UYbxd133x29evXKcaXUJdOnT4/evXvHm2++GZlMptTfPytvvrn00kvj6quvXmeAB+uycsTcMcccEz/5yU+ycsxTTz211A2zQrnS1jZy7tVXX41hw4aVvB43blxssskmRsxR7QnmqFbWFM799Kc/jaVLl0bz5s0jIqK4uDg++OCDiIjYfvvty33ncocOHeKuu+6q8mkzAXLp888/j7vuuitGjhwZr732WkRE9OjRI3r16hUnn3yymxMAfmD8+PHx0EMPxYMPPhgREdtuu20cfPDBceqpp8Yee+yR4+oAqo8FCxbEPffcE88880y8+OKLERFxwAEHxOGHHx79+vWL9dZbL7cFUicVFxfHE088EY8++mg89thjERHRpk2b6NGjR5x55pnRqlWrHFdIbfH999/HiSeeGDNmzCjXfmu6lvm///0v9thjjxg/fnxECOXWZE3h3D777BNTpkyJrbbaqmTbAQMGxBlnnJGrUqFMBHNUO6sL57bccsvo169fXHnllRGx4pkgTZs2jYiIhQsXRpMmTXJZMkC1ps8EKBv9JUDZ6TOpjrRLqqs1tc2TTjopPv3005gwYYJQbh1WF8517NgxdtxxxxgyZEiuy4NyWfvDFCAH+vXrFxERZ555ZkRE3HbbbbksBwAAAACgygjl1m3lM+d69eoVxx13XDz66KO5LgkqTDBHtfTjcM7ATgAAAACgthHKld2Pw7nly5fnuiSoEMEc1daPwzkAAAAAgNpk0qRJ0aBBA6FcGf0wnFu+fHm0bds21yVBueXnugBYm379+sXgwYMjk8lEixYtcl0OAAAAAEBWbL755kK5ClgZztWvXz8233zzXJcD5ZaXmCOQGuDrr7+OjTbaqOS1h/kClJ0+E6Bs9JcAZafPpDrSLqmu1tY2f3zdk7Jz7qipjJijRtDBAgAAAAC1jeueFefcUVMJ5gAAAAAAACAFgjkAAAAAAABIgWAOAAAAAAAAUiCYAwAAAAAAgBQI5gAAAAAAACAFgjkAAAAAAABIgWAOAAAAAAAAUiCYAwAAAAAAgBQI5gAAAAAAACAFgjkAAAAAAABIgWAOAAAAAAAAUiCYAwAAAAAAgBQI5gAAAAAAACAFgjkAAAAAAABIgWAOAAAAAAAAUiCYAwAAAAAAgBQI5gAAAAAAACAFgjkAAAAAAABIgWAOAAAAAAAAUiCYAwAAAAAAgBQI5gAAAAAAACAFgjkAAAAAAABIgWAOAAAAAAAAUiCYAwAAAAAAgBQI5gAAAAAAACAFgjkAAAAAAABIgWAOAAAAAAAAUiCYAwAAAAAAgBQI5gAAAAAAACAFgjkAAAAAAABIgWAOAAAAAAAAUiCYAwAAAAAAgBQI5gCoNoqKiqJjx47Rq1evUu/Pnz8/ttpqq7jssstyVBkAQLp8L8ou5xMAgOpCMAdAtZHJZOKBBx6IMWPGxMMPP1zy/vnnnx8bbbRRXHnllTmsDgAgPb4XZZfzCQBAdVGQ6wIA4Ie23377uO666+L888+PAw88MF599dV45JFH4rXXXov69evnujwAgNT4XpRdzicAANVBXpIkSa6LgPJatGhRNG3aNCIiFi5cGE2aNMlxRUA2JUkSBx54YGQymXj33Xfj/PPPj8svvzzXZdVY+kyAstFfUh35XpRdzmf26DOpjrRLqittE/ghwRw1kv/MoPabNm1a7LjjjrHLLrvEm2++GQUFBnlXlD4ToGz0l1RXvhdll/OZHfpMqiPtkupK2wR+yDPmAKiW7rvvvmjcuHHMnDkzZs+enetyAPh/7d1rcFTl/Qfw32bDLaCijpYKg4qoWK8oRVRaESioIGisoFVnquKIYMu0Th0vrXTs3/HWeqGoFS/ti1oqDqg0YqpAKSh24rQGLWC90SqoEVGokmjZsP8XGaJ4zeXk7JJ8Pq9Ids/J1zPr7rPne57nAAVjXJQsxxMAgEJSzAFQdJYvXx633HJLVFRUxODBg+OCCy4IE7wBgI7IuChZjicAAIWmmAOgqNTW1sb3v//9uPjii+OEE06Ie++9N6qqquI3v/lNoaMBAKTKuChZjicAAMVAMQdAUbniiisin8/H9ddfHxER++yzT/zyl7+Myy67LP79738XNhwAQIqMi5LleAIAUAwyeWs2sANyw1Ron/7617/GiBEjYsmSJTF06NDtHhs9enTkcrlYuHBhZDKZAiXcMXnPBGga75cUE+OiZDmeyfOeSTHyuqRYeW0Cn6SYY4fkwwyg6bxnAjSN90uApvOeSTHyuqRYeW0Cn2QpSwAAAAAAAEiBYg4AAAAAAABSoJgDAAAAAACAFCjmAAAAAAAAIAWKOQAAAAAAAEiBYg4AAAAAAABSoJgDAAAAAACAFCjmAAAAAAAAIAWKOQAAAAAAAEiBYg4AAAAAAABSoJgDAAAAAACAFCjmAAAAAAAAIAWKOQAAAAAAAEiBYg4AAAAAAABSoJgDAAAAAACAFCjmAAAAAAAAIAWKOQAAAAAAAEiBYg4AAAAAAABSoJgDAAAAAACAFCjmAAAAAAAAIAWKOQAAAAAAAEiBYg4AAAAAAABSoJgDAAAAAACAFCjmAAAAAAAAIAWKOQAAAAAAAEiBYg4AAAAAAABSoJgDAAAAAACAFCjmAAAAAAAAIAWKOQAAAAAAAEiBYg4AAAAAAABSoJgDAAAAAACAFCjmAAAAAAAAIAWKOQAAAAAAAEiBYo6it2nTprj55pvj7bffLnQUAAAAAIBErFmzJm699dbYsmVLoaMAKVLMUdQ2bdoUo0aNiksvvTRmz55d6DgAAAAAAIn41a9+FT/60Y9i4sSJyjnoQBRzFK1tpdxLL70U2Wy20HEAAAAAABK18847R0VFhXIOOhDFHEXpk6XcwoULo2vXroWOBAAAAACQqH79+sW8efOUc9CBKOYoOp8u5Y488shCRwIAAAAAaBNjx45VzkEHUlroAPBJX1bK/ec//4lnnnkmIiLq6uoaf//3v/89unXr1qy/s9dee0Xv3r2TCQ1QxPL5fPzrX/9q/Pntt9+Offfdt4CJAIrXJ8eYVVVVMXTo0OjUqVMBEwEUr9dee63x36+//noMGDCggGmgwaZNmxr/vWLFihgyZEiUlJiXQLJeffXV2LBhQ7O2+aJzmTU1NY2/31bOlZeXx8SJE+OBBx4wFoV2KpPP5/OFDgERX17KHXbYYfH8888n9rd23333WLNmTey0006J7ROgmGzZsiXuuuuuuO666+KNN97Y7rFBgwbF9ddfHyNGjChQOoDismbNmrjyyitj7ty5212dXFZWFuedd15Mnz499thjjwImBCgO+Xw+5syZE1dffXW8+OKL2z12wAEHxDXXXBMTJkyITCZToIR0VM8++2xcdtllsXjx4ti6dWvj73v27BnTpk2Ln/zkJ9G9e/cCJqS9eOmll+LQQw+Njz76KLF9lpeXx9y5cxt/rqioiPLy8hg7dqxyDtopxRxF4auWr9y4ceN2V+O1xpIlS2LatGlRU1MTe+65ZyL7BCgmNTU1ceKJJ0Z1dfXnPp7NZqO+vj4mT54cM2fOjGw2m25AgCLywAMPxLnnnhv5fD5yudxnHs9ms9G9e/eoqKiIb33rWwVICFAcamtr44wzzogFCxZESUnJduVHRDT+bsyYMTFnzpwoKysrUFI6knw+HzfddFNcfvnlUVJSEvX19Z95TklJSey1116xcOHCOPDAAwuQkvZk+fLlcdxxx8VDDz0U/fr1S2Sf/fv3/8x7pnIO2jfFHAWX9j3l5s+fH+PHj1fMAe1STU1NHH300bF27drP/VL6SZlMJs4444yYPXu25V2ADum+++6LCy64IDKZTHzZ16KSkpIoLS2NBQsWmG0MdEh1dXVxwgknxDPPPPOZQu7TSkpKYvDgwbF48eJm33YCmuunP/1pXHvttV/5vGw2GzvttFM89dRT8Y1vfCOFZLRX24q5VatWxUEHHdSmf0s5B+2Xs3AUVNqlHFD8Nm/eHDNmzIgRI0ZEr169onPnztGrV68YMWJEzJgxI2prawsdsWjl8/k4++yzY926dV9Zym17/pw5c2LGjBkppAMoLitWrIiLLrooIuJLS7mIiK1bt0Yul4vvfve7290HBNqacVFyHMvWufTSS5tUykU0vGdWVVXFpZdemkIyOrI//elPTSrlIiLq6+vj/fffj/Hjx8eHH37YxskgGdvuOVdRURETJ07cbsl1YMdmxhwFU6hSzow5KF6PPvpoTJo0Kd56662IiNhll11it912i3fffbfxJt69evWKe+65J8aMGVPIqEXpt7/9bZx//vnN3q5Lly6xatWqxJbhACh2uVwuBg0aFCtXrvzc5Su/SDabjfLy8pgzZ04bpoMGxkXJcSxbZ+nSpXH88ce3eFvLANMWNm3aFAcccEC88847TSqMt8lkMnHllVfG//3f/7VhOtqzNGfMbWPmHLQ/ZsxREGbKAZ82a9asGDduXKxfvz4mTZoUK1asiFWrVsW8efNi9erV8dxzz8WFF14Y69evj3HjxsWsWbMKHbmo5PP5+NnPfhaZTKbZ29bX18dNN93UBqkAitOCBQtixYoVzSrlIhreLx988MFYvXp1GyWDBsZFyXEsW2/69OktWva8pKQkpk+f3gaJIOKee+5pdikX0fC96cYbb4wPPvigjZJB8sycg/ZHMUfqmlPKDRs2LDKZTGQymaiurm7S/pcsWdK4zamnnppMaKBNLV68OKZMmRLdu3ePysrKuPvuu+Owww6Lm2++OQYOHBi33XZbHHrooTFr1qyorKyMsrKymDJlSixcuLDQ0YvGc889F+vWrfvK5dg+Ty6Xi4ceeqhF2wLsiB555JEoLS1t0bYlJSUxf/78hBPBx4yLkuNYtt7GjRtj2bJlzS4/IhqWtFy6dGnjrERIUmu+v2zZsiUef/zxhBNB257HVM5B+6KYI1UtmSl34YUXxptvvhmHHHJIRET88Ic/jKOOOiq6dOkSRxxxxGeef+yxx8abb74ZEyZMSDo+0AZyuVxMnTo16uvr4/7774+RI0d+6fNHjhwZs2fPjvr6+vjBD37Q7NkO7dX8+fMjm822ePuampr4xz/+kWAigOJUX18fDz30UIs/P/L5fMybNy/hVNDAuCg5jmUyKisrm3Tv4i9SX18flZWVCSaCiA0bNsTy5ctbXMyVlpa6yIY205bnMZVz0H4o5khNS5evLCsri169em13VfP5558fEydO/Nznb7uJd7du3RLJDbStRYsWxQsvvBCnnHJKnHLKKU3aZuzYsXHKKafECy+8EIsXL27jhDuGefPmtehK5m2y2awvp0CHUFVVFe+9916Lt8/n8/HMM89ETU1NgqmggXFRchzLZDz88MMtnmEc0VCAPPzww8kFgmi4b2RrVvvI5XLx8MMPK+BpE219HlM5B+2DYo5UJHlPuRkzZsTUqVOjX79+CSYECmXbUkHnnntus7Y755xzIiLiiSeeSDzTjqa2tjaqq6tb9eW0vr7eCSigQ1i6dGmrZhhHNJRzTz75ZEKJ4GPGRclxLJOxePHiVpUXuVwuFi1alGAiaPgsb01hHNFwnmrVqlUJJYIv1hbnMZVzsONr3acYNEGSpVySNm/eHJs3by50DOjw1qxZExERe++9d/Tu3TveeOONzzznhhtuiBtuuKHx5759+8acOXMat+/o/y+/9dZbiexnw4YNHf5YAu3f+vXro6SkpFVLs23bj/dMkmZclBzHMhnvv/9+q/fxwQcfOJYkasOGDa3+HI9o+B613377JZCIjqSurq7QESLi43KuvLw8Jk6cGA888EB06tSp0LGAJlLM0eZmzJgRVVVV8Ze//KVoSrmIMOMOiszRRx/d5Oe+9tprMWTIkIiImDt3bsydO7etYnUoq1evjh49ehQ6BsAO4eKLL46LL7640DFop4yLkuNYFl5dXZ0xJkVp9OjRhY4ArTJ27Ni444474sILL4y5c+fGmWeeWehIQBNZypI2d/LJJ8cuu+wSV111Vfz3v/8tdBwAAAAAgB3a2rVr4/rrr4+99947jj322ELHAZrBjDna3FFHHRWPP/54jBo1Kk466aR47LHHYueddy50rHj11Vdjzz33LHQM6PAWLlwYp556aowdOzb++Mc/bvfYlVdeGTNmzIgf//jHcc0112z32JlnnhkVFRXxyCOPxIgRI9KMXHQ2btwYffr0afV+jjzyyFi6dGkCiQCK13XXXRc33HBDq+6ZFBFx3333xYQJExJKBQ2Mi5LjWCZjr732avUFtrvsskusW7cuoUQQMWnSpHjwwQdbvZzl0qVLi2plJ3YMf/vb32LkyJGFjhFr166NYcOGRS6X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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABtwAAAJ0CAYAAACRP4doAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACGs0lEQVR4nOzdd5RV1fk/4HcKRUDsQhTUYMGCiEJUjEQFFMRgbNhbFLBFiaKiCVEjJsFEBI3GCnbFxIKKgFQjUSI2bIBBBRSxRYLKIGVmzu8PfszXERhm5szlTnmete5azD3lvnPZ+8y553P3PjlJkiQBAAAAAAAAVEputgsAAAAAAACAmkzgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAABquc8++ywuvPDCaNWqVTRo0CBatmwZPXv2jEmTJsU111wTOTk563z8/ve/L7WvM888M+bNm7fW11nXsueffz722WefaNCgQey0005x7733rrfmt956Kzp16hQNGzaMli1bxp///OdK/OZQs1RlXwWAisjm+eITTzwRhx56aGy11VbRtGnT6NixYzz33HPrrdn5YvWRzfbzr3/9K37605/GFltsERtttFHsuuuuMXTo0PXWrP0AmSBwAwCoxebNmxft27ePyZMnx1/+8pd4++23Y9y4cXHIIYfEBRdcEJdeeml8+umnazzOPPPM2HTTTePkk0+ORYsWxa233hpJkpTs94MPPoiHHnqozGUREXPnzo0jjjgiDjnkkJgxY0b8+te/jt69e5d5EeWbb76Jww47LLbffvt47bXX4i9/+Utcc801ceedd2bujYIsq4q+CgCVke3zxRdeeCEOPfTQGDNmTLz22mtxyCGHRM+ePeONN95YZ83OF6uPbLefxo0bx69+9at44YUXYtasWTFw4MAYOHBgmW1B+wEyJSf5/tEKAIBapUePHvHWW2/Fe++9F40bNy61bPHixbHpppuusc1DDz0UZ5xxRjz77LPRrVu3WLp0aVx33XXx2muvRVFRUXTo0CFefPHFuP7666Ndu3brXHbAAQfEgAED4tlnn4133nmnZP8nnnhiLF68OMaNG7fWmm+77bb47W9/G5999lnUr18/IiKuuOKKGDVqVMyePbvq3hyoRqqirwJAZWT7fHFt9thjjzjhhBPiqquuWuty54vVR3VsP8ccc0w0btw4HnjggbUu136AjEkAAKiVvvrqqyQnJyf54x//WO5tXn311WSjjTZK/vKXv6yx7Nlnn03y8vKSgw46KFmxYkW5lnXq1Cnp169fqXVHjBiRNG3adJ01nHbaackvfvGLUs9Nnjw5iYhk0aJF5f5doKao6r4KAOVVHc4Xf6ioqChp2bJl8te//nWd6zhfrB6qY/t5/fXXk2bNmiV33XXXOtfRfoBMMaUkAEAt9f7770eSJLHrrruWa/0vvvgijj766Dj22GPj0ksvLXl+2bJlcdVVV8VNN90UBx98cOy///7RtWvXmD59epnLIlbdz6FZs2alXqdZs2bxzTffxHfffbfWOta1zeplUNtUVV8FgIqqDueLP3TDDTfEkiVL4vjjj19nHc4Xq4fq1H5atGgRDRo0iA4dOsQFF1wQvXv3Xmcd2g+QKQI3AIBaKqnAzOErV66M4447Lpo1axZ33XVXqWVLly6NZs2axbhx46JFixZx7rnnxogRI+I///lPmcuA8qmqvgoAFVXdzhcffvjh+P3vfx9///vfY+utt079+5FZ1an9TJ06NV599dW4/fbbY9iwYfHII49Uye8IUBH52S4AAIDM2HnnnSMnJ6dc9yG46KKLYs6cOfHKK69Ew4YNSy3bfPPN44ILLij13I477hg77rhjRESZy5o3bx6ff/55qeWff/55NG3aNDbaaKO11rKubVYvg9qmqvoqAFRUdThfXG3kyJHRu3fv+Mc//hFdu3Ytsxbni9VDdWo/P/7xjyMiYs8994zPP/88rrnmmjjppJPWWov2A2SKEW4AALXU5ptvHt26dYtbb701CgoK1li+ePHiiIi48847Y8SIEfH4449HixYtytznvffeGzvssEO5l3Xs2DEmTZpU6rkJEyZEx44d1/kaHTt2jBdeeCFWrlxZapvWrVvHZpttVmZ9UBNloq8CQHlUh/PFiIhHHnkkfvnLX8YjjzwSRxxxxHrrdr5YPVSX9vNDxcXFsXz58nUu136ATBG4AQDUYrfeemsUFRXFvvvuG48//njMmTMnZs2aFTfffHN07NgxXnzxxbjwwgvjqquuilatWsVnn31W6vH111+nev1zzz03Pvzww7j88stj9uzZ8be//S3+/ve/x8UXX1yyzi233BJdunQp+fnkk0+O+vXrx9lnnx3vvvtuPProo3HTTTfFJZdckqoWqM6y3VcBqLuy/Tfo4YcfjtNPPz2GDBkS++2331r363yx+sp2+7n11lvjmWeeiTlz5sScOXNi+PDhccMNN8Spp55aso72A2wwCQAAtdrChQuTCy64INl+++2T+vXrJ9tuu21y5JFHJlOmTEnOPPPMJCLW+TjjjDNSv/6UKVOSdu3aJfXr109atWqV3HPPPaWWX3311cn2229f6rk333wzOfDAA5MGDRok2267bTJ48ODUdUB1l+2+CkDdlc2/QQcddNB69+t8sXrLZvu5+eabkz322CNp1KhR0rRp02TvvfdO/va3vyVFRUUl62g/wIaSkyQVuLslAAAAAAAAUIopJQEAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGxnz6aefxn777RdXX311JEmS7XKqheHDh0ebNm3inXfeyXYpAAAAAAB10ocffhh777133HjjjdkuhVokP9sFUHv997//jenTp8f06dMjIuKaa66JnJycLFeVPcOHD4/evXtHRMTcuXOjTZs2Wa4IAAAAAKDu+eSTT2LGjBkxY8aMiIi45JJLslsQtYIRbmRcr1694tprr41rrrmmzo50Wx22HX/88dkuBQAAAACAWHXtun///ka6USWMcCPj+vfvH+3bt48rrrgiIureSLfVYdv5558fv/vd7+Lvf/97tksCAAAAAKjzrr322thpp52if//+EWGkG+kI3NggBgwYEBFR50K374dtt9xyS3zxxRfZLgkAAAAAgIjIycmJP/zhDxERQjdSE7hRZZYtWxYDBw6M//3vfxERsWjRolLL61ro9sOw7fu/68033xyjRo2qktc58cQT49BDD62SfQFARSRJEm+99VZMnDgxlixZEq1bt47u3bvHpptumu3SoFZIkiRmz54d48ePj8WLF8ePf/zj6NGjR2y55ZbZLg0AymXBggUxZsyY+PTTT2PrrbeOww8/PHbYYYdsl0UNkSRJvPnmmzFp0qRYsmRJ7LrrrtG9e/fYZJNNsl0aWfLiiy/GiBEjqmRfn332Wcm/hW5UFYEbVebZZ5+NIUOGRIcOHSI/f1XT6tWrV7Rp06ZknboSuq0rbNtyyy2jb9++8dZbb8XMmTNTv87cuXNj+vTp8fbbb6feFwBUxEcffRSnnXZavPDCC5Gbmxu5ublRWFgYDRo0iCFDhsT5559fK//Gw4byxRdfRO/eveOZZ56J3NzcyMvLi5UrV0ZeXl5ce+21cfnll5eccwNAdfPdd9/FFVdcETfffHPk5OREfn5+FBYWRpIk0adPn7jxxhujSZMm2S6Tamz+/Plx6qmnxr/+9a9SnzcaNmwYN954Y5x77rk+b9RBV1xxRcyePTt22mmnKtnfaaedVvIlAKEbVSEnSZIk20VQOzz++ONx3HHHxaJFi2KzzTYrc93rr78+rrjiirjqqqtqXehW1si2qtavX7+YPHmywA2ADWrChAlx9NFHx/Lly6OwsHCt63Tr1i2efvrpqF+//gauDmq+V155Jbp37x5ff/11FBUVrbE8Jycn9ttvvxg/fnxsvPHGWagQANbtk08+iYMPPjg+/PDDKC4uXmN5bm5utGzZMiZPnhytWrXKQoVUd88991wcc8wxsWLFinV+3ujRo0eMGjUq6tWrt4GrI5s6deoUrVq1ivvuuy9jr5EkSfz2t7+NP/3pTzFkyBChGxWSm+0CqJsGDBgQgwcPjmuvvTauueaaqC2574YM2wAgGz7++OPo1atXLF26dJ0ffiMixo8fXzKiHSi/RYsWxVFHHbXOsC1i1UWAV155Jc4999xacx4NQO1QWFgYxx9/fMydO3etYVtERHFxcXzyySdx3HHHxfLlyzdwhVR38+fPj+OPPz6+++67Mj9vjB07Nn7zm99swMqoK1aPdLvyyiujf//+ceONN2a7JGoQgRtZU9tCN2EbVC8FBQVx8803R5cuXaJ58+ZRv379aN68eXTp0iVuvvnmWLp0abZLhBrp3HPPjYKCgvX+3U6SJIYOHRovvfTSBqqMmsZxeu0uu+yy+Pzzz9cZtq1WVFQUDz/8cDz99NMbqLLqRxuCzNLHqIxbbrklpk2btt6/Y4WFhTFjxoz4y1/+soEqq370sbU755xzYunSpeX6vHHDDTfEyy+/vIEqoy4RulFpCVSRxx57LImIZNGiRRXabvDgwUlEJFdddVVSXFycoeoy6+67704iIjn//PM36O9w0UUXJW3atNlgrwc1xejRo5PmzZsnEZFERLLJJpskP/7xj5NNNtmk5LnmzZsno0ePznapUKNMmDChpA+V55GXl5fss88+NfbvO5njOL12b7zxRpKTk1PuPpabm5tsv/32yYoVK7Jd+ganDUFm6WNUxldffZVsvPHGFTpfbNiwYbJw4cJsl77B6WNrN27cuAp/3vjJT37i80YdcuCBByann376Bnu94uLi5Morr0wiIhkyZMgGe11qLiPcyLqaPtKtPCPbDj744MjJyYmcnJyYMWNGufZ77733lmzz61//umqLhlrszjvvjCOPPDK+/PLL6N27d7z55psxc+bMeOKJJ2LWrFnx1ltvRZ8+feLLL7+MI488Mu68885slww1xn333Rf5+fnlXr+oqChef/31eO+99zJYFTWN4/S6Pfjgg5GXl1fu9YuLi2P+/Pl1biSpNgSZpY9RWU8//XR8++23Fdpm+fLl8cQTT2SooupJH1u3++67r0LnQkVFRfHKK6/E+++/n8GqqAkyde3VSDcqLNuJH7VHZUe4rVYTR7qVd2TbQQcdlPTp0yf59NNPk5UrVyZJkiTz589PevTokWy00UbJVlttlVx66aUly5IkSZYuXZp8+umnSceOHZN+/fqtdb9GuEFpkyZNSvLy8pKNN944mTBhQsnz/fv3TyIiGTBgQMlzEyZMSJo0aZLk5eWVWhdYu+Li4mSLLbao0DdO4/+PwLn55puzXT7VhON02XbbbbcK97H8/Pzkt7/9bbZL32C0IcgsfYw0Tj755CQ/P7/C54o9e/bMdukbjD62bkVFRclmm21W4XOhnJyc5NZbb812+Wwg6xrhlqlrr6sZ6UZ51eoRbsOGDYvPPvuszHV22GGHUqn3F198EXvssUdERKxYsSIGDBgQO+20U+y2227Rpk2bGD58+Br7mDJlSuTk5MQDDzxQZbVfeumlMXLkyIiIGDlyZLRr1y7atGkTbdq0iSFDhpSs99Zbb8Xhhx9eZa+bTTVtpFtF79nWqFGjaN68eeTn50dRUVEcccQRsWLFinjppZfivvvui3vvvTeuuuqqkvU32mijkjm8gfUrLCyMCy64IIqKiuKhhx6Krl27lrl+165d45FHHomioqK48MILy7wZMxDx9ttvx1dffVWpbceNG1fF1VATOU6X7bPPPotZs2ZVeLvCwsIYO3ZsBiqqfrQhyCx9jDSKi4tj3LhxFW4HxcXFMWnSpFi5cmWGKqs+9LGyvfnmm/G///2vwtvl5ubGc889l4GKqGkyee3VSDfKq84GbsXFxVFcXLzG80899VQceeSRERFx5plnxvvvvx9vvvlmzJo1K0aPHh033HBD3HbbbaW2GT58eHTp0mWtYVxlfPLJJzFmzJg44YQTIiKiZcuWMW7cuHjnnXfixRdfjNtuuy2ef/75iIho27ZtNGjQICZPnlwlr51tNSV0q2jY9kPjx4+PmTNnxoMPPhjt2rWLww8/PAYNGhS33nprrFixIkNVQ+02adKkmD17dvTs2TN69uxZrm1+/vOfR8+ePWP27Nm15jgKmTJhwoTIza34qWNxcXFMmTLF3zccp9dj4sSJld72jTfeiEWLFlVhNdWTNgSZpY+Rxttvv13pv0VLly6N6dOnV3FF1Y8+VrbKft4oKiqqM6Et5ZeJa69CN8qj/DfhqOamTZsWl112WXz77beRJEkce+yxsXDhwjjhhBNio402invvvTdGjRoVb7/9dixZsiQ+/vjjmDBhwhr7GTVqVFx99dUxZ86cGDVqVHz88cfRuHHjiFg1Gm7IkCHRu3fvOO+88yIiYvHixfHss8/GrFmzom3btvH+++/HTjvtFBGrArsGDRrE+++/Hx9//HG0adMmRo4cGcXFxbHDDjvEK6+8Ei1btoyIiN/85jdRVFQU119/fYwYMSKOPfbYkhDnpz/9aUl9m2yySey6664xb968kudOOumkuOOOO6Jz587rfH8KCgrSvcHlsGzZsirZz4ABAyIi4oorroiIiGuuuabCgVYmpQ3bIla11z333DOaNWtW8ly3bt3ivPPOi3fffTf23nvvcu+ruLh4g/z/QnW3+tv9vXr1WqNPrD7xXrly5RrLjjvuuHjmmWdizJgxpY63QGnvvvtu5ObmrvULS+vz3XffxYcfflhy3kPd5DhdtnfeeSfq1atXqYtFSZLEu+++G/vss08GKqs+tCHILH2MNN56661U27/99tvRrl27qimmmtLHyjZz5sxKf94oKCiIefPmxTbbbJOByqhOioqKyrVeVV57/b7VoVtERP/+/SMi4pJLLqnUvqilsjujZdX46quvkq233jp54YUXkiRZNefvV199lWy//fbJG2+8UbLe1VdfnfzoRz9KPvvss5Lnvr/ON998k7Rq1SopLi5OHn300aRt27ZrvNaiRYuSiCjZx6233pqccMIJSZIkycUXX5xceeWVJeueccYZyb777psUFBQkhYWFyQEHHJA8/PDDSZIkyW9+85uSdZctW5Y0b948mTdvXpIkSdK5c+fkmWeeWevv+u677yabb7558vHHH5c8N3/+/GSLLbYo8z2KCs5/nOZR2Xu4/dDqe7r94Q9/qJL9VYUHHnigXPds+6GDDjqo1FzAffr0SQ477LBS6xQUFCQRkYwZM6bMbb/voosuSurVq7dB/389PDw8PDw8PDw8PDw8PDw8PDw8PDb0Iy8vb533cMvEtdd1+f493dxDkO+rFVNKTps2LVq3bh2dOnWKiFVz926++eZrXbdHjx6lku3vGzt2bHTv3r1cI5Y22mijiFg12umss86KiIizzjor7rvvvlJJ+9FHHx2NGjWKvLy82HfffeODDz6IiIjzzz8/7rvvvli+fHn84x//iH333Te23377iIhYsGDBWmtcsGBB/OIXv4jbb789WrRoUfJ88+bN46uvvqqyEWbVxSmnnBJbbrllTJkyJdullPjnP/8Z9erVi3POOadajboDAAAAACDzcnJy4qyzzoomTZpUq2vXZF+tmVKyvJo0abLOZU8++WRJeLb33nvHnDlz4quvvootttiiZJ1p06bFHnvsEU2bNo0ZM2bEW2+9FX369CkJX/773//G2LFj4+c//3lERDRs2LBk27y8vJIbnG677bbxs5/9LB599NG47bbb4tprry1Zr1GjRmuEZwsXLoyuXbvGwIEDo1evXqWWLVu2LPLy8sq8weOSJUvKfF+qwqhRo+LUU0+tkn0tWLAgDj744GjcuHHcddddVbLPqnD99dfHa6+9Fl26dInJkyfHnnvuWan9NG/efI35yT///POSZRWx884714m5zmF9fvvb38ZNN90UDzzwQBx88MElX35YunRp7L777hER0bt37xg4cGDJNnl5eTFlypQ4/fTT49e//nVcd911WakdaoLzzjsvHnnkkUrfrP3NN9+MHXfcsYqroiZxnC7bVVddFX/9618rff+RiRMnxv7771/FVVUv2hBklj5GGo8++micffbZld7+pptuSrV9TaCPla1v377x97//vdKfN959992SwQzUXoceemi51qvKa69r8/7778fBBx8c2267bdx8882p90ftUSsCtwMOOCDmzJkTU6dOjU6dOkVxcXEsXrw4mjZtGl9//XW59rFixYqYNm1a3H///RGxKsTo2bNn9O3bNx544IFo1KhRzJs3LwYMGBBDhgyJiFWj2/r37x+DBw8u2c9tt90Ww4cPLwncytKvX7/o1atXNGnSJLp27VryfNu2beO9994rGbH36aefRpcuXWLAgAFxxhlnrLGfWbNmRZs2bcq8sejq+9Bl0vfDxTRWh22FhYXx/PPPxw477FAl+60Km2++eUycODG6du0anTt3rnTo1rFjx/jDH/4QX3zxRWy99dYRsermsE2bNi05ySqv3NzcDfL/C9Xd4YcfHjfddFM89thjpcL/789/37Rp0zVOwB9//PGS7fUlWLetttoq1ejubbfdVh+r4xyny9asWbNK3bNktW222aZWvz8R2hBkmj5GGj/60Y9Sbd+8efNa3370sbKl/bxRF86FWBVCl0dVXnv9odVh2+rRbWmPf9QutWJKyc022yyefPLJuOKKK6Jt27axzz77xIsvvhgXXXRR9OnTJ9q1axczZswocx+TJ0+OAw88MOrVq1fy3P333x877rhj7LnnnrHzzjvHTjvtFH/5y1+iW7dusWzZsnjooYfilFNOKbWf448/PsaPH1+SmJdl//33j0022STOP//8Un9QjjvuuHjuuedKfr7qqqvio48+iptuuinatWsX7dq1i3vuuadk+bhx4+K4445b7+vVBNU5bFttdejWsmXL6Ny5c7z99tsV3sdhhx0Wu+++e5x22mnx5ptvxnPPPRcDBw6MCy64IBo0aJCBqqH269KlS+y6667x1FNPxbPPPluubcaMGRNPPfVU7LrrrtG5c+cMVwg1W6dOnSo98maXXXYpNWMAdZPjdNk6depU7pvA/9Bmm20WrVu3ruKKqh9tCDJLHyONjh07pgpLVn/pvDbTx8qW5vPGbrvtFptuumnVFkSNlqlrr8I21ivbN5GrLs4555zkH//4xzqXFxUVJZdddlnSrl275KuvvqqS11ywYEHSvHnz5Jtvvlnjtdq3b598/PHH693H8uXLkz333DP58ssvq6SmNB577LEkIpJFixZVavuPP/442XHHHZPtt98+mTt3btUWlwFfffVVsvfeeydbbrll8tZbb5W57tpuvjlv3rzk8MMPTzbaaKNkyy23TPr375+sXLmyXNuudtFFFyVt2rSp7K8Atc7EiROTvLy8ZOONN04mTpyYJEmSLFmypOTmupdcckmpdTfeeOMkLy8vmTBhQrZKhhpj8eLFSW5uboVvap2fn1/hG1BTezlOr9vKlSuTJk2aVKqPnXjiidkuf4PRhiCz9DHS6NChQ4X/jkVEsuuuu2a79A1GH1u3RYsWJTk5OZU6F/r++0btduCBByann376Gs9n6trr982ZMyfZdtttk9atWycLFy6s7K9ALVcrRrhVhdtvv73MUWK5ubnx5z//Od54443YfPPNU7/eVVddFfvtt18MHjw4Nt544zVe64477oh58+atdz9z586NwYMHx5Zbbpm6pmyqCSPbfijtSLftt98+xowZE0uXLo0vv/wybrjhhsjPrxWzvELWdOnSJW699dYoKCiIbt26xfnnnx8zZ84sWX722WfHzJkz44ILLohu3bpFQUFB3HrrraWm9QXWbpNNNomf/OQnFd6usLAwDjvssAxURE3kOL1u+fn50bVr13JPk7NaXetj2hBklj5GGocffniF/47l5+dHjx49MlRR9aOPrdtmm20W++yzT4W3q2vnQpRfVV57NbKNcst24kftUdkRbjVtZNsPlWek20EHHZTUq1cvady48XpHw6324IMPJo0bN05yc3ONcIMKGj16dNKsWbM1vvm26aablvy7WbNmyejRo7NdKtQogwYNqvAotwYNGiTffvtttkunmnGcXrs777yzwt/szsnJKdfMGLWNNgSZpY9RGS+99FKlRrjVhdFbP6SPrd0111yT5OXlVaj9NGzYMCkoKMh26WwgZY1wy8S11yQxso2KyUmSJKlUUgc/8Pjjj8dxxx0XixYtis0226xc29TEkW1rs2jRoujatWt8/PHHMXny5Nhzzz1LLf/kk0/iu+++i4iI7bbbLurXr7/efX777bcl9wLcdNNN1zqKsV+/fjF58uRK3UcOaruCgoK4++6748knn4x//vOfEbHqJsx77rln/OIXv4izzz7bDZWhgv73v/9Fq1atYvHixeVaPzc3NwYOHBi///3vM1sYNZLj9JqWLVsWu+yyS3zyySdRXFy83vXz8vLi7LPPjjvuuGMDVFf9aEOQWfoYFZUkSRx22GHx/PPPR2Fh4XrXz8vLi5/85Cfx0ksvpbr/W02lj61p0aJF8eMf/zi++eabcq2fk5MT11xzTVx11VUZrozqolOnTtGqVau47777Sj2fqWuvRrZRUQI3qkxFA7faErattr7QLRMEbrB+BQUF0aRJk4iIWLJkSZ37wAJVbfjw4dG7d+/1rpeXlxfbbLNNzJo1S7+jTI7TpT3zzDNx5JFHrne93Nzc2GSTTeK9996LrbbaagNUVn1pQ5BZ+hgVMWvWrGjXrl2sWLFivevm5+fHyy+/XKlpBGsTfay0O++8M84555z1rpeXlxctWrSImTNnRqNGjTZAZVQH6wrcMkHYRmW4hxtZUdvCtoj093QDgJrgrLPOiuOPPz5yc9d9GpmXlxc5OTnxxBNP1PkLBlBRPXv2jIsuuqjMb/rn5uZGkiQxcuTIOh+2AVC97LbbbnHrrbdGRKx31Npf/vKXOh+2saY+ffrEscceu97PG7m5ufHEE08I28gIYRuVVbm7BEIZJk6cGBtvvHFERDRv3jzatWtXanltDNtWWx26de3aNTp37rzWkW7vvfdezJ07t0peb968eVWyHwAor5ycnLjvvvuiRYsWMXTo0MjNzY2ioqKS5Xl5ebHtttvGww8/HB06dMhipVBzDRkyJLbccsuS6Vh/2Mc233zzuP/+++Owww7LVokAsE5nn3121K9fP84///xYvnx5qekl8/PzIz8/P2666abo06dPFqukusrJyYkHHnggfvOb38SwYcMiLy+v1LlQbm5utGjRIh5++GGBbR31ySefxLhx46pkXy1atIg2bdqUek7YRhqmlKTKzJgxI/bff/9Yvnx5yXP5+fnxzjvvROvWrSOidodt37eu6SW//vrraNGiRSxZsqTKXuuEE06IkSNHVtn+oLYxPQdkzj//+c8YMmRIPPPMMxER0apVqzjppJPiiiuuKOl3sD6O0+v26quvxuDBg+Pxxx+PiFUXBI4//vj4zW9+E1tssUWWq6s+tCHILH2Mypo/f3788Y9/jCeffDK+/PLLiIg47bTT4qqrroqddtopy9VVH/rYuj3//PMxZMiQGD16dERE7LjjjnHyySfH5Zdf7vNGHXXuuedW6f2LGzRoEB9++GFss802ESFsIz2BG1Xqv//9byxbtiwiVs3bfdhhh8W///3v2G+//epM2Lba2kK3zz//PJo3bx4jRoyIQw89NCIili5dWhJIvvfeexUeCr/11luX60agUFf58AKZpY+RljZUNu/P+nmPILP0MdLShsrm/Smb94fvKywsjM8++6xC26zr2uvLL78cxx13XMyePTtat24tbKNKmFKSKrXllluW/Pt///tfyb8XLFgQBx54YCRJEv/85z9rfdgWsfbpJbfeeuuIWPU+tWjRIiJWnTistu222zpxAAAAAAD4gfz8/JJrquW1rmuv37/lj7CNqrLuu09CFVkdtn3yyScxduzYOhG2rbY6dGvZsmV07tw53n777WyXBAAAAABACNuoWgI3Mu7MM8+MTz75JAoLC2P77bfPdjkb3PdDt6OPPjrb5QAAAAAAEBEnnniisI0qI3Aj4zbffPMoLCzMdhlZtTp0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cfXVV0f79u1jp512KhVQTJs2LQ488MDYa6+9om3btqVGrT399NPxi1/8IiZNmhTz58+PG2+8MfLz8yMiol27djFw4MAYNGhQyfrvvfdezJ07N+6///4YNWpUfPPNNyXLDj744Lj00kujU6dOseOOO8a5554bERELFy6MZs2axdKlS0vWPfnkk0sa+x133BEnn3xyybJddtkl9tprr5I6vq9+/fpx2GGHxcMPP5z2raSaE7oBAAAAQO0kbKu7fphX/P73v4+FCxfGCSecEO3atYsZM2bENddcE8cee2x069Yt2rRpE59++uka+xk1alQcffTRMWfOnBg1alTceeed0bhx44hYNRpuyJAhpbKNxYsXx7PPPhsPPvhgzJw5M95///2SZWeeeWacc8450aVLl9hll13imGOOiRUrVsSyZcuiefPm8fHHH5es+5vf/CYGDBgQEREjRoyIY489NnJyciIi4qc//Wk0b948IiI22WST2HXXXWPevHkl25500klxxx13VN2bmUVrpjc10LBhw2KrrbaKiIjBgwfHNddcE1dccUV8/fXXJY1z3Lhx0a9fv+jRo0csWrQojjrqqHjssceiU6dOUVxcHIsXL46IiDlz5kTTpk2jefPmcf/990f79u2jfv36pV6vY8eO0b9//5Kfhw8fHqeddlpss8020blz5xg5cmT07du3ZPkHH3wQU6ZMiZUrV8buu+8e06ZNi44dO0bXrl3jwQcfjL59+8bnn38eEydOjDvvvDMiIp5//vm4+OKLy/0edOzYMZ5++uk477zz1rlOQUFBufdXlb7/utmqoTZZHbr16tUrjj766HjyySejR48e2S4LAAAAAKikTIVthYWFdfqabHW6Nr06+PqhdeUV99xzTzz66KPRrl27iFgVpk2bNi3eeOONaNas2Rr7+fbbb2P27Nnxk5/8JP7xj3/EzjvvHFtssUWpdTp27BiffvppfP7559GsWbN4+OGHo1u3btG8efM49dRTY8SIEaVuXzVjxoyYMmVKNGjQIH72s5/F448/HieddFKcffbZcdttt8Uf//jHWL58edxzzz3x73//OyLKzjZmzpwZ06ZNi9tvv71UTbUlXK4VgdvDDz8cDzzwQCxbtiyWLVsWW265ZURENGzYMI455piIWPWf9sEHH0TEqrS4devW0alTp4iIyM3Njc033zwi/m86yfXZaKONImLVAev++++Pf/7znxERcdZZZ8WgQYNKBW4nnHBC5OfnR35+frRr1y4++OCD6NixY/Tr1y/69OkTffv2jbvuuitOOumkaNKkSURELFiwYK2dZl2aN28eCxYsKHOd1fvOpor8TrVRbm7VDCpdHbodddRRcfTRR8dHH31U599bAAAAAKipHn744Rg6dGgMGzasysKH4uLieOKJJ+KJJ56okv3VdNm+fpokyVqfLyuv+KEePXqs8/cYO3ZsdO/evWRkWVlW5xvDhw+PP/3pTxGxKtvo1q1bDBo0KPLy8iIi4uijj45GjRpFRMS+++5bkrGcf/75se+++8bVV18d//jHP2LfffeN7bffPiLWnW0sWLAgfvGLX8Ttt98eLVq0KHm+efPm8dVXX8WyZcuiYcOG6629OqvxU0r+61//iptvvjnGjBkT77zzTtx4442xbNmyiIho0KBBSePKy8uLoqKi9e5v1KhRJYHbPvvsE6+99lqsXLmy1DrTpk2LAw44ICIiRo8eHYsXL45u3brFDjvsEBdccEG8/vrr8c4775Ss//1GkpeXF4WFhRGxqoE2atQopkyZEnfeeWepA2mjRo1Kfo/yWLZsWUknoW5YuHBhzJo1K1q0aOH/HgAAAABqsO222y7q1asXL7zwwhrXo2G1sgbVfH8w0d577x1z5syJr776qtQ606ZNiz322COaNm0aM2bMiLfeeiv69OkTO+ywQ/z85z+P//73vzF27NiS9deVbWy77bbxs5/9LB599NG49dZb41e/+lXJemvLNhYuXBhdu3aNgQMHRq9evUotW7ZsWeTl5a0x02BNVONHuP3vf/+LjTfeOLbYYotYsWJFueb6POCAA2LOnDkxderUUkM0ly9fHkuWLImdd945IiI6d+4cLVu2jIsvvjiGDRsW+fn5MWPGjBg6dGg89thjEbEqAR42bFjJvdkiIgYMGBDDhw+PoUOHrreWfv36xemnnx6777577LLLLiXPt23bNt57771o2bJlud6HWbNmxV577VXmOkuWLCnXvqpaQUFBSaL9+eefr3PobF2weurTtObNmxeHHHJI5ObmxpQpU6Jp06ZVsl8AAAAAYMPr1KlTPP7443HsscfGiSeeGCNHjox69eql2mdubm4cc8wxcf/991dRlTVPTbg2va68omnTpvH111+Xax8rVqyIadOmlfxf77zzztGzZ8/o27dvPPDAA9GoUaOYN29eDBgwIIYMGRIRq7KN/v37x+DBg0v2c9ttt8Xw4cPj5z//+Xpfs1+/ftGrV69o0qRJdO3ateT51dnG6hF7n376aXTp0iUGDBgQZ5xxxhr7mTVrVrRp06bKZofLphofuHXv3j0efPDBaN26dWyxxRbRtWvX+OSTT8rcZrPNNosnn3wy+vfvH99++23k5ubGoEGD4pNPPokjjzyyZL3c3NwYO3ZsXHbZZSVh2Keffhovv/xytG3bNhYuXBiTJk2Ke++9t9T+TznllOjSpUtcf/31663/uOOOi/POO69UArz6+eeee66koU6aNCnOOOOM+OabbyJJknjsscfib3/7W0m948aNK3Wzw7WpDgeTxo0bV4s6arIfhm3bbbddtksCAAAAAFLq2bNnlYdu+fn5rsf+f9X12vS68oqLLroo+vTpE40aNVojg/ihyZMnx4EHHliqvdx///3xu9/9Lvbcc8/Izc2NuXPnxujRo6Nbt26xbNmyeOihh0pulbXa8ccfH5deeml8/vnn6617//33j0022STOOeecUtNYHnfccXH//fdH7969IyLiqquuio8++ihuuummuOmmmyJiVVj3y1/+MiJWZRvHHXdcud6r6i4nWdfEoXVQ9+7d47rrrosOHTqsdfmyZcuid+/e8cUXX8TTTz9dJfOJvvrqq3HyySfH7NmzSyW4S5YsiQMOOCCmTZu23oPAzJkz45xzzompU6emricTCgoKSoa6LlmypFoe1DaURo0axeDBg+Oiiy6q1PbCNqg4xyDILH2MtLShsnl/1s97BJmlj5GWNlQ270/Z6ur788wzz8Sxxx4bPXv2TBW6HXbYYbHZZpvFo48+WsUV1hx1pQ2de+650bVr13UGV8XFxXHFFVfEhAkTYtKkSeu8R1xFfPLJJ9GhQ4f4z3/+ExtvvHGp19p3331j1KhRpe7VtjYrVqyIDh06xOTJk2PLLbdMXVO21fgRblVp3LhxZS5v2LBhPPjgg1X2er17947x48fH3XffvcZwySZNmsTQoUNj7ty50aZNmzL38/HHH5drKk1qNmEbAAAAANR+mRjpRu12++23l7k8Nzc3/vznP1fZ61111VUxYsSIGDx4cKmwbfVr3XHHHTFv3rz1Bm5z586NwYMH14qwLULgllV33313mcu7dOlS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0Hnnnee+bkC1InADAKBcZs6cGbfccku5p7ErKiqKSy+9NMNVQe2xcOHCCk3HmpubGxdeeKHRAQBUC8uXL48LL7wwcnPLd7kxJycnLrnkkigoKMhwZdQU77zzTtx2223lCtsiVs0McPnll2e4KoDyE7gBAFAut912W7kvoESs+gD8+OOPx8KFCzNYFdQeI0aMiJUrV5Z7/cLCwnjxxRfjzTffzGBVAFA+Y8eOjfnz55f7y1lJksRnn30WTz75ZIYro6b429/+Fnl5eeVev7CwMB599NH4/PPPM1gVQPkJ3AAAKJdnn302CgsLK7zdxIkTM1AN1D5jx44t90XK1XJzc2PChAkZqggAym/8+PGRn59foW3y8/P9HaOEzxtATSdw+4FXX301Dj/88IiI+Prrr+Occ86JVq1aRevWraN9+/bx1FNPrbHNPffcEzk5OTF16tQqq6NXr14xbdq0iFj1x6Z9+/bRoEGD+PWvf11qvVtuuSX++Mc/VtnrAgCszfz582Pu3LkV3s5FFCifb7/9Nl5++eUKTw+ZJEk899xzGaoKAMpvzJgxFQ5LCgsLY+zYsaZHJj788MNK3Y/N5w0oTb6RXQK3H3jyySfjqKOOiiRJokePHlGvXr34z3/+E++9914MHz48zjvvvBgzZkypbYYPHx5dunSJ4cOHV0kN06dPj0WLFkXHjh0jImLnnXeOESNGxGWXXbbGun379o3hw4fH119/XSWvDQCwNpX9EOsiCpTP888/X+77lXxfkiQxderUWLZsWQaqAoDymTdvXsyfP79S23755Zfx7rvvVnFF1DQTJkyInJycCm9XWFgYY8aM8XkD/j/5RnZVbJx3NfXdd9/FmWeeGW+//XbUq1cvmjVrFvXr14+TTz45Tj755IhYNaz9d7/7Xbz88stx9913x4033hj169ePoqKiuPvuu2O//faLiIinn346JkyYEJMmTYr58+fHlClTSobDt2vXLgYOHBiDBg2KHj16RETEe++9F3Pnzo1XXnkldt999/jmm2+iadOmERFx8MEHR4cOHeLll1+OhQsXxqGHHhq33357LFy4MPbee++YO3duNGrUKCIiTj755OjUqVOcd955cccdd5TUHRGxyy67RESsdU7r+vXrx2GHHRYPP/xwnHfeeet8j7J5A9rvv7Yb4QIbmmMQVI3p06dHfn5+paZ4+eqrr+L999+PbbbZJgOVUdM5Tq/y73//u9J9bMWKFfH666/HXnvtlYHKqj9tCDJLH6M8XnrppVTbT5s2LX784x9XUTU1iz62yvTp0yMvL69S50JffvllzJ07N5o1a5aByqo/bahs1en9ady48Vqfl2+sP9+oMZJa4IknnkgOO+ywkp+/+uqrZPz48UnHjh1LnjvyyCOT+++/P0mSJGnatGmycOHCJEmSZMWKFcm3336bJEmS/Oc//0kOOOCAJEmS5Prrr0+OPPLINV7r9ddfTxo2bFjy82WXXZYMGDAgSZIkOfroo5M77rijZNlBBx2UHHXUUcnKlSuTpUuXJjvssEPy0ksvJUmSJCeffHLJup999lmy1VZbldTRqlWr5O23317jta+++uqkX79+azx/3333Jccee2yZ71FEeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhk4bEu8o315xs1Ra2YUnKvvfaKWbNmxfnnnx+PPvpo1KtXLw499ND4+uuv44033oj58+fH9OnT4/jjj4+IiC5dusRpp50WN910U8ydOzeaNGkSEf833HJ9Ntpoo4hYNWT5/vvvj1/+8pcREXHWWWetMezyhBNOiPz8/Nhoo42iXbt28cEHH0RERL9+/eLWW2+NiIi77rorTjrppJI6FixYUKFvZDRv3jwWLFhQ7vUBAAAAAIDsk2/UnnyjVkwp2apVq5g5c2ZMnjw5Jk6cGJdffnnMmDEjLrroovjrX/8azZo1i7POOisaNGgQERGPP/54vPbaa/H8889Hjx494rrrrosTTzwxRo0aFffdd19EROyzzz5x8803x8qVK6NevXolrzVt2rQ44IADIiJi9OjRsXjx4ujWrVtERCRJEgsXLox33nkn2rRpExERDRs2LNn2+8Oi991332jUqFFMmTIl7rzzzpg4cWLJeo0aNarQPRiWLVtW0knWZcmSJeXeX1UrKCgo6WCff/75OofOAmSCYxBUjb59+8ajjz5aqXtMRUS88cYbsfPOO1dxVdQGjtOrDBw4MG699dZYuXJlpbYfP358yeeUukYbgszSxyiPRx55JPr06VOpbXNycuLGG2+s9PY1nT62ytlnnx2PPfZYpT9vvPXWW9GqVasqrqpm0IbKVhPeH/nG+vONmqJWBG4LFiyIzTbbLI488sjo3r17jBo1Kj7++OM47bTT4tprr42ioqJ45ZVXImJVajtv3rzo0KFDdOjQIf773//G9OnT46CDDoolS5aUXAjq3LlztGzZMi6++OIYNmxY5Ofnx4wZM2Lo0KHx2GOPRcSqmwkOGzYszj333JJaBgwYEMOHD4+hQ4eut+5+/frF6aefHrvvvnvJPKYREW3bto333nsvWrZsWa7ff9asWeu9X0N1OZA0bty42tQC1D2OQVB5m222WeTm5lb6A/DWW2+t/7Fedfk4vfnmm0eSJJXefquttqqz79331eU2BBuCPsa6bLnllpXeNkmS2GKLLbStqNt9zOeNqlGX21B5VNf3R76x/nyjpqgVU0q+/fbb8dOf/jT22muv2HvvveO0006Ltm3bRqNGjeKYY46Jn/70pyX/uUVFRXHWWWdFmzZtol27dvHaa6/FJZdcEk899VQceeSRJfvMzc2NsWPHxvLly2OXXXaJVq1aRceOHePxxx+PvfbaKxYuXBiTJk2KXr16larllFNOiQcffDBWrFix3rqPO+64WLJkSfzqV79a4/nnnnuu5OdJkyZFixYt4sYbb4zhw4dHixYt4umnny5ZPm7cuDjuuOMq9d4BAJRHhw4dKj3yZuutt44f/ehHVVwR1C4dOnQo+bZoRTVs2DB22223Kq4IAMqvQ4cOqbb/yU9+UkWVUFOl+bzRvHnz2Hrrrau4Ithw5Bu1J9/ISdJ8jbKaKyoqivbt28df//rX6NSpU5nrdu/ePa677rp1niAsW7YsevfuHV988UU8/fTTpYZSVtarr74aJ598csyePTtyc/8v+1yyZEkccMABMW3atPUm7jNnzoxzzjknpk6dmrqeTCkoKCiZv3XJkiXV8lsEQO3lGARV45NPPokWLVpUeLv8/Pw49dRT45577slAVdQGjtOrFBQUxKabblrh0C03NzcOPfTQGDduXIYqq/60IcgsfYzy2mmnnUru7VMRzZs3j4ULF0ZOTk4Gqqr+9LFVPvroo9h+++0rvF1+fn6cccYZcffdd2egqppBGypbTX5/5Bs1T60Y4bY2Tz/9dOy4447RsWPH9TbGiFUpalnfxmnYsGE8+OCDMX78+CppjL17945jjjkmbrnlllKNMSKiSZMmMXTo0Jg7d+569/Pxxx/HHXfckboeAICybLvttqWmiCivwsLCOPTQQzNQEdQujRs3jgMOOKBSFxu7d++egYoAoGKOOOKIyM+v2N1r8vPzo0ePHnU2bOP/bLfddpW6B5vPG9RW8o2aqVaPcKN6qMnfIgBqPscgqDoXX3xx3HLLLRUegfP555+b4oV1cpz+P4MHD47f/va3UVxcXKHt3nnnndhjjz0yVFX1pw1BZuljlNfo0aOjZ8+eFd7ukUceiRNPPDEDFdUM+tj/ueiii+K2226r0OeNnJyc+OKLL1LdR7Cm04bK5v1hQ6q1I9wAAKhaP5yXfX3y8vLitNNOE7ZBOZ199tmx0UYblXv9/Pz86Nq1a+y+++4ZrAoAyqd79+6xyy67rDHSYV1yc3Nju+22i6OPPjrDlVFTXHjhhRVaPy8vL84444w6HbYB1YvADQCActlxxx2jf//+5bqIkpOTE/Xr148//elPG6AyqB222mqrGDRoUIW2uemmm0zDBUC1kJ+fH7fccku5R2oXFxfHTTfdFA0aNMhwZdQUO++8c/z6178u9+eNhg0bxh//+McNUBlA+QjcAAAot9///vex5557rvf+HEmSxIgRI2LbbbfdQJVB7dCvX7/o0qVL5OXlrXfdIUOGGN0GQLVy6KGHliswyc3NjbPPPjuOOuqoDVMYNcagQYNijz32WO+5UJIkcc8998SPfvSjDVQZwPoJ3AAAKLcGDRrEM888s86bMefl5UW9evXipptuqtP34oDKys3NjZEjR0bXrl3XujwvLy9yc3PjmmuuqfC0SwCwIVx//fXRp0+fiIg1grfVo7JPO+20+Otf/7rBa6P6a9iwYYwePbrMzxv169ePv/71r9GrV68NXB1A2QRuAABUSMuWLeNf//pXXH/99bHVVluVPJ+TkxMHHnhgvPHGG3HRRRdlsUKo2bbccssYO3Zs3H777WuMEt1nn31i2rRpcfXVV5tKEoBqqX79+nH77bfHmDFjonXr1qWW7bjjjvHEE0/EvffeW6H7llK3bLfddvHiiy/Gn/70p1L3Z8vJyYmf/exnMWPGjArfXxpgQ8hJkiTJdhHUbgUFBdGkSZOIiFiyZEk0btw4yxUBdYljEGRWcXFxzJ49O5YsWRI77rhjbLHFFtkuiRrGcbpsSZLEf/7zn1i8eHFsv/320bx582yXVO1oQ5BZ+hhpffTRR/Hpp59Gs2bNYocddsh2OdWOPla24uLimDVrVhQUFPi8sQ7aUNm8P2xIZd98AwAAypCbm+seUpBBOTk5a4wOAICaZLvttovtttsu22VQQ+Xm5sYee+yR7TIAysWUkgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGVEtFRUVxwAEHxDHHHFPq+a+//jpatmwZv/3tb7NUGdQO+hhklj4GZJvjEAAAbFgCN6BaysvLi3vvvTfGjRsXDz30UMnzF154YWy++eZx9dVXZ7E6qPn0McgsfQzINschAADYsPKzXQDAuuyyyy4xePDguPDCC6Nz584xffr0GDlyZLzyyitRv379bJcHNZ4+BpmljwHZ5jgEAAAbTk6SJEm2i6B2KygoiCZNmkRExJIlS6Jx48ZZroiaJEmS6Ny5c+Tl5cXbb78dF154YQwcODDbZVGDOAaVTR+DzNLH1s9xmrS0obI5DpGWPgaZpY+RljZUNu8PG5LAjYxzUCOt2bNnx2677RZ77rlnvP7665Gfb3Au5ecYtH76GGSWPlY2x2nS0obWz3GINPQxyCx9jLS0obJ5f9iQ3MMNqPZGjBgRjRo1irlz58aCBQuyXQ7UOvoYZJY+BmSb4xAAAGSewA2o1l566aUYOnRojB49Ovbdd984++yzw8BcqDr6GGSWPgZkm+MQAABsGAI3oNpaunRpnHnmmXHeeefFIYccEsOHD4/p06fH7bffnu3SoFbQxyCz9DEg2xyHAABgwxG4AdXWlVdeGUmSxODBgyMiYocddogbbrghLr/88pg3b152i4NaQB+DzNLHgGxzHAIAgA0nJzGXBBnmxpRUxj//+c/o0qVLPP/883HggQeWWtatW7coLCyMiRMnRk5OTpYqpKZwDFo7fQwySx8rP8dp0tKG1s5xiKqij0Fm6WOkpQ2VzfvDhiRwI+Mc1IBscgwCqN4cp0lLG4LM0scgs/Qx0tKGyub9YUMypSQAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBG1WqoKAgkiTJdhkAAAAAAHXakiVLsl1CteLaNZkmcKPKfPHFF7HffvtF+/bts10KAAAAAECd9Yc//CG23nrrGDduXLZLqTb233//6NKlS7bLoBYTuFElvvjii+jcuXO8++678eGHH2a7HAAAAACAOmv+/Pnx3XffxVFHHSV0i4i8vLyYO3eua9dklMCN1FaHbV999VWcffbZ2S4HAAAAAKDOa9u2bRx22GF1OnRbsGBB5OXlxY9+9KM49dRTs10OtZzAjVS+H7ZNmTIldt1112yXBAAAAABQ5zVo0CD+8Y9/1NnQ7eOPP47DDz88fvSjH8XUqVNj++23z3ZJ1HICNypN2AYAAAAAUH3V1dDt448/joMPPjiSJImpU6fGDjvskO2SqAPys10ANVNZYdu3334bHTt2LPm5uLg48vNXNbXOnTtHbm75c9769evHXXfdFbvsskvVFQ/UGYsXL46RI0eW/Hz99dfHSSedFLvttlsWqwIAqsprr71W6m/9P/7xjzj++OOjUaNGWawKao933303HnnkkZKfH3rooTjxxBOjadOmWawKoHZauXJlnHPOOTFr1qwKbbeua68ffPBBSci0OnTr1atXHHXUUTFq1Kjo3r17ldZfnawO24qLi2PKlCmlwrZPP/201LXrjh07xpAhQyInJycLlVLb5CRJkmS7CGqWssK2RYsWxe9+97tYvnx5lbzWAw88EIMGDYrLL7+8SvYH1B1jx46NM844I7788suS53JzcyNJkrjyyivj6quvjvr162exQgAiIgoKCqJJkyYREbFkyZJo3LhxliuiJliyZElcfPHFcffdd0deXl4UFRWVLPvxj38cjzzySOy3335ZrBBqtuXLl8fvfve7uOGGGyI3N7dUH2vWrFk8+OCD0bVr1yxWCLWHcyFWmzdvXvz4xz+O7t27x7bbblsl+zzttNPioIMOKvl5+fLl0atXrxg/fnytDd3KCts+++yzuOaaa6KwsDAiIubMmRMvvPBCLF++3DUiqoTAjQrZ0NNIbr755nHFFVcI3IAKuf766+OKK66I3NzcKC4uXmN5Tk5OtG/fPqZOnRoNGzbMQoUArOYiExX11VdfxU9+8pOYP3/+Wv/O5+XlRXFxcdx3331x2mmnZaFCqNkKCgripz/9abz99ttr7WOrz7FvvPHGuPjii7NQIdQuzoVYbXXgNmHChIx+qaE2h25lhW1rc//998cZZ5whcKPKuIcb5eaebWxIBQUFcfPNN0eXLl2iefPmUb9+/WjevHl06dIlbr755li6dGm2S6SamjJlSlx55ZUREWu9QBARkSRJvP766/HrX/96A1ZWvehjkFn6GGRGkiRx+umnx0cffbTOv/NFRUWRJEn06dMn3n333Q1cYfXhOERl/epXv1pn2Bbxf+fYl156afzrX//akKUBUAVq6z3dKhq2QSYI3CgXYRsb0rPPPhs77bRT9OvXLyZPnhzLli2LFi1axLJly2Ly5MnRr1+/2HHHHePZZ5/NdqlUM8uXL49f/vKX5Zp3u7i4OO644446eZFAH4PM0scgcx599NEYM2ZMqent1qWwsDB69+4ddXFSF8chKmvy5Mlx7733rjNs+6Ff/vKXsXLlygxXBUBVq22hm7CN6kLgxnoJ29iQ7rzzzjjyyCPjyy+/jN69e8ebb74ZM2fOjCeeeCJmzZoVb731VvTp0ye+/PLLOPLII+POO+/MdslUI7fffnuZ33j/oby8vOjXr1+Gq6pe9DHILH0MMmflypVxySWXlPuG9kVFRfHvf/87nnzyyQxXVr04DlFZSZJEv379Ii8vr1zrFxcXx/vvvx933313hisDIBNqS+gmbKNaSaAMn3/+ebLHHnskzZs3T2bNmrXO9Q466KAkIpKISN54441y7fuee+4p2aZfv35rXWezzTZLrr/++kpUTk00adKkJC8vL9l4442TCRMmlDzfv3//JCKSAQMGlDw3YcKEpEmTJkleXl6pdanb9ttvv5LjSkUe8+fPz3bpG4Q+Bpmlj1XOkiVLSo7HS5YsyXY5VGP/+te/Kvw3Pi8vLznxxBOzXfoG4zhEGnPmzKlwH8vJyUkOOuigbJcONZpzIVabO3duEhFr/bucqWuvSZIky5YtS3r27Jk0aNAgGTt2bCWrz46PPvooadWqVbLDDjskc+fOrfD29913XxIRyfLly6u+OOokI9xYp4qObOvTp098+umn0aZNm4iI+Oijj+KII46IRo0axdZbbx2XXXZZFBYWlqx/wgknxKeffhodO3bM6O9BzVBYWBgXXHBBFBUVxUMPPbTem8N27do1HnnkkSgqKooLL7ywVNuibvr666/jlVdeqdS2EyZMqOJqqh99DDJLH4PMGz9+fLlH3qxWVFQU48aNK/fo95rMcYi0xo8fX+4RpKslSRIvvviiewICbACZuvZaU0e6Gdm2bq+++mocfvjhEbHqetk555wTrVq1itatW0f79u3jqaeeWmObe+65J3JycmLq1KlVVkevXr1i2rRpEbFqyvP27dtHgwYN4te//nWp9W655Zb44x//WGWvm00CN9aqMtNINmrUKJo3bx75+flRVFQURxxxRKxYsSJeeumluO++++Lee++Nq666qmT9jTbaqOTm3TBp0qSYPXt29OzZM3r27FmubX7+859Hz549Y/bs2TF58uQMV0h19/zzz1fqYlpeXl6MHz8+AxVVL/oYZJY+Bpk3duzYct277YcWL14cb775ZgYqql4ch0hr/PjxkZtb8ctEhYWF8cILL2SgIgC+L5PXXmta6CZsK9uTTz4ZRx11VCRJEj169Ih69erFf/7zn3jvvfdi+PDhcd5558WYMWNKbTN8+PDo0qVLDB8+vEpqmD59eixatKgk8N15551jxIgRcdlll62xbt++fWP48OHx9ddfV8lrZ5PAjTVUxT3bxo8fHzNnzowHH3ww2rVrF4cffngMGjQobr311lixYkUGqqammzhxYkREnHbaaRXa7tRTT42IujFCibJNmDAh6tWrV+HtioqK4rnnnoskSTJQVfWhj0Fm6WOQWd9880289tprldo2Ly+vTvQxxyHSKCoqiokTJ1Yq1M7Pz9d+ADawTFx7rSmhW20M20455ZTo0KFDtG3bNo444oj47LPPYt68ebHpppvG1VdfHe3bt4+ddtqpVEg2bdq0OPDAA2OvvfaKtm3blhq19vTTT8cvfvGLmDRpUsyfPz9uvPHGyM/Pj4iIdu3axcCBA2PQoEEl67/33nsxd+7cuP/++2PUqFHxzTfflCw7+OCD49JLL41OnTrFjjvuGOeee25ERCxcuDCaNWtWapT7ySefHLfddltERNxxxx1x8sknlyzbZZddYq+99iqp4/vq168fhx12WDz88MNp38qsW/O3o06rirAtYlWH33PPPaNZs2Ylz3Xr1i3OO++8ePfdd2Pvvfcu975WrFgRBQUFlaqDmmPu3LkREbH99tvHtttuGwsXLlxjneuvvz6uv/76kp+32267+Pvf/16yvXZSt82bNy9WrlxZqW2//vrr+O9//xuNGjWq4qqqD30MMksfq7zv/9519T1g/T744INKTwuZm5sbH374Ya1vX45DpPG///2v0v//xcXF2g+k4FyI1SoyPW9VXnv9vtWhW69eveKoo46KUaNGRffu3Su1r0zIVNhWUFBQ6WtK5dW4ceN1Lhs2bFhstdVWERExePDguOaaa+KKK66Ir7/+Otq2bRu///3vY9y4cdGvX7/o0aNHLFq0KI466qh47LHHolOnTlFcXByLFy+OiIg5c+ZE06ZNo3nz5nH//fdH+/bt1xjl2LFjx+jfv3/Jz8OHD4/TTjstttlmm+jcuXOMHDky+vbtW7L8gw8+iClTpsTKlStj9913j2nTpkXHjh2ja9eu8eCDD0bfvn3j888/j4kTJ8add94ZEatmorr44ovL/f507Ngxnn766TjvvPPKvU11JHCjlKoI2yIiPvvss1IH/Igo+fmzzz4r934KCwvjd7/7Xfzud7+rdC3ULPvtt1+51/3oo49i//33j4iIxx9/PB5//PFMlUUdsPXWW2e7hA1CH4PM0sfS+eH5I1SFlStXxh133BF33HFHtkvZIByH2NCKi4vjySefjCZNmmS7FKjxnAtRXlV17XVtfhi6vfTSS7HPPvuk2mdVWLZsWcZGtm2++eZVtq91KWtmpYcffjgeeOCBWLZsWSxbtiy23HLLiIho2LBhHHPMMRGxKpD64IMPImJV4Nq6devo1KlTRKz6gtnq32H1dJLrs9FGG0XEquvv999/f/zzn/+MiIizzjorBg0aVCpwO+GEEyI/Pz/y8/OjXbt28cEHH0THjh2jX79+0adPn+jbt2/cddddcdJJJ5WcDyxYsKBCx7TmzZvHggULyr1+dSVwo5Qvv/wytt5665JODQAAAABA3VG/fv1o1apVLF++vNT0gtlUXFwcX331VbRu3XqDBGQbyr/+9a+4+eabY9q0abH11lvH008/XXIvvgYNGkROTk5ErJomvTxTP48aNSruu+++iIjYZ5994uabb46VK1eWug3LtGnT4oADDoiIiNGjR8fixYujW7duEbEqGFy4cGG888470aZNm4hYFfytlpeXF4WFhRERse+++0ajRo1iypQpceedd5ZMcR6x6p6Dy5YtK/f7sGzZspIQsCYTuFHK5MmTo3PnztGlS5eYNGlSpYO35s2bx/Tp00s99/nnn5csK6/8/PwYNGhQhYafUjNNnDgxjjrqqPj5z38eI0eOLLXsN7/5Tdx8881xySWXxLXXXltq2YknnhijR4+Op556Krp06bIhS6aaOe6441LNL/7555+XOby/ptPHILP0scorKCgo+eZjbT8WU3mzZ8+ODh06VGrbevXqxZlnnhlDhw6t4qqqF8ch0vjqq69i++23r9S2OTk58Ytf/CIefPDBKq4K6gbnQqw2f/782GOPPcq1blVde12bJEmif//+cdNNN8Utt9wSBx98cKr9VZVGjRrFxIkTo2vXrtGtW7d47rnnomnTplWy70WLFq0x7eKG8r///S823njj2GKLLWLFihXlmpXhgAMOiDlz5sTUqVNLTSm5fPnyWLJkSey8884RsWo2u5YtW8bFF18cw4YNi/z8/JgxY0YMHTo0HnvssYhYNZ3ksGHDSu7NFhExYMCAGD58eLnOn/v16xenn3567L777rHLLruUPN+2bdt47733omXLluV6H2bNmhV77bVXudatzgRulLLHHntUSejWsWPH+MMf/hBffPFFyTRtEyZMiKZNm8buu+9eoX3Vr1/fyUYdcMQRR8Suu+4ao0ePjueffz6OOOKIkmWrv4FRr169Um1hzJgxMXr06Nh1112jR48ea73pJnXHtttuG/n5+SXfsqmIjTbaKLbccsvIzc3NQGXVgz4GmaWPVY3GjRs772Ot0kwZlCRJtGjRota3Lcch0qhfv37Uq1evUvevyc/Pj2222abW9zHYEJwL1W0Vua98VV57/b7VYdvQoUPjlltuiQsuuKDS+8qEDh06ZCR0a9y4cdYCt+7du8eDDz4YrVu3ji222CK6du0an3zySZnbbLbZZvHkk09G//7949tvv43c3NwYNGhQfPLJJ3HkkUeWrJebmxtjx46Nyy67rCQM+/TTT+Pll1+Otm3bxsKFC2PSpElx7733ltr/KaecEl26dCl17991Oe644+K8886LX/3qV2s8/9xzz0XXrl0jImLSpElxxhlnxDfffBNJksRjjz0Wf/vb30rqHTduXAwaNGi9r1fd1d4ri1Ta6tDts88+iy5dusR///vfCu/jsMMOi9133z1OO+20ePPNN+O5556LgQMHxgUXXBANGjTIQNXUdPn5+XHLLbdEXl5enHTSSTFp0qQy1580aVKceOKJkZeXF3/9619dHCAOOeSQSoVtubm5cfDBB9fqsC1CH4NM08cgs7bYYotKXzwqLCyMQw45pIorqn4ch0ijXr160alTp0qdE69cubJO9DGA6iQT116re9i22urQbdasWdGtW7dqM+VlZdWrVy8effTReP/99+Pll1+OP/zhDzFjxozYYYcdYvHixSXrNWnSpNR94Pbff/948cUX46233ooZM2ZEz549Y9SoUWvcv23TTTeNu+66Kz788MOYOXNmHHvssXHppZfGsmXLYptttomlS5fGFltsUWqbtm3bxpdffhn169eP559/vtQ+H3vssTjzzDNLfp4xY0ZstdVWpb7sFRHxy1/+Mp577rkoKCiIiIguXbrEggUL4ptvvolvv/02FixYUBK2zZw5MwoLC+PAAw9M8U5WD7X76iKVljZ0y8vLi9GjR0deXl507NgxTj311Dj99NPXmL4Evq9Lly5x6623RkFBQXTr1i3OP//8ePfdd+OCCy6IqVOnxrnnnhszZ86MCy64ILp16xYFBQVx6623lnxTgrotTTvo3r17FVZSfeljkFn6GGTW4YcfXqlQaKONNor9998/AxVVP45DpFHZc+KcnJzo3LlzFVcDQFmq+tprTQnbVqttoVtVGTduXJnTsDds2DAefPDBGD9+fKn7slVW796945hjjolbbrlljS/tNGnSJIYOHRpz585d734+/vjjck2lWRPkJN+PReEH3n333ejcuXM0b968zOklDz744GjX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", "text/plain": [ "
" ] @@ -729,6 +756,68 @@ "fig.set_figheight(7)\n" ] }, + { + "cell_type": "code", + "execution_count": 24, + "id": "2bda8210", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABjsAAAKECAYAAABRk4h5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAssklEQVR4nO3de/Rd853/8VduI+7BjBiNWxQdl+Qb1yZkGCSV1KRRMSGhxj0sI1qDjtWSlmkbNYvl0mLENS1KCWNURMQ9pQRj2ojLhJk0o25JiBFy2b8/LKfNL5EoSt48HmudtZx9Pnvvzzn552M/z3efdk3TNAEAAAAAACiq/Sc9AQAAAAAAgA9D7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgD4DBo1alTmzZv3gfc9/vjjF9u2995758EHH0yS3HLLLdlhhx2yxRZbpHv37jniiCMye/bsxcY3TZNNNtkke+yxxweaw9I8/vjj+fKXv9x6PmTIkKy//vpp167dYuefN29etttuu8yZM+cjOzcAfBpZL1gvAEAlYgcAfAZ95zvfec+LFwsWLPijjjV37txMnTo1O+64Y2677bYcddRRufjiizNt2rQ89dRT6dy5cwYMGJBFixa19pk4cWK6dOmS//iP/8j06dM/1Ht51z/90z/lm9/8Zuv5iBEj8thjjy0xrnPnzjnooIPyL//yLx/JeQHg08p6wXoBACpp1zRN80lPAgBYvsmTJ+fEE0/M66+/nqZpcvrpp+dzn/tcjjvuuMydOzedO3fO2WefnZ133jnPPfdc2traMnLkyNxyyy2ZM2dOzj333AwcODAjRozIRRddlK233jodOnTI7bffnpNOOint27fPM888kxdffDFPPvlkfvjDH+byyy9P+/bt06NHj/zoRz/KmmuumVGjRmX27Nk555xzkiTXXXddJk2alB/96EfZZZddMmzYsBxzzDGteb/99tvp3r17xowZky996UtJkgMOOCB9+/bNtGnTssYaa+T0009Pktx111059thj89d//de5//77s2DBglxxxRXZfvvtc+yxx2b99dfPKaeckiSZNm1a9txzz0yfPj0zZ85M37598/zzzy/xubVr1y6zZs1Kly5dWtteeOGF9OrVKzNnzky7du2W+nm/8cYbH8U/GwB85FZdddX3fM164eNdLwAAK5AGAFjhvfLKK826667b3HPPPU3TNM3ChQub3/3ud80GG2zQ3HbbbU3TNM29997bdO3atXn99deb6dOnN0ma66+/vmmapvnFL37RbL755q3jJWlmzZrVen7wwQc3PXr0aF577bWmaZrm1ltvbb7whS+0xhxxxBHNiBEjmqZpmtNOO60ZOXJka98DDjigGT9+fNM0TbPyyis3U6ZMWWL+gwYNan7wgx+03kuXLl2aWbNmNY8//njTrVu3ZuHChU3TNM2kSZOaDh06NL/85S+bpmmaH//4x03//v2bpmmaJ598stloo42aBQsWNE3TNMcdd1zz3e9+t2maprnyyiubfffdd6mf3f//Xt+1ySabNE888cRS93l3Pw8PDw8PjxXx8V6sFz7+9QIAsOJwGysAKGDy5MnZYost0rdv3yRJ+/bt87vf/S7t27dvfftxl112SdeuXVu3YujcuXO++tWvJkl69+6dZ599dpnn2G+//bL66qsnSe64444MHTq09e3Go48+OhMmTFhin/nz5+eBBx7I3/zN3yz3Pay88spJkp/85CcZMGBAunTpkh49eqRr164ZP358a9znP//57LTTTkvMe4sttsiWW26Zm266KW+88UauvvrqHHnkkUmSGTNmpGvXrsudwx9ab731MmPGjD9qHwBYkVkvWC8AwGdZx096AgDAR+cPb7Gw0kortZ536NAhCxcuXOa+q6222vs67h+68847s/POO6dTp05Jkm233TaTJ09Or169WmPefvvtPPLII/n2t7+dJBkzZkxeeOGFbLzxxkmS119/PWPGjMmAAQOSvHPR5V0dOnRY7J7gI0eOzOjRo/PSSy+lX79+rQsWq6yyyh/9A6rz5s1rXVBZmrlz5/5RxwOAKqwX3r/lrRcAgBWH2AEABfTp0ydPP/107r333vTt2zeLFi1K165ds2jRokyYMCH9+vXLAw88kBdeeCFtbW15+eWXl3m81VdfPXPmzFnsvtR/aM8998wJJ5yQb3zjG1ljjTVy0UUXpX///kuMGzduXPbZZ5/W81NOOSWHH354+vTpk7a2tixYsCAnnHBCdtttt2y//fZ55JFH8tJLL2XmzJlp3/6dPzCdPXt2Nthgg7z00kvL/Rz69++fr3/96znjjDPys5/9rLW9R48eue6665a7/7sWLlyYZ599Nttss817jlnW/dABYEVkvfCOj3O9AACsONzGCgAKWGuttXLjjTfmm9/8Znr06JFtt902Dz74YG644Yacdtpp6dGjR44//vhcf/31y/zG5btOOOGE9OvXL21tbXnxxReXeH3AgAE55JBD0rt372yzzTZ57bXX8v3vf3+xMU3TZPz48dlrr71a2wYOHJgLL7wwhx9+eDbffPOstdZamTVrVq688sok73xLc//9929duEiSLl26pF+/frnqqquWO+927drlsMMOy7rrrpvevXu3tu+yyy6ZMWNGXn311da2L3/5y+nWrVuSZKuttspuu+3Weu2+++7LDjvskLXXXnu55wSA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wWmaJgMHDkynTp3y1FNPZdq0aRkzZkyOPvro3HrrrYvtM2bMmOyxxx4ZM2bMhz5/kjz00EN59dVX07t37yTJVlttlfvvvz9PPPFE/v3f/z3HH398nn322STJ3nvvnUceeSRPP/30R3JuAPg0sWawZgCAFV3HT3oCAMDvvfnmm/n7v//7PPHEE+nUqVO6du2a22+/PVdddVXOP//8zJ8/P6uttlrOO++89OzZc4n9lzVu9OjRGTt2bNq3b5+VV145d955Z0aMGJHnn38+bW1t2XDDDXPzzTdn4403zrhx49LW1pZnnnkmI0aMyIsvvpj27dtn1KhRrW+FtmvXLv/8z/+ccePG5aWXXsqpp56aQw45pDWXm2++ORMmTMjEiRPz/PPPZ9KkSenY8Z2lR1tbW771rW/l9NNPz8CBA5Mk06ZNy/Tp0/OrX/0qW265ZV577bWsscYaSZLddtst22+/fR588MHMnDkz/fr1y4UXXpiZM2emV69emT59elZZZZUkybBhw9K3b98cffTRueiiizJs2LDWnPbYY4/Wf2+wwQZZb7318j//8z/ZdNNNkyR/93d/l0suuSSjR49e6r/PG2+88YH+XQHgg1p11VWXut2aYcVeMwAAn4AGAFhh3HDDDU3//v1bz1955ZXmvvvuawYMGNDMmzevaZqmueeee5ott9yyaZqmueyyy5qvfOUrTdM0yxx3+eWXNzvssEMze/bspmma5tVXX20WLFjQTJo0qenZs+dic9hoo42aRx99tGmaptlxxx2bCy+8sGmapnnqqaeatddeu3nuueeapmmaJM1ZZ53VNE3TTJ06tVlttdWa+fPnt8b26dOnaZqmGT16dDNo0KAl3uuUKVOazp07t56feOKJzcknn9w0TdPss88+zUUXXdR6bdddd20GDx7czJ8/v/m///u/ZuONN24eeOCBpmmaZtiwYa2xL7zwQvMXf/EXzeuvv940TdN07969eeKJJ5b6WU+YMKFZf/31m7lz57a23X333c1222231PHvvmcPDw8PD4+P8/FerBlW7DUDAPDx85cdALAC6dmzZ6ZOnZpjjjkmu+66awYOHJibbropjz/+eHbaaafWuFdffTVvvvnmYvsua9wtt9ySESNGZM0110ySrLXWWsudy+uvv54pU6bk/vvvT5Jsttlm2WWXXXLvvfdmo402SpIMHz48SfKFL3whHTt2zAsvvJBu3bq1bkexPCuvvHKSZMGCBbnyyitz9913J0kOPfTQnH766YvdD3vo0KHp2LFjOnbsmLa2tjz77LPp3bt3Ro4cmSOOOCJHHnlk/vVf/zUHHHBAVltttSTJjBkz0rVr1yXO+8QTT+SQQw7Jtddeu9g3Ztdbb73MmDFjufMGgE+aNYM1AwCwOLEDAFYg3bt3z29+85vceeedueOOO3LSSSelf//+Ofjgg/O9731vmfs2TfO+xn0Y7dq1W+x5586dW//doUOHLFiwIEkybty4XHHFFUmSbbfdNueee27mz5+fTp06tcZPnjw5ffr0SfLOD33Onj07X/rSl1rvZebMmfnP//zPbL311ss814477phVVlklkyZNysUXX5w77rijNW6VVVbJvHnzFpvzb37zm+y999659NJLs8suuyz22rx581oXU5Zm7ty5y/p4AOBjY82wYq8ZAICPn9gBACuQGTNmZK211sqgQYOy1157Zdy4cTnwwANz0EEHZcSIEdlwww2zaNGiTJkyJdtvv/1i+w4aNCjDhw9f6rhBgwblvPPOy7777ps111wzs2fPzuqrr5411lgjc+bMWepcVl999Wy77ba57LLLcsQRR+SZZ57Jfffdl3PPPXeZ7+F///d/M3fu3Gy22WZJkt133z0bbLBBvv71r+ecc85Jx44d89hjj+Xss8/O9ddfn+SdHxk955xzMmLEiNZxTj755IwZMyZnn332cj+3kSNH5mtf+1q23HLLbL755q3tPXr0yLRp07LBBhskSaZOnZqBAwfm4osvTr9+/ZY4ztSpU5d6X/N3vdd90wHg42bNsGKvGQCAj1/7T3oCAMDvPfHEE9l5553Ts2fP9OrVKwcddFB23XXXnHnmmdlnn33Ss2fPbLXVVrnmmmuW2Ldv377vOe6ggw7Kvvvumz59+qRnz54ZOHBg3nrrrfTo0SNbbbVVtt566wwaNGiJY/7kJz/Jtddem549e2bIkCG55JJLsuGGGy7zPdx0002LHat9+/b5xS9+kbfeeiubb755unfvnt69e+fnP/95evbsmZkzZ2bixInZb7/9FjvO8OHDM3bs2Lz99tvL/dyGDBmSuXPn5thjj11i+/jx41vPjzvuuMyZMycnn3xy2tra0tbWttjrt912W4YMGbLc8wHAJ82a4fesGQCAJGnXNE3z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bunVq1f+67/+K08//XRGjRqVr3zlK3nsscda4xctWpTLL788u+22Wy677LIPPJ8/dN1112XzzTfPRhttlCTZbrvt8rOf/SzDhg1bYuxJJ52UUaNGZeHChR/JuQFgRWfN8HvWDADw2dDxk54AAPD+jBgxIknSt2/fdOjQId/4xjdywQUX5O23386iRYtyxhln5G//9m+TJLvttlt69OiRX/3qV1l55ZUzfvz4jBw5MnfccUfWXnvt7LzzznnkkUdy1113JUmuuuqqnH/++Zk/f35WW221nHfeefnLv/zLnHrqqZkzZ07a2tryxS9+MRdeeGHmz5+f+++/P5dffnmuuOKKrLXWWjn55JNb89xjjz1y2GGHZfTo0bn66quTJBMmTEjXrl1z1llnZfDgwTn11FPTvv0737nYeOON87WvfS0TJkzICy+8kMMOOyzf+ta38vDDD+fAAw/M1KlT065duyRJnz598u1vfzsDBgzIRRddlFNOOaV13p49eyZJ67h/aN11182mm26a22+/PQMGDHjPz/iNN974oP88APCJWHXVVZfYZs3wp18zAAArHrEDAIq48MILc9FFF+Xee+9Nly5d8sorr+Sggw5Ku3bt8txzz+WLX/xinn/++ay00kpJkqeeeir33HNPOnXqlAsuuCBPP/10fv3rXydJBg4c2Dru/fffn6uvvjr33HNPVlpppdx7770ZNmxYfv3rX+e73/1uxo0bl3HjxrXGT5o0KX369EmnTp0yZcqU9O7de4m59u7dO//2b//Wej5mzJgceuih6dWrV9ZZZ53ccccd6d+/f+v12bNnZ/LkyXn55Zez6aab5pBDDsn222+fddZZJxMmTEj//v3z6KOP5qWXXspee+3Vuniy0047ve/Pr3fv3pk4ceIyL1ysttpq7/t4ALAiaJpmiW3WDH/6NQMAsOJxGysAKGr69OkZMGBAtt566wwePDivvvpqpk+f3nr9wAMPTKdOnZIkEydObD3v1KlTDj744Na4m266KY8//nh22mmntLW15R/+4R/y6quv5s0331zqeceNG5d99tlnufNbeeWVkySvvPJKbr/99hxwwAFJkkMPPTRjxoxZbOy7t5H48z//83Tv3r31PkaOHJnzzz8/SXLBBRfkmGOOSbt27fLyyy+nQ4cOf1ScWG+99TJjxoz3PR4APi2sGawZAOCzwF92AEBR+++/f37wgx9kyJAhSZK11157sXtzL+t/6t+9xUPyzjdCDz744Hzve99b7jmbpsn48eNz5plnJkm23XbbXHzxxUuMmzx5cvr06ZPkndtdLFiwoHXLiIULF+aVV17JK6+8knXWWSdJ0rlz59a+HTp0aN0z/Ktf/WpOOumkPProo7n55ptz1llnJUlWWWWVvPXWW2maZrH3sizz5s1rXUx5L3Pnzn1fxwKASqwZPvo1AwCw4hE7AKCQ1VdfPXPmzEmXLl0ya9asbLLJJkmSsWPHZtasWe+53+67756f/vSnrW9DXnnlla3XBg0alOHDh2fEiBHZcMMNs2jRokyZMiXbb7991lhjjcyZM6c19qGHHspf/dVftS6KHHDAAfn+97+f0aNHt+7Bfeedd+aGG25o3dt7zJgxuf7667PXXnu1jjN06NCMHTs2I0eOXOb77dixY0aMGJFBgwZln332SZcuXZIka665Zj73uc/l2Wefzec///n39dlNnTq1dfHkvSztvucAUJE1Q5ckf7o1AwCw4nEbKwAo5IQTTki/fv3S1taWs88+O0OGDEmvXr3y6KOPZsMNN3zP/Y466qhsvPHG2XLLLbPzzjtn0003bV0E6Nu3b84888zss88+6dmzZ7baaqtcc801Sd754dC33norPXr0yIgRI3LjjTdm8ODBreOuuuqqufvuuzNlypRssskm2WCDDTJ06NDcfffd6datWx566KG8+OKL2XPPPRebz/Dhw5e4LcV7Oeyww/Lb3/42xx577GLbhwwZkvHjx7eeX3755enWrVuuu+66jBo1Kt26dcujjz6a5J1vl06cOPF93UoDAD4NrBl+z5oBAD4b2jVL+zUzAOBT5/XXX8/qq6+e+fPnZ/jw4dluu+1a36x8v7baaqtMmjQp66677lJfnzVrVoYOHZr1118/l156adq3//Dfq7j++uvz4x//OBMnTlxs+3//939nyJAhefDBB5d7W4rbbrstY8eOzdixYz/0fADg086awZoBACoSOwDgM2KnnXbKW2+9lXnz5mWXXXbJeeedt8Lfj3qvvfbKU089lRtvvHGpt5P4+c9/np122indunVb5nGuvfba9O3bN+uvv/6faqoA8KlhzWDNAAAViR0AAAAAAEBpfrMDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoLT/BwVFfbm1uJ6fAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from functools import cached_property\n", + "from typing import Sequence, Set, Tuple\n", + "\n", + "import cirq\n", + "from qualtran._infra.data_types import BoundedQUInt\n", + "from qualtran.bloqs.multiplexers.unary_iteration_bloq import UnaryIterationGate\n", + "from qualtran.resource_counting._call_graph import BloqCountT\n", + "\n", + "class UnaryTest(UnaryIterationGate):\n", + " def __init__(self, selection_bitsize: int, target_bitsize: int, control_bitsize: int = 1):\n", + " self._selection_bitsize = selection_bitsize\n", + " self._target_bitsize = target_bitsize\n", + " self._control_bitsize = control_bitsize\n", + " @cached_property\n", + " def selection_registers(self) -> Tuple[Register, ...]:\n", + " return (Register('selection', QAny(self._selection_bitsize)),)\n", + "\n", + " @cached_property\n", + " def target_registers(self) -> Tuple[Register, ...]:\n", + " return (Register('target', QAny(self._target_bitsize)),)\n", + " \n", + " @cached_property\n", + " def control_registers(self) -> Tuple[Register, ...]:\n", + " return (Register('control', QAny(self._control_bitsize)),)\n", + " \n", + " def nth_operation( # type: ignore[override]\n", + " self,\n", + " context: cirq.DecompositionContext,\n", + " control: cirq.Qid,\n", + " selection: int,\n", + " target: Sequence[cirq.Qid],\n", + " ) -> cirq.OP_TREE:\n", + " return cirq.CZPowGate(exponent=selection).on(control, selection)\n", + " \n", + " def nth_operation_callgraph(self, **selection_regs_name_to_val) -> Set['BloqCountT']:\n", + " return {(CZPowGate(), 1)}\n", + " \n", + "example = UnaryTest(2, 1)\n", + "msd = get_musical_score_data(example.decompose_bloq())\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.set_figwidth(18)\n", + "fig.set_figheight(7)" + ] + }, { "cell_type": "markdown", "id": "fcdb39f2", From 8888f53ea15c19199b3bc8d7af02d9c3312c1268 Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Fri, 9 Aug 2024 15:18:47 -0400 Subject: [PATCH 08/13] starting recursive --- .../bloqs/multiplexers/unary_iteration.ipynb | 118 +++++++++++++++--- 1 file changed, 104 insertions(+), 14 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 77560e5d54..9de76c23c0 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 5, "id": "756a61d0", "metadata": {}, "outputs": [], @@ -499,7 +499,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 6, "id": "cfce9823", "metadata": {}, "outputs": [], @@ -600,7 +600,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 15, "id": "5605cc96", "metadata": {}, "outputs": [], @@ -671,8 +671,15 @@ " self.ctrl_inversions[ix + 1] = False\n", " \n", " print(\"first diff ix, \", first_diff_ix)\n", - " if first_diff_ix > 0:\n", - " ctrls[first_diff_ix], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ctrls[first_diff_ix], target=ancs[first_diff_ix - 1])\n", + " if first_diff_ix == 1:\n", + " if self.prev_query[first_diff_ix - 1] is False:\n", + " ctrls[first_diff_ix - 1] = bb.add(XGate(), q=ctrls[first_diff_ix - 1])\n", + " ctrls[first_diff_ix -1 ], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ctrls[first_diff_ix -1], target=ancs[first_diff_ix - 1])\n", + " if self.prev_query[first_diff_ix - 1] is False:\n", + " ctrls[first_diff_ix - 1] = bb.add(XGate(), q=ctrls[first_diff_ix - 1])\n", + " self.ctrl_inversions[first_diff_ix] = True\n", + " elif first_diff_ix > 1:\n", + " ancs[first_diff_ix - 2], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ancs[first_diff_ix - 2], target=ancs[first_diff_ix - 1])\n", " self.ctrl_inversions[first_diff_ix] = True\n", " for ix in range(first_diff_ix + 1, self.ctrl_bitsize): \n", " print(\"compute ix: \", ix)\n", @@ -709,7 +716,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 16, "id": "9086b08f", "metadata": {}, "outputs": [ @@ -717,20 +724,46 @@ "name": "stdout", "output_type": "stream", "text": [ - "query: [False, False] prev_query: None\n", - "query: [False, True] prev_query: [False, False]\n", + "query: [False, False, False] prev_query: None\n", + "query: [False, False, True] prev_query: [False, False, False]\n", + "first diff ix, 2\n", + "query: [False, True, False] prev_query: [False, False, True]\n", + "uncompute ix: 1\n", "first diff ix, 1\n", - "query: [True, False] prev_query: [False, True]\n", + "compute ix: 2\n", + "ctrls: [Soquet(binst=BloqInstance(bloq=XGate(), i=16), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())\n", + " Soquet(binst=BloqInstance(bloq=XGate(), i=8), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())\n", + " Soquet(binst=BloqInstance(bloq=XGate(), i=17), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())]\n", + "ancs: Toffoli<13>.target\n", + "query: [False, True, True] prev_query: [False, True, False]\n", + "first diff ix, 2\n", + "query: [True, False, False] prev_query: [False, True, True]\n", + "uncompute ix: 1\n", "uncompute ix: 0\n", "first diff ix, 0\n", "compute ix: 1\n", - "query: [True, True] prev_query: [True, False]\n", - "first diff ix, 1\n" + "compute ix: 2\n", + "ctrls: [Soquet(binst=BloqInstance(bloq=Toffoli(), i=28), reg=Register(name='ctrl', dtype=QBit(), _shape=(2,), side=), idx=(0,))\n", + " Soquet(binst=BloqInstance(bloq=XGate(), i=29), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())\n", + " Soquet(binst=BloqInstance(bloq=XGate(), i=30), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())]\n", + "ancs: Toffoli<23>.target\n", + "query: [True, False, True] prev_query: [True, False, False]\n", + "first diff ix, 2\n", + "query: [True, True, False] prev_query: [True, False, True]\n", + "uncompute ix: 1\n", + "first diff ix, 1\n", + "compute ix: 2\n", + "ctrls: [Soquet(binst=BloqInstance(bloq=CNOT(), i=37), reg=Register(name='ctrl', dtype=QBit(), _shape=(), side=), idx=())\n", + " Soquet(binst=BloqInstance(bloq=XGate(), i=29), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())\n", + " Soquet(binst=BloqInstance(bloq=XGate(), i=38), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())]\n", + "ancs: Toffoli<36>.target\n", + "query: [True, True, True] prev_query: [True, True, False]\n", + "first diff ix, 2\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABtwAAAJ0CAYAAACRP4doAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACGs0lEQVR4nOzdd5RV1fk/4HcKRUDsQhTUYMGCiEJUjEQFFMRgbNhbFLBFiaKiCVEjJsFEBI3GCnbFxIKKgFQjUSI2bIBBBRSxRYLKIGVmzu8PfszXERhm5szlTnmete5azD3lvnPZ+8y553P3PjlJkiQBAAAAAAAAVEputgsAAAAAAACAmkzgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAABquc8++ywuvPDCaNWqVTRo0CBatmwZPXv2jEmTJsU111wTOTk563z8/ve/L7WvM888M+bNm7fW11nXsueffz722WefaNCgQey0005x7733rrfmt956Kzp16hQNGzaMli1bxp///OdK/OZQs1RlXwWAisjm+eITTzwRhx56aGy11VbRtGnT6NixYzz33HPrrdn5YvWRzfbzr3/9K37605/GFltsERtttFHsuuuuMXTo0PXWrP0AmSBwAwCoxebNmxft27ePyZMnx1/+8pd4++23Y9y4cXHIIYfEBRdcEJdeeml8+umnazzOPPPM2HTTTePkk0+ORYsWxa233hpJkpTs94MPPoiHHnqozGUREXPnzo0jjjgiDjnkkJgxY0b8+te/jt69e5d5EeWbb76Jww47LLbffvt47bXX4i9/+Utcc801ceedd2bujYIsq4q+CgCVke3zxRdeeCEOPfTQGDNmTLz22mtxyCGHRM+ePeONN95YZ83OF6uPbLefxo0bx69+9at44YUXYtasWTFw4MAYOHBgmW1B+wEyJSf5/tEKAIBapUePHvHWW2/Fe++9F40bNy61bPHixbHpppuusc1DDz0UZ5xxRjz77LPRrVu3WLp0aVx33XXx2muvRVFRUXTo0CFefPHFuP7666Ndu3brXHbAAQfEgAED4tlnn4133nmnZP8nnnhiLF68OMaNG7fWmm+77bb47W9/G5999lnUr18/IiKuuOKKGDVqVMyePbvq3hyoRqqirwJAZWT7fHFt9thjjzjhhBPiqquuWuty54vVR3VsP8ccc0w0btw4HnjggbUu136AjEkAAKiVvvrqqyQnJyf54x//WO5tXn311WSjjTZK/vKXv6yx7Nlnn03y8vKSgw46KFmxYkW5lnXq1Cnp169fqXVHjBiRNG3adJ01nHbaackvfvGLUs9Nnjw5iYhk0aJF5f5doKao6r4KAOVVHc4Xf6ioqChp2bJl8te//nWd6zhfrB6qY/t5/fXXk2bNmiV33XXXOtfRfoBMMaUkAEAt9f7770eSJLHrrruWa/0vvvgijj766Dj22GPj0ksvLXl+2bJlcdVVV8VNN90UBx98cOy///7RtWvXmD59epnLIlbdz6FZs2alXqdZs2bxzTffxHfffbfWOta1zeplUNtUVV8FgIqqDueLP3TDDTfEkiVL4vjjj19nHc4Xq4fq1H5atGgRDRo0iA4dOsQFF1wQvXv3Xmcd2g+QKQI3AIBaKqnAzOErV66M4447Lpo1axZ33XVXqWVLly6NZs2axbhx46JFixZx7rnnxogRI+I///lPmcuA8qmqvgoAFVXdzhcffvjh+P3vfx9///vfY+utt079+5FZ1an9TJ06NV599dW4/fbbY9iwYfHII49Uye8IUBH52S4AAIDM2HnnnSMnJ6dc9yG46KKLYs6cOfHKK69Ew4YNSy3bfPPN44ILLij13I477hg77rhjRESZy5o3bx6ff/55qeWff/55NG3aNDbaaKO11rKubVYvg9qmqvoqAFRUdThfXG3kyJHRu3fv+Mc//hFdu3Ytsxbni9VDdWo/P/7xjyMiYs8994zPP/88rrnmmjjppJPWWov2A2SKEW4AALXU5ptvHt26dYtbb701CgoK1li+ePHiiIi48847Y8SIEfH4449HixYtytznvffeGzvssEO5l3Xs2DEmTZpU6rkJEyZEx44d1/kaHTt2jBdeeCFWrlxZapvWrVvHZpttVmZ9UBNloq8CQHlUh/PFiIhHHnkkfvnLX8YjjzwSRxxxxHrrdr5YPVSX9vNDxcXFsXz58nUu136ATBG4AQDUYrfeemsUFRXFvvvuG48//njMmTMnZs2aFTfffHN07NgxXnzxxbjwwgvjqquuilatWsVnn31W6vH111+nev1zzz03Pvzww7j88stj9uzZ8be//S3+/ve/x8UXX1yyzi233BJdunQp+fnkk0+O+vXrx9lnnx3vvvtuPProo3HTTTfFJZdckqoWqM6y3VcBqLuy/Tfo4YcfjtNPPz2GDBkS++2331r363yx+sp2+7n11lvjmWeeiTlz5sScOXNi+PDhccMNN8Spp55aso72A2wwCQAAtdrChQuTCy64INl+++2T+vXrJ9tuu21y5JFHJlOmTEnOPPPMJCLW+TjjjDNSv/6UKVOSdu3aJfXr109atWqV3HPPPaWWX3311cn2229f6rk333wzOfDAA5MGDRok2267bTJ48ODUdUB1l+2+CkDdlc2/QQcddNB69+t8sXrLZvu5+eabkz322CNp1KhR0rRp02TvvfdO/va3vyVFRUUl62g/wIaSkyQVuLslAAAAAAAAUIopJQEAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGxnz6aefxn777RdXX311JEmS7XKqheHDh0ebNm3inXfeyXYpAAAAAAB10ocffhh777133HjjjdkuhVokP9sFUHv997//jenTp8f06dMjIuKaa66JnJycLFeVPcOHD4/evXtHRMTcuXOjTZs2Wa4IAAAAAKDu+eSTT2LGjBkxY8aMiIi45JJLslsQtYIRbmRcr1694tprr41rrrmmzo50Wx22HX/88dkuBQAAAACAWHXtun///ka6USWMcCPj+vfvH+3bt48rrrgiIureSLfVYdv5558fv/vd7+Lvf/97tksCAAAAAKjzrr322thpp52if//+EWGkG+kI3NggBgwYEBFR50K374dtt9xyS3zxxRfZLgkAAAAAgIjIycmJP/zhDxERQjdSE7hRZZYtWxYDBw6M//3vfxERsWjRolLL61ro9sOw7fu/68033xyjRo2qktc58cQT49BDD62SfQFARSRJEm+99VZMnDgxlixZEq1bt47u3bvHpptumu3SoFZIkiRmz54d48ePj8WLF8ePf/zj6NGjR2y55ZbZLg0AymXBggUxZsyY+PTTT2PrrbeOww8/PHbYYYdsl0UNkSRJvPnmmzFp0qRYsmRJ7LrrrtG9e/fYZJNNsl0aWfLiiy/GiBEjqmRfn332Wcm/hW5UFYEbVebZZ5+NIUOGRIcOHSI/f1XT6tWrV7Rp06ZknboSuq0rbNtyyy2jb9++8dZbb8XMmTNTv87cuXNj+vTp8fbbb6feFwBUxEcffRSnnXZavPDCC5Gbmxu5ublRWFgYDRo0iCFDhsT5559fK//Gw4byxRdfRO/eveOZZ56J3NzcyMvLi5UrV0ZeXl5ce+21cfnll5eccwNAdfPdd9/FFVdcETfffHPk5OREfn5+FBYWRpIk0adPn7jxxhujSZMm2S6Tamz+/Plx6qmnxr/+9a9SnzcaNmwYN954Y5x77rk+b9RBV1xxRcyePTt22mmnKtnfaaedVvIlAKEbVSEnSZIk20VQOzz++ONx3HHHxaJFi2KzzTYrc93rr78+rrjiirjqqqtqXehW1si2qtavX7+YPHmywA2ADWrChAlx9NFHx/Lly6OwsHCt63Tr1i2efvrpqF+//gauDmq+V155Jbp37x5ff/11FBUVrbE8Jycn9ttvvxg/fnxsvPHGWagQANbtk08+iYMPPjg+/PDDKC4uXmN5bm5utGzZMiZPnhytWrXKQoVUd88991wcc8wxsWLFinV+3ujRo0eMGjUq6tWrt4GrI5s6deoUrVq1ivvuuy9jr5EkSfz2t7+NP/3pTzFkyBChGxWSm+0CqJsGDBgQgwcPjmuvvTauueaaqC2574YM2wAgGz7++OPo1atXLF26dJ0ffiMixo8fXzKiHSi/RYsWxVFHHbXOsC1i1UWAV155Jc4999xacx4NQO1QWFgYxx9/fMydO3etYVtERHFxcXzyySdx3HHHxfLlyzdwhVR38+fPj+OPPz6+++67Mj9vjB07Nn7zm99swMqoK1aPdLvyyiujf//+ceONN2a7JGoQgRtZU9tCN2EbVC8FBQVx8803R5cuXaJ58+ZRv379aN68eXTp0iVuvvnmWLp0abZLhBrp3HPPjYKCgvX+3U6SJIYOHRovvfTSBqqMmsZxeu0uu+yy+Pzzz9cZtq1WVFQUDz/8cDz99NMbqLLqRxuCzNLHqIxbbrklpk2btt6/Y4WFhTFjxoz4y1/+soEqq370sbU755xzYunSpeX6vHHDDTfEyy+/vIEqoy4RulFpCVSRxx57LImIZNGiRRXabvDgwUlEJFdddVVSXFycoeoy6+67704iIjn//PM36O9w0UUXJW3atNlgrwc1xejRo5PmzZsnEZFERLLJJpskP/7xj5NNNtmk5LnmzZsno0ePznapUKNMmDChpA+V55GXl5fss88+NfbvO5njOL12b7zxRpKTk1PuPpabm5tsv/32yYoVK7Jd+ganDUFm6WNUxldffZVsvPHGFTpfbNiwYbJw4cJsl77B6WNrN27cuAp/3vjJT37i80YdcuCBByann376Bnu94uLi5Morr0wiIhkyZMgGe11qLiPcyLqaPtKtPCPbDj744MjJyYmcnJyYMWNGufZ77733lmzz61//umqLhlrszjvvjCOPPDK+/PLL6N27d7z55psxc+bMeOKJJ2LWrFnx1ltvRZ8+feLLL7+MI488Mu68885slww1xn333Rf5+fnlXr+oqChef/31eO+99zJYFTWN4/S6Pfjgg5GXl1fu9YuLi2P+/Pl1biSpNgSZpY9RWU8//XR8++23Fdpm+fLl8cQTT2SooupJH1u3++67r0LnQkVFRfHKK6/E+++/n8GqqAkyde3VSDcqLNuJH7VHZUe4rVYTR7qVd2TbQQcdlPTp0yf59NNPk5UrVyZJkiTz589PevTokWy00UbJVlttlVx66aUly5IkSZYuXZp8+umnSceOHZN+/fqtdb9GuEFpkyZNSvLy8pKNN944mTBhQsnz/fv3TyIiGTBgQMlzEyZMSJo0aZLk5eWVWhdYu+Li4mSLLbao0DdO4/+PwLn55puzXT7VhON02XbbbbcK97H8/Pzkt7/9bbZL32C0IcgsfYw0Tj755CQ/P7/C54o9e/bMdukbjD62bkVFRclmm21W4XOhnJyc5NZbb812+Wwg6xrhlqlrr6sZ6UZ51eoRbsOGDYvPPvuszHV22GGHUqn3F198EXvssUdERKxYsSIGDBgQO+20U+y2227Rpk2bGD58+Br7mDJlSuTk5MQDDzxQZbVfeumlMXLkyIiIGDlyZLRr1y7atGkTbdq0iSFDhpSs99Zbb8Xhhx9eZa+bTTVtpFtF79nWqFGjaN68eeTn50dRUVEcccQRsWLFinjppZfivvvui3vvvTeuuuqqkvU32mijkjm8gfUrLCyMCy64IIqKiuKhhx6Krl27lrl+165d45FHHomioqK48MILy7wZMxDx9ttvx1dffVWpbceNG1fF1VATOU6X7bPPPotZs2ZVeLvCwsIYO3ZsBiqqfrQhyCx9jDSKi4tj3LhxFW4HxcXFMWnSpFi5cmWGKqs+9LGyvfnmm/G///2vwtvl5ubGc889l4GKqGkyee3VSDfKq84GbsXFxVFcXLzG80899VQceeSRERFx5plnxvvvvx9vvvlmzJo1K0aPHh033HBD3HbbbaW2GT58eHTp0mWtYVxlfPLJJzFmzJg44YQTIiKiZcuWMW7cuHjnnXfixRdfjNtuuy2ef/75iIho27ZtNGjQICZPnlwlr51tNSV0q2jY9kPjx4+PmTNnxoMPPhjt2rWLww8/PAYNGhS33nprrFixIkNVQ+02adKkmD17dvTs2TN69uxZrm1+/vOfR8+ePWP27Nm15jgKmTJhwoTIza34qWNxcXFMmTLF3zccp9dj4sSJld72jTfeiEWLFlVhNdWTNgSZpY+Rxttvv13pv0VLly6N6dOnV3FF1Y8+VrbKft4oKiqqM6Et5ZeJa69CN8qj/DfhqOamTZsWl112WXz77beRJEkce+yxsXDhwjjhhBNio402invvvTdGjRoVb7/9dixZsiQ+/vjjmDBhwhr7GTVqVFx99dUxZ86cGDVqVHz88cfRuHHjiFg1Gm7IkCHRu3fvOO+88yIiYvHixfHss8/GrFmzom3btvH+++/HTjvtFBGrArsGDRrE+++/Hx9//HG0adMmRo4cGcXFxbHDDjvEK6+8Ei1btoyIiN/85jdRVFQU119/fYwYMSKOPfbYkhDnpz/9aUl9m2yySey6664xb968kudOOumkuOOOO6Jz587rfH8KCgrSvcHlsGzZsirZz4ABAyIi4oorroiIiGuuuabCgVYmpQ3bIla11z333DOaNWtW8ly3bt3ivPPOi3fffTf23nvvcu+ruLh4g/z/QnW3+tv9vXr1WqNPrD7xXrly5RrLjjvuuHjmmWdizJgxpY63QGnvvvtu5ObmrvULS+vz3XffxYcfflhy3kPd5DhdtnfeeSfq1atXqYtFSZLEu+++G/vss08GKqs+tCHILH2MNN56661U27/99tvRrl27qimmmtLHyjZz5sxKf94oKCiIefPmxTbbbJOByqhOioqKyrVeVV57/b7VoVtERP/+/SMi4pJLLqnUvqilsjujZdX46quvkq233jp54YUXkiRZNefvV199lWy//fbJG2+8UbLe1VdfnfzoRz9KPvvss5Lnvr/ON998k7Rq1SopLi5OHn300aRt27ZrvNaiRYuSiCjZx6233pqccMIJSZIkycUXX5xceeWVJeueccYZyb777psUFBQkhYWFyQEHHJA8/PDDSZIkyW9+85uSdZctW5Y0b948mTdvXpIkSdK5c+fkmWeeWevv+u677yabb7558vHHH5c8N3/+/GSLLbYo8z2KCs5/nOZR2Xu4/dDqe7r94Q9/qJL9VYUHHnigXPds+6GDDjqo1FzAffr0SQ477LBS6xQUFCQRkYwZM6bMbb/voosuSurVq7dB/389PDw8PDw8PDw8PDw8PDw8PDw8PDb0Iy8vb533cMvEtdd1+f493dxDkO+rFVNKTps2LVq3bh2dOnWKiFVz926++eZrXbdHjx6lku3vGzt2bHTv3r1cI5Y22mijiFg12umss86KiIizzjor7rvvvlJJ+9FHHx2NGjWKvLy82HfffeODDz6IiIjzzz8/7rvvvli+fHn84x//iH333Te23377iIhYsGDBWmtcsGBB/OIXv4jbb789WrRoUfJ88+bN46uvvqqyEWbVxSmnnBJbbrllTJkyJdullPjnP/8Z9erVi3POOadajboDAAAAACDzcnJy4qyzzoomTZpUq2vXZF+tmVKyvJo0abLOZU8++WRJeLb33nvHnDlz4quvvootttiiZJ1p06bFHnvsEU2bNo0ZM2bEW2+9FX369CkJX/773//G2LFj4+c//3lERDRs2LBk27y8vJIbnG677bbxs5/9LB599NG47bbb4tprry1Zr1GjRmuEZwsXLoyuXbvGwIEDo1evXqWWLVu2LPLy8sq8weOSJUvKfF+qwqhRo+LUU0+tkn0tWLAgDj744GjcuHHcddddVbLPqnD99dfHa6+9Fl26dInJkyfHnnvuWan9NG/efI35yT///POSZRWx884714m5zmF9fvvb38ZNN90UDzzwQBx88MElX35YunRp7L777hER0bt37xg4cGDJNnl5eTFlypQ4/fTT49e//nVcd911WakdaoLzzjsvHnnkkUrfrP3NN9+MHXfcsYqroiZxnC7bVVddFX/9618rff+RiRMnxv7771/FVVUv2hBklj5GGo8++micffbZld7+pptuSrV9TaCPla1v377x97//vdKfN959992SwQzUXoceemi51qvKa69r8/7778fBBx8c2267bdx8882p90ftUSsCtwMOOCDmzJkTU6dOjU6dOkVxcXEsXrw4mjZtGl9//XW59rFixYqYNm1a3H///RGxKsTo2bNn9O3bNx544IFo1KhRzJs3LwYMGBBDhgyJiFWj2/r37x+DBw8u2c9tt90Ww4cPLwncytKvX7/o1atXNGnSJLp27VryfNu2beO9994rGbH36aefRpcuXWLAgAFxxhlnrLGfWbNmRZs2bcq8sejq+9Bl0vfDxTRWh22FhYXx/PPPxw477FAl+60Km2++eUycODG6du0anTt3rnTo1rFjx/jDH/4QX3zxRWy99dYRsermsE2bNi05ySqv3NzcDfL/C9Xd4YcfHjfddFM89thjpcL/789/37Rp0zVOwB9//PGS7fUlWLetttoq1ejubbfdVh+r4xyny9asWbNK3bNktW222aZWvz8R2hBkmj5GGj/60Y9Sbd+8efNa3370sbKl/bxRF86FWBVCl0dVXnv9odVh2+rRbWmPf9QutWJKyc022yyefPLJuOKKK6Jt27axzz77xIsvvhgXXXRR9OnTJ9q1axczZswocx+TJ0+OAw88MOrVq1fy3P333x877rhj7LnnnrHzzjvHTjvtFH/5y1+iW7dusWzZsnjooYfilFNOKbWf448/PsaPH1+SmJdl//33j0022STOP//8Un9QjjvuuHjuuedKfr7qqqvio48+iptuuinatWsX7dq1i3vuuadk+bhx4+K4445b7+vVBNU5bFttdejWsmXL6Ny5c7z99tsV3sdhhx0Wu+++e5x22mnx5ptvxnPPPRcDBw6MCy64IBo0aJCBqqH269KlS+y6667x1FNPxbPPPluubcaMGRNPPfVU7LrrrtG5c+cMVwg1W6dOnSo98maXXXYpNWMAdZPjdNk6depU7pvA/9Bmm20WrVu3ruKKqh9tCDJLHyONjh07pgpLVn/pvDbTx8qW5vPGbrvtFptuumnVFkSNlqlrr8I21ivbN5GrLs4555zkH//4xzqXFxUVJZdddlnSrl275KuvvqqS11ywYEHSvHnz5Jtvvlnjtdq3b598/PHH693H8uXLkz333DP58ssvq6SmNB577LEkIpJFixZVavuPP/442XHHHZPtt98+mTt3btUWlwFfffVVsvfeeydbbrll8tZbb5W57tpuvjlv3rzk8MMPTzbaaKNkyy23TPr375+sXLmyXNuudtFFFyVt2rSp7K8Atc7EiROTvLy8ZOONN04mTpyYJEmSLFmypOTmupdcckmpdTfeeOMkLy8vmTBhQrZKhhpj8eLFSW5uboVvap2fn1/hG1BTezlOr9vKlSuTJk2aVKqPnXjiidkuf4PRhiCz9DHS6NChQ4X/jkVEsuuuu2a79A1GH1u3RYsWJTk5OZU6F/r++0btduCBByann376Gs9n6trr982ZMyfZdtttk9atWycLFy6s7K9ALVcrRrhVhdtvv73MUWK5ubnx5z//Od54443YfPPNU7/eVVddFfvtt18MHjw4Nt544zVe64477oh58+atdz9z586NwYMHx5Zbbpm6pmyqCSPbfijtSLftt98+xowZE0uXLo0vv/wybrjhhsjPrxWzvELWdOnSJW699dYoKCiIbt26xfnnnx8zZ84sWX722WfHzJkz44ILLohu3bpFQUFB3HrrraWm9QXWbpNNNomf/OQnFd6usLAwDjvssAxURE3kOL1u+fn50bVr13JPk7NaXetj2hBklj5GGocffniF/47l5+dHjx49MlRR9aOPrdtmm20W++yzT4W3q2vnQpRfVV57NbKNcst24kftUdkRbjVtZNsPlWek20EHHZTUq1cvady48XpHw6324IMPJo0bN05yc3ONcIMKGj16dNKsWbM1vvm26aablvy7WbNmyejRo7NdKtQogwYNqvAotwYNGiTffvtttkunmnGcXrs777yzwt/szsnJKdfMGLWNNgSZpY9RGS+99FKlRrjVhdFbP6SPrd0111yT5OXlVaj9NGzYMCkoKMh26WwgZY1wy8S11yQxso2KyUmSJKlUUgc/8Pjjj8dxxx0XixYtis0226xc29TEkW1rs2jRoujatWt8/PHHMXny5Nhzzz1LLf/kk0/iu+++i4iI7bbbLurXr7/efX777bcl9wLcdNNN1zqKsV+/fjF58uRK3UcOaruCgoK4++6748knn4x//vOfEbHqJsx77rln/OIXv4izzz7bDZWhgv73v/9Fq1atYvHixeVaPzc3NwYOHBi///3vM1sYNZLj9JqWLVsWu+yyS3zyySdRXFy83vXz8vLi7LPPjjvuuGMDVFf9aEOQWfoYFZUkSRx22GHx/PPPR2Fh4XrXz8vLi5/85Cfx0ksvpbr/W02lj61p0aJF8eMf/zi++eabcq2fk5MT11xzTVx11VUZrozqolOnTtGqVau47777Sj2fqWuvRrZRUQI3qkxFA7faErattr7QLRMEbrB+BQUF0aRJk4iIWLJkSZ37wAJVbfjw4dG7d+/1rpeXlxfbbLNNzJo1S7+jTI7TpT3zzDNx5JFHrne93Nzc2GSTTeK9996LrbbaagNUVn1pQ5BZ+hgVMWvWrGjXrl2sWLFivevm5+fHyy+/XKlpBGsTfay0O++8M84555z1rpeXlxctWrSImTNnRqNGjTZAZVQH6wrcMkHYRmW4hxtZUdvCtoj093QDgJrgrLPOiuOPPz5yc9d9GpmXlxc5OTnxxBNP1PkLBlBRPXv2jIsuuqjMb/rn5uZGkiQxcuTIOh+2AVC97LbbbnHrrbdGRKx31Npf/vKXOh+2saY+ffrEscceu97PG7m5ufHEE08I28gIYRuVVbm7BEIZJk6cGBtvvHFERDRv3jzatWtXanltDNtWWx26de3aNTp37rzWkW7vvfdezJ07t0peb968eVWyHwAor5ycnLjvvvuiRYsWMXTo0MjNzY2ioqKS5Xl5ebHtttvGww8/HB06dMhipVBzDRkyJLbccsuS6Vh/2Mc233zzuP/+++Owww7LVokAsE5nn3121K9fP84///xYvnx5qekl8/PzIz8/P2666abo06dPFqukusrJyYkHHnggfvOb38SwYcMiLy+v1LlQbm5utGjRIh5++GGBbR31ySefxLhx46pkXy1atIg2bdqUek7YRhqmlKTKzJgxI/bff/9Yvnx5yXP5+fnxzjvvROvWrSOidodt37eu6SW//vrraNGiRSxZsqTKXuuEE06IkSNHVtn+oLYxPQdkzj//+c8YMmRIPPPMMxER0apVqzjppJPiiiuuKOl3sD6O0+v26quvxuDBg+Pxxx+PiFUXBI4//vj4zW9+E1tssUWWq6s+tCHILH2Mypo/f3788Y9/jCeffDK+/PLLiIg47bTT4qqrroqddtopy9VVH/rYuj3//PMxZMiQGD16dERE7LjjjnHyySfH5Zdf7vNGHXXuuedW6f2LGzRoEB9++GFss802ESFsIz2BG1Xqv//9byxbtiwiVs3bfdhhh8W///3v2G+//epM2Lba2kK3zz//PJo3bx4jRoyIQw89NCIili5dWhJIvvfeexUeCr/11luX60agUFf58AKZpY+RljZUNu/P+nmPILP0MdLShsrm/Smb94fvKywsjM8++6xC26zr2uvLL78cxx13XMyePTtat24tbKNKmFKSKrXllluW/Pt///tfyb8XLFgQBx54YCRJEv/85z9rfdgWsfbpJbfeeuuIWPU+tWjRIiJWnTistu222zpxAAAAAAD4gfz8/JJrquW1rmuv37/lj7CNqrLuu09CFVkdtn3yyScxduzYOhG2rbY6dGvZsmV07tw53n777WyXBAAAAABACNuoWgI3Mu7MM8+MTz75JAoLC2P77bfPdjkb3PdDt6OPPjrb5QAAAAAAEBEnnniisI0qI3Aj4zbffPMoLCzMdhlZtTp0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cfXVV0f79u1jp512KhVQTJs2LQ488MDYa6+9om3btqVGrT399NPxi1/8IiZNmhTz58+PG2+8MfLz8yMiol27djFw4MAYNGhQyfrvvfdezJ07N+6///4YNWpUfPPNNyXLDj744Lj00kujU6dOseOOO8a5554bERELFy6MZs2axdKlS0vWPfnkk0sa+x133BEnn3xyybJddtkl9tprr5I6vq9+/fpx2GGHxcMPP5z2raSaE7oBAAAAQO0kbKu7fphX/P73v4+FCxfGCSecEO3atYsZM2bENddcE8cee2x069Yt2rRpE59++uka+xk1alQcffTRMWfOnBg1alTceeed0bhx44hYNRpuyJAhpbKNxYsXx7PPPhsPPvhgzJw5M95///2SZWeeeWacc8450aVLl9hll13imGOOiRUrVsSyZcuiefPm8fHHH5es+5vf/CYGDBgQEREjRoyIY489NnJyciIi4qc//Wk0b948IiI22WST2HXXXWPevHkl25500klxxx13VN2bmUVrpjc10LBhw2KrrbaKiIjBgwfHNddcE1dccUV8/fXXJY1z3Lhx0a9fv+jRo0csWrQojjrqqHjssceiU6dOUVxcHIsXL46IiDlz5kTTpk2jefPmcf/990f79u2jfv36pV6vY8eO0b9//5Kfhw8fHqeddlpss8020blz5xg5cmT07du3ZPkHH3wQU6ZMiZUrV8buu+8e06ZNi44dO0bXrl3jwQcfjL59+8bnn38eEydOjDvvvDMiIp5//vm4+OKLy/0edOzYMZ5++uk477zz1rlOQUFBufdXlb7/utmqoTZZHbr16tUrjj766HjyySejR48e2S4LAAAAAKikTIVthYWFdfqabHW6Nr06+PqhdeUV99xzTzz66KPRrl27iFgVpk2bNi3eeOONaNas2Rr7+fbbb2P27Nnxk5/8JP7xj3/EzjvvHFtssUWpdTp27BiffvppfP7559GsWbN4+OGHo1u3btG8efM49dRTY8SIEaVuXzVjxoyYMmVKNGjQIH72s5/F448/HieddFKcffbZcdttt8Uf//jHWL58edxzzz3x73//OyLKzjZmzpwZ06ZNi9tvv71UTbUlXK4VgdvDDz8cDzzwQCxbtiyWLVsWW265ZURENGzYMI455piIWPWf9sEHH0TEqrS4devW0alTp4iIyM3Njc033zwi/m86yfXZaKONImLVAev++++Pf/7znxERcdZZZ8WgQYNKBW4nnHBC5OfnR35+frRr1y4++OCD6NixY/Tr1y/69OkTffv2jbvuuitOOumkaNKkSURELFiwYK2dZl2aN28eCxYsKHOd1fvOpor8TrVRbm7VDCpdHbodddRRcfTRR8dHH31U599bAAAAAKipHn744Rg6dGgMGzasysKH4uLieOKJJ+KJJ56okv3VdNm+fpokyVqfLyuv+KEePXqs8/cYO3ZsdO/evWRkWVlW5xvDhw+PP/3pTxGxKtvo1q1bDBo0KPLy8iIi4uijj45GjRpFRMS+++5bkrGcf/75se+++8bVV18d//jHP2LfffeN7bffPiLWnW0sWLAgfvGLX8Ttt98eLVq0KHm+efPm8dVXX8WyZcuiYcOG6629OqvxU0r+61//iptvvjnGjBkT77zzTtx4442xbNmyiIho0KBBSePKy8uLoqKi9e5v1KhRJYHbPvvsE6+99lqsXLmy1DrTpk2LAw44ICIiRo8eHYsXL45u3brFDjvsEBdccEG8/vrr8c4775Ss//1GkpeXF4WFhRGxqoE2atQopkyZEnfeeWepA2mjRo1Kfo/yWLZsWUknoW5YuHBhzJo1K1q0aOH/HgAAAABqsO222y7q1asXL7zwwhrXo2G1sgbVfH8w0d577x1z5syJr776qtQ606ZNiz322COaNm0aM2bMiLfeeiv69OkTO+ywQ/z85z+P//73vzF27NiS9deVbWy77bbxs5/9LB599NG49dZb41e/+lXJemvLNhYuXBhdu3aNgQMHRq9evUotW7ZsWeTl5a0x02BNVONHuP3vf/+LjTfeOLbYYotYsWJFueb6POCAA2LOnDkxderUUkM0ly9fHkuWLImdd945IiI6d+4cLVu2jIsvvjiGDRsW+fn5MWPGjBg6dGg89thjEbEqAR42bFjJvdkiIgYMGBDDhw+PoUOHrreWfv36xemnnx6777577LLLLiXPt23bNt57771o2bJlud6HWbNmxV577VXmOkuWLCnXvqpaQUFBSaL9+eefr3PobF2weurTtObNmxeHHHJI5ObmxpQpU6Jp06ZVsl8AAAAAYMPr1KlTPP7443HsscfGiSeeGCNHjox69eql2mdubm4cc8wxcf/991dRlTVPTbg2va68omnTpvH111+Xax8rVqyIadOmlfxf77zzztGzZ8/o27dvPPDAA9GoUaOYN29eDBgwIIYMGRIRq7KN/v37x+DBg0v2c9ttt8Xw4cPj5z//+Xpfs1+/ftGrV69o0qRJdO3ateT51dnG6hF7n376aXTp0iUGDBgQZ5xxxhr7mTVrVrRp06bKZofLphofuHXv3j0efPDBaN26dWyxxRbRtWvX+OSTT8rcZrPNNosnn3wy+vfvH99++23k5ubGoEGD4pNPPokjjzyyZL3c3NwYO3ZsXHbZZSVh2Keffhovv/xytG3bNhYuXBiTJk2Ke++9t9T+TznllOjSpUtcf/31663/uOOOi/POO69UArz6+eeee66koU6aNCnOOOOM+OabbyJJknjsscfib3/7W0m948aNK3Wzw7WpDgeTxo0bV4s6arIfhm3bbbddtksCAAAAAFLq2bNnlYdu+fn5rsf+f9X12vS68oqLLroo+vTpE40aNVojg/ihyZMnx4EHHliqvdx///3xu9/9Lvbcc8/Izc2NuXPnxujRo6Nbt26xbNmyeOihh0pulbXa8ccfH5deeml8/vnn6617//33j0022STOOeecUtNYHnfccXH//fdH7969IyLiqquuio8++ihuuummuOmmmyJiVVj3y1/+MiJWZRvHHXdcud6r6i4nWdfEoXVQ9+7d47rrrosOHTqsdfmyZcuid+/e8cUXX8TTTz9dJfOJvvrqq3HyySfH7NmzSyW4S5YsiQMOOCCmTZu23oPAzJkz45xzzompU6emricTCgoKSoa6LlmypFoe1DaURo0axeDBg+Oiiy6q1PbCNqg4xyDILH2MtLShsnl/1s97BJmlj5GWNlQ270/Z6ur788wzz8Sxxx4bPXv2TBW6HXbYYbHZZpvFo48+WsUV1hx1pQ2de+650bVr13UGV8XFxXHFFVfEhAkTYtKkSeu8R1xFfPLJJ9GhQ4f4z3/+ExtvvHGp19p3331j1KhRpe7VtjYrVqyIDh06xOTJk2PLLbdMXVO21fgRblVp3LhxZS5v2LBhPPjgg1X2er17947x48fH3XffvcZwySZNmsTQoUNj7ty50aZNmzL38/HHH5drKk1qNmEbAAAAANR+mRjpRu12++23l7k8Nzc3/vznP1fZ61111VUxYsSIGDx4cKmwbfVr3XHHHTFv3rz1Bm5z586NwYMH14qwLULgllV33313mcu7dOlSrv1069atKsqhGhO2AQAAAEDdIXSjOrv22mvj2muvXefy9u3bl2s/rVu3jtatW1dVWVlX8+9CB7WcsA0AAAAA6p7VodszzzwTJ554YqxcuTLbJQFlELhBNSZsAwAAAIC6S+gGNYfADaopYRsAAAAAIHSDmkHgBtWQsA0AAAAAWE3oBtVffrYLgLpmxIgRMXXq1IiIyMnJiUGDBpW6MaSwDQAAAAD4odWh27HHHhsnnnhijBw5MurVq1ey/JFHHoknnnii5Oc333wzDj744CxUCnWTEW6wAV177bXRvHnz+Pbbb+Pbb7+NsWPHxl//+teS5cI2AAAAAGBdyhrpduWVV8brr79ecu1x7733jl/96ldZrBbqFiPcYAO69NJL49JLLy35uV27diX/FrYBAAAAAOtT1ki3k08+OQYNGpTlCqFuMsINqgFhGwAAAABQXt8f6Xb88ce7pxtUAwI3yLL58+cL2wAAAACACunZs2c89NBD8dRTTwndoBoQuEGWjR49WtgGAAAAAFRYjx49IkmSeOqpp2LhwoXZLgfqNPdwgyxq27ZtfPvtt8I2AAAAAKDSkiSJTTbZJHbeeedslwJ1lsANsuj++++PlStXltzUFAAAAACgMubNmxebbrpptsuAOsuUkpBlwjYAAAAAIC3XGSG7BG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwAAAAAAgBQEbgAAAAAAAJCCwA0AAAAAAABSELgBAAAAAABACgI3AAAAAAAASEHgBgAAAAAAACkI3AAAAAAAACAFgRsAAAAAAACkIHADAAAAAACAFARuAAAAAAAAkILADQAAAAAAAFIQuAEAAAAAAEAKAjcAAAAAAABIQeAGAAAAAAAAKQjcAAAAAAAAIAWBGwAAAAAAAKQgcAMAAAAAAIAUBG4AAAAAAACQgsANAAAAAAAAUhC4AQAAAAAAQAoCNwAAAAAAAEhB4AYAAAAAAAApCNwAAAAAAAAgBYEbAAAAAAAApCBwAwCg0lasWFHy748++iiLlUDtVFhYWPLv999/P4uVAEDFJUkS77zzTsnPxcXFWayGmsjnDaAmEbgBAFBhK1asiN/+9rfRokWLkud23333aNeuXUyfPj2LlUHtUFRUFNdff31st912Jc+1a9cudtlll5g0aVIWKwOA8hk5cmS0aNEi9t9//5Lndtxxx7j33nsjSZIsVkZNsHz58rjyyivX+Lyx9957xyuvvJLFygDWTeAGAECFvP/++7HPPvvEn/70p1i6dGmpZe+880507NgxBg0a5EIKVNLChQujU6dOccUVV8Q333xTatkHH3wQXbt2jYsvvtgoAQCqpe+++y5OOumkOOmkk+LTTz8ttezLL7+MX/7yl3HUUUfFt99+m6UKqe7+85//xD777BPXX3/9Gp833n777dh///3jD3/4Q5aqA1g3gRsAAOW2dOnS+PnPfx6zZ89ea6BWVFQUxcXFcdVVV8WIESOyUCHUbIWFhXHcccetc6To6pBt2LBhcf3112/I0gCgXC666KL4+9//HhGxzi9gPfvss9G3b19f0GINBQUF8fOf/zzee++9Mj9vDBw4MO69994NXyBAGQRuAACU25VXXhlz5syJoqKi9a57wQUXxLx58zJfFNQif/7zn+Pf//53ufrYwIED44033tgAVQFA+TzzzDNx9913r3cUdlFRUYwcOTJGjhy5gSqjprj88svjww8/LNe50Hnnnee+bkC1InADAKBcZs6cGbfccku5p7ErKiqKSy+9NMNVQe2xcOHCCk3HmpubGxdeeKHRAQBUC8uXL48LL7wwcnPLd7kxJycnLrnkkigoKMhwZdQU77zzTtx2223lCtsiVs0McPnll2e4KoDyE7gBAFAut912W7kvoESs+gD8+OOPx8KFCzNYFdQeI0aMiJUrV5Z7/cLCwnjxxRfjzTffzGBVAFA+Y8eOjfnz55f7y1lJksRnn30WTz75ZIYro6b429/+Fnl5eeVev7CwMB599NH4/PPPM1gVQPkJ3AAAKJdnn302CgsLK7zdxIkTM1AN1D5jx44t90XK1XJzc2PChAkZqggAym/8+PGRn59foW3y8/P9HaOEzxtATSdw+4FXX301Dj/88IiI+Prrr+Occ86JVq1aRevWraN9+/bx1FNPrbHNPffcEzk5OTF16tQqq6NXr14xbdq0iFj1x6Z9+/bRoEGD+PWvf11qvVtuuSX++Mc/VtnrAgCszfz582Pu3LkV3s5FFCifb7/9Nl5++eUKTw+ZJEk899xzGaoKAMpvzJgxFQ5LCgsLY+zYsaZHJj788MNK3Y/N5w0oTb6RXQK3H3jyySfjqKOOiiRJokePHlGvXr34z3/+E++9914MHz48zjvvvBgzZkypbYYPHx5dunSJ4cOHV0kN06dPj0WLFkXHjh0jImLnnXeOESNGxGWXXbbGun379o3hw4fH119/XSWvDQCwNpX9EOsiCpTP888/X+77lXxfkiQxderUWLZsWQaqAoDymTdvXsyfP79S23755Zfx7rvvVnFF1DQTJkyInJycCm9XWFgYY8aM8XkD/j/5RnZVbJx3NfXdd9/FmWeeGW+//XbUq1cvmjVrFvXr14+TTz45Tj755IhYNaz9d7/7Xbz88stx9913x4033hj169ePoqKiuPvuu2O//faLiIinn346JkyYEJMmTYr58+fHlClTSobDt2vXLgYOHBiDBg2KHj16RETEe++9F3Pnzo1XXnkldt999/jmm2+iadOmERFx8MEHR4cOHeLll1+OhQsXxqGHHhq33357LFy4MPbee++YO3duNGrUKCIiTj755OjUqVOcd955cccdd5TUHRGxyy67RESsdU7r+vXrx2GHHRYPP/xwnHfeeet8j7J5A9rvv7Yb4QIbmmMQVI3p06dHfn5+paZ4+eqrr+L999+PbbbZJgOVUdM5Tq/y73//u9J9bMWKFfH666/HXnvtlYHKqj9tCDJLH6M8XnrppVTbT5s2LX784x9XUTU1iz62yvTp0yMvL69S50JffvllzJ07N5o1a5aByqo/bahs1en9ady48Vqfl2+sP9+oMZJa4IknnkgOO+ywkp+/+uqrZPz48UnHjh1LnjvyyCOT+++/P0mSJGnatGmycOHCJEmSZMWKFcm3336bJEmS/Oc//0kOOOCAJEmS5Prrr0+OPPLINV7r9ddfTxo2bFjy82WXXZYMGDAgSZIkOfroo5M77rijZNlBBx2UHHXUUcnKlSuTpUuXJjvssEPy0ksvJUmSJCeffHLJup999lmy1VZbldTRqlWr5O23317jta+++uqkX79+azx/3333Jccee2yZ71FEeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhk4bEu8o315xs1Ra2YUnKvvfaKWbNmxfnnnx+PPvpo1KtXLw499ND4+uuv44033oj58+fH9OnT4/jjj4+IiC5dusRpp50WN910U8ydOzeaNGkSEf833HJ9Ntpoo4hYNWT5/vvvj1/+8pcREXHWWWetMezyhBNOiPz8/Nhoo42iXbt28cEHH0RERL9+/eLWW2+NiIi77rorTjrppJI6FixYUKFvZDRv3jwWLFhQ7vUBAAAAAIDsk2/UnnyjVkwp2apVq5g5c2ZMnjw5Jk6cGJdffnnMmDEjLrroovjrX/8azZo1i7POOisaNGgQERGPP/54vPbaa/H8889Hjx494rrrrosTTzwxRo0aFffdd19EROyzzz5x8803x8qVK6NevXolrzVt2rQ44IADIiJi9OjRsXjx4ujWrVtERCRJEgsXLox33nkn2rRpExERDRs2LNn2+8Oi991332jUqFFMmTIl7rzzzpg4cWLJeo0aNarQPRiWLVtW0knWZcmSJeXeX1UrKCgo6WCff/75OofOAmSCYxBUjb59+8ajjz5aqXtMRUS88cYbsfPOO1dxVdQGjtOrDBw4MG699dZYuXJlpbYfP358yeeUukYbgszSxyiPRx55JPr06VOpbXNycuLGG2+s9PY1nT62ytlnnx2PPfZYpT9vvPXWW9GqVasqrqpm0IbKVhPeH/nG+vONmqJWBG4LFiyIzTbbLI488sjo3r17jBo1Kj7++OM47bTT4tprr42ioqJ4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zZs3T2bNmrXO9Q466KAkIpKISN54441y7fuee+4p2aZfv35rXWezzTZLrr/++kpUTk00adKkJC8vL9l4442TCRMmlDzfv3//JCKSAQMGlDw3YcKEpEmTJkleXl6pdanb9ttvv5LjSkUe8+fPz3bpG4Q+Bpmlj1XOkiVLSo7HS5YsyXY5VGP/+te/Kvw3Pi8vLznxxBOzXfoG4zhEGnPmzKlwH8vJyUkOOuigbJcONZpzIVabO3duEhFr/bucqWuvSZIky5YtS3r27Jk0aNAgGTt2bCWrz46PPvooadWqVbLDDjskc+fOrfD29913XxIRyfLly6u+OOokI9xYp4qObOvTp098+umn0aZNm4iI+Oijj+KII46IRo0axdZbbx2XXXZZFBYWlqx/wgknxKeffhodO3bM6O9BzVBYWBgXXHBBFBUVxUMPPbTem8N27do1HnnkkSgqKooLL7ywVNuibvr666/jlVdeqdS2EyZMqOJqqh99DDJLH4PMGz9+fLlH3qxWVFQU48aNK/fo95rMcYi0xo8fX+4RpKslSRIvvviiewICbACZuvZaU0e6Gdm2bq+++mocfvjhEbHqetk555wTrVq1itatW0f79u3jqaeeWmObe+65J3JycmLq1KlVVkevXr1i2rRpEbFqyvP27dtHgwYN4te//nWp9W655Zb44x//WGWvm00CN9aqMtNINmrUKJo3bx75+flRVFQURxxxRKxYsSJeeumluO++++Lee++Nq666qmT9jTbaqOTm3TBp0qSYPXt29OzZM3r27FmubX7+859Hz549Y/bs2TF58uQMV0h19/zzz1fqYlpeXl6MHz8+AxVVL/oYZJY+Bpk3duzYct277YcWL14cb775ZgYqql4ch0hr/PjxkZtb8ctEhYWF8cILL2SgIgC+L5PXXmta6CZsK9uTTz4ZRx11VCRJEj169Ih69erFf/7zn3jvvfdi+PDhcd5558WYMWNKbTN8+PDo0qVLDB8+vEpqmD59eixatKgk8N15551jxIgRcdlll62xbt++fWP48OHx9ddfV8lrZ5PAjTVUxT3bxo8fHzNnzowHH3ww2rVrF4cffngMGjQobr311lixYkUGqqammzhxYkREnHbaaRXa7tRTT42IujFCibJNmDAh6tWrV+HtioqK4rnnnoskSTJQVfWhj0Fm6WOQWd9880289tprldo2Ly+vTvQxxyHSKCoqiokTJ1Yq1M7Pz9d+ADawTFx7rSmhW20M20455ZTo0KFDtG3bNo444oj47LPPYt68ebHpppvG1VdfHe3bt4+ddtqpVEg2bdq0OPDAA2OvvfaKtm3blhq19vTTT8cvfvGLmDRpUsyfPz9uvPHGyM/Pj4iIdu3axcCBA2PQoEEl67/33nsxd+7cuP/++2PUqFHxzTfflCw7+OCD49JLL41OnTrFjjvuGOeee25ERCxcuDCaNWtWapT7ySefHLfddltERNxxxx1x8sknlyzbZZddYq+99iqp4/vq168fhx12WDz88MNp38qsW/O3o06rirAtYlWH33PPPaNZs2Ylz3Xr1i3OO++8ePfdd2Pvvfcu975WrFgRBQUFlaqDmmPu3LkREbH99tvHtttuGwsXLlxjneuvvz6uv/76kp+32267+Pvf/16yvXZSt82bNy9WrlxZqW2//vrr+O9//xuNGjWq4qqqD30MMksfq7zv/9519T1g/T744INKTwuZm5sbH374Ya1vX45DpPG///2v0v//xcXF2g+k4FyI1SoyPW9VXnv9vtWhW69eveKoo46KUaNGRffu3Su1r0zIVNhWUFBQ6WtK5dW4ceN1Lhs2bFhstdVWERExePDguOaaa+KKK66Ir7/+Otq2bRu///3vY9y4cdGvX7/o0aNHLFq0KI466qh47LHHolOnTlFcXByLFy+OiIg5c+ZE06ZNo3nz5nH//fdH+/bt1xjl2LFjx+jfv3/Jz8OHD4/TTjstttlmm+jcuXOMHDky+vbtW7L8gw8+iClTpsTKlStj9913j2nTpkXHjh2ja9eu8eCDD0bfvn3j888/j4kTJ8add94ZEatmorr44ovL/f507Ngxnn766TjvvPPKvU11JHCjlKoI2yIiPvvss1IH/Igo+fmzzz4r934KCwvjd7/7Xfzud7+rdC3ULPvtt1+51/3oo49i//33j4iIxx9/PB5//PFMlUUdsPXWW2e7hA1CH4PM0sfS+eH5I1SFlStXxh133BF33HFHtkvZIByH2NCKi4vjySefjCZNmmS7FKjxnAtRXlV17XVtfhi6vfTSS7HPPvuk2mdVWLZsWcZGtm2++eZVtq91KWtmpYcffjgeeOCBWLZsWSxbtiy23HLLiIho2LBhHHPMMRGxKpD64IMPImJV4Nq6devo1KlTRKz6gtnq32H1dJLrs9FGG0XEquvv999/f/zzn/+MiIizzjorBg0aVCpwO+GEEyI/Pz/y8/OjXbt28cEHH0THjh2jX79+0adPn+jbt2/cddddcdJJJ5WcDyxYsKBCx7TmzZvHggULyr1+dSVwo5Qvv/wytt5665JODQAAAABA3VG/fv1o1apVLF++vNT0gtlUXFwcX331VbRu3XqDBGQbyr/+9a+4+eabY9q0abH11lvH008/XXIvvgYNGkROTk5ErJomvTxTP48aNSruu+++iIjYZ5994uabb46VK1eWug3LtGnT4oADDoiIiNGjR8fixYujW7duEbEqGFy4cGG888470aZNm4hYFfytlpeXF4WFhRERse+++0ajRo1iypQpceedd5ZMcR6x6p6Dy5YtK/f7sGzZspIQsCYTuFHK5MmTo3PnztGlS5eYNGlSpYO35s2bx/Tp00s99/nnn5csK6/8/PwYNGhQhYafUjNNnDgxjjrqqPj5z38eI0eOLLXsN7/5Tdx8881xySWXxLXXXltq2YknnhijR4+Op556Krp06bIhS6aaOe6441LNL/7555+XOby/ptPHILP0scorKCgo+eZjbT8WU3mzZ8+ODh06VGrbevXqxZlnnhlDhw6t4qqqF8ch0vjqq69i++23r9S2OTk58Ytf/CIefPDBKq4K6gbnQqw2f/782GOPPcq1blVde12bJEmif//+cdNNN8Utt9wSBx98cKr9VZVGjRrFxIkTo2vXrtGtW7d47rnnomnTplWy70WLFq0x7eKG8r///S823njj2GKLLWLFihXlmpXhgAMOiDlz5sTUqVNLTSm5fPnyWLJkSey8884RsWo2u5YtW8bFF18cw4YNi/z8/JgxY0YMHTo0HnvssYhYNZ3ksGHDSu7NFhExYMCAGD58eLnOn/v16xenn3567L777rHLLruUPN+2bdt47733omXLluV6H2bNmhV77bVXudatzgRulLLHHntUSejWsWPH+MMf/hBffPFFyTRtEyZMiKZNm8buu+9eoX3Vr1/fyUYdcMQRR8Suu+4ao0ePjueffz6OOOKIkmWrv4FRr169Um1hzJgxMXr06Nh1112jR48ea73pJnXHtttuG/n5+SXfsqmIjTbaKLbccsvIzc3NQGXVgz4GmaWPVY3GjRs772Ot0kwZlCRJtGjRota3Lcch0qhfv37Uq1evUvevyc/Pj2222abW9zHYEJwL1W0Vua98VV57/b7VYdvQoUPjlltuiQsuuKDS+8qEDh06ZCR0a9y4cdYCt+7du8eDDz4YrVu3ji222CK6du0an3zySZnbbLbZZvHkk09G//7949tvv43c3NwYNGhQfPLJJ3HkkUeWrJebmxtjx46Nyy67rCQM+/TTT+Pll1+Otm3bxsKFC2PSpElx7733ltr/KaecEl26dCl17991Oe644+K8886LX/3qV2s8/9xzz0XXrl0jImLSpElxxhlnxDfffBNJksRjjz0Wf/vb30rqHTduXAwaNGi9r1fd1d4ri1Ta6tDts88+iy5dusR///vfCu/jsMMOi9133z1OO+20ePPNN+O5556LgQMHxgUXXBANGjTIQNXUdPn5+XHLLbdEXl5enHTSSTFp0qQy1580aVKceOKJkZeXF3/9619dHCAOOeSQSoVtubm5cfDBB9fqsC1CH4NM08cgs7bYYotKXzwqLCyMQw45pIorqn4ch0ijXr160alTp0qdE69cubJO9DGA6iQT116re9i22urQbdasWdGtW7dqM+VlZdWrVy8effTReP/99+Pll1+OP/zhDzFjxozYYYcdYvHixSXrNWnSpNR94Pbff/948cUX46233ooZM2ZEz549Y9SoUWvcv23TTTeNu+66Kz788MOYOXNmHHvssXHppZfGsmXLYptttomlS5fGFltsUWqbtm3bxpdffhn169eP559/vtQ+H3vssTjzzDNLfp4xY0ZstdVWpb7sFRHxy1/+Mp577rkoKCiIiIguXbrEggUL4ptvvolvv/02FixYUBK2zZw5MwoLC+PAAw9M8U5WD7X76iKVljZ0y8vLi9GjR0deXl507NgxTj311Dj99NPXmL4Evq9Lly5x6623RkFBQXTr1i3OP//8ePfdd+OCCy6IqVOnxrnnnhszZ86MCy64ILp16xYFBQVx6623lnxTgrotTTvo3r17FVZSfeljkFn6GGTW4YcfXqlQaKONNor9998/AxVVP45DpFHZc+KcnJzo3LlzFVcDQFmq+tprTQnbVqttoVtVGTduXJnTsDds2DAefPDBGD9+fKn7slVW796945hjjolbbrlljS/tNGnSJIYOHRpz585d734+/vjjck2lWRPkJN+PReEH3n333ejcuXM0b968zOklDz744GjX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", + "image/png": "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DR482Fx55ZVm//797sfOf86JEydMxYoVTXp6upkwYUKm1/A/cuSIkeRexrBhw0znzp2NMcY8/fTTHjc4fOihh0z9+vVNUlKSSU1NNQ0bNjRff/21McaYF154wf3c5ORkExUVZXbu3GmMMaZZs2bmxx9/9FjvkiVLTPXq1U1YWJgpVarURd0jKkPGtSfzctPsxo0be1xfsmfPnqZFixYez0lKSjKSzMyZM7N8bYaMe0QxMTExMTExMTExMTExMTExMTExMTExFabJ1z2i/H0cPjuPPvqokWT+/PPPXL82P8n1pfmWLl2qqlWrqlGjRpLOfZOhdOnSmT63TZs2Hmnh+WbNmqVWrVrl6Bsh4eHhks5dlq979+6SpO7du+vLL7/0OC39zjvvVEREhFwul+rXr68//vhDktSnTx99+eWXOnPmjL7//nvVr19f5cuXlyTt2bPHq8aGDRsqISFBu3fvzjIFzo369eurbNmyeuedd/TXX3/5ZZkAAAAAAAAAACD/+e233zRhwgTddtttioqKsrqcgMrTpflyqlixYj7nTZ482R0q1a5dW9u2bdPhw4c9LouxdOlS3XjjjSpRooTWrl2r9evXq2fPnu7w6tChQ5o1a5batWsnSSpatKj7tS6Xy31jtauvvlq33XabJkyYoM8++0yvvvqq+3kRERE+T8e7/PLLFRYWlsff3tM///yjkydPKiUlRU2aNNHChQt1zTXX5GlZUVFRXje7PHDggHtebmzYsIFTbguAQYMG6aOPPtLYsWPVpEkTd0B76tQp9+WIevTooRdffNH9GpfLpQULFqhbt27q37+/Xn/9db/X9e677+r111/P9DrmISEhevLJJ/Xaa6/5fb1AfvX333+ratWqPudfeuml2rVrVxArst7DDz+syZMn+7wfwqhRo3Tffff5fb2+xlVJeuWVVzRmzBhJ5y7FknFZgmCMq/DWsmXLLG+sPG3aNDVr1iyIFcFuoqOjtX37dp/zly1bpurVqwexImuNGzdOjz/+eKbzXC6XOnXqpFGjRgVk3XbdZ4V90Eey1qhRI61Zs8bn/Llz5yomJiaIFUGS9u/f775tRGZKlSqlPXv2BLEi6z366KOaOHGiz334ESNGqGvXrn5fL/vwWUtPT1eZMmV0+vRpn8/5+++/VbJkySBWBTs5efKkrrzySp/zw8LC9M8//8jlcgWxKv+bNm2aunTpkqPn+vM4/IV+++03tWzZUnXq1NHMmTPdJ+MUVLkOoho2bKht27Zp0aJFatSokdLT03Xs2DGVKFFCx48fz9Eyzp49q6VLl+qrr76SJFWuXFnt27dXr169NHbsWEVERGjnzp0aMGCA3n//fUnnzoZ65pln9NZbb7mX89lnnykuLs4dRGWlX79+6tSpk4oVK+ZxHdqaNWtqy5Yt7jO8Nm/erCpVqsjpdOrkyZM6c+ZMjtvGlzVr1qh58+aqXLmyRo8erTvuuOOiwqiYmBi98cYb+ueff3TFFVdIOrfDWaJEiVzfAyEiIsJ9Xy7kX61bt9ZHH32kiRMn6oEHHnA/fv51j0uUKOE+EzDDpEmT3K8PRD9o0KCBzx3P1NRU3XzzzfQ/4DyVK1fWJZdcoqNHj3rNczgcuummmwrdNlO/fn398MMPPufHxMQEpE18jauS5/0kr7nmGo/1B3pchbcGDRooPj7e51nsgeojyD9iYmK0c+dO95fUzhcaGqo6depkeUP1giarg9TGGNWvXz9g24xd91lhH/SRrDVo0EAbNmzweQ/eBg0aFOjf364qVaqkyy67TIcOHfKaV5j34b///nuf89mHt050dLSWLl2a6bxrrrlGV111VZArgp1ERkaqQoUK2rlzZ6bza9WqpRIlSgS3qAA4/2SW7PjzOPz5LgyhCvrYI0m5vjTfJZdcosmTJ+v5559XzZo1VadOHS1ZskRPPfWUevbsqejoaK1duzbLZcyfP1+33nqrxx98X331lSpVqqQaNWqocuXKuu666/Tuu++qZcuWSk5O1vjx472+LXHvvfdqzpw57hQyKw0aNFDJkiXVp08fj8sB3nPPPfrpp5/cP0+YMEHVq1dXrVq1FBMToyJFiuSwZTKXEUJVrFhRc+fOVY0aNbRw4UJJUpMmTfJ0mb4WLVqoWrVqevDBB7Vu3Tr99NNPevHFF9W3b1+/ncGF/CU2NlbXX3+9pk6dqhkzZuToNTNnztTUqVN1/fXXB+yb4nXq1Mly/sXc0A8oiBwOh+rVq5fpZWtdLpfq1q1rQVXWqlOnjtLT0zOdFxYWluUZZBfDruMqvNWpU8dnCBUVFaXLLrssyBXBbrIaR2688cZCFUJJ0g033ODzd05PTw/o/hljK7JDH8laVp951157bZZXpUFg3XTTTXI6vQ+xsQ/vrUiRIrr++usDsl7GkOzddNNNCgnxPi8h4zYnwM0335zpGU8hISG66aabLKjIWoE4Dl8YQyhJkhU3pnrsscfM999/73N+Wlqaee6550x0dHSmNw3Liz179pioqChz4sQJr3XVrVvX7N69O9PXlStXzrz00kt5Wufq1atN6dKlTb169czRo0c95u3atctce+215tprrzW7du3KcjmZ3ehs586dpnXr1iY8PNxcdtll5plnnjEpKSk5eq0xxsybN69Q3AStMPn555+Ny+UyxYsXNz///LMxxpjExET3Dfj+85//eDy3ePHixuVymblz5wa0rpiYGONyuTxuBuhwOMz1119v0tPTA7puID8aOXKkzxtprl692urygi45OdlccsklXm0REhJi7r///oCuO7Nx1RhjnnrqKXcdiYmJ7ucGa1yFpyNHjpiwsDCvPuJyuUz//v2tLg82sGPHDuNwOLz6iNPpNP/73/+sLs8SnTp1MiEhIV5tcumll5ozZ84EdN123WeFfdBHfNu3b1+m267L5TIvvPCC1eUVanFxcT734VesWGF1eUF35swZc+mll2a6D3/vvfcGdN3sw2ftl19+8dlXv/32W6vLgw189913PvvI/PnzrS7PL3744QcjKdPcIRDH4c+3ZMkSU6xYMXPbbbe5x6LCwpIgKtj+7//+z1x99dXmiy++yHT+ypUrzaJFizKdl9cgKqsQKkNOw6icdOLcvpYgqmAaPny4cTqdxuVymd69e5v4+Hj3h8Xvv/9ufv/9d9OnTx/jcrmM0+k0w4cPD3hN06dPz/TDa+zYsQFfN5AfnTp1ypQpU8Y4nU6PgwuxsbFWl2aZN9980+sgssPhMGvWrAn4ui8cVzds2GA2bNjgcWAh2OMqvPXv39/rSw8hISFm586dVpcGm7jvvvs8+ojD4TDFixf325fe8puVK1d67Zs5HA7zzjvvBGX9dtxnhb3QR3zr2bOn13hWtGhRs3fvXqtLK9ROnz5trrzySq99+MaNG1tdmmXeeeedTL8IsmrVqoCvm31439LT0039+vU9xhGn02kqVKhgzp49a3V5sIGzZ8+aihUreo1ndevWLTBfKM9tEJVT2b22MIdQxhSSIOpi5CWIykkIlSEnYVTjxo1NaGioiYyMNOvXr89RDePGjTORkZHG6XQSRBUy06dPN2XKlPHa2StVqpT7/2XKlDHTp08P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7Qu6du2qLVu26OzZsypXrpzi4uKUnJys6Oho9evXT9OnT9fx48c1dOhQtWnTRpK0dOlSPffcczp58qSMMXrttdd0xx13SJKmTZumuXPnat68edq1a5cWLFigkJBzZUVHR+vFF1/Ua6+95l7Wli1btGPHDq1YsULVqlXTiRMnVKJECUlSkyZNVK9ePS1fvlx79+7V7bffruHDh2vv3r2qXbu2duzYoYiICElSly5d1KhRI/Xu3VsjRoxQly5d3L9jbGys+//lypVTVFSUdu/erUqVKkmS7r33Xo0aNUpvv/12pm2UlJSU22bNVmpq6kUvIyOM6tSpkzp27KgpU6aoVatWfqgOAAAAAAAAAJAhECFUenp6QI49X+j8dQRjfXYUGRnpc96Fecfdd9+tvXv3qnPnzgoPD9cXX3yhKVOmKCEhQYmJidq9e7fmzp3rtZwpU6Zo8ODB2rZtm6ZMmaLdu3e711uhQgW9//776tGjh3r37i1JOnbsmGbMmKFNmzapZs2a2r59u6677jpJ54KssLAwbd++Xbt371b16tX17bffKj09XRUqVNCKFStUrlw5SdILL7ygtLQ0vf322xo9erTuvvtuORwOSVLx4sXd9SUnJ+vMmTPueVL22YhPJpf++ecf9///97//mccee8zs2LHDSDITJ040xhgza9YsU6VKFWOMMYcPHzZXXHGF+fXXX40xxqSlpZnDhw8bY4zZunWradiwoTHGmLffftt06NDBa32rV682RYsWdf/83HPPmQEDBhhjjLnzzjvNiBEj3PMaN25sOnbsaFJSUsypU6dMhQoVzG+//WaMMaZLly7u5+7fv99cfvnl5uTJk8YYYypWrGgSEhIy/X3nzp1rrrrqKpOYmOh+7JdffjF169b12UaSAjI1adLE5zpzIzk52bRv396EhYWZxYsX+2WZsKfExER3/zm/Dxf2WoD8gG3Gk53aw0614F+8L8gOfcSbXdrELnXAvugjnmgP++K98WSn9rBTLXZAewTetm3bzCWXXGJuuukmc/ToUb8ss0ePHiYkJCRgx56ZPCdffOUd5cuXN2vWrHE/b/DgwebKK680+/fvdz92/nNOnDhhKlasaNLT082ECRNMzZo1vdZ15MgRI8m9jGHDhpnOnTsbY4x5+umnzcCBA93Pfeihh0z9+vVNUlKSSU1NNQ0bNjRff/21McaY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SerevbvX5fk6d+6skJAQhYeHKzo62l1Hv379NGzYMEnS559/rvvvv1/FihWTJO3Zs8fjjLwMCQkJeuSRRzRhwgRFRka6H4+KitKePXuyb6zzFPhL8w0aNEgrVqxQ+/btNWPGDDVt2jTPy4qKilJ8fLzHYwcOHHDPy6nSpUu7O8DFSEpKcneQAwcOeHSGQBg0aJA++ugjjR07Vk2aNPG42eMbb7yhzz//XL1799aAAQPcj7tcLi1YsEDdunVT//799frrrwe0RpzTpEkTrVy50uf84cOH64EHHghiRfRXZI3+4S3YbUIdWfvf//6nt99+O9MbpjudTt1111364osvglpTsNl9u2EcsS+rt1/qsGctK1euVJMmTXzOL168uPbt2xe0eqzAOJK1mTNn6t577/U5v0KFCoX2YJqdxhG7sEubUIe96njnnXf05ptv+tyHv+OOOzR27Nig1mQXVr83dhSINsk4yJ8dfx1z9uW7777TQw89pK5du6pXr14Xvbz87o033tCaNWvUokULzZkzRzfffHOOX7t48WINHTpUS5cu1RVXXKFp06bppZdeknQu8MsItlwul8e+nS9TpkzRl19+KUmqU6eOhg4dqpSUFIWGhrqfs3TpUjVs2FCSNH36dB07dkwtW7aUJBljtHfvXm3YsEHVq1eXdC4Qy+ByudxjYP369RUREaEFCxZo5MiR+vnnn93Pi4iIUHJyskdtGzduVLt27TR69GjdeuutHvOSk5Pd4VhOFfggqmjRopoyZYo6duyotm3bXlQYFRMTozfeeEP//POPrrjiCknS3LlzVaJECVWrVi3Hy3E4HH4f4CMjIwP+odG6dWt99NFHmjhxoleIkXEdyhIlSqh8+fIe8yZNmuR+PR9swVGzZk2tXbs2050tSapVq5al7wX9FVmhf3gLRptQR9Zq1qzpc0x1Op2qXr26LdomkPLTdsM4Yl+FeRyxcx1S8GupVatWlvOvv/5627RNoDCOZC06OtrnPKfTqZo1axbo3z+n7DSO2IVd2oQ6rK+DfficsUsfsZNgt4m/jjln5rvvvlOXLl1033336csvv5TL5fJHyfla8eLFNXPmTLVp0ybXYdTRo0dVvHhxXXrppTp79qxGjBiR7WsaNmyobdu2adGiRWrUqJHS09N17NgxnTlzRomJiapcubIkqVmzZipXrpyefvppffjh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+9Ld/v37NWfOnICu265tAgAoGAJ53JkwCnZUaIKovFyOLyIiQlFRUQoJCXE/1r17d3Xu3DnT52dcJzo8PNxvdSNzqamp6tu3r9LS0jR+/Hg1b948y+c3b95c33zzjdLS0vTkk08qNTU1SJVaY9myZV5/sEnn/mjbsmUL3zANIvoqAABA5hYvXux1NpQkhYSEaPny5RZUVDjZdX81LS1NK1asyPTLdYHuI3ZtEwBAwRHo486EUbCbQhFE+eueUEOHDlXfvn1VsWJFP1eI3Jo3b542b96s9u3bq3379jl6Tbt27dS+fXtt3rxZ8+fPD3CF1lq9enWmQZR0Loxat25dkCsqvOirAAAA3g4fPqy9e/dmOi8lJUXx8fFBrqjwsuv+6tatW5WcnJzpvLS0NK1atSog65Xs2yYAgIIrEMedCaNgJyHZPyV/81cI5W9JSUl+XYY/lpefzJo1S5LUqVMnr98941rhKSkpXvPuuece/fjjj5o5c6ZuueWW4BRrgQ0bNmT5LbyEhATVrl07iBUV3v5KX82Zwto/smKXNqEO5Bf0Efuyy3tDHd6srCUhISHL+Vu3brW8fQoLu+6vZtVHjDHasGFDwPqIXdskg53GEbuwS5tQhz3rgDfeG2/+bhO7tGtGGNWqVSu1bdtWM2bMULFixawuC4WRKeB69eplQkJCTEJCQq5e17hxY9OvX79M5w0ePNjUqlXL52sfeughc8cdd2Q6b+jQocbpdBpJTExMTExMTExMTExMTExMTExMTExMBXSaOHFi0I47Z2X+/PlGknn55Zdz9PzExET375CYmJjr9fkLdRQcBf7SfC1atFB6errefffdTK8/DgAAAAAAAABAQZScnKx3331XRYsWVZMmTawuB4VUgb803913363x48era9eukqTRo0fL5XJZWlORIkV06NChi15OUlKSypQpI0k6cOCAIiMjL3qZ+cWgQYP00UcfaezYsWrSpIlHyPjGG2/o888/V+/evTVgwAD34y6XSwsWLFC3bt3Uv39/vf7661aUHhQdO3bUvHnzZIzJdP748eN1xx13BLWmwtpf6as5U1j7R1bs0ibUgfyCPmJfdnlvqMNetWzdulV16tTxOf/KK6/Utm3bglZPYWbX/dXFixerVatWPufXqlVLS5Ys8ft6Jfu2SQY7jSN2YZc2oQ571gFvvDfe/N0mx44d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", "text/plain": [ "
" ] @@ -744,10 +777,10 @@ "\n", "\n", "cbloq = UnaryIteration()\n", - "cbloq.ctrl_bitsize = 2\n", + "cbloq.ctrl_bitsize = 3\n", "cbloq.sys_bitsize = 1\n", "ops = dict()\n", - "for ix in range(4):\n", + "for ix in range(8):\n", " ops[ix] = CZPowGate(exponent=float(ix))\n", "cbloq.set_ops(ops)\n", "msd = get_musical_score_data(cbloq.decompose_bloq())\n", @@ -756,6 +789,63 @@ "fig.set_figheight(7)\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "bad83ba8", + "metadata": {}, + "outputs": [], + "source": [ + "class RecursiveUnaryIteration(Bloq):\n", + " ctrl_bitsize: int\n", + " state = []\n", + " sys_bitsize: int\n", + " ops: Dict[int, Bloq]\n", + " ctrl_inversions: List[bool] = None\n", + "\n", + " def set_ops(self, ops):\n", + " self.ops = ops\n", + "\n", + " @property\n", + " def signature(self) -> Signature:\n", + " return Signature([Register('ctrl', QAny(self.ctrl_bitsize)), Register('anc', QAny(self.ctrl_bitsize - 1)), Register('sys', QAny(self.sys_bitsize))])\n", + " \n", + " def select(self, query: List[bool], bb, ancs, ctrls):\n", + " assert len(self.state) <= len(query)\n", + " first_diff_ix = None\n", + " for ix in range(len(self.state)):\n", + " if query[ix] != self.state[ix]:\n", + " first_diff_ix = ix\n", + " break\n", + "\n", + " if first_diff_ix is None:\n", + " # The state is a prefix of the query\n", + " if len(self.state) == len(query):\n", + " return\n", + " else:\n", + " # Need to compute\n", + " if len(self.state) == 0:\n", + " [ctrls[0], ctrls[1]] = bb.add(And(not query[0], not query[1]), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", + " self.state.append(query[0])\n", + " self.state.appens(query[1])\n", + " self.select(query, bb, ancs, ctrls)\n", + " else:\n", + " [ctrls[first_diff_ix], ancs[first_diff_ix - 2]] = bb.add(And(not query[first_diff_ix], True), ctrl=[ctrls[first_diff_ix], ancs[first_diff_ix - 2]], target=ancs[first_diff_ix - 1])\n", + " else:\n", + " # We still need to uncompute\n", + " if len(self.state) == 2 and first_diff_ix == 1:\n", + " # The base case, we need to completely fix our regs\n", + " pass\n", + "\n", + " if first_diff_ix < len(self.state) - 1:\n", + " # We have to uncompute the state until it is the last bit\n", + " pass\n", + " elif first_diff_ix == len(self.state) - 1:\n", + " # We can flip using CNOT\n", + " if first_diff_ix == 1:\n", + " pass" + ] + }, { "cell_type": "code", "execution_count": 24, From ac43367ab07c9cd09af7df72bac468fe6b2d0898 Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Sat, 10 Aug 2024 14:43:57 -0400 Subject: [PATCH 09/13] recursive works, there are some stateful bugs in the jupyter though --- .../bloqs/multiplexers/unary_iteration.ipynb | 220 ++++++++++++++++-- 1 file changed, 200 insertions(+), 20 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 9de76c23c0..3e473e084c 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 1, "id": "756a61d0", "metadata": {}, "outputs": [], @@ -600,7 +600,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 2, "id": "5605cc96", "metadata": {}, "outputs": [], @@ -716,7 +716,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 3, "id": "9086b08f", "metadata": {}, "outputs": [ @@ -791,11 +791,15 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "bad83ba8", "metadata": {}, "outputs": [], "source": [ + "from typing import Dict, List\n", + "from qualtran import BloqBuilder, Register\n", + "from qualtran._infra.composite_bloq import SoquetT\n", + "from numpy import ndarray\n", "class RecursiveUnaryIteration(Bloq):\n", " ctrl_bitsize: int\n", " state = []\n", @@ -811,6 +815,9 @@ " return Signature([Register('ctrl', QAny(self.ctrl_bitsize)), Register('anc', QAny(self.ctrl_bitsize - 1)), Register('sys', QAny(self.sys_bitsize))])\n", " \n", " def select(self, query: List[bool], bb, ancs, ctrls):\n", + " print(\"calling select.\")\n", + " print(\"query: \", query)\n", + " print(\"state: \", self.state)\n", " assert len(self.state) <= len(query)\n", " first_diff_ix = None\n", " for ix in range(len(self.state)):\n", @@ -819,31 +826,204 @@ " break\n", "\n", " if first_diff_ix is None:\n", - " # The state is a prefix of the query\n", + " # COMPUTE\n", + " # The state is a prefix of the query, [] is always a prefix\n", " if len(self.state) == len(query):\n", + " print(\"Done!\")\n", " return\n", " else:\n", " # Need to compute\n", " if len(self.state) == 0:\n", - " [ctrls[0], ctrls[1]] = bb.add(And(not query[0], not query[1]), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", + " if query[0] is False:\n", + " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + " if query[1] is False:\n", + " ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + " [ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", + " print(\"compute ctrls[0] * ctrls[1] -> ancs[0]\")\n", + " if query[0] is False:\n", + " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + " if query[1] is False:\n", + " ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + " # [ctrls[0], ctrls[1]], ancs[0] = bb.add(And(not query[0], not query[1]), ctrl=[ctrls[0], ctrls[1]])\n", + " print(\"appending: \", query[0], \", \", query[1])\n", " self.state.append(query[0])\n", - " self.state.appens(query[1])\n", + " self.state.append(query[1])\n", " self.select(query, bb, ancs, ctrls)\n", " else:\n", - " [ctrls[first_diff_ix], ancs[first_diff_ix - 2]] = bb.add(And(not query[first_diff_ix], True), ctrl=[ctrls[first_diff_ix], ancs[first_diff_ix - 2]], target=ancs[first_diff_ix - 1])\n", + " # [ctrls[len(self.state) - 1], ancs[len(self.state) - 2]], ancs[len(self.state) - 1] = bb.add(And(not query[len(self.state) - 1], True), ctrl=[ctrls[len(self.state) - 1], ancs[len(self.state) - 2]])\n", + " q_ix = len(self.state)\n", + " if query[q_ix] is False:\n", + " ctrls[q_ix] = bb.add(XGate(), q=ctrls[q_ix])\n", + " print(f\"compute ctrls[{q_ix}] * ancs[{q_ix - 2}] -> ancs[{q_ix - 1}]\")\n", + " [ctrls[q_ix], ancs[q_ix - 2]], ancs[q_ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[q_ix], ancs[q_ix - 2]], target=ancs[q_ix - 1])\n", + " if query[q_ix] is False:\n", + " ctrls[q_ix] = bb.add(XGate(), q=ctrls[q_ix])\n", + " print(\"appending: \", query[q_ix])\n", + " self.state.append(query[q_ix])\n", + " self.select(query, bb, ancs, ctrls)\n", + " self.select(query, bb, ancs, ctrls)\n", " else:\n", - " # We still need to uncompute\n", - " if len(self.state) == 2 and first_diff_ix == 1:\n", - " # The base case, we need to completely fix our regs\n", - " pass\n", - "\n", - " if first_diff_ix < len(self.state) - 1:\n", - " # We have to uncompute the state until it is the last bit\n", - " pass\n", - " elif first_diff_ix == len(self.state) - 1:\n", - " # We can flip using CNOT\n", - " if first_diff_ix == 1:\n", - " pass" + " # UNCOMPUTE\n", + " if first_diff_ix == len(self.state) - 1:\n", + " # We can CNOT our way to flipping the last one.\n", + " if first_diff_ix == 1:\n", + " print(\"cnot ctrls[0], ancs[0]\")\n", + " if self.state[0] is False:\n", + " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + " ctrls[0], ancs[0] = bb.add(CNOT(), ctrl=ctrls[0], target=ancs[0])\n", + " if self.state[0] is False:\n", + " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + " else:\n", + " print(f\"CNOT ancs[{first_diff_ix - 2}] -> ancs[{first_diff_ix -1}]\")\n", + " ancs[first_diff_ix - 2], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ancs[first_diff_ix - 2], target = ancs[first_diff_ix - 1])\n", + " self.state[first_diff_ix] = not self.state[first_diff_ix]\n", + " else:\n", + " # We need to uncompute first\n", + " if len(self.state) == 2:\n", + " # undo the entire thing\n", + " # [ctrls[0], ctrls[1]] = bb.add(And(not self.state[0], not self.state[1], uncompute=True), ctrl=[ctrls[0], ctrls[1]] ,target=ancs[0])\n", + " if self.state[0] is False:\n", + " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + " if self.state[1] is False:\n", + " ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + " print(\"uncompute ctrls[0] * ctrls[1] -> ancs[0]\")\n", + " [ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", + " if self.state[0] is False:\n", + " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", + " if self.state[1] is False:\n", + " ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", + " self.state.pop()\n", + " self.state.pop()\n", + " elif len(self.state) > 2:\n", + " q_ix = len(self.state) - 1\n", + " if self.state[q_ix] is False:\n", + " ctrls[q_ix] = bb.add(XGate(), q=ctrls[q_ix])\n", + " print(f\"uncompute ctrls[{q_ix}] * ancs[{q_ix - 2}] -> ancs[{q_ix - 1}]\")\n", + " [ctrls[q_ix], ancs[q_ix - 2]], ancs[q_ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[q_ix], ancs[q_ix - 2]], target=ancs[q_ix - 1])\n", + " if self.state[q_ix] is False:\n", + " ctrls[q_ix] = bb.add(XGate(), q=ctrls[q_ix])\n", + " # [ctrls[len(self.state) - 1], ancs[len(self.state) - 3]] = bb.add(And(self.state[not len(self.state) - 1], True, uncompute=True), ctrl = [ctrls[len(self.state) - 1], ancs[len(self.state) - 3]], target = ancs[len(self.state) - 2])\n", + " self.state.pop()\n", + " else:\n", + " raise Exception(\"Should not have a length 1 or 0 state here.\")\n", + " self.select(query, bb, ancs, ctrls)\n", + " return\n", + " \n", + " def build_composite_bloq(self, bb: BloqBuilder, ctrl: SoquetT, anc: SoquetT, sys: SoquetT) -> Dict[str, 'SoquetT']:\n", + " queries = list(self.ops.keys())\n", + " queries.sort()\n", + " ctrls = bb.split(ctrl)\n", + " ancs = bb.split(anc)\n", + " for q_int in queries:\n", + " q_bools = int_to_bool_list(q_int, self.ctrl_bitsize)\n", + " self.select(q_bools, bb, ancs, ctrls)\n", + " print(f\"calling ops[{q_int}]\")\n", + " [ancs[-1], sys] = bb.add(self.ops[q_int], q=[ancs[-1], sys])\n", + " ctrl = bb.join(ctrls)\n", + " anc = bb.join(ancs)\n", + " return {'ctrl': ctrl, 'sys': sys, 'anc': anc}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "95862261", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "calling select.\n", + "query: [False, False, False]\n", + "state: []\n", + "compute ctrls[0] * ctrls[1] -> ancs[0]\n", + "appending: False , False\n", + "calling select.\n", + "query: [False, False, False]\n", + "state: [False, False]\n", + "compute ctrls[2] * ancs[0] -> ancs[1]\n", + "appending: False\n", + "calling select.\n", + "query: [False, False, False]\n", + "state: [False, False, False]\n", + "Done!\n", + "calling select.\n", + "query: [False, False, False]\n", + "state: [False, False, False]\n", + "Done!\n", + "calling select.\n", + "query: [False, False, False]\n", + "state: [False, False, False]\n", + "Done!\n", + "calling ops[0]\n", + "calling select.\n", + "query: [False, False, True]\n", + "state: [False, False, False]\n", + "CNOT ancs[0] -> ancs[1]\n", + "calling select.\n", + "query: [False, False, True]\n", + "state: [False, False, True]\n", + "Done!\n", + "calling ops[1]\n", + "calling select.\n", + "query: [False, True, False]\n", + "state: [False, False, True]\n", + "uncompute ctrls[2] * ancs[0] -> ancs[1]\n", + "calling select.\n", + "query: [False, True, False]\n", + "state: [False, False]\n", + "cnot ctrls[0], ancs[0]\n", + "calling select.\n", + "query: [False, True, False]\n", + "state: [False, True]\n", + "compute ctrls[2] * ancs[0] -> ancs[1]\n", + "appending: False\n", + "calling select.\n", + "query: [False, True, False]\n", + "state: [False, True, False]\n", + "Done!\n", + "calling select.\n", + "query: [False, True, False]\n", + "state: [False, True, False]\n", + "Done!\n", + "calling ops[2]\n", + "calling select.\n", + "query: [False, True, True]\n", + "state: [False, True, False]\n", + "CNOT ancs[0] -> ancs[1]\n", + "calling select.\n", + "query: [False, True, True]\n", + "state: [False, True, True]\n", + "Done!\n", + "calling ops[3]\n" + ] + }, + { + "data": { + "image/png": "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1eNvYGCg6tWrd9u36oP3ufN6MD3K/JC30zpkv6z2LMsJPcr+ztUeZg0aNDC5cuUyISEhZseOHS6te+bMmSYkJMQEBATQswzI4aKjo03RokVv+Y38lP8XLVrUREdHe7tUIFOSk5NNu3bt0v0Ws81mM7ly5TK//PKLt8sF4IJTp06Zu+66K939OjAw0FSsWNFcuXLF2+XiNuzYscPkzp073d6EdrvdtGrVyiQnJ3u7XLfhvAz+7OOPP3ap98mUKVO8XSoAFzgcDvPwww9n+PdWcHCw2bdvn7fLRRrS61nm7uvBKehR5p9sxrjwdWX4la1bt6p27dratm2bwsPDXVomp/Qou5WrV6+qc+fOiomJ0aJFi9S8efOb5vnjjz905coVSdI//vEPl3rtXbp0yfmcugIFCuiuu+5KNX369Onq1auXHA6HAgL8upMm4BPi4+M1bdo0LViwQN9//70kqXDhwqpatarat2+vXr168SBe+KRLly6pQYMG2rZt203TUr4BN3PmTHXt2jW7SwOQRZs3b1ajRo105cqVm55hFhAQoCJFimjjxo0qVaqUdwqE28ybN09PPPGEjDFKSkq6aXrVqlW1fv165c+f3wvVeQ7nZfBXxhj17dtXU6dOld1uT/UZnvLzkCFDNGbMGC9WCSAzzp49q7p162r//v033dUjMDBQAQEBWrBggVq1auWlCpGRli1bKiQkRHPnzk013hPXg1PWS48y/0RYZkGZDctyclCWwpXAzN0Iy4CcKT4+XqGhoZKkuLg4LsTALyQlJSkqKkqvvfaazp075xzfqVMnffjhh5ycAz7ozz//1IgRIzRhwgTnxdagoCC99tprevnllzl++ZFDhw7p1Vdf1bfffuscV7BgQb3//vvq3bu3cuXK5cXqPIvzMvirmJgYDRw4UHv37nWOq169usaNG6cGDRp4sTIAWZGYmKgJEyZo+PDhunTpknN89+7d9a9//UvFixf3YnXISFphmScQlPk3wjILykxY5gtBWYrsDswIy4CciYsy8GenTp1SWFiYJOnXX39V5cqVvVwRgNt18OBBlS1bVpJ05MgR/eMf//ByRfCUXbt2OT+3T548qaJFi3q5Is/jvAz+7OLFi85eoT///LNq167NtQHAx504cUL33HOPJGnPnj2qUKGClyuCK7IrLCMo839Ze3od/MKWLVt04cIFSVK+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t2+fatyaNWuMJPPXX3+5vC2e4q/7tbvbiz/w1/c6PVbcZlgH7TvnyAnnKH/ncDhMiRIlzKeffprmPJyj5Dw5cZtzYvv+5ZdfTNGiRc3UqVPTnIf2DV/EbRgBAAAAZOjAgQMyxqhixYouzX/69Gk9+uij6tSpk15++WXn+ISEBA0fPlzjxo1Tw4YN9eCDD6pJkybatGlTutOk689qKFq0aKrXKVq0qC5evKgrV67cso60lkmZBs9wV3sBACAjOeEc5e9Gjx6tuLg4denSJc06OEeBK3JS+y5evLiCgoJUu3ZtDRgwQL17906zDto3fBFhGQAAAIAMmRueYZCRa9euqXPnzipatKimTp2aatrly5dVtGhRLV++XMWLF9dzzz2n6dOna9++felOg29xV3sBACAjOe0c5euvv9Y///lPffvttypSpMhtbx+sLSe17/Xr12vLli2aNGmSxo4dq2+++cYt2wjkFDyzDAAAAECGypUrJ5vNpj179mQ476BBg7R//35t3rxZefLkSTWtUKFCGjBgQKpxZcqUUZkyZSQp3WlhYWE6depUqumnTp1Svnz5lDdv3lvWktYyKdPgGe5qLwAAZCQnnKOkmD17tnr37q1///vfatKkSbq1cI4CV+Sk9n3vvfdKkqpWrapTp07pnXfe0RNPPHHLWmjf8EX0LAMAAACQoUKFCql58+aKjIxUfHz8TdPPnz8vSZoyZYqmT5+uefPmqXjx4umu84svvlCpUqVcnhYREaHVq1enGhcTE6OIiIg0XyMiIkI//PCDrl27lmqZChUqqGDBgunWh6zzRHsBAOBWcsI5iiR98803euaZZ/TNN9+odevWGdbNOQpckVPa998lJyfr6tWraU6nfcMXEZYBAAAAcElkZKQcDofq1KmjefPmaf/+/dq9e7fGjx+viIgIbdiwQQMHDtTw4cNVunRpnTx5MtVw4cKF23r95557Tr///rteeeUV7dmzRxMmTNC3336rF154wTnPZ599psaNGzt/7tatm3Lnzq1evXrpt99+05w5czRu3Di9+OKLt1ULMubt9gIAsA5vH3O+/vprPf300/r444/1wAMP3HK9nKMgq7zdviMjI/Xdd99p//792r9/v6KiojR69Gg99dRTznlo3/ALBvj/4uLijCQjycTFxXm7nGxhxW0G/B37NfwZ7Rs5wfHjx82AAQNMyZIlTe7cuU2xYsVMu3btzNq1a02PHj2cbfRWw//93//d9uuvXbvWhIeHm9y5c5vSpUubzz//PNX0t99+25QsWTLVuO3bt5uHHnrIBAUFmWLFipmRI0fedh3u4u/7tbfbS07i7+/1rVhxm2EdtO+cx5vHnAYNGmS4Xs5Rcr6cvM3ebN/jx483lStXNsHBwSZfvnymRo0aZsKECcbhcDjnoX3DH9iMycRTAuHX4uPjFRoaKkmKi4tTSEiIlyvyPCtuM+Dv2K/hz2jfgP9hv7YOK77XVtxmWAftG/7Oim3cittsVbzXuBVuwwgAAAAAAAAAAADLIiwDAAAAAAAAAACAZRGWAQAAAAAAAAAAwLIIywAAAAAAAAAAAGBZhGUAAAAAAAAAAACwLMIyAAAAAAAAAAAAWBZhGQAAAAAAAAAAACyLsAwAAAAAAAAAAACWRVgGAAAAAAAAAAAAyyIsAwAAAAAAAAAAgGURlgEAAAAAAAAAAMCyCMsAAAAAAAAAAABgWYRlAAAAAAAAAAAAsCzCMgAAAAAAAAAAAFgWYRkAAAAAAAAAAAAsi7AMAAAAAAAAAAAAlkVYBgAAAAAAAAAAAMsiLAMAAAAAAAAAAIBlEZYBAAAAAAAAAADAsgjLAAAAAAAAAAAAYFmEZQAAAAAAAAAAALAswjIAAAAAAAAAAABYFmEZAAAAAAAAAAAALIuwDAAAAAAAAAAAAJZFWAYAAAAAAAAAAADLIiwDAAAAAAAAAACAZRGWAQAAAAAAAAAAwLIIywAAAAB4VXx8vEaMGKFSpUopf/78KlWqlN5++23FxcV5uzS42ZkzZzRw4EAVL15c+fPnV/ny5RUZGalr1655uzQAAG5y6tQpPffccypWrJgKFCigihUrasqUKUpKSvJ2acBtu3r1qj755BOVKVNG+fPnV4kSJfTSSy/p3Llz3i4N8ArCMgAAAABes3TpUpUuXVr//Oc/deTIEV28eFFHjhzRe++9p9KlS+u7777zdolwk6lTp+ree+/VxIkT9ccff+jixYvav3+/nn/+eVWqVEmbN2/2dokAADhFRkbq3nvv1bRp03T8+HFduHBB+/btU9++fVWlShXFxsZ6u0Qgy3788UeVL19eL7/8sn7//XddvHhRx44d09ixY3Xvvfdq5syZ3i4RyHaEZQAAAAC8YsuWLXr00Ud15swZJScnp5qWnJysP//8U506ddLPP//spQrhLvPmzdOzzz6r+Ph4ORyOm6b//vvvatGihY4cOeKF6gAASO3rr7/W888/rytXrqQ6bhljJEkHDhxQs2bNdPz4cW+VCGTZvn371KpVKx07dszZplMkJyfrwoULevrpp7Vs2TIvVQh4B2EZAAAAgGyXkJCgxx9/XA6H46Y/0lMYY5ScnKzHH39cV65cyeYK4S4nT57UM888I5vNluY8ycnJunjxonr06JFmewAAIDscPXpUffr0SXceh8Ohc+fOqXfv3hy34FMcDoeeeuopXb58+aYvq/1d9+7d9ddff2VTZYD3EZYBAAAAyHazZs3S77//fsteRjdyOBw6cuSIvvzyy2yqDO72ySef6MqVKxleTExKStK6deu0bt267CkMAIBb+Oijj5SYmJjhfElJSVq2bJn+85//ZENVgHssXbpUmzdvzvAc3Bij8+fP67PPPsumygDvs0RYtmXLFrVs2VKSdOHCBfXt21elS5dWhQoVVKtWLS1atOimZT7//HPZbDatX7/ebXU89thj2rhxoyRpyZIlqlWrloKCgjRkyJBU83322Wf617/+5bbXBQAAAHKa+fPnKyDAtT9HbDabFixY4OGK4AnGGM2dO1dJSUkuzR8YGHjLv88AAMgOWTluLV682MNVAe6zcOFCBQYGujSvw+HQvHnzPFwRsorMw/0sEZYtWLBAHTp0kDFGrVq1Uq5cubRv3z7t3btXUVFR6tevn5YuXZpqmaioKDVu3FhRUVFuqWHTpk3666+/FBERIUkqV66cpk+frqFDh94077PPPquoqChduHDBLa8NAAAA5CTx8fFatWpVht9oTZGcnKw1a9bo0qVLHq4M7rZ3714dOnTI5fmTkpI0f/58bmkFAPCK7du368SJEy7Pn3LcAnyBw+HQggULXA6DJWnHjh06duyYB6tCVpF5uJ9rMbIXXLlyRT169NDOnTuVK1cuFS1aVLlz51a3bt3UrVs3SdLKlSv11ltv6eeff9a0adP0ySefKHfu3HI4HJo2bZoeeOABSdLixYsVExOj1atX68iRI1q7dq0zQQ8PD9ebb76pd999V61atZL0vz/oNm/erEqVKunixYvKly+fJKlhw4aqXbu2fv75Zx0/flxNmzbVpEmTdPz4cdWoUUOHDh1ScHCwJKlbt26qX7+++vXrp8mTJzvr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c4KtW7dq//79bnltd3P9CiNyFHcEZZK0ceNGVa1aVUWLFnWOa968ufr166fffvtNNWrUcHld165dU3x8fJbq8JYb6/W12jOybNkySdeT/b9v27Vr15z//n1a586d9d1332np0qWqV69e9hQLZNEPP/yQqW+nOhwOrV+/3mf3d/ZrcNyiffs7f27jaWGbrbHNkv9v948//qhcuXI5P7MzYozRzz//7Je/C3/G8fp//H2fxv9Y6b1253XCvxs4cKAkadCgQZKkDz/8UDab7fYKBuS5oCw+Pl5BQUGZXi4kJCTNaU8++aT27t2rxMRElShRQlFRUUpISFB4eLgGDx6s6OhoXbhwQePHj1erVq0kXd8vhw4dqkuXLskYo3fffVft27eXJC1evFgxMTFavXq1jhw5orVr1zq/VB4eHq4333xT7777rnNde/fu1aFDh7R582ZVqlRJFy9eVL58+SRdf4Zh7dq19fPPP+v48eNq2rSpJk2apOPHj6tGjRo6dOiQgoODJUndunVT/fr11a9fP02ePFndunVzbmPjxo2d/y9RooTCwsJ09OhRZ37RpUsXTZs2TaNGjcr079bjvHkPSGRdnTp1zD333JPhM8r+rkGDBqnuJ9ynTx/TrFmzVPPEx8cbSWbp0qXpLnujKlWquHxfegYGBgYGBgYGBgYGBgYGBgYGBobsG9J6ZpknrhOmZ9y4cUaSiYqKyvSynuZPz+7KDF/e7qSkJHPXXXeZatWqZfkZZX+X8syyrA7pOX36tPP/H3zwgenbt685dOiQkWTmzp1rjDFm2bJlpnz58sYYY86ePWuKFClifvjhB2OMMQ6Hw/kstX379pm6desaY4wZNWqUadeu3U2v98svv5g8efI4fx46dKjz2aKPPvqomTx5snNagwYNTIcOHcy1a9fM5cuXTalSpcxPP/1kjDGmW7duznlPnjxpChcubC5dumSMMaZ06dJm586dt9zemJgYc88996RqV99//72pVatWur8nb+E2jD6qcOHCunjxok6ePOntUgAAAAAAAAAgXcYY7d27V5Isc5s8eJbNZlPhwoX1559/6q+//vJ2ORn6+uuvVbt2bVWpUkXTpk1TbGysJClPnjzq2LGjJCkiIsJ528KNGzeqQoUKql+/vqTrz3wtVKiQpP/dgjEjefPmlXT9uaMzZszQM888I0nq2bPnTbdi7Nq1qwIDA5U3b16Fh4c76xg8eLAiIyMlSVOnTtUTTzyh0NBQSdKxY8dS9UZNsXPnTj3zzDOaM2dOqt52YWFhOnbsWMa/LC/gNow+as6cOWrTpo1atGih5cuXZ/k2BmFhYdq0aVOqcadOnXJOc1WuXLnUp08fjRkzJkt1eEt8fLxzZz516lS63WR9zRtvvKFx48bpq6++UsOGDVM9P+D999/X1KlT1a9fPw0bNsw53m63a+3atXr66ac1ZMgQvffee94oHXDZQw895DyxcIXNZlOjRo189rll7NfguEX79nf+3MbTwjZbY5sl/9/u119/XRMmTMjULbLz5MmjP//804NVwd04Xv+Pv+/T+B9/eK9TbrOWEXddJ7wVY4yef/55TZgwQVOnTnXeRg64HQEBAVqzZo0aNWqkhg0bat26dSpXrpxb1v3f//7XGUy5w48//qjx48dr48aNKlKkiBYvXqzhw4dLkoKCgpy3JbXb7S49B3bhwoX68ssvJUk1a9bU+PHjde3aNeXKlcs5z8aNG1W3bl1JUnR0tM6fP6/mzZtLur5PHj9+XL/++quqVKki6fq5WQq73e48r6tTp46Cg4O1du1aTZkyRatWrXLOFxwcrISEhFS17dq1S23atNH06dP10EMPpZqWkJDgDPByGsIyHxUSEqLo6OjbDswiIiL0/vvv6/Tp0ypSpIgkKSYmRvny5VOlSpUyta5cuXL55AlDipCQEJ+u/+9atmypcePGae7cuXrqqadSTUs5ScqXL59KliyZatq8efOcy/vT7wP+qVmzZvr1119dvihjs9nUtGlTn23b7Ne4Ecet62jf/svf2rgr2Gbr8Mftbtq0qcaPH+/y/Ha7XY888ojf/R78HcfrW/PHfRq35u/vtTuvE97o70FZ79693VUyoLCwMI8EZu7e38+dO6c77rhDd955pxITEzV58uQMl6lbt67279+v9evXq379+kpOTtb58+d19epVxcXFObezUaNGKlGihF544QWNHTtWgYGBio2N1ZgxYzR37lxJUlRUlMaOHavnnnvOuf5hw4YpKirKpQ4wgwcP1tNPP61KlSqpfPnyzvHVqlXT3r17VaJECUnS7t271apVK02ZMkVNmza9aT27d+9W9erVM3w9b+A2jD4sJTCrXbu2WrRooQ0bNmR6Hc2aNVOlSpXUvXt3bd++XStWrNCbb76pAQMGZOkBhsg5GjdurIoVK2rRokVasmSJS8ssXbpUixYtUsWKFdWoUSMPVwjcvnbt2mXq28vJyclq166dByvyLPZr+DPaNwD4tsaNG6f6NnJGHA6HS7cOQs7C8Rrwb564TkhQhuyQEpjlz59fDRs21P79+71d0k1atGihChUqOG+rGB4enuEyBQsW1IIFC/Tqq6+qWrVqqlmzpjZs2KBFixalur4VEBCgZcuW6erVqypfvrxKly6tiIgIzZs3T9WrV9fx48e1evVqPfbYY6nW/+STT2rmzJlKTEzMsJbOnTsrLi5Ozz///E3jV6xY4fx50KBBunDhgoYNG6bw8HCFh4enmr58+XJ17tw5w9fzBsIyH3e7gZndbld0dLTsdrsiIiL01FNP6emnn9aIESM8VDGyS2BgoD777DPZ7XY98cQTWr16dbrzr169Wo8//rjsdrs+/fRTBQbS8RQ534MPPujyfc5tNptKly6tihUrergqz2G/hj+jfQOAb8ubN69atGghu93u0vw2m01t27b1cFVwN47XgH9z93VCgjJkp5wemOXKlUtz5szRgQMH9PPPP+v9999XbGysSpUqpfPnzzvnCw0NlTHG+fODDz6oDRs2aMeOHYqNjVXbtm21cOHCm750VKBAAU2dOlW///67du3apU6dOunll19WQkKC7rnnHl2+fPmma2jVqlXTmTNnlDt3bq1bty7VOufOnasePXo4f46NjVXhwoXVunXrVOt45plntGLFCsXHx0u63hv13Llzio2NdQ4pt378888/tXXrVnXp0uU2fpOeQ1jmB243MCtZsqSWLl2qy5cv68yZMxo9ejQnsH6icePGioyMVHx8vJo3b67+/fvrt99+04ABA7R+/Xo999xz2rVrlwYMGKDmzZsrPj5ekZGRatKkibdLB1xit9s1atQol+Y1xmj06NHOe0D7KvZr+DPaNwD4tnfffdelc62AgAANGTJEd999dzZUBXfjeA34N3ddJyQogzfk9MDMXZYvX67atWunOT1PnjyaOXOmVq5cmame/2np3bu3OnbsqM8++0wBAakjpdDQUI0ZM0aHDh3KcD0HDx7UpEmTlDt37tuuySMM/EZcXJxp2LChCQ0NNT/++OMt52nQoIHJlSuXCQkJMTt27HBpvTNnzjQhISEmICDADB48+Jbz1KhRw/Tv3z+rpXtN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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qualtran.drawing._show_funcs import show_bloq\n", + "\n", + "cbloq = RecursiveUnaryIteration()\n", + "cbloq.ctrl_bitsize = 3\n", + "cbloq.sys_bitsize = 1\n", + "ops = dict()\n", + "for ix in range(4):\n", + " ops[ix] = CZPowGate(exponent=float(ix))\n", + "cbloq.set_ops(ops)\n", + "msd = get_musical_score_data(cbloq.decompose_bloq())\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.set_figwidth(18)\n", + "fig.set_figheight(7)" ] }, { From 697d106939cecfea4da7ef616b5a19ecd5550afd Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Thu, 15 Aug 2024 19:02:51 -0400 Subject: [PATCH 10/13] reworked SegmentTree to be recursive as well --- .../bloqs/multiplexers/unary_iteration.ipynb | 535 ++++-------------- 1 file changed, 125 insertions(+), 410 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 3e473e084c..9ba8fbd7b6 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -56,11 +56,13 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 37, "id": "756a61d0", "metadata": {}, "outputs": [], "source": [ + "import math\n", + "import numpy as np\n", "from qualtran import BloqBuilder, QUInt, QAny, QBit, Bloq, Signature, CompositeBloq, Soquet\n", "from qualtran.bloqs.basic_gates.rotation import CZPowGate\n", "from qualtran.bloqs.basic_gates.cnot import CNOT\n", @@ -72,6 +74,8 @@ "import attrs\n", "\n", "def int_to_bool_list(num, bitsize):\n", + " \"\"\"converts a given `num` as an integer to a list of booleans in big endian\n", + " Ex: `assert int_to_bool_list(11, 4) == [True, False, True, True]` \"\"\"\n", " x = [bool(num & (1< 1 and 1 -> 0) using X, store the Toffoli of these two into `anc` so that `anc = ~ctrl[0] * ~ctrl[1]`, meaning `anc = 1` if and only if both `ctrl` qubits start out in the 0 state. After this we do our controlled $U_0$, which we will use a controlled Z rotation with the index as the rotation angle for demonstration purposes, and then uncompute. The Qualtran code for this is" + "As a warmup we will first demonstrate how to do unary iteration with only 2 `ctrl` qubits, meaning we have four nontrivial unitaries $U_0, \\ldots, U_3$ that we would like to apply to `sys` based on the state of `ctrl`. Given that we only have access to single qubit controlled unitaries, we will have to iterate through through these unitaries and determine whether or not the `ctrl` register is in the proper state in a single ancilla qubit, which we call `anc`. We can do this pretty straightforwardly using just Toffoli and X gates. The first half is to flip the `ctrl` qubits (0 -> 1 and 1 -> 0) using X, store the Toffoli of these two into `anc` so that `anc = ~ctrl[0] * ~ctrl[1]`, meaning `anc = 1` if and only if both `ctrl` qubits start out in the 0 state. After this we do our controlled $U_0$, which we will use a controlled Z rotation with the index as the rotation angle for demonstration purposes, and then uncompute. The Qualtran code for this is" ] }, { @@ -304,14 +308,16 @@ "source": [ "## Beyond 2 Control Qubits with Segment Trees\n", "\n", - "Now that we know the ins and outs of how the 2 qubit Unary Iteration works it is clear that if we wanted to do an arbitrary controlled qubit we could just extend this process: Compute the $n$-qubit AND of the `ctrl` qubits, using `n-1` ancillas, uncompute, and then flip the `ctrl` qubits to change which qubit we are selecting on. After this circuit is laid out, we can go back and perform cancellations to reduce the number of gates significantly. Although this would work, adding gates just to cancel them later is rather inefficient and it would be better if we could introduce structure which would let us get the correct gates from the start. The abstraction we will use which lets us do this is called a Segment Tree, or an interval tree, which we will develop a small example of now.\n", + "Now that we know the ins and outs of how the 2 qubit Unary Iteration works it is clear that if we wanted to do an arbitrary controlled qubit we could just extend this process: Compute the $n$-qubit AND of the `ctrl` qubits, using `n-1` ancillas, uncompute, and then flip the `ctrl` qubits to change which qubit we are selecting on. After this circuit is laid out, we can go back and perform cancellations to reduce the number of gates significantly. Although this would work, adding gates just to cancel them later is rather inefficient and it would be better if we could introduce structure which would get the correct gates from the start. The abstraction we will use which lets us do this is called a Segment Tree, or an interval tree, which we will develop a small example of now.\n", + "\n", + "A [Segment Tree](https://en.wikipedia.org/wiki/Segment_tree) is a way of organizing a collection of intervals (of the real line) in a binary tree structure that allows us to ask which intervals a given number falls in. The intervals we will use are single number intervals $[i, i+1)$ ranging over the possible values we would like to query `ctrl` for. Before we jump in and build a unary iterator for quantum registers, to illustrate how the datastructure works we will build one for classical bits. We are going to build this in a class `SegmentTree` in two stages: first we will implement the computation stage and second the uncomputation stage. \n", "\n", - "A [Segment Tree](https://en.wikipedia.org/wiki/Segment_tree) is a way of organizing partial information about a collection of segments of the 1D real line, so a single position axis. The partial information allows us to query which intervals in the set contain a given query point on the line. For us, our intervals will all be disjoint, unit-length intervals but the partial information used in the Segment Tree will allow us to perform iterated select queries efficiently. " + "To build the computation stage we will do so recursively. As we are navigating a binary tree structure, we need to store where our \"iterator\" is throughout the process. This will be done using a `state`, which is a list of `True` and `False`. This list gives the state of the walker by reading off the bits from left to right. If the walker starts at the root node of a tree and the first bit in state is a `False` it moves to the left subtree, if it is `True` it moves right. This process can be repeated recursively until we reach a leaf. Our goal is that given a `query` (an integer we want to select on) we can update our state to match the query while keeping track to see if `ctrl` is in the same state or not. " ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 17, "id": "bfa89b97", "metadata": {}, "outputs": [ @@ -319,474 +325,183 @@ "name": "stdout", "output_type": "stream", "text": [ - "ancillas: [True, True]\n", - "ancillas: [True, False]\n" + "five\n" ] - }, - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ "class SegmentTree():\n", " ctrl_bitsize: int\n", - " def __init__(self, ctrl_bitsize: int):\n", + " def __init__(self, ctrl_bitsize: int, ops):\n", " \"\"\"A segment tree with unit intervals that can iterate through all possible configurations of ctrl bits.\n", " \"\"\"\n", " # We need ctrl_bitsize - 1 ancillas, initialize them to 0\n", + " self.state = []\n", " self.ancilla_bits = [False for ix in range(ctrl_bitsize - 1)]\n", " self.ctrl_bitsize = int(ctrl_bitsize)\n", - " \n", - " def query(self, ctrl, q):\n", - " assert len(q) == self.ctrl_bitsize\n", - " self.ancilla_bits[0] = (ctrl[0] == q[0]) and (ctrl[1] == q[1])\n", - " for ix in range(1, len(self.ancilla_bits)):\n", - " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", - " print(\"ancillas:\", self.ancilla_bits)\n", - " return self.ancilla_bits[-1]\n", - "\n", - "st = SegmentTree(3)\n", - "st.query([True, False, True], [True, False, True])\n", - "st.query([True, False, True], [True, False, False])" - ] - }, - { - "cell_type": "markdown", - "id": "be8e069a", - "metadata": {}, - "source": [ - "Currently this recomputes all of the ancillas with every single query, which is bad if we only change the lower order bits. Lets look at a small example before adding in support for storing prior queries. Here we can see that the first half of the ancillas, corresponding to the higher order bits, do not change from changing the query to " - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "8d871905", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ancillas: [True, True, False, False]\n", - "ancillas: [True, True, True, True]\n" - ] - }, - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "st = SegmentTree(5)\n", - "st.query([True, True, False, False, False], [True, True, False, True, False])\n", - "st.query([True, True, False, False, False], [True, True, False, False, False])" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "7f2d1604", - "metadata": {}, - "outputs": [], - "source": [ - "class SegmentTree():\n", - " ctrl_bitsize: int\n", - " def __init__(self, ctrl_bitsize: int):\n", - " \"\"\"A segment tree that queries a `ctrl` register with `query`s to apply an operation `op[q]` on a system register.\n", - " \"\"\"\n", - " # We need ctrl_bitsize - 1 ancillas, initialize them to 0\n", - " self.ancilla_bits = [False for ix in range(ctrl_bitsize - 1)]\n", - " self.ctrl_bitsize = int(ctrl_bitsize)\n", - " self.prev_query = None\n", - " \n", - " def query(self, ctrl, q):\n", - " assert len(q) == self.ctrl_bitsize\n", - " if self.prev_query is None:\n", - " self.ancilla_bits[0] = (ctrl[0] == q[0]) and (ctrl[1] == q[1])\n", - " for ix in range(1, len(self.ancilla_bits)):\n", - " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", - " self.prev_query = q\n", + " self.ops = ops\n", + "\n", + " def compute(self, query, ctrl):\n", + " for ix in range(len(self.state)):\n", + " assert self.state[ix] == query[ix]\n", + " if len(self.state) == len(query):\n", + " return\n", + " if len(self.state) == 0:\n", + " self.ancilla_bits[0] ^= (ctrl[0] == query[0]) and (ctrl[1] == query[1])\n", + " self.state.append(query[0])\n", + " self.state.append(query[1])\n", " else:\n", - " # find first index where they differ\n", - " first_diff_ix = None\n", - " for ix in range(len(q)):\n", - " if q[ix] != self.prev_query[ix]:\n", - " first_diff_ix = ix\n", - " break\n", - " if first_diff_ix is None:\n", - " # the two queries are equal, we can just use the previously computed ancillas\n", - " return self.ancilla_bits[-1]\n", - " if first_diff_ix <= 1:\n", - " # we can't reause anything.\n", - " self.prev_query = None\n", - " return self.query(ctrl, q)\n", - " for ix in range(first_diff_ix - 1, len(self.ancilla_bits)):\n", - " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", - " print(\"computing new values for ix = \", ix, \", ancilla_bits[ix] = \", self.ancilla_bits[ix])\n", - " self.prev_query = q\n", - " print(\"ancillas:\", self.ancilla_bits)\n", - " return self.ancilla_bits[-1]" + " ctrl_ix = len(self.state)\n", + " self.ancilla_bits[ctrl_ix - 1] ^= self.ancilla_bits[ctrl_ix - 2] and (ctrl[ctrl_ix] == query[ctrl_ix])\n", + " self.state.append(query[ctrl_ix])\n", + " self.compute(query, ctrl)\n", + "\n", + " def select(self, query, ctrl):\n", + " query_list = int_to_bool_list(query, self.ctrl_bitsize)\n", + " self.compute(query_list, ctrl)\n", + " if self.ancilla_bits[-1]:\n", + " print(self.ops[query])\n", + "\n", + "ops = {0: \"zero\", 1: \"one\", 2: \"two\", 5: \"five\"}\n", + "st = SegmentTree(3, ops)\n", + "ctrl = int_to_bool_list(5, 3)\n", + "st.select(5, ctrl)\n", + "st = SegmentTree(3, ops)\n", + "st.select(2, ctrl)" ] }, { "cell_type": "markdown", - "id": "32c0eba9", + "id": "7031a3e2", "metadata": {}, "source": [ - "So now we see that modifying a query only a little bit only recomputes a few ancillas:" + "So far the computing works, it correctly identifies when `ctrl` is in the same state as the given query. One major issue though is we can only use the object once, because otherwise the invariant for `compute` of `state` being a prefix of `query` is not met. To fix this we need to introduce `uncompute`, which walks *up* the binary segment tree so that `compute` can walk down. " ] }, { "cell_type": "code", - "execution_count": 9, - "id": "20143006", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ancillas: [True, True, False, False]\n", - "computing new values for ix = 2 , ancilla_bits[ix] = True\n", - "computing new values for ix = 3 , ancilla_bits[ix] = True\n", - "ancillas: [True, True, True, True]\n", - "computing new values for ix = 3 , ancilla_bits[ix] = False\n", - "ancillas: [True, True, True, False]\n" - ] - }, - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "st = SegmentTree(5)\n", - "st.query([True, True, False, False, False], [True, True, False, True, False])\n", - "st.query([True, True, False, False, False], [True, True, False, False, False])\n", - "st.query([True, True, False, False, False], [True, True, False, False, True])" - ] - }, - { - "cell_type": "markdown", - "id": "06807ef5", - "metadata": {}, - "source": [ - "We see in the above example that changing the lowest order bit in the query requires us to only change the last ancilla bit, which makes intuitive sense. \n", - "TODO: Should write something about how this actually encodes a Segment tree?\n", - "\n", - "Now that we have a data structure that can query the state of `ctrl` given `q` our next goal is to extend it to act on a quantum `ctrl` register and utilize ancilla *qubits*, not bits. The key point to remember is that the query is still classical. Now the first thing we have to do to update our boolean logic to be reversible, as we currently just set our classical `ancilla_bits` to whatever we need them to be. One thing to keep in mind is that the uncomputation works in reverse, if we have ancillas $[c_0 \\land c_1, c_0 \\land c_1 \\land c_2, c_0 \\land c_1 \\land c_2 \\land c_3]$ we would uncompute them as $\\to [c_0 \\land c_1, c_0 \\land c_1 \\land c_2, 0] \\to [c_0 \\land c_1, 0, 0]$. One of the key insights is that when we uncompute and then recompute the ancillas, the most significant ancilla can simply be updated instead of uncomputed. This is the $Toffoli(a,b,c) \\cdot I \\otimes X \\otimes I \\cdot Toffoli(a,b,c) = CNOT(a, c) \\cdot I \\otimes X \\otimes I$ gate reduction we implemented. " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "cfce9823", + "execution_count": 43, + "id": "a037a1d1", "metadata": {}, "outputs": [], "source": [ "class SegmentTree():\n", " ctrl_bitsize: int\n", - " def __init__(self, ctrl_bitsize: int):\n", - " \"\"\"A segment tree that queries a `ctrl` register with `query`s to apply an operation `op[q]` on a system register.\n", + " def __init__(self, ctrl, ops):\n", + " \"\"\"A segment tree with unit intervals that can iterate through all possible configurations of ctrl bits.\n", " \"\"\"\n", " # We need ctrl_bitsize - 1 ancillas, initialize them to 0\n", - " self.ancilla_bits = [False for ix in range(ctrl_bitsize - 1)]\n", - " self.ctrl_bitsize = int(ctrl_bitsize)\n", - " self.prev_query = None\n", + " self.state = []\n", + " self.ctrl_bitsize = math.ceil(np.log2(ctrl))\n", + " self.ctrl = int_to_bool_list(ctrl, self.ctrl_bitsize)\n", + " self.ancilla_bits = [False for ix in range(self.ctrl_bitsize - 1)]\n", + " self.ops = ops\n", + "\n", + " def compute(self, query):\n", + " for ix in range(len(self.state)):\n", + " assert self.state[ix] == query[ix]\n", + " if len(self.state) == len(query):\n", + " return\n", + " if len(self.state) == 0:\n", + " self.ancilla_bits[0] ^= (self.ctrl[0] == query[0]) and (self.ctrl[1] == query[1])\n", + " self.state.append(query[0])\n", + " self.state.append(query[1])\n", + " else:\n", + " ctrl_ix = len(self.state)\n", + " self.ancilla_bits[ctrl_ix - 1] ^= self.ancilla_bits[ctrl_ix - 2] and (self.ctrl[ctrl_ix] == query[ctrl_ix])\n", + " self.state.append(query[ctrl_ix])\n", + " self.compute(query)\n", " \n", - " def query(self, ctrl, q):\n", - " assert len(q) == self.ctrl_bitsize\n", - " if self.prev_query is None:\n", - " self.ancilla_bits[0] = (ctrl[0] == q[0]) and (ctrl[1] == q[1])\n", - " for ix in range(1, len(self.ancilla_bits)):\n", - " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", - " self.prev_query = q\n", + " def uncompute(self, query):\n", + " first_diff_ix = None\n", + " for ix in range(len(self.state)):\n", + " if self.state[ix] != query[ix]:\n", + " first_diff_ix = ix\n", + " break\n", + " if first_diff_ix is None:\n", + " # state is a prefix of query so we do not need to uncompute\n", " return\n", + " if first_diff_ix < len(self.state) - 1:\n", + " # we have some extra bits we have to undo\n", + " if len(self.state) == 2 and first_diff_ix == 0:\n", + " # we are the bottom of the barrel\n", + " self.ancilla_bits[0] ^= (self.ctrl[0] == self.state[0]) and (self.ctrl[1] == self.state[1])\n", + " self.state.pop()\n", + " self.state.pop()\n", + " else:\n", + " self.ancilla_bits[len(self.state) - 2] ^= self.ancilla_bits[len(self.state) - 3] and (self.state[-1] == self.ctrl[len(self.state) - 1])\n", + " self.state.pop()\n", + " self.uncompute(query)\n", " else:\n", - " # find first index where they differ\n", - " first_diff_ix = None\n", - " for ix in range(len(q)):\n", - " if q[ix] != self.prev_query[ix]:\n", - " first_diff_ix = ix\n", - " break\n", - " if first_diff_ix is None:\n", - " # the two queries are equal, we can just use the previously computed ancillas\n", - " return self.ancilla_bits[-1]\n", - " if first_diff_ix <= 1:\n", - " # we can't reause anything.\n", - " self.prev_query = None\n", - " return self.query(ctrl, q)\n", - " # Uncompute the ancillas we will need\n", - " for ix in range(len(self.ancilla_bits) - 1, first_diff_ix - 1, -1):\n", - " print('uncompute ix = ', ix)\n", - " self.ancilla_bits[ix] = (self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])) ^ (self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1]))\n", - " # Now the \"uncompute\" for the most significant ancilla is actually an update\n", - " self.ancilla_bits[first_diff_ix - 1] = self.ancilla_bits[first_diff_ix - 1] ^ self.ancilla_bits[first_diff_ix - 2]\n", - " print(\"ancillas after uncomputation: \", self.ancilla_bits)\n", - " for ix in range(first_diff_ix - 1, len(self.ancilla_bits)):\n", - " self.ancilla_bits[ix] = self.ancilla_bits[ix - 1] and (ctrl[ix + 1] == q[ix + 1])\n", - " print(\"computing new values for ix = \", ix, \", ancilla_bits[ix] = \", self.ancilla_bits[ix])\n", - " self.prev_query = q\n", - " print(\"ancillas before returning:\", self.ancilla_bits)\n", - " return self.ancilla_bits[-1]" + " # first_diff_ix is the last bit, so we just need to do the CNOT trick\n", + " if first_diff_ix == 1:\n", + " self.ancilla_bits[first_diff_ix - 1] ^= (self.ctrl[0] == self.state[0])\n", + " self.state[1] ^= True\n", + " else:\n", + " self.ancilla_bits[first_diff_ix - 1] ^= self.ancilla_bits[first_diff_ix - 1]\n", + " self.state[first_diff_ix] ^= True\n", + " return\n", + "\n", + " def select(self, query):\n", + " query_list = int_to_bool_list(query, self.ctrl_bitsize)\n", + " self.uncompute(query_list)\n", + " self.compute(query_list)\n", + " if self.ancilla_bits[-1]:\n", + " print(self.ops[query])\n", + " else:\n", + " print(\"Miss!\")" ] }, { "cell_type": "code", - "execution_count": 11, - "id": "cf12b7ae", + "execution_count": 45, + "id": "e267880d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "ancillas before returning: [True, True, False, False]\n", - "uncompute ix = 3\n", - "ancillas after uncomputation: [True, True, True, False]\n", - "computing new values for ix = 2 , ancilla_bits[ix] = True\n", - "computing new values for ix = 3 , ancilla_bits[ix] = True\n", - "ancillas before returning: [True, True, True, True]\n", - "ancillas after uncomputation: [True, True, True, False]\n", - "computing new values for ix = 3 , ancilla_bits[ix] = False\n", - "ancillas before returning: [True, True, True, False]\n" + "Miss!\n", + "three\n", + "Miss!\n" ] - }, - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ - "st = SegmentTree(5)\n", - "st.query([True, True, False, False, False], [True, True, False, True, False])\n", - "st.query([True, True, False, False, False], [True, True, False, False, False])\n", - "st.query([True, True, False, False, False], [True, True, False, False, True])" + "ops = {0: \"zero\", 1: \"one\", 2: \"two\", 3: \"three\", 5: \"five\"}\n", + "st = SegmentTree(3, ops)\n", + "ctrl = int_to_bool_list(5, 3)\n", + "st.select(5)\n", + "st.select(3)\n", + "st.select(5)" ] }, { "cell_type": "markdown", - "id": "f8900632", + "id": "be8e069a", "metadata": {}, "source": [ - "Now that we have all the reversible logic implemented and the iterative queries implemented we can finally move on to using this to build a bloq that acts on **quantum** registers! We now have to be able to query `ctrl` that is a quantum register using ancillas that are also qubits. This will essentially boil down to moving our AND and XOR logic to Toffolis and CNots. A first stab at this is below" + "Now our Segment Tree works with uncomputation! Meaning we can repeatedly query a control register for matches. Now our final task is make our classical `ctrl` a quantum register. To do so we will create a bloq and translate the above construction from reversible boolean logic to unitaries that can work on qubits." ] }, { - "cell_type": "code", - "execution_count": 2, - "id": "5605cc96", + "cell_type": "markdown", + "id": "06807ef5", "metadata": {}, - "outputs": [], "source": [ - "from typing import Dict, List\n", - "from qualtran import BloqBuilder, Register\n", - "from qualtran._infra.composite_bloq import SoquetT\n", - "from numpy import ndarray\n", - "class UnaryIteration(Bloq):\n", - " ctrl_bitsize: int\n", - " prev_query = None\n", - " sys_bitsize: int\n", - " ops: Dict[int, Bloq]\n", - " ctrl_inversions: List[bool] = None\n", - "\n", - " def set_ops(self, ops):\n", - " self.ops = ops\n", + "We see in the above example that changing the lowest order bit in the query requires us to only change the last ancilla bit, which makes intuitive sense. \n", + "TODO: Should write something about how this actually encodes a Segment tree?\n", "\n", - " @property\n", - " def signature(self) -> Signature:\n", - " return Signature([Register('ctrl', QAny(self.ctrl_bitsize)), Register('anc', QAny(self.ctrl_bitsize - 1)), Register('sys', QAny(self.sys_bitsize))])\n", - " \n", - " def query(self, q, bb, ancs, ctrls) -> CompositeBloq:\n", - " assert len(q) == self.ctrl_bitsize\n", - " if self.ctrl_inversions is None:\n", - " self.ctrl_inversions = [False for _ in range(self.ctrl_bitsize)]\n", - " print('query: ', q, \" prev_query: \", self.prev_query)\n", - " if self.prev_query is None:\n", - " for ix in range(len(q)):\n", - " if q[ix] is False:\n", - " ctrls[ix] = bb.add(XGate(), q = ctrls[ix])\n", - " [ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", - " for ix in range(1, len(ancs)):\n", - " [ancs[ix - 1], ctrls[ix + 1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ancs[ix - 1], ctrls[ix + 1]], target=ancs[ix]) \n", - " for ix in range(len(q)):\n", - " if q[ix] is False:\n", - " ctrls[ix] = bb.add(XGate(), q = ctrls[ix])\n", - " self.prev_query = q\n", - " return\n", - " # now we need to find where the previous and current query differ\n", - " first_diff_ix = None\n", - " for ix in range(len(q)):\n", - " if q[ix] != self.prev_query[ix]:\n", - " first_diff_ix = ix\n", - " break\n", - " if first_diff_ix is None:\n", - " # the two queries are equal, so we don't have to update anything.\n", - " return\n", - " \n", - " for ix in range(len(ancs) - 1, first_diff_ix - 1, -1):\n", - " print(\"uncompute ix: \", ix)\n", - " if ix == 0:\n", - " if self.prev_query[ix + 1] is False and self.ctrl_inversions[ix + 1] is False:\n", - " ctrls[ix + 1] = bb.add(XGate(), q=ctrls[ix + 1])\n", - " if self.prev_query[ix] is False and self.ctrl_inversions[ix] is False:\n", - " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", - " [ctrls[0], ctrls[1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[ix])\n", - " if self.prev_query[ix + 1] is False and self.ctrl_inversions[ix + 1] is False:\n", - " ctrls[ix + 1] = bb.add(XGate(), q=ctrls[ix + 1])\n", - " if self.prev_query[ix] is False and self.ctrl_inversions[ix] is False:\n", - " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", - " else:\n", - " if self.prev_query[ix + 1] is False and self.ctrl_inversions[ix + 1] is False:\n", - " ctrls[ix + 1] = bb.add(XGate(), q=ctrls[ix + 1])\n", - " [ctrls[ix + 1], ancs[ix - 1]], ancs[ix] = bb.add(Toffoli(), ctrl=[ctrls[ix + 1], ancs[ix - 1]], target=ancs[ix])\n", - " if self.prev_query[ix + 1] is False and self.ctrl_inversions[ix + 1] is False:\n", - " ctrls[ix + 1] = bb.add(XGate(), q=ctrls[ix + 1])\n", - " self.ctrl_inversions[ix + 1] = False\n", - " \n", - " print(\"first diff ix, \", first_diff_ix)\n", - " if first_diff_ix == 1:\n", - " if self.prev_query[first_diff_ix - 1] is False:\n", - " ctrls[first_diff_ix - 1] = bb.add(XGate(), q=ctrls[first_diff_ix - 1])\n", - " ctrls[first_diff_ix -1 ], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ctrls[first_diff_ix -1], target=ancs[first_diff_ix - 1])\n", - " if self.prev_query[first_diff_ix - 1] is False:\n", - " ctrls[first_diff_ix - 1] = bb.add(XGate(), q=ctrls[first_diff_ix - 1])\n", - " self.ctrl_inversions[first_diff_ix] = True\n", - " elif first_diff_ix > 1:\n", - " ancs[first_diff_ix - 2], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ancs[first_diff_ix - 2], target=ancs[first_diff_ix - 1])\n", - " self.ctrl_inversions[first_diff_ix] = True\n", - " for ix in range(first_diff_ix + 1, self.ctrl_bitsize): \n", - " print(\"compute ix: \", ix)\n", - " if ix == 1:\n", - " if q[ix] is False:\n", - " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", - " [ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", - " if q[ix] is False:\n", - " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", - " else:\n", - " if q[ix] is False:\n", - " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", - " print(\"ctrls: \", ctrls)\n", - " print(\"ancs: \", ancs[ix - 1])\n", - " [ctrls[ix], ancs[ix - 2]], ancs[ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[ix], ancs[ix - 2]], target=ancs[ix-1])\n", - " if q[ix] is False:\n", - " ctrls[ix] = bb.add(XGate(), q=ctrls[ix])\n", - " self.prev_query = q\n", - " return\n", - " \n", - " def build_composite_bloq(self, bb: BloqBuilder, ctrl: SoquetT, anc: SoquetT, sys: SoquetT) -> Dict[str, 'SoquetT']:\n", - " queries = list(self.ops.keys())\n", - " queries.sort()\n", - " ctrls = bb.split(ctrl)\n", - " ancs = bb.split(anc)\n", - " for q_int in queries:\n", - " q_bools = int_to_bool_list(q_int, self.ctrl_bitsize)\n", - " self.query(q_bools, bb, ancs, ctrls)\n", - " [ancs[-1], sys] = bb.add(self.ops[q_int], q=[ancs[-1], sys])\n", - " ctrl = bb.join(ctrls)\n", - " anc = bb.join(ancs)\n", - " return {'ctrl': ctrl, 'sys': sys, 'anc': anc}" + "Now that we have a data structure that can query the state of `ctrl` given `q` our next goal is to extend it to act on a quantum `ctrl` register and utilize ancilla *qubits*, not bits. The key point to remember is that the query is still classical. Now the first thing we have to do to update our boolean logic to be reversible, as we currently just set our classical `ancilla_bits` to whatever we need them to be. One thing to keep in mind is that the uncomputation works in reverse, if we have ancillas $[c_0 \\land c_1, c_0 \\land c_1 \\land c_2, c_0 \\land c_1 \\land c_2 \\land c_3]$ we would uncompute them as $\\to [c_0 \\land c_1, c_0 \\land c_1 \\land c_2, 0] \\to [c_0 \\land c_1, 0, 0]$. One of the key insights is that when we uncompute and then recompute the ancillas, the most significant ancilla can simply be updated instead of uncomputed. This is the $Toffoli(a,b,c) \\cdot I \\otimes X \\otimes I \\cdot Toffoli(a,b,c) = CNOT(a, c) \\cdot I \\otimes X \\otimes I$ gate reduction we implemented. " ] }, { - "cell_type": "code", - "execution_count": 3, - "id": "9086b08f", + "cell_type": "markdown", + "id": "f8900632", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "query: [False, False, False] prev_query: None\n", - "query: [False, False, True] prev_query: [False, False, False]\n", - "first diff ix, 2\n", - "query: [False, True, False] prev_query: [False, False, True]\n", - "uncompute ix: 1\n", - "first diff ix, 1\n", - "compute ix: 2\n", - "ctrls: [Soquet(binst=BloqInstance(bloq=XGate(), i=16), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())\n", - " Soquet(binst=BloqInstance(bloq=XGate(), i=8), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())\n", - " Soquet(binst=BloqInstance(bloq=XGate(), i=17), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())]\n", - "ancs: Toffoli<13>.target\n", - "query: [False, True, True] prev_query: [False, True, False]\n", - "first diff ix, 2\n", - "query: [True, False, False] prev_query: [False, True, True]\n", - "uncompute ix: 1\n", - "uncompute ix: 0\n", - "first diff ix, 0\n", - "compute ix: 1\n", - "compute ix: 2\n", - "ctrls: [Soquet(binst=BloqInstance(bloq=Toffoli(), i=28), reg=Register(name='ctrl', dtype=QBit(), _shape=(2,), side=), idx=(0,))\n", - " Soquet(binst=BloqInstance(bloq=XGate(), i=29), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())\n", - " Soquet(binst=BloqInstance(bloq=XGate(), i=30), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())]\n", - "ancs: Toffoli<23>.target\n", - "query: [True, False, True] prev_query: [True, False, False]\n", - "first diff ix, 2\n", - "query: [True, True, False] prev_query: [True, False, True]\n", - "uncompute ix: 1\n", - "first diff ix, 1\n", - "compute ix: 2\n", - "ctrls: [Soquet(binst=BloqInstance(bloq=CNOT(), i=37), reg=Register(name='ctrl', dtype=QBit(), _shape=(), side=), idx=())\n", - " Soquet(binst=BloqInstance(bloq=XGate(), i=29), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())\n", - " Soquet(binst=BloqInstance(bloq=XGate(), i=38), reg=Register(name='q', dtype=QBit(), _shape=(), side=), idx=())]\n", - "ancs: Toffoli<36>.target\n", - "query: [True, True, True] prev_query: [True, True, False]\n", - "first diff ix, 2\n" - ] - }, - { - "data": { - "image/png": "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DR482Fx55ZVm//797sfOf86JEydMxYoVTXp6upkwYUKm1/A/cuSIkeRexrBhw0znzp2NMcY8/fTTHjc4fOihh0z9+vVNUlKSSU1NNQ0bNjRff/21McaYF154wf3c5ORkExUVZXbu3GmMMaZZs2bmxx9/9FjvkiVLTPXq1U1YWJgpVarURd0jKkPGtSfzctPsxo0be1xfsmfPnqZFixYez0lKSjKSzMyZM7N8bYaMe0QxMTExMTExMTExMTExMTExMTExMTExFabJ1z2i/H0cPjuPPvqokWT+/PPPXL82P8n1pfmWLl2qqlWrqlGjRpLOfZOhdOnSmT63TZs2Hmnh+WbNmqVWrVrl6Bsh4eHhks5dlq979+6SpO7du+vLL7/0OC39zjvvVEREhFwul+rXr68//vhDktSnTx99+eWXOnPmjL7//nvVr19f5cuXlyTt2bPHq8aGDRsqISFBu3fvzjIFzo369eurbNmyeuedd/TXX3/5ZZkAAAAAAAAAACD/+e233zRhwgTddtttioqKsrqcgMrTpflyqlixYj7nTZ482R0q1a5dW9u2bdPhw4c9LouxdOlS3XjjjSpRooTWrl2r9evXq2fPnu7w6tChQ5o1a5batWsnSSpatKj7tS6Xy31jtauvvlq33XabJkyYoM8++0yvvvqq+3kRERE+T8e7/PLLFRYWlsff3tM///yjkydPKiUlRU2aNNHChQt1zTXX5GlZUVFRXje7PHDggHtebmzYsIFTbguAQYMG6aOPPtLYsWPVpEkTd0B76tQp9+WIevTooRdffNH9GpfLpQULFqhbt27q37+/Xn/9db/X9e677+r111/P9DrmISEhevLJJ/Xaa6/5fb1AfvX333+ratWqPudfeuml2rVrVxArst7DDz+syZMn+7wfwqhRo3Tffff5fb2+xlVJeuWVVzRmzBhJ5y7FknFZgmCMq/DWsmXLLG+sPG3aNDVr1iyIFcFuoqOjtX37dp/zly1bpurVqwexImuNGzdOjz/+eKbzXC6XOnXqpFGjRgVk3XbdZ4V90Eey1qhRI61Zs8bn/Llz5yomJiaIFUGS9u/f775tRGZKlSqlPXv2BLEi6z366KOaOHGiz334ESNGqGvXrn5fL/vwWUtPT1eZMmV0+vRpn8/5+++/VbJkySBWBTs5efKkrrzySp/zw8LC9M8//8jlcgWxKv+bNm2aunTpkqPn+vM4/IV+++03tWzZUnXq1NHMmTPdJ+MUVLkOoho2bKht27Zp0aJFatSokdLT03Xs2DGVKFFCx48fz9Eyzp49q6VLl+qrr76SJFWuXFnt27dXr169NHbsWEVERGjnzp0aMGCA3n//fUnnzoZ65pln9NZbb7mX89lnnykuLs4dRGWlX79+6tSpk4oVK+ZxHdqaNWtqy5Yt7jO8Nm/erCpVqsjpdOrkyZM6c+ZMjtvGlzVr1qh58+aqXLmyRo8erTvuuOOiwqiYmBi98cYb+ueff3TFFVdIOrfDWaJEiVzfAyEiIsJ9Xy7kX61bt9ZHH32kiRMn6oEHHnA/fv51j0uUKOE+EzDDpEmT3K8PRD9o0KCBzx3P1NRU3XzzzfQ/4DyVK1fWJZdcoqNHj3rNczgcuummmwrdNlO/fn398MMPPufHxMQEpE18jauS5/0kr7nmGo/1B3pchbcGDRooPj7e51nsgeojyD9iYmK0c+dO95fUzhcaGqo6depkeUP1giarg9TGGNWvXz9g24xd91lhH/SRrDVo0EAbNmzweQ/eBg0aFOjf364qVaqkyy67TIcOHfKaV5j34b///nuf89mHt050dLSWLl2a6bxrrrlGV111VZArgp1ERkaqQoUK2rlzZ6bza9WqpRIlSgS3qAA4/2SW7PjzOPz5LgyhCvrYI0m5vjTfJZdcosmTJ+v5559XzZo1VadOHS1ZskRPPfWUevbsqejoaK1duzbLZcyfP1+33nqrxx98X331lSpVqqQaNWqocuXKuu666/Tuu++qZcuWSk5O1vjx472+LXHvvfdqzpw57hQyKw0aNFDJkiXVp08fj8sB3nPPPfrpp5/cP0+YMEHVq1dXrVq1FBMToyJFiuSwZTKXEUJVrFhRc+fOVY0aNbRw4UJJUpMmTfJ0mb4WLVqoWrVqevDBB7Vu3Tr99NNPevHFF9W3b1+/ncGF/CU2NlbXX3+9pk6dqhkzZuToNTNnztTUqVN1/fXXB+yb4nXq1Mly/sXc0A8oiBwOh+rVq5fpZWtdLpfq1q1rQVXWqlOnjtLT0zOdFxYWluUZZBfDruMqvNWpU8dnCBUVFaXLLrssyBXBbrIaR2688cZCFUJJ0g033ODzd05PTw/o/hljK7JDH8laVp951157bZZXpUFg3XTTTXI6vQ+xsQ/vrUiRIrr++usDsl7GkOzddNNNCgnxPi8h4zYnwM0335zpGU8hISG66aabLKjIWoE4Dl8YQyhJkhU3pnrsscfM999/73N+Wlqaee6550x0dHSmNw3Liz179pioqChz4sQJr3XVrVvX7N69O9PXlStXzrz00kt5Wufq1atN6dKlTb169czRo0c95u3atctce+215tprrzW7du3KcjmZ3ehs586dpnXr1iY8PNxcdtll5plnnjEpKSk5eq0xxsybN69Q3AStMPn555+Ny+UyxYsXNz///LMxxpjExET3Dfj+85//eDy3ePHixuVymblz5wa0rpiYGONyuTxuBuhwOMz1119v0tPTA7puID8aOXKkzxtprl692urygi45OdlccsklXm0REhJi7r///oCuO7Nx1RhjnnrqKXcdiYmJ7ucGa1yFpyNHjpiwsDCvPuJyuUz//v2tLg82sGPHDuNwOLz6iNPpNP/73/+sLs8SnTp1MiEhIV5tcumll5ozZ84EdN123WeFfdBHfNu3b1+m267L5TIvvPCC1eUVanFxcT734VesWGF1eUF35swZc+mll2a6D3/vvfcGdN3sw2ftl19+8dlXv/32W6vLgw189913PvvI/PnzrS7PL3744QcjKdPcIRDH4c+3ZMkSU6xYMXPbbbe5x6LCwpIgKtj+7//+z1x99dXmiy++yHT+ypUrzaJFizKdl9cgKqsQKkNOw6icdOLcvpYgqmAaPny4cTqdxuVymd69e5v4+Hj3h8Xvv/9ufv/9d9OnTx/jcrmM0+k0w4cPD3hN06dPz/TDa+zYsQFfN5AfnTp1ypQpU8Y4nU6PgwuxsbFWl2aZN9980+sgssPhMGvWrAn4ui8cVzds2GA2bNjgcWAh2OMqvPXv39/rSw8hISFm586dVpcGm7jvvvs8+ojD4TDFixf325fe8puVK1d67Zs5HA7zzjvvBGX9dtxnhb3QR3zr2bOn13hWtGhRs3fvXqtLK9ROnz5trrzySq99+MaNG1tdmmXeeeedTL8IsmrVqoCvm31439LT0039+vU9xhGn02kqVKhgzp49a3V5sIGzZ8+aihUreo1ndevWLTBfKM9tEJVT2b22MIdQxhSSIOpi5CWIykkIlSEnYVTjxo1NaGioiYyMNOvXr89RDePGjTORkZHG6XQSRBUy06dPN2XKlPHa2StVqpT7/2XKlDHTp08P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7Qu6du2qLVu26OzZsypXrpzi4uKUnJys6Oho9evXT9OnT9fx48c1dOhQtWnTRpK0dOlSPffcczp58qSMMXrttdd0xx13SJKmTZumuXPnat68edq1a5cWLFigkJBzZUVHR+vFF1/Ua6+95l7Wli1btGPHDq1YsULVqlXTiRMnVKJECUlSkyZNVK9ePS1fvlx79+7V7bffruHDh2vv3r2qXbu2duzYoYiICElSly5d1KhRI/Xu3VsjRoxQly5d3L9jbGys+//lypVTVFSUdu/erUqVKkmS7r33Xo0aNUpvv/12pm2UlJSU22bNVmpq6kUvIyOM6tSpkzp27KgpU6aoVatWfqgOAAAAAAAAAJAhECFUenp6QI49X+j8dQRjfXYUGRnpc96Fecfdd9+tvXv3qnPnzgoPD9cXX3yhKVOmKCEhQYmJidq9e7fmzp3rtZwpU6Zo8ODB2rZtm6ZMmaLdu3e711uhQgW9//776tGjh3r37i1JOnbsmGbMmKFNmzapZs2a2r59u6677jpJ54KssLAwbd++Xbt371b16tX17bffKj09XRUqVNCKFStUrlw5SdILL7ygtLQ0vf322xo9erTuvvtuORwOSVLx4sXd9SUnJ+vMmTPueVL22YhPJpf++ecf9///97//mccee8zs2LHDSDITJ040xhgza9YsU6VKFWOMMYcPHzZXXHGF+fXXX40xxqSlpZnDhw8bY4zZunWradiwoTHGmLffftt06NDBa32rV682RYsWdf/83HPPmQEDBhhjjLnzzjvNiBEj3PMaN25sOnbsaFJSUsypU6dMhQoVzG+//WaMMaZLly7u5+7fv99cfvnl5uTJk8YYYypWrGgSEhIy/X3nzp1rrrrqKpOYmOh+7JdffjF169b12UaSAjI1adLE5zpzIzk52bRv396EhYWZxYsX+2WZsKfExER3/zm/Dxf2WoD8gG3Gk53aw0614F+8L8gOfcSbXdrELnXAvugjnmgP++K98WSn9rBTLXZAewTetm3bzCWXXGJuuukmc/ToUb8ss0ePHiYkJCRgx56ZPCdffOUd5cuXN2vWrHE/b/DgwebKK680+/fvdz92/nNOnDhhKlasaNLT082ECRNMzZo1vdZ15MgRI8m9jGHDhpnOnTsbY4x5+umnzcCBA93Pfeihh0z9+vVNUlKSSU1NNQ0bNjRff/21McaY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SerevbvX5fk6d+6skJAQhYeHKzo62l1Hv379NGzYMEnS559/rvvvv1/FihWTJO3Zs8fjjLwMCQkJeuSRRzRhwgRFRka6H4+KitKePXuyb6zzFPhL8w0aNEgrVqxQ+/btNWPGDDVt2jTPy4qKilJ8fLzHYwcOHHDPy6nSpUu7O8DFSEpKcneQAwcOeHSGQBg0aJA++ugjjR07Vk2aNPG42eMbb7yhzz//XL1799aAAQPcj7tcLi1YsEDdunVT//799frrrwe0RpzTpEkTrVy50uf84cOH64EHHghiRfRXZI3+4S3YbUIdWfvf//6nt99+O9MbpjudTt1111364osvglpTsNl9u2EcsS+rt1/qsGctK1euVJMmTXzOL168uPbt2xe0eqzAOJK1mTNn6t577/U5v0KFCoX2YJqdxhG7sEubUIe96njnnXf05ptv+tyHv+OOOzR27Nig1mQXVr83dhSINsk4yJ8dfx1z9uW7777TQw89pK5du6pXr14Xvbz87o033tCaNWvUokULzZkzRzfffHOOX7t48WINHTpUS5cu1RVXXKFp06bppZdeknQu8MsItlwul8e+nS9TpkzRl19+KUmqU6eOhg4dqpSUFIWGhrqfs3TpUjVs2FCSNH36dB07dkwtW7aUJBljtHfvXm3YsEHVq1eXdC4Qy+ByudxjYP369RUREaEFCxZo5MiR+vnnn93Pi4iIUHJyskdtGzduVLt27TR69GjdeuutHvOSk5Pd4VhOFfggqmjRopoyZYo6duyotm3bXlQYFRMTozfeeEP//POPrrjiCknS3LlzVaJECVWrVi3Hy3E4HH4f4CMjIwP+odG6dWt99NFHmjhxoleIkXEdyhIlSqh8+fIe8yZNmuR+PR9swVGzZk2tXbs2050tSapVq5al7wX9FVmhf3gLRptQR9Zq1qzpc0x1Op2qXr26LdomkPLTdsM4Yl+FeRyxcx1S8GupVatWlvOvv/5627RNoDCOZC06OtrnPKfTqZo1axbo3z+n7DSO2IVd2oQ6rK+DfficsUsfsZNgt4m/jjln5rvvvlOXLl1033336csvv5TL5fJHyfla8eLFNXPmTLVp0ybXYdTRo0dVvHhxXXrppTp79qxGjBiR7WsaNmyobdu2adGiRWrUqJHS09N17NgxnTlzRomJiapcubIkqVmzZipXrpyefvppffjh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+9Ld/v37NWfOnICu265tAgAoGAJ53JkwCnZUaIKovFyOLyIiQlFRUQoJCXE/1r17d3Xu3DnT52dcJzo8PNxvdSNzqamp6tu3r9LS0jR+/Hg1b948y+c3b95c33zzjdLS0vTkk08qNTU1SJVaY9myZV5/sEnn/mjbsmUL3zANIvoqAABA5hYvXux1NpQkhYSEaPny5RZUVDjZdX81LS1NK1asyPTLdYHuI3ZtEwBAwRHo486EUbCbQhFE+eueUEOHDlXfvn1VsWJFP1eI3Jo3b542b96s9u3bq3379jl6Tbt27dS+fXtt3rxZ8+fPD3CF1lq9enWmQZR0Loxat25dkCsqvOirAAAA3g4fPqy9e/dmOi8lJUXx8fFBrqjwsuv+6tatW5WcnJzpvLS0NK1atSog65Xs2yYAgIIrEMedCaNgJyHZPyV/81cI5W9JSUl+XYY/lpefzJo1S5LUqVMnr98941rhKSkpXvPuuece/fjjj5o5c6ZuueWW4BRrgQ0bNmT5LbyEhATVrl07iBUV3v5KX82Zwto/smKXNqEO5Bf0Efuyy3tDHd6srCUhISHL+Vu3brW8fQoLu+6vZtVHjDHasGFDwPqIXdskg53GEbuwS5tQhz3rgDfeG2/+bhO7tGtGGNWqVSu1bdtWM2bMULFixawuC4WRKeB69eplQkJCTEJCQq5e17hxY9OvX79M5w0ePNjUqlXL52sfeughc8cdd2Q6b+jQocbpdBpJTExMTExMTExMTExMTExMTExMTExMBXSaOHFi0I47Z2X+/PlGknn55Zdz9PzExET375CYmJjr9fkLdRQcBf7SfC1atFB6errefffdTK8/DgAAAAAAAABAQZScnKx3331XRYsWVZMmTawuB4VUgb803913363x48era9eukqTRo0fL5XJZWlORIkV06NChi15OUlKSypQpI0k6cOCAIiMjL3qZ+cWgQYP00UcfaezYsWrSpIlHyPjGG2/o888/V+/evTVgwAD34y6XSwsWLFC3bt3Uv39/vf7661aUHhQdO3bUvHnzZIzJdP748eN1xx13BLWmwtpf6as5U1j7R1bs0ibUgfyCPmJfdnlvqMNetWzdulV16tTxOf/KK6/Utm3bglZPYWbX/dXFixerVatWPufXqlVLS5Ys8ft6Jfu2SQY7jSN2YZc2oQ571gFvvDfe/N0mx44d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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ - "from qualtran.drawing._show_funcs import show_bloq\n", - "\n", - "\n", - "cbloq = UnaryIteration()\n", - "cbloq.ctrl_bitsize = 3\n", - "cbloq.sys_bitsize = 1\n", - "ops = dict()\n", - "for ix in range(8):\n", - " ops[ix] = CZPowGate(exponent=float(ix))\n", - "cbloq.set_ops(ops)\n", - "msd = get_musical_score_data(cbloq.decompose_bloq())\n", - "fig, ax = draw_musical_score(msd)\n", - "fig.set_figwidth(18)\n", - "fig.set_figheight(7)\n" + "Now that we have all the reversible logic implemented and the iterative queries implemented we can finally move on to using this to build a bloq that acts on **quantum** registers! We now have to be able to query `ctrl` that is a quantum register using ancillas that are also qubits. This will essentially boil down to moving our AND and XOR logic to Toffolis and CNots. A first stab at this is below" ] }, { From 728093745181582e3ee6daf64087f9ee51ffb383 Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Fri, 16 Aug 2024 15:01:14 -0400 Subject: [PATCH 11/13] first pass done I think --- .../bloqs/multiplexers/unary_iteration.ipynb | 273 ++++++++++++++++-- 1 file changed, 256 insertions(+), 17 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 9ba8fbd7b6..529b915a99 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 1, "id": "756a61d0", "metadata": {}, "outputs": [], @@ -72,6 +72,10 @@ "from qualtran.drawing.musical_score import draw_musical_score, get_musical_score_data\n", "from qualtran.drawing import get_musical_score_data, draw_musical_score\n", "import attrs\n", + "from typing import Dict, List\n", + "from qualtran import BloqBuilder, Register\n", + "from qualtran._infra.composite_bloq import SoquetT\n", + "from numpy import ndarray\n", "\n", "def int_to_bool_list(num, bitsize):\n", " \"\"\"converts a given `num` as an integer to a list of booleans in big endian\n", @@ -380,7 +384,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 2, "id": "a037a1d1", "metadata": {}, "outputs": [], @@ -454,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 3, "id": "e267880d", "metadata": {}, "outputs": [ @@ -474,34 +478,261 @@ "ctrl = int_to_bool_list(5, 3)\n", "st.select(5)\n", "st.select(3)\n", - "st.select(5)" + "st.select(0)" ] }, { "cell_type": "markdown", - "id": "be8e069a", + "id": "f8900632", "metadata": {}, "source": [ - "Now our Segment Tree works with uncomputation! Meaning we can repeatedly query a control register for matches. Now our final task is make our classical `ctrl` a quantum register. To do so we will create a bloq and translate the above construction from reversible boolean logic to unitaries that can work on qubits." + "Now that we have all the reversible logic implemented and the iterative queries implemented we can finally move on to using this to build a bloq that acts on **quantum** registers! We now have to be able to query `ctrl` that is a quantum register using ancillas that are also qubits. This will essentially boil down to moving our AND and XOR logic to Toffolis and CNOTs. We start below with the computation step to verify these cirquits work" ] }, { - "cell_type": "markdown", - "id": "06807ef5", + "cell_type": "code", + "execution_count": 9, + "id": "d683c3b9", "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "q_bools: [False, True, False]\n", + "calling ops[2]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABuYAAAKjCAYAAADh1bkOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACCcElEQVR4nOzde/zX8/0//tv7UOgsm9owPo5DEhnqg1ERKYdEc5yRHJo1w8fshLUZm2HGmggzIccQcijMaE6TUw7py4hqLKJ3kt7v9+8Pv97z1rle79erd12vl8v7otfz8Hjd36+X5+v5fD9ur8fjWVZbW1sbAAAAAAAAoEGVl7oAAAAAAAAAWB0I5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHK4Hq6upSl8ASeI8AAAAAWJXo74LSEMxBif3mN7/Jeuutl2effbbUpbAIf//739O+fftcdtllpS4FAAAAAFbYbbfdlnXXXTe33nprqUuB1Y5gDkrshRdeyPTp09O9e3fh3Ero73//e/bZZ5+8//77eemll0pdDgAAAACssNdffz0zZsxI//79hXNQZII5WAl07tw5m266qXBuJTM/lNthhx3yzW9+s9TlAAAAAEDBtG7dOocccohwDopMMAcrgdatW+f+++8Xzq1EvhjKjR49Os2aNSt1SQAAAABQMBUVFbn22muFc1BkgjlYSbRp00Y4t5L4cijXvHnzUpcEAAAAAAVXWVkpnIMiK6utra0tdRGwOrntttty9dVX1z3+5z//mW9+85sZO3ZskuTDDz/MXnvtlddffz1jx47NdtttV6pSV0uLCuU6d+6c999/Px07dizI82y99dY599xzU17u+xEAAAAALNkFF1yQRx55pCBtvf766/n3v/+d//znP0mSefPm5aijjspNN92UkSNH5qCDDirI8wALEsxBke2www55//3306lTp7plgwYNyp577ln3WDhXGosbKTdq1Khcc801BXme6dOn5x//+EfefvvtrL/++gVpEwAAAIBVW2VlZbbeeuv8z//8T0Ha69WrVwYOHFj3WDgHxSGYgyLbYYcd8q1vfStDhw5d7HbCueIq5vSV9913X/bee2/BHAAArIRmz56d119/PR999FE+++yztGjRIuuuu2423HDDUpcGwGqusrIyl112WY4//vgGew7hHDQ8c6jBSso954rHPeUAWB1VVVXlkksuSffu3dO+ffs0bdo07du3T/fu3XPJJZdk9uzZpS4RoGiqqqpy0003pV+/fllnnXWy7bbbZtddd023bt2y4447ZqONNsoWW2yRs88+Oy+++GJ8xxmAVZV7zkHDE8zBSkw41/CEcgCsju6+++5suummGTx4cMaNG5c5c+Zk/fXXz5w5czJu3LgMHjw4m2yySe6+++5SlwrQoD799NOcfvrpWWedddK/f//ccccdmTNnzkK3fe211/KrX/0q22yzTTp06JAnnniiyNUCQHEI56BhCeZgJSecazhCOQBWR8OGDct+++2X9957LwMGDMhzzz2XiRMn5rbbbsvLL7+c559/Pscdd1zee++97Lfffhk2bFipSwZoEJMnT87222+fCy+8MJ9++mmSz6fvWpzq6uokyauvvpquXbvm/PPPN3oOgFWScA4ajmAOGgHhXOEtbSi3++67p6ysLGVlZZkwYcJStX3NNdfU7fPDH/6wcEUDwAoaN25cTjrppDRv3jxjxozJFVdckY4dO+bCCy/Mdtttlz/84Q/ZZpttMmzYsIwZMybNmjXLSSedlAcffLDUpQMU1Ntvv52dd945r732WmpqapZ5/+rq6tTU1OTHP/5xfvGLXzRAhQCw9Bqq/0o4Bw1DMFdkF198caZNm7bYbTbaaKN6H6D//ve/s/XWWydJ5s6dmzPOOCObbrppttxyy3To0CHDhw9foI2HHnooZWVl+etf/1qw2k877bTceOONSZLbb789HTt2TKdOnbLVVlvlpz/9ad23BEePHp2BAwcW7Hn5nHCucJZ1pNxxxx2XqVOnpkOHDkmSt956K/vuu2+aNWuWddddN6effnq9b9b2798/U6dOTZcuXRr09wCAZTFv3rwMGjQo1dXVGTFiRHr06LHY7Xv06JEbbrgh1dXVOfnkk5c4igSgsZg7d2723XfffPjhhwX5bPvVr36Vm2++uQCVAcDya6j+K+EcFJ5grsgWF8zV1NQs9Jt6d9xxR/bbb78kydFHH53XX389zz33XF5++eWMHj06F1xwQYYOHVpvn+HDh6d79+4LDe2WxzvvvJN77rkn/fv3T/J5R82ECRPqfh544IGMGjUqSdK7d+8888wzmTRpUkGem/8Szq245Zm+slmzZmnfvn0qKytTXV2dfffdN3Pnzs3jjz+ev/zlL7nmmmvqfUt2rbXWSvv27dO0adOG/FUAYJmMHTs2r7zySvr06ZM+ffos1T69e/dOnz598sorr2TcuHENXCFAcVxxxRV54YUXCvaFg7KysvzgBz9Y5L3pAKAYGrL/SjgHhSWYa0Djx4/PLrvskm233TYdO3bMOeeck3fffTf9+/dPp06dMmHChJx99tk56KCD0rNnz3To0CFTp05doJ1Ro0blwAMPzKRJkzJq1KgMGzasLkzYaKON8vvf/z5Dhgyp2/7DDz/M3Xffneuuuy4TJ07M66+/Xrfu6KOPzvHHH5/u3btn8803T9++fTN37tzMmTMn7du3z9tvv1237U9+8pOcccYZSZKrrroqBx10UMrKypIkLVu2THn55//7zJkzJ59++mnduiQ55JBDcuWVVxbw1WQ+4dzyK8Q95e6///5MnDgx1113XTp16pR99tknQ4YMyWWXXZa5c+c2QNUAUBjzp6M88sgjl2m/I444IknywAMPFLwmgGKrra3NueeeW/A2p0+fnhtuuKGg7QLA8mqI/ivhHBROZakLWFXNmDEjBxxwQG655ZbsuuuuqampyYcffpirr746I0eOTKdOnZJ8HrqNHz8+zz77bNq1a7dAOx9//HFeeeWVfOtb38rNN9+czTbbLOuss069bbp06ZKpU6dm+vTpadeuXa6//vr07Nkz7du3zxFHHJGrrrqq3h8eEyZMyEMPPZQ11lgju+22W2699dYceuihOfbYYzN06NCce+65+fTTT3P11VfnH//4R5Lk4YcfzimnnFLveR9//PEcf/zxmTRpUk488cTsv//+9Wr60Y9+tNjXqKqqaple01XF8ty/4Mvmh3N77bVXunfvnrFjx2a77bYrQHWrrkKEcsnngfs222xT73jt2bNnTjzxxLz00kvL9D7Mnj17tT0OACi+N954I0my4YYbZr311su77767wDbnn39+zj///LrH3/jGN3LTTTfV7e+8BTR2kyZNWujn34oqLy/PmDFjcsghhxS8bQBYVoXsv/qi+eFc8vlUmCNHjsxBBx1UkJphdSKYayDjx4/PFltskV133TXJ5xfpbdu2Xei2vXr1WmgolyT33ntv9t5773qj0RZlrbXWSvL5NJa/+c1vkiTHHHNMevbsmSFDhqSioiJJcuCBB6ZZs2ZJkh133DGTJ09Okpx00knZcccdc9ZZZ+Xmm2/OjjvumA033DBJMmXKlAVq7Nq1a1544YW89957Oeigg/Loo49mt912S5K0b98+U6ZMWWy9LVq0WOLvtCpq0qRJdtpppxVu58vh3FNPPZVNNtmkABWuep5//vmChHJJMm3atAWOhfmPl3T/yC/bYostlrsOAFhey3Id8tZbb2XnnXdOktx6662+FQuwCNXV1bnpppvqvswAAA1hafqIk8L2X33Zl8O5e++9N3vuuecKtQmrG1NZrgQWF1DdfvvtOeCAA5Ik2223XSZNmpT//Oc/9bYZP358tt5667Rq1SoTJkzI888/n+OOOy4bbbRRevfunffffz/33ntv3fZrrrlm3b8rKirq5tVfb731sttuu2XkyJG57LLL8v3vf79uu2bNmi1yvvyvfvWr6dWrV72bXc+ZM6cuKKThtG7dOrvssks++OCDFT6prsqmTJmSWbNmZY899lihUA4AAAAAVneVlZXZe++9U11dnUmTJpW6HGh0jJhrIF27ds2kSZPy6KOP1pvKslWrVpk5c+ZStTF37tyMHz++7hsIm222Wfr06ZOBAwfmr3/9a5o1a5Y333wzZ5xxRn7/+98n+Xy03Kmnnprzzjuvrp2hQ4dm+PDh6d279xKfc/DgwTn44IPTokWL9OjRo255x44d8+qrr9aNAHzllVey+eabp7y8PB9//HHuvvvuHHXUUXXbv/zyy9l2220X+1yzZs1aqtdhVTP/NVxRtbW1+clPfpKLLrooF154Yf73f/+3IO2uinr16pWzzjorZ511Vpo2bZof//jHy91W+/bt8+STT9ZbNn369Lp1y+LVV1/Neuutt9y1AMCyePDBB3PAAQekd+/eufHGG+uWV1VV1X179vvf/36968gk+c53vpPRo0fnjjvuSPfu3YtaM0Ch/eMf/6j3t26hlJeX59vf/nbuuuuugrcNAPO1bt16qbYrZP/VwowYMSLf+9738r3vfS8nnHDCCrcHqxvBXANZe+21c/vtt+fUU0/Nxx9/nPLy8gwZMiQ/+MEPctxxx6VZs2a55pprFtvGuHHjsssuu6RJkyZ1y6699tr8/Oc/zzbbbJPy8vK88cYbGT16dHr27Jk5c+ZkxIgReeSRR+q1c8ghh+S0006r+/BdnJ133jmtW7fO8ccfX29odL9+/XLttddmwIABSZKRI0dm5MiRadKkSaqrq9OvX7+6dUkyZsyY9OvXb7HPtbqOXCovX/GBqvNDufPOOy8XXnjhAvf/Y0Fnn312kuTMM89MkuUO57p06ZJf//rX+fe//5111103SfLAAw+kVatW2WqrrZaprWbNmq22xwEAxbfvvvvmm9/8ZkaPHp2HH344++677wLbNG3atN656Z577sno0aPzzW9+M7169UplpT8fgMZt1113zZprrrnIGWGWV1lZWXr06OH6HoCVQiH7r75sxIgROeqoo/Ld7343V155ZUH6OmF14y/rBrTzzjvnscceW2D5FwOsTp06LbD+zTffTJKccMIJddNYzrfGGmvkt7/9bX7729+mpqYmP/7xj3PmmWdmxx13TNu2bTNjxowF2ltnnXVSVVWVJAuEgRdccEG9x++8807+85//5Oijj663fN99980555yTKVOmZP31168bfbQw77//fp555plcfvnlC13PihHKLb9ChHN77bVXttpqqxx55JH57W9/m2nTpuVnP/tZBg0alDXWWKOQ5QJAQVVWVubSSy9Nz549c+ihh+b2229f7Ai4sWPH5jvf+U4qKiryxz/+USgHrBKaNm2aY445Jpdffnmqq6sL1m55eXm9WWQAoJQaqv9KKAeF4chZif35z39e7Kiz8vLy/Pa3v82zzz6btm3brvDz/eIXv8hOO+2U8847Ly1btlzguS6//PK60HBxJk+enD//+c9p2rTpCtdEfUK5FXf22WfnrLPOyplnnrnAVF1Lo6KiIqNHj05FRUW6dOmSI444IkcddVR++ctfNkC1AFBY3bt3z2WXXZaqqqr07NkzJ510UiZOnFi3/thjj83EiRMzaNCg9OzZM1VVVbnssssaZNo3gFL56U9/mjXWWKPeLDErory8PIMHD876669fkPYAYEU1RP+VUA4Kx9deqfPLX/5ysR/OnTt3Xqp2dtppp0KVxBcI5QpnRUfObbjhhrnnnnsKXRYAFMXxxx+f9ddfP8cee2yGDh2aoUOH1q373//933z44YdJknbt2mX48OELnfISoDH7+te/npEjR2a//fZb4bYqKiqy00475de//nUBKgOAwilk/5VQDgrLEQSNgFCu8JZl5Nyf/vSntGjRIi+88MJStT1ixIi0aNEijz76aCFKBYCC23fffTN58uRcfPHF+fa3v123vEmTJunWrVv+8Ic/ZPLkyUI5YJXVu3fvXHPNNamsrExFRcVytVFWVpZvfetbufPOO80YA0DJNVT/lVAOCs+IOVjJCeUaztKMnBsxYkQ++eSTJMk3vvGNpWp3v/32qxs52qZNmxUvFAAaQPPmzTN48OAMGDAgLVq0SJK88cYbad68eYkrAyiOo446Kh07dkz//v3z2muvpbKyMvPmzVvifhUVFampqcnPfvaz/PznP0+TJk2KUC0ALFpD9V8J5aBhCOZgJSaUa3hL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MnPmzBx//PHZeOONs8UWW6Rz58654447Ftjn6quvTllZWR599NGC1XHwwQdn/PjxSZJLLrkkHTp0yDbbbJOOHTvmuuuuq9tu9OjRGThwYMGeFxor4RwAAACwMhPKwdK7+OKLM23atMVus9FGG2XChAl1j//9739n6623TpLMnTs3Z5xxRjbddNNsueWW6dChQ4YPH75AGw899FDKysry17/+tWC1n3baabnxxhuTJLfffns6duyYTp06ZauttspPf/rT1NbWJtG3XwyCuUbi9ttvzwEHHJDa2tr06tUrTZo0yWuvvZZXX301w4cPz4knnph77rmn3j7Dhw9P9+7dF3pgL48nn3wyM2bMSJcuXZIkW2+9dR577LG88MILufvuu/PDH/4wkydPTpL07t07zzzzTCZNmlSQ54bGTDgHAAAArIyEcrBsFhfM1dTUpKamZoHld9xxR/bbb78kydFHH53XX389zz33XF5++eWMHj06F1xwQYYOHVpvn0L37b/zzju555570r9//yRJjx49MmHChLqfBx54IKNGjUqib78YBHMN5PDDD88OO+yQjh07Zt999820adPy5ptvpk2bNjnrrLPSuXPnbLrppvXCtPHjx2eXXXbJtttum44dO9YbBXfnnXdm//33z9ixY/Ovf/0rF154YSorK5MknTp1ys9+9rMMGTKkbvtXX301b7zxRq699tqMGjUqH330Ud263XffPaeddlp23XXXbLLJJjnhhBOSJO+++27atWuX2bNn12172GGH1X0oXH755TnssMPq1nXv3j2tW7dOkmywwQZp37593n777br1hxxySK688sqCvJ7Q2AnnAAAAgJWJUA4W78v99eecc07efffd9O/fP506dcqECRNy9tln56CDDkrPnj3ToUOHTJ06dYF2Ro0alQMPPDCTJk3KqFGjMmzYsDRv3jzJ56Prfv/739fr2//www9z991357rrrsvEiRPz+uuv1607+uijc/zxx6d79+7ZfPPN07dv38ydOzdz5sxZoH/+Jz/5Sc4444wkyVVXXZWDDjooZWVlSZKWLVumvPzzeGjOnDn59NNP69Yl+vYbWmWpC1hVXXzxxfnqV7+aJDnvvPNy9tln58c//nFmzpxZdxCPGTMmgwcPTq9evTJjxowccMABueWWW7LrrrumpqYmH374YZJk0qRJadWqVdq3b59rr702nTt3TtOmTes9X5cuXXLqqafWPR4+fHiOPPLIfP3rX0+3bt1y44031ht+Onny5Dz00EP57LPPstVWW2X8+PHp0qVLevTokeuuuy4DBw7M9OnT8+CDD2bYsGFJkocffjinnHLKQn/fBx98MB988EG+9a1v1avpRz/60WJfp6qqqqV/UVdhX3wdvCYrn3nz5hWknfnhXLdu3dK9e/eMHTs266yzTkHaBgAAAFhaDRXKzZs3T9/WSka/46LND8cWZlH99VdffXVGjhyZTp06Jfk8dBs/fnyeffbZtGvXboF2Pv7447zyyiv51re+lZtvvjmbbbbZAv2BXbp0ydSpUzN9+vS0a9cu119/fXr27Jn27dvniCOOyFVXXZVzzz23bvsJEybkoYceyhprrJHddtstt956aw499NAce+yxGTp0aM4999x8+umnufrqq/OPf/wjycL79h9//PEcf/zxmTRpUk488cTsv//+9WpaUt8+y08w10Cuv/76/PWvf82cOXMyZ86cfOUrX0mSrLnmmunbt2+Sz//nnj/14/jx47PFFltk1113TZKUl5enbdu2Sf47jeWSrLXWWkk+PwFee+21eeSRR5IkxxxzTIYMGVIvmOvfv38qKytTWVmZTp06ZfLkyenSpUsGDx6c4447LgMHDswVV1yRQw89NC1atEiSTJkyZaEfLi+88EK+973vZeTIkfU+zNq3b58pU6Ystub5bfNfC3uNKb2ePXsWpJ0OHTrk8ssvT9++fXPTTTflxBNPLEi7AAAAAEvrpptuynPPPZfbbrutYKFcbW1t7rjjDv19KzH9jvXNv6fawiyuv/7LevXqtcjX9t57783ee+9dbzTaoszv3x8+fHh+85vfJPm8b79nz54ZMmRIKioqkiQHHnhgmjVrliTZcccd6zKGk046KTvuuGPOOuus3Hzzzdlxxx2z4YYbJll4337Xrl3zwgsv5L333stBBx2URx99NLvttluSpevbZ/mZyrIB/P3vf88ll1ySe+65Jy+++GIuvPDCzJkzJ0myxhpr1B2EFRUVqa6uXmJ7o0aNqgvmtt9++zzzzDP57LPP6m0zfvz4dO3aNcnnN2f88MMP07Nnz2y00UYZNGhQ/vnPf+bFF1+s237NNdes+3dFRUXdiKAdd9wxzZo1y0MPPZRhw4Zl0KBBdds1a9as7veYb+LEiendu3euuuqq7LLLLvXWzZkzp+7DBPjca6+9lkGDBmXLLbesC+kBAAAAiqlv377ZcsstM2jQoLz22mulLgcatcWF0V8cdLPddttl0qRJC9ziZvz48dl6663TqlWrTJgwIc8//3yOO+64bLTRRundu3fef//93HvvvXXbL6pvf7311stuu+2WkSNH5rLLLsv3v//9uu0W1rc/31e/+tX06tUrN998c90yffsNy4i5BvDBBx+kZcuWWWeddTJ37txcfvnlS9yna9eumTRpUh599NF6Q2M//fTTzJo1K5tttlmSpFu3btlggw1yyimn5OKLL05lZWUmTJiQiy66KLfcckuSzxP1iy++uO7ecUlyxhlnZPjw4bnooouWWMvgwYNz1FFHZauttsrmm29et7xjx4559dVXs8EGGyRJXn755fTq1SvDhg3LnnvuuUA7L7/8crbddtvFPtesWbOWWM/qoKqqqu4bC9OnT1/sMGqK7/DDD8+nn366wu289tpr2X333dOmTZs89NBDvqUEAAAAlES7du3y0EMPZY899sjuu++ehx9+uF4/4PIoKyvL/vvvnxEjRhSoSgpBv+PyWVR/fatWrTJz5sylamPu3LkZP358rr322iTJZpttlj59+mTgwIH561//mmbNmuXNN9/MGWeckd///vdJPu/bP/XUU3PeeefVtTN06NAMHz48vXv3XuJzDh48OAcffHBatGiRHj161C2f37c/fwTgK6+8ks033zzl5eX5+OOPc/fdd+eoo46q235p+vZZfoK5BrD33nvnuuuuyxZbbJF11lknPXr0yDvvvLPYfdZee+3cfvvtOfXUU/Pxxx+nvLw8Q4YMyTvvvJP99tuvbrvy8vLce++9Of300+tOllOnTs0TTzyRjh075t13383YsWNzzTXX1Gv/8MMPT/fu3XP++ecvsf5+/frlxBNPrJeoz19+33331R3QP/jBDzJz5sycccYZdTeRPP/88+um/BszZkz69eu32OdyIlhQ8+bNvS4rmcrKyhUO5oRyAAAAwMqkIcK5yspK/VorMf2OS29R/fU/+MEPctxxx6VZs2YL9MF/2bhx47LLLrukSZMmdcuuvfba/PznP88222yT8vLyvPHGGxk9enR69uyZOXPmZMSIEXW3qJrvkEMOyWmnnZbp06cvse6dd945rVu3zvHHH19v+sx+/frl2muvzYABA5IkI0eOzMiRI9OkSZNUV1enX79+deuSpevbZ/mV1S5uIlVKbu+9986vfvWr7LDDDgtdP2fOnAwYMCD//ve/c+edd9Ybxrq8nn766Rx22GF55ZVXUl7+39lOZ82ala5du2b8+PFL/AB///33061btzz99NNp2rTpCte0qquqqqob8jxr1iwnyJVMv379UlVVVW/I+LIQygGwMnMdArAgn43A6mT69OnZY4898uGHH65QOLfPPvukefPmdbN6sXJwTiudE044IT169FhkwFVTU5Mf//jHeeCBBzJ27NhF3sNuWbzzzjvZYYcd8tprr6Vly5b1nmvHHXfMqFGjsv766y+2DX37DU8wRz0DBgzI/fffnyuvvDJ77bXXAuvHjh2bdu3aLfGmsE888USqq6vr7nvH4jlBrtxWJJgTygGwsnMdArAgn43A6qYQ4ZxgbuXknLb6+MUvfpGrrroqv/71r/Pd7353gfXPPPNMPvnkk+yyyy6LbUfffsMTzMFKwAly5ba8wZxQDoDGwHUIwIJ8NgKroxUN5wRzKyfnNFj5lC95EwCWlVAOAAAAaEzm33OuTZs22X333fPaa6+VuiSAVZJgDqDAhHIAAABAYyScA2h4gjmAAhLKAQAAAI2ZcA6gYQnmAJZCbW1tampq6n4WdntOoRwAAACwKliacG5p+koAWJBgDmAJWrRokfvuuy8VFRV1P0cffXS9bYRyAAAAwKpkSeHc0UcfXa+v5L777kuLFi1KVC1A41FW66sMUHJVVVV1Fy6zZs1K8+bNS1wRX/TBBx/k9ttvr3t866235pVXXsnkyZOTCOUAaNxchwAsyGcjwH9Nnz49e+yxRz788MM8/PDD2XzzzZMkm2yySb75zW/moIMOqtv2wAMPzNprr12qUlkI5zRY+VSWugCAld3aa6+dY445pu7x66+/nldeeSWJUA4AAABYtc0fObfHHntk9913rxfObbvttvX6TABYMlNZAiyn1157Lbvssktat24tlAMAAABWWfPDudatW2eXXXZZ6D3nAFg6RswBLIcPPvggu+yyS2bMmJF//OMfQjkAAABgldauXbvcfffd2XzzzbPLLrtk3rx5pS4JoFESzAEshw8++CAVFRWprq4WygEAAACrhXbt2qW6ujozZsxIdXV1qcsBaJRMZQmwjA466KAcddRRLkABAACA1VJ1dXWOOuqoHHTQQaUuBaDRKautra0tdRGwuquqqkqLFi2SJLNmzUrz5s1LXBFL4j0DYFXhnAawIJ+NAAvn87Hx8Z7ByseIOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAACzUtGnTcvLJJ2fjjTfOGmuskQ022CB9+vTJ2LFjc/bZZ6esrGyRP+ecc069to4++ui8+eabC32eha277bbbsueee+arX/1qWrVqlS5duuS+++5bYs3PP/98dt1116y55prZYIMN8tvf/nZ5f30AKDjBHAAAAACwgDfffDOdO3fOuHHj8rvf/S4vvPBCxowZkz322CODBg3KaaedlqlTpy7wc/TRR6dNmzY57LDDMmPGjFx22WWpra2ta3fy5MkZMWLEYtclyd/+9rfsueeeueeee/LMM89kjz32SJ8+ffLss88usuaPPvooe+21VzbccMM888wz+d3vfpezzz47w4YNa7gXCgCWQWWpCwAAAAAAVj4nnXRSysrK8uSTT6Z58+Z1y7feeuscc8wxadGiRVq0aFFvnxEjRuSvf/1r7r777my22WaZPXt23nnnney9996prq7On//85zz22GM5//zzs+aaay5yXZJcfPHF9do+99xzc8cdd+Suu+7Kdtttt9CaR4wYkblz5+aqq65K06ZNs/XWW2fChAm58MILM3DgwMK+QACwHARzAAAAAEA9M2bMyJgxY/LrX/+6Xig3X5s2bRZY9swzz+S4447Leeedl549eyZJmjVrlnPPPTf33HNP9ttvv8ybNy/jxo1LkyZNkmSx676spqYmH3/8cdq2bbvIusePH5/ddtstTZs2rVvWs2fPnH/++fnggw+y9tprL8vLAAAFZypLAAAAAKCe119/PbW1tfnmN7+5VNv/+9//zoEHHpiDDjoop512Wt3yOXPm5Be/+EX+8Ic/ZPfdd8/OO++cHj165Mknn1zsuoW54IILMmvWrBxyyCGLrGPatGlp165dvWXzH0+bNm2pfhcAaEiCOQAAAACgni/e921JPvvss/Tr1y/t2rXLFVdcUW/d7Nmz065du4wZMybrr79+TjjhhFx11VV57bXXFrvuy66//vqcc845uemmm7Luuuuu8O8HAKViKksAAAAAoJ7NNtssZWVleeWVV5a47Q9+8INMmjQpTz31VNZcc81669q2bZtBgwbVW7bJJptkk002SZLFrpvvxhtvzIABA3LzzTenR48ei62lffv2mT59er1l8x+3b99+ib8LADQ0I+YAAAAAgHratm2bnj175rLLLktVVdUC6z/88MMkybBhw3LVVVfl1ltvzfrrr7/YNq+55ppstNFGy7TuhhtuyPe+973ccMMN2XfffZdYd5cuXfK3v/0tn332Wd2yBx54IFtssYX7ywGwUhDMAQAAAAALuOyyy1JdXZ0dd9wxt956ayZNmpSXX345l1xySbp06ZLHHnssJ598cn7xi19k4403zrRp0+r9zJw5c4We//rrr89RRx2V3//+99lpp50W2u6ll16a7t271z0+7LDD0rRp0xx77LF56aWXMnLkyPzhD3/Ij370oxWqBQAKRTAHAAAAACxg4403zj//+c/sscceOfXUU9OhQ4fsueeeGTt2bIYOHZorr7wyc+fOzc9+9rN87WtfW+Bn8ODBK/T8w4YNy7x58zJo0KBFtvv+++9n8uTJdY9bt26d+++/P2+88UY6d+6cU089Nb/4xS8ycODAFaoFAAqlrHZZ7uQKNIiqqqq0aNEiSTJr1qw0b968xBWxJN4zAFYVzmkAC/LZCLBwPh8bH+8ZrHyMmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAogspSFwAAAAAArB5qa2vz7LPP5pFHHsnMmTMze/bsNGvWLK1bt863v/3tbLfddikrKyt1mQDQYARzAAAAAECDeuaZZ3LzzTfnhhtuyFtvvZXy8vJUVFTUra+urk5NTU2+8Y1v5NBDD83BBx+czp07l7BiAGgYprIEAAAAABrEBx98kO985zvZYYcdcsEFF+Stt95KktTU1OSzzz6r+6mpqUmSvPXWW7nggguyww475NBDD80HH3xQyvIBoOAEcwAAAABAwb300kvZZpttcssttyT5fFTc0pi/3c0335xtttkmL730UoPVCADFJpgDAAAAAArqnXfeyR577JFp06YtdSD3ZdXV1Zk2bVq6deuWd955p8AVAkBpCOYagaeffjr77LNPkmTmzJk5/vjjs/HGG2eLLbZI586dc8cddyywz9VXX52ysrI8+uijBavj4IMPzvjx45Mkd999dzp37pw11lgjP/zhD+ttd+mll+bcc88t2PMCAAAA0HjU1tamX79++eCDD5Y7lJuvuro6M2bMSL9+/VJbW1ugCgGKR/8+XyaYawRuv/32HHDAAamtrU2vXr3SpEmTvPbaa3n11VczfPjwnHjiibnnnnvq7TN8+PB07949w4cPL0gNTz75ZGbMmJEuXbokSTbbbLNcddVVOf300xfYduDAgRk+fHhmzpxZkOcGAAAAoPG444478o9//CPz5s0rSHvz5s3LP/7xj9x5550FaQ+gmPTv82WCuQbyySefpH///tlqq62y7bbbZq+99krv3r1z/fXX121z//33Z6eddkqSXHnlldlqq63SqVOnbLPNNnniiSfqtrvzzjuz//77Z+zYsfnXv/6VCy+8MJWVlUmSTp065Wc/+1mGDBlSt/2rr76aN954I9dee21GjRqVjz76qG7d7rvvntNOOy277rprNtlkk5xwwglJknfffTft2rXL7Nmz67Y97LDDMnTo0CTJ5ZdfnsMOO6xu3eabb55tt922ro4vatq0afbaa696vysAAAAAq4ehQ4emvLyw3Y7l5eX505/+VNA2ARZF/77+/Ya04KtOQYwZMyYffvhhJk6cmCSZMWNGnnnmmZx11ll1B8Bll12W73//+0mSU089Na+88kq+9rWv5bPPPsunn36aJJk0aVJatWqV9u3b59prr03nzp3TtGnTes/VpUuXnHrqqXWPhw8fniOPPDJf//rX061bt9x4440ZOHBg3frJkyfnoYceymeffZatttoq48ePT5cuXdKjR49cd911GThwYKZPn54HH3www4YNS5I8/PDDOeWUU5b69+/SpUvuvPPOnHjiiYvcpqqqaqnbW9V98bXwujQO3jMAVhXOaQAL8tkIy2/evHl59NFHU1NTU9B2a2pq8uijj2bmzJkL7UimOHw+Nj7es0Vr3rz5Itfp319y/z7Lz1msgWy77bZ5+eWXc9JJJ+Xb3/52evXqlT333DM//OEP8+yzz6Zt27Z58sknc9NNNyVJunfvniOPPDJ9+vTJPvvsk8033zzJf4e5Lslaa62V5POLn2uvvTaPPPJIkuSYY47JkCFD6h24/fv3T2VlZSorK9OpU6dMnjw5Xbp0yeDBg3Pcccdl4MCBueKKK3LooYemRYsWSZIpU6akXbt2S/37t2/fPlOmTFnsNvPbpr5leZ1ZOXjPAFhVOKcBLMhnI6w8Pvnkk7Rp06bUZfD/8/nY+HjP6lvcfSv17y+5f5/lZyrLBrLxxhtn4sSJ2XvvvfPYY4+lQ4cO+eCDD/KDH/wgf/zjH/PnP/85xxxzTNZYY40kya233przzjsvn332WXr16pUbb7wxSTJq1Ki6A3f77bfPM888k88++6zec40fPz5du3ZNkowePToffvhhevbsmY022iiDBg3KP//5z7z44ot126+55pp1/66oqKib73vHHXdMs2bN8tBDD2XYsGEZNGhQ3XbNmjXLnDlzlvr3nzNnTt2HCQAAAAAANBb69/XvNyQj5hrIlClTsvbaa2e//fbL3nvvnVGjRuXtt9/OkUcemV/+8peprq7OU089leTzFPzNN9/MDjvskB122CHvv/9+nnzyyXz729/OrFmzstlmmyVJunXrlg022CCnnHJKLr744lRWVmbChAm56KKLcssttyT5fJjrxRdfXDe3bJKcccYZGT58eC666KIl1j148OAcddRR2WqrrepS/STp2LFjXn311WywwQZL9fu//PLL2XbbbRe7zaxZs5aqrdVBVVVV3TcWpk+fvthh1KwcvGcArCqc0wAW5LMRll9tbW023HDDzJgxo+Btr7POOnnzzTdTVlZW8LZZOj4fGx/v2fLRv7/k/n2Wn2Cugbzwwgs588wzU1tbm3nz5uXII49Mx44dkyR9+/bNu+++W3cQVFdX55hjjsmMGTNSWVmZr371q7n66qtzxx13ZL/99qtrs7y8PPfee29OP/30uoNq6tSpeeKJJ9KxY8e8++67GTt2bK655pp6tRx++OHp3r17zj///CXW3a9fv5x44ol1c+N+cfl9992XHj16JEnGjh2b7373u/noo49SW1ubW265JX/605/q6h0zZky9G1YujJPAwjVv3txr08h4zwBYVTinASzIZyMsu549e+bmm2+uG8VRCJWVlenZs6dbo6xEfD42Pt6zpad/f8n9+yy/strFTaRKwVVXV6dz58754x//mF133XWx2+6999751a9+lR122GGh6+fMmZMBAwbk3//+d+688856Q1iX19NPP53DDjssr7zySsrL/zvT6axZs9K1a9eMHz9+iR/eEydOzPHHH59HH310hetZXVRVVdVdWM6aNcsJshHwngGwqnBOA1iQz0ZYMc8++2y23377Bmm3U6dOBW+XpefzsfHxnhWW/n0KwT3miujOO+/MJptski5duizxoE0+T6UXddAmn88le9111+X+++8vyEE7YMCA9O3bN5deemm9gzZJWrRokYsuuihvvPHGEtt5++23c/nll69wPQAAAAA0Ptttt12OOeaYBfqXlld5eXmOPfZYoRxQUvr3KRQj5mAl4JsrjY/3DIBVhXMawIJ8NsKKmzNnTnbfffc8/fTTqa6uXu52KioqssMOO+SRRx7JGmusUcAKWR4+Hxsf7xmsfIyYAwAAAAAKas0118z999+fvffee4Xa2XvvvXP//fcL5QBYZQjmAAAAAICCa9WqVe66664MHTq0bsROZWXlYveZv75ly5YZOnRo7rrrrrRq1arBawWAYhHMAQAAAAANoqysLCeccEL+85//5O67784RRxyRli1bLnTbli1b5ogjjsjdd9+d999/PyeccELKysqKXDEANKzFf0UFAAAAAGAFNW3aNL169UqvXr1y+eWX58UXX8y0adOy7777Jkn+/ve/51vf+laaNm1a4koBoGEJ5gAAAACAomnatGm23377VFVV1S3r1KmTUA6A1YKpLAEAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHACrtOrq6nTt2jV9+/att3zmzJnZYIMN8tOf/rRElQHAsnFOAwAAaPwEcwCs0ioqKnLNNddkzJgxGTFiRN3yk08+OW3bts1ZZ51VwuoAYOk5pwEAADR+laUuAAAa2uabb57zzjsvJ598crp165Ynn3wyN954Y5566qk0bdq01OUBwFJzTgMAAGjcBHMArBZOPvnk3H777TnyyCPzwgsv5Be/+EW23XbbUpcFAMvMOQ0AAKDxEswBsFooKyvL0KFDs+WWW2abbbbJj3/841KXBADLxTkNAACg8XKPOQBWG1dddVWaNWuWN954I1OmTCl1OQCw3JzTAAAAGifBHACrhccffzwXXXRRRo8enR133DHHHntsamtrS10WACwz5zQAAIDGSzAHwCpv9uzZOfroo3PiiSdmjz32yPDhw/Pkk0/mz3/+c6lLA4Bl4pwGAADQuAnmAFjlnXnmmamtrc15552XJNloo41ywQUX5P/+7//y5ptvlrY4AFgGzmkAAACNm2AOgFXaI488kssuuyxXX311mjVrVrf8+OOPT9euXU3/BUCj4ZwGAADQ+FWWugAAaEjf/va3M2/evIWuu++++4pcDQAsP+c0AACAxs+IOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzEGRjR07NptttlnGjBlT6lIAAAAAYIX95S9/yRZbbJHnn3++1KWwGDvssEMuvfTSUpcBqz3BHBTR2LFj07t377z++usuVAAAAABYJTzxxBN57bXX0q1bN31eK6mKioq88sorefzxx0tdCqz2BHNQJPNDuT322COtWrUqdTkAAAAAUDCbbrppNtxwQ+HcSub1119PRUVFNt5443Ts2LHU5QARzEFRfDGUu+2221JZWVnqkgAAAACgYFq1apUHHnhAOLcSmTRpUvbZZ59svPHG+dvf/pavfOUrpS4JiGAOGtyXQ7k111yz1CUBAAAAQMG1bdtWOLeSmDRpUnbfffe0adMmf/vb39K+fftSlwT8/wzbgQa0uFDupptuyssvv5wkmTdvXt3yE044YZlH1H3729/O0UcfXZCaAQAAAFi11dbW5ve//31eeumlZdpvUX1Y48ePT/PmzZP8N5zbc889061bt4wbN84UikU2P5Rr3bp1xo0bVy+U+8c//pHvfe97dY+PPPLIdOvWrRRlwmqrrLa2trbURcCqaHGh3G9+85uMHj263vbzL2yWNZSbNm1a/vWvf9W7MKLhVVVVpUWLFkmSWbNm1V18AkBj45wGsCCfjVAcjrXSmTJlSjbYYINsueWWWXvttZdp30X1YR133HH1vjg+Y8aM7LnnnvnXv/4lnCuixYVyt9xySy666KK6x5MnT87666+fp59+uhSlwmpLMAcNoJjTV15++eUZNGiQYK7I/PEAwKqgqqoqb731VrbaaqskyauvvpqNNtooTZs2LXFlAKXleh+Kw7FWOvODuTFjxqRnz54N9jzCueJaXCi3MCeeeGKeeuopwRwUmXvMQYG5pxysXKqqqnLJJZeke/fuad++fZo2bZr27dune/fuueSSSzJ79uxSlwhQVDNmzMhVV12Vnj17pnXr1nWhXJJsscUWWWeddfLd7343o0ePzqefflrCSvky5zQAoLFxz7niWdZQDigdwRwUkFAOVi533313Nt100wwePDjjxo3LnDlzsv7662fOnDkZN25cBg8enE022SR33313qUsFaHDvvvtuDjzwwKy77ro59thjM3bs2FRXVy+w3axZs3L99denT58++cpXvpL/+7//y5w5c0pQMV/knAYANFbCuYYnlIPGRTAHBSKUg5XLsGHDst9+++W9997LgAED8txzz2XixIm57bbb8vLLL+f555/Pcccdl/feey/77bdfhg0bVuqSARrM6NGjs9VWW2X06NF1YdzCQrn55k+RPWvWrPz+97/P9ttvn9dee60otbIg5zQAoLETzjUcoRw0PoI5KIClDeV23333lJWVpaysLBMmTFiqtq+55pq6fX74wx8WrmhYhY0bNy4nnXRSmjdvnjFjxuSKK65Ix44dc+GFF2a77bbLH/7wh2yzzTYZNmxYxowZk2bNmuWkk07Kgw8+WOrSAQrulltuyX777ZePPvpoue5JW1NTk9deey077bRTJk2a1AAVsjjOaQBAsTVU/5VwrvCEctA4CeZgBS3rSLnjjjsuU6dOTYcOHZIkb731Vvbdd980a9Ys6667bk4//fR6nWb9+/fP1KlT06VLlwb9PWBVMW/evAwaNCjV1dUZMWJEevTosdjte/TokRtuuCHV1dU5+eSTl6vTGmBlNWHChBxxxBFJktra2uVup7q6OrNmzco+++yTjz/+uFDlsQTOaQBAqTRU/5VwrnCEco3L008/nX322SdJMnPmzBx//PHZeOONs8UWW6Rz58654447Ftjn6quvTllZWR599NGC1XHwwQdn/PjxSZJLLrkkHTp0yDbbbJOOHTvmuuuuq9tu9OjRGThwYMGel/oEc7AClmf6ymbNmqV9+/aprKxMdXV19t1338ydOzePP/54/vKXv+Saa67JL37xi7rt11prrbRv3z5NmzZtyF8FVhljx47NK6+8kj59+qRPnz5LtU/v3r3Tp0+fvPLKKxk3blwDVwhQHLW1tXXhzIqEcvPNmzcvb7zxRi688MICVMfScE4DAEqlIfuvhHMrTijX+Nx+++054IADUltbm169eqVJkyZ57bXX8uqrr2b48OE58cQTc88999TbZ/jw4enevXuGDx9ekBqefPLJzJgxoy5A33rrrfPYY4/lhRdeyN13350f/vCHmTx5cpLP/6545plnzJrSQARzsJwKcU+5+++/PxMnTsx1112XTp06ZZ999smQIUNy2WWXZe7cuQ1QNaz65k/ddeSRRy7TfvNHlDzwwAMFrwmgFMaPH5+///3vi72X3LKqqanJb3/723zyyScFa5NFc04DAFYGDdF/JZxbfkK54jj88MOzww47pGPHjtl3330zbdq0vPnmm2nTpk3OOuusdO7cOZtuumm9MG38+PHZZZddsu2226Zjx471RsHdeeed2X///TN27Nj861//yoUXXpjKysokSadOnfKzn/0sQ4YMqdv+1VdfzRtvvJFrr702o0aNykcffVS3bvfdd89pp52WXXfdNZtssklOOOGEJMm7776bdu3aZfbs2XXbHnbYYRk6dGiS5PLLL89hhx1Wt6579+5p3bp1kmSDDTZI+/bt8/bbb9etP+SQQ3LllVcW5PWkvspSFwCNUSFCueTzD+ttttkm7dq1q1vWs2fPnHjiiXnppZey3XbbLXVbVVVVy1UDy+eLr7fXfuXyxhtvJEk23HDDrLfeenn33XcX2Ob888/P+eefX/f4G9/4Rm666aa6/b2nwKrgrrvuSkVFRUGDuSSZPXt2Hn744ey2224FbZcFOadB6bjeh+JwrJXOFzvul6SQ/VdfND+c23PPPdOtW7eMGzcuHTt2XK62VhcNEcrV1NSslsdf8+bNF7v+4osvzle/+tUkyXnnnZezzz47P/7xjzNz5sx07Ngx55xzTsaMGZPBgwenV69emTFjRg444IDccsst2XXXXVNTU5MPP/wwyefvW6tWrdK+fftce+216dy58wKjS7t06ZJTTz217vHw4cNz5JFH5utf/3q6deuWG2+8sd7UkpMnT85DDz2Uzz77LFtttVXGjx+fLl26pEePHrnuuusycODATJ8+PQ8++GCGDRuWJHn44YdzyimnLPT3ffDBB/PBBx/kW9/6Vr2afvSjHy39i8pSE8zBMnrssccKEsolybRp0+pd1CSpezxt2rSlbqempiYtWrRY7jpYMV9+D1k57LTTTku97VtvvZWdd945SXLrrbfm1ltvbaiyAFYJvXr1KnUJqxXnNCgt1/tQHI61lVeh+q8W5svh3OOPP57NN998hdpcVb399tsNMlLuxRdfXC37FZc03f/111+fv/71r5kzZ07mzJmTr3zlK0mSNddcM3379k3yeXA1f+rH8ePHZ4sttsiuu+6aJCkvL0/btm2T/HcayyVZa621knx+G4Frr702jzzySJLkmGOOyZAhQ+oFc/37909lZWUqKyvTqVOnTJ48OV26dMngwYNz3HHHZeDAgbniiity6KGH1r2/U6ZMWehn7QsvvJDvfe97GTlyZL3Asn379pkyZcoS62bZmcoSltFTTz2VOXPmZMCAASsUygEAAADA6q5t27Y5/PDD85///CcTJ04sdTkrrcmTJ+fdd99Nv379TF/ZwP7+97/nkksuyT333JMXX3wxF154YebMmZMkWWONNVJWVpYkSz1DyahRo+qCue233z7PPPNMPvvss3rbjB8/Pl27dk2SjB49Oh9++GF69uyZjTbaKIMGDco///nPvPjii3Xbf7FfuqKiIvPmzUuS7LjjjmnWrFkeeuihDBs2LIMGDarbrlmzZnW/x3wTJ05M7969c9VVV2WXXXapt27OnDl1YSGFZcQcLKOTTjopjzzySA499NDcdttt2XfffZe7rfbt2+fJJ5+st2z69Ol165ZWeXl5Zs6cudx1sOyqqqrqvmEyffr0JQ5/p3gefPDBHHDAAendu3duvPHGeut+8pOf5JJLLsmPfvSj/PKXv6y37jvf+U5Gjx6dO+64I927dy9myQAN4sQTT8wNN9xQ9wdaIc3/5iUNyzkNSsf1PhSHY6103nnnnWyxxRZLtW2h+q8W5Yorrsipp56aQYMGZf/991/h9lZV3/72t/PTn/40Q4YMSatWrXLaaacVpN0OHTrk0UcfLUhbq4oPPvggLVu2zDrrrJO5c+fm8ssvX+I+Xbt2zaRJk/Loo4/Wm8ry008/zaxZs7LZZpslSbp165YNNtggp5xySi6++OJUVlZmwoQJueiii3LLLbck+Xway4svvrju3nFJcsYZZ2T48OG56KKLlljL4MGDc9RRR2WrrbaqNwK1Y8eOefXVV7PBBhskSV5++eX06tUrw4YNy5577rlAOy+//HK23XbbJT4fy04wB8uoadOmGTlyZPr375++ffuuUDjXpUuX/PrXv86///3vrLvuukmSBx54IK1atcpWW221TG25eC2d5s2be/1XIvvuu2+++c1vZvTo0Xn44YfrHZ9NmjSp++8X37N77rkno0ePzje/+c306tWr7ua7AI1Z9+7d89e//rVB2t5zzz2d+4rAOQ1WDq73oTgca8XVrFmzpd62kP1XX3bFFVdk4MCBGTRoUP74xz/WjURiQWVlZRkyZEiS5PTTT0+SgoRz5eXljr0v2XvvvXPddddliy22yDrrrJMePXrknXfeWew+a6+9dm6//faceuqp+fjjj1NeXp4hQ4bknXfeyX777Ve3XXl5ee69996cfvrpdaHZ1KlT88QTT6Rjx4559913M3bs2FxzzTX12j/88MPTvXv3eveXXpR+/frlxBNPzPe///0Flt93333p0aNHkuQHP/hBZs6cmTPOOCNnnHFGks/vYd2zZ88kyZgxY9KvX78lPh/Lzl9psBwKFc7ttdde2WqrrXLkkUfmt7/9baZNm5af/exnGTRoUNZYY40GqBxWfZWVlbn00kvTs2fPHHroobn99tsXO1pg7Nix+c53vpOKior88Y9/1IEJrDL233//tGzZMh9//HHB2qysrEyXLl2y4YYbFqxNFs05DQBYGTRU/5VQbtk1VDhHfU2aNMnIkSPrLfv1r3+dJPnwww/rlrVo0aLevep23nnnPPbYY/X223vvvfOrX/2q3rI2bdrkiiuuSJK6WyaddtppufPOO/P1r389s2fPXqCmjh075r333kuSPPzww/XWzR9pN9+ECRPy1a9+dYH+6u9973vp2rVrzj777DRv3jwPPPDAol6CvP/++3nmmWeWarQgy8495mA5zQ/nevXqlb59++buu+9e5jYqKioyevToVFRUpEuXLjniiCNy1FFHLTAdEbBsunfvnssuuyxVVVXp2bNnTjrppLz00ksZNGhQHn300ZxwwgmZOHFiBg0alJ49e6aqqiqXXXZZ3TeGAFYFbdq0yU9+8pOCdnBUV1cv1Tc0KRznNACg1Bqi/0oot/zmh3M//elPc/rpp+eCCy4odUksxpgxY7LDDjsscv2aa66Z6667Lvfff3+9+8YtrwEDBqRv37659NJLU15eP/5p0aJFLrroorzxxhtLbGfy5Mn585//nKZNm65wTSzIVyhhBRRi5NyGG26Ye+65p4EqhNXX8ccfn/XXXz/HHntshg4dmqFDh6ZNmzZp27ZtZsyYUfcNp3bt2mX48OErdL9IgJXV6aefnoceeihjx45dqpuSL8m5556bLl26FKAyloVzGgBQaoXsvxLKrTgj51iUK6+8crHrl/Ye1DvttFMhymERjJiDFbSsI+f+9Kc/pUWLFnnhhReWqv0RI0akRYsWbsIKy2HffffN5MmTc/HFF6dbt25p2rRp3n777TRt2jTdunXLH/7wh0yePFkHJrDKqqioyE033ZSuXbsud4fH/P1+9KMf1d13gOJzTgMAiqmh+q+EcoVj5Bw0XmW1X5wEFVhuc+fOTf/+/XPPPfcscuTcO++8k08++SRJ8o1vfGOphgJ//PHHmT59epLPp6T6yle+Um/95ZdfnkGDBmXevHkF+C1YWlVVVWnRokWSZNasWW6SC8BK7bPPPsuvfvWrDBkyJOXl5Us1eq6srCxlZWVp2bJlrrzySjf9BlYrrvehOBxr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8enZs2c6deoknCshxxmsfHzdHBrAkqav/Mc//pH33nuvIM81evTo/OAHP8i8efMK0h5AqVx//fU58sgjc8ABB+QPf/hDNt1003oj42pqajJ9+vTcfvvt+d3vfpcPP/wwf/7zn0tYMQAsaPbs2enRo0fefvvtnHvuuenevXtatmyZsrKyum0+/fTTPPXUU7nwwgvTo0eP/P3vf89WW21VwqoBWN3MnDkzn376aW677bZ06tSpIG1+7Wtfq/fYyDmAhRPMQYEtzT3lWrRoUbALkXXXXbcg7QCUUm1tbX71q1+lT58+ufXWW+t1Xn7RJptskq5du+ZrX/taTjvttJx99tlp3759kauFxu+jjz7K6NGjM2rUqPzrX/+qW77nnntmm222Sb9+/bLHHnuYNhaWw+jRo/Pss8/m6aefTufOnRe53Te/+c3st99+2XrrrXPZZZflsssuK2KVAPC5r3/96w16exThHMCCzP8EBbQ0oRwAC/p//+//5eWXX86xxx67yFDui44++uiUlZXlnnvuKUJ1sGqora3N7bffnj59+uQrX/lKDj/88Nx222158skn67YZP358rrrqquy11175yle+kuOOOy7//Oc/S1g1ND533XVXtttuu8WGcvO1bt06Bx98cO66664iVAYApTE/nJswYUJ69eqVWbNmlbokgJISzEGBCOUAlt/06dOTfD4ibmm0bds2bdu2zbRp0xqyLFhlzJgxI/369Uvfvn1z77335rPPPkuSVFdXL7Dt/OmxZ86cmWuuuSbf+ta3MmTIkIVuCyxo+vTpS30+S5JNN93U+QyAVZ5wDuC/BHNQAEsbyu2+++4pKytLWVlZJkyYsFRtP/zww3X7HHDAAYUrGmAlUlNTkyTLNG1eZWVl3X7Aor311lvp3Llz7rjjjiQLD+MWZd68eampqclZZ52V/fbbL3Pnzm2oMmGVUVNT43wGQKPWUP1XwjmAzwnmYAUt60i54447LlOnTk2HDh2SJD/4wQ/SuXPnrLHGGgu92W7Xrl0zderUHHLIIQ1RPsBK7+ijj/bFBFhOs2bNSq9evTJlypQVGvFWW1ube++9NyeddFJqa2sLWCGsXpzTAGgsGqr/SjgHIJiDFbI801c2a9Ys7du3r/ct2mOOOSb9+/df6PZNmzZN+/bts9ZaaxWsbgBg9fDzn/88r7zySt30lCuitrY2w4cPz5133lmAygAAWJk1ZP+VcA5Y3QnmYDkV6p5yl1xySQYNGpSNN964wBUCAKuzKVOm5NJLLy3oveHKy8tz5plnGjUHALCaKXT/lXAOWJ0J5mA5FCqUAwBoKHfeeWdBQ7nk83tnvfzyy3nllVcK2i4AAKsf4Rywulr6O1IDSVbeUK6qqiplZWWlLmO1UVVVtdB/A8vnk08+Wa795s6d6xiERXj44YdTXl5e8HCurKwsY8eOzTe+8Y2CtguriuU95pzPVi6u96E4HGulM3v27FKXkOS/4VzPnj3Tq1ev3HPPPWnRokWpywJoUII5WEYXX3xxXn755Tz11FMrTSiXJO3bty91Cautdu3alboEWC199tlnGTJkSIYMGVLqUmC1Ultbm5NPPjknn3xyqUuBlVJ5eXkOOeSQZdqnpqZGJ+RKzPU+FIdjbfXVpUuXXH311enXr1+uu+66nHDCCaUuCaBBmcoSllH//v2z9tpr5/vf/35mzpxZ6nIAAAAAoNGaMmVKzjjjjGy44YbZZ599Sl0OQIMzYg6W0XbbbZcHH3wwPXr0SM+ePXPfffeldevWpS4r06ZN8y3bIqqqqqr7Nt/06dPTvHnzElcEjdvjjz+evfbaa5n2adKkSX7+85/njDPOaKCqoHG76KKLctZZZ6WmpqbgbT/yyCPp3LlzwduFVUHv3r2XeZ/y8nJf+lvJuN6H4nCslc5LL72UnXbaqdRlZMqUKdl9990zb968PPzww9lwww1LXRJAgxPMwXLYfvvtCxbOvf7665k1a1amTZuWTz75JBMmTEiSbLXVVmnatOlSt9O8eXMXsCXitYcVt9Zaay3Xfk2bNnX8wSIceOCB+fnPf17QNsvKyvKVr3wlXbt2TWWlPyVgYSoqKpZrP+ezlZfrfSgOx1pxNWvWbJm2L1T/1Rd9OZTbaKONlqsdgMbGX9OwnAoVzg0YMCCPPPJI3ePtttsuSfLGG2+4IAEAltvWW2+dfv36ZdSoUZk3b15B2qytrc0555wjlAMAWM0Uuv9KKAeszvxFDSugEOHcww8/3DDFAawirrnmmlKXAI3WhRdemIceeigffvhhqqurV6itioqKdOnSJQMGDChQdbD6cU4DoLEqZP+VUA5Y3ZWXugBo7OaHc6+99lp69uy5xHtD/OlPf0qLFi3ywgsvLFX7jz76aFq0aJERI0YUolwAYDWywQYb5K677krTpk2Xe3q95PNQbqONNsqoUaPSpEmTAlYIAMDKqKH6r4RyAEbMQUEs7ci5ESNG5JNPPkmSfOMb31iqtnfYYYe6ebtbtGhRsJoBViZlZWVJkpqamqXep6ampm4/YNG6dOmSJ554Iv369cvrr7++TMfZfL169co111yTtm3bNkCFsGopKytzPgOgUWuo/iuhHMDnBHNQIEsTzq233nrL3O5aa62VTTfdtFBlAqyU2rRpkySZOnVqttxyyyVu/8knn+SDDz6o2w9YvG222SYTJkzIr3/961x11VWZOnVqKisrF3nvufLy8tTU1KRjx4455ZRT8t3vfldwAEupTZs2mTp16lJvP3XqVOczAFYqDdF/JZQD+C9TWUIBLeu0lgB8bsstt8zXvva13HrrrUu1/V133ZXPPvssPXr0aODKYNWx1lpr5Ve/+lWmTJmS8ePHZ/Dgwdlwww2z5pprJvl8lE+zZs3SqVOnnHvuuXn99dfz3HPP5eijjxbKwTLo0aNHHn/88bz77rtL3La6ujq333678xkAqzShHEB9gjkoMOEcwLIrLy/PCSeckD/96U/51a9+lWnTpi10u6qqqtxwww0ZOHBg9thjj2yxxRZFrhQav/Ly8uy888654IIL8uabb+aTTz7JZ599lnnz5qWqqirPPvtszjjjjGyyySalLhUapb59+6Zt27bp1atXHn744VRXVy90u5deeimHH354Jk6cmOOOO67IVQJAcQjlABZUVltbW1vqImBV9M9//jM9evTI5ptvvsC0ln379s3DDz9cb/v5U0lVVi7bDLOffvppPv3003z00Udp1qzZCtfN0qmqqqqbM33WrFlp3rx5iSuCxq+2tjannXZaLrnkksybNy8tW7as95lYU1OTjz/+ODU1NenRo0duvfXWtGrVqoQVA8DCvfTSS+nTp0/eeOONNGnSJM2bN6838vTTTz/N7Nmz06pVq1x++eX5zne+U8JqWRjX+1AcjrXSee2117LFFlss8HfX0lhUH9ZRRx2Viy++uO6xUG7l4DiDlY9gDhrQosK5ioqKHHDAAdlpp52SJHPnzs3Pf/7zJMmQIUPStGnTZXqe7bbbLnvuuWdhi2exXNRAw/nPf/6T++67L1OnTq03yqCsrCxt2rRJt27djOQBYKVXU1OTJ598Mk8//XRmz55db13Tpk2z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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "We see in the above example that changing the lowest order bit in the query requires us to only change the last ancilla bit, which makes intuitive sense. \n", - "TODO: Should write something about how this actually encodes a Segment tree?\n", + "from qualtran.bloqs.basic_gates.identity import Identity\n", "\n", - "Now that we have a data structure that can query the state of `ctrl` given `q` our next goal is to extend it to act on a quantum `ctrl` register and utilize ancilla *qubits*, not bits. The key point to remember is that the query is still classical. Now the first thing we have to do to update our boolean logic to be reversible, as we currently just set our classical `ancilla_bits` to whatever we need them to be. One thing to keep in mind is that the uncomputation works in reverse, if we have ancillas $[c_0 \\land c_1, c_0 \\land c_1 \\land c_2, c_0 \\land c_1 \\land c_2 \\land c_3]$ we would uncompute them as $\\to [c_0 \\land c_1, c_0 \\land c_1 \\land c_2, 0] \\to [c_0 \\land c_1, 0, 0]$. One of the key insights is that when we uncompute and then recompute the ancillas, the most significant ancilla can simply be updated instead of uncomputed. This is the $Toffoli(a,b,c) \\cdot I \\otimes X \\otimes I \\cdot Toffoli(a,b,c) = CNOT(a, c) \\cdot I \\otimes X \\otimes I$ gate reduction we implemented. " + "\n", + "class UnaryIterator(Bloq):\n", + " ctrl_bitsize: int\n", + " state = []\n", + " sys_bitsize: int\n", + " ops\n", + "\n", + " @property\n", + " def signature(self) -> Signature:\n", + " return Signature([Register('ctrl', QAny(self.ctrl_bitsize)), Register('anc', QAny(self.ctrl_bitsize - 1)), Register('sys', QAny(self.sys_bitsize))])\n", + " \n", + " def set_ops(self, ops):\n", + " self.ops = ops\n", + "\n", + " def compute(self, query: List[bool], bb: BloqBuilder, ancs, ctrls):\n", + " for ix in range(len(self.state)):\n", + " assert self.state[ix] == query[ix]\n", + " if len(self.state) == len(query):\n", + " return\n", + " if len(self.state) == 0:\n", + " g0 = XGate() if query[0] == False else Identity()\n", + " g1 = XGate() if query[1] == False else Identity()\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " ctrls[:2], ancs[0] = bb.add(Toffoli(), ctrl=ctrls[:2], target=ancs[0])\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " self.state.append(query[0])\n", + " self.state.append(query[1])\n", + " else:\n", + " ctrl_ix = len(self.state)\n", + " g = XGate() if query[ctrl[ix]] == False else Identity()\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " [ctrls[ctrl_ix], ancs[ctrl_ix - 2]], ancs[ctrl_ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[ctrl_ix], ancs[ctrl_ix - 2]], target=ancs[ctrl_ix - 1])\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " self.state.append(query[ctrl_ix])\n", + " self.compute(query, bb, ancs, ctrls)\n", + "\n", + " def build_composite_bloq(self, bb: BloqBuilder, ctrl: SoquetT, anc: SoquetT, sys: SoquetT) -> Dict[str, 'SoquetT']:\n", + " queries = list(self.ops.keys())\n", + " queries.sort()\n", + " ctrls = bb.split(ctrl)\n", + " ancs = bb.split(anc)\n", + " for q_int in [2]:\n", + " q_bools = int_to_bool_list(q_int, self.ctrl_bitsize)\n", + " print(\"q_bools:\", q_bools)\n", + " self.compute(q_bools, bb, ancs, ctrls)\n", + " print(f\"calling ops[{q_int}]\")\n", + " [ancs[-1], sys] = bb.add(self.ops[q_int], q=[ancs[-1], sys])\n", + " ctrl = bb.join(ctrls)\n", + " anc = bb.join(ancs)\n", + " return {'ctrl': ctrl, 'sys': sys, 'anc': anc}\n", + " \n", + "cbloq = UnaryIterator()\n", + "cbloq.ctrl_bitsize = 3\n", + "cbloq.sys_bitsize = 1\n", + "ops = dict()\n", + "for ix in range(4):\n", + " ops[ix] = CZPowGate(exponent=float(ix))\n", + "cbloq.set_ops(ops)\n", + "msd = get_musical_score_data(cbloq.decompose_bloq())\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.set_figwidth(18)\n", + "fig.set_figheight(7)" ] }, { "cell_type": "markdown", - "id": "f8900632", + "id": "9d860b01", + "metadata": {}, + "source": [ + "Now we just have to translate the uncompute function and we are done" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "314793b8", "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "q_bools: [False, False]\n", + "calling ops[0]\n", + "q_bools: [False, True]\n", + "calling ops[1]\n", + "q_bools: [True, False]\n", + "calling ops[2]\n", + "q_bools: [True, True]\n", + "calling ops[3]\n" + ] + }, + { + "data": { + "image/png": "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wv+sW7fO6+Og27Zt07lz5wq4ImSnII5BE4D5lgArnzwuLk6DBw/WmTNnZIxR165dFR8fr27duikkJETTpk3TvHnztGXLFiUkJOjAgQOZ3rtg3rx5evnll7Vr1y7NmzdPBw4cUFhYmKQLZ4m988476tmzp/r06SNJOnnypBYtWqTt27erdu3a2r17t6pWrSrpQngWHBys3bt368CBA6pZs6Zmz56ttLQ0Va5cWevXr1fFihUlSf/+97/ldrv15ptvaurUqeratatngLvjjjs89V199dW6+eabtX//fs+8hx56SJMmTVLLli2z/PskJiZmOj8pKSkXf+WsDR48WJL0wgsvSJJeffXVXAdVl7rS4Eu60C9q1aql8uXLe+a1adNGffr00a+//qq6det6va60tLQs/45AuiVLlkiS7r///sv6S/oBxpSUlMuW3Xffffrqq6+0ePHiDPs8kBc7d+706oB2ui1btqhkyZIFVxCKBMY///Pbb7953fb06dM6dOiQSpUqVYAV4VLsVwBywjgBX7B161av26akpGjHjh0cXylkjBX+Z9u2bTnemzddWlqatm/frurVqxdwVUWPt2e05ucx6IulB2CS1KtXL0lSz54987QuXCGrrrd4/PhxU65cOfPtt98aY4xxu93m+PHjplKlSuaXX37xtHv55ZfNtddea44cOeKZd3Gb06dPmypVqpi0tDTz6aefmtq1a1/2XCdOnDCSPOsYP3686datmzHGmEGDBpl//etfnraPP/64adiwoUlMTDSpqammcePG5pNPPjHGGPPvf//b0zYpKcmEh4eb/fv3G2OMadmypfnqq68yfa2//vqrKV26tDlw4IBn3u+//27KlCmT7d9IOVwfNq/3/LpU+j3AXn/99Staz8cff+zVPb4u1axZswzXTO3Vq5dp3bp1hjaJiYlGklm8eHG2j71YdHS0CQwM9Opau0xMTExMTExMTExMTExMTExMTExMTP49BQYGZnnPr4I4Bp2Vi+8B9vHHH+fqscgfll32MC4uTtWrV1fTpk0lSU6nU6VLl860bfv27TMksBdbsmSJ2rZt69UZRiEhIZIuXPLwySeflCQ9+eST+uijjzKk8l26dFFoaKhcLpcaNmyoPXv2SJL69u2rjz76SOfPn9fnn3+uhg0bqlKlSpKkgwcPZlrjwYMH1blzZ02cOFEVKlTwzA8PD9fx48fz7SyuK/Hggw+qTJky+uabb65oPWvWrFFgYKB69ux5xWeQAQAAAAAAAADgjxwOh3r16qXAwECtWbPG6nKKJEsve+it4sWLZ7ls7ty5niCrbt262rVrl44fP64yZcp42sTFxenWW29ViRIltHHjRm3evFm9evXyBDR//fWXlixZog4dOkiSihUr5nmsy+Xy3CDy+uuv15133qlPP/1UEyZM0KuvvuppFxoaelmQFR8fr1atWmnYsGG6//77MyxLSkqSy+XK9mZ5CQkJmc6fP3++HnnkkSwflxsHDhxQ8+bNddVVV2ny5MlXtK4RI0Zow4YNatWqlWJjY1WnTp08rSc8PPyya0kfPXrUsyw3qlatyk1ZkaMXX3xRY8aM0ccff6zmzZt7wvCzZ8+qRo0aki6cnjxs2DDPY1wul1avXq3HHntMAwcO1Ouvv25J7bCPzp07KzY21uv2X331lVq0aFGAFaEoYPzzPzfccINOnDjhdfv9+/frmmuuKcCKcCn2KwA5yWqckKT//Oc/+vDDDyVduHxWaGioJMYJ5L/Vq1d7fR8pSYqKitL8+fMLsCJcivcU/ue2227T9u3bvW7/448/6tZbby3Aioqmhg0betUuP49BZ2bTpk1q1aqVatWqpREjRlzx+pB7loVfjRs31q5du7RmzRo1bdpUaWlpOnnypEqUKKFTp055tY7k5GTFxcVp+vTpkqRq1aqpY8eO6t27tz7++GOFhoZq//79GjJkiN555x1JF876eu655zJ0uAkTJigmJsYTfmUnOjpa999/v4oXL65WrVp55teuXVs7d+70nMl2+PBhRUVFaciQIXr88ccvW8/27dtVs2ZNOZ1Zn3yXft+yS10czl2J9OArLS1Nq1evVuXKla9ofaVKldLKlSvVqlUrRUVF5TkAi4yM1H//+18dO3ZM5cqVkyStWLFCJUqU8Pxz95bT6czy7wika9euncaMGaMvvvhCjz76qGf+xdfNLlGihOdMz3Rz5szxPJ5+hitVtmxZuVwur68Pft1119HvcMUY//xP6dKlvQ6/nE6nypcvn2/vHeEd9isAOclqnJCkq666yvPzDTfckGE8YJxAfrr22mu9butyuVS2bFn6XSHjPYX/KVu2bK7Cr+uvv55tVACyO95+sfw8Bn2pTZs2KSoqSpUqVdLKlSu5D7NFLLvsYalS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POvauXOn9u3bp/Xr16tGjRo6ffq0SpQoIUlq3ry5GjRooB9//FHx8fG66667NHHiRMXHx6tu3brat2+fQkNDJUkPP/ywmjZtqj59+mjSpEl6+OGHPa/xpptuknQhmLtUUFCQWrdurU8++UR9+vTJ8u+UmJjo9d/04ra5eZydpAdgrVu3Vrt27bRkyRLPdgUAAAAAAAAAXFAQwVdKSorfHZu+0uPq2f3dLs00unbtqvj4eHXr1k0hISGaNm2a5s2bpy1btighIUEHDhzQihUrLlvPvHnz9PLLL2vXrl2aN2+eDhw44HneypUr65133lHPnj09WcPJkye1aNEibd++XbVr19bu3btVtWpVSRfCs+DgYO3evVsHDhxQzZo1NXv2bKWlpaly5cpav369KlasKEn697//LbfbrTfffFNTp05V165d5XA4JEl33HGHp76rr75aN998s/bv3++Z99BDD2nSpElq2bJlrv+m+cGy8Gv06NEqW7asJGnEiBF65ZVXNHToUJ06dUq1a9fWf/7zHy1dulTR0dFq3769Tpw4oXvuuUdffPGFmjZtqrS0NJ08eVKStGvXLpUoUULh4eGaPn266tevr6CgoAzPFxkZqeeee87ze0xMjLp3767rrrtOLVu21OzZs9W7d2/P8j179mj16tVKSUlRjRo1FBcXp8jISLVq1UozZsxQ7969dfToUa1cuVKTJ0+WJH399dcaNGiQ13+DyMhILViwINvwq3jx4l6v72Lly5fP0+Os5HTmz4mIlwZgK1euVEhISL6sGwAAAAAAAAD83Y8//lggwdfUqVM1derUfKjQGnk5rm6MyXR+VpnGhx9+qE8//VQRERGSLgRbcXFx+uWXXzJ9/jNnzmjHjh267bbb9Pnnn6tatWoqU6ZMhjaRkZE6fPiwjh49qvLly+uTTz5RmzZtFB4erkcffVRTp07NcBumjRs3avXq1QoODtadd96pOXPm6KGHHtJTTz2lCRMm6I033tD58+f14Ycf6ocffpCUff6xbds2xcXFaeLEiRlq6tevX67+lvnJsssefvLJJ2rQoIFq1qypKVOmeK5fWaxYMd17772SLvxx9uzZI+lCQlq9enU1bdpU0oWgpHTp0pL+75KHOUkPQFJTUzV9+nQ98cQTkqQnn3zyslP/unXrpoCAAIWEhCgiIsJTR3R0tMaPHy9J+uCDD/TQQw95AqqDBw/maucIDw/XwYMHvW4P7912223q0KGD1q5dq+PHj1tdDgAAAAAAAAD4jNWrVysxMVFDhgzhUocFJLtM41Lt27fPMltYsmSJ2rZt6znjKjvpGUhMTIyefPJJSRfyj48++khut9vTrkuXLgoNDZXL5VLDhg09+Uffvn310Ucf6fz58/r888/VsGFDVapUSVLW+cfBgwfVuXNnTZw4URUqVPDMDw8P1/Hjx5WUlJRj3QXBkjO/vvvuO40dO1ZxcXEqV66cFixYoOHDh0uSgoODPRvR5XJl2CBZmTdvnj766CNJUr169TR27FilpKQoMDDQ0yYuLk6NGzeWJC1cuFAnT55UmzZtJF1IZuPj47V161bVrFlT0oUQLp3L5VJqaqqkC2cVhYaGavXq1Zo8ebJWrlzpaRcaGpqrDZmUlJTjGUkJCQlery8xMdHT+Y4ePep3g1a5cuXyZT3GGD3//POaOXOmxo0bl2GHAwAAAAAAAICibsCAAVq+fLm6du2qJUuWeAKaKxEYGKgnn3xSY8eOzYcKC48vHFfP7gpwc+fO9QRZdevW1a5du3T8+PEMZ3/FxcXp1ltvVYkSJbRx40Zt3rxZvXr18mQtf/31l5YsWaIOHTpIyjr/uP7663XnnXfq008/1YQJE/Tqq6962mWWf8THx6tVq1YaNmyY7r///gzLkpKS5HK5LrtKX2GxJPz6+++/ddVVV6lMmTJKTk7WpEmTcnxM48aNtWvXLq1ZsybDKYLnz59XQkKCqlWrJklq2bKlKlasqEGDBmn06NEKCAjQxo0bNWrUKH3xxReSLqSeo0eP1jPPPONZ/5AhQxQTE6NRo0blWEt0dLQee+wx1ahRw3NfL+nCTdx27tzpuR5mTrZv3646depk2yavO1pYWJjfhV/5IT34evfddzVu3DhLT6sEAAAAAAAAAF8UGhqqhQsXqkOHDmrXrl2+BmD+fFw6P4+rZ5VplChRQqdOnfJqHcnJyYqLi9P06dMlSdWqVVPHjh3Vu3dvffzxxwoNDdX+/fs1ZMgQvfPOO5Iu5B/PPfecRowY4VnPhAkTFBMT4wm/shMdHa37779fxYsXV6tWrTzz0/OP9H5y+PBhRUVFaciQIXr88ccvW8/27dtVs2bNfLvdUW5Z8qxt27ZV9erVPaf8pV/bMjulSpXS3LlzNXToUNWuXVv16tXT999/r/nz56tTp06edk6nU0uWLNH58+d10003qUqVKoqMjNScOXNUp04dxcfHKzY29rIU8pFHHtGMGTOUnJycYy333XefEhIS9Oyzz142f9myZZ7fY2NjVaFCBb377ruKiYlRhQoVtGDBAs/ypUuX6r777svx+eAdgi8AAAAAAAAA8E56ANawYUO1a9dOa9assbokW8kq0xgwYIB69eqliIgIz+2gsrJq1So1adIkw1Xupk+frhtvvFG1atVStWrVVLVqVY0cOVJt2rRRUlKSZs6cqUceeSTDeh544AEtX75cR48ezbHuRo0a6eqrr1bfvn0zXGrx0vxj+PDh+uOPPzRmzBhFREQoIiJCH374oWe51fmHw2R1NzY/0bZtW73++utq0KBBpsuTkpLUs2dPHTt2TAsWLMhwOl9ebdiwQQ8//LB27NiRIbVMSEhQ48aNFRcXl2M6vG3bNj399NP5OqAkJiZ6To9MSEjwu4Q9LCxM//vf/zRgwIBcP5bgCwXB3/cp+Df6H6xE//MfbCv/wbYC4A3GCliJ/ucf2E7+w5+21dmzZ9WhQwetW7fuis4Au+2221S/fn1NnDgxnyssWL68rZ555hm1atUqyxApLS1NQ4cO1YoVKxQbG5vlPcVy49ChQ2rQoIF+++03XXXVVRmeq2HDhpo3b16OtxpKTk5WgwYNtGrVKl1zzTVXXFNeWHLZw/y0dOnSbJcXK1ZMM2bMyLfn69mzp5YvX64pU6Zcdrpe8eLFNWrUKO3bt89z77CsHDhwwKvLPSJnBF8AAAAAAAAAkDcFdQlEXLmcgkSn06m33nor355v+PDhmjp1qkaMGJEh+Ep/rkmTJmn//v05hl/79u3TiBEjLAu+JBuEX4VtypQp2S6Pioryaj1t2rTJj3KKPIIvAAAAAAAAALgyBGCQpFdffVWvvvpqlsvr16/v1XrSb3tlJWvuNAbkA4IvAAAAAAAAAMgf3AMMdkL4Bb9E8AUAAAAAAAAA+YsADHZB+AW/Q/AFAAAAAAAAAAWDAAx2wD2/4FP27t2r77//XpLkcDjUqFEjOZ3/l9ESfAEAAAAAAABAwfLmHmDHjh3Trl27PL+fOXOmsMsEssSZX/AZVatW1ZgxY9SkSRM1adJEd9xxh0aMGOFZTvAFAAAAAAAAAIUjpzPAmjdv7jmW26RJE+3cuVNVq1a1qFogI878gs/49ttvFR8f7/n93nvv1aFDhyQRfAEAAAAAAABAYcvuDLBDhw7phRdeUI8ePSRduJJX9erVLawW+D+EX/AZV199ta6++mrP78WKFZNE8AUAAAAAAAAAVskuACtfvrxuueUWiysELsdlD+HTCL4AAAAAAAAAwFrpAVj9+vXVunXryy6BCPgazvyCT5s1a5ZOnjxJ8AUAAAAAAAAAFgoNDdUXX3yh8PBwtW7dWqmpqVaXBGSJ8As+jeALAAAAAAAAAHxDaGio0tLSlJycrLS0NKvLAbJE+AWfNX36dO3atUv33nuv1aUAAAAAAAAAAP6/tLQ0vffee3r00UetLgXIFOEXfFatWrVUq1Ytq8sAAAAAAAAAAFziiSeeUFhYmNVlAJlyWl0AAAAAAAAAAAAAkF8IvwAAAAAAAAAAAGAbhF8AAAAAAAAAAACwDcIvAAAAAAAAAAAA2AbhFwAAAAAAAAAAAGyD8AsAAAAAAAAAAAC2QfgFAAAAAAAAAAAA2yD8AgAAAAAAAAAAgG0QfgEAAAAAAAAAAMA2CL8AAAAAAAAAAABgG4RfAAAAAAAAAAAAsA3CLwAAAAAAAAAAANgG4RcAAAAAAAAAAABsg/ALAAAAAAAAAAAAtkH4BQAAAAAAAAAAANsg/AIAAAAAAAAAAIBtEH4BAAAAAAAAAADANgi/AAAAAAAAAAAAYBuEXwAAAAAAAAAAALANwi8AAAAAAAAAAADYBuEXAAAAAAAAAAAAbIPwCwAAAAAAAAAAALZB+AUAAAAAAAAAAADbIPwCAAAAAAAAAACAbRB+AQAAAAAAAAAAwDYIvwAAAAAAAAAAAGAbhF8AAAAAAAAAAACwDcIvAAAAAAAAAAAA2AbhFwAAAAAAAAAAAGyD8AsAAAAAAAAAAAC2QfgFAAAAAAAAAAAA2yD8AgAAAAAAAAAAgG0QfgEAAAAAAAAAAMA2CL8AAAAAAAAAAABgG4RfAAAAAAAAAAAAsA3CLwAAAAAAAAAAANgG4RcAAAAAAAAAAABsg/ALAAAAAAAAAAAAtkH4BQAAAAAAAAAAANsg/AIAAAAAAAAAAIBtEH4BAAAAAAAAAADANgi/AAAAAAAAAAAAYBuEXwAAAAAAAAAAALANwi8AAAAAAAAAAADYBuEXAAAAAAAAAAAAbIPwCwAAAAAAAAAAALZB+AUAAAAAAAAAAADbIPwCAAAAAAAAAACAbRB+AQAAAAAAAAAAwDYIvwAAAAAAAAAAAGAbhF8AAAAAAAAAAACwDcIvAAAAAAAAAAAA2AbhFwAAAAAAAAAAAGyD8AsAAAAAAAAAAAC2QfgFAAAAAAAAAAAA2yD8AgAAAAAAAAAAgG0QfgEAAAAAAAAAAMA2CL8AAAAAAAAAAABgG4RfAAAAAAAAAAAAsA3CLwAAAAAAAAAAANgG4RcAAAAAAAAAAABsg/ALAAAAAAAAAAAAtkH4BQAAAAAAAAAAANsg/AIAAAAAAAAAAIBtEH4BAAAAAAAAAADANgi/AAAAAAAAAAAAYBuEXwAAAAAAAAAAALANwi8AAAAAAAAAAADYBuEXAAAAAAAAAAAAbIPwCwAAAAAAAAAAALZB+AUAAAAAAAAAAADbIPwCAAAAAAAAAACAbRB+AQAAAAAAAAAAwDYIvwAAAAAAAAAAAGAbhF8AAAAAAAAAAACwDcIvAAB8jDFGn3/+uef36Oho7d+/37qCAPik1NRUjR8/3vP7K6+8opMnT1pXEAAA8Fv79+9XdHS05/eLP48AyL20tDR9+OGHnt+HDh2qo0ePWlgRUPQQfgEA4EPS0tL0z3/+U0888YRn3rRp01S/fn1t2LDBwsoA+JLExER17NhRQ4cO9cwbNWqUGjdurEOHDllYGQAA8DcbNmxQ/fr1NW3aNM+8J554Qv/85z+VlpZmXWGAn0pOTtZjjz2m/v37e+ZNmDBBDRo00M6dOy2sDChaCL8AAPAhI0aM0OjRozPMc7vdOnXqlFq0aKFjx45ZUxgAn/Lkk09qxYoVMsZ45rndbu3atUutWrVSamqqhdUBAAB/cezYMbVo0UKnTp2S2+3OsGzUqFF68803LaoM8F+DBw/WrFmzMsxzu906cuSImjdvrsTERIsqA4oWwi8AAHzE4cOH9dprr2W6zO1269y5cxo+fHghVwXA13z33Xf67LPPLjtAJV24FOKOHTv0wQcfWFAZAADwNy+99JLOnTuX6fsKSXr11Vd15MiRQq4K8F87duzQuHHjMj1rMjU1VceOHdPIkSMtqAwoegi/AADwEePGjVNKSkqWy91ut2JiYrhOOFDE/e9//5PL5cpyucPh0BtvvJHlQSwAAABJOnLkiKZOnZrte4aUlBSNGzeuEKsC/NvIkSPldGZ9yD0tLU2jRo3i7C+gEBB+AQDgA4wx+uCDD3I8WJ2WlqaZM2cWUlUAfM3Ro0e1ePHibMcKY4wOHjyo1atXF2JlAADA33zyySc53tPL7XZr0qRJGS61DCBz58+f14wZM3K8BPnp06c1b968wikKKMIIvwAA8AEHDhzQn3/+mWM7h8OhH374oRAqAuCL1q1b51U7l8ulH3/8sYCrAQAA/iwuLk4OhyPHdn/99ZcOHDhQCBUB/m3z5s1KTk7OsV1gYCDv1YFCYIvwa8OGDWrXrp0k6dSpU3r66adVpUoVVa9eXfXr19f8+fMve8yHH34oh8OhNWvW5Fsd999/v+Li4iRJixYtUv369RUcHKyBAwdmaDdu3Di98cYb+fa8AAD/5+0BbbfbrbVr1xZwNQB81bp16xQQEJBjO2MMH6gBAEC21q5d6/Vlkr39vAIUZevWrfMqUE5JSeFzPXKNDCT3bBF+zZ07V/fcc4+MMWrfvr0CAwP122+/aefOnYqJiVGfPn20ePHiDI+JiYlRVFSUYmJi8qWGdevW6cSJE4qMjJQkVatWTVOnTtXgwYMva9u7d2/FxMTo1KlT+fLcAAD/t27dOgUGBnrV9tChQzp27FgBVwTAF/3www9eHaRKS0vT2rVruUQRAADI1NGjRxUfH+9V28DAQMIvwAvr1q3L9t68F9u0aZNXZ4kB6chAci/nr40WkHPnzqlHjx7asmWLAgMDVb58eQUFBenhhx/Www8/LElavny5XnrpJf3444+aMmWK3n33XQUFBcntdmvKlCm6/fbbJUkLFizQihUrFBsbq99//12rV6/2fCM2IiJCw4YN02uvvab27dtLknbu3Kl9+/Zp/fr1qlGjhk6fPq0SJUpIkpo3b64GDRroxx9/VHx8vO666y5NnDhR8fHxqlu3rvbt26fQ0FBJ0sMPP6ymTZuqT58+mjRpkqduSbrpppskXeiUlwoKClLr1q31ySefqE+fPln+jXJ748OL23PTRODKsU+hMG3dulUpKSlet9+4caPuuOOOAqwIRRnjn+/aunWr14HW8ePHdfjwYV199dUFXBW8wX4FwBuMFSgsGzdu9LptSkqKtm7dSp/0EYwTvmvTpk053u8rXWpqqrZt26Zq1aoVcFX5z4598EpfU1hYWKbzyUByzkAKlLHIl19+aVq3bu35/fjx42b58uUmMjLSM69Tp05m+vTpxhhjSpQoYeLj440xxiQnJ5szZ84YY4z57bffTOPGjY0xxrz55pumU6dOlz3Xzz//bIoVK+b5ffDgwWbIkCHGGGO6dOliJk2a5FnWrFkzc88995iUlBRz9uxZU7lyZbN27VpjjDEPP/ywp+2RI0dM2bJlPXVUqVLFbNmy5bLnfvnll010dPRl8z/66CPTtWvXbP9GkpiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYfHTKChlIzhlIQbLssod16tTR9u3b1bdvX3366acKDAzUXXfdpVOnTumXX37R77//rnXr1umBBx6QJEVFRal79+4aM2aM9u3bp+LFi0v6v9P9chISEiLpQqo+ffp0PfHEE5KkJ5988rLT/rp166aAgACFhIQoIiJCe/bskSRFR0dr/PjxkqQPPvhADz30kKeOgwcPqnz58l6//vDwcB08eNDr9gAAAAAAAAAAwD+QgVibgVh22cMqVapo27ZtWrVqlVauXKkXXnhBGzdu1IABA/Tee++pfPnyevLJJxUcHCxJmjNnjn766Sd9/fXXat++vV5//XU9+OCDmjdvnj766CNJUr169TR27FilpKRkuG9KXFycGjduLElauHChTp48qTZt2kiSjDGKj4/X1q1bVbNmTUlSsWLFPI91uVye01UbNmyo0NBQrV69WpMnT9bKlSs97UJDQ5WUlOT1609KSvJ0xqwkJCR4vT7pwimZ6Z3v6NGjWZ5uCcA77FMoTB07dtTq1au9bv/VV1+pRYsWBVgRijLGP991ww036MSJE16337dvn8qWLVuAFcFb7FcAvMFYgcKyatUqderUyev2LVu21IIFCwqwIniLccJ3NWjQQDt27PC6/Q8//OA5Hu1P7NgHC+o1kYHknIEUJMvCr4MHD6pUqVLq1KmT2rZtq3nz5unAgQPq3r27Xn31Vbndbq1fv17ShaRy//79atCggRo0aKC//vpL69atU7NmzZSQkOC5NmrLli1VsWJFDRo0SKNHj1ZAQIA2btyoUaNG6YsvvpB04SZvo0eP1jPPPOOpZciQIYqJidGoUaNyrDs6OlqPPfaYatSo4bmmpSTVrl1bO3fuVMWKFb16/du3b1edOnWybXMlO1lYWJgtBh7AV7BPoaBdc801cjqdSktL86p9uXLl6JMoFIx/vuXqq6/OVfhVrlw5z7Xa4TvYrwB4g7ECBSk339x3Op0qXbo0/dEHMU74ljJlyuSqfXh4uN9vPzv2wfx8TWQgOWcgBcmyyx5u2bJFd9xxh+rUqaO6deuqe/fuql27tkJDQ3Xvvffqjjvu8PwR3W63nnzySdWsWVMRERH66aef9M9//lPz58/P8C0Vp9OpJUuW6Pz587rppptUpUoVRUZGas6cOapTp47i4+MVGxur+++/P0MtjzzyiGbMmKHk5OQc677vvvuUkJCgZ5999rL5y5Yt8/weGxurChUq6N1331VMTIwqVKiQ4RsyS5cu1X333Zenvx0AwH7q1Kkjh8PhVVun0+mX3w4DcOXq168vl8vlVdsqVaoQfAEAgEzdeuutcjq9OyzocDgUERFRsAUBNlCvXr0MZ+Jk56qrrtINN9xQwBXBamQg1mYgDmOMsezZM+F2u1W/fn299957atq0abZt27Ztq9dff10NGjTIdHlSUpJ69uypY8eOacGCBRlO5curDRs26OGHH9aOHTsyvElISEhQ48aNFRcXl2MyvG3bNj399NNas2bNFddzscTERM/1NxMSEmyXugOFjX0KhWnFihVq3bq1V21r1KihX3/9tYArQlHG+Oe73n77bQ0ZMiTHs0QDAgL00EMPafr06YVUGXLCfgXAG4wVKEw1atTQ9u3bvWq7fPly3XXXXQVcEbzBOOG7ZsyYoe7du+fYzuFwKCoqSitWrCiEqvKfHftgYb8mMpDCYdmZX5lZsGCBbrzxRkVGRua40aULyWFWG126cN3KGTNmaPny5fmy0Xv27Kl7771X48aNu+zbMcWLF9eoUaO0b9++HNdz4MABTZo06YrrAQDYR3b/zy4WEBCgO+64o4CrAeCrGjZs6NXlUd1utxo2bFgIFQEAAH91xx13KCDAuzuiePt5BSjKvH3/7XK51KhRowKuBr6KDKTw+NyZX8g7O6bugJXYp1DYatasqW3btimnf80zZszQI488UkhVoShi/PNdiYmJuuaaa7y6yfDmzZtVq1atQqgK3mC/AuANxgoUJm/OUnE4HKpRo4a2bt1aSFUhJ4wTvistLU3XXnutjh07lmPbFStWqFWrVoVQVf6zYx+042uCj535BQBAUTZw4MAcg68yZcpwz0igCAsLC1OvXr2y/Za2y+VSkyZNCL4AAEC27r//fpUpUybbNsYYDRo0qJAqAvyb0+nUgAEDsr2fnsPhULVq1dSyZctCrAwomgi/AADwEd27d9cNN9yQ5Rtlh8Ohl156ScHBwYVcGQBfMnjwYLlcriyXu91uvfrqq4VYEQAA8EfBwcF66aWX5HA4Ml3udDp1ww036NFHHy3kygD/1a9fP5UoUSLL5cYYvfrqq9kGZADyB3sZAAA+Ijg4WBMnTpSkyz6Aulwu1alTR3379rWiNAA+pGLFivrvf/+b6TKHw6FHH31ULVq0KOSqAACAP+rbt6/q1Klz2Rdr0g/MT5o0iS/fAblQsmRJvffee5kuczqdatWqlbp161bIVQFFE+EXAAA+pF27dlq4cKGCg4PldDoVGBgoSbrzzjv1zTffeH4HULQ999xzGj16tBwOh1wul+cyiL1799a0adOsLQ4AAPiNwMBAffPNN2ratKnnd6fTqeDgYC1cuFBt27a1uELA/zz66KOaMWOGAgIC5HQ6Pe/V7733Xn311VdZnm0JIH85TE43F4Hf4MZ8QP5in4KV4uPjNWvWLB09elR33nmn2rZtm+09foD8xPjnP3bs2KHPPvtMSUlJ6tChgyIjI/kw7aPYrwB4g7ECVklNTdXSpUv17bffqnz58nrooYd03XXXWV0WMsE44T/279+vWbNm6dSpU7rrrrvUokULW1zu0I590I6vCYRftsJOCuQv9ikARRXjH5D/2K8AeIOxAkBOGCdgNTv2QTu+JnDZQwAAAAAAAAAAANgI4RcAAAAAAAAAAABsg/ALAAAAAAAAAAAAtkH4BQAAAAAAAAAAANsg/AIAAAAAAAAAAIBtEH4BAAAAAAAAAADANgi/AAAAAAAAAAAAYBuEXwAAAAAAAAAAALANwi8AAAAAAAAAAADYBuEXAAAAAAAAAAAAbIPwCwAAAAAAAAAAALZB+AUAAAAAAAAAAADbIPwCAAAAAAAAAACAbRB+AQAAAAAAAAAAwDYIvwAAAAAAAAAAAGAbhF8AAAAAAAAAAACwDcIvAAAAAAAAAAAA2AbhFwAAAAAAAAAAAGyD8AsAAAAAAAAAAAC2QfgFAAAAAAAAAAAA2yD8AgAAAAAAAAAAgG0QfgEAAAAAAAAAAMA2CL8AAAAAAAAAAABgG4RfAAAAAAAAAAAAsA3CLwAAAAAAAAAAANgG4RcAAAAAAAAAAABsg/ALAAAAAAAAAAAAtkH4BQAAAAAAAAAAANsg/AIAAAAAAAAAAIBtEH4BAAAAAAAAAADANgi/AAAAAAAAAAAAYBuEXwAAAAAAAAAAALANwi8AAAAAAAAAAADYBuEXAAAAAAAAAAAAbIPwCwAAAAAAAAAAALZB+AUUErfbrcaNG+vee+/NMP/UqVOqWLGiXnzxRYsqQ1FA/4OV6H+wEv3Pf7Ct/AfbCgAAAICvI/wCConL5dK0adO0dOlSzZw50zO/f//+Kl26tF5++WULq4Pd0f9gJfofrET/8x9sK//BtgIAAADg6wKsLgAoSm666SaNGDFC/fv3V8uWLbVu3TrNnj1b69evV1BQkNXlwebof7AS/Q9Wov/5D7aV/2BbAQAAAPBlDmOMsboI5I/ExEQVL15ckpSQkKCwsDCLK0JmjDFq2bKlXC6XtmzZov79+2vYsGFWl4VM2HGfov/BSvQ//8H4ByvZdVuxXwHwhh3HCgD5i3ECVrNjH7TjawLhl62wk/qPHTt26JZbblGtWrX0888/KyCAkzB9kV33KfofrET/8w+Mf7CaHbcV+xUAb9h1rACQfxgnYDU79kE7viZwzy/AElOnTlVoaKj27dungwcPWl0Oihj6H6xE/4OV6H/+g23lP9hWAAAAAHwR4RdQyNauXatRo0Zp4cKFatiwoZ566ilxAiYKC/0PVqL/wUr0P//BtvIfbCsAAAAAvorwCyhEZ8+eVY8ePdSnTx+1aNFCMTExWrdunSZOnGh1aSgC6H+wEv0PVqL/+Q+2lf9gWwEAAADwZYRfQCH617/+JWOMRowYIUmqXLmy3n77bb3wwgvav3+/tcXB9uh/sBL9D1ai//kPtpX/YFsBAAAA8GUOw3UpbIMb8/m2b775RlFRUfr666/VpEmTDMvatGmj1NRUrVy5Ug6Hw6IKcSk77VP0P1iJ/ud/GP9gBbtvK/YrAN6w01gBoGAwTsBqduyDdnxNIPyyFXZSIH+xTwEoqhj/gPzHfgXAG4wVAHLCOAGr2bEP2vE1gcseAgAAAAAAAAAAwEYIvwAAAAAAAAAAAGAbhF8AAAAAAAAAAACwDcIvAAAAAAAAAAAA2AbhFwAAAAAAAAAAAGyD8AsAAAAAAAAAAAC2QfgFAAAAAAAAAAAA2yD8AgAAAAAAAAAAgG0QfgEAAAAAAAAAAMA2CL8AAAAAAAAAAABgG4RfAAAAAAAAAAAAsA3CLwAAAAAAAAAAANgG4RcAAAAAAAAAAABsg/ALAAAAAAAAAAAAtkH4BQAAAAAAAAAAANsg/AIAAAAAAAAAAIBtEH4BAAAAAAAAAADANgi/AAAAAAAAAAAAYBuEXwAAAAAAAAAAALANwi8AAAAAAAAAAADYBuEXAAAAAAAAAAAAbIPwCwAAAAAAAAAAALZB+AUAAAAAAAAAAADbIPwCAAAAAAAAAACAbRB+AQAAAAAAAAAAwDYIvwAAAAAAAAAAAGAbhF8AAAAAAAAAAACwDcIvAAAAAAAAAAAA2AbhFwAAAAAAAAAAAGyD8MsPGWM0ZMgQvfzyy1aXAgAAAAAAAAAo4ubOnatu3brp5MmTVpdyRZ599llNmDDB6jKQDwi//IwxRgMGDNBbb72l0aNHW10OAAAAAAAAAKCImzVrlj777DO1bt3abwMwh8OhadOmafLkyVaXgnxA+OVH0oOvcePG6bbbbrO6HAAAAAAAAAAAJElVq1bV7t27/S4AS05OlsPhkMvlUp06dawuB/mE8MtPXBx8TZo0Sd26dbO6JAAAAAAAAAAAJElVqlRRbGysXwVgycnJeuyxx+RyuTRv3jw1adLE6pKQTwi//MClwVfv3r2tLgkAAAAAAAAAgAzq1q3rNwFYcnKyunXrpuXLl2vevHm6++67rS4J+SjA6gKQveyCr/Pnz+udd97x/J6cnOz5eezYsQoKCvL6eYKCgtS7d28FBwfnT+EAAAAAAMukpKRo9erV2rlzZ4bPipIUEhKievXq6fbbb5fD4bCoQtiZ2+3Wd999p61btyopKSnDsmLFiqlmzZpq0qSJXC6XRRXCzowx+vHHH/Xzzz/r3LlzGZYFBQWpevXqatGihQIDAy2qEOmSkpK0cuVK7d27VykpKRmWhYWFqVGjRqpTpw7/qwrQnDlztH///lw9Jqtj0Dt37lR4eLik/wvAoqKi1Lp1ay1fvlwlS5bMr7LzRXrwtXjxYn355ZcZgq+jR49mOO7euHFjRUZGWlEmrgDhlw/LLvhq0qSJSpQooVdffTXDY8LCwiRJI0aMyNVznT59Wm63WwMHDrziugE7MMZozpw5nt/feOMNPf/88ypVqpSFVQFA4fjuu+88Pw8ePFiDBw/WP/7xDwsrAvzb33//rbffftvz+5w5c9S9e3cO5KDALFiwQE888YROnDihoKAgFStWzLPMGKNz584pNTVVlStX1vz581W7dm0Lq0W6ffv2aeTIkZ7fv/vuO7Vp08bCivJmzZo1euCBB3TkyBEFBgYqJCQkw/Jz584pJSVF4eHh+uyzz9S0aVOLKoUdbd68WZ07d9b+/fsVEBCgkJCQDP9vk5KSlJycrNKlS2vq1Knq3LmzhdXmzS+//OL5+dlnn9XgwYNVo0YNCyvKm2nTpmnAgAE6c+aMihUrluFL/MYYJSYmKi0tTbfeeqsWLFigKlWqWFitPW3btk333XefwsLCcv1lhKyOQffo0cPzsy8HYNkFX61atdKMGTM8x93Pnz+v0NBQnThxwqpykVcGPiktLc08++yzRpKZNGlSgT9f6dKlzYgRIwr8eQB/kJqaavr06WMkeSaXy2WqVatmfv/9d6vLA4AC9d577xmHw+EZ/wICAkzJkiXNDz/8YHVpgF/6/fffTbVq1YzL5crw3qJPnz4mNTXV6vJgQ2vXrjWBgYGmU6dO5pdffjFpaWmXtUlNTTWrV682devWNWXKlDHx8fEWVIqLxcXFmZIlS5qAgADPOOFwOMy4ceOsLi1Xtm/fbsLCwkyzZs1MXFyccbvdl7Vxu90mLi7ONGvWzISFhZkdO3ZYUCnsKD4+3pQpU8bUrVvXrF69OtP/s2lpaeaXX34xnTp1MoGBgWbt2rUWVJp3s2bNyvCeIiAgwISEhJilS5daXVqufPXVV8bhcJju3bubbdu2ZdomOTnZLFmyxFStWtXccMMN5syZM4Vcpf39/PPPRpLZsGFDgT9PqVKlzG233Wb+/vvvAn0ub5w/f97cc889JigoyCxcuDDH9mPGjDGhoaGFUBnyG/f88kGGe3wBlho2bJgmTpyYYZ7b7da+fft05513XnbZDgCwi9mzZ6t///4yxnjmpaam6syZM2rRooX++OMPC6sD/E9SUpLuvPNO7du3T263O8OyiRMnatiwYRZVBjubMmWKbrjhBn3xxReKiIjI9AxDl8ul5s2ba9myZTp9+rQ+//xzCypFuj/++EMtWrTQmTNnlJqa6plvjNGzzz6r2bNnW1hd7kyfPl3BwcFatGiRGjVqJKfz8sNOTqdTjRo10qJFixQcHKzp06dbUCns6LPPPtOZM2e0bNkyNW/ePNMzWRwOhyIiIvTFF1+oUqVKmjJligWV5s2qVav00EMPKS0tzTMvNTVV58+f1913361NmzZZWF3uTJw4UbfffrumTZumW265JdM2gYGBatu2rRYtWqQ//vhDixYtKuQqkV986R5g2Z3xBfsh/PIxBF/2lZiYqLFjxyoqKkrh4eEKCgpSeHi4oqKiNHbsWJ09e9bqEiFpz549evvttzMc+E2XmpqqP/74Q6NHjy78wq4Q/Q9Wov/5h3PnzmngwIGZHiR1u91KSUnRCy+8YEFlV44+6B/suJ1GjRqlP/74I8PB7HTGGL399tvau3evBZVdGTtuKztZsWKFunTp4tW9bMqWLavmzZtrxYoVhVAZsvLCCy8oNTX1spBcunCgfuDAgX6zX61YsUJ3332353JY2QkLC1P79u21fPnyQqgMRcHKlSvVrFkzlS1bNse2gYGBuueee/xm/HO73erbt69cLtdlxyvSw7ABAwZYUVquGWO0YsUKde3aNdOA/FI33XSTateu7TfbCpnzhQCM4KvoIfzyIQRf9rVo0SJVrVpV0dHRWrVqlZKSklShQgUlJSVp1apVio6O1o033si3WHzAu+++m+1yY4zeeustvzr7i/4HK9H//MfHH3+so0ePZhr+Sxe+APDZZ59pz549hVzZlaEP+gc7bqdz585p5MiRWe5T6XJ67+Fr7Lit7Obvv//Wtdde63X76667Tn///XcBVoTs7NmzR5999lmmIbl04fPH0aNHNWPGjEKuLG9OnjxJ/4Nlcjv+XXvttX7T/xYuXKidO3dmGpJLF8Kxb7/9Vj/88EMhV5Z7586dU3JyMmNFEWRlAEbwVTQRfvkIb4Ov5s2by+FwyOFwaOPGjV6te9q0aZ7HDBw4MP+KhlcmT56sTp066c8//1TPnj21adMmbdu2TV9++aW2b9+uzZs3q1evXvrzzz/VqVMnTZ482eqSi6zk5GRNnTo1yw+e6f7++2/Nnz+/kKq6MvQ/WIn+518mTJiQ6VlfF3M6nZo6dWohVXTl6IP+wa7bacGCBTkepElNTVVMTIySk5MLqaorY9dtZTfGGK++SZ/O6XTmGNKi4EydOjXH7eVwODRhwoRCqujK0P9gJTv3v0mTJmV6GceLBQQE6IMPPiikivIu/W9u121lFwV1DNqKAIzgqwgrzBuMIXNpaWnm2WefNZLMpEmTsm3brFkz06tXL3P48GGTkpJijLlwE+327dubkJAQU7ZsWfP88897lhljzNmzZ83hw4dNZGSkiY6OznS9pUuXNiNGjMi314QLYmNjjcvlMldddZVZsWKFZ/5zzz1nJJkhQ4Z45q1YscIUL17cuFyuDG1ReDZs2JDhRvRZTYGBgWbgwIFWl5sj+h+sRP/zL2fPnjVOp9OrMbBZs2ZWl+sV+qB/sPN2io6ONoGBgV7tVz/99JPV5ebIztvKbsLCwsyoUaMum//444+bzp07Xzb/iSeeMI0bNy74wpCpO++806txwuVymbNnz1pdbo5uvPFGM3To0MvmZ9X/hg4daqpUqVIIlaEoaNy4senRo8dl87Pqf6NGjTJhYWGFUNmVSUtLMyVKlPBqrKhWrZrV5eYoISHBSDKffPLJZcuy2lbt27c3Xbp0KYTqipaff/7ZSDIbNmy4bFlBHYO++LlLlSplbrvtNvP333/n58vK4Pz58+aee+4xQUFBZuHChXlax5gxY0xoaGg+V4bCwJlfFjN5uNRhaGiowsPDFRAQILfbrbvvvlvJyclau3atPvroI02bNk3Dhw/3tA8JCfFcix+FJzU1Vf369ZPb7dbMmTPVqlWrbNu3atVKs2bNktvtVv/+/XM8+wj5b926dTme9SBJKSkpWrt2bSFUlHf0P1iJ/ud/fvnllww3zs7O+vXrvW5rFfqgf7D7dlq7dq1SUlJybOdwOLRu3bpCqCjv7L6tAKu43W5t2LDB67befvMegL3s3btXp0+f9qrt7t27vW4L5KQgj0EXxhlgdjzja8OGDWrXrp0k6dSpU3r66adVpUoVVa9eXfXr18/0SlUffvihHA6H1qxZk2913H///YqLi5N04bLo9evXV3Bw8GVn/I0bN05vvPFGvj1vbhF+WSgvwdelli9frm3btmnGjBmKiIhQu3bt9Nprr2n8+PF+c/kUu4qNjdWOHTvUsWNHdezY0avHdOjQQR07dtSOHTu0atWqAq4Ql1q3bl2OlxFIt3HjRq8OaFmF/gcr0f/8z7p167y+7MjZs2e1c+fOAq7oytAH/YOdt1NKSorXB6ldLpfPh1923laAlXbu3KmzZ8961dbpdPr8WAGgYORm3zfG6KeffirAalBUFcQx6IIMwOwYfEnS3Llzdc8998gYo/bt2yswMFC//fabdu7cqZiYGPXp00eLFy/O8JiYmBhFRUUpJiYmX2pYt26dTpw4ocjISElStWrVNHXqVA0ePPiytr1791ZMTIxOnTqVL8+dWwGWPCvyJfiSpLi4ONWqVUvly5f3zGvTpo369OmjX3/9VXXr1vV6XcnJyUpMTMxTHbjckiVLJF1Iwi/9u6aHJikpKZctu++++/TVV19p8eLFuuOOOwqnWEi6EGh5+83k5ORkbdu2TVWrVi3gqvKG/gcr0f/8z+bNm+V0Or0+o+vnn3/WDTfcUMBV5R190D/YeTvt3r3b6y/JpKam6pdffvHp9+F23la4IC0tzaf7oF398ssvXrd1Op3atGmTz28nk4d78hhjfP51wT/k9eoEvt7/Nm3apICAAK+OVzgcDv3yyy9q2LBhIVSWN3n9e6empvr8tvI3586d87ptfh6Dvlh6ABYVFaXWrVtr+fLlKlmyZJ7Wla6ggq+s+l9YWFiWj3nkkUe0c+dOJScnq2LFioqJiVFSUpIiIiIUHR2thQsX6tSpUxo7dqzat28v6cLfevDgwTpz5oyMMXrttdfUuXNnSRfuK7xixQrFxsbq999/1+rVqxUQcCHiiYiI0LBhw/Taa6951rVz507t27dP69evV40aNXT69GmVKFFC0oX7ujVo0EA//vij4uPjddddd2nixImKj49X3bp1tW/fPoWGhkqSHn74YTVt2lR9+vTRpEmT9PDDD3te40033STpQjB3qaCgILVu3VqffPKJ+vTpk6u/d76w7oqLRZu39/i6VLNmzTJcM7VXr16mdevWGdokJiYaSWbx4sXZPvZi3l47mImJiYmJiYmJiYmJicl3J5fLlet7fgUEBFheN5M9psDAwFzf88vb+yMyMeU0BQQE5PqeXy6Xy/K6i+qUm3t+tWvXzvJ67Txldc+vgjgGnZWL7wF28uTJXD32YsnJyVd8j69LjRkzJtt7ZGfn2LFjnp//97//maefftrs27fPSDJffPGFMcaYJUuWmJtuuskYY8zx48dNuXLlzLfffmuMMcbtdpvjx48bY4z57bffPPdpffPNN02nTp0ue76ff/7ZFCtWzPP74MGDPffm7dKlS4YsolmzZuaee+4xKSkp5uzZs6Zy5cpm7dq1xhhjHn74YU/bI0eOmLJly5ozZ84YY4ypUqWK2bJly2XP/fLLL2e63T/66CPTtWvXbP9OBYXLHlpk/PjxioqKUq9evawuBQAAAAAAAAAAS9StW1dDhw7V+vXrtX79+jyvJz4+XvPmzdNjjz3mE5c6/OSTT9SgQQPVrFlTU6ZM8VwavVixYrr33nslSZGRkdqzZ4+kC2d9Va9eXU2bNpV04czv0qVLS/q/Sx7mJCQkRNKFsyWnT5+uJ554QpL05JNPXnbpw27duikgIEAhISGKiIjw1BEdHa3x48dLkj744AM99NBDKl68uCTp4MGDGc4AzEl4eLgOHjzodfv8xGUPLfL++++rT58+GjRokEaNGiWHw5Gn9YSHh1927d+jR496lnkrICBAr776qv75z3/mqQ5c7sUXX9SYMWP08ccfq3nz5nK73Z5l//3vf/XBBx+oT58+GjJkiGe+y+XS6tWr9dhjj2ngwIF6/fXXrSi9yKpfv36u7mPzww8/qGbNmgVYUd7R/2Al+p//6dWrlz777LMM2yo7MTEx6tatWwFXlXf0Qf9g5+20detWNWrUyOv2N998szZs2FCAFV0ZO28rO8rNwYh0DRo00MqVKwugGmRn9uzZ6tmzp1dtXS6XunXrpsmTJxdwVVemdu3auX5MhQoVtGXLlgKoBkVNq1atcv2YYsWKeY6j+aoXX3xR77//vleXVHa5XHrttdc0YMCAQqgsbxITE3P9v8rhcKhjx46aNWtWAVVVNG3atMnrS1Pn1zHorMybN08vvviiHnjgATVv3jzP67nhhhs0dOhQjRgxQrfeeqsGDhx4xbVJF8aKY8eO5eox3333ncaOHau4uDiVK1dOCxYs0PDhwyVJwcHBnjzA5XJ59Vl83rx5+uijjyRJ9erV09ixY5WSkqLAwEBPm7i4ODVu3FiStHDhQp08eVJt2rSRJBljFB8fr61bt3qOZxYrVszzWJfL5bm8asOGDRUaGqrVq1dr8uTJGd4nhoaGKikpyeu/Q1JSkieQK2yEXxZ55plnJMlzrcu8BmCRkZH673//q2PHjqlcuXKSpBUrVqhEiRKqUaNGrtYVFBSU7TVKkTvt2rXTmDFj9MUXX+jRRx/NsCz92qolSpRQpUqVMiybM2eO5/Fsj8KV22sKlytXzme3Ef0PVqL/+Z+SJUvK6XR6HX6VKVPGp7cRfdA/2Hk7pb8v99bVV1/ts69Fsve2wgVOp5NtZIEyZcp43dbpdKpkyZI+v53yclzD4XD4/OuCf3A683aBK1/vf6VLl/b6fnppaWkqXbq0z7+mvAgICLDl67JSbgKJ/DwGfal58+bp/vvv17333quZM2d67mGVFw6HQ2+88YYkadCgQZKUbwFYbvvf33//rauuukplypRRcnKyJk2alONjGjdurF27dmnNmjVq2rSp0tLSdPLkSZ0/f14JCQmqVq2aJKlly5aqWLGiBg0apNGjRysgIEAbN27UqFGj9MUXX0i68KXV0aNHe3IISRoyZIhiYmI0atSoHGuJjo7WY489pho1anju6yVd+KLLzp07VbFiRa/+Dtu3b1edOnW8apvfuOyhhZ555hlNmDBBY8aM0aBBg/J0Y9jWrVurRo0a6t69uzZt2qRly5Zp2LBh6tevn4KDgwugangrKipKN998s+bPn69FixZ59ZjFixdr/vz5uvnmm9WyZcsCrhCXqlevXoZvS2QnLCzssgM8voT+ByvR//xPnTp1vLqB9sXtfRl90D/YeTtVqlTJc3PonAQGBqp+/foFXNGVsfO2AqyUm/+nqampPv//F0DBqF27ttfv1Y0xjBUoEAV1DDo/g6906QHY0KFDPeGQFdq2bavq1at7LmMYERGR42NKlSqluXPnaujQoapdu7bq1aun77//XvPnz1enTp087ZxOp5YsWaLz58/rpptuUpUqVRQZGak5c+aoTp06io+PV2xsrO6///4M63/kkUc0Y8YMJScn51jLfffdp4SEBD377LOXzV+2bJnn99jYWFWoUEHvvvuuYmJiVKFCBS1YsMCzfOnSpbrvvvtyfL6CQPhlsSsNwFwulxYuXCiXy6XIyEg9+uijeuyxx/Tqq68WUMXwVkBAgMaNGyeXy6WHHnpIsbGx2baPjY3Vgw8+KJfLpffeey9fBnvkTsOGDb26jIDD4dBtt92W52+VFQb6H6xE//M/DRs29Po9SKlSpXw6/Jfog/7CztvJ6XTqtttu86ptSkqKGjZsWMAVXRk7byvASpUrV/b66hPGGJ8fKwAUjNzs+y6Xy6sD7EBuFcQx6IIIvtL5QgAWGBioTz/9VLt379aPP/6o//73v9q4caMqV66skydPetoVL148w+fxRo0a6fvvv9fmzZu1ceNGdezYUfPmzbvsfl8lS5bUBx98oL1792rbtm3q2rWrnn/+eSUlJem6667T2bNnLzvLvHbt2vrzzz8VFBSkr7/+OsM6v/jiC/Xo0cPz+8aNG1W2bNnL7p32xBNPaNmyZUpMTJR04YtyBw8e1OnTp3XmzBkdPHjQE9Rt27ZNqampatKkyRX8Ja+AgU+YMGGCkWSio6NNWlpalu2aNWtmoqOj8/Qc2T22dOnSZsSIEXlaL7I3ceJE43Q6jcvlMn369DFbt241e/fuNWvWrDH79u0zv/76q+nbt69xuVzG6XSaiRMnWl1ykfXrr78aSTlOAQEB5l//+pfV5XqF/gcr0f/8R3JysgkKCspx/HM4HKZ9+/ZWl+s1+qB/sOt2Gjp0qAkICPDqvcW2bdusLtcrdt1WdhMWFmZGjRrldfsnnnjCNG7cuOAKQrbatm1rnE5njuNEcHCwSU5OtrrcHN14441m6NChXrcfOnSoqVKlSgFWhKKkcePGpkePHl63HzVqlAkLCyvAivJPuXLlvHpPUadOHatLzVFCQoKRZD755BOvH9O+fXvTpUuXAqyqaPr555+NJLNhw4bLlhXUMeh0c+fONQEBAeaBBx4wKSkpeXoeb6SlpZmhQ4caSbl6f3SxMWPGmNDQ0PwtzMc99dRTpmLFimbZsmWZLl+5cqXZsmVLjutZunSp+fXXX/O7PK8RfvkQbwKwZs2amcDAQBMWFmY2b97s1XpnzJhhwsLCjNPpJPyyyMKFC0358uU9b0ZKlixpqlSpYkqWLOmZV758ebNw4UKrSy3SUlNTTalSpbx6Q7l48WKry/Ua/Q9Wov/5jzvvvNO4XK5sxz6n0+l37xfog/7Bjttp0aJFXr2nKFWqlHG73VaX6zU7biu7IfzyL//73/9yDL9cLpdp1qyZ1aV6hfALVrJz+NWtW7ccv1QTEBBgBg4caHWpOSL88h05hV8FcQzamMILvtJdaQBWFMMvu+D6Ez4k/eZzffr0kSSNGjXqspvFzpw5U+fOnZMk3XDDDV6tt1OnTrr99tslyetLKiB/3X333dqzZ4+mTJmiBQsWaOvWrTpw4IBKlSqlli1bqnPnznrqqae4cafFXC6Xnn32Wb3xxhtyu92ZtnE4HLrhhhvUunXrQq4u7+h/sBL9z38MGDBA3377bbZtXC6XnnzyyUKqKH/QB/2DHbdTmzZtVKlSJf3xxx9ZXlbU5XKpf//+Pn0p5UvZcVvZjdPpzNV9HFNTU/2qD9rNk08+qeHDhystLS3LNm63WwMGDCjEqvKO/gcrOZ3OLD/LZ8af+t+zzz6rTz/9NNs2brfbc0zRl6X/zXM7VoSEhBRUSchEQR2DLshLHWYl/RKIkjRo0CBJ0sCBAwv8eWE9wi8fk1MAdv311+d6nVdddZWuuuqq/CkQeRYWFqbo6GhFR0dbXQqyMWDAAI0ePVpnzpzJdLkxRq+88opcLlchV3Zl6H+wEv3PP9xzzz265ZZb9Ntvv2V60MDpdKpfv34qW7asBdVdGfqgf7DbdnK5XHrllVf0xBNPZNkmNDRU/fv3L8Sq8ofdtpXdlC9fXnv37vW6/Z49e3TttdcWYEXITrly5dSvXz+NHTs20wDM5XLppptuUufOnS2oLvfy0v/Cw8MLsCIUJbntf3v37vWb/nfHHXeoWbNm+v777zMNjQICAnTffffppptusqC63ClWrJhKlCjh9bYyxmjPnj1q06ZNAVeGixXEMWgrgq90BGBFk398vaGIeeaZZzRhwgSNGTNGgwYN8voG9ACu3DXXXKORI0dmuiz9pp6PPfZYIVcFAAXP5XJp4sSJknTZN2ADAgJUrlw5vfzyy1aUBvitxx57TI0bN87ySzMjR47UNddcU8hVwe46duyoL7/8Un///XeObbdv3664uDh16NChECpDVl5++WWVK1fusoOA6f+PJ06c6DdfvuvQoYOWLFmiQ4cO5dj20KFDWrp0Kf0P+aZDhw5au3attm/fnmPbv//+W19++aXf9D+Hw6Fx48YpICDgsvHA5XIpNDRUb731lkXV5Y7D4VCHDh00a9YsnT17Nsf2a9as0Z49e/xmWyFzVgZf6dIDsKFDh2rQoEEaPXp0odeAwsWZXz7Km0sgHjlyRCkpKfnyfLk5LRywu6efflppaWnq169fhvC5VatW+uKLL/zmsggAkFt33nmnlixZos6dO+v8+fOeSxfdeOONWrFiBZdPBnLJ6XRq2bJl6tq1q5YvX+6Z73A49P777+vpp5+2sDrY1TPPPKOPPvpIzZo10+DBg9WoUSMVK1bMs9wYo4SEBMXGxup///ufbr75ZnXp0sXCilGyZEmtW7dOrVq10m+//eaZHxwcrPnz5+vOO++0sLrceeyxxzR+/Hg1a9ZMQ4YMUdOmTRUaGuo5nmGM0dmzZ7VmzRq9+eabuuaaa/hyIfJNly5d9NZbbykqKkr/+te/FBUVpeLFi2c4npaUlKQffvhBI0eOVEpKil/9L65Zs6a++eYbtW3bVqdOnfJc5jE8PFwrVqxQxYoVrS7RawMHDlTz5s3VqlUrDRw4UPXq1VNwcLBnuTFGJ0+e1PLly/Xf//5Xt99+u6Kioiys2N6OHDmiAwcO5Mu6rrvuussCWl8IvtJ5ewbYwYMHPccEvflCEXyUZXcbg1cmTJhgJJno6GiTlpbmmb9w4ULjcDi8uom2t9PUqVMtfKWA7/nhhx88+8fMmTML5SacAOAL/vjjD/Paa6+Z3r17m8mTJ5szZ85YXRLg11JSUszMmTM97yt+/PFHq0uCzW3cuNE0btw4289/AQEBpkOHDubw4cNWl4v/78yZM+a9997zbKMdO3ZYXVKe7N6927Rs2dI4nc4s+5/T6TQtW7Y0u3fvtrpc2Mzhw4dNhw4dTEBAQLZjYOPGjc0vv/xidbl5cvToUfPWW2+Z3r17m7Fjx5oTJ05YXVKefPPNN6ZevXrZbqdixYqZbt26mZMnT1pdri3t2bPHBAYG5uvx5UGDBmV4jrlz55qAgADzwAMP+NRxtbS0NDN06FAjyYwaNSrDsvHjx1/2uipXrmxNobgiDmO4pp6vmzhxovr06aPo6GjPGWDvvPOOXnrpJc2bN8/TLikpyXMd8Pnz52f4dl9OgoKC1KxZs8vOLgOKssTERBUvXlySlJCQwI3bAQBAnvG+AlY4dOiQdu3apeTk5AzzQ0NDdeutt6pUqVIWVYas2GmsOHbsmHbs2KGkpKQM84sVK6abb75Z5cqVs6gyFAV///23fv3118suqxcUFKRq1arl6X5GKBj79+/Xvn37Lru6VVhYmGrXrp3tPaRw5bZs2aLDhw/n6jFZHYN+/fXXFRISomXLlknyrTO+MmOM0b///W+NGDFCo0aN8pwB9uyzz2rJkiWaMGGCp+0tt9ziV2dX4gLf6nHIVGaXQJSkwMBAtW7d2tMuMTHR83NUVJRfv0kGAAAAAFyZ66+/ngO8sEy5cuUIuGCZUqVKqUmTJlaXAS9UrlxZlStXtrqMIqtWrVqqVatWrh6T1THoKVOm6NSpU5J8P/iSsr8EYokSJTIcd4d/8r1eh0xdGoBVqFDBynIAAAAAAAAAAMjAH4KvdJkFYLAP3+15uMzFARinWQIAAAAAAAAAfMWmTZv8JvhKd2kAVqFCBV1zzTUWV4X84Pu9DxlcHICVKFHC4moAAAAAAAAAAJCOHj2qBx54wG+Cr3QXB2AjRowg/LIJ/+mB8HjmmWcUFhamoKAgq0sBAAAAAAAAABRxL7zwgmrXrq2hQ4f6VfCVLj0Au/baa3XLLbdYXQ7ygcMYY6wuAvkjMTFRxYsXlyQlJCR4bjYIIG/YpwAAQH7hfQUAbzBWAAB8Hf+r4C+cVhcAAAAAAAAAAAAA5BfCLwAAAAAAAAAAANgG4RcAAAAAAAAAAABsg/ALAAAAAAAAAAAAtkH4BQAAAAAAAAAAANsg/AIAAAAAAAAAAIBtEH4BAAAAAAAAAADANgi/AAAAAAAAAAAAYBuEXwAAAAAAAAAAALANwi8AAAAAAAAAAADYBuEXAAAAAAAAAAAAbIPwCwAAAAAAAAAAALZB+AUAAAAAAAAAAADbIPwCAAAAAAAAAACAbRB+AQAAAAAAAAAAwDYIvwAAAAAAAAAAAGAbhF8AAAAAAAAAAACwDcIvAAAAAAAAAAAA2AbhFwAAAAAAAAAAAGyD8AsAAAAAAAAAAAC2QfgFAAAAAAAAAAAA2yD8AgAAAAAAAAAAgG0QfgEAAAAAAAAAAMA2CL8AAAAAAAAAAABgG4RfAAAAAAAAAAAAsA3CLwAAAAAAAAAAANgG4RcAAAAAAAAAAABsg/ALAAAAAAAAAAAAtkH4BQAAAAAAAAAAANsg/AKQZ263W40bN9a9996bYf6pU6dUsWJFvfjiixZVhqKCPggAAFC08P4PVqL/AQDgPwi/AOSZy+XStGnTtHTpUs2cOdMzv3///ipdurRefvllC6tDUUAfBAAAKFp4/wcr0f8AAPAfAVYXAMC/3XTTTRoxYoT69++vli1bat26dZo9e7bWr1+voKAgq8tDEUAfBAAAKFp4/wcr0f8AAPAPDmOMsboI5I/ExEQVL15ckpSQkKCwsDCLK0JRYYxRy5Yt5XK5tGXLFvXv31/Dhg2zuqwrxj7lP+zaBwEA9sH7CiB/2fX9H2OFf7Br/wMAb/C/Cv6C8MtGGHhgpR07duiWW25RrVq19PPPPysgwP9PLGWf8i927IMAAPvgfQWQ/+z4/o+xwn/Ysf8BgDf4XwV/wT2/AOSLqVOnKjQ0VPv27dPBgwetLgdFEH0QAACgaOH9H6xE/wMAwLcRfgG4YmvXrtWoUaO0cOFCNWzYUE899ZQ4qRSFiT4IAABQtPD+D1ai/wEA4PsIvwBckbNnz6pHjx7q06ePWrRooZiYGK1bt04TJ060ujQUEfRBAACAooX3f7AS/Q8AAP9A+AXgivzrX/+SMUYjRoyQJFWuXFlvv/22XnjhBe3fv9/a4lAk0AcBAACKFt7/wUr0PwAA/IPDcF62bXCzQRS2b775RlFRUfr666/VpEmTDMvatGmj1NT/1969x0hV3v8D/8zOLnITUGyKBqplbbT1glvQiqj4lUUiitpGaTENNApVF61VaiQU01hXl0SlXrqiSI1CDJpUU28Us4haG1AiCFbQFiStN6wiXnBlkd2d3x+G/cltmbW7c2YPr1fyBHbmOTMfsg9nnjnvc57TGIsWLYpMJpNQhf8b/6eKX9rHIADpYV4B7SPt8z/7iuKW9vEHkA+fVXQWwq8UseOB9uX/FADQXswrgHzYVwBQ7HxW0VlY9hAAAAAAAIDUEH4BAAAAAACQGsIvAAAAAAAAUkP4BQAAAAAAQGoIvwAAAAAAAEgN4RcAAAAAAACpIfwCAAAAAAAgNYRfAAAAAAAApIbwCwAAAAAAgNQQfgEAAAAAAJAawi8AAAAAAABSQ/gFAAAAAABAagi/AAAAAAAASA3hFwAAAAAAAKkh/AIAAAAAACA1hF8AAAAAAACkhvALAAAAAACA1BB+AQAAAAAAkBrCLwAAAAAAAFJD+AUAAAAAAEBqCL8AAAAAAABIDeEXAAAAAAAAqSH8AgAAAAAAIDWEXwAAAAAAAKSG8AsAAAAAAIDUEH4BAAAAAACQGsIvAAAAAAAAUkP4BQAAAAAAQGoIvwAAAAAAAEgN4VcnlMvl4rrrrou777476VIAAAAAANjHPf/883HxxRfHJ598knQpEBHCr04nl8vFFVdcEdXV1VFTU5N0OQAAAAAA7OMefPDBuO+++2LkyJECMIqC8KsT2R581dbWxlFHHZV0OQAAAAAAEBERhxxySKxfv14ARlEQfnUSXw++Zs+eHT/+8Y+TLgkAAAAAACIion///rFo0SIBGEVB+NUJ7Bx8TZo0KemSAAAAAABgBxUVFQIwikJp0gXQutaCr82bN8ecOXNaft66dWvL3++///7Yb7/98n6fbDYbF154YZu2AYB9VS6Xi1WrVsVrr70WDQ0NOzzXtWvXOProo2PQoEGRyWQSqhCAtvj888/jueeeiw8++CCam5tbHs9kMtG3b9847bTTok+fPskVCADQAZ588sl4//3327TNno5Bv/HGGy2Pbw/AKisrY+TIkVFXV2cuRcEJv4pYa8HX0KFDo6amZo9XgV1++eVtfr933303pk+f/o3rhbRZtGhRy99ra2ujqqoqevbsmWBFQDFYvnx5jBs3LtauXdtqv+9973sxf/78GDx4cIEqA4rV559/HnfddVfLz4sWLYpzzz03wYrYLpfLxbXXXht33nnnLiczfF1ZWVmMHz8+7r777igt9TWajrFhw4a47bbbWn5euXJlDBs2LLmCAEi1ZcuWxZgxY/6n19j5GPSUKVNa/i4AI2mWPSxSe1vqcPTo0dHY2Bi5XK5d2sCBA6O+vj6hfy0Ul1wuF9OmTYvzzjuv5bGpU6fGsGHD2nw2DJAub775ZlRWVkafPn3i6aefjvr6+l0+U+vr6+Ppp5+OPn36RGVlZaxfvz7psoEEvf/++3HyySfH1KlTWx4777zzYtq0aZHL5RKsjIiI6dOnx8033xzXXHNNrFu3bpfvWE1NTfHWW2/FjTfeGA888EBccsklSZdMSr366qtx3HHHxa233try2PDhw2Pu3LkJVgVAmm0/Frxu3bp2O8Z8yy237PAelkAkScKvIuQeX5Cs6urqqKmp2eGxXC4Xa9asieHDh8eXX36ZUGVA0ubOnRu5XC7q6urijDPOiO7du+/Sp3v37nHGGWdEXV1dNDc3O2gF+7Avv/wyhg8fHqtXr94l6KqpqYnq6uqEKiPiq99PbW1t/OY3v4nf//73UV5eHtlsdoc+JSUlMWDAgLjmmmtixowZMXfu3Ni0aVNCFZNW7733XgwbNiw++uijaGpqanm8qakpJkyYEI899liC1QHA/0YARlKEX0VG8EVnU19fH3fccUeMGDEi+vXrF126dIl+/frFiBEj4o477ogvvvgi6RLb5O23397jgajGxsZYu3Zt1NbWFrgq9iRt44/it3Dhwhg9enT07t17r3179+4dZ511VixcuLAAlQHFqLa2NtauXRuNjY27fb66ujrefvvtAlfFdi+99FJ8+umnMW7cuLz6jxs3LhobG2Px4sUdXBmtSeP8b9q0abFly5Ydgq/tSkpK4vLLL9/h/iokJ43jD6AQBGAkQfhVRARfdDZPPfVUHH744XHllVfG4sWLo6GhIfr37x8NDQ2xePHiuPLKK6O8vDyeeuqppEvN28yZM3f7pXO7XC4XNTU1rv4qAmkcfxS/TZs2xYABA/Lu379//9i4cWMHVgQUq61bt8ZNN93U6tKGTU1N8Yc//KGAVfF1H330UURE3vv1gw8+OEpKSlq2o/DSOP/7z3/+E/Pmzdvjd5Dm5uZ455134qGHHipwZewsjeMPoJAEYBSa8KtI5Bt8nXbaaZHJZCKTycTKlSvzeu3nnnuuZZuv38MI/hezZ8+Oc845Jz788MOYOHFirFq1KtasWROPPvpovP766/Hqq6/GpEmT4sMPP4xzzjknZs+enXTJe7Vt27aYPXt2q+FXRMSHH34YTz75ZIGqYnfSOP7oHHK5XJSU5D99ymaz7ukD+6gnn3xyr+F3U1NT3HPPPXu8MoyOtX3/nO9+PZPJRElJif16QtI6/7vvvvsik8m02qekpMTqEwlL6/gD2JOOOgYtAKOQhF9FoK1XfE2aNCk2bNgQRx99dERE/OpXv4rBgwfHfvvtF8cdd9wu/U866aTYsGFDjB07tiPKZx+0ePHiqKqqih49esTChQvj3nvvjWOPPTZmzpwZFRUVcfvtt8cxxxwTs2fPjoULF0b37t2jqqoqFi1alHTprVq9enVey1SUlZXFkiVLClARu5PW8Ufn9otf/MIJJsAOlixZEmVlZXvt98UXX8Tq1asLUBFtYb9eXNI8//v73/8ezc3NrfZpbm6OV155xdKHCUnz+ANoTUcdgxaAUSjCr4R9k6UOu3fvHv369YvS0tKWxy666KL46U9/utv+29eg7tatW7vVzb6rsbExJk+eHE1NTfHggw9GZWVlq/0rKytj/vz50dTUFFdccUVRn9m8bNmyvZ51GfHVFWJLly4tQEXsLM3jD4B0Wbp0aWzbtm2v/TKZTCxbtqwAFUHnlOb5X3NzcyxbtiyvqwkbGxtj1apVBaiKr0vz+APYm448Bi0AoxCEXwlqr3t83XHHHTF58uQYOHBgO1cIu3rmmWfijTfeiDFjxsSYMWPy2ubss8+OMWPGxBtvvFHUNwhftmxZZLPZvPquWLHCF5kEpHn8AZAejY2NsWLFirz6ZrNZ4Re0Is3zv7Vr18bnn3+eV19BeTLSPP4A2qq9j0ELwOhopXvvQkdor+CrPW3bti3q6+uTLoMi99e//jUiIi644IJdxsv2s5t3N5bOP//8eOKJJ2LBggUxbNiwwhTbRm0JtBoaGmLNmjVRXl7ewVXxdWkef3QO3+Q+L7lczucr7GPefPPNvJcna2xsjOXLl9tPJKChoeEbbbd161a/rwJK8/xv+fLleffNZrPxyiuvGHsFlubxB7Bly5akS2gJwCorK2PkyJFRV1cXffr0Sbos0iJHwTU3N+cmT56ci4jc7Nmz27Tt8OHDc1deeeVun/vd736XGzRo0B63nTBhQu7cc8/d7XP9+/fPRYSmaZqmaa20srKy3NSpU/P+jJ06dWqurKws8bo1TdO0PbeNGzfmvV/PZrOJ16tpmqZpmtaebd26dbvMeTrqGPSerFixInfggQfmhgwZkvv444/btC3siWUPE/DZZ59FbW1tnH/++UVxxRcAAAAAACShoqIiZsyYES+//HLU1dUlXQ4pYdnDBPTq1SumTZsWN910U8ycOTOuvvrqpEuKLl26xJQpU+L6669PuhSK3G9/+9u4/fbbY968eXHaaadFU1NTy3M33nhj3HvvvXHZZZfFtdde2/J4NpuNZ599NsaPHx+//vWvo7q6OonS92rw4MHxz3/+M+/+L774Yhx99NEdWBE7S/P4o3M49thj27xN//794x//+EcHVAMUq9deey1OPPHEvPsfccQRbVr+jPbx+OOPx4UXXtimbTKZTNx2220xceLEDqqKnaV5/jd//vy8T4jNZrMxduzYuPfeezu4Kr4uzeMP4Pnnn4+zzjor6TIiImLJkiVx9dVXx6mnnhqjR49OuhxSQviVgEwm0zL5mTJlSkREUQRgZWVl0aNHj6TLoMideeaZcfvtt8ef//zn+PnPf77Dc7169Wr589BDD93huUceeaRl+2IdZ9vrz9e3vvWtov23pFWaxx+dQyaT+UbbGHewbznooIPa1L937972Ewno2rXrN9puv/328/sqoDTP//r27Zt335KSkujTp0/R/lvSKs3jD6Bbt25JlxARXwVfo0aNih/+8IexYMEC+03ajWUPE7I9AJs2bVpMmTIlZs6c+Y1fa926dbFy5cp4//33Y8uWLbFy5cpYuXJlfPnll+1YMXxlxIgRceSRR8Zjjz0WTz31VF7bLFiwIB577LE48sgj4/TTT+/gCr+5ioqKKC3N75yAbt267fIFh46X5vEHQHocdthheQcrpaWlUVFR0cEVQeeV5vnfMccck3ffxsbGNvWnfaR5/AG0VUccgxZ80ZGEXwlqrwBs4sSJUVFREffcc0/861//ioqKiqioqIj33nuvnSuGrw7Q/PGPf4xsNhvjxo2LZ555ptX+zzzzTPzsZz+LbDYbd955Z97hUhJOOOGEaGxszKvvkCFDIpvNdnBF7CzN4w+A9MhmszFkyJC8+jY2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "Now that we have all the reversible logic implemented and the iterative queries implemented we can finally move on to using this to build a bloq that acts on **quantum** registers! We now have to be able to query `ctrl` that is a quantum register using ancillas that are also qubits. This will essentially boil down to moving our AND and XOR logic to Toffolis and CNots. A first stab at this is below" + "from qualtran.bloqs.basic_gates.identity import Identity\n", + "\n", + "\n", + "class UnaryIterator(Bloq):\n", + " ctrl_bitsize: int\n", + " state = []\n", + " sys_bitsize: int\n", + " ops\n", + "\n", + " @property\n", + " def signature(self) -> Signature:\n", + " return Signature([Register('ctrl', QAny(self.ctrl_bitsize)), Register('anc', QAny(self.ctrl_bitsize - 1)), Register('sys', QAny(self.sys_bitsize))])\n", + " \n", + " def set_ops(self, ops):\n", + " self.ops = ops\n", + "\n", + " def compute(self, query: List[bool], bb: BloqBuilder, ancs, ctrls):\n", + " for ix in range(len(self.state)):\n", + " assert self.state[ix] == query[ix]\n", + " if len(self.state) == len(query):\n", + " return\n", + " if len(self.state) == 0:\n", + " g0 = XGate() if query[0] == False else Identity()\n", + " g1 = XGate() if query[1] == False else Identity()\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " ctrls[:2], ancs[0] = bb.add(Toffoli(), ctrl=ctrls[:2], target=ancs[0])\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " self.state.append(query[0])\n", + " self.state.append(query[1])\n", + " else:\n", + " ctrl_ix = len(self.state)\n", + " g = XGate() if query[ctrl[ix]] == False else Identity()\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " [ctrls[ctrl_ix], ancs[ctrl_ix - 2]], ancs[ctrl_ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[ctrl_ix], ancs[ctrl_ix - 2]], target=ancs[ctrl_ix - 1])\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " self.state.append(query[ctrl_ix])\n", + " self.compute(query, bb, ancs, ctrls)\n", + "\n", + " def uncompute(self, query: List[bool], bb: BloqBuilder, ancs, ctrls):\n", + " first_diff_ix = None\n", + " for ix in range(len(self.state)):\n", + " if self.state[ix] != query[ix]:\n", + " first_diff_ix = ix\n", + " break\n", + " if first_diff_ix is None:\n", + " # state is a prefix of query so we do not need to uncompute\n", + " return\n", + " if first_diff_ix < len(self.state) - 1:\n", + " # we have some extra bits we have to undo\n", + " if len(self.state) == 2 and first_diff_ix == 0:\n", + " # we are the bottom of the barrel\n", + " g0 = XGate() if self.state[0] == False else Identity()\n", + " g1 = XGate() if self.state[1] == False else Identity()\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " ctrls[:2], ancs[0] = bb.add(Toffoli(), ctrl=ctrls[:2], target=ancs[0])\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " self.state.pop()\n", + " self.state.pop()\n", + " else:\n", + " ctrl_ix = len(self.state) - 1\n", + " g = XGate() if self.state[ctrl_ix] == False else Identity()\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " [ctrls[ctrl_ix], ancs[ctrl_ix - 2]], ancs[ctrl_ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[ctrl_ix], ancs[ctrl_ix - 2]], target = ancs[ctrl_ix - 1])\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " self.state.pop()\n", + " self.uncompute(query, bb, ancs, ctrls)\n", + " else:\n", + " # first_diff_ix is the last bit, so we just need to do the CNOT trick\n", + " if first_diff_ix == 1:\n", + " g = XGate() if self.state[0] == False else Identity()\n", + " ctrls[0] = bb.add(g, q=ctrls[0])\n", + " ctrls[0], ancs[0] = bb.add(CNOT(), ctrl=ctrls[0], target=ancs[0])\n", + " ctrls[0] = bb.add(g, q=ctrls[0])\n", + " self.state[1] ^= True\n", + " else:\n", + " ancs[first_diff_ix - 2], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ancs[first_diff_ix - 2], target=ancs[first_diff_ix - 1])\n", + " self.state[first_diff_ix] ^= True\n", + " return\n", + "\n", + " def build_composite_bloq(self, bb: BloqBuilder, ctrl: SoquetT, anc: SoquetT, sys: SoquetT) -> Dict[str, 'SoquetT']:\n", + " queries = list(self.ops.keys())\n", + " queries.sort()\n", + " ctrls = bb.split(ctrl)\n", + " ancs = bb.split(anc)\n", + " for q_int in queries:\n", + " q_bools = int_to_bool_list(q_int, self.ctrl_bitsize)\n", + " print(\"q_bools:\", q_bools)\n", + " self.uncompute(q_bools, bb, ancs, ctrls)\n", + " self.compute(q_bools, bb, ancs, ctrls)\n", + " print(f\"calling ops[{q_int}]\")\n", + " [ancs[-1], sys] = bb.add(self.ops[q_int], q=[ancs[-1], sys])\n", + " ctrl = bb.join(ctrls)\n", + " anc = bb.join(ancs)\n", + " return {'ctrl': ctrl, 'sys': sys, 'anc': anc}\n", + " \n", + "cbloq = UnaryIterator()\n", + "cbloq.ctrl_bitsize = 2\n", + "cbloq.sys_bitsize = 1\n", + "ops = dict()\n", + "for ix in range(4):\n", + " ops[ix] = CZPowGate(exponent=float(ix))\n", + "cbloq.set_ops(ops)\n", + "msd = get_musical_score_data(cbloq.decompose_bloq())\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.set_figwidth(18)\n", + "fig.set_figheight(7)" ] }, { @@ -511,10 +742,7 @@ "metadata": {}, "outputs": [], "source": [ - "from typing import Dict, List\n", - "from qualtran import BloqBuilder, Register\n", - "from qualtran._infra.composite_bloq import SoquetT\n", - "from numpy import ndarray\n", + "\n", "class RecursiveUnaryIteration(Bloq):\n", " ctrl_bitsize: int\n", " state = []\n", @@ -741,6 +969,17 @@ "fig.set_figheight(7)" ] }, + { + "cell_type": "markdown", + "id": "06807ef5", + "metadata": {}, + "source": [ + "We see in the above example that changing the lowest order bit in the query requires us to only change the last ancilla bit, which makes intuitive sense. \n", + "TODO: Should write something about how this actually encodes a Segment tree?\n", + "\n", + "Now that we have a data structure that can query the state of `ctrl` given `q` our next goal is to extend it to act on a quantum `ctrl` register and utilize ancilla *qubits*, not bits. The key point to remember is that the query is still classical. Now the first thing we have to do to update our boolean logic to be reversible, as we currently just set our classical `ancilla_bits` to whatever we need them to be. One thing to keep in mind is that the uncomputation works in reverse, if we have ancillas $[c_0 \\land c_1, c_0 \\land c_1 \\land c_2, c_0 \\land c_1 \\land c_2 \\land c_3]$ we would uncompute them as $\\to [c_0 \\land c_1, c_0 \\land c_1 \\land c_2, 0] \\to [c_0 \\land c_1, 0, 0]$. One of the key insights is that when we uncompute and then recompute the ancillas, the most significant ancilla can simply be updated instead of uncomputed. This is the $Toffoli(a,b,c) \\cdot I \\otimes X \\otimes I \\cdot Toffoli(a,b,c) = CNOT(a, c) \\cdot I \\otimes X \\otimes I$ gate reduction we implemented. " + ] + }, { "cell_type": "code", "execution_count": 24, From ef06472b4447b04035b139864edeb4406475f8ab Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Wed, 21 Aug 2024 16:54:53 -0400 Subject: [PATCH 12/13] minor tweaks --- .../bloqs/multiplexers/unary_iteration.ipynb | 870 +----------------- 1 file changed, 25 insertions(+), 845 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 529b915a99..26ca7d50b1 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -69,13 +69,14 @@ "from qualtran.bloqs.mcmt.and_bloq import And\n", "from qualtran.bloqs.basic_gates.toffoli import Toffoli\n", "from qualtran.bloqs.basic_gates.x_basis import XGate\n", + "from qualtran.bloqs.basic_gates.identity import Identity\n", "from qualtran.drawing.musical_score import draw_musical_score, get_musical_score_data\n", "from qualtran.drawing import get_musical_score_data, draw_musical_score\n", "import attrs\n", "from typing import Dict, List\n", "from qualtran import BloqBuilder, Register\n", "from qualtran._infra.composite_bloq import SoquetT\n", - "from numpy import ndarray\n", + "\n", "\n", "def int_to_bool_list(num, bitsize):\n", " \"\"\"converts a given `num` as an integer to a list of booleans in big endian\n", @@ -95,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "baaa3142", "metadata": {}, "outputs": [ @@ -145,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "b2f2af19", "metadata": {}, "outputs": [ @@ -245,7 +246,7 @@ "anc = bb.add_register_from_dtype(\"anc\", QBit())\n", "sys = bb.add_register_from_dtype(\"sys\", QBit())\n", "\n", - "# SELECT on 0 = 00\n", + "# SELECT on 0 = 0b00\n", "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", "\n", @@ -254,7 +255,7 @@ "\n", "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", "\n", - "# SELECT on 1 = 01\n", + "# SELECT on 1 = 0b01\n", "\n", "ctrls[0], anc = bb.add(CNOT(), ctrl=ctrls[0], target=anc)\n", "[anc, sys] = bb.add(CZPowGate(exponent=1.0), q=[anc, sys])\n", @@ -262,7 +263,7 @@ "\n", "ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", "\n", - "# SELECT on 2 = 10\n", + "# SELECT on 2 = 0b10\n", "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", "\n", "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", @@ -270,7 +271,7 @@ "\n", "ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", "\n", - "# SELECT on 3 = 11\n", + "# SELECT on 3 = 0b11\n", "ctrls[0], anc = bb.add(CNOT(), ctrl=ctrls[0], target=anc)\n", "[anc, sys] = bb.add(CZPowGate(exponent=3.0), q=[anc, sys])\n", "[ctrls[0], ctrls[1]], anc = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=anc)\n", @@ -384,7 +385,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "id": "a037a1d1", "metadata": {}, "outputs": [], @@ -562,7 +563,6 @@ " ancs = bb.split(anc)\n", " for q_int in [2]:\n", " q_bools = int_to_bool_list(q_int, self.ctrl_bitsize)\n", - " print(\"q_bools:\", q_bools)\n", " self.compute(q_bools, bb, ancs, ctrls)\n", " print(f\"calling ops[{q_int}]\")\n", " [ancs[-1], sys] = bb.add(self.ops[q_int], q=[ancs[-1], sys])\n", @@ -597,23 +597,9 @@ "id": "314793b8", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "q_bools: [False, False]\n", - "calling ops[0]\n", - "q_bools: [False, True]\n", - "calling ops[1]\n", - "q_bools: [True, False]\n", - "calling ops[2]\n", - "q_bools: [True, True]\n", - "calling ops[3]\n" - ] - }, { "data": { - "image/png": "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wv+sW7fO6+Og27Zt07lz5wq4ImSnII5BE4D5lgArnzwuLk6DBw/WmTNnZIxR165dFR8fr27duikkJETTpk3TvHnztGXLFiUkJOjAgQOZ3rtg3rx5evnll7Vr1y7NmzdPBw4cUFhYmKQLZ4m988476tmzp/r06SNJOnnypBYtWqTt27erdu3a2r17t6pWrSrpQngWHBys3bt368CBA6pZs6Zmz56ttLQ0Va5cWevXr1fFihUlSf/+97/ldrv15ptvaurUqeratatngLvjjjs89V199dW6+eabtX//fs+8hx56SJMmTVLLli2z/PskJiZmOj8pKSkXf+WsDR48WJL0wgsvSJJeffXVXAdVl7rS4Eu60C9q1aql8uXLe+a1adNGffr00a+//qq6det6va60tLQs/45AuiVLlkiS7r///sv6S/oBxpSUlMuW3Xffffrqq6+0ePHiDPs8kBc7d+706oB2ui1btqhkyZIFVxCKBMY///Pbb7953fb06dM6dOiQSpUqVYAV4VLsVwBywjgBX7B161av26akpGjHjh0cXylkjBX+Z9u2bTnemzddWlqatm/frurVqxdwVUWPt2e05ucx6IulB2CS1KtXL0lSz54987QuXCGrrrd4/PhxU65cOfPtt98aY4xxu93m+PHjplKlSuaXX37xtHv55ZfNtddea44cOeKZd3Gb06dPmypVqpi0tDTz6aefmtq1a1/2XCdOnDCSPOsYP3686datmzHGmEGDBpl//etfnraPP/64adiwoUlMTDSpqammcePG5pNPPjHGGPPvf//b0zYpKcmEh4eb/fv3G2OMadmypfnqq68yfa2//vqrKV26tDlw4IBn3u+//27KlCmT7d9IOVwfNq/3/LpU+j3AXn/99Staz8cff+zVPb4u1axZswzXTO3Vq5dp3bp1hjaJiYlGklm8eHG2j71YdHS0CQwM9Opau0xMTExMTExMTExMTExMTExMTExMTP49BQYGZnnPr4I4Bp2Vi+8B9vHHH+fqscgfll32MC4uTtWrV1fTpk0lSU6nU6VLl860bfv27TMksBdbsmSJ2rZt69UZRiEhIZIuXPLwySeflCQ9+eST+uijjzKk8l26dFFoaKhcLpcaNmyoPXv2SJL69u2rjz76SOfPn9fnn3+uhg0bqlKlSpKkgwcPZlrjwYMH1blzZ02cOFEVKlTwzA8PD9fx48fz7SyuK/Hggw+qTJky+uabb65oPWvWrFFgYKB69ux5xWeQAQAAAAAAAADgjxwOh3r16qXAwECtWbPG6nKKJEsve+it4sWLZ7ls7ty5niCrbt262rVrl44fP64yZcp42sTFxenWW29ViRIltHHjRm3evFm9evXyBDR//fWXlixZog4dOkiSihUr5nmsy+Xy3CDy+uuv15133qlPP/1UEyZM0KuvvuppFxoaelmQFR8fr1atWmnYsGG6//77MyxLSkqSy+XK9mZ5CQkJmc6fP3++HnnkkSwflxsHDhxQ8+bNddVVV2ny5MlXtK4RI0Zow4YNatWqlWJjY1WnTp08rSc8PPyya0kfPXrUsyw3qlatyk1ZkaMXX3xRY8aM0ccff6zmzZt7wvCzZ8+qRo0aki6cnjxs2DDPY1wul1avXq3HHntMAwcO1Ouvv25J7bCPzp07KzY21uv2X331lVq0aFGAFaEoYPzzPzfccINOnDjhdfv9+/frmmuuKcCKcCn2KwA5yWqckKT//Oc/+vDDDyVduHxWaGioJMYJ5L/Vq1d7fR8pSYqKitL8+fMLsCJcivcU/ue2227T9u3bvW7/448/6tZbby3Aioqmhg0betUuP49BZ2bTpk1q1aqVatWqpREjRlzx+pB7loVfjRs31q5du7RmzRo1bdpUaWlpOnnypEqUKKFTp055tY7k5GTFxcVp+vTpkqRq1aqpY8eO6t27tz7++GOFhoZq//79GjJkiN555x1JF876eu655zJ0uAkTJigmJsYTfmUnOjpa999/v4oXL65WrVp55teuXVs7d+70nMl2+PBhRUVFaciQIXr88ccvW8/27dtVs2ZNOZ1Zn3yXft+yS10czl2J9OArLS1Nq1evVuXKla9ofaVKldLKlSvVqlUrRUVF5TkAi4yM1H//+18dO3ZM5cqVkyStWLFCJUqU8Pxz95bT6czy7wika9euncaMGaMvvvhCjz76qGf+xdfNLlGihOdMz3Rz5szxPJ5+hitVtmxZuVwur68Pft1119HvcMUY//xP6dKlvQ6/nE6nypcvn2/vHeEd9isAOclqnJCkq666yvPzDTfckGE8YJxAfrr22mu9butyuVS2bFn6XSHjPYX/KVu2bK7Cr+uvv55tVACyO95+sfw8Bn2pTZs2KSoqSpUqVdLKlSu5D7NFLLvsYalS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POvauXOn9u3bp/Xr16tGjRo6ffq0SpQoIUlq3ry5GjRooB9//FHx8fG66667NHHiRMXHx6tu3brat2+fQkNDJUkPP/ywmjZtqj59+mjSpEl6+OGHPa/xpptuknQhmLtUUFCQWrdurU8++UR9+vTJ8u+UmJjo9d/04ra5eZydpAdgrVu3Vrt27bRkyRLPdgUAAAAAAAAAXFAQwVdKSorfHZu+0uPq2f3dLs00unbtqvj4eHXr1k0hISGaNm2a5s2bpy1btighIUEHDhzQihUrLlvPvHnz9PLLL2vXrl2aN2+eDhw44HneypUr65133lHPnj09WcPJkye1aNEibd++XbVr19bu3btVtWpVSRfCs+DgYO3evVsHDhxQzZo1NXv2bKWlpaly5cpav369KlasKEn697//LbfbrTfffFNTp05V165d5XA4JEl33HGHp76rr75aN998s/bv3++Z99BDD2nSpElq2bJlrv+m+cGy8Gv06NEqW7asJGnEiBF65ZVXNHToUJ06dUq1a9fWf/7zHy1dulTR0dFq3769Tpw4oXvuuUdffPGFmjZtqrS0NJ08eVKStGvXLpUoUULh4eGaPn266tevr6CgoAzPFxkZqeeee87ze0xMjLp3767rrrtOLVu21OzZs9W7d2/P8j179mj16tVKSUlRjRo1FBcXp8jISLVq1UozZsxQ7969dfToUa1cuVKTJ0+WJH399dcaNGiQ13+DyMhILViwINvwq3jx4l6v72Lly5fP0+Os5HTmz4mIlwZgK1euVEhISL6sGwAAAAAAAAD83Y8//lggwdfUqVM1derUfKjQGnk5rm6MyXR+VpnGhx9+qE8//VQRERGSLgRbcXFx+uWXXzJ9/jNnzmjHjh267bbb9Pnnn6tatWoqU6ZMhjaRkZE6fPiwjh49qvLly+uTTz5RmzZtFB4erkcffVRTp07NcBumjRs3avXq1QoODtadd96pOXPm6KGHHtJTTz2lCRMm6I033tD58+f14Ycf6ocffpCUff6xbds2xcXFaeLEiRlq6tevX67+lvnJsssefvLJJ2rQoIFq1qypKVOmeK5fWaxYMd17772SLvxx9uzZI+lCQlq9enU1bdpU0oWgpHTp0pL+75KHOUkPQFJTUzV9+nQ98cQTkqQnn3zyslP/unXrpoCAAIWEhCgiIsJTR3R0tMaPHy9J+uCD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wTU3N+cmT56ci4jc7Nmz27Tt8OHDc1deeeVun/vd736XGzRo0B63nTBhQu7cc8/d7XP9+/fPRYSmaZqmaa20srKy3NSpU/P+jJ06dWqurKws8bo1TdO0PbeNGzfmvV/PZrOJ16tpmqZpmtaebd26dbvMeTrqGPSerFixInfggQfmhgwZkvv444/btC3siWUPE/DZZ59FbW1tnH/++UVxxRcAAAAAACShoqIiZsyYES+//HLU1dUlXQ4pYdnDBPTq1SumTZsWN910U8ycOTOuvvrqpEuKLl26xJQpU+L6669PuhSK3G9/+9u4/fbbY968eXHaaadFU1NTy3M33nhj3HvvvXHZZZfFtdde2/J4NpuNZ599NsaPHx+//vWvo7q6OonS92rw4MHxz3/+M+/+L774Yhx99NEdWBE7S/P4o3M49thj27xN//794x//+EcHVAMUq9deey1OPPHEvPsfccQRbVr+jPbx+OOPx4UXXtimbTKZTNx2220xceLEDqqKnaV5/jd//vy8T4jNZrMxduzYuPfeezu4Kr4uzeMP4Pnnn4+zzjor6TIiImLJkiVx9dVXx6mnnhqjR49OuhxSQviVgEwm0zL5mTJlSkREUQRgZWVl0aNHj6TLoMideeaZcfvtt8ef//zn+PnPf77Dc7169Wr589BDD93huUceeaRl+2IdZ9vrz9e3vvWtov23pFWaxx+dQyaT+UbbGHewbznooIPa1L937972Ewno2rXrN9puv/328/sqoDTP//r27Zt335KSkujTp0/R/lvSKs3jD6Bbt25JlxARXwVfo0aNih/+8IexYMEC+03ajWUPE7I9AJs2bVpMmTIlZs6c+Y1fa926dbFy5cp4//33Y8uWLbFy5cpYuXJlfPnll+1YMXxlxIgRceSRR8Zjjz0WTz31VF7bLFiwIB577LE48sgj4/TTT+/gCr+5ioqKKC3N75yAbt267fIFh46X5vEHQHocdthheQcrpaWlUVFR0cEVQeeV5vnfMccck3ffxsbGNvWnfaR5/AG0VUccgxZ80ZGEXwlqrwBs4sSJUVFREffcc0/861//ioqKiqioqIj33nuvnSuGrw7Q/PGPf4xsNhvjxo2LZ555ptX+zzzzTPzsZz+LbDYbd955Z97hUhJOOOGEaGxszKvvkCFDIpvNdnBF7CzN4w+A9MhmszFkyJC8+jY2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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABrMAAAI7CAYAAABP3WAsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACDu0lEQVR4nOzdd5gV5fk/4GfZpSMqKqBYsRFURDEqGhSBgIogdmMkNqyIGGsSjSUmJiY2MDYUNHYTCyIqKC0aNWIBxAIqQUSkBSJKh935/eFv9+sK22D3nNnd+76uc13smXfOeXZ45z2z8znzTk6SJEkAAAAAAABACtXJdgEAAAAAAABQEmEWAAAAAAAAqSXMAgAAAAAAILWEWQAAAAAAAKSWMAsAAAAAAIDUEmYBAAAAAACQWsIsAAAAAAAAUkuYBQAAAAAAQGoJswAAAAAAAEgtYRYAAAAAAACpJcwCAAAAAAAgtYRZAAAAAAAApJYwCwAAAAAAgNQSZgEAAAAAAJBawiwAAAAAAABSS5gFAAAAAABAagmzAAAAAAAASC1hFgAAAAAAAKklzAIAAAAAACC1hFkAAAAAAACkljALAAAAAACA1BJmAQAAAAAAkFrCLAAAAAAAAFJLmAUAAAAAAEBqCbMAAAAAAABILWEWAAAAAAAAqSXMAgAAAAAAILWEWQAAAAAAAKSWMAsAAAAAAIDUEmYBAAAAAACQWsIsAAAAAAAAUkuYBQAAAAAAQGoJswAAAAAAAEgtYRYAAAAAAACpJcwCAAAAAAAgtYRZAAAAAAAApJYwCwAAAAAAgNQSZgEAAAAAAJBawiwAAAAAAABSS5gFAAAAAABAagmzAAAAAAAASC1hFgAAAAAAAKklzAIAAAAAACC1hFkAAAAAAACkljALAAAAAACA1BJmAQAAAAAAkFrCLAAAAAAAAFJLmAUAAAAAAEBqCbMAAAAAAABILWEWAAAAAAAAqSXMAgAAAAAAILWEWQAAAAAAAKSWMAsAAAAAAIDUEmYBUCHz5s2LAQMGROvWraN+/fqx3XbbRa9evWLs2LFx3XXXRU5OTomP66+/vthrnX766fH555+v931KWjZhwoTYd999o379+rHLLrvEgw8+WGbN77//fnTq1CkaNGgQ2223Xfz5z3/egN8carbK3LcBIC2yeez6zDPPxE9/+tPYaqutomnTptGxY8cYPXp0mTU7dqUmy+Y++a9//SsOPvjg2GKLLaJhw4bRpk2buO2228qs2T4JkA7CLADK7fPPP48OHTrEuHHj4i9/+UtMnTo1Ro0aFYcddlj0798/Lrvsspg7d+46j9NPPz0222yzOOWUU2Lx4sVx5513RpIkRa87Y8aMePTRR0tdFhExc+bM6NmzZxx22GExefLkuPjii6Nfv36lnhT45ptvonv37rHDDjvEu+++G3/5y1/iuuuuiyFDhlTdhoJqpjL2bQBIm2wfu7766qvx05/+NF588cV4991347DDDotevXrFpEmTSqzZsSs1Wbb3ycaNG8eFF14Yr776anz88cdx9dVXx9VXX13q/mWfBEiPnOT7IzwAlOLII4+M999/P6ZPnx6NGzcutuzrr7+OzTbbbJ11Hn300TjttNPihRdeiB49esTy5cvj97//fbz77ruRn58f++23X7z++utx0003Rfv27UtcdtBBB8WVV14ZL7zwQnzwwQdFr3/yySfH119/HaNGjVpvzXfffXdcddVVMW/evKhXr15ERPzqV7+K4cOHx7Rp0ypv40A1Vhn7NgCkTbaPXddnjz32iJNOOimuueaa9S537EpNlsZ98thjj43GjRvHww8/vN7l9kmAFEkAoBwWLVqU5OTkJDfeeGO513nnnXeShg0bJn/5y1/WWfbCCy8kubm5yaGHHpqsXr26XMs6deqUDBw4sFjbYcOGJU2bNi2xhr59+yZHH310sefGjRuXRESyePHicv8uUFNV9r4NAGmQhmPXH8rPz0+222675I477iixjWNXaqo07pPvvfde0qJFi+S+++4rsY19EiA9TDMIQLl89tlnkSRJtGnTplztFyxYEMccc0wcd9xxcdlllxU9v3Llyrjmmmti0KBB0blz5zjwwAOjW7duMXHixFKXRXw3v3qLFi2KvU+LFi3im2++iRUrVqy3jpLWKVwGtV1l7dsAkCZpOHb9oZtvvjmWLl0aJ554Yol1OHalpkrTPrnttttG/fr1Y7/99ov+/ftHv379SqzDPgmQHsIsAMolqcCstGvWrInjjz8+WrRoEffdd1+xZcuXL48WLVrEqFGjYtttt43zzjsvhg0bFp988kmpy4CqUVn7NgCkSdqOXR977LG4/vrr4+9//3s0b958o38/qG7StE++9tpr8c4778Q999wTt99+ezz++OOV8jsCULXysl0AANXDrrvuGjk5OeWaF/yiiy6KTz/9NN5+++1o0KBBsWXNmjWL/v37F3tu5513jp133jkiotRlLVu2jPnz5xdbPn/+/GjatGk0bNhwvbWUtE7hMqjtKmvfBoA0ScOxa6Ennngi+vXrF//4xz+iW7dupdbi2JWaKk375E477RQREXvttVfMnz8/rrvuuvjZz3623lrskwDp4cosAMqlWbNm0aNHj7jzzjtj2bJl6yz/+uuvIyJiyJAhMWzYsHj66adj2223LfU1H3zwwdhxxx3Lvaxjx44xduzYYs+98sor0bFjxxLfo2PHjvHqq6/GmjVriq2z++67x+abb15qfVAbVMW+DQDZloZj14iIxx9/PM4444x4/PHHo2fPnmXW7diVmiot++QPFRQUxKpVq0pcbp8ESA9hFgDlduedd0Z+fn7sv//+8fTTT8enn34aH3/8cQwePDg6duwYr7/+egwYMCCuueaaaN26dcybN6/YY8mSJRv1/uedd1785z//iSuuuCKmTZsWd911V/z973+PX/7yl0Vt/vrXv0bXrl2Lfj7llFOiXr16cdZZZ8WHH34YTz75ZAwaNCguueSSjaoFapJs79sAUBWy/fn22GOPxS9+8Yu45ZZb4oADDljv6zp2pTbJ9j555513xvPPPx+ffvppfPrppzF06NC4+eab49RTTy1qY58ESLEEACrgq6++Svr375/ssMMOSb169ZJWrVolvXv3TsaPH5+cfvrpSUSU+DjttNM2+v3Hjx+ftG/fPqlXr17SunXr5IEHHii2/Nprr0122GGHYs9NmTIl+clPfpLUr18/adWqVfKnP/1po+uAmibb+zYAVIVsfr4deuihZb6uY1dqm2zuk4MHD0722GOPpFGjRknTpk2TffbZJ7nrrruS/Pz8ojb2SYD0ykmSCtyBEQAAAAAAADLINIMAAAAAAACkljALAAAAAACA1BJmAQAAAAAAkFrCLAAAAAAAAFJLmAUAAAAAAEBqCbMAAAAAAABILWEWAAAAAAAAqSXMAgAAAAAAILWEWQAAAAAAAKSWMAsAAAAAAIDUEmYBAAAAAACQWsIsAAAAAAAAUkuYBQAAAAAAQGoJswAAAAAAAEgtYRYAAAAAAACpJcwCAAAAAAAgtYRZAAAAAAAApJYwCwAAAAAAgNQSZgEAAAAAAJBawiwAAAAAAABSS5gFAAAAAABAagmzAAAAAAAASC1hFgAAAAAAAKklzAIAAAAAACC1hFkAAAAAAACkljALAAAAAACA1BJmAQAAAAAAkFrCrBRZuHBhrFmzJttllGnu3LmRJEm2ywAAAAAAoJpZu3ZtLFiwINtllOnbb7+Nb7/9Nttl8P8Js1JiypQpse2228bJJ5+c6kBr/PjxsfPOO0ffvn2zXQoAAAAAANXMwQcfHO3atYuPPvoo26WUaMmSJfHTn/40WrVqFf/73/+yXQ4hzEqNpUuXxurVq+OZZ55JbaA1fvz46NmzZ6xYsSIWLVqU7XIAAAAAAKhmFi1aFPPnz48uXbqkMtBasmRJ9OjRI95666349ttvU3muvjYSZqXMn//853j++edTF2gVBlmdOnWKI444ItvlAAAAAABQTZ155pnRvHnz1AVahUHW9OnT49prr812OXyPMCtlevXqFU8//XSqAq3vB1nDhw+Phg0bZrskAAAAAACqqa222irGjh2bqkDr+0HWmDFjokOHDtkuie8RZqVQmgItQRYAAAAAAJUtTYGWICv98rJdQG01Y8aMOO6442Lp0qUREbFixYqIiMjNzY2I/wu0jjvuuDj55JPjiSeeiLp162a0xpKCrNzc3PjnP/8Zu+yyS6W8zzbbbBPDhw+PZs2aVcrrAQAAAABQOX54LntjzZo1q+g8eGGg1bVr1+jSpUuMGzcu2rZtWynvU14lBVmFNe6///6Rl/ddlLLNNtvEc889F5tvvnlGayQiJ0mSJNtF1EYPPPBAnHnmmXHFFVdETk5ORETsuuuucdZZZxVr9/zzz8dxxx0XvXr1ymigVdoVWf/5z39iyJAhlfI+ixYtivvvvz9effXV6NSpU6W8JlA9LV26NK677rqYMWNG7LzzznHddddFkyZNsl0W1Fr5+fnxl7/8JSZOnBhbbbVV/Pa3v41tt90222UBQGqMHj06/va3v0WSJHHqqadGz549s10S1GpTpkyJ2267LZYuXRqHH3549OvXL9slQY0xbNiwOOuss4qdy94Yubm5cemllxa7uGHhwoXRtWvXWLBgQUYDrdKuyMrPz49bb701Fi1aFBHfncu+7777MlIX6xJmZUlhmJWfnx916pQ+22OmA61MTi04ffr0aNOmjTALarmFCxfG4YcfHlOmTImCgoKoU6dO7L333jFq1KjYaqutsl0e1DorV66Mn//85/Hss89GRESdOnWiefPmMXbs2PjRj36U5eoAIPsefPDBYl9GTZIk7r333jj77LOzWBXUXhMmTIijjjoqVq5cGQUFBZEkSVx66aXx5z//uczzbkDZCsOs8pzL3hiZDrQqOrXg9OnTY/fdd6/SmiiZ0bwayOQ9tNwji8q2bNmyGDx4cHTt2jVatmwZ9erVi5YtW0bXrl1j8ODBsXz58myXSJYlSRK9evWKKVOmRH5+fiRJEvn5+fH+++9Hz549w3cuiDCWZNqFF14Yw4cPjyRJivbJBQsWxCGHHFJp00rwHX0b0sU+SXm88sorccYZZ0RBQUHRI0mSOOecc+KFF17IdnmkgLEks2bOnBndu3ePFStWFP1NGRFxyy23xM0335zl6moe/ZuqlMl7aLlHVjWUkBXDhg1LIiLJz88v9zojRoxI6tatmxx77LHJ6tWrK72mcePGJQ0bNky6d++eLF++vNJff32mTZuWRETy6quvZuT9yKyRI0cmLVu2TCIiiYhk0003TXbaaadk0003LXquZcuWyciRI7NdKln0/PPPF/WH9T2ee+65bJdIlhlLMuuTTz5JcnJy1rs/1qlTJ7nxxhuzXWKNoW9DutgnKY+CgoJk3333TXJzc9f5nMzNzU322GOPpKCgINtlkkXGksw7/fTTk7y8vPUevzZt2jRZsmRJtkusMfTv2mvo0KEVPpe9MRYsWJDstddeSYsWLZIPP/yw0l//66+/Tg444IBks802S955551yrzdt2rRKr4Xyc2VWNVKVV2iV54qszp07R05OTuTk5MTkyZPL9boPPvhg0ToXX3xxpdVL+g0ZMiR69+4dCxcujH79+sWUKVPio48+imeeeSY+/vjjeP/99+Pss8+OhQsXRu/evSvtPmxUP4MGDSq6oeYP5ebmxuDBgzNcEWliLMm8e+65p8RpIwoKCmLw4MGRn5+f4apqHn0b0sU+SXm9/fbb8d577633szA/Pz8+/PDDeP3117NQGWlgLMm8RYsWxaOPPhpr165d7/Jvv/02Hn/88QxXVTPp35SkKs4ZV+UVWq7IqsaynabVVhtyZVahyr5Cq7xXZB166KHJ2WefncydOzdZs2ZNkiRJMmvWrOTII49MGjZsmGy11VbJZZddVrQsSZJk+fLlydy5c5OOHTsmAwcOXOc1XZlVM40dOzbJzc1NNtlkk+SVV14pev7SSy9NIiK58sori5575ZVXkiZNmiS5ubnF2lI7LF68uMQrQL7/WLRoUbZLJQuMJdnx/W9alvR47bXXsl1mtaZvQ7rYJ6mISy+9tMQrQCIiycvLSy688MJsl0kWGEuy44EHHij1uDUnJyc55JBDsl1mtad/U9qVWVVxzrhQZV+htaFXZBVyZVZ2ZfzKrNtvvz3mzZtXapsdd9yxWIq7YMGC2GOPPSIiYvXq1XHllVfGLrvsEj/60Y9izz33jKFDh67zGuPHj4+cnJx4+OGHK632yy67LJ544omIiHjiiSeiffv2seeee8aee+4Zt9xyS1G7999/P4444ohKe98fqswrtCp6j6xGjRpFy5YtIy8vL/Lz86Nnz56xevXqeOONN+Jvf/tbPPjgg3HNNdcUtW/YsGHR/LnUDmvXro3+/ftHfn5+PProo9GtW7dS23fr1i0ef/zxyM/PjwEDBpT4bSpqpilTppTrnljl/WYPNYexJDsWLlxY5nFaTk5OTJo0KUMV1Tz6NqSLfZKKeuedd0r9f1+7dm288847GayINDCWZM97770XdevWLXF5kiQxadIk92LeCPo35VFV54wr8wqtbF6RJROpHKkKswpvnPpDzz33XPTu3TsiIk4//fT47LPPYsqUKfHxxx/HyJEj4+abb46777672DpDhw6Nrl27rvc/dUPMmTMnXnzxxTjppJMiImK77baLUaNGxQcffBCvv/563H333TFhwoSIiGjXrl3Ur18/xo0bVynvvT6VEWhVNMj6oZdffjk++uijeOSRR6J9+/ZxxBFHxA033BB33nlnrF69usL1UDOMHTs2pk2bFr169YpevXqVa52jjjoqevXqFdOmTavS/Yb0mTx5conTmRWqU6eOMKsWMpZkx5QpU8psk5uba5/cCPo2pIt9koooPClelilTpqz33AY1l7Eke959990yz4l9++238cUXX2SooppH/6aiKvuccWUEWtmeWlAmUjmqNMx688034yc/+Unsvffe0a5du7j++uvjq6++ipNOOinat28fkydPjuuuuy6OO+646NGjR+y5554xd+7cdV5n+PDhccwxx8Snn34aw4cPjyFDhkTjxo0j4rvE8pZbbokbbrihqP3XX38dL7zwQjzyyCPx0UcfxWeffVa07PTTT49zzz03unbtGrvttlsce+yxsXr16li5cmW0bNkyZs+eXdT2N7/5TVx55ZURETFs2LA47rjjIicnJyIiDj744GjZsmVERGy66abRpk2b+Pzzz4vW/dnPfhb33ntv5W3M9diYQGtjg6yI7/5/99prr2jRokXRcz169IhvvvkmPvzwwwq/HjXDmDFjIiKib9++FVrv1FNPjYiIV155pdJrIr0mTZpUrjDLVSC1j7EkOyZNmlTiPewKrV27NiZOnJihimoefRvSxT5JRcyePTu++eabMtutWLEiZsyYkYGKSAtjSXYUFBSU+0tW/qbccPo3FVUV54w3JtDKdJAlE6m6TCSvql548eLF0adPn3jqqaeiU6dOUVBQEF9//XU88MAD8eSTT0b79u0j4rv/lDfffDMmTZpUrIMX+vbbb2PatGnx4x//OP7xj3/ErrvuGltssUWxNh07doy5c+fG/Pnzo0WLFvHYY49Fjx49omXLlnHqqafGsGHD4sYbbyxqP3ny5Bg/fnzUr18/DjnkkHj66afjZz/7WZx11llx9913x4033hirVq2KBx54IP79739HRMSECRPil7/85Xp/148++ijefPPNuOeee4rV1L9//43djGUqDLSOO+64OPnkk+OJJ54o9fLqiMoJsiIi5s2bt87/WeHPZV02+UMrVqyIZcuWbVAdpMvMmTMjImKHHXaIVq1axVdffbVOm5tuuiluuummop+33377+Pvf/160vr5Qe8yaNavMKQfWrl0bs2bN0i9qGWNJdsyaNSvq1Kmz3pvaf9+cOXNs3w2kb0O62CepiIoEVDNmzIhtttmmCqshTYwl2fHtt9/G8uXLy2yXk5NjG28E/ZuIiFWrVpW7bWWeM/6+wkCra9eu0aVLlxg3bly0bdu21HUyHWTJRKo4E6mqm3GNHDky6dSp0zrP77DDDsmkSZOKfr722muTs846q8Q2Tz75ZHLBBRcU/btdu3brvObixYuTiEiWLFmSJEmS7Lvvvsno0aOTJEmSqVOnJttss02ydu3aJEmS5LTTTkv++Mc/Fq178cUXJzfccEOSJEny5ZdfJttss02ycuXK5OGHH0569+5d1G633XZLJk6cuM57z549O9lll12Sv//978WeX7VqVRIRyYoVK9a7fYYNG1biTfM2xIgRI5K6deuWeaPZzz77LGnYsGHSvXv3ZPny5RV6j0MPPbTYDfnOPvvs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7ZKoAYRZVMisWbPimmuuiYKCgoiIYjftKwy0cnJy4qSTToonn3xSoAUAAAAAUEvcfPPNcfnllxcFWd+/Nc2NN94Yw4YNi4iIRo0axU033RSbbbZZliqlujHNIBVyxx13xN///vf44osv4osvvogGDRrE1VdfXbQ8Ly8vHn744TjhhBPipJNOiqeffjqL1QIAAAAAkAklBVnbb799nH322bF69eqi88pDhgyJJ598MssVU524MosK22GHHeKf//xnicsLA62IcIUWAAAAAEANV9oVWXXr1o0hQ4YUa5+bm5vpEqnmXJlFlXCFFgAAAABAzVdakAWVRZhFlRFoAQAAAADUXIIsMkWYRZUSaAEAAAAA1DyCLDJJmEWVE2gBAAAAANQcgiwyrVqFWe+8804cccQRERGxZMmSOPfcc6N169ax++67R4cOHeK5555bZ50HHnggcnJy4rXXXqu0Ok444YR48803IyLihRdeiA4dOkT9+vXj4osvLtbur3/9a9x4442V9r7VmUALAAAAAKD6E2RlhjykuGoVZj377LPRp0+fSJIkjjzyyKhbt2588sknMX369Bg6dGicf/758eKLLxZbZ+jQodG1a9cYOnRopdQwceLEWLx4cXTs2DEiInbdddcYNmxYXH755eu0Peecc2Lo0KGxZMmSSnnv6k6gBQAAAABQfQmyMkceUlyVhlk///nPY7/99ot27dpFz549Y968efH555/HZpttFtdee2106NAhdtlll2Ib/M0334yf/OQnsffee0e7du2KpYsjRoyIo48+OsaOHRuzZs2KW2+9NfLy8iIion379nH11VfHDTfcUNR++vTpMXPmzHjooYdi+PDh8c033xQt69y5c1x22WXRqVOn2HnnneO8886LiIivvvoqWrRoEcuXLy9qe8opp8Tdd98dERH33ntvnHLKKUXLdtttt9h7772L6vi+evXqRffu3eOxxx7b2E1ZYwi0AAAAAACqH0FW6eQhVZuHVGmYdfvtt8c777wT77//fnTq1Cmuu+66iPjukrh27drFu+++G3/961/jl7/8ZURELF68OPr06RN//OMfY8qUKTF58uTo1KlTRER8+umn0bRp02jZsmW899570aFDh6hXr16x9+vYsWNMnjy56OehQ4dG3759Y5tttokuXbrEE088Uaz9jBkzYvz48fHBBx/E6NGj480334xtttkmunXrFo888khERMyfPz/GjBkTffv2jYiICRMmxAEHHFDubdCxY8cYO3ZsicuXLVu2zqO0Zdl+rFmzpty/e0kEWgAAAAAA1UdVBFmrVq3K+vnuip6fL408pOw8ZGOsG59VosceeywefvjhWLlyZaxcuTK23HLLiIho0KBBHHvssRHx3S83Y8aMiPguhdx9992L/sPq1KkTzZo1i4j/u6SuLA0bNoyIiLVr18ZDDz0U//znPyMi4swzz4wbbrghzjnnnKK2J510UuTl5UVeXl60b98+ZsyYER07doyBAwfG2WefHeecc07cd9998bOf/SyaNGkSERFffvlltGjRotzboGXLlvHll1+WuLzwddenIu+TSTvttNNGv0ZhoBXx3f/DiBEj4sgjj9zo1wUAAAAAoPLceeedVXJF1sCBA2PgwIGV8lpVYX3n55MkKbG9PKTsPGRjVNmVWf/6179i8ODB8eKLL8YHH3wQt956a6xcuTIiIurXr1/U4XNzcyM/P7/M1xs+fHjRf96+++4b77777jpXCb355ptx0EEHRUTEyJEj4+uvv44ePXrEjjvuGP3794/33nsvPvjgg6L2DRo0KPp3bm5urF27NiIi9t9//2jUqFGMHz8+hgwZEv379y9q16hRo6LfozxWrlxZ1KEoLi8vL84888zIz8+PiRMnZrscAAAAAAB+4I033ohGjRrFKaecYmrBEshDvlOVeUiVXZn1v//9LzbZZJPYYostYvXq1XHvvfeWuc5BBx0Un376abz22mvRqVOnKCgoiK+//jpWrVoVS5cujV133TUiIrp06RLbbbdd/PKXv4zbb7898vLyYvLkyXHbbbfFU089FRHfXVJ3++23F839GBFx5ZVXxtChQ+O2224rs5aBAwfGL37xi2jbtm3stttuRc+3a9cupk+fHtttt125tsPHH38ce++9d4nLly5dWuznZcuWFSWd8+fPj8aNG5frfTLlN7/5TYwePbpSXmv8+PFx9NFHR/fu3ePKK6+slNcEAAAAAKDy3H777TF16tTo0qVLjBs3Ltq2bVsprzto0KA466yzKuW1KsuGnp+Xh3ynrDxkY1RZmHX44YfHI488ErvvvntsscUW0a1bt5gzZ06p62y++ebx7LPPxqWXXhrffvtt1KlTJ2644YaYM2dO9O7du6hdnTp14qWXXorL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WBXUXiNHjozDDz88Vq1aVfTcHXfcEWeddVYWqwKAdFi4cGEceOCBxU6UT5s2LQ444ICYN29eFiuD2mnNmjXRvXv3GDlyZNFzixcvjoMOOijee++9LFYGQGUSZgGQVV9++WVceeWV613261//2tSDkGGrVq2Kc889N/Lz89e5EuvBBx+MCRMmZKcwAEiJP/zhDzFr1qxiU5rl5+fHl19+Gddff30WK4Pa6cEHH4zXXnut2LFrfn5+LF++PAYMGFDsS5MAVF/CLACyatCgQSVOXVZQUBC33357ZguCWu6JJ56Ir776ar1/9Ofm5sYf/vCHLFQFAOmwePHiuPvuu4sFWYXy8/Pj/vvvjwULFmShMqidCgoK4g9/+EPk5OSssyw/Pz/eeOONePPNN7NQGQCVTZgFQNasXbs27r///vWeDIj47o+PoUOHxtq1azNcGdRe9957b9Sps/5DxPz8/Bg7dmx88cUXGa4KANLh8ccfjzVr1pS4vKCgIB5++OEMVgS126uvvhqzZs0q8eqrvLy8uO+++zJcFQBVQZgFQNZMnz49vv7661LbLFmyJKZNm5aZgqCWW716dbz99tslXi0ZEZEkSbzxxhsZrAoA0uO1114r8Usf328DZMZrr70Wubm5JS5fu3atabIBaohqE2a98847ccQRR0TEdyc2zz333GjdunXsvvvu0aFDh3juuefWWeeBBx6InJycSj2QPOGEE4ouT37hhReiQ4cOUb9+/bj44ouLtfvrX/8aN954Y6W9L0BNNHny5HK1mzRpUtUWAkRExMcff1zmlZB169Yt974LADXN22+/XeKsAhHfXZn1zjvvZLAiqN0mTZpU5j2xZs2aFd9++22GKgKoHPKQdVWbMOvZZ5+NPn36RJIkceSRR0bdunXjk08+ienTp8fQoUPj/PPPjxdffLHYOkOHDo2uXbvG0KFDK6WGiRMnxuLFi6Njx44REbHrrrvGsGHD4vLLL1+n7TnnnBNDhw6NJUuWVMp7A9REkyZNirp165baxolzyJzyBMdr166Nd999NwPVAEC6LF26NGbOnFlmuzlz5sT//ve/DFQElDWrQMR3Mwu8//77GaoIoHLIQ9aVV2WvHBErVqyI008/PaZOnRp169aNFi1aRL169eKUU06JU045JSIiXn755fjtb38bb731Vtx///1x6623Rr169YpunHrAAQdERMSIESPilVdeibFjx8asWbNi/PjxkZf3Xfnt27ePq6++Om644YY48sgjI+K7qatmzpwZb7/9drRt2za++eabaNq0aUREdO7cOfbbb79466234quvvoqf/vSncc8998RXX30V++yzT8ycOTMaNWoUERGnnHJKdOrUKc4///y49957i+qOiNhtt90i4ruO9UP16tWL7t27x2OPPRbnn3/+erfPsmXLSn1ufcuhutK3WZ+pU6eWes+BiIg1a9bElClT9BsiwlhS1d5///2oW7duqftlkiQxdepU27+S6duQPvZLfmjKlCllXgFSaNKkSUXnM6jdjCVVZ+XKlfHll1+Wq+3kyZOjffv2VVtQLaNvU1OVp283btx4vc/LQ0rPQzZaUoWeeeaZpHv37kU/L1q0KHn55ZeTjh07Fj3Xu3fv5KGHHkqSJEmaNm2afPXVV0mSJMnq1auTb7/9NkmSJPnkk0+Sgw46KEmSJLnpppuS3r17r/Ne7733XtKgQYOiny+//PLkyiuvTJIkSY455pjk3nvvLVp26KGHJn369EnWrFmTLF++PNlxxx2TN954I0mSJDnllFOK2s6bNy/Zaqutiupo3bp1MnXq1HXe+9prr00GDhy4zvN/+9vfkuOOO67E7RMRHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7V5FESeUjpecjGqtJpBvfee+/4+OOP44ILLognn3wy6tatGz/96U9jyZIlMWnSpJg1a1ZMnDgxTjzxxIiI6Nq1a/Tt2zcGDRoUM2fOjCZNmkTE/11SV5aGDRtGxHfT3zz00ENxxhlnRETEmWeeuc6ldSeddFLk5eVFw4YNo3379jFjxoyIiBg4cGDceeedERFx3333xc9+9rOiOr788sto0aJFuX//li1blvsbIgAAAAAAQPUkD6naPKRKpxls3bp1fPTRRzFu3LgYM2ZMXHHFFTF58uS46KKL4o477ogWLVrEmWeeGfXr14+IiKeffjrefffdmDBhQhx55JHx+9//Pk4++eQYPnx4/O1vf4uIiH333TcGDx4ca9asKXaflTfffDMOOuigiIgYOXJkfP3119GjR4+IiEiSJL766qv44IMPYs8994yIiAYNGhStm5ubW3Sz8/333z8aNWoU48ePjyFDhsSYMWOK2jVq1ChWrlxZ7t9/5cqVRR1qfZYuXbrOc8uWLSvqIPPnzy/xkkWobvRt1qdHjx7x+uuvl9muY8eO8corr2SgItLOWFK1Lrvsshg6dGiZ039uuummMWfOnAxVVTvo25A+9kt+6I033oju3buXq+3IkSOjc+fOVVsQ1YKxpOp8/fXXse2225bZrk6dOnHTTTdV3bRXtZS+TU21MX1bHlJ6HrKxqjTM+vLLL2PzzTeP3r17x+GHHx7Dhw+P2bNnR9++feN3v/td5Ofnx9tvvx0R36WHn3/+eey3336x3377xX//+9+YOHFiHHroobF06dLYddddIyKiS5cusd1228Uvf/nLuP322yMvLy8mT54ct912Wzz11FMR8d2Nzm6//fY477zzimq58sorY+jQoXHbbbeVWffAgQPjF7/4RbRt27ZoHsiIiHbt2sX06dNju+22K9fv//HHH8fee+9d4vKydoTGjRv7IKBG0rcp1KxZs8jJySn13gM5OTmx+eab6zOsw1hS+Zo1a1audk2aNLHtq5C+DeljvyQionnz5uVuu9VWW+kzrMNYUrnq1q1b5t+TEREFBQWxxRZb2PZVSN+mpqpo35aHlJ6HbKwqnWZw6tSpcfDBB8fee+8d++yzT/Tt2zfatWsXjRo1imOPPTYOPvjgog2Rn58fZ555Zuy5557Rvn37ePfdd+OSSy6J5557Lnr37v1/BdepEy+99FKsWrUqdtttt2jdunV07Ngxnn766dh7773jq6++irFjx8YJJ5xQrJaf//zn8cgjj8Tq1avLrPv444+PpUuXxoUXXrjO86NHjy76eezYsbHtttvGrbfeGkOHDo1tt902RowYUbR81KhRcfzxx2/QtgOoDfbcc8+im1eWJC8vL/baa68MVQS12x577FHmVVk5OTlVenAKAGm1++67R506ZZ9GycnJiR/96EcZqAhqt3r16sVOO+1UrraFVyYAVCV5SNXmITlJWV9fqAL5+fnRoUOHuOOOO6JTp06ltj388MPj97//fey3337rXb5y5cro169fLFiwIEaMGFHscrkN9c4778Qpp5wS06ZNK3agunTp0jjooIPizTffLDOR/eijj+Lcc8+N1157rULvvWzZsqI5KZcuXepbDdQY+jbr8/e//z1OOumkMts98cQT5WpHzWcsqVofffRR7LHHHqW2ycvLi1/96ldxww03ZKiq2kHfhvSxX7I+bdq0ienTp5faZscdd4yZ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wrHk5ptvjsaNG2e4QrLNWJJZCxYsiIEDB8bzzz8fy5YtW2+bhg0bxlFHHRW33XZbtGrVKsMV1ixjx46Na6+9Nl5//fUS22y77bZx5plnxrXXXivUqmHuvPPOGDBgwAav/8Pz8zk5ObHddttFhEArG4RZVay0qQXPOOOM2G+//Ur8w7SifvzjH8cXX3xRKa8FlWnt2rXRv3//op8vuOCCuP/++33zD6iQtWvXxoUXXlj08/nnnx9Dhw41llAjDB8+vOjf++23X7z44oux0047Za8gsm7atGnRpUuX2HLLLeO2226LDh06RP369YuWJ0kS33zzTbzyyisxePDgmD59eowePdqYWEkmTpwYffr0Kfr5rbfeii5dumSvoBJcfPHFcccdd0S/fv2iT58+0bx582In4dauXRvTp0+P+++/v+gki5PQtcv06dPjsMMOiy222CJuvfVWY0mGvf3229ViLPnlL38ZgwYNirPPPrvMsaR3797x3HPPxZFHHpnFiquv//3vf3HYYYfFokWL4te//nUccsgh6wTIy5cvj3/9619xxx13xGGHHRavv/56bLXVVlmqeP2++eabOO6444p+/tOf/hS/+93vUndLlbFjx0bPnj1j3333jQceeCB+9KMfFRvfkiSJhQsXxogRI+L3v/99zJ07N4YMGZLFiqlsn3/+eeywww7xzDPPVMrrNW7cOHbfffeinwVaGZZQZe6///4kIpLzzz8/KSgoqPL3y83NTe65554qfx+oiBUrViRHHnlkkpOTk0REEhFJTk5OcvjhhyfLly/PdnlANWEsoSa75557ivXt3NzcZKuttkref//9bJdGFp1zzjnJtttumyxatKjMti+//HISEclLL72Ugcpqvpdffjlp0KBBkpubW7Rf1qtXL3nxxRezXVoxc+bMSXJycpKbbrqpzLarV69ODj300GT//ffPQGWkybnnnpu0atUq+e9//1tm28KxJG19vbp65ZVX1juWvPDCC9kurZivvvqqQmNJ586djSUb4Y477kjy8vKSadOmldl2xowZSYMGDZK//OUvGais/BYsWJC0a9euWN/O5PnPijjkkEOSjh07JqtWrSqz7aBBg5KISGbOnFn1hZExl156adKmTZsqf5+VK1cmRx55ZNKgQYNk9OjRVf5+tZXrJqtIaVdkkV3Lli2LwYMHR9euXaNly5ZRr169aNmyZXTt2jUGDx4cy5cvz3aJNcodd9wRL730UiRJUvRckiTx8ssvxx133JHFykqnn1AWfSSzShtLBg8enMXKSqefZE513dafffZZ9O/fv1jfzs/Pj8WLF0ffvn2LPZ8m1XV7VycjRoyIk08+OZo1a1Zm227dusUuu+wSzz33XAYqq9mWLVsWJ598cqxatarYPTXWrFkTp5xySnzzzTdZrK64kSNHRp06deLss88us23dunXj7LPPjokTJ8bcuXMzUB1pUTiWbLHFFmW2NZZUntLGkp///OfGklpsxIgR0a1bt2JXdpSkdevWcfjhh6dun/zVr34VH3744Tr3nrr77rtjxIgRWapqXYsXL47XXnst+vXrF/Xq1Suz/Zlnnhn169dP1e9A9VF4hVaXLl3i6KOPjpdffjnbJdVIwqwqIMhKrxdeeCF22WWXGDhwYIwbNy5WrlwZ2267baxcuTLGjRsXAwcOjJ133jleeOGFbJdaI6xcuTJuvPHG9Z6IKygoiBtvvDFWrlyZhcpKp59QFn0ks8oaS/74xz8Wu0FrWugnmVOdt/WNN9643mPF/Pz8mDJlSrz44otZqKp01Xl7VxcFBQUxb968cp3oivhu7v7dd9895syZU8WV1XxDhgyJ//3vf+t85iT/fyq2u+++O0uVrWvOnDnRokWL2HzzzcvVvk2bNhERTkDXIgUFBTF37twKjSVt2rQxllSC++67LxYvXlziWHLXXXdlqbJ1VXQsKexPX331VVWWVWPNmTOn3PtkRKTu8/2LL76IBx98cJ0gKyKiTp068dvf/jY1X8aaN29eJElS7u3dpEmTaNWqVaq2N9WLQKvqCbMqWXmCrM6dO0dOTk7k5OTE5MmTy/W6Dz74YNE6F198ceUWXUsMGTIkevfuHQsXLox+/frFlClT4qOPPopnnnkmPv7443j//ffj7LPPjoULF0bv3r3NkVsJnnnmmfj6669LXL5kyZJ46qmnMldQOegnlEUfyTxjCaWpztt6yZIl8dhjj5V4/9S8vLxUneyKqN7buzopKCiIiKjQPWvq1q273hNLlF+SJHHnnXeWuLygoCDuuuuuov+fbMvPz69wHylcj9qh8ISysSSzquNYkpeXV+72xpKNsyHbO03beujQoSV+ab+goCCmTp0a77zzToarWr/C7VadtzdVqyrO0Qu0qpYwqxJV5Iqss88+O+bOnRt77rlnRHz3zYaePXtGo0aNonnz5nH55ZcXO7Fx0kknxdy5c6Njx45V/nvUROPGjYsLLrggGjduHKNGjYr77rsv2rVrF7feemvss88+MWjQoNhrr71iyJAhMWrUqGjUqFFccMEFMWbMmGyXXq29/PLLpR405OXlxSuvvJLBikqnn1AWfSQ7XnnllVLHktzcXGNJLVXdt/Ubb7wRq1atKnH52rVrY9y4can5g7q6b++a4vTTT48+ffpku4waafbs2TFjxoxSv1H+xRdfxMyZMzNY1YbRTyiLPlJ1vvzyy/jss89KHUtmz54d//nPfzJY1YbRTzKnumzrF198sdRj07T9bVaS6rK9qXpVcY5eoFV1hFmVpKJTCzZq1ChatmwZeXl5kZ+fHz179ozVq1fHG2+8EX/729/iwQcfjGuuuaaofcOGDYvuR0DFrF27Nvr37x/5+fnx6KOPRrdu3Upt361bt3j88ccjPz8/BgwYUOK3pSnb22+/Xer2W7t2bbz99tsZrKhk+gll0Ueyp6yxJD8/31hSC9WEbT158uTIzc0ttc3KlSvj008/zVBFJasJ2xvKUt5v5Ja3HVA7GUuoqfLz8+ODDz4otU2SJDFp0qQMVQQbr6rO0Qu0qoYwqxJs7D2yXn755fjoo4/ikUceifbt28cRRxwRN9xwQ9x5552xevXqKqq69hg7dmxMmzYtevXqFb169SrXOkcddVT06tUrpk2bFuPGjaviCmumVatWxfTp08ts98knn5T6rfRM0U8oiz6SHatXry73WJKGe/DpJ5lTE7b1pEmTynVPgTScEKgJ2xvKMmnSpDKnIsrLy0vFPgmkl7GEmurTTz8t82+ugoKC1HzRECqqss/RC7QqnzBrI21skBUR8eabb8Zee+0VLVq0KHquR48e8c0338SHH35YmeXWSoVT2/Tt27dC65166qkREdXi8ug0mj59ermmRcrPz4+PP/44AxWVTj+hLPpIdkyfPr1cV3QUFBQYS2qZmrCt33vvvTLvl1G3bt14//33M1RRyWrC9oayTJ06tcx9Mj8/P6ZMmZKhioDqyFhCTTV16tRytZs1a1YsW7asiquBylcV5+gFWpWr/HfAYx2VEWRFRMybN6/YThIRRT/PmzevQq+1atUqHxg/UDin/Q477BCtWrWKr776ap02N910U9x0001FP2+//fbx97//vWh927Ti5s6dW+628+bNy/o21k8oiz6SHcYSSlITtvX//ve/crX773//m/Vaa8L2rk42dFrG/Px823kjLFy4sMwT0EmSpGKfjIgNnsVjxYoVqaifqreh91w0lmwcYwmlKc9V+etbJw3bev78+RVq+8NznZm2fPnyDVpvzZo1qdjeVI41a9aUu21lnqP/vsJA69hjj42jjz46nnvuuejevfsGv15tJszaQEuXLo1+/fpFr169NirIqkxJksTAgQNj4MCB2S4llQ444IByt/3iiy/iwAMPjIiIp59+Op5++umqKouIOOKII7JdQhH9hLLoI+l15JFHZruEIvpJ5tT0bb1mzZq4//774/777892KRFR87d3dTd69Oho0qRJtsuo8f7973+nZjtvs802FV7n0EMPrYJKqElefvnl1PTxmuytt95KzXbeeuutK7xO586dK7+QWqBu3boVXmfevHmp6SvltfPOO2e7hA2yevXqGDx4cAwePDjbpVCJWrdune0SigKt/fffP04//fT1fjmQsplmcAM1bNgwevXqFS+//HKMHj16o16rZcuW63y7ofDnli1bbtRrAwAAAAAAJavqc/QPPvhgvP/++3HSSSdt9GvVVq7M2kC5ubnx1FNPxfHHHx99+vSJ4cOHx+GHH75Br9WxY8f4wx/+EAsWLIjmzZtHxHf3FWjatGm0bdu23K+Tk5MTgwYNirPOOmuD6qipxowZE3369ImjjjoqnnjiiWLLfvOb38TgwYPjkksuid/97nfFlp188skxcuTIeO6556Jr166ZLLlGePvtt+Owww4rV9tx48bF/vvvX8UVlU4/oSz6SHa888475f7W59ixYyt01UhV0E8ypyZs61133bXMqTTr1q0b55xzTrHp+7KhJmzv6mTt2rWx2WabVXi9Hj16uAJuIxx77LHluo9B586dY+TIkRmoqHTXX3990VSeFfHPf/4zOnToUAUVkTb5+fmx6aabVni97t27xzPPPFMFFdUOxx13XLm+9HzooYfGCy+8kIGKSve73/1unc/28pgwYULst99+VVBRzbbvvvtWeJ2WLVum4v7Ajz32WJxzzjnlajt79uzYfPPNq7ii0n3wwQdFswSUV7169eKiiy6KG2+8sYqqItN+85vflPs+VZV1jn597r333jjvvPNiwIABceutt27Ua9VmwqyNUK9evUoJtLp37x5t27aNvn37xp///OeYN29eXH311dG/f/+oX79+hV6rfv360bhx4wrXUJP17Nkz2rRpEyNHjowJEyZEz549i5YVXt5dt27dYtvtxRdfjJEjR0abNm3iyCOPjLw8u0pFtWvXrkJts91v9RPKoo9kh7GEktSEbd22bdsyw6y1a9fGHnvsoW/XMht6z6zc3Nys95XqrG3btjF+/PhS761Qt27dVOyTEd/9PbohGjZsmIr6qXobes8sY8nGadu2bYwbN85YwnptyG1KcnJyUrGt99prr3K122yzzaJVq1ZZvyVLo0aNNmi9Hx7TUr1VZGrPyjxH/33fD7IGDRqU9X2jOjPN4EYqDLS6d+8effr0iVGjRlX4NXJzc2PkyJGRm5sbHTt2jFNPPTV+8YtfrPPNVjZMXl5e/PWvf43c3Nz42c9+FmPHji21/dixY+Pkk0+O3NzcuOOOO5x42UDNmjUr17zbLVu2jC222CIDFZVOP6Es+kh2bL755uW6H0iLFi1iyy23zEBFpdNPMqcmbOt99923zD+ukiSJ9u3bZ6agUtSE7Q1lad++fZk3CV+zZk0q9kkgvYwl1FR77bVXuU7C77vvvk7WUy1VxTl6QVblEmZVgsoItHbYYYd48cUXY/ny5bFw4cK4+eab/dFfibp27Rp33nlnLFu2LHr06BEXXHBBfPjhh9G/f/947bXX4rzzzouPPvoo+vfvHz169Ihly5bFnXfeGd26dct26dXaj3/846hTp+Rhpk6dOvHjH/84gxWVTj+hLPpIdhhLKEl139b77LNPmSe7cnJyKnSFYlWq7tu7pnjwwQdj+PDh2S6jRtpnn30qtV026SeURR+pOsYSNkR12NaNGzeO1q1bl9qmbt261WIq2+qwvcmOyjxHL8iqfNKSSlLRKQfvuuuuuP/+++PNN98s12W6jz76aJx77rmxYsUK397ZQOeee25su+22cdZZZ8Xdd98dd999d2y22WbRrFmzWLx4cXz99dcR8d23+4cOHVps+hw2TMeOHUu9n0BOTk507NgxgxWVTT+hLPpI5nXs2DGef/75EpcbS2q36ryty7rHW05OTrRt2zZV05xU5+0NZfnRj34UjRs3jmXLlpXYpkGDBrHHHntksCqgumnTpk00adIkli5dWmKbBg0axJ577pnBqqBydOrUKWbNmlXilMhr1qyp8H2qIJuq6hy9IKtquDKrEpX3Cq1HH300Pvroo5g8eXLsvvvu5Xrt3r17x+TJk2P69Olx9dVXV2bZtUrPnj1jxowZcfvtt0eXLl2iXr16MXv27KhXr1506dIlBg0aFDNmzHDipZL07du31OUFBQVltskG/YSy6COZdeqpp5a6vKCgIH7xi19kqJry008yp7pu69atW8dPfvKTyM3NLbHN2WefncGKyqe6bu/qqKCgoErasn5169aN0047rcRv3+bl5UXfvn2jQYMGGa6sZPoI5aGfZFZ5xpKf//znqRpLkiQpd1t9ZONV5+19xhlnlHpvz8022yx1x4DVeXtTtarqHL0gq+q4MquSlecKrVatWlX4dTfZZJPYZJNNKqvMWq1x48YxcODAGDhwYLZLqfFatWoVp5xySjzxxBPrHOzk5eXFiSeeGNtuu22WqiudfkJZ9JHMKWssOeGEE4wlVNttfeWVV0avXr3Wu6xp06ZxxhlnZLii8qmu27u6yMvLi4YNG8aCBQvKvc6CBQvKnPqHsl188cVxzz33rHdZfn5+XHzxxZktqBSbbrppLF68ONauXVuu6W8K+9Omm25a1aWRErm5udGoUaMKjyU77rhj1RVVS1x88cVx9913r3dZfn5+XHLJJRmuqGQVHUsWLlwYEd+FFlTcpptuWqF9cuHChana1p06dYp99903pkyZEvn5+cWW1alTJy655JKoX79+lqorrvDzrrzbu6CgIBYtWpSq7U3Vqopz9IKsquXKrCpQGffQgprihhtuiKZNmxb71nlubm5ssskm8fvf/z6LlQHVSeFY8v0/sI0l1AQ9e/aMnj17rve+cLfeems0bdo0C1WRBocddliMGDGiXN8mnjdvXkycODEOO+ywDFRWs+26665x+eWXr3fZxRdfHG3bts1wRSU77LDDYtmyZTFu3LhytX/uueeiVatWscsuu1RxZaRJRceSt956y1hSCXbZZZe44oor1rts4MCBqRxLxo4dW672xpKNc9hhh8WoUaNi1apVZbZdu3ZtvPDCC9G5c+eqL6yccnJy4o477oi8vLxix6+5ubmx0047pepLH9ttt120bt06nnvuuXK1/9e//hWLFy9O1famehFkVT1hVhURaMF3dtxxx3jrrbdim222KXpu6623jrfeeit22mmnLFYGVCc77rhjTJw4sdhYss0228Rbb73lSgSqtZycnHjmmWfi+OOPL3ouNzc3HnrooTjzzDOzWBnZ1q9fv3jjjTfioosuirlz5663TZIkMWnSpOjVq1dsttlm0adPn8wWWUP98Y9/jOuvv77Yc1dccUXccsstWapo/Tp06BDt27eP008/PV555ZV1viFf6Jtvvonbb7897r777jjrrLPWG55Tc/Xr1y/efPPNGDBgQJljSe/evWPTTTeNY445JsNV1kw33nhj/O53vyv23FVXXRW33nprlipav3333Tf22WefOOOMM+KVV14pcQq5b775JgYNGhR33313nHnmmcaSDXTqqafGt99+G8cff3x88sknJbabMWNGnHzyybFgwYLUTal+0EEHxbhx44rd17Vdu3bx73//O1WzSuXk5ES/fv1i2LBh8ec//7no3q4/lJ+fH+PHj4++fftGmzZt4qCDDspsodQIgqzMyEkqMnEoFbZ69eo4/vjj4+WXX15nysG33norTjvttHUOFFavXh0R3wViFTFjxoy47777ol+/fhtfOFSyL774InbYYYeIiPj888+L/g1QEYsWLYpXX301kiSJQw45JLbccstslwSV4ttvvy26CmvixInx4x//OMsVkQaDBw+OSy+9NPLz86NVq1bFpu1JkiSWLFkSixYtihYtWsRLL70U++yzTxarrXkmTJhQdIXK0qVLi520S4v58+dHjx49YsqUKbHJJpvElltuWewE85o1a2Lu3LmxZs2aOOecc+Luu+92AroWuuOOO+KSSy4xlmTJxIkT49NPP43WrVtHx44ds13OehlLMmvUqFFxwgknxNKlS6Nly5bRqFGjohPfSZLEihUrYu7cudGoUaN49NFHU/tllenTp0ebNm0i4rs+1Lx58yxXtK4kSeLiiy+OwYMHR926dWPrrbeOunXrFi0vKCiIxYsXx5IlS6Jt27bx8ssvb9DUc6TXlVdeGbfeemuFz0OWdH6+adOm8fTTTxf7gr4gK3OEWRlQUqB1zTXXxO233x79+/cvartmzZqib/xdeumlxQbYsjRq1Cguv/zyVN1EFAotW7YsmjRpEhHpPRkAANnic5KSLF68OJ5//vmYMWNGrFmzptiyRo0axQEHHBCHHXZYhf5uoHyqy36ZJEm8/fbbMW7cuFiyZEmxZbm5ubHNNttEr169YrvttstShaRBWWPJ/vvvH126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j8svvzx23XXXaNSo0Tpjd/PmzePEE0+MUaNGZbtUgEo3efLkOPfcc2O77baLBg0aFBv/GjRoEK1atYqzzjor3n777WyXmmqPPPJIhc6vl3V+fsWKFdGwYcOIEGhlQ162C6jpSrsi65prrokdd9wxCgoKKuW9rrjiinjjjTeiU6dOlfJ6UJkeeuihon//7W9/iwsuuCCL1UDtkiRJXHnllfGXv/wlDjnkkLj00ktj0003jZycnKI2q1evjvfeey9uvvnmePbZZ2Ps2LGxxRZbZLFqqF0+/vjjon9fdNFFcccdd0SjRo2yWFHNsXr16jj55JPj+eefj8MPPzyuvvrqdbbt8uXL41//+ldcccUVMXbs2Hjqqaeifv36WaqYNFiwYEGcf/75RT/Pnz8/WrduncWKoHb57LPPonPnzrFq1ao47rjjok2bNlG3bt2i5UmSxMKFC+P555+PI444Iu65554499xzs1gx1C5JksRNN91U9PMrr7wSffr0yV5BNcyrr74aRx55ZGy55ZZx4oknxg477BC5ublFy/Pz82P27NnxzDPPxGOPPRYjRoyIn/70p1msOL0mTJgQ22yzTVx22WWV8noNGzaM0047rejnwkCra9eu0aVLlxg3blzssccelfJerCsnSZIk20XUVJmeWnDLLbeMyy+/PK688soqfR+oiCRJ4ne/+11cd911xZ6/9tpr49prry12Mh2oGu+991506NAhbr755rj00ktLbfvhhx/GwQcfHOeee26xP06AqvPGG2/E4YcfHt9++21ERNSpUyd+/OMfx4svvhjNmjXLcnXV36OPPhqnnnpqjBw5Mnr27Flq29GjR8cRRxwRw4YNi9NPPz0zBZI6//nPf6Jr164xe/bsyM/Pj4iIbbfdNsaNGxe77rprlquD2uGYY46JKVOmxOuvvx5bb711ie2SJInzzz8/hg4dGvPnz/e5CRmwZs2aOOuss+Lhhx8uei43NzeGDRsWv/jFL7JYWc2QJEm0adMmmjdvHqNHjy71C24rV66Mo446Kj799NP4/PPPnWNbj379+sWHH34Yb775ZpW+z3//+9/o2rVrzJs3T6BVhUwzWEXcI4vKtmzZshg8eHB07do1WrZsGfXq1YuWLVtG165dY/DgwbF8+fJsl7heTz755DpBVkTE9ddfH0888UTmC6rBqmsfoeo9/fTT0axZs7jooovKbLvHHnvESSedFE899VQGKgMWL14cPXr0iGXLlhU9V1BQEO+8844wpZI8/fTTceCBB5YZZEVE9OjRIw4++GBjYCWorscl+fn5ceSRR8aXX35ZFGRFRMydOzeOOOKIWLt2bRarq3mqaz+hai1btixeeuml6N+/f6lBVkRETk5OXHvttZGfnx8jRozIUIVQu914443xyCOPFHsuPz8/TjvttHj33XezVFXN8eGHH8Ynn3wSv/71r8ucqaFBgwZx1VVXxRdffGG6wSwz5WBmCLOqgCCLyvbCCy/ELrvsEgMHDoxx48bFypUrY9ttt42VK1fGuHHjYuDAgbHzzjvHCy+8kO1SiykoKIirr7466tRZd6ipU6dOXH311ZU2zWZtV137CJnx6aefxr777ltsapbS7L///vGf//zHCTvIgNtuuy2WL1++zudhfn5+PP/8804IVIJPPvkkfvzjH5e7/QEHHBCffvppFVZU81Xn45J//OMfMX369HU+A/Pz82PGjBnx2GOPZamymqc69xOq1uzZs2PVqlXlHru33nrr2H777Y3dkAFLliyJP//5z7G+ib7y8vLit7/9bRaqqlkKx7L999+/XO0POOCAYuuRPQKtqifMqmTlCbI6d+5cdBO5yZMnl+t1J0yYULSOOWhrlyFDhkTv3r1j4cKF0a9fv5gyZUp89NFH8cwzz8THH38c77//fpx99tmxcOHC6N27dwwZMiTbJRcZN25czJgxY72BVUFBQfznP/+JsWPHZqGymqU69xEyY/Xq1RX6YkVh2zVr1lRVSUB8t2/eddddJX6xIy8vL+66664MV1XzbMgYuHr16iqsqGar7scld9xxx3q/iBXx3Zex7rjjjgxXVDNV935C1Socg43dkD6PPPJIrFixYr3L1q5dG6NGjYqZM2dmuKqapaJjYGE7Y2DFVcU5eoFW1RJmVaKKXJF19tlnx9y5c2PPPfeMiO9u9N2hQ4eoX79+tG/ffp32Bx10UMydOzdOPPHEqiqfFBo3blxccMEF0bhx4xg1alTcd9990a5du7j11ltjn332iUGDBsVee+0VQ4YMiVGjRkWjRo3iggsuiDFjxmS79IiIePbZZyMvL6/E5Xl5efHss89msKKap7r3EbLv9NNP9yUJyJJ///vfsXjx4hKXr127Np566qn1fvOVjWf8q3zV/bhk0aJF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UKTKBo+L58/v3bu3V+0vtuvNufX0L0FW//OUqp8ItOBf06dPj507d0Y2m42SkpIoKSmJbDYbO3fujHvuuafY5cGQ8Mgjj0RHR0esXLkyzp07d9V2uVwuduzYEc3NzbFo0aICVghDVzabjZaWlpg8eXKk0+nIZDIREbFixQovfeTJ4sWL4/jx4/Hyyy/3uC1OZ2dnvPrqq9Ha2moMHOKamppizpw5kUqlIpPJRCqVilmzZsWHH35Y7NJgSMhkMvHoo4/Gli1b4tChQz22PX36dKxcuTIqKyvj/vvvL1CFMLQ99thjsXXr1kvfk+l0OkaMGBEtLS1x2223Fbu8AW/06NExc+bM2LBhQ5w4caLHtidPnoz169dHXV1dTJo0qUAVciWCrMJI5Wys2a9OnjwZjY2NUVJSctmWg21tbfHiiy/mbW/TpqameOmll+K5557Ly/0gnz799NNoamqKXC4XCxcujIaGhmKXBEPKjh07YunSpVFeXh733ntvVFZWdlsxef78+fjss8+ira0tFi1aFO+9995VzwwB8u/PP/+M119/PX799deor6+PZcuWdfuM8t+88sorsWHDhrj55ptjxowZUV5efunnm8vl4u+//47Dhw/HL7/8Es8//3y88MILfv5D3IULF2Lr1q1x/PjxmDBhQjzzzDOXwmag/7W3t8e8efPi0KFDUVNTE7fffnu3z2BXV1f89ttvcfDgwchkMrFnz56YMWNGESuGoeejjz6KPXv2RHl5+aXdBsiPU6dORWNjY3z77bcxffr0GDt2bKTT6UvXOzs749SpU3H48OGoqqqK/fv3x/jx44tYcXItX748mpubY+7cuXm5X1lZWWzcuDFGjhx56e8EWYUjzCqAqwVaa9asie3bt+ftoX42m41t27b58gDgir7++utoamqKo0ePxpkzZ7pdy2QyMX78+Hj44Ydj9uzZ3SbKAIPBJ598Ek1NTfHFF19ctkq1tLQ07rzzzli4cGFMmzZNkAWQAOfOnYvdu3dHc3Nz/PDDD5etrr3xxhujsbExFi5ceNlZ5QAD3enTp6O5uTl2794dv//+e3R1dV26lkqlYtSoUfHAAw/EQw891C1YobsjR47E+vXr83a/gwcPxubNm2P16tURIcgqNGFWgVwp0FqzZk0cOHAgPv/882KXBwAAAAAAXEV5eXls2rQpVq9eLcgqAmdmFYgztAAAAAAAYGATZBWHMKuABFoAAAAAADAwHTt2TJBVJLYZLIKLWw5+9913UVNTY5tBAAAAAABIsPLy8jh79mzU19cLsoqgpNgFDEUXV2g1NjZGdXV1scsBAAAAAAB6UF1dHel0WpBVJFZmFdG5c+di+PDhxS4DAAAAAADoQS6Xi3/++SdKS0uLXcqQJMwCAAAAAAAgsYYVuwAAAAAAAAC4GmEWAAAAAAAAiSXMAgAAAAAAILGEWQAAAAAAACSWMAsAAAAAAIDEEmYBAAAAAACQWMIsAAAAAAAAEkuYBQAAAAAAQGIJswAAAAAAAEgsYRYAAAAAAACJJcwCAAAAAAAgsYRZAAAAAAAAJJYwCwAAAAAAgMQSZgEAAAAAAJBYwiwAAAAAAAASS5gFAAAAAABAYgmzAAAAAAAASCxhFgAAAAAAAIklzAIAAAAAACCxhFkAAAAAAAAkljALAAAAAACAxBJmAQAAAAAAkFjCLAAAAAAAABJLmAUAAAAAAEBiCbMAAAAAAABILGEWAAAAAAAAiSXMAgAAAAAAILGEWQAAAAAAACSWMAsAAAAAAIDEEmYBAAAAAACQWMIsAAAAAAAAEkuYBQAAAAAAQGIJswAAAAAAAEgsYRYAAAAAAACJJcwCAAAAAAAgsYRZAAAAAAAAJJYwCwAAAAAAgMQSZgEAAAAAAJBYwiwAAAAAAAASS5gFAAAAAABAYgmzAAAAAAAASKz/A0CXnGP+x3uvAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -623,14 +609,10 @@ } ], "source": [ - "from qualtran.bloqs.basic_gates.identity import Identity\n", - "\n", - "\n", "class UnaryIterator(Bloq):\n", " ctrl_bitsize: int\n", " state = []\n", " sys_bitsize: int\n", - " ops\n", "\n", " @property\n", " def signature(self) -> Signature:\n", @@ -665,10 +647,13 @@ "\n", " def uncompute(self, query: List[bool], bb: BloqBuilder, ancs, ctrls):\n", " first_diff_ix = None\n", - " for ix in range(len(self.state)):\n", - " if self.state[ix] != query[ix]:\n", - " first_diff_ix = ix\n", - " break\n", + " if len(query) == 0:\n", + " first_diff_ix = 0\n", + " else: \n", + " for ix in range(len(self.state)):\n", + " if self.state[ix] != query[ix]:\n", + " first_diff_ix = ix\n", + " break\n", " if first_diff_ix is None:\n", " # state is a prefix of query so we do not need to uncompute\n", " return\n", @@ -693,6 +678,8 @@ " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", " self.state.pop()\n", " self.uncompute(query, bb, ancs, ctrls)\n", + " elif len(self.state) == 0:\n", + " return\n", " else:\n", " # first_diff_ix is the last bit, so we just need to do the CNOT trick\n", " if first_diff_ix == 1:\n", @@ -713,11 +700,10 @@ " ancs = bb.split(anc)\n", " for q_int in queries:\n", " q_bools = int_to_bool_list(q_int, self.ctrl_bitsize)\n", - " print(\"q_bools:\", q_bools)\n", " self.uncompute(q_bools, bb, ancs, ctrls)\n", " self.compute(q_bools, bb, ancs, ctrls)\n", - " print(f\"calling ops[{q_int}]\")\n", " [ancs[-1], sys] = bb.add(self.ops[q_int], q=[ancs[-1], sys])\n", + " self.uncompute([], bb, ancs, ctrls)\n", " ctrl = bb.join(ctrls)\n", " anc = bb.join(ancs)\n", " return {'ctrl': ctrl, 'sys': sys, 'anc': anc}\n", @@ -736,237 +722,15 @@ ] }, { - "cell_type": "code", - "execution_count": 5, - "id": "bad83ba8", + "cell_type": "markdown", + "id": "eac11000", "metadata": {}, - "outputs": [], "source": [ + "# Measurement Based Uncomputation\n", "\n", - "class RecursiveUnaryIteration(Bloq):\n", - " ctrl_bitsize: int\n", - " state = []\n", - " sys_bitsize: int\n", - " ops: Dict[int, Bloq]\n", - " ctrl_inversions: List[bool] = None\n", - "\n", - " def set_ops(self, ops):\n", - " self.ops = ops\n", - "\n", - " @property\n", - " def signature(self) -> Signature:\n", - " return Signature([Register('ctrl', QAny(self.ctrl_bitsize)), Register('anc', QAny(self.ctrl_bitsize - 1)), Register('sys', QAny(self.sys_bitsize))])\n", - " \n", - " def select(self, query: List[bool], bb, ancs, ctrls):\n", - " print(\"calling select.\")\n", - " print(\"query: \", query)\n", - " print(\"state: \", self.state)\n", - " assert len(self.state) <= len(query)\n", - " first_diff_ix = None\n", - " for ix in range(len(self.state)):\n", - " if query[ix] != self.state[ix]:\n", - " first_diff_ix = ix\n", - " break\n", + "Now that we have a recursive implementation of a unary iteration cirquit we can further reduce the number of Toffoli gates used by introducing a trick for the `uncompute` step called measurement based uncomputation. The key idea is that instead of using a Toffoli to uncompute an ancilla we can change the bit information of the ancilla into a relative phase, then measure the ancilla and apply a correction phase to the state if needed. We will walk through mathematically how this works, then we will implement a bloq that can act as a measurement and classically controlled operations based on the measurement outcome.\n", "\n", - " if first_diff_ix is None:\n", - " # COMPUTE\n", - " # The state is a prefix of the query, [] is always a prefix\n", - " if len(self.state) == len(query):\n", - " print(\"Done!\")\n", - " return\n", - " else:\n", - " # Need to compute\n", - " if len(self.state) == 0:\n", - " if query[0] is False:\n", - " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", - " if query[1] is False:\n", - " ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", - " [ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", - " print(\"compute ctrls[0] * ctrls[1] -> ancs[0]\")\n", - " if query[0] is False:\n", - " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", - " if query[1] is False:\n", - " ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", - " # [ctrls[0], ctrls[1]], ancs[0] = bb.add(And(not query[0], not query[1]), ctrl=[ctrls[0], ctrls[1]])\n", - " print(\"appending: \", query[0], \", \", query[1])\n", - " self.state.append(query[0])\n", - " self.state.append(query[1])\n", - " self.select(query, bb, ancs, ctrls)\n", - " else:\n", - " # [ctrls[len(self.state) - 1], ancs[len(self.state) - 2]], ancs[len(self.state) - 1] = bb.add(And(not query[len(self.state) - 1], True), ctrl=[ctrls[len(self.state) - 1], ancs[len(self.state) - 2]])\n", - " q_ix = len(self.state)\n", - " if query[q_ix] is False:\n", - " ctrls[q_ix] = bb.add(XGate(), q=ctrls[q_ix])\n", - " print(f\"compute ctrls[{q_ix}] * ancs[{q_ix - 2}] -> ancs[{q_ix - 1}]\")\n", - " [ctrls[q_ix], ancs[q_ix - 2]], ancs[q_ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[q_ix], ancs[q_ix - 2]], target=ancs[q_ix - 1])\n", - " if query[q_ix] is False:\n", - " ctrls[q_ix] = bb.add(XGate(), q=ctrls[q_ix])\n", - " print(\"appending: \", query[q_ix])\n", - " self.state.append(query[q_ix])\n", - " self.select(query, bb, ancs, ctrls)\n", - " self.select(query, bb, ancs, ctrls)\n", - " else:\n", - " # UNCOMPUTE\n", - " if first_diff_ix == len(self.state) - 1:\n", - " # We can CNOT our way to flipping the last one.\n", - " if first_diff_ix == 1:\n", - " print(\"cnot ctrls[0], ancs[0]\")\n", - " if self.state[0] is False:\n", - " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", - " ctrls[0], ancs[0] = bb.add(CNOT(), ctrl=ctrls[0], target=ancs[0])\n", - " if self.state[0] is False:\n", - " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", - " else:\n", - " print(f\"CNOT ancs[{first_diff_ix - 2}] -> ancs[{first_diff_ix -1}]\")\n", - " ancs[first_diff_ix - 2], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ancs[first_diff_ix - 2], target = ancs[first_diff_ix - 1])\n", - " self.state[first_diff_ix] = not self.state[first_diff_ix]\n", - " else:\n", - " # We need to uncompute first\n", - " if len(self.state) == 2:\n", - " # undo the entire thing\n", - " # [ctrls[0], ctrls[1]] = bb.add(And(not self.state[0], not self.state[1], uncompute=True), ctrl=[ctrls[0], ctrls[1]] ,target=ancs[0])\n", - " if self.state[0] is False:\n", - " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", - " if self.state[1] is False:\n", - " ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", - " print(\"uncompute ctrls[0] * ctrls[1] -> ancs[0]\")\n", - " [ctrls[0], ctrls[1]], ancs[0] = bb.add(Toffoli(), ctrl=[ctrls[0], ctrls[1]], target=ancs[0])\n", - " if self.state[0] is False:\n", - " ctrls[0] = bb.add(XGate(), q=ctrls[0])\n", - " if self.state[1] is False:\n", - " ctrls[1] = bb.add(XGate(), q=ctrls[1])\n", - " self.state.pop()\n", - " self.state.pop()\n", - " elif len(self.state) > 2:\n", - " q_ix = len(self.state) - 1\n", - " if self.state[q_ix] is False:\n", - " ctrls[q_ix] = bb.add(XGate(), q=ctrls[q_ix])\n", - " print(f\"uncompute ctrls[{q_ix}] * ancs[{q_ix - 2}] -> ancs[{q_ix - 1}]\")\n", - " [ctrls[q_ix], ancs[q_ix - 2]], ancs[q_ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[q_ix], ancs[q_ix - 2]], target=ancs[q_ix - 1])\n", - " if self.state[q_ix] is False:\n", - " ctrls[q_ix] = bb.add(XGate(), q=ctrls[q_ix])\n", - " # [ctrls[len(self.state) - 1], ancs[len(self.state) - 3]] = bb.add(And(self.state[not len(self.state) - 1], True, uncompute=True), ctrl = [ctrls[len(self.state) - 1], ancs[len(self.state) - 3]], target = ancs[len(self.state) - 2])\n", - " self.state.pop()\n", - " else:\n", - " raise Exception(\"Should not have a length 1 or 0 state here.\")\n", - " self.select(query, bb, ancs, ctrls)\n", - " return\n", - " \n", - " def build_composite_bloq(self, bb: BloqBuilder, ctrl: SoquetT, anc: SoquetT, sys: SoquetT) -> Dict[str, 'SoquetT']:\n", - " queries = list(self.ops.keys())\n", - " queries.sort()\n", - " ctrls = bb.split(ctrl)\n", - " ancs = bb.split(anc)\n", - " for q_int in queries:\n", - " q_bools = int_to_bool_list(q_int, self.ctrl_bitsize)\n", - " self.select(q_bools, bb, ancs, ctrls)\n", - " print(f\"calling ops[{q_int}]\")\n", - " [ancs[-1], sys] = bb.add(self.ops[q_int], q=[ancs[-1], sys])\n", - " ctrl = bb.join(ctrls)\n", - " anc = bb.join(ancs)\n", - " return {'ctrl': ctrl, 'sys': sys, 'anc': anc}\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "95862261", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "calling select.\n", - "query: [False, False, False]\n", - "state: []\n", - "compute ctrls[0] * ctrls[1] -> ancs[0]\n", - "appending: False , False\n", - "calling select.\n", - "query: [False, False, False]\n", - "state: [False, False]\n", - "compute ctrls[2] * ancs[0] -> ancs[1]\n", - "appending: False\n", - "calling select.\n", - "query: [False, False, False]\n", - "state: [False, False, False]\n", - "Done!\n", - "calling select.\n", - "query: [False, False, False]\n", - "state: [False, False, False]\n", - "Done!\n", - "calling select.\n", - "query: [False, False, False]\n", - "state: [False, False, False]\n", - "Done!\n", - "calling ops[0]\n", - "calling select.\n", - "query: [False, False, True]\n", - "state: [False, False, False]\n", - "CNOT ancs[0] -> ancs[1]\n", - "calling select.\n", - "query: [False, False, True]\n", - "state: [False, False, True]\n", - "Done!\n", - "calling ops[1]\n", - "calling select.\n", - "query: [False, True, False]\n", - "state: [False, False, True]\n", - "uncompute ctrls[2] * ancs[0] -> ancs[1]\n", - "calling select.\n", - "query: [False, True, False]\n", - "state: [False, False]\n", - "cnot ctrls[0], ancs[0]\n", - "calling select.\n", - "query: [False, True, False]\n", - "state: [False, True]\n", - "compute ctrls[2] * ancs[0] -> ancs[1]\n", - "appending: False\n", - "calling select.\n", - "query: [False, True, False]\n", - "state: [False, True, False]\n", - "Done!\n", - "calling select.\n", - "query: [False, True, False]\n", - "state: [False, True, False]\n", - "Done!\n", - "calling ops[2]\n", - "calling select.\n", - "query: [False, True, True]\n", - "state: [False, True, False]\n", - "CNOT ancs[0] -> ancs[1]\n", - "calling select.\n", - "query: [False, True, True]\n", - "state: [False, True, True]\n", - "Done!\n", - "calling ops[3]\n" - ] - }, - { - "data": { - "image/png": "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1eNvYGCg6tWrd9u36oP3ufN6MD3K/JC30zpkv6z2LMsJPcr+ztUeZg0aNDC5cuUyISEhZseOHS6te+bMmSYkJMQEBATQswzI4aKjo03RokVv+Y38lP8XLVrUREdHe7tUIFOSk5NNu3bt0v0Ws81mM7ly5TK//PKLt8sF4IJTp06Zu+66K939OjAw0FSsWNFcuXLF2+XiNuzYscPkzp073d6EdrvdtGrVyiQnJ3u7XLfhvAz+7OOPP3ap98mUKVO8XSoAFzgcDvPwww9n+PdWcHCw2bdvn7fLRRrS61nm7uvBKehR5p9sxrjwdWX4la1bt6p27dratm2bwsPDXVomp/Qou5WrV6+qc+fOiomJ0aJFi9S8efOb5vnjjz905coVSdI//vEPl3rtXbp0yfmcugIFCuiuu+5KNX369Onq1auXHA6HAgL8upMm4BPi4+M1bdo0LViwQN9//70kqXDhwqpatarat2+vXr168SBe+KRLly6pQYMG2rZt203TUr4BN3PmTHXt2jW7SwOQRZs3b1ajRo105cqVm55hFhAQoCJFimjjxo0qVaqUdwqE28ybN09PPPGEjDFKSkq6aXrVqlW1fv165c+f3wvVeQ7nZfBXxhj17dtXU6dOld1uT/UZnvLzkCFDNGbMGC9WCSAzzp49q7p162r//v033dUjMDBQAQEBWrBggVq1auWlCpGRli1bKiQkRHPnzk013hPXg1PWS48y/0RYZkGZDctyclCWwpXAzN0Iy4CcKT4+XqGhoZKkuLg4LsTALyQlJSkqKkqvvfaazp075xzfqVMnffjhh5ycAz7ozz//1IgRIzRhwgTnxdagoCC99tprevnllzl++ZFDhw7p1Vdf1bfffuscV7BgQb3//vvq3bu3cuXK5cXqPIvzMvirmJgYDRw4UHv37nWOq169usaNG6cGDRp4sTIAWZGYmKgJEyZo+PDhunTpknN89+7d9a9//UvFixf3YnXISFphmScQlPk3wjILykxY5gtBWYrsDswIy4CciYsy8GenTp1SWFiYJOnXX39V5cqVvVwRgNt18OBBlS1bVpJ05MgR/eMf//ByRfCUXbt2OT+3T548qaJFi3q5Is/jvAz+7OLFi85eoT///LNq167NtQHAx504cUL33HOPJGnPnj2qUKGClyuCK7IrLCMo839Ze3od/MKWLVt04cIFSVK+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t2+fatyaNWuMJPPXX3+5vC2e4q/7tbvbiz/w1/c6PVbcZlgH7TvnyAnnKH/ncDhMiRIlzKeffprmPJyj5Dw5cZtzYvv+5ZdfTNGiRc3UqVPTnIf2DV/EbRgBAAAAZOjAgQMyxqhixYouzX/69Gk9+uij6tSpk15++WXn+ISEBA0fPlzjxo1Tw4YN9eCDD6pJkybatGlTutOk689qKFq0aKrXKVq0qC5evKgrV67cso60lkmZBs9wV3sBACAjOeEc5e9Gjx6tuLg4denSJc06OEeBK3JS+y5evLiCgoJUu3ZtDRgwQL17906zDto3fBFhGQAAAIAMmRueYZCRa9euqXPnzipatKimTp2aatrly5dVtGhRLV++XMWLF9dzzz2n6dOna9++felOg29xV3sBACAjOe0c5euvv9Y///lPffvttypSpMhtbx+sLSe17/Xr12vLli2aNGmSxo4dq2+++cYt2wjkFDyzDAAAAECGypUrJ5vNpj179mQ476BBg7R//35t3rxZefLkSTWtUKFCGjBgQKpxZcqUUZkyZSQp3WlhYWE6depUqumnTp1Svnz5lDdv3lvWktYyKdPgGe5qLwAAZCQnnKOkmD17tnr37q1///vfatKkSbq1cI4CV+Sk9n3vvfdKkqpWrapTp07pnXfe0RNPPHHLWmjf8EX0LAMAAACQoUKFCql58+aKjIxUfHz8TdPPnz8vSZoyZYqmT5+uefPmqXjx4umu84svvlCpUqVcnhYREaHVq1enGhcTE6OIiIg0XyMiIkI//PCDrl27lmqZChUqqGDBgunWh6zzRHsBAOBWcsI5iiR98803euaZZ/TNN9+odevWGdbNOQpckVPa998lJyfr6tWraU6nfcMXEZYBAAAAcElkZKQcDofq1KmjefPmaf/+/dq9e7fGjx+viIgIbdiwQQMHDtTw4cNVunRpnTx5MtVw4cKF23r95557Tr///rteeeUV7dmzRxMmTNC3336rF154wTnPZ599psaNGzt/7tatm3Lnzq1evXrpt99+05w5czRu3Di9+OKLt1ULMubt9gIAsA5vH3O+/vprPf300/r444/1wAMP3HK9nKMgq7zdviMjI/Xdd99p//792r9/v6KiojR69Gg99dRTznlo3/ALBvj/4uLijCQjycTFxXm7nGxhxW0G/B37NfwZ7Rs5wfHjx82AAQNMyZIlTe7cuU2xYsVMu3btzNq1a02PHj2cbfRWw//93//d9uuvXbvWhIeHm9y5c5vSpUubzz//PNX0t99+25QsWTLVuO3bt5uHHnrIBAUFmWLFipmRI0fedh3u4u/7tbfbS07i7+/1rVhxm2EdtO+cx5vHnAYNGmS4Xs5Rcr6cvM3ebN/jx483lStXNsHBwSZfvnymRo0aZsKECcbhcDjnoX3DH9iMycRTAuHX4uPjFRoaKkmKi4tTSEiIlyvyPCtuM+Dv2K/hz2jfgP9hv7YOK77XVtxmWAftG/7Oim3cittsVbzXuBVuwwgAAAAAAAAAAADLIiwDAAAAAAAAAACAZRGWAQAAAAAAAAAAwLIIywAAAAAAAAAAAGBZhGUAAAAAAAAAAACwLMIyAAAAAAAAAAAAWBZhGQAAAAAAAAAAACyLsAwAAAAAAAAAAACWRVgGAAAAAAAAAAAAyyIsAwAAAAAAAAAAgGURlgEAAAAAAAAAAMCyCMsAAAAAAAAAAABgWYRlAAAAAAAAAAAAsCzCMgAAAAAAAAAAAFgWYRkAAAAAAAAAAAAsi7AMAAAAAAAAAAAAlkVYBgAAAAAAAAAAAMsiLAMAAAAAAAAAAIBlEZYBAAAAAAAAAADAsgjLAAAAAAAAAAAAYFmEZQAAAAAAAAAAALAswjIAAAAAAAAAAABYFmEZAAAAAAAAAAAALIuwDAAAAAAAAAAAAJZFWAYAAAAAAAAAAADLIiwDAAAAAAAAAACAZRGWAQAAAAAAAAAAwLIIywAAAAB4VXx8vEaMGKFSpUopf/78KlWqlN5++23FxcV5uzS42ZkzZzRw4EAVL15c+fPnV/ny5RUZGalr1655uzQAAG5y6tQpPffccypWrJgKFCigihUrasqUKUpKSvJ2acBtu3r1qj755BOVKVNG+fPnV4kSJfTSSy/p3Llz3i4N8ArCMgAAAABes3TpUpUuXVr//Oc/deTIEV28eFFHjhzRe++9p9KlS+u7777zdolwk6lTp+ree+/VxIkT9ccff+jixYvav3+/nn/+eVWqVEmbN2/2dokAADhFRkbq3nvv1bRp03T8+HFduHBB+/btU9++fVWlShXFxsZ6u0Qgy3788UeVL19eL7/8sn7//XddvHhRx44d09ixY3Xvvfdq5syZ3i4RyHaEZQAAAAC8YsuWLXr00Ud15swZJScnp5qWnJysP//8U506ddLPP//spQrhLvPmzdOzzz6r+Ph4ORyOm6b//vvvatGihY4cOeKF6gAASO3rr7/W888/rytXrqQ6bhljJEkHDhxQs2bNdPz4cW+VCGTZvn371KpVKx07dszZplMkJyfrwoULevrpp7Vs2TIvVQh4B2EZAAAAgGyXkJCgxx9/XA6H46Y/0lMYY5ScnKzHH39cV65cyeYK4S4nT57UM888I5vNluY8ycnJunjxonr06JFmewAAIDscPXpUffr0SXceh8Ohc+fOqXfv3hy34FMcDoeeeuopXb58+aYvq/1d9+7d9ddff2VTZYD3EZYBAAAAyHazZs3S77//fsteRjdyOBw6cuSIvvzyy2yqDO72ySef6MqVKxleTExKStK6deu0bt267CkMAIBb+Oijj5SYmJjhfElJSVq2bJn+85//ZENVgHssXbpUmzdvzvAc3Bij8+fP67PPPsumygDvs0RYtmXLFrVs2VKSdOHCBfXt21elS5dWhQoVVKtWLS1atOimZT7//HPZbDatX7/ebXU89thj2rhxoyRpyZIlqlWrloKCgjRkyJBU83322Wf617/+5bbXBQAAAHKa+fPnKyDAtT9HbDabFixY4OGK4AnGGM2dO1dJSUkuzR8YGHjLv88AAMgOWTluLV682MNVAe6zcOFCBQYGujSvw+HQvHnzPFwRsorMw/0sEZYtWLBAHTp0kDFGrVq1Uq5cubRv3z7t3btXUVFR6tevn5YuXZpqmaioKDVu3FhRUVFuqWHTpk3666+/FBERIUkqV66cpk+frqFDh94077PPPquoqChduHDBLa8NAAAA5CTx8fFatWpVht9oTZGcnKw1a9bo0qVLHq4M7rZ3714dOnTI5fmTkpI0f/58bmkFAPCK7du368SJEy7Pn3LcAnyBw+HQggULXA6DJWnHjh06duyYB6tCVpF5uJ9rMbIXXLlyRT169NDOnTuVK1cuFS1aVLlz51a3bt3UrVs3SdLKlSv11ltv6eeff9a0adP0ySefKHfu3HI4HJo2bZoeeOABSdLixYsVExOj1atX68iRI1q7dq0zQQ8PD9ebb76pd999V61atZL0vz/oNm/erEqVKunixYvKly+fJKlhw4aqXbu2fv75Zx0/flxNmzbVpEmTdPz4cdWoUUOHDh1ScHCwJKlbt26qX7+++vXrp8mTJzvr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c4KtW7dq//79bnltd3P9CiNyFHcEZZK0ceNGVa1aVUWLFnWOa968ufr166fffvtNNWrUcHld165dU3x8fJbq8JYb6/W12jOybNkySdeT/b9v27Vr15z//n1a586d9d1332np0qWqV69e9hQLZNEPP/yQqW+nOhwOrV+/3mf3d/ZrcNyiffs7f27jaWGbrbHNkv9v948//qhcuXI5P7MzYozRzz//7Je/C3/G8fp//H2fxv9Y6b1253XCvxs4cKAkadCgQZKkDz/8UDab7fYKBuS5oCw+Pl5BQUGZXi4kJCTNaU8++aT27t2rxMRElShRQlFRUUpISFB4eLgGDx6s6OhoXbhwQePHj1erVq0kXd8vhw4dqkuXLskYo3fffVft27eXJC1evFgxMTFavXq1jhw5orVr1zq/VB4eHq4333xT7777rnNde/fu1aFDh7R582ZVqlRJFy9eVL58+SRdf4Zh7dq19fPPP+v48eNq2rSpJk2apOPHj6tGjRo6dOiQgoODJUndunVT/fr11a9fP02ePFndunVzbmPjxo2d/y9RooTCwsJ09OhRZ37RpUsXTZs2TaNGjcr079bjvHkPSGRdnTp1zD333JPhM8r+rkGDBqnuJ9ynTx/TrFmzVPPEx8cbSWbp0qXpLnujKlWquHxfegYGBgYGBgYGBgYGBgYGBgYGBobsG9J6ZpknrhOmZ9y4cUaSiYqKyvSynuZPz+7KDF/e7qSkJHPXXXeZatWqZfkZZX+X8syyrA7pOX36tPP/H3zwgenbt685dOiQkWTmzp1rjDFm2bJlpnz58sYYY86ePWuKFClifvjhB2OMMQ6Hw/kstX379pm6desaY4wZNWqUadeu3U2v98svv5g8efI4fx46dKjz2aKPPvqomTx5snNagwYNTIcOHcy1a9fM5cuXTalSpcxPP/1kjDGmW7duznlPnjxpChcubC5dumSMMaZ06dJm586dt9zemJgYc88996RqV99//72pVatWur8nb+E2jD6qcOHCunjxok6ePOntUgAAAAAAAAAgXcYY7d27V5Isc5s8eJbNZlPhwoX1559/6q+//vJ2ORn6+uuvVbt2bVWpUkXTpk1TbGysJClPnjzq2LGjJCkiIsJ528KNGzeqQoUKql+/vqTrz3wtVKiQpP/dgjEjefPmlXT9uaMzZszQM888I0nq2bPnTbdi7Nq1qwIDA5U3b16Fh4c76xg8eLAiIyMlSVOnTtUTTzyh0NBQSdKxY8dS9UZNsXPnTj3zzDOaM2dOqt52YWFhOnbsWMa/LC/gNow+as6cOWrTpo1atGih5cuXZ/k2BmFhYdq0aVOqcadOnXJOc1WuXLnUp08fjRkzJkt1eEt8fLxzZz516lS63WR9zRtvvKFx48bpq6++UsOGDVM9P+D999/X1KlT1a9fPw0bNsw53m63a+3atXr66ac1ZMgQvffee94oHXDZQw895DyxcIXNZlOjRo189rll7NfguEX79nf+3MbTwjZbY5sl/9/u119/XRMmTMjULbLz5MmjP//804NVwd04Xv+Pv+/T+B9/eK9TbrOWEXddJ7wVY4yef/55TZgwQVOnTnXeRg64HQEBAVqzZo0aNWqkhg0bat26dSpXrpxb1v3f//7XGUy5w48//qjx48dr48aNKlKkiBYvXqzhw4dLkoKCgpy3JbXb7S49B3bhwoX68ssvJUk1a9bU+PHjde3aNeXKlcs5z8aNG1W3bl1JUnR0tM6fP6/mzZtLur5PHj9+XL/++quqVKki6fq5WQq73e48r6tTp46Cg4O1du1aTZkyRatWrXLOFxwcrISEhFS17dq1S23atNH06dP10EMPpZqWkJDgDPByGsIyHxUSEqLo6OjbDswiIiL0/vvv6/Tp0ypSpIgkKSYmRvny5VOlSpUyta5cuXL55AlDipCQEJ+u/+9atmypcePGae7cuXrqqadSTUs5ScqXL59KliyZatq8efOcy/vT7wP+qVmzZvr1119dvihjs9nUtGlTn23b7Ne4Ecet62jf/svf2rgr2Gbr8Mftbtq0qcaPH+/y/Ha7XY888ojf/R78HcfrW/PHfRq35u/vtTuvE97o70FZ79693VUyoLCwMI8EZu7e38+dO6c77rhDd955pxITEzV58uQMl6lbt67279+v9evXq379+kpOTtb58+d19epVxcXFObezUaNGKlGihF544QWNHTtWgYGBio2N1ZgxYzR37lxJUlRUlMaOHavnnnvOuf5hw4YpKirKpQ4wgwcP1tNPP61KlSqpfPnyzvHVqlXT3r17VaJECUnS7t271apVK02ZMkVNmza9aT27d+9W9erVM3w9b+A2jD4sJTCrXbu2WrRooQ0bNmR6Hc2aNVOlSpXUvXt3bd++XStWrNCbb76pAQMGZOkBhsg5GjdurIoVK2rRokVasmSJS8ssXbpUixYtUsWKFdWoUSMPVwjcvnbt2mXq28vJyclq166dByvyLPZr+DPaNwD4tsaNG6f6NnJGHA6HS7cOQs7C8Rrwb564TkhQhuyQEpjlz59fDRs21P79+71d0k1atGihChUqOG+rGB4enuEyBQsW1IIFC/Tqq6+qWrVqqlmzpjZs2KBFixalur4VEBCgZcuW6erVqypfvrxKly6tiIgIzZs3T9WrV9fx48e1evVqPfbYY6nW/+STT2rmzJlKTEzMsJbOnTsrLi5Ozz///E3jV6xY4fx50KBBunDhgoYNG6bw8HCFh4enmr58+XJ17tw5w9fzBsIyH3e7gZndbld0dLTsdrsiIiL01FNP6emnn9aIESM8VDGyS2BgoD777DPZ7XY98cQTWr16dbrzr169Wo8//rjsdrs+/fRTBQbS8RQ534MPPujyfc5tNptKly6tihUrergqz2G/hj+jfQOAb8ubN69atGghu93u0vw2m01t27b1cFVwN47XgH9z93VCgjJkp5wemOXKlUtz5szRgQMH9PPPP+v9999XbGysSpUqpfPnzzvnCw0NlTHG+fODDz6oDRs2aMeOHYqNjVXbtm21cOHCm750VKBAAU2dOlW///67du3apU6dOunll19WQkKC7rnnHl2+fPmma2jVqlXTmTNnlDt3bq1bty7VOufOnasePXo4f46NjVXhwoXVunXrVOt45plntGLFCsXHx0u63hv13Llzio2NdQ4pt378888/tXXrVnXp0uU2fpOeQ1jmB243MCtZsqSWLl2qy5cv68yZMxo9ejQnsH6icePGioyMVHx8vJo3b67+/fvrt99+04ABA7R+/Xo999xz2rVrlwYMGKDmzZsrPj5ekZGRatKkibdLB1xit9s1atQol+Y1xmj06NHOe0D7KvZr+DPaNwD4tnfffdelc62AgAANGTJEd999dzZUBXfjeA34N3ddJyQogzfk9MDMXZYvX67atWunOT1PnjyaOXOmVq5cmame/2np3bu3OnbsqM8++0wBAakjpdDQUI0ZM0aHDh3KcD0HDx7UpEmTlDt37tuuySMM/EZcXJxp2LChCQ0NNT/++OMt52nQoIHJlSuXCQkJMTt27HBpvTNnzjQhISEmICDADB48+Jbz1KhRw/Tv3z+rpXtN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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from qualtran.drawing._show_funcs import show_bloq\n", - "\n", - "cbloq = RecursiveUnaryIteration()\n", - "cbloq.ctrl_bitsize = 3\n", - "cbloq.sys_bitsize = 1\n", - "ops = dict()\n", - "for ix in range(4):\n", - " ops[ix] = CZPowGate(exponent=float(ix))\n", - "cbloq.set_ops(ops)\n", - "msd = get_musical_score_data(cbloq.decompose_bloq())\n", - "fig, ax = draw_musical_score(msd)\n", - "fig.set_figwidth(18)\n", - "fig.set_figheight(7)" + "To start with measurement based uncomputation, assume we have three qubits in the state $|a \\rangle |b\\rangle |0\\rangle$ and we apply a Toffoli gate to get $|a\\rangle |b\\rangle |a \\otimes b\\rangle$. Now to uncompute we apply a Hadamard gate to the third qubit. If $a \\otimes b$ is 0, then the Hadamard will put the third qubit in the state $|0\\rangle + |1\\rangle$ (up to normalization). If $a \\otimes b$ is 1, then we get $|0\\rangle - |1\\rangle$, so the third qubit is in the state $|0\\rangle + (-1)^{a \\otimes b} |1\\rangle$. After the Hadamard gate we then perform a measurement on the third qubit. If the measurement is 0 then we are good, however if the measurement is 1 then we have to correct for the phase of $(-1)^{a \\otimes b}$ that was introduced. This can be easily corrected by performing a CZ gate between $a$ and $b$, which takes 0 T gates to do. " ] }, { @@ -979,590 +743,6 @@ "\n", "Now that we have a data structure that can query the state of `ctrl` given `q` our next goal is to extend it to act on a quantum `ctrl` register and utilize ancilla *qubits*, not bits. The key point to remember is that the query is still classical. Now the first thing we have to do to update our boolean logic to be reversible, as we currently just set our classical `ancilla_bits` to whatever we need them to be. One thing to keep in mind is that the uncomputation works in reverse, if we have ancillas $[c_0 \\land c_1, c_0 \\land c_1 \\land c_2, c_0 \\land c_1 \\land c_2 \\land c_3]$ we would uncompute them as $\\to [c_0 \\land c_1, c_0 \\land c_1 \\land c_2, 0] \\to [c_0 \\land c_1, 0, 0]$. One of the key insights is that when we uncompute and then recompute the ancillas, the most significant ancilla can simply be updated instead of uncomputed. This is the $Toffoli(a,b,c) \\cdot I \\otimes X \\otimes I \\cdot Toffoli(a,b,c) = CNOT(a, c) \\cdot I \\otimes X \\otimes I$ gate reduction we implemented. " ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "2bda8210", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABjsAAAKECAYAAABRk4h5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAssklEQVR4nO3de/Rd853/8VduI+7BjBiNWxQdl+Qb1yZkGCSV1KRRMSGhxj0sI1qDjtWSlmkbNYvl0mLENS1KCWNURMQ9pQRj2ojLhJk0o25JiBFy2b8/LKfNL5EoSt48HmudtZx9Pnvvzzn552M/z3efdk3TNAEAAAAAACiq/Sc9AQAAAAAAgA9D7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgD4DBo1alTmzZv3gfc9/vjjF9u2995758EHH0yS3HLLLdlhhx2yxRZbpHv37jniiCMye/bsxcY3TZNNNtkke+yxxweaw9I8/vjj+fKXv9x6PmTIkKy//vpp167dYuefN29etttuu8yZM+cjOzcAfBpZL1gvAEAlYgcAfAZ95zvfec+LFwsWLPijjjV37txMnTo1O+64Y2677bYcddRRufjiizNt2rQ89dRT6dy5cwYMGJBFixa19pk4cWK6dOmS//iP/8j06dM/1Ht51z/90z/lm9/8Zuv5iBEj8thjjy0xrnPnzjnooIPyL//yLx/JeQHg08p6wXoBACpp1zRN80lPAgBYvsmTJ+fEE0/M66+/nqZpcvrpp+dzn/tcjjvuuMydOzedO3fO2WefnZ133jnPPfdc2traMnLkyNxyyy2ZM2dOzj333AwcODAjRozIRRddlK233jodOnTI7bffnpNOOint27fPM888kxdffDFPPvlkfvjDH+byyy9P+/bt06NHj/zoRz/KmmuumVGjRmX27Nk555xzkiTXXXddJk2alB/96EfZZZddMmzYsBxzzDGteb/99tvp3r17xowZky996UtJkgMOOCB9+/bNtGnTssYaa+T0009Pktx111059thj89d//de5//77s2DBglxxxRXZfvvtc+yxx2b99dfPKaeckiSZNm1a9txzz0yfPj0zZ85M37598/zzzy/xubVr1y6zZs1Kly5dWtteeOGF9OrVKzNnzky7du2W+nm/8cYbH8U/GwB85FZdddX3fM164eNdLwAAK5AGAFjhvfLKK826667b3HPPPU3TNM3ChQub3/3ud80GG2zQ3HbbbU3TNM29997bdO3atXn99deb6dOnN0ma66+/vmmapvnFL37RbL755q3jJWlmzZrVen7wwQc3PXr0aF577bWmaZrm1ltvbb7whS+0xhxxxBHNiBEjmqZpmtNOO60ZOXJka98DDjigGT9+fNM0TbPyyis3U6ZMWWL+gwYNan7wgx+03kuXLl2aWbNmNY8//njTrVu3ZuHChU3TNM2kSZOaDh06NL/85S+bpmmaH//4x03//v2bpmmaJ598stloo42aBQsWNE3TNMcdd1zz3e9+t2maprnyyiubfffdd6mf3f//Xt+1ySabNE888cRS93l3Pw8PDw8PjxXx8V6sFz7+9QIAsOJwGysAKGDy5MnZYost0rdv3yRJ+/bt87vf/S7t27dvfftxl112SdeuXVu3YujcuXO++tWvJkl69+6dZ599dpnn2G+//bL66qsnSe64444MHTq09e3Go48+OhMmTFhin/nz5+eBBx7I3/zN3yz3Pay88spJkp/85CcZMGBAunTpkh49eqRr164ZP358a9znP//57LTTTkvMe4sttsiWW26Zm266KW+88UauvvrqHHnkkUmSGTNmpGvXrsudwx9ab731MmPGjD9qHwBYkVkvWC8AwGdZx096AgDAR+cPb7Gw0kortZ536NAhCxcuXOa+q6222vs67h+68847s/POO6dTp05Jkm233TaTJ09Or169WmPefvvtPPLII/n2t7+dJBkzZkxeeOGFbLzxxkmS119/PWPGjMmAAQOSvHPR5V0dOnRY7J7gI0eOzOjRo/PSSy+lX79+rQsWq6yyyh/9A6rz5s1rXVBZmrlz5/5RxwOAKqwX3r/lrRcAgBWH2AEABfTp0ydPP/107r333vTt2zeLFi1K165ds2jRokyYMCH9+vXLAw88kBdeeCFtbW15+eWXl3m81VdfPXPmzFnsvtR/aM8998wJJ5yQb3zjG1ljjTVy0UUXpX///kuMGzduXPbZZ5/W81NOOSWHH354+vTpk7a2tixYsCAnnHBCdtttt2y//fZ55JFH8tJLL2XmzJlp3/6dPzCdPXt2Nthgg7z00kvL/Rz69++fr3/96znjjDPys5/9rLW9R48eue6665a7/7sWLlyYZ599Nttss817jlnW/dABYEVkvfCOj3O9AACsONzGCgAKWGuttXLjjTfmm9/8Znr06JFtt902Dz74YG644Yacdtpp6dGjR44//vhcf/31y/zG5btOOOGE9OvXL21tbXnxxReXeH3AgAE55JBD0rt372yzzTZ57bXX8v3vf3+xMU3TZPz48dlrr71a2wYOHJgLL7wwhx9+eDbffPOstdZamTVrVq688sok73xLc//9929duEiSLl26pF+/frnqqquWO+927drlsMMOy7rrrpvevXu3tu+yyy6ZMWNGXn311da2L3/5y+nWrVuSZKuttspuu+3Weu2+++7LDjvskLXXXnu55wSA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wWmaJgMHDkynTp3y1FNPZdq0aRkzZkyOPvro3HrrrYvtM2bMmOyxxx4ZM2bMhz5/kjz00EN59dVX07t37yTJVlttlfvvvz9PPPFE/v3f/z3HH398nn322STJ3nvvnUceeSRPP/30R3JuAPg0sWawZgCAFV3HT3oCAMDvvfnmm/n7v//7PPHEE+nUqVO6du2a22+/PVdddVXOP//8zJ8/P6uttlrOO++89OzZc4n9lzVu9OjRGTt2bNq3b5+VV145d955Z0aMGJHnn38+bW1t2XDDDXPzzTdn4403zrhx49LW1pZnnnkmI0aMyIsvvpj27dtn1KhRrW+FtmvXLv/8z/+ccePG5aWXXsqpp56aQw45pDWXm2++ORMmTMjEiRPz/PPPZ9KkSenY8Z2lR1tbW771rW/l9NNPz8CBA5Mk06ZNy/Tp0/OrX/0qW265ZV577bWsscYaSZLddtst22+/fR588MHMnDkz/fr1y4UXXpiZM2emV69emT59elZZZZUkybBhw9K3b98cffTRueiiizJs2LDWnPbYY4/Wf2+wwQZZb7318j//8z/ZdNNNkyR/93d/l0suuSSjR49e6r/PG2+88YH+XQHgg1p11VWXut2aYcVeMwAAn4AGAFhh3HDDDU3//v1bz1955ZXmvvvuawYMGNDMmzevaZqmueeee5ott9yyaZqmueyyy5qvfOUrTdM0yxx3+eWXNzvssEMze/bspmma5tVXX20WLFjQTJo0qenZs+dic9hoo42aRx99tGmaptlxxx2bCy+8sGmapnnqqaeatddeu3nuueeapmmaJM1ZZ53VNE3TTJ06tVlttdWa+fPnt8b26dOnaZqmGT16dDNo0KAl3uuUKVOazp07t56feOKJzcknn9w0TdPss88+zUUXXdR6bdddd20GDx7czJ8/v/m///u/ZuONN24eeOCBpmmaZtiwYa2xL7zwQvMXf/EXzeuvv940TdN07969eeKJJ5b6WU+YMKFZf/31m7lz57a23X333c1222231PHvvmcPDw8PD4+P8/FerBlW7DUDAPDx85cdALAC6dmzZ6ZOnZpjjjkmu+66awYOHJibbropjz/+eHbaaafWuFdffTVvvvnmYvsua9wtt9ySESNGZM0110ySrLXWWsudy+uvv54pU6bk/vvvT5Jsttlm2WWXXXLvvfdmo402SpIMHz48SfKFL3whHTt2zAsvvJBu3bq1bkexPCuvvHKSZMGCBbnyyitz9913J0kOPfTQnH766YvdD3vo0KHp2LFjOnbsmLa2tjz77LPp3bt3Ro4cmSOOOCJHHnlk/vVf/zUHHHBAVltttSTJjBkz0rVr1yXO+8QTT+SQQw7Jtddeu9g3Ztdbb73MmDFjufMGgE+aNYM1AwCwOLEDAFYg3bt3z29+85vceeedueOOO3LSSSelf//+Ofjgg/O9731vmfs2TfO+xn0Y7dq1W+x5586dW//doUOHLFiwIEkybty4XHHFFUmSbbfdNueee27mz5+fTp06tcZPnjw5ffr0SfLOD33Onj07X/rSl1rvZebMmfnP//zPbL311ss814477phVVlklkyZNysUXX5w77rijNW6VVVbJvHnzFpvzb37zm+y999659NJLs8suuyz22rx581oXU5Zm7ty5y/p4AOBjY82wYq8ZAICPn9gBACuQGTNmZK211sqgQYOy1157Zdy4cTnwwANz0EEHZcSIEdlwww2zaNGiTJkyJdtvv/1i+w4aNCjDhw9f6rhBgwblvPPOy7777ps111wzs2fPzuqrr5411lgjc+bMWepcVl999Wy77ba57LLLcsQRR+SZZ57Jfffdl3PPPXeZ7+F///d/M3fu3Gy22WZJkt133z0bbLBBvv71r+ecc85Jx44d89hjj+Xss8/O9ddfn+SdHxk955xzMmLEiNZxTj755IwZMyZnn332cj+3kSNH5mtf+1q23HLLbL755q3tPXr0yLRp07LBBhskSaZOnZqBAwfm4osvTr9+/ZY4ztSpU5d6X/N3vdd90wHg42bNsGKvGQCAj1/7T3oCAMDvPfHEE9l5553Ts2fP9OrVKwcddFB23XXXnHnmmdlnn33Ss2fPbLXVVrnmmmuW2Ldv377vOe6ggw7Kvvvumz59+qRnz54ZOHBg3nrrrfTo0SNbbbVVtt566wwaNGiJY/7kJz/Jtddem549e2bIkCG55JJLsuGGGy7zPdx0002LHat9+/b5xS9+kbfeeiubb755unfvnt69e+fnP/95evbsmZkzZ2bixInZb7/9FjvO8OHDM3bs2Lz99tvL/dyGDBmSuXPn5thjj11i+/jx41vPjzvuuMyZMycnn3xy2tra0tbWttjrt912W4YMGbLc8wHAJ82a4fesGQCAJGnXNE3z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bunVq1f+67/+K08//XRGjRqVr3zlK3nsscda4xctWpTLL788u+22Wy677LIPPJ8/dN1112XzzTfPRhttlCTZbrvt8rOf/SzDhg1bYuxJJ52UUaNGZeHChR/JuQFgRWfN8HvWDADw2dDxk54AAPD+jBgxIknSt2/fdOjQId/4xjdywQUX5O23386iRYtyxhln5G//9m+TJLvttlt69OiRX/3qV1l55ZUzfvz4jBw5MnfccUfWXnvt7LzzznnkkUdy1113JUmuuuqqnH/++Zk/f35WW221nHfeefnLv/zLnHrqqZkzZ07a2tryxS9+MRdeeGHmz5+f+++/P5dffnmuuOKKrLXWWjn55JNb89xjjz1y2GGHZfTo0bn66quTJBMmTEjXrl1z1llnZfDgwTn11FPTvv0737nYeOON87WvfS0TJkzICy+8kMMOOyzf+ta38vDDD+fAAw/M1KlT065duyRJnz598u1vfzsDBgzIRRddlFNOOaV13p49eyZJ67h/aN11182mm26a22+/PQMGDHjPz/iNN974oP88APCJWHXVVZfYZs3wp18zAAArHrEDAIq48MILc9FFF+Xee+9Nly5d8sorr+Sggw5Ku3bt8txzz+WLX/xinn/++ay00kpJkqeeeir33HNPOnXqlAsuuCBPP/10fv3rXydJBg4c2Dru/fffn6uvvjr33HNPVlpppdx7770ZNmxYfv3rX+e73/1uxo0bl3HjxrXGT5o0KX369EmnTp0yZcqU9O7de4m59u7dO//2b//Wej5mzJgceuih6dWrV9ZZZ53ccccd6d+/f+v12bNnZ/LkyXn55Zez6aab5pBDDsn222+fddZZJxMmTEj//v3z6KOP5qWXXspee+3Vuniy0047ve/Pr3fv3pk4ceIyL1ysttpq7/t4ALAiaJpmiW3WDH/6NQMAsOJxGysAKGr69OkZMGBAtt566wwePDivvvpqpk+f3nr9wAMPTKdOnZIkEydObD3v1KlTDj744Na4m266KY8//nh22mmntLW15R/+4R/y6quv5s0331zqeceNG5d99tlnufNbeeWVkySvvPJKbr/99hxwwAFJkkMPPTRjxoxZbOy7t5H48z//83Tv3r31PkaOHJnzzz8/SXLBBRfkmGOOSbt27fLyyy+nQ4cOf1ScWG+99TJjxoz3PR4APi2sGawZAOCzwF92AEBR+++/f37wgx9kyJAhSZK11157sXtzL+t/6t+9xUPyzjdCDz744Hzve99b7jmbpsn48eNz5plnJkm23XbbXHzxxUuMmzx5cvr06ZPkndtdLFiwoHXLiIULF+aVV17JK6+8knXWWSdJ0rlz59a+HTp0aN0z/Ktf/WpOOumkPProo7n55ptz1llnJUlWWWWVvPXWW2maZrH3sizz5s1rXUx5L3Pnzn1fxwKASqwZPvo1AwCw4hE7AKCQ1VdfPXPmzEmXLl0ya9asbLLJJkmSsWPHZtasWe+53+67756f/vSnrW9DXnnlla3XBg0alOHDh2fEiBHZcMMNs2jRokyZMiXbb7991lhjjcyZM6c19qGHHspf/dVftS6KHHDAAfn+97+f0aNHt+7Bfeedd+aGG25o3dt7zJgxuf7667PXXnu1jjN06NCMHTs2I0eOXOb77dixY0aMGJFBgwZln332SZcuXZIka665Zj73uc/l2Wefzec///n39dlNnTq1dfHkvSztvucAUJE1Q5ckf7o1AwCw4nEbKwAo5IQTTki/fv3S1taWs88+O0OGDEmvXr3y6KOPZsMNN3zP/Y466qhsvPHG2XLLLbPzzjtn0003bV0E6Nu3b84888zss88+6dmzZ7baaqtcc801Sd754dC33norPXr0yIgRI3LjjTdm8ODBreOuuuqqufvuuzNlypRssskm2WCDDTJ06NDcfffd6datWx566KG8+OKL2XPPPRebz/Dhw5e4LcV7Oeyww/Lb3/42xx577GLbhwwZkvHjx7eeX3755enWrVuuu+66jBo1Kt26dcujjz6a5J1vl06cOPF93UoDAD4NrBl+z5oBAD4b2jVL+zUzAOBT5/XXX8/qq6+e+fPnZ/jw4dluu+1a36x8v7baaqtMmjQp66677lJfnzVrVoYOHZr1118/l156adq3//Dfq7j++uvz4x//OBMnTlxs+3//939nyJAhefDBB5d7W4rbbrstY8eOzdixYz/0fADg086awZoBACoSOwDgM2KnnXbKW2+9lXnz5mWXXXbJeeedt8Lfj3qvvfbKU089lRtvvHGpt5P4+c9/np122indunVb5nGuvfba9O3bN+uvv/6faqoA8KlhzWDNAAAViR0AAAAAAEBpfrMDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoDSxAwAAAAAAKE3sAAAAAAAAShM7AAAAAACA0sQOAAAAAACgNLEDAAAAAAAoTewAAAAAAABKEzsAAAAAAIDSxA4AAAAAAKA0sQMAAAAAAChN7AAAAAAAAEoTOwAAAAAAgNLEDgAAAAAAoLT/BwVFfbm1uJ6fAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from functools import cached_property\n", - "from typing import Sequence, Set, Tuple\n", - "\n", - "import cirq\n", - "from qualtran._infra.data_types import BoundedQUInt\n", - "from qualtran.bloqs.multiplexers.unary_iteration_bloq import UnaryIterationGate\n", - "from qualtran.resource_counting._call_graph import BloqCountT\n", - "\n", - "class UnaryTest(UnaryIterationGate):\n", - " def __init__(self, selection_bitsize: int, target_bitsize: int, control_bitsize: int = 1):\n", - " self._selection_bitsize = selection_bitsize\n", - " self._target_bitsize = target_bitsize\n", - " self._control_bitsize = control_bitsize\n", - " @cached_property\n", - " def selection_registers(self) -> Tuple[Register, ...]:\n", - " return (Register('selection', QAny(self._selection_bitsize)),)\n", - "\n", - " @cached_property\n", - " def target_registers(self) -> Tuple[Register, ...]:\n", - " return (Register('target', QAny(self._target_bitsize)),)\n", - " \n", - " @cached_property\n", - " def control_registers(self) -> Tuple[Register, ...]:\n", - " return (Register('control', QAny(self._control_bitsize)),)\n", - " \n", - " def nth_operation( # type: ignore[override]\n", - " self,\n", - " context: cirq.DecompositionContext,\n", - " control: cirq.Qid,\n", - " selection: int,\n", - " target: Sequence[cirq.Qid],\n", - " ) -> cirq.OP_TREE:\n", - " return cirq.CZPowGate(exponent=selection).on(control, selection)\n", - " \n", - " def nth_operation_callgraph(self, **selection_regs_name_to_val) -> Set['BloqCountT']:\n", - " return {(CZPowGate(), 1)}\n", - " \n", - "example = UnaryTest(2, 1)\n", - "msd = get_musical_score_data(example.decompose_bloq())\n", - "fig, ax = draw_musical_score(msd)\n", - "fig.set_figwidth(18)\n", - "fig.set_figheight(7)" - ] - }, - { - "cell_type": "markdown", - "id": "fcdb39f2", - "metadata": {}, - "source": [ - "Given an array of potential operations, for example:\n", - "\n", - " ops = [X(i) for i in range(5)]\n", - " \n", - "we would like to select an operation to apply:\n", - "\n", - " n = 4 --> apply ops[4]\n", - " \n", - "If $n$ is a quantum integer, we need to apply the transformation\n", - "\n", - "$$\n", - " |n \\rangle |\\psi\\rangle \\rightarrow |n\\rangle \\, \\mathrm{ops}_n \\cdot |\\psi\\rangle\n", - "$$\n", - "\n", - "The simplest conceptual way to do this is to use a \"total control\" quantum circuit where you introduce a multi-controlled operation for each of the `len(ops)` possible `n` values." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0148f529", - "metadata": {}, - "outputs": [], - "source": [ - "import cirq\n", - "from cirq.contrib.svg import SVGCircuit\n", - "import numpy as np\n", - "from typing import *" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "32e90969", - "metadata": {}, - "outputs": [], - "source": [ - "import operator\n", - "import cirq._compat\n", - "import itertools" - ] - }, - { - "cell_type": "markdown", - "id": "a6d947da", - "metadata": {}, - "source": [ - "## Total Control\n", - "\n", - "Here, we'll use Sympy's boolean logic to show how total control works. We perform an `And( ... )` for each possible bit pattern. We use an `Xnor` on each selection bit to toggle whether it's a positive or negative control (filled or open circle in quantum circuit diagrams).\n", - "\n", - "In this example, we indeed consider $X_n$ as our potential operations and toggle bits in the `target` register according to the total control." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8e61bf03", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "import sympy as S\n", - "import sympy.logic.boolalg as slb\n", - "\n", - "def total_control(selection, target):\n", - " \"\"\"Toggle bits in `target` depending on `selection`.\"\"\"\n", - " print(f\"Selection is {selection}\")\n", - " \n", - " for n, trial in enumerate(itertools.product((0, 1), repeat=len(selection))):\n", - " print(f\"Step {n}, apply total control: {trial}\")\n", - " target[n] ^= slb.And(*[slb.Xnor(s, t) for s, t in zip(selection, trial)])\n", - " \n", - " if target[n] == S.true:\n", - " print(f\" -> At this stage, {n}= and our output bit is set\")\n", - "\n", - " \n", - "selection = [0, 0, 0]\n", - "target = [False]*8\n", - "total_control(selection, target) \n", - "print()\n", - "print(\"Target:\")\n", - "print(target)" - ] - }, - { - "cell_type": "markdown", - "id": "e572a31d", - "metadata": {}, - "source": [ - "Note that our target register shows we have indeed applied $X_\\mathrm{0b010}$. Try changing `selection` to other bit patterns and notice how it changes." - ] - }, - { - "cell_type": "markdown", - "id": "a4a75f61", - "metadata": {}, - "source": [ - "Of course, we don't know what state the selection register will be in. We can use sympy's support for symbolic boolean logic to verify our gadget for all possible selection inputs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5df67d45", - "metadata": {}, - "outputs": [], - "source": [ - "selection = [S.Symbol(f's{i}') for i in range(3)]\n", - "target = [S.false for i in range(2**len(selection)) ]\n", - "total_control(selection, target)\n", - "\n", - "print()\n", - "print(\"Target:\")\n", - "for n, t in enumerate(target):\n", - " print(f'{n}= {t}')\n", - " \n", - "tc_target = target.copy()" - ] - }, - { - "cell_type": "markdown", - "id": "deab0553", - "metadata": {}, - "source": [ - "As expected, the \"not pattern\" (where `~` is boolean not) matches the binary representations of `n`." - ] - }, - { - "cell_type": "markdown", - "id": "81b69e70", - "metadata": {}, - "source": [ - "## Unary Iteration with segment trees\n", - "\n", - "A [segment tree](https://en.wikipedia.org/wiki/Segment_tree) is a data structure that allows logrithmic-time querying of intervals. We use a segment tree where each interval is length 1 and comprises all the `n` integers we may select.\n", - "\n", - "It is defined recursively by dividing the input interval into two half-size intervals until the left limit meets the right limit." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ab998aa4", - "metadata": {}, - "outputs": [], - "source": [ - "def segtree(ctrl, selection, target, depth, left, right):\n", - " \"\"\"Toggle bits in `target` depending on `selection` using a recursive segment tree.\"\"\"\n", - " print(f'depth={depth} left={left} right={right}', end=' ')\n", - " \n", - " if left == (right - 1):\n", - " # Leaf of the recusion.\n", - " print(f'n={n} ctrl={ctrl}')\n", - " target[left] ^= ctrl\n", - " return \n", - " print()\n", - " \n", - " assert depth < len(selection)\n", - " mid = (left + right) >> 1\n", - " \n", - " # Recurse left interval\n", - " new_ctrl = slb.And(ctrl, slb.Not(selection[depth]))\n", - " segtree(ctrl=new_ctrl, selection=selection, target=target, depth=depth+1, left=left, right=mid)\n", - " \n", - " # Recurse right interval\n", - " new_ctrl = slb.And(ctrl, selection[depth])\n", - " segtree(ctrl=new_ctrl, selection=selection, target=target, depth=depth+1, left=mid, right=right)\n", - " \n", - " # Quantum note:\n", - " # instead of throwing away the first value of `new_ctrl` and re-anding\n", - " # with selection, we can just invert the first one (but only if `ctrl` is active)\n", - " # new_ctrl ^= ctrl" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6a514ee6", - "metadata": {}, - "outputs": [], - "source": [ - "selection = [S.Symbol(f's{i}') for i in range(3)]\n", - "target = [S.false for i in range(2**len(selection)) ]\n", - "segtree(S.true, selection, target, 0, 0, 2**len(selection))\n", - "\n", - "print()\n", - "print(\"Target:\")\n", - "for n, t in enumerate(target):\n", - " print(f'n={n} {slb.simplify_logic(t)}')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23d91438", - "metadata": {}, - "outputs": [], - "source": [ - "print(f\"{'n':3s} | {'segtree':18s} | {'total control':18s} | same?\")\n", - "for n, (t1, t2) in enumerate(zip(target, tc_target)):\n", - " t1 = slb.simplify_logic(t1)\n", - " print(f'{n:3d} | {str(t1):18s} | {str(t2):18s} | {str(t1==t2)}')" - ] - }, - { - "cell_type": "markdown", - "id": "e39448e6", - "metadata": {}, - "source": [ - "## Quantum Circuit\n", - "\n", - "We can translate the boolean logic to reversible, quantum logic. It is instructive to start from the suboptimal total control quantum circuit for comparison purposes. We can build this as in the sympy boolean-logic case by adding controlled X operations to the target signature, with the controls on the selection signature toggled on or off according to the binary representation of the selection index.\n", - "\n", - "Let us first build a GateWithRegisters object to implement the circuit" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6b37d717", - "metadata": {}, - "outputs": [], - "source": [ - "import cirq\n", - "from functools import cached_property\n", - "from qualtran import Signature, GateWithRegisters, QUInt\n", - "\n", - "class TotallyControlledNot(GateWithRegisters):\n", - " \n", - " def __init__(self, selection_bitsize: int, target_bitsize: int, control_bitsize: int = 1):\n", - " self._selection_bitsize = selection_bitsize\n", - " self._target_bitsize = target_bitsize\n", - " self._control_bitsize = control_bitsize\n", - "\n", - " @cached_property\n", - " def signature(self) -> Signature:\n", - " return Signature(\n", - " [\n", - " *Signature.build(control=self._control_bitsize),\n", - " *Signature.build(selection=self._selection_bitsize),\n", - " *Signature.build(target=self._target_bitsize)\n", - " ]\n", - " )\n", - "\n", - " def decompose_from_registers(self, **qubit_regs: Sequence[cirq.Qid]) -> cirq.OP_TREE:\n", - " num_controls = self._control_bitsize + self._selection_bitsize\n", - " for target_bit in range(self._target_bitsize):\n", - " bit_pattern = QUInt(self._selection_bitsize).to_bits(target_bit)\n", - " control_values = [1]*self._control_bitsize + list(bit_pattern)\n", - " yield cirq.X.controlled(\n", - " num_controls=num_controls,\n", - " control_values=control_values\n", - " ).on(\n", - " *qubit_regs[\"control\"], \n", - " *qubit_regs[\"selection\"],\n", - " qubit_regs[\"target\"][-(target_bit+1)])\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1f7b6758", - "metadata": {}, - "outputs": [], - "source": [ - "import qualtran.cirq_interop.testing as cq_testing\n", - "tc_not = TotallyControlledNot(3, 5)\n", - "tc = cq_testing.GateHelper(tc_not)\n", - "cirq.Circuit((cirq.decompose_once(tc.operation)))\n", - "SVGCircuit(cirq.Circuit(cirq.decompose_once(tc.operation)))" - ] - }, - { - "cell_type": "markdown", - "id": "7b28663a", - "metadata": {}, - "source": [ - "## Tests for Correctness\n", - "\n", - "We can use a full statevector simulation to compare the desired statevector to the one generated by the unary iteration circuit for each basis state." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "574c5058", - "metadata": {}, - "outputs": [], - "source": [ - "selection_bitsize = 3\n", - "target_bitsize = 5\n", - "for n in range(target_bitsize):\n", - " # Initial qubit values\n", - " qubit_vals = {q: 0 for q in tc.all_qubits}\n", - " # All controls 'on' to activate circuit\n", - " qubit_vals.update({c: 1 for c in tc.quregs['control']})\n", - " # Set selection according to `n`\n", - " qubit_vals.update(zip(tc.quregs['selection'], QUInt(selection_bitsize).to_bits(n)))\n", - "\n", - " initial_state = [qubit_vals[x] for x in tc.all_qubits]\n", - " final_state = [qubit_vals[x] for x in tc.all_qubits]\n", - " final_state[-(n+1)] = 1\n", - " cq_testing.assert_circuit_inp_out_cirqsim(\n", - " tc.circuit, tc.all_qubits, initial_state, final_state\n", - " )\n", - " print(f'n={n} checked!')" - ] - }, - { - "cell_type": "markdown", - "id": "d76fcf8f", - "metadata": {}, - "source": [ - "## Towards a segment tree \n", - "\n", - "Next let's see how we can reduce the circuit to the observe the tree structure.\n", - "First let's recall what we are trying to do with the controlled not. Given a\n", - "selection integer (say 3 = 011), we want to toggle the bit in the target\n", - "register to on if the qubit 1 and 2 are set to on in the selection register." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aca2666", - "metadata": {}, - "outputs": [], - "source": [ - "# The selection bits [1-3] are set according to binary representation of the number 3 (011)\n", - "initial_state = [1, 0, 1, 1, 0, 0, 0, 0, 0]\n", - "final_state = [1, 0, 1, 1, 0, 1, 0, 0, 0]\n", - "actual, should_be = cq_testing.get_circuit_inp_out_cirqsim(\n", - " tc.circuit, tc.all_qubits, initial_state, final_state\n", - " )\n", - "print(\"simulated: \", actual)\n", - "print(\"expected : \", should_be)\n" - ] - }, - { - "cell_type": "markdown", - "id": "4640eeed", - "metadata": {}, - "source": [ - "Now what is important to note is that we can remove many repeated controlled operations by using ancilla qubits to flag what part of the circuit we need to apply, this works because we know the bit pattern of nearby integers is very similar. \n", - "\n", - "A circuit demonstrating this for our example is given below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ef853ae7", - "metadata": {}, - "outputs": [], - "source": [ - "from qualtran.bloqs.mcmt import And\n", - "\n", - "selection_bitsize = 2\n", - "target_bitsize = 4\n", - "qubits = cirq.LineQubit(0).range(1 + selection_bitsize * 2 + target_bitsize)\n", - "circuit = cirq.Circuit()\n", - "circuit.append(\n", - " [\n", - " And(1, 0).on(qubits[0], qubits[1], qubits[2]),\n", - " And(1, 0).on(qubits[2], qubits[3], qubits[4]),\n", - " cirq.CX(qubits[4], qubits[8]),\n", - " cirq.CNOT(qubits[2], qubits[4]),\n", - " cirq.CX(qubits[4], qubits[7]),\n", - " And().adjoint().on(qubits[2], qubits[3], qubits[4]),\n", - " cirq.CNOT(qubits[0], qubits[2]),\n", - " And(1, 0).on(qubits[2], qubits[3], qubits[4]),\n", - " cirq.CX(qubits[4], qubits[6]),\n", - " cirq.CNOT(qubits[2], qubits[4]),\n", - " cirq.CX(qubits[4], qubits[5]),\n", - " And().adjoint().on(qubits[2], qubits[3], qubits[4]),\n", - " And().adjoint().on(qubits[0], qubits[1], qubits[2]),\n", - " ]\n", - ")\n", - "\n", - "SVGCircuit(circuit)" - ] - }, - { - "cell_type": "markdown", - "id": "b9d45d52", - "metadata": {}, - "source": [ - "Reading from left to right we first check the control is set to on and the selection qubit is off, if both these conditions are met then the ancilla qubit is now set to 1. The next control checks if the previous condition was met and likewise the second selection index is also off. At this point if both these conditions are met we must be indexing 0 as the first two qubits are set to off (00), otherwise we know that we want to apply X to qubit 1 so we perform a CNOT operation to flip the bit value in the second ancilla qubit, before returning back up the circuit. Now if the left half of the circuit was not applied (i.e. the first selection register was set to 1) then the CNOT between the control qubit and the first ancilla qubit causes the ancilla qubit to toggle on. This triggers the right side of the circuit, which now performs the previously described operations to figure out if the lowest bit is set. Combining these two then yields the expected controlled X operation. \n", - "\n", - "Below we check the circuit is giving the expected behaviour." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "83d1287d", - "metadata": {}, - "outputs": [], - "source": [ - "initial_state = [1, 0, 0, 0, 0, 0, 0, 0, 0]\n", - "target_indx = 3\n", - "sel_bits = QUInt(selection_bitsize).to_bits(target_indx)\n", - "sel_indices = [i for i in range(1, 2*selection_bitsize+1, 2)]\n", - "initial_state[sel_indices[0]] = sel_bits[0]\n", - "initial_state[sel_indices[1]] = sel_bits[1]\n", - "result = cirq.Simulator(dtype=np.complex128).simulate(\n", - " circuit, initial_state=initial_state\n", - ")\n", - "actual = result.dirac_notation(decimals=2)[1:-1]\n", - "print(\"simulated: {}, index set in string {}\".format(actual, len(qubits)-1-target_indx))" - ] - }, - { - "cell_type": "markdown", - "id": "a86e0d42", - "metadata": {}, - "source": [ - "Extending the above idea to larger ranges of integers is relatively straightforward. For example consider the next simplest case of $L=8 = 2^3$. The circuit above takes care of the last two bits and can be duplicated. For the extra bit we just need to add a additional `AND` operations, and a CNOT to switch between the original range `[0,3]` or the new range `[4,7]` depending on whether the new selection register is off or on respectively. This procedure can be repeated and we can begin to notice the recursive tree-like structure. \n", - "\n", - "This structure is just the segtree described previously for boolean logic and this gives is the basic idea of unary iteration, \n", - "which uses `L-1` `AND` operations. Below the `ApplyXToLthQubit` builds the controlled Not operation using the `UnaryIterationGate` as a base class which defines the `decompose_from_registers` method appropriately to recursively construct the unary iteration circuit.\n", - "\n", - "Note below a different ordering of ancilla and selection qubits is taken to what was used in the simpler `L=4` example." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9cba52b1", - "metadata": {}, - "outputs": [], - "source": [ - "from qualtran import QAny, Register, Register, BoundedQUInt\n", - "from qualtran.bloqs.multiplexers.unary_iteration_bloq import UnaryIterationGate\n", - "from functools import cached_property\n", - "\n", - "\n", - "\n", - "class ApplyXToLthQubit(UnaryIterationGate):\n", - " def __init__(self, selection_bitsize: int, target_bitsize: int, control_bitsize: int = 1):\n", - " self._selection_bitsize = selection_bitsize\n", - " self._target_bitsize = target_bitsize\n", - " self._control_bitsize = control_bitsize\n", - "\n", - " @cached_property\n", - " def control_registers(self) -> Tuple[Register, ...]:\n", - " return (Register('control', QAny(self._control_bitsize)),)\n", - "\n", - " @cached_property\n", - " def selection_registers(self) -> Tuple[Register, ...]:\n", - " return (Register('selection', BoundedQUInt(self._selection_bitsize, self._target_bitsize)),)\n", - "\n", - " @cached_property\n", - " def target_registers(self) -> Tuple[Register, ...]:\n", - " return (Register('target', QAny(self._target_bitsize)),)\n", - "\n", - " def nth_operation(\n", - " self, context, control: cirq.Qid, selection: int, target: Sequence[cirq.Qid]\n", - " ) -> cirq.OP_TREE:\n", - " return cirq.CNOT(control, target[-(selection + 1)])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a1e4bafa", - "metadata": {}, - "outputs": [], - "source": [ - "import qualtran.cirq_interop.testing as cq_testing\n", - "selection_bitsize = 3\n", - "target_bitsize = 5\n", - "\n", - "g = cq_testing.GateHelper(\n", - " ApplyXToLthQubit(selection_bitsize, target_bitsize))\n", - "SVGCircuit(cirq.Circuit(cirq.decompose_once(g.operation)))" - ] - }, - { - "cell_type": "markdown", - "id": "13773620", - "metadata": {}, - "source": [ - "## Tests for Correctness\n", - "\n", - "We can use a full statevector simulation to check again that the optimized circuit produces the expected result." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "32ae469b", - "metadata": {}, - "outputs": [], - "source": [ - "from qualtran import QUInt\n", - "\n", - "for n in range(target_bitsize):\n", - " # Initial qubit values\n", - " qubit_vals = {q: 0 for q in g.all_qubits}\n", - " # All controls 'on' to activate circuit\n", - " qubit_vals.update({c: 1 for c in g.quregs['control']})\n", - " # Set selection according to `n`\n", - " qubit_vals.update(zip(g.quregs['selection'], QUInt(selection_bitsize).to_bits(n)))\n", - "\n", - " initial_state = [qubit_vals[x] for x in g.all_qubits]\n", - " qubit_vals[g.quregs['target'][-(n + 1)]] = 1\n", - " final_state = [qubit_vals[x] for x in g.all_qubits]\n", - " cq_testing.assert_circuit_inp_out_cirqsim(\n", - " g.decomposed_circuit, g.all_qubits, initial_state, final_state\n", - " )\n", - " print(f'n={n} checked!')" - ] } ], "metadata": { From 37afa3078e88d78fa4e283c7d36e6206ae9f167a Mon Sep 17 00:00:00 2001 From: Matthew Hagan Date: Wed, 28 Aug 2024 15:24:08 -0400 Subject: [PATCH 13/13] to do T-gate counts you need to fix ZeroState and OneEffect --- .../bloqs/multiplexers/unary_iteration.ipynb | 298 ++++++++++++++++-- 1 file changed, 268 insertions(+), 30 deletions(-) diff --git a/qualtran/bloqs/multiplexers/unary_iteration.ipynb b/qualtran/bloqs/multiplexers/unary_iteration.ipynb index 26ca7d50b1..0e4d4cb4c7 100644 --- a/qualtran/bloqs/multiplexers/unary_iteration.ipynb +++ b/qualtran/bloqs/multiplexers/unary_iteration.ipynb @@ -306,6 +306,14 @@ "as it should. " ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "6c087600", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "id": "7543b9a3", @@ -317,7 +325,7 @@ "\n", "A [Segment Tree](https://en.wikipedia.org/wiki/Segment_tree) is a way of organizing a collection of intervals (of the real line) in a binary tree structure that allows us to ask which intervals a given number falls in. The intervals we will use are single number intervals $[i, i+1)$ ranging over the possible values we would like to query `ctrl` for. Before we jump in and build a unary iterator for quantum registers, to illustrate how the datastructure works we will build one for classical bits. We are going to build this in a class `SegmentTree` in two stages: first we will implement the computation stage and second the uncomputation stage. \n", "\n", - "To build the computation stage we will do so recursively. As we are navigating a binary tree structure, we need to store where our \"iterator\" is throughout the process. This will be done using a `state`, which is a list of `True` and `False`. This list gives the state of the walker by reading off the bits from left to right. If the walker starts at the root node of a tree and the first bit in state is a `False` it moves to the left subtree, if it is `True` it moves right. This process can be repeated recursively until we reach a leaf. Our goal is that given a `query` (an integer we want to select on) we can update our state to match the query while keeping track to see if `ctrl` is in the same state or not. " + "In order for us to be able to query a `ctrl` register we need to store where our \"iterator\" is in the binary tree. This will be done using a `state`, which is a list of `True` and `False`. Think of this list of `True` or `False` as giving the position of a walker on a binary tree. If the walker always starts out at the root node, then `state[0]` will tell us if the walker should traverse the left half (`state[0] == False`) or the right half (`state[0] == True`) of the tree. By repeating this process an $n$ bit state vector will give us the position of a depth $n$ tree. Now the key point is that we can store information about the `ctrl` register while performing this navigation so that by the time we reach the bottom of the tree we then know if the `ctrl` register is in the same state as the walker or if the two are different. This information we store in ancilla bits, or `anc` for short. The invariant that we want to store is that `anc[i] = (ctrl[i + 1] == state[i + 1]) and anc[i - 1]`, and in order to break the recursion we use the convention that `anc[-1] = ctrl[0] == state[0]`. " ] }, { @@ -474,7 +482,7 @@ } ], "source": [ - "ops = {0: \"zero\", 1: \"one\", 2: \"two\", 3: \"three\", 5: \"five\"}\n", + "ops = {0: \"Hit: zero\", 3: \"Hit: three\", 5: \"Hit: five\"}\n", "st = SegmentTree(3, ops)\n", "ctrl = int_to_bool_list(5, 3)\n", "st.select(5)\n", @@ -492,33 +500,24 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 2, "id": "d683c3b9", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "q_bools: [False, True, False]\n", - "calling ops[2]\n" + "ename": "NameError", + "evalue": "name 'ops' 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[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mUnaryIterator\u001b[39;00m(Bloq):\n\u001b[1;32m 2\u001b[0m ctrl_bitsize: \u001b[38;5;28mint\u001b[39m\n\u001b[1;32m 3\u001b[0m state \u001b[38;5;241m=\u001b[39m []\n", + "Cell \u001b[0;32mIn[2], line 5\u001b[0m, in \u001b[0;36mUnaryIterator\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m state \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 4\u001b[0m sys_bitsize: \u001b[38;5;28mint\u001b[39m\n\u001b[0;32m----> 5\u001b[0m \u001b[43mops\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;129m@property\u001b[39m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msignature\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Signature:\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Signature([Register(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mctrl\u001b[39m\u001b[38;5;124m'\u001b[39m, QAny(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mctrl_bitsize)), Register(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manc\u001b[39m\u001b[38;5;124m'\u001b[39m, QAny(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mctrl_bitsize \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m)), Register(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msys\u001b[39m\u001b[38;5;124m'\u001b[39m, QAny(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msys_bitsize))])\n", + "\u001b[0;31mNameError\u001b[0m: name 'ops' is not defined" ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABuYAAAKjCAYAAADh1bkOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACCcElEQVR4nOzde/zX8/0//tv7UOgsm9owPo5DEhnqg1ERKYdEc5yRHJo1w8fshLUZm2HGmggzIccQcijMaE6TUw7py4hqLKJ3kt7v9+8Pv97z1rle79erd12vl8v7otfz8Hjd36+X5+v5fD9ur8fjWVZbW1sbAAAAAAAAoEGVl7oAAAAAAAAAWB0I5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHK4Hq6upSl8ASeI8AAAAAWJXo74LSEMxBif3mN7/Jeuutl2effbbUpbAIf//739O+fftcdtllpS4FAAAAAFbYbbfdlnXXXTe33nprqUuB1Y5gDkrshRdeyPTp09O9e3fh3Ero73//e/bZZ5+8//77eemll0pdDgAAAACssNdffz0zZsxI//79hXNQZII5WAl07tw5m266qXBuJTM/lNthhx3yzW9+s9TlAAAAAEDBtG7dOocccohwDopMMAcrgdatW+f+++8Xzq1EvhjKjR49Os2aNSt1SQAAAABQMBUVFbn22muFc1BkgjlYSbRp00Y4t5L4cijXvHnzUpcEAAAAAAVXWVkpnIMiK6utra0tdRGwOrntttty9dVX1z3+5z//mW9+85sZO3ZskuTDDz/MXnvtlddffz1jx47NdtttV6pSV0uLCuU6d+6c999/Px07dizI82y99dY599xzU17u+xEAAAAALNkFF1yQRx55pCBtvf766/n3v/+d//znP0mSefPm5aijjspNN92UkSNH5qCDDirI8wALEsxBke2www55//3306lTp7plgwYNyp577ln3WDhXGosbKTdq1Khcc801BXme6dOn5x//+EfefvvtrL/++gVpEwAAAIBVW2VlZbbeeuv8z//8T0Ha69WrVwYOHFj3WDgHxSGYgyLbYYcd8q1vfStDhw5d7HbCueIq5vSV9913X/bee2/BHAAArIRmz56d119/PR999FE+++yztGjRIuuuu2423HDDUpcGwGqusrIyl112WY4//vgGew7hHDQ8c6jBSso954rHPeUAWB1VVVXlkksuSffu3dO+ffs0bdo07du3T/fu3XPJJZdk9uzZpS4RoGiqqqpy0003pV+/fllnnXWy7bbbZtddd023bt2y4447ZqONNsoWW2yRs88+Oy+++GJ8xxmAVZV7zkHDE8zBSkw41/CEcgCsju6+++5suummGTx4cMaNG5c5c+Zk/fXXz5w5czJu3LgMHjw4m2yySe6+++5SlwrQoD799NOcfvrpWWedddK/f//ccccdmTNnzkK3fe211/KrX/0q22yzTTp06JAnnniiyNUCQHEI56BhCeZgJSecazhCOQBWR8OGDct+++2X9957LwMGDMhzzz2XiRMn5rbbbsvLL7+c559/Pscdd1zee++97Lfffhk2bFipSwZoEJMnT87222+fCy+8MJ9++mmSz6fvWpzq6uokyauvvpquXbvm/PPPN3oOgFWScA4ajmAOGgHhXOEtbSi3++67p6ysLGVlZZkwYcJStX3NNdfU7fPDH/6wcEUDwAoaN25cTjrppDRv3jxjxozJFVdckY4dO+bCCy/Mdtttlz/84Q/ZZpttMmzYsIwZMybNmjXLSSedlAcffLDUpQMU1Ntvv52dd945r732WmpqapZ5/+rq6tTU1OTHP/5xfvGLXzRAhQCw9Bqq/0o4Bw1DMFdkF198caZNm7bYbTbaaKN6H6D//ve/s/XWWydJ5s6dmzPOOCObbrppttxyy3To0CHDhw9foI2HHnooZWVl+etf/1qw2k877bTceOONSZLbb789HTt2TKdOnbLVVlvlpz/9ad23BEePHp2BAwcW7Hn5nHCucJZ1pNxxxx2XqVOnpkOHDkmSt956K/vuu2+aNWuWddddN6effnq9b9b2798/U6dOTZcuXRr09wCAZTFv3rwMGjQo1dXVGTFiRHr06LHY7Xv06JEbbrgh1dXVOfnkk5c4igSgsZg7d2723XfffPjhhwX5bPvVr36Vm2++uQCVAcDya6j+K+EcFJ5grsgWF8zV1NQs9Jt6d9xxR/bbb78kydFHH53XX389zz33XF5++eWMHj06F1xwQYYOHVpvn+HDh6d79+4LDe2WxzvvvJN77rkn/fv3T/J5R82ECRPqfh544IGMGjUqSdK7d+8888wzmTRpUkGem/8Szq245Zm+slmzZmnfvn0qKytTXV2dfffdN3Pnzs3jjz+ev/zlL7nmmmvqfUt2rbXWSvv27dO0adOG/FUAYJmMHTs2r7zySvr06ZM+ffos1T69e/dOnz598sorr2TcuHENXCFAcVxxxRV54YUXCvaFg7KysvzgBz9Y5L3pAKAYGrL/SjgHhSWYa0Djx4/PLrvskm233TYdO3bMOeeck3fffTf9+/dPp06dMmHChJx99tk56KCD0rNnz3To0CFTp05doJ1Ro0blwAMPzKRJkzJq1KgMGzasLkzYaKON8vvf/z5Dhgyp2/7DDz/M3Xffneuuuy4TJ07M66+/Xrfu6KOPzvHHH5/u3btn8803T9++fTN37tzMmTMn7du3z9tvv1237U9+8pOcccYZSZKrrroqBx10UMrKypIkLVu2THn55//7zJkzJ59++mnduiQ55JBDcuWVVxbw1WQ+4dzyK8Q95e6///5MnDgx1113XTp16pR99tknQ4YMyWWXXZa5c+c2QNUAUBjzp6M88sgjl2m/I444IknywAMPFLwmgGKrra3NueeeW/A2p0+fnhtuuKGg7QLA8mqI/ivhHBROZakLWFXNmDEjBxxwQG655ZbsuuuuqampyYcffpirr746I0eOTKdOnZJ8HrqNHz8+zz77bNq1a7dAOx9//HFeeeWVfOtb38rNN9+czTbbLOuss069bbp06ZKpU6dm+vTpadeuXa6//vr07Nkz7du3zxFHHJGrrrqq3h8eEyZMyEMPPZQ11lgju+22W2699dYceuihOfbYYzN06NCce+65+fTTT3P11VfnH//4R5Lk4YcfzimnnFLveR9//PEcf/zxmTRpUk488cTsv//+9Wr60Y9+tNjXqKqqaple01XF8ty/4Mvmh3N77bVXunfvnrFjx2a77bYrQHWrrkKEcsnngfs222xT73jt2bNnTjzxxLz00kvL9D7Mnj17tT0OACi+N954I0my4YYbZr311su77767wDbnn39+zj///LrH3/jGN3LTTTfV7e+8BTR2kyZNWujn34oqLy/PmDFjcsghhxS8bQBYVoXsv/qi+eFc8vlUmCNHjsxBBx1UkJphdSKYayDjx4/PFltskV133TXJ5xfpbdu2Xei2vXr1WmgolyT33ntv9t5773qj0RZlrbXWSvL5NJa/+c1vkiTHHHNMevbsmSFDhqSioiJJcuCBB6ZZs2ZJkh133DGTJ09Okpx00knZcccdc9ZZZ+Xmm2/OjjvumA033DBJMmXKlAVq7Nq1a1544YW89957Oeigg/Loo49mt912S5K0b98+U6ZMWWy9LVq0WOLvtCpq0qRJdtpppxVu58vh3FNPPZVNNtmkABWuep5//vmChHJJMm3atAWOhfmPl3T/yC/bYostlrsOAFhey3Id8tZbb2XnnXdOktx6662+FQuwCNXV1bnpppvqvswAAA1hafqIk8L2X33Zl8O5e++9N3vuuecKtQmrG1NZrgQWF1DdfvvtOeCAA5Ik2223XSZNmpT//Oc/9bYZP358tt5667Rq1SoTJkzI888/n+OOOy4bbbRRevfunffffz/33ntv3fZrrrlm3b8rKirq5tVfb731sttuu2XkyJG57LLL8v3vf79uu2bNmi1yvvyvfvWr6dWrV72bXc+ZM6cuKKThtG7dOrvssks++OCDFT6prsqmTJmSWbNmZY899lihUA4AAAAAVneVlZXZe++9U11dnUmTJpW6HGh0jJhrIF27ds2kSZPy6KOP1pvKslWrVpk5c+ZStTF37tyMHz++7hsIm222Wfr06ZOBAwfmr3/9a5o1a5Y333wzZ5xxRn7/+98n+Xy03Kmnnprzzjuvrp2hQ4dm+PDh6d279xKfc/DgwTn44IPTokWL9OjRo255x44d8+qrr9aNAHzllVey+eabp7y8PB9//HHuvvvuHHXUUXXbv/zyy9l2220X+1yzZs1aqtdhVTP/NVxRtbW1+clPfpKLLrooF154Yf73f/+3IO2uinr16pWzzjorZ511Vpo2bZof//jHy91W+/bt8+STT9ZbNn369Lp1y+LVV1/Neuutt9y1AMCyePDBB3PAAQekd+/eufHGG+uWV1VV1X179vvf/36968gk+c53vpPRo0fnjjvuSPfu3YtaM0Ch/eMf/6j3t26hlJeX59vf/nbuuuuugrcNAPO1bt16qbYrZP/VwowYMSLf+9738r3vfS8nnHDCCrcHqxvBXANZe+21c/vtt+fUU0/Nxx9/nPLy8gwZMiQ/+MEPctxxx6VZs2a55pprFtvGuHHjsssuu6RJkyZ1y6699tr8/Oc/zzbbbJPy8vK88cYbGT16dHr27Jk5c+ZkxIgReeSRR+q1c8ghh+S0006r+/BdnJ133jmtW7fO8ccfX29odL9+/XLttddmwIABSZKRI0dm5MiRadKkSaqrq9OvX7+6dUkyZsyY9OvXb7HPtbqOXCovX/GBqvNDufPOOy8XXnjhAvf/Y0Fnn312kuTMM89MkuUO57p06ZJf//rX+fe//5111103SfLAAw+kVatW2WqrrZaprWbNmq22xwEAxbfvvvvmm9/8ZkaPHp2HH344++677wLbNG3atN656Z577sno0aPzzW9+M7169UplpT8fgMZt1113zZprrrnIGWGWV1lZWXr06OH6HoCVQiH7r75sxIgROeqoo/Ld7343V155ZUH6OmF14y/rBrTzzjvnscceW2D5FwOsTp06LbD+zTffTJKccMIJddNYzrfGGmvkt7/9bX7729+mpqYmP/7xj3PmmWdmxx13TNu2bTNjxowF2ltnnXVSVVWVJAuEgRdccEG9x++8807+85//5Oijj663fN99980555yTKVOmZP31168bfbQw77//fp555plcfvnlC13PihHKLb9ChHN77bVXttpqqxx55JH57W9/m2nTpuVnP/tZBg0alDXWWKOQ5QJAQVVWVubSSy9Nz549c+ihh+b2229f7Ai4sWPH5jvf+U4qKiryxz/+USgHrBKaNm2aY445Jpdffnmqq6sL1m55eXm9WWQAoJQaqv9KKAeF4chZif35z39e7Kiz8vLy/Pa3v82zzz6btm3brvDz/eIXv8hOO+2U8847Ly1btlzguS6//PK60HBxJk+enD//+c9p2rTpCtdEfUK5FXf22WfnrLPOyplnnrnAVF1Lo6KiIqNHj05FRUW6dOmSI444IkcddVR++ctfNkC1AFBY3bt3z2WXXZaqqqr07NkzJ510UiZOnFi3/thjj83EiRMzaNCg9OzZM1VVVbnssssaZNo3gFL56U9/mjXWWKPeLDErory8PIMHD876669fkPYAYEU1RP+VUA4Kx9deqfPLX/5ysR/OnTt3Xqp2dtppp0KVxBcI5QpnRUfObbjhhrnnnnsKXRYAFMXxxx+f9ddfP8cee2yGDh2aoUOH1q373//933z44YdJknbt2mX48OELnfISoDH7+te/npEjR2a//fZb4bYqKiqy00475de//nUBKgOAwilk/5VQDgrLEQSNgFCu8JZl5Nyf/vSntGjRIi+88MJStT1ixIi0aNEijz76aCFKBYCC23fffTN58uRcfPHF+fa3v123vEmTJunWrVv+8Ic/ZPLkyUI5YJXVu3fvXHPNNamsrExFRcVytVFWVpZvfetbufPOO80YA0DJNVT/lVAOCs+IOVjJCeUaztKMnBsxYkQ++eSTJMk3vvGNpWp3v/32qxs52qZNmxUvFAAaQPPmzTN48OAMGDAgLVq0SJK88cYbad68eYkrAyiOo446Kh07dkz//v3z2muvpbKyMvPmzVvifhUVFampqcnPfvaz/PznP0+TJk2KUC0ALFpD9V8J5aBhCOZgJSaUa3hLCufWW2+9ZW6zZcuWC9ynEQAAWPl06tQpzz33XO65557cdNNNueOOOzJnzpx6IV2TJk1SXV2dmpqabLXVVjn00EPTv3//bLbZZiWuHgA+1xD9V0I5aDiCOVhJCeWKZ0XvOQcAADRea665Zvr27Zu+ffvmk08+yZgxY/L000/n3HPPTZIMHjw4X//617Pvvvtm8803L3G1ANDwhHLQsARzUAKvvvpqrr322rrHe++9d9Zdd926x0K54ltSODdlypSMGzeuIM+1tHN9AwAAxbXWWmvlwAMPzF577VUXzJ199tmm+QVgpTF+/PistdZaBWlrp512yhZbbFFvmVAOGp5gDoqsS5cuufTSS/PQQw/VLdt///0zatSoJEK5UlpcOHfEEUfkkUceKdhzbbHFFll77bUL1h4AAAAAq7YuXbrkL3/5S/7yl78UpL0NN9wwb775Zt1joRwUhyMLiuySSy7J3Llz63769++fjz/+OIlQbmVw9tln56yzzsqZZ56Z8847r275xx9/nIEDB9a9bx988EHdug8++KDee7o0Py+99JJv3QIAAACw1B555JFl7oNaVB/WueeeW9cnmQjloJiMmIMiKysrS5MmTeoezz/JCeVWHosaOVdRUVH33n3xPWzSpEm9xwAAAABQaOXl5cscmC2qD6uioqJuuVAOikswByuBL4Zy5513nlBuJfDlcA4AAAAAVjVCOSg+wRysBB577LG6e859//vfL3E1zPfFcK5JkybZaaedSlsQAAAAABTIhx9+KJSDEhDMQYmVl5dn7ty5pS6DRZgfzp1zzjkuTgAAAABYJZSXl6empibf+973hHJQZGW1tbW1pS4CVmezZ8/O3//+9/Ts2TNJMmvWrDRv3rzEVfFlDz/8cHbeeeesueaaSZKqqqq0aNEiifcMgMbNOQ1gQT4bAVhVLOqcNm/evPztb3/L7rvvLpSDIjNiDkqsWbNm+d///d9Sl8ES7L777qUuAQAAAAAKorKyMt26dSt1GbBaEoUDAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjmAZfT888/nRz/6UanLAAAAACiJ//znP/n+97+f559/vtSlADQ6laUuAKCxufHGGzNs2LBUVFSkurq61OUAAAAAFM1//vOfdO/ePc8991xatWqVjh07lrokgEbFiDmA5dCmTZu0atUqFRUV+c9//lPqcgAAAAAa3PxQ7t13302bNm1KXQ5AoySYA1gObdu2zd/+9re0atUqvXv3Fs4BAAAAq7QvhnLjxo1L27ZtS10SQKMkmANYTh06dMjf/va3TJs2Ld27dxfOAQAAAKukL4dyHTp0KHVJAI2We8wBLMFHH32Ue++9t+7xxIkT6/7doUOHjBs3Lt26dUv37t0zduzYrLPOOqUoEwAAAKDgFhfKTZw4MSNHjqx7vM8++6RVq1alKBOg0RDMASzBKaeckquuuqresv79+9f9WzgHAAAArIoWF8p961vfysiRI3PHHXfULTvmmGMyfPjwUpQK0GiYyhJgCWbOnJkePXrk448/rvsZMWJEvW3mh3PvvvuuaS0BAACARm9J01eOGDGiXl9Jjx49MnPmzBJVC9B4COYAlkJlZWVatGhR91NRUbHANsI5AAAAYFWwNPeUq6ioqNdXUllpcjaApSGYAygg4RwAAADQmC1NKAfA8hPMARSYcA4AAABojIRyAA1PMAfQAIRzAAAAQGMilAMoDsEcQAMRzgEAAACNgVAOoHgEc43E008/nX322SdJMnPmzBx//PHZeOONs8UWW6Rz58654447Ftjn6quvTllZWR599NGC1XHwwQdn/PjxSZJLLrkkHTp0yDbbbJOOHTvmuuuuq9tu9OjRGThwYMGeFxor4RwAAACwMhPKwdK7+OKLM23atMVus9FGG2XChAl1j//9739n6623TpLMnTs3Z5xxRjbddNNsueWW6dChQ4YPH75AGw899FDKysry17/+tWC1n3baabnxxhuTJLfffns6duyYTp06ZauttspPf/rT1NbWJtG3XwyCuUbi9ttvzwEHHJDa2tr06tUrTZo0yWuvvZZXX301w4cPz4knnph77rmn3j7Dhw9P9+7dF3pgL48nn3wyM2bMSJcuXZIkW2+9dR577LG88MILufvuu/PDH/4wkydPTpL07t07zzzzTCZNmlSQ54bGTDgHAAAArIyEcrBsFhfM1dTUpKamZoHld9xxR/bbb78kydFHH53XX389zz33XF5++eWMHj06F1xwQYYOHVpvn0L37b/zzju555570r9//yRJjx49MmHChLqfBx54IKNGjUqib78YBHMN5PDDD88OO+yQjh07Zt999820adPy5ptvpk2bNjnrrLPSuXPnbLrppvXCtPHjx2eXXXbJtttum44dO9YbBXfnnXdm//33z9ixY/Ovf/0rF154YSorK5MknTp1ys9+9rMMGTKkbvtXX301b7zxRq699tqMGjUqH330Ud263XffPaeddlp23XXXbLLJJjnhhBOSJO+++27atWuX2bNn12172GGH1X0oXH755TnssMPq1nXv3j2tW7dOkmywwQZp37593n777br1hxxySK688sqCvJ7Q2AnnAAAAgJWJUA4W78v99eecc07efffd9O/fP506dcqECRNy9tln56CDDkrPnj3ToUOHTJ06dYF2Ro0alQMPPDCTJk3KqFGjMmzYsDRv3jzJ56Prfv/739fr2//www9z991357rrrsvEiRPz+uuv1607+uijc/zxx6d79+7ZfPPN07dv38ydOzdz5sxZoH/+Jz/5Sc4444wkyVVXXZWDDjooZWVlSZKWLVumvPzzeGjOnDn59NNP69Yl+vYbWmWpC1hVXXzxxfnqV7+aJDnvvPNy9tln58c//nFmzpxZdxCPGTMmgwcPTq9evTJjxowccMABueWWW7LrrrumpqYmH374YZJk0qRJadWqVdq3b59rr702nTt3TtOmTes9X5cuXXLqqafWPR4+fHiOPPLIfP3rX0+3bt1y44031ht+Onny5Dz00EP57LPPstVWW2X8+PHp0qVLevTokeuuuy4DBw7M9OnT8+CDD2bYsGFJkocffjinnHLKQn/fBx98MB988EG+9a1v1avpRz/60WJfp6qqqqV/UVdhX3wdvCYrn3nz5hWknfnhXLdu3dK9e/eMHTs266yzTkHaBgAAAFhaDRXKzZs3T9/WSka/46LND8cWZlH99VdffXVGjhyZTp06Jfk8dBs/fnyeffbZtGvXboF2Pv7447zyyiv51re+lZtvvjmbbbbZAv2BXbp0ydSpUzN9+vS0a9cu119/fXr27Jn27dvniCOOyFVXXZVzzz23bvsJEybkoYceyhprrJHddtstt956aw499NAce+yxGTp0aM4999x8+umnufrqq/OPf/wjycL79h9//PEcf/zxmTRpUk488cTsv//+9WpaUt8+y08w10Cuv/76/PWvf82cOXMyZ86cfOUrX0mSrLnmmunbt2+Sz//nnj/14/jx47PFFltk1113TZKUl5enbdu2Sf47jeWSrLXWWkk+PwFee+21eeSRR5IkxxxzTIYMGVIvmOvfv38qKytTWVmZTp06ZfLkyenSpUsGDx6c4447LgMHDswVV1yRQw89NC1atEiSTJkyZaEfLi+88EK+973vZeTIkfU+zNq3b58pU6Ystub5bfNfC3uNKb2ePXsWpJ0OHTrk8ssvT9++fXPTTTflxBNPLEi7AAAAAEvrpptuynPPPZfbbrutYKFcbW1t7rjjDv19KzH9jvXNv6fawiyuv/7LevXqtcjX9t57783ee+9dbzTaoszv3x8+fHh+85vfJPm8b79nz54ZMmRIKioqkiQHHnhgmjVrliTZcccd6zKGk046KTvuuGPOOuus3Hzzzdlxxx2z4YYbJll4337Xrl3zwgsv5L333stBBx2URx99NLvttluSpevbZ/mZyrIB/P3vf88ll1ySe+65Jy+++GIuvPDCzJkzJ0myxhpr1B2EFRUVqa6uXmJ7o0aNqgvmtt9++zzzzDP57LPP6m0zfvz4dO3aNcnnN2f88MMP07Nnz2y00UYZNGhQ/vnPf+bFF1+s237NNdes+3dFRUXdiKAdd9wxzZo1y0MPPZRhw4Zl0KBBdds1a9as7veYb+LEiendu3euuuqq7LLLLvXWzZkzp+7DBPjca6+9lkGDBmXLLbesC+kBAAAAiqlv377ZcsstM2jQoLz22mulLgcatcWF0V8cdLPddttl0qRJC9ziZvz48dl6663TqlWrTJgwIc8//3yOO+64bLTRRundu3fef//93HvvvXXbL6pvf7311stuu+2WkSNH5rLLLsv3v//9uu0W1rc/31e/+tX06tUrN998c90yffsNy4i5BvDBBx+kZcuWWWeddTJ37txcfvnlS9yna9eumTRpUh599NF6Q2M//fTTzJo1K5tttlmSpFu3btlggw1yyimn5OKLL05lZWUmTJiQiy66KLfcckuSzxP1iy++uO7ecUlyxhlnZPjw4bnooouWWMvgwYNz1FFHZauttsrmm29et7xjx4559dVXs8EGGyRJXn755fTq1SvDhg3LnnvuuUA7L7/8crbddtvFPtesWbOWWM/qoKqqqu4bC9OnT1/sMGqK7/DDD8+nn366wu289tpr2X333dOmTZs89NBDvqUEAAAAlES7du3y0EMPZY899sjuu++ehx9+uF4/4PIoKyvL/vvvnxEjRhSoSgpBv+PyWVR/fatWrTJz5sylamPu3LkZP358rr322iTJZpttlj59+mTgwIH561//mmbNmuXNN9/MGWeckd///vdJPu/bP/XUU3PeeefVtTN06NAMHz48vXv3XuJzDh48OAcffHBatGiRHj161C2f37c/fwTgK6+8ks033zzl5eX5+OOPc/fdd+eoo46q235p+vZZfoK5BrD33nvnuuuuyxZbbJF11lknPXr0yDvvvLPYfdZee+3cfvvtOfXUU/Pxxx+nvLw8Q4YMyTvvvJP99tuvbrvy8vLce++9Of300+tOllOnTs0TTzyRjh075t13383YsWNzzTXX1Gv/8MMPT/fu3XP++ecvsf5+/frlxBNPrJeoz19+33331R3QP/jBDzJz5sycccYZdTeRPP/88+um/BszZkz69eu32OdyIlhQ8+bNvS4rmcrKyhUO5oRyAAAAwMqkIcK5yspK/VorMf2OS29R/fU/+MEPctxxx6VZs2YL9MF/2bhx47LLLrukSZMmdcuuvfba/PznP88222yT8vLyvPHGGxk9enR69uyZOXPmZMSIEXW3qJrvkEMOyWmnnZbp06cvse6dd945rVu3zvHHH19v+sx+/frl2muvzYABA5IkI0eOzMiRI9OkSZNUV1enX79+deuSpevbZ/mV1S5uIlVKbu+9986vfvWr7LDDDgtdP2fOnAwYMCD//ve/c+edd9Ybxrq8nn766Rx22GF55ZVXUl7+39lOZ82ala5du2b8+PFL/AB///33061btzz99NNp2rTpCte0qquqqqob8jxr1iwnyJVMv379UlVVVW/I+LIQygGwMnMdArAgn43A6mT69OnZY4898uGHH65QOLfPPvukefPmdbN6sXJwTiudE044IT169FhkwFVTU5Mf//jHeeCBBzJ27NhF3sNuWbzzzjvZYYcd8tprr6Vly5b1nmvHHXfMqFGjsv766y+2DX37DU8wRz0DBgzI/fffnyuvvDJ77bXXAuvHjh2bdu3aLfGmsE888USqq6vr7nvH4jlBrtxWJJgTygGwsnMdArAgn43A6qYQ4ZxgbuXknLb6+MUvfpGrrroqv/71r/Pd7353gfXPPPNMPvnkk+yyyy6LbUfffsMTzMFKwAly5ba8wZxQDoDGwHUIwIJ8NgKroxUN5wRzKyfnNFj5lC95EwCWlVAOAAAAaEzm33OuTZs22X333fPaa6+VuiSAVZJgDqDAhHIAAABAYyScA2h4gjmAAhLKAQAAAI2ZcA6gYQnmAJZCbW1tampq6n4WdntOoRwAAACwKliacG5p+koAWJBgDmAJWrRokfvuuy8VFRV1P0cffXS9bYRyAAAAwKpkSeHc0UcfXa+v5L777kuLFi1KVC1A41FW66sMUHJVVVV1Fy6zZs1K8+bNS1wRX/TBBx/k9ttvr3t866235pVXXsnkyZOTCOUAaNxchwAsyGcjwH9Nnz49e+yxRz788MM8/PDD2XzzzZMkm2yySb75zW/moIMOqtv2wAMPzNprr12qUlkI5zRY+VSWugCAld3aa6+dY445pu7x66+/nldeeSWJUA4AAABYtc0fObfHHntk9913rxfObbvttvX6TABYMlNZAiyn1157Lbvssktat24tlAMAAABWWfPDudatW2eXXXZZ6D3nAFg6RswBLIcPPvggu+yyS2bMmJF//OMfQjkAAABgldauXbvcfffd2XzzzbPLLrtk3rx5pS4JoFESzAEshw8++CAVFRWprq4WygEAAACrhXbt2qW6ujozZsxIdXV1qcsBaJRMZQmwjA466KAcddRRLkABAACA1VJ1dXWOOuqoHHTQQaUuBaDRKautra0tdRGwuquqqkqLFi2SJLNmzUrz5s1LXBFL4j0DYFXhnAawIJ+NAAvn87Hx8Z7ByseIOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAACzUtGnTcvLJJ2fjjTfOGmuskQ022CB9+vTJ2LFjc/bZZ6esrGyRP+ecc069to4++ui8+eabC32eha277bbbsueee+arX/1qWrVqlS5duuS+++5bYs3PP/98dt1116y55prZYIMN8tvf/nZ5f30AKDjBHAAAAACwgDfffDOdO3fOuHHj8rvf/S4vvPBCxowZkz322CODBg3KaaedlqlTpy7wc/TRR6dNmzY57LDDMmPGjFx22WWpra2ta3fy5MkZMWLEYtclyd/+9rfsueeeueeee/LMM89kjz32SJ8+ffLss88usuaPPvooe+21VzbccMM888wz+d3vfpezzz47w4YNa7gXCgCWQWWpCwAAAAAAVj4nnXRSysrK8uSTT6Z58+Z1y7feeuscc8wxadGiRVq0aFFvnxEjRuSvf/1r7r777my22WaZPXt23nnnney9996prq7On//85zz22GM5//zzs+aaay5yXZJcfPHF9do+99xzc8cdd+Suu+7Kdtttt9CaR4wYkblz5+aqq65K06ZNs/XWW2fChAm58MILM3DgwMK+QACwHARzAAAAAEA9M2bMyJgxY/LrX/+6Xig3X5s2bRZY9swzz+S4447Leeedl549eyZJmjVrlnPPPTf33HNP9ttvv8ybNy/jxo1LkyZNkmSx676spqYmH3/8cdq2bbvIusePH5/ddtstTZs2rVvWs2fPnH/++fnggw+y9tprL8vLAAAFZypLAAAAAKCe119/PbW1tfnmN7+5VNv/+9//zoEHHpiDDjoop512Wt3yOXPm5Be/+EX+8Ic/ZPfdd8/OO++cHj165Mknn1zsuoW54IILMmvWrBxyyCGLrGPatGlp165dvWXzH0+bNm2pfhcAaEiCOQAAAACgni/e921JPvvss/Tr1y/t2rXLFVdcUW/d7Nmz065du4wZMybrr79+TjjhhFx11VV57bXXFrvuy66//vqcc845uemmm7Luuuuu8O8HAKViKksAAAAAoJ7NNtssZWVleeWVV5a47Q9+8INMmjQpTz31VNZcc81669q2bZtBgwbVW7bJJptkk002SZLFrpvvxhtvzIABA3LzzTenR48ei62lffv2mT59er1l8x+3b99+ib8LADQ0I+YAAAAAgHratm2bnj175rLLLktVVdUC6z/88MMkybBhw3LVVVfl1ltvzfrrr7/YNq+55ppstNFGy7TuhhtuyPe+973ccMMN2XfffZdYd5cuXfK3v/0tn332Wd2yBx54IFtssYX7ywGwUhDMAQAAAAALuOyyy1JdXZ0dd9wxt956ayZNmpSXX345l1xySbp06ZLHHnssJ598cn7xi19k4403zrRp0+r9zJw5c4We//rrr89RRx2V3//+99lpp50W2u6ll16a7t271z0+7LDD0rRp0xx77LF56aWXMnLkyPzhD3/Ij370oxWqBQAKRTAHAAAAACxg4403zj//+c/sscceOfXUU9OhQ4fsueeeGTt2bIYOHZorr7wyc+fOzc9+9rN87WtfW+Bn8ODBK/T8w4YNy7x58zJo0KBFtvv+++9n8uTJdY9bt26d+++/P2+88UY6d+6cU089Nb/4xS8ycODAFaoFAAqlrHZZ7uQKNIiqqqq0aNEiSTJr1qw0b968xBWxJN4zAFYVzmkAC/LZCLBwPh8bH+8ZrHyMmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAogspSFwAAAAAArB5qa2vz7LPP5pFHHsnMmTMze/bsNGvWLK1bt863v/3tbLfddikrKyt1mQDQYARzAAAAAECDeuaZZ3LzzTfnhhtuyFtvvZXy8vJUVFTUra+urk5NTU2+8Y1v5NBDD83BBx+czp07l7BiAGgYprIEAAAAABrEBx98kO985zvZYYcdcsEFF+Stt95KktTU1OSzzz6r+6mpqUmSvPXWW7nggguyww475NBDD80HH3xQyvIBoOAEcwAAAABAwb300kvZZpttcssttyT5fFTc0pi/3c0335xtttkmL730UoPVCADFJpgDAAAAAArqnXfeyR577JFp06YtdSD3ZdXV1Zk2bVq6deuWd955p8AVAkBpCOYagaeffjr77LNPkmTmzJk5/vjjs/HGG2eLLbZI586dc8cddyywz9VXX52ysrI8+uijBavj4IMPzvjx45Mkd999dzp37pw11lgjP/zhD+ttd+mll+bcc88t2PMCAAAA0HjU1tamX79++eCDD5Y7lJuvuro6M2bMSL9+/VJbW1ugCgGKR/8+XyaYawRuv/32HHDAAamtrU2vXr3SpEmTvPbaa3n11VczfPjwnHjiibnnnnvq7TN8+PB07949w4cPL0gNTz75ZGbMmJEuXbokSTbbbLNcddVVOf300xfYduDAgRk+fHhmzpxZkOcGAAAAoPG444478o9//CPz5s0rSHvz5s3LP/7xj9x5550FaQ+gmPTv82WCuQbyySefpH///tlqq62y7bbbZq+99krv3r1z/fXX121z//33Z6eddkqSXHnlldlqq63SqVOnbLPNNnniiSfqtrvzzjuz//77Z+zYsfnXv/6VCy+8MJWVlUmSTp065Wc/+1mGDBlSt/2rr76aN954I9dee21GjRqVjz76qG7d7rvvntNOOy277rprNtlkk5xwwglJknfffTft2rXL7Nmz67Y97LDDMnTo0CTJ5ZdfnsMOO6xu3eabb55tt922ro4vatq0afbaa696vysAAAAAq4ehQ4emvLyw3Y7l5eX505/+VNA2ARZF/77+/Ya04KtOQYwZMyYffvhhJk6cmCSZMWNGnnnmmZx11ll1B8Bll12W73//+0mSU089Na+88kq+9rWv5bPPPsunn36aJJk0aVJatWqV9u3b59prr03nzp3TtGnTes/VpUuXnHrqqXWPhw8fniOPPDJf//rX061bt9x4440ZOHBg3frJkyfnoYceymeffZatttoq48ePT5cuXdKjR49cd911GThwYKZPn54HH3www4YNS5I8/PDDOeWUU5b69+/SpUvuvPPOnHjiiYvcpqqqaqnbW9V98bXwujQO3jMAVhXOaQAL8tkIy2/evHl59NFHU1NTU9B2a2pq8uijj2bmzJkL7UimOHw+Nj7es0Vr3rz5Itfp319y/z7Lz1msgWy77bZ5+eWXc9JJJ+Xb3/52evXqlT333DM//OEP8+yzz6Zt27Z58sknc9NNNyVJunfvniOPPDJ9+vTJPvvsk8033zzJf4e5Lslaa62V5POLn2uvvTaPPPJIkuSYY47JkCFD6h24/fv3T2VlZSorK9OpU6dMnjw5Xbp0yeDBg3Pcccdl4MCBueKKK3LooYemRYsWSZIpU6akXbt2S/37t2/fPlOmTFnsNvPbpr5leZ1ZOXjPAFhVOKcBLMhnI6w8Pvnkk7Rp06bUZfD/8/nY+HjP6lvcfSv17y+5f5/lZyrLBrLxxhtn4sSJ2XvvvfPYY4+lQ4cO+eCDD/KDH/wgf/zjH/PnP/85xxxzTNZYY40kya233przzjsvn332WXr16pUbb7wxSTJq1Ki6A3f77bfPM888k88++6zec40fPz5du3ZNkowePToffvhhevbsmY022iiDBg3KP//5z7z44ot126+55pp1/66oqKib73vHHXdMs2bN8tBDD2XYsGEZNGhQ3XbNmjXLnDlzlvr3nzNnTt2HCQAAAAAANBb69/XvNyQj5hrIlClTsvbaa2e//fbL3nvvnVGjRuXtt9/OkUcemV/+8peprq7OU089leTzFPzNN9/MDjvskB122CHvv/9+nnzyyXz729/OrFmzstlmmyVJunXrlg022CCnnHJKLr744lRWVmbChAm56KKLcssttyT5fJjrxRdfXDe3bJKcccYZGT58eC666KIl1j148OAcddRR2WqrrepS/STp2LFjXn311WywwQZL9fu//PLL2XbbbRe7zaxZs5aqrdVBVVVV3TcWpk+fvthh1KwcvGcArCqc0wAW5LMRll9tbW023HDDzJgxo+Btr7POOnnzzTdTVlZW8LZZOj4fGx/v2fLRv7/k/n2Wn2Cugbzwwgs588wzU1tbm3nz5uXII49Mx44dkyR9+/bNu+++W3cQVFdX55hjjsmMGTNSWVmZr371q7n66qtzxx13ZL/99qtrs7y8PPfee29OP/30uoNq6tSpeeKJJ9KxY8e8++67GTt2bK655pp6tRx++OHp3r17zj///CXW3a9fv5x44ol1c+N+cfl9992XHj16JEnGjh2b7373u/noo49SW1ubW265JX/605/q6h0zZky9G1YujJPAwjVv3txr08h4zwBYVTinASzIZyMsu549e+bmm2+uG8VRCJWVlenZs6dbo6xEfD42Pt6zpad/f8n9+yy/strFTaRKwVVXV6dz58754x//mF133XWx2+6999751a9+lR122GGh6+fMmZMBAwbk3//+d+688856Q1iX19NPP53DDjssr7zySsrL/zvT6axZs9K1a9eMHz9+iR/eEydOzPHHH59HH310hetZXVRVVdVdWM6aNcsJshHwngGwqnBOA1iQz0ZYMc8++2y23377Bmm3U6dOBW+XpefzsfHxnhWW/n0KwT3miujOO+/MJptski5duizxoE0+T6UXddAmn88le9111+X+++8vyEE7YMCA9O3bN5deemm9gzZJWrRokYsuuihvvPHGEtt5++23c/nll69wPQAAAAA0Ptttt12OOeaYBfqXlld5eXmOPfZYoRxQUvr3KRQj5mAl4JsrjY/3DIBVhXMawIJ8NsKKmzNnTnbfffc8/fTTqa6uXu52KioqssMOO+SRRx7JGmusUcAKWR4+Hxsf7xmsfIyYAwAAAAAKas0118z999+fvffee4Xa2XvvvXP//fcL5QBYZQjmAAAAAICCa9WqVe66664MHTq0bsROZWXlYveZv75ly5YZOnRo7rrrrrRq1arBawWAYhHMAQAAAAANoqysLCeccEL+85//5O67784RRxyRli1bLnTbli1b5ogjjsjdd9+d999/PyeccELKysqKXDEANKzFf0UFAAAAAGAFNW3aNL169UqvXr1y+eWX58UXX8y0adOy7777Jkn+/ve/51vf+laaNm1a4koBoGEJ5gAAAACAomnatGm23377VFVV1S3r1KmTUA6A1YKpLAEAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzAEAAAAAAEARCOYAAAAAAACgCARzAAAAAAAAUASCOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHACrtOrq6nTt2jV9+/att3zmzJnZYIMN8tOf/rRElQHAsnFOAwAAaPwEcwCs0ioqKnLNNddkzJgxGTFiRN3yk08+OW3bts1ZZ51VwuoAYOk5pwEAADR+laUuAAAa2uabb57zzjsvJ598crp165Ynn3wyN954Y5566qk0bdq01OUBwFJzTgMAAGjcBHMArBZOPvnk3H777TnyyCPzwgsv5Be/+EW23XbbUpcFAMvMOQ0AAKDxEswBsFooKyvL0KFDs+WWW2abbbbJj3/841KXBADLxTkNAACg8XKPOQBWG1dddVWaNWuWN954I1OmTCl1OQCw3JzTAAAAGifBHACrhccffzwXXXRRRo8enR133DHHHntsamtrS10WACwz5zQAAIDGSzAHwCpv9uzZOfroo3PiiSdmjz32yPDhw/Pkk0/mz3/+c6lLA4Bl4pwGAADQuAnmAFjlnXnmmamtrc15552XJNloo41ywQUX5P/+7//y5ptvlrY4AFgGzmkAAACNm2AOgFXaI488kssuuyxXX311mjVrVrf8+OOPT9euXU3/BUCj4ZwGAADQ+FWWugAAaEjf/va3M2/evIWuu++++4pcDQAsP+c0AACAxs+IOQAAAAAAACgCwRwAAAAAAAAUgWAOAAAAAAAAikAwBwAAAAAAAEUgmAMAAAAAAIAiEMwBAAAAAABAEQjmAAAAAAAAoAgEcwAAAAAAAFAEgjkAAAAAAAAoAsEcAAAAAAAAFIFgDgAAAAAAAIpAMAcAAAAAAABFIJgDAAAAAACAIhDMAQAAAAAAQBEI5gAAAAAAAKAIBHMAAAAAAABQBII5AAAAAAAAKALBHAAAAAAAABSBYA4AAAAAAACKQDAHAAAAAAAARSCYAwAAAAAAgCIQzEGRjR07NptttlnGjBlT6lIAAAAAYIX95S9/yRZbbJHnn3++1KWwGDvssEMuvfTSUpcBqz3BHBTR2LFj07t377z++usuVAAAAABYJTzxxBN57bXX0q1bN31eK6mKioq88sorefzxx0tdCqz2BHNQJPNDuT322COtWrUqdTkAAAAAUDCbbrppNtxwQ+HcSub1119PRUVFNt5443Ts2LHU5QARzEFRfDGUu+2221JZWVnqkgAAAACgYFq1apUHHnhAOLcSmTRpUvbZZ59svPHG+dvf/pavfOUrpS4JiGAOGtyXQ7k111yz1CUBAAAAQMG1bdtWOLeSmDRpUnbfffe0adMmf/vb39K+fftSlwT8/wzbgQa0uFDupptuyssvv5wkmTdvXt3yE044YZlH1H3729/O0UcfXZCaAQAAAFi11dbW5ve//31eeumlZdpvUX1Y48ePT/PmzZP8N5zbc889061bt4wbN84UikU2P5Rr3bp1xo0bVy+U+8c//pHvfe97dY+PPPLIdOvWrRRlwmqrrLa2trbURcCqaHGh3G9+85uMHj263vbzL2yWNZSbNm1a/vWvf9W7MKLhVVVVpUWLFkmSWbNm1V18AkBj45wGsCCfjVAcjrXSmTJlSjbYYINsueWWWXvttZdp30X1YR133HH1vjg+Y8aM7LnnnvnXv/4lnCuixYVyt9xySy666KK6x5MnT87666+fp59+uhSlwmpLMAcNoJjTV15++eUZNGiQYK7I/PEAwKqgqqoqb731VrbaaqskyauvvpqNNtooTZs2LXFlAKXleh+Kw7FWOvODuTFjxqRnz54N9jzCueJaXCi3MCeeeGKeeuopwRwUmXvMQYG5pxysXKqqqnLJJZeke/fuad++fZo2bZr27dune/fuueSSSzJ79uxSlwhQVDNmzMhVV12Vnj17pnXr1nWhXJJsscUWWWeddfLd7343o0ePzqefflrCSvky5zQAoLFxz7niWdZQDigdwRwUkFAOVi533313Nt100wwePDjjxo3LnDlzsv7662fOnDkZN25cBg8enE022SR33313qUsFaHDvvvtuDjzwwKy77ro59thjM3bs2FRXVy+w3axZs3L99denT58++cpXvpL/+7//y5w5c0pQMV/knAYANFbCuYYnlIPGRTAHBSKUg5XLsGHDst9+++W9997LgAED8txzz2XixIm57bbb8vLLL+f555/Pcccdl/feey/77bdfhg0bVuqSARrM6NGjs9VWW2X06NF1YdzCQrn55k+RPWvWrPz+97/P9ttvn9dee60otbIg5zQAoLETzjUcoRw0PoI5KIClDeV23333lJWVpaysLBMmTFiqtq+55pq6fX74wx8WrmhYhY0bNy4nnXRSmjdvnjFjxuSKK65Ix44dc+GFF2a77bbLH/7wh2yzzTYZNmxYxowZk2bNmuWkk07Kgw8+WOrSAQrulltuyX777ZePPvpoue5JW1NTk9deey077bRTJk2a1AAVsjjOaQBAsTVU/5VwrvCEctA4CeZgBS3rSLnjjjsuU6dOTYcOHZIkb731Vvbdd980a9Ys6667bk4//fR6nWb9+/fP1KlT06VLlwb9PWBVMW/evAwaNCjV1dUZMWJEevTosdjte/TokRtuuCHV1dU5+eSTl6vTGmBlNWHChBxxxBFJktra2uVup7q6OrNmzco+++yTjz/+uFDlsQTOaQBAqTRU/5VwrnCEco3L008/nX322SdJMnPmzBx//PHZeOONs8UWW6Rz58654447Ftjn6quvTllZWR599NGC1XHwwQdn/PjxSZJLLrkkHTp0yDbbbJOOHTvmuuuuq9tu9OjRGThwYMGel/oEc7AClmf6ymbNmqV9+/aprKxMdXV19t1338ydOzePP/54/vKXv+Saa67JL37xi7rt11prrbRv3z5NmzZtyF8FVhljx47NK6+8kj59+qRPnz5LtU/v3r3Tp0+fvPLKKxk3blwDVwhQHLW1tXXhzIqEcvPNmzcvb7zxRi688MICVMfScE4DAEqlIfuvhHMrTijX+Nx+++054IADUltbm169eqVJkyZ57bXX8uqrr2b48OE58cQTc88999TbZ/jw4enevXuGDx9ekBqefPLJzJgxoy5A33rrrfPYY4/lhRdeyN13350f/vCHmTx5cpLP/6545plnzJrSQARzsJwKcU+5+++/PxMnTsx1112XTp06ZZ999smQIUNy2WWXZe7cuQ1QNaz65k/ddeSRRy7TfvNHlDzwwAMFrwmgFMaPH5+///3vi72X3LKqqanJb3/723zyyScFa5NFc04DAFYGDdF/JZxbfkK54jj88MOzww47pGPHjtl3330zbdq0vPnmm2nTpk3OOuusdO7cOZtuumm9MG38+PHZZZddsu2226Zjx471RsHdeeed2X///TN27Nj861//yoUXXpjKysokSadOnfKzn/0sQ4YMqdv+1VdfzRtvvJFrr702o0aNykcffVS3bvfdd89pp52WXXfdNZtssklOOOGEJMm7776bdu3aZfbs2XXbHnbYYRk6dGiS5PLLL89hhx1Wt6579+5p3bp1kmSDDTZI+/bt8/bbb9etP+SQQ3LllVcW5PWkvspSFwCNUSFCueTzD+ttttkm7dq1q1vWs2fPnHjiiXnppZey3XbbLXVbVVVVy1UDy+eLr7fXfuXyxhtvJEk23HDDrLfeenn33XcX2Ob888/P+eefX/f4G9/4Rm666aa6/b2nwKrgrrvuSkVFRUGDuSSZPXt2Hn744ey2224FbZcFOadB6bjeh+JwrJXOFzvul6SQ/VdfND+c23PPPdOtW7eMGzcuHTt2XK62VhcNEcrV1NSslsdf8+bNF7v+4osvzle/+tUkyXnnnZezzz47P/7xjzNz5sx07Ngx55xzTsaMGZPBgwenV69emTFjRg444IDccsst2XXXXVNTU5MPP/wwyefvW6tWrdK+fftce+216dy58wKjS7t06ZJTTz217vHw4cNz5JFH5utf/3q6deuWG2+8sd7UkpMnT85DDz2Uzz77LFtttVXGjx+fLl26pEePHrnuuusycODATJ8+PQ8++GCGDRuWJHn44YdzyimnLPT3ffDBB/PBBx/kW9/6Vr2afvSjHy39i8pSE8zBMnrssccKEsolybRp0+pd1CSpezxt2rSlbqempiYtWrRY7jpYMV9+D1k57LTTTku97VtvvZWdd945SXLrrbfm1ltvbaiyAFYJvXr1KnUJqxXnNCgt1/tQHI61lVeh+q8W5svh3OOPP57NN998hdpcVb399tsNMlLuxRdfXC37FZc03f/111+fv/71r5kzZ07mzJmTr3zlK0mSNddcM3379k3yeXA1f+rH8ePHZ4sttsiuu+6aJCkvL0/btm2T/HcayyVZa621knx+G4Frr702jzzySJLkmGOOyZAhQ+oFc/37909lZWUqKyvTqVOnTJ48OV26dMngwYNz3HHHZeDAgbniiity6KGH1r2/U6ZMWehn7QsvvJDvfe97GTlyZL3Asn379pkyZcoS62bZmcoSltFTTz2VOXPmZMCAASsUygEAAADA6q5t27Y5/PDD85///CcTJ04sdTkrrcmTJ+fdd99Nv379TF/ZwP7+97/nkksuyT333JMXX3wxF154YebMmZMkWWONNVJWVpYkSz1DyahRo+qCue233z7PPPNMPvvss3rbjB8/Pl27dk2SjB49Oh9++GF69uyZjTbaKIMGDco///nPvPjii3Xbf7FfuqKiIvPmzUuS7LjjjmnWrFkeeuihDBs2LIMGDarbrlmzZnW/x3wTJ05M7969c9VVV2WXXXapt27OnDl1YSGFZcQcLKOTTjopjzzySA499NDcdttt2XfffZe7rfbt2+fJJ5+st2z69Ol165ZWeXl5Zs6cudx1sOyqqqrqvmEyffr0JQ5/p3gefPDBHHDAAendu3duvPHGeut+8pOf5JJLLsmPfvSj/PKXv6y37jvf+U5Gjx6dO+64I927dy9myQAN4sQTT8wNN9xQ9wdaIc3/5iUNyzkNSsf1PhSHY6103nnnnWyxxRZLtW2h+q8W5Yorrsipp56aQYMGZf/991/h9lZV3/72t/PTn/40Q4YMSatWrXLaaacVpN0OHTrk0UcfLUhbq4oPPvggLVu2zDrrrJO5c+fm8ssvX+I+Xbt2zaRJk/Loo4/Wm8ry008/zaxZs7LZZpslSbp165YNNtggp5xySi6++OJUVlZmwoQJueiii3LLLbck+Xway4svvrju3nFJcsYZZ2T48OG56KKLlljL4MGDc9RRR2WrrbaqNwK1Y8eOefXVV7PBBhskSV5++eX06tUrw4YNy5577rlAOy+//HK23XbbJT4fy04wB8uoadOmGTlyZPr375++ffuuUDjXpUuX/PrXv86///3vrLvuukmSBx54IK1atcpWW221TG25eC2d5s2be/1XIvvuu2+++c1vZvTo0Xn44YfrHZ9NmjSp++8X37N77rkno0ePzje/+c306tWr7ua7AI1Z9+7d89e//rVB2t5zzz2d+4rAOQ1WDq73oTgca8XVrFmzpd62kP1XX3bFFVdk4MCBGTRoUP74xz/WjURiQWVlZRkyZEiS5PTTT0+SgoRz5eXljr0v2XvvvXPddddliy22yDrrrJMePXrknXfeWew+a6+9dm6//faceuqp+fjjj1NeXp4hQ4bknXfeyX777Ve3XXl5ee69996cfvrpdaHZ1KlT88QTT6Rjx4559913M3bs2FxzzTX12j/88MPTvXv3eveXXpR+/frlxBNPzPe///0Flt93333p0aNHkuQHP/hBZs6cmTPOOCNnnHFGks/vYd2zZ88kyZgxY9KvX78lPh/Lzl9psBwKFc7ttdde2WqrrXLkkUfmt7/9baZNm5af/exnGTRoUNZYY40GqBxWfZWVlbn00kvTs2fPHHroobn99tsXO1pg7Nix+c53vpOKior88Y9/1IEJrDL233//tGzZMh9//HHB2qysrEyXLl2y4YYbFqxNFs05DQBYGTRU/5VQbtk1VDhHfU2aNMnIkSPrLfv1r3+dJPnwww/rlrVo0aLevep23nnnPPbYY/X223vvvfOrX/2q3rI2bdrkiiuuSJK6WyaddtppufPOO/P1r389s2fPXqCmjh075r333kuSPPzww/XWzR9pN9+ECRPy1a9+dYH+6u9973vp2rVrzj777DRv3jwPPPDAol6CvP/++3nmmWeWarQgy8495mA5zQ/nevXqlb59++buu+9e5jYqKioyevToVFRUpEuXLjniiCNy1FFHLTAdEbBsunfvnssuuyxVVVXp2bNnTjrppLz00ksZNGhQHn300ZxwwgmZOHFiBg0alJ49e6aqqiqXXXZZ3TeGAFYFbdq0yU9+8pOCdnBUV1cv1Tc0KRznNACg1Bqi/0oot/zmh3M//elPc/rpp+eCCy4odUksxpgxY7LDDjsscv2aa66Z6667Lvfff3+9+8YtrwEDBqRv37659NJLU15eP/5p0aJFLrroorzxxhtLbGfy5Mn585//nKZNm65wTSzIVyhhBRRi5NyGG26Ye+65p4EqhNXX8ccfn/XXXz/HHntshg4dmqFDh6ZNmzZp27ZtZsyYUfcNp3bt2mX48OErdL9IgJXV6aefnoceeihjx45dqpuSL8m5556bLl26FKAyloVzGgBQaoXsvxLKrTgj51iUK6+8crHrl/Ye1DvttFMhymERjJiDFbSsI+f+9Kc/pUWLFnnhhReWqv0RI0akRYsWbsIKy2HffffN5MmTc/HFF6dbt25p2rRp3n777TRt2jTdunXLH/7wh0yePFkHJrDKqqioyE033ZSuXbsud4fH/P1+9KMf1d13gOJzTgMAiqmh+q+EcoVj5Bw0XmW1X5wEFVhuc+fOTf/+/XPPPfcscuTcO++8k08++SRJ8o1vfGOphgJ//PHHmT59epLPp6T6yle+Um/95ZdfnkGDBmXevHkF+C1YWlVVVWnRokWSZNasWW6SC8BK7bPPPsuvfvWrDBkyJOXl5Us1eq6srCxlZWVp2bJlrrzySjf9BlYrrvehOBxr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8enZs2c6deoknCshxxmsfHzdHBrAkqav/Mc//pH33nuvIM81evTo/OAHP8i8efMK0h5AqVx//fU58sgjc8ABB+QPf/hDNt1003oj42pqajJ9+vTcfvvt+d3vfpcPP/wwf/7zn0tYMQAsaPbs2enRo0fefvvtnHvuuenevXtatmyZsrKyum0+/fTTPPXUU7nwwgvTo0eP/P3vf89WW21VwqoBWN3MnDkzn376aW677bZ06tSpIG1+7Wtfq/fYyDmAhRPMQYEtzT3lWrRoUbALkXXXXbcg7QCUUm1tbX71q1+lT58+ufXWW+t1Xn7RJptskq5du+ZrX/taTjvttJx99tlp3759kauFxu+jjz7K6NGjM2rUqPzrX/+qW77nnntmm222Sb9+/bLHHnuYNhaWw+jRo/Pss8/m6aefTufOnRe53Te/+c3st99+2XrrrXPZZZflsssuK2KVAPC5r3/96w16exThHMCCzP8EBbQ0oRwAC/p//+//5eWXX86xxx67yFDui44++uiUlZXlnnvuKUJ1sGqora3N7bffnj59+uQrX/lKDj/88Nx222158skn67YZP358rrrqquy11175yle+kuOOOy7//Oc/S1g1ND533XVXtttuu8WGcvO1bt06Bx98cO66664iVAYApTE/nJswYUJ69eqVWbNmlbokgJISzEGBCOUAlt/06dOTfD4ibmm0bds2bdu2zbRp0xqyLFhlzJgxI/369Uvfvn1z77335rPPPkuSVFdXL7Dt/OmxZ86cmWuuuSbf+ta3MmTIkIVuCyxo+vTpS30+S5JNN93U+QyAVZ5wDuC/BHNQAEsbyu2+++4pKytLWVlZJkyYsFRtP/zww3X7HHDAAYUrGmAlUlNTkyTLNG1eZWVl3X7Aor311lvp3Llz7rjjjiQLD+MWZd68eampqclZZ52V/fbbL3Pnzm2oMmGVUVNT43wGQKPWUP1XwjmAzwnmYAUt60i54447LlOnTk2HDh2SJD/4wQ/SuXPnrLHGGgu92W7Xrl0zderUHHLIIQ1RPsBK7+ijj/bFBFhOs2bNSq9evTJlypQVGvFWW1ube++9NyeddFJqa2sLWCGsXpzTAGgsGqr/SjgHIJiDFbI801c2a9Ys7du3r/ct2mOOOSb9+/df6PZNmzZN+/bts9ZaaxWsbgBg9fDzn/88r7zySt30lCuitrY2w4cPz5133lmAygAAWJk1ZP+VcA5Y3QnmYDkV6p5yl1xySQYNGpSNN964wBUCAKuzKVOm5NJLLy3oveHKy8tz5plnGjUHALCaKXT/lXAOWJ0J5mA5FCqUAwBoKHfeeWdBQ7nk83tnvfzyy3nllVcK2i4AAKsf4Rywulr6O1IDSVbeUK6qqiplZWWlLmO1UVVVtdB/A8vnk08+Wa795s6d6xiERXj44YdTXl5e8HCurKwsY8eOzTe+8Y2CtguriuU95pzPVi6u96E4HGulM3v27FKXkOS/4VzPnj3Tq1ev3HPPPWnRokWpywJoUII5WEYXX3xxXn755Tz11FMrTSiXJO3bty91Cautdu3alboEWC199tlnGTJkSIYMGVLqUmC1Ultbm5NPPjknn3xyqUuBlVJ5eXkOOeSQZdqnpqZGJ+RKzPU+FIdjbfXVpUuXXH311enXr1+uu+66nHDCCaUuCaBBmcoSllH//v2z9tpr5/vf/35mzpxZ6nIAAAAAoNGaMmVKzjjjjGy44YbZZ599Sl0OQIMzYg6W0XbbbZcHH3wwPXr0SM+ePXPfffeldevWpS4r06ZN8y3bIqqqqqr7Nt/06dPTvHnzElcEjdvjjz+evfbaa5n2adKkSX7+85/njDPOaKCqoHG76KKLctZZZ6WmpqbgbT/yyCPp3LlzwduFVUHv3r2XeZ/y8nJf+lvJuN6H4nCslc5LL72UnXbaqdRlZMqUKdl9990zb968PPzww9lwww1LXRJAgxPMwXLYfvvtCxbOvf7665k1a1amTZuWTz75JBMmTEiSbLXVVmnatOlSt9O8eXMXsCXitYcVt9Zaay3Xfk2bNnX8wSIceOCB+fnPf17QNsvKyvKVr3wlXbt2TWWlPyVgYSoqKpZrP+ezlZfrfSgOx1pxNWvWbJm2L1T/1Rd9OZTbaKONlqsdgMbGX9OwnAoVzg0YMCCPPPJI3ePtttsuSfLGG2+4IAEAltvWW2+dfv36ZdSoUZk3b15B2qytrc0555wjlAMAWM0Uuv9KKAeszvxFDSugEOHcww8/3DDFAawirrnmmlKXAI3WhRdemIceeigffvhhqqurV6itioqKdOnSJQMGDChQdbD6cU4DoLEqZP+VUA5Y3ZWXugBo7OaHc6+99lp69uy5xHtD/OlPf0qLFi3ywgsvLFX7jz76aFq0aJERI0YUolwAYDWywQYb5K677krTpk2Xe3q95PNQbqONNsqoUaPSpEmTAlYIAMDKqKH6r4RyAEbMQUEs7ci5ESNG5JNPPkmSfOMb31iqtnfYYYe6ebtbtGhRsJoBViZlZWVJkpqamqXep6ampm4/YNG6dOmSJ554Iv369cvrr7++TMfZfL169co111yTtm3bNkCFsGopKytzPgOgUWuo/iuhHMDnBHNQIEsTzq233nrL3O5aa62VTTfdtFBlAqyU2rRpkySZOnVqttxyyyVu/8knn+SDDz6o2w9YvG222SYTJkzIr3/961x11VWZOnVqKisrF3nvufLy8tTU1KRjx4455ZRT8t3vfldwAEupTZs2mTp16lJvP3XqVOczAFYqDdF/JZQD+C9TWUIBLeu0lgB8bsstt8zXvva13HrrrUu1/V133ZXPPvssPXr0aODKYNWx1lpr5Ve/+lWmTJmS8ePHZ/Dgwdlwww2z5pprJvl8lE+zZs3SqVOnnHvuuXn99dfz3HPP5eijjxbKwTLo0aNHHn/88bz77rtL3La6ujq333678xkAqzShHEB9gjkoMOEcwLIrLy/PCSeckD/96U/51a9+lWnTpi10u6qqqtxwww0ZOHBg9thjj2yxxRZFrhQav/Ly8uy888654IIL8uabb+aTTz7JZ599lnnz5qWqqirPPvtszjjjjGyyySalLhUapb59+6Zt27bp1atXHn744VRXVy90u5deeimHH354Jk6cmOOOO67IVQJAcQjlABZUVltbW1vqImBV9M9//jM9evTI5ptvvsC0ln379s3DDz9cb/v5U0lVVi7bDLOffvppPv3003z00Udp1qzZCtfN0qmqqqqbM33WrFlp3rx5iSuCxq+2tjannXZaLrnkksybNy8tW7as95lYU1OTjz/+ODU1NenRo0duvfXWtGrVqoQVA8DCvfTSS+nTp0/eeOONNGnSJM2bN6838vTTTz/N7Nmz06pVq1x++eX5zne+U8JqWRjX+1AcjrXSee2117LFFlss8HfX0lhUH9ZRRx2Viy++uO6xUG7l4DiDlY9gDhrQosK5ioqKHHDAAdlpp52SJHPnzs3Pf/7zJMmQIUPStGnTZXqe7bbbLnvuuWdhi2exXNRAw/nPf/6T++67L1OnTq03yqCsrCxt2rRJt27djOQBYKVXU1OTJ598Mk8//XRmz55db13Tpk2z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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "from qualtran.bloqs.basic_gates.identity import Identity\n", - "\n", - "\n", "class UnaryIterator(Bloq):\n", " ctrl_bitsize: int\n", " state = []\n", @@ -569,7 +568,7 @@ " ctrl = bb.join(ctrls)\n", " anc = bb.join(ancs)\n", " return {'ctrl': ctrl, 'sys': sys, 'anc': anc}\n", - " \n", + "\n", "cbloq = UnaryIterator()\n", "cbloq.ctrl_bitsize = 3\n", "cbloq.sys_bitsize = 1\n", @@ -588,12 +587,12 @@ "id": "9d860b01", "metadata": {}, "source": [ - "Now we just have to translate the uncompute function and we are done" + "Now we just have to translate the uncompute function from classical to quantum" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "id": "314793b8", "metadata": {}, "outputs": [ @@ -638,7 +637,7 @@ " self.state.append(query[1])\n", " else:\n", " ctrl_ix = len(self.state)\n", - " g = XGate() if query[ctrl[ix]] == False else Identity()\n", + " g = XGate() if query[ctrl_ix] == False else Identity()\n", " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", " [ctrls[ctrl_ix], ancs[ctrl_ix - 2]], ancs[ctrl_ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[ctrl_ix], ancs[ctrl_ix - 2]], target=ancs[ctrl_ix - 1])\n", " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", @@ -721,6 +720,14 @@ "fig.set_figheight(7)" ] }, + { + "cell_type": "markdown", + "id": "266e8149", + "metadata": {}, + "source": [ + "And we can see that we have replicated almost exactly the hand-crafted circuit from the beginning! The only difference is that we have extra factors of $X^2$ gates floating around, but since $X^2 = I$ these would be cancelled if we ran a circuit optimizer. The cool thing about this implementation is that now we can replicate more complicated circuits, such as Fig. 7 in [Encoding Electronic Spectra in Quantum Circuits with Linear T Complexity](https://arxiv.org/pdf/1805.03662) just by changing the bit sizes and operations used. Create a code block below and see what you can make, or if you can eliminate the duplicated Pauil X gates." + ] + }, { "cell_type": "markdown", "id": "eac11000", @@ -730,18 +737,249 @@ "\n", "Now that we have a recursive implementation of a unary iteration cirquit we can further reduce the number of Toffoli gates used by introducing a trick for the `uncompute` step called measurement based uncomputation. The key idea is that instead of using a Toffoli to uncompute an ancilla we can change the bit information of the ancilla into a relative phase, then measure the ancilla and apply a correction phase to the state if needed. We will walk through mathematically how this works, then we will implement a bloq that can act as a measurement and classically controlled operations based on the measurement outcome.\n", "\n", - "To start with measurement based uncomputation, assume we have three qubits in the state $|a \\rangle |b\\rangle |0\\rangle$ and we apply a Toffoli gate to get $|a\\rangle |b\\rangle |a \\otimes b\\rangle$. Now to uncompute we apply a Hadamard gate to the third qubit. If $a \\otimes b$ is 0, then the Hadamard will put the third qubit in the state $|0\\rangle + |1\\rangle$ (up to normalization). If $a \\otimes b$ is 1, then we get $|0\\rangle - |1\\rangle$, so the third qubit is in the state $|0\\rangle + (-1)^{a \\otimes b} |1\\rangle$. After the Hadamard gate we then perform a measurement on the third qubit. If the measurement is 0 then we are good, however if the measurement is 1 then we have to correct for the phase of $(-1)^{a \\otimes b}$ that was introduced. This can be easily corrected by performing a CZ gate between $a$ and $b$, which takes 0 T gates to do. " + "To start with measurement based uncomputation, assume we have three qubits in the state $|a \\rangle |b\\rangle |0\\rangle$ and we apply a Toffoli gate to get $|a\\rangle |b\\rangle |a \\otimes b\\rangle$. Now to uncompute we apply a Hadamard gate to the third qubit. If $a \\otimes b$ is 0, then the Hadamard will put the third qubit in the state $|0\\rangle + |1\\rangle$ (up to normalization). If $a \\otimes b$ is 1, then we get $|0\\rangle - |1\\rangle$, so the third qubit is in the state $|0\\rangle + (-1)^{a \\otimes b} |1\\rangle$. After the Hadamard gate we then perform a measurement on the third qubit. If the measurement is 0 then we are good, however if the measurement is 1 then we have to correct for the phase of $(-1)^{a \\otimes b}$ that was introduced. This can be easily corrected by performing a CZ gate between $a$ and $b$, which takes 0 T gates to do.\n", + "\n", + "The rest of this notebook will walk through a mock-up of how to implement these ideas in Qualtran, starting with a a `Measure` bloq and followed by the classically controlled logic. We then will put this together in the unary iterator bloq we constructed earlier and see how many T-gates we can save. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c368cc72", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qualtran import CompositeBloq\n", + "from qualtran import Side\n", + "from qualtran._infra.bloq import DecomposeTypeError\n", + "from qualtran.bloqs.basic_gates.hadamard import Hadamard\n", + "from qualtran.bloqs.basic_gates.z_basis import CZ, OneEffect, ZeroEffect, ZeroState\n", + "\n", + "class MeasurementUncomputation(Bloq):\n", + " outcome: None | bool\n", + "\n", + " @property\n", + " def signature(self) -> Signature:\n", + " return Signature([Register('ctrl', QBit()), Register('q1', QBit()), Register('q2', QBit())])\n", + " \n", + " def build_composite_bloq(self, bb: BloqBuilder, ctrl: SoquetT, q1: SoquetT, q2: SoquetT) -> Dict[str, 'SoquetT']:\n", + " ctrl = bb.add(Hadamard(), q=ctrl)\n", + " bb.add(OneEffect(), q=ctrl)\n", + " q1, q2 = bb.add(CZ(), q1=q1, q2=q2)\n", + " ctrl = bb.add(ZeroState())\n", + " return {'ctrl': ctrl, 'q1' : q1, 'q2': q2}\n", + " \n", + "meas = MeasurementUncomputation() \n", + "msd = get_musical_score_data(meas.decompose_bloq())\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.set_figwidth(5)\n", + "fig.set_figheight(2)" ] }, { "cell_type": "markdown", - "id": "06807ef5", + "id": "11ab54b6", "metadata": {}, "source": [ - "We see in the above example that changing the lowest order bit in the query requires us to only change the last ancilla bit, which makes intuitive sense. \n", - "TODO: Should write something about how this actually encodes a Segment tree?\n", + "In an ideal world we would actually implement a measurement and use the outcome to determine if we perform the CZ gate, but since we are only interested in the worst-case Toffoli/T-gate analysis then always performing the CZ will suffice. Now we replace all the Toffoli's in the `uncompute` function for our `UnaryIterator` bloq below:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "28e68d3f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABrMAAAI7CAYAAABP3WAsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACDu0lEQVR4nOzdd5gV5fk/4GfZpSMqKqBYsRFURDEqGhSBgIogdmMkNqyIGGsSjSUmJiY2MDYUNHYTCyIqKC0aNWIBxAIqQUSkBSJKh935/eFv9+sK22D3nNnd+76uc13smXfOeXZ45z2z8znzTk6SJEkAAAAAAABACtXJdgEAAAAAAABQEmEWAAAAAAAAqSXMAgAAAAAAILWEWQAAAAAAAKSWMAsAAAAAAIDUEmYBAAAAAACQWsIsAAAAAAAAUkuYBQAAAAAAQGoJswAAAAAAAEgtYRYAAAAAAACpJcwCAAAAAAAgtYRZAAAAAAAApJYwCwAAAAAAgNQSZgEAAAAAAJBawiwAAAAAAABSS5gFAAAAAABAagmzAAAAAAAASC1hFgAAAAAAAKklzAIAAAAAACC1hFkAAAAAAACkljALAAAAAACA1BJmAQAAAAAAkFrCLAAAAAAAAFJLmAUAAAAAAEBqCbMAAAAAAABILWEWAAAAAAAAqSXMAgAAAAAAILWEWQAAAAAAAKSWMAsAAAAAAIDUEmYBAAAAAACQWsIsAAAAAAAAUkuYBQAAAAAAQGoJswAAAAAAAEgtYRYAAAAAAACpJcwCAAAAAAAgtYRZAAAAAAAApJYwCwAAAAAAgNQSZgEAAAAAAJBawiwAAAAAAABSS5gFAAAAAABAagmzAAAAAAAASC1hFgAAAAAAAKklzAIAAAAAACC1hFkAAAAAAACkljALAAAAAACA1BJmAQAAAAAAkFrCLAAAAAAAAFJLmAUAAAAAAEBqCbMAAAAAAABILWEWAAAAAAAAqSXMAgAAAAAAILWEWQAAAAAAAKSWMAsAAAAAAIDUEmYBUCHz5s2LAQMGROvWraN+/fqx3XbbRa9evWLs2LFx3XXXRU5OTomP66+/vthrnX766fH555+v931KWjZhwoTYd999o379+rHLLrvEgw8+WGbN77//fnTq1CkaNGgQ2223Xfz5z3/egN8carbK3LcBIC2yeez6zDPPxE9/+tPYaqutomnTptGxY8cYPXp0mTU7dqUmy+Y++a9//SsOPvjg2GKLLaJhw4bRpk2buO2228qs2T4JkA7CLADK7fPPP48OHTrEuHHj4i9/+UtMnTo1Ro0aFYcddlj0798/Lrvsspg7d+46j9NPPz0222yzOOWUU2Lx4sVx5513RpIkRa87Y8aMePTRR0tdFhExc+bM6NmzZxx22GExefLkuPjii6Nfv36lnhT45ptvonv37rHDDjvEu+++G3/5y1/iuuuuiyFDhlTdhoJqpjL2bQBIm2wfu7766qvx05/+NF588cV4991347DDDotevXrFpEmTSqzZsSs1Wbb3ycaNG8eFF14Yr776anz88cdx9dVXx9VXX13q/mWfBEiPnOT7IzwAlOLII4+M999/P6ZPnx6NGzcutuzrr7+OzTbbbJ11Hn300TjttNPihRdeiB49esTy5cvj97//fbz77ruRn58f++23X7z++utx0003Rfv27UtcdtBBB8WVV14ZL7zwQnzwwQdFr3/yySfH119/HaNGjVpvzXfffXdcddVVMW/evKhXr15ERPzqV7+K4cOHx7Rp0ypv40A1Vhn7NgCkTbaPXddnjz32iJNOOimuueaa9S537EpNlsZ98thjj43GjRvHww8/vN7l9kmAFEkAoBwWLVqU5OTkJDfeeGO513nnnXeShg0bJn/5y1/WWfbCCy8kubm5yaGHHpqsXr26XMs6deqUDBw4sFjbYcOGJU2bNi2xhr59+yZHH310sefGjRuXRESyePHicv8uUFNV9r4NAGmQhmPXH8rPz0+222675I477iixjWNXaqo07pPvvfde0qJFi+S+++4rsY19EiA9TDMIQLl89tlnkSRJtGnTplztFyxYEMccc0wcd9xxcdlllxU9v3Llyrjmmmti0KBB0blz5zjwwAOjW7duMXHixFKXRXw3v3qLFi2KvU+LFi3im2++iRUrVqy3jpLWKVwGtV1l7dsAkCZpOHb9oZtvvjmWLl0aJ554Yol1OHalpkrTPrnttttG/fr1Y7/99ov+/ftHv379SqzDPgmQHsIsAMolqcCstGvWrInjjz8+WrRoEffdd1+xZcuXL48WLVrEqFGjYtttt43zzjsvhg0bFp988kmpy4CqUVn7NgCkSdqOXR977LG4/vrr4+9//3s0b958o38/qG7StE++9tpr8c4778Q999wTt99+ezz++OOV8jsCULXysl0AANXDrrvuGjk5OeWaF/yiiy6KTz/9NN5+++1o0KBBsWXNmjWL/v37F3tu5513jp133jkiotRlLVu2jPnz5xdbPn/+/GjatGk0bNhwvbWUtE7hMqjtKmvfBoA0ScOxa6Ennngi+vXrF//4xz+iW7dupdbi2JWaKk375E477RQREXvttVfMnz8/rrvuuvjZz3623lrskwDp4cosAMqlWbNm0aNHj7jzzjtj2bJl6yz/+uuvIyJiyJAhMWzYsHj66adj2223LfU1H3zwwdhxxx3Lvaxjx44xduzYYs+98sor0bFjxxLfo2PHjvHqq6/GmjVriq2z++67x+abb15qfVAbVMW+DQDZloZj14iIxx9/PM4444x4/PHHo2fPnmXW7diVmiot++QPFRQUxKpVq0pcbp8ESA9hFgDlduedd0Z+fn7sv//+8fTTT8enn34aH3/8cQwePDg6duwYr7/+egwYMCCuueaaaN26dcybN6/YY8mSJRv1/uedd1785z//iSuuuCKmTZsWd911V/z973+PX/7yl0Vt/vrXv0bXrl2Lfj7llFOiXr16cdZZZ8WHH34YTz75ZAwaNCguueSSjaoFapJs79sAUBWy/fn22GOPxS9+8Yu45ZZb4oADDljv6zp2pTbJ9j555513xvPPPx+ffvppfPrppzF06NC4+eab49RTTy1qY58ESLEEACrgq6++Svr375/ssMMOSb169ZJWrVolvXv3TsaPH5+cfvrpSUSU+DjttNM2+v3Hjx+ftG/fPqlXr17SunXr5IEHHii2/Nprr0122GGHYs9NmTIl+clPfpLUr18/adWqVfKnP/1po+uAmibb+zYAVIVsfr4deuihZb6uY1dqm2zuk4MHD0722GOPpFGjRknTpk2TffbZJ7nrrruS/Pz8ojb2SYD0ykmSCtyBEQAAAAAAADLINIMAAAAAAACkljALAAAAAACA1BJmAQAAAAAAkFrCLAAAAAAAAFJLmAUAAAAAAEBqCbMAAAAAAABILWEWAAAAAAAAqSXMAgAAAAAAILWEWQAAAAAAAKSWMAsAAAAAAIDUEmYBAAAAAACQWsIsAAAAAAAAUkuYBQAAAAAAQGoJswAAAAAAAEgtYRYAAAAAAACpJcwCAAAAAAAgtYRZAAAAAAAApJYwCwAAAAAAgNQSZgEAAAAAAJBawiwAAAAAAABSS5gFAAAAAABAagmzAAAAAAAASC1hFgAAAAAAAKklzAIAAAAAACC1hFkAAAAAAACkljALAAAAAACA1BJmAQAAAAAAkFrCrBRZuHBhrFmzJttllGnu3LmRJEm2ywAAAAAAoJpZu3ZtLFiwINtllOnbb7+Nb7/9Nttl8P8Js1JiypQpse2228bJJ5+c6kBr/PjxsfPOO0ffvn2zXQoAAAAAANXMwQcfHO3atYuPPvoo26WUaMmSJfHTn/40WrVqFf/73/+yXQ4hzEqNpUuXxurVq+OZZ55JbaA1fvz46NmzZ6xYsSIWLVqU7XIAAAAAAKhmFi1aFPPnz48uXbqkMtBasmRJ9OjRI95666349ttvU3muvjYSZqXMn//853j++edTF2gVBlmdOnWKI444ItvlAAAAAABQTZ155pnRvHnz1AVahUHW9OnT49prr812OXyPMCtlevXqFU8//XSqAq3vB1nDhw+Phg0bZrskAAAAAACqqa222irGjh2bqkDr+0HWmDFjokOHDtkuie8RZqVQmgItQRYAAAAAAJUtTYGWICv98rJdQG01Y8aMOO6442Lp0qUREbFixYqIiMjNzY2I/wu0jjvuuDj55JPjiSeeiLp162a0xpKCrNzc3PjnP/8Zu+yyS6W8zzbbbBPDhw+PZs2aVcrrAQAAAABQOX54LntjzZo1q+g8eGGg1bVr1+jSpUuMGzcu2rZtWynvU14lBVmFNe6///6Rl/ddlLLNNtvEc889F5tvvnlGayQiJ0mSJNtF1EYPPPBAnHnmmXHFFVdETk5ORETsuuuucdZZZxVr9/zzz8dxxx0XvXr1ymigVdoVWf/5z39iyJAhlfI+ixYtivvvvz9effXV6NSpU6W8JlA9LV26NK677rqYMWNG7LzzznHddddFkyZNsl0W1Fr5+fnxl7/8JSZOnBhbbbVV/Pa3v41tt90222UBQGqMHj06/va3v0WSJHHqqadGz549s10S1GpTpkyJ2267LZYuXRqHH3549OvXL9slQY0xbNiwOOuss4qdy94Yubm5cemllxa7uGHhwoXRtWvXWLBgQUYDrdKuyMrPz49bb701Fi1aFBHfncu+7777MlIX6xJmZUlhmJWfnx916pQ+22OmA61MTi04ffr0aNOmjTALarmFCxfG4YcfHlOmTImCgoKoU6dO7L333jFq1KjYaqutsl0e1DorV66Mn//85/Hss89GRESdOnWiefPmMXbs2PjRj36U5eoAIPsefPDBYl9GTZIk7r333jj77LOzWBXUXhMmTIijjjoqVq5cGQUFBZEkSVx66aXx5z//uczzbkDZCsOs8pzL3hiZDrQqOrXg9OnTY/fdd6/SmiiZ0bwayOQ9tNwji8q2bNmyGDx4cHTt2jVatmwZ9erVi5YtW0bXrl1j8ODBsXz58myXSJYlSRK9evWKKVOmRH5+fiRJEvn5+fH+++9Hz549w3cuiDCWZNqFF14Yw4cPjyRJivbJBQsWxCGHHFJp00rwHX0b0sU+SXm88sorccYZZ0RBQUHRI0mSOOecc+KFF17IdnmkgLEks2bOnBndu3ePFStWFP1NGRFxyy23xM0335zl6moe/ZuqlMl7aLlHVjWUkBXDhg1LIiLJz88v9zojRoxI6tatmxx77LHJ6tWrK72mcePGJQ0bNky6d++eLF++vNJff32mTZuWRETy6quvZuT9yKyRI0cmLVu2TCIiiYhk0003TXbaaadk0003LXquZcuWyciRI7NdKln0/PPPF/WH9T2ee+65bJdIlhlLMuuTTz5JcnJy1rs/1qlTJ7nxxhuzXWKNoW9DutgnKY+CgoJk3333TXJzc9f5nMzNzU322GOPpKCgINtlkkXGksw7/fTTk7y8vPUevzZt2jRZsmRJtkusMfTv2mvo0KEVPpe9MRYsWJDstddeSYsWLZIPP/yw0l//66+/Tg444IBks802S955551yrzdt2rRKr4Xyc2VWNVKVV2iV54qszp07R05OTuTk5MTkyZPL9boPPvhg0ToXX3xxpdVL+g0ZMiR69+4dCxcujH79+sWUKVPio48+imeeeSY+/vjjeP/99+Pss8+OhQsXRu/evSvtPmxUP4MGDSq6oeYP5ebmxuDBgzNcEWliLMm8e+65p8RpIwoKCmLw4MGRn5+f4apqHn0b0sU+SXm9/fbb8d577633szA/Pz8+/PDDeP3117NQGWlgLMm8RYsWxaOPPhpr165d7/Jvv/02Hn/88QxXVTPp35SkKs4ZV+UVWq7IqsaynabVVhtyZVahyr5Cq7xXZB166KHJ2WefncydOzdZs2ZNkiRJMmvWrOTII49MGjZsmGy11VbJZZddVrQsSZJk+fLlydy5c5OOHTsmAwcOXOc1XZlVM40dOzbJzc1NNtlkk+SVV14pev7SSy9NIiK58sori5575ZVXkiZNmiS5ubnF2lI7LF68uMQrQL7/WLRoUbZLJQuMJdnx/W9alvR47bXXsl1mtaZvQ7rYJ6mISy+9tMQrQCIiycvLSy688MJsl0kWGEuy44EHHij1uDUnJyc55JBDsl1mtad/U9qVWVVxzrhQZV+htaFXZBVyZVZ2ZfzKrNtvvz3mzZtXapsdd9yxWIq7YMGC2GOPPSIiYvXq1XHllVfGLrvsEj/60Y9izz33jKFDh67zGuPHj4+cnJx4+OGHK632yy67LJ544omIiHjiiSeiffv2seeee8aee+4Zt9xyS1G7999/P4444ohKe98fqswrtCp6j6xGjRpFy5YtIy8vL/Lz86Nnz56xevXqeOONN+Jvf/tbPPjgg3HNNdcUtW/YsGHR/LnUDmvXro3+/ftHfn5+PProo9GtW7dS23fr1i0ef/zxyM/PjwEDBpT4bSpqpilTppTrnljl/WYPNYexJDsWLlxY5nFaTk5OTJo0KUMV1Tz6NqSLfZKKeuedd0r9f1+7dm288847GayINDCWZM97770XdevWLXF5kiQxadIk92LeCPo35VFV54wr8wqtbF6RJROpHKkKswpvnPpDzz33XPTu3TsiIk4//fT47LPPYsqUKfHxxx/HyJEj4+abb46777672DpDhw6Nrl27rvc/dUPMmTMnXnzxxTjppJMiImK77baLUaNGxQcffBCvv/563H333TFhwoSIiGjXrl3Ur18/xo0bVynvvT6VEWhVNMj6oZdffjk++uijeOSRR6J9+/ZxxBFHxA033BB33nlnrF69usL1UDOMHTs2pk2bFr169YpevXqVa52jjjoqevXqFdOmTavS/Yb0mTx5conTmRWqU6eOMKsWMpZkx5QpU8psk5uba5/cCPo2pIt9koooPClelilTpqz33AY1l7Eke959990yz4l9++238cUXX2SooppH/6aiKvuccWUEWtmeWlAmUjmqNMx688034yc/+Unsvffe0a5du7j++uvjq6++ipNOOinat28fkydPjuuuuy6OO+646NGjR+y5554xd+7cdV5n+PDhccwxx8Snn34aw4cPjyFDhkTjxo0j4rvE8pZbbokbbrihqP3XX38dL7zwQjzyyCPx0UcfxWeffVa07PTTT49zzz03unbtGrvttlsce+yxsXr16li5cmW0bNkyZs+eXdT2N7/5TVx55ZURETFs2LA47rjjIicnJyIiDj744GjZsmVERGy66abRpk2b+Pzzz4vW/dnPfhb33ntv5W3M9diYQGtjg6yI7/5/99prr2jRokXRcz169IhvvvkmPvzwwwq/HjXDmDFjIiKib9++FVrv1FNPjYiIV155pdJrIr0mTZpUrjDLVSC1j7EkOyZNmlTiPewKrV27NiZOnJihimoefRvSxT5JRcyePTu++eabMtutWLEiZsyYkYGKSAtjSXYUFBSU+0tW/qbccPo3FVUV54w3JtDKdJAlE6m6TCSvql548eLF0adPn3jqqaeiU6dOUVBQEF9//XU88MAD8eSTT0b79u0j4rv/lDfffDMmTZpUrIMX+vbbb2PatGnx4x//OP7xj3/ErrvuGltssUWxNh07doy5c+fG/Pnzo0WLFvHYY49Fjx49omXLlnHqqafGsGHD4sYbbyxqP3ny5Bg/fnzUr18/DjnkkHj66afjZz/7WZx11llx9913x4033hirVq2KBx54IP79739HRMSECRPil7/85Xp/148++ijefPPNuOeee4rV1L9//43djGUqDLSOO+64OPnkk+OJJ54o9fLqiMoJsiIi5s2bt87/WeHPZV02+UMrVqyIZcuWbVAdpMvMmTMjImKHHXaIVq1axVdffbVOm5tuuiluuummop+33377+Pvf/160vr5Qe8yaNavMKQfWrl0bs2bN0i9qGWNJdsyaNSvq1Kmz3pvaf9+cOXNs3w2kb0O62CepiIoEVDNmzIhtttmmCqshTYwl2fHtt9/G8uXLy2yXk5NjG28E/ZuIiFWrVpW7bWWeM/6+wkCra9eu0aVLlxg3bly0bdu21HUyHWTJRKo4E6mqm3GNHDky6dSp0zrP77DDDsmkSZOKfr722muTs846q8Q2Tz75ZHLBBRcU/btdu3brvObixYuTiEiWLFmSJEmS7Lvvvsno0aOTJEmSqVOnJttss02ydu3aJEmS5LTTTkv++Mc/Fq178cUXJzfccEOSJEny5ZdfJttss02ycuXK5OGHH0569+5d1G633XZLJk6cuM57z549O9lll12Sv//978WeX7VqVRIRyYoVK9a7fYYNG1biTfM2xIgRI5K6deuWeaPZzz77LGnYsGHSvXv3ZPny5RV6j0MPPbTYDfnOPvvs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7ZKoAYRZVMisWbPimmuuiYKCgoiIYjftKwy0cnJy4qSTToonn3xSoAUAAAAAUEvcfPPNcfnllxcFWd+/Nc2NN94Yw4YNi4iIRo0axU033RSbbbZZliqlujHNIBVyxx13xN///vf44osv4osvvogGDRrE1VdfXbQ8Ly8vHn744TjhhBPipJNOiqeffjqL1QIAAAAAkAklBVnbb799nH322bF69eqi88pDhgyJJ598MssVU524MosK22GHHeKf//xnicsLA62IcIUWAAAAAEANV9oVWXXr1o0hQ4YUa5+bm5vpEqnmXJlFlXCFFgAAAABAzVdakAWVRZhFlRFoAQAAAADUXIIsMkWYRZUSaAEAAAAA1DyCLDJJmEWVE2gBAAAAANQcgiwyrVqFWe+8804cccQRERGxZMmSOPfcc6N169ax++67R4cOHeK5555bZ50HHnggcnJy4rXXXqu0Ok444YR48803IyLihRdeiA4dOkT9+vXj4osvLtbur3/9a9x4442V9r7VmUALAAAAAKD6E2RlhjykuGoVZj377LPRp0+fSJIkjjzyyKhbt2588sknMX369Bg6dGicf/758eKLLxZbZ+jQodG1a9cYOnRopdQwceLEWLx4cXTs2DEiInbdddcYNmxYXH755eu0Peecc2Lo0KGxZMmSSnnv6k6gBQAAAABQfQmyMkceUlyVhlk///nPY7/99ot27dpFz549Y968efH555/HZpttFtdee2106NAhdtlll2Ib/M0334yf/OQnsffee0e7du2KpYsjRoyIo48+OsaOHRuzZs2KW2+9NfLy8iIion379nH11VfHDTfcUNR++vTpMXPmzHjooYdi+PDh8c033xQt69y5c1x22WXRqVOn2HnnneO8886LiIivvvoqWrRoEcuXLy9qe8opp8Tdd98dERH33ntvnHLKKUXLdtttt9h7772L6vi+evXqRffu3eOxxx7b2E1ZYwi0AAAAAACqH0FW6eQhVZuHVGmYdfvtt8c777wT77//fnTq1Cmuu+66iPjukrh27drFu+++G3/961/jl7/8ZURELF68OPr06RN//OMfY8qUKTF58uTo1KlTRER8+umn0bRp02jZsmW899570aFDh6hXr16x9+vYsWNMnjy56OehQ4dG3759Y5tttokuXbrEE088Uaz9jBkzYvz48fHBBx/E6NGj480334xtttkmunXrFo888khERMyfPz/GjBkTffv2jYiICRMmxAEHHFDubdCxY8cYO3ZsicuXLVu2zqO0Zdl+rFmzpty/e0kEWgAAAAAA1UdVBFmrVq3K+vnuip6fL408pOw8ZGOsG59VosceeywefvjhWLlyZaxcuTK23HLLiIho0KBBHHvssRHx3S83Y8aMiPguhdx9992L/sPq1KkTzZo1i4j/u6SuLA0bNoyIiLVr18ZDDz0U//znPyMi4swzz4wbbrghzjnnnKK2J510UuTl5UVeXl60b98+ZsyYER07doyBAwfG2WefHeecc07cd9998bOf/SyaNGkSERFffvlltGjRotzboGXLlvHll1+WuLzwddenIu+TSTvttNNGv0ZhoBXx3f/DiBEj4sgjj9zo1wUAAAAAoPLceeedVXJF1sCBA2PgwIGV8lpVYX3n55MkKbG9PKTsPGRjVNmVWf/6179i8ODB8eKLL8YHH3wQt956a6xcuTIiIurXr1/U4XNzcyM/P7/M1xs+fHjRf96+++4b77777jpXCb355ptx0EEHRUTEyJEj4+uvv44ePXrEjjvuGP3794/33nsvPvjgg6L2DRo0KPp3bm5urF27NiIi9t9//2jUqFGMHz8+hgwZEv379y9q16hRo6LfozxWrlxZ1KEoLi8vL84888zIz8+PiRMnZrscAAAAAAB+4I033ohGjRrFKaecYmrBEshDvlOVeUiVXZn1v//9LzbZZJPYYostYvXq1XHvvfeWuc5BBx0Un376abz22mvRqVOnKCgoiK+//jpWrVoVS5cujV133TUiIrp06RLbbbdd/PKXv4zbb7898vLyYvLkyXHbbbfFU089FRHfXVJ3++23F839GBFx5ZVXxtChQ+O2224rs5aBAwfGL37xi2jbtm3stttuRc+3a9cupk+fHtttt125tsPHH38ce++9d4nLly5dWuznZcuWFSWd8+fPj8aNG5frfTLlN7/5TYwePbpSXmv8+PFx9NFHR/fu3ePKK6+slNcEAAAAAKDy3H777TF16tTo0qVLjBs3Ltq2bVsprzto0KA466yzKuW1KsuGnp+Xh3ynrDxkY1RZmHX44YfHI488ErvvvntsscUW0a1bt5gzZ06p62y++ebx7LPPxqWXXhrffvtt1KlTJ2644YaYM2dO9O7du6hdnTp14qWXXorL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WBXUXiNHjozDDz88Vq1aVfTcHXfcEWeddVYWqwKAdFi4cGEceOCBxU6UT5s2LQ444ICYN29eFiuD2mnNmjXRvXv3GDlyZNFzixcvjoMOOijee++9LFYGQGUSZgGQVV9++WVceeWV613261//2tSDkGGrVq2Kc889N/Lz89e5EuvBBx+MCRMmZKcwAEiJP/zhDzFr1qxiU5rl5+fHl19+Gddff30WK4Pa6cEHH4zXXnut2LFrfn5+LF++PAYMGFDsS5MAVF/CLACyatCgQSVOXVZQUBC33357ZguCWu6JJ56Ir776ar1/9Ofm5sYf/vCHLFQFAOmwePHiuPvuu4sFWYXy8/Pj/vvvjwULFmShMqidCgoK4g9/+EPk5OSssyw/Pz/eeOONePPNN7NQGQCVTZgFQNasXbs27r///vWeDIj47o+PoUOHxtq1azNcGdRe9957b9Sps/5DxPz8/Bg7dmx88cUXGa4KANLh8ccfjzVr1pS4vKCgIB5++OEMVgS126uvvhqzZs0q8eqrvLy8uO+++zJcFQBVQZgFQNZMnz49vv7661LbLFmyJKZNm5aZgqCWW716dbz99tslXi0ZEZEkSbzxxhsZrAoA0uO1114r8Usf328DZMZrr70Wubm5JS5fu3atabIBaohqE2a98847ccQRR0TEdyc2zz333GjdunXsvvvu0aFDh3juuefWWeeBBx6InJycSj2QPOGEE4ouT37hhReiQ4cOUb9+/bj44ouLtfvrX/8aN954Y6W9L0BNNHny5HK1mzRpUtUWAkRExMcff1zmlZB169Yt974LADXN22+/XeKsAhHfXZn1zjvvZLAiqN0mTZpU5j2xZs2aFd9++22GKgKoHPKQdVWbMOvZZ5+NPn36RJIkceSRR0bdunXjk08+ienTp8fQoUPj/PPPjxdffLHYOkOHDo2uXbvG0KFDK6WGiRMnxuLFi6Njx44REbHrrrvGsGHD4vLLL1+n7TnnnBNDhw6NJUuWVMp7A9REkyZNirp165baxolzyJzyBMdr166Nd999NwPVAEC6LF26NGbOnFlmuzlz5sT//ve/DFQElDWrQMR3Mwu8//77GaoIoHLIQ9aVV2WvHBErVqyI008/PaZOnRp169aNFi1aRL169eKUU06JU045JSIiXn755fjtb38bb731Vtx///1x6623Rr169YpunHrAAQdERMSIESPilVdeibFjx8asWbNi/PjxkZf3Xfnt27ePq6++Om644YY48sgjI+K7qatmzpwZb7/9drRt2za++eabaNq0aUREdO7cOfbbb79466234quvvoqf/vSncc8998RXX30V++yzT8ycOTMaNWoUERGnnHJKdOrUKc4///y49957i+qOiNhtt90i4ruO9UP16tWL7t27x2OPPRbnn3/+erfPsmXLSn1ufcuhutK3WZ+pU6eWes+BiIg1a9bElClT9BsiwlhS1d5///2oW7duqftlkiQxdepU27+S6duQPvZLfmjKlCllXgFSaNKkSUXnM6jdjCVVZ+XKlfHll1+Wq+3kyZOjffv2VVtQLaNvU1OVp283btx4vc/LQ0rPQzZaUoWeeeaZpHv37kU/L1q0KHn55ZeTjh07Fj3Xu3fv5KGHHkqSJEmaNm2afPXVV0mSJMnq1auTb7/9NkmSJPnkk0+Sgw46KEmSJLnpppuS3r17r/Ne7733XtKgQYOiny+//PLkyiuvTJIkSY455pjk3nvvLVp26KGHJn369EnWrFmTLF++PNlxxx2TN954I0mSJDnllFOK2s6bNy/Zaqutiupo3bp1MnXq1HXe+9prr00GDhy4zvN/+9vfkuOOO67E7RMRHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7V5FESeUjpecjGqtJpBvfee+/4+OOP44ILLognn3wy6tatGz/96U9jyZIlMWnSpJg1a1ZMnDgxTjzxxIiI6Nq1a/Tt2zcGDRoUM2fOjCZNmkTE/11SV5aGDRtGxHfT3zz00ENxxhlnRETEmWeeuc6ldSeddFLk5eVFw4YNo3379jFjxoyIiBg4cGDceeedERFx3333xc9+9rOiOr788sto0aJFuX//li1blvsbIgAAAAAAQPUkD6naPKRKpxls3bp1fPTRRzFu3LgYM2ZMXHHFFTF58uS46KKL4o477ogWLVrEmWeeGfXr14+IiKeffjrefffdmDBhQhx55JHx+9//Pk4++eQYPnx4/O1vf4uIiH333TcGDx4ca9asKXaflTfffDMOOuigiIgYOXJkfP3119GjR4+IiEiSJL766qv44IMPYs8994yIiAYNGhStm5ubW3Sz8/333z8aNWoU48ePjyFDhsSYMWOK2jVq1ChWrlxZ7t9/5cqVRR1qfZYuXbrOc8uWLSvqIPPnzy/xkkWobvRt1qdHjx7x+uuvl9muY8eO8corr2SgItLOWFK1Lrvsshg6dGiZ039uuummMWfOnAxVVTvo25A+9kt+6I033oju3buXq+3IkSOjc+fOVVsQ1YKxpOp8/fXXse2225bZrk6dOnHTTTdV3bRXtZS+TU21MX1bHlJ6HrKxqjTM+vLLL2PzzTeP3r17x+GHHx7Dhw+P2bNnR9++feN3v/td5Ofnx9tvvx0R36WHn3/+eey3336x3377xX//+9+YOHFiHHroobF06dLYddddIyKiS5cusd1228Uvf/nLuP322yMvLy8mT54ct912Wzz11FMR8d2Nzm6//fY477zzimq58sorY+jQoXHbbbeVWffAgQPjF7/4RbRt27ZoHsiIiHbt2sX06dNju+22K9fv//HHH8fee+9d4vKydoTGjRv7IKBG0rcp1KxZs8jJySn13gM5OTmx+eab6zOsw1hS+Zo1a1audk2aNLHtq5C+DeljvyQionnz5uVuu9VWW+kzrMNYUrnq1q1b5t+TEREFBQWxxRZb2PZVSN+mpqpo35aHlJ6HbKwqnWZw6tSpcfDBB8fee+8d++yzT/Tt2zfatWsXjRo1imOPPTYOPvjgog2Rn58fZ555Zuy5557Rvn37ePfdd+OSSy6J5557Lnr37v1/BdepEy+99FKsWrUqdtttt2jdunV07Ngxnn766dh7773jq6++irFjx8YJJ5xQrJaf//zn8cgjj8Tq1avLrPv444+PpUuXxoUXXrjO86NHjy76eezYsbHtttvGrbfeGkOHDo1tt902RowYUbR81KhRcfzxx2/QtgOoDfbcc8+im1eWJC8vL/baa68MVQS12x577FHmVVk5OTlVenAKAGm1++67R506ZZ9GycnJiR/96EcZqAhqt3r16sVOO+1UrraFVyYAVCV5SNXmITlJWV9fqAL5+fnRoUOHuOOOO6JTp06ltj388MPj97//fey3337rXb5y5cro169fLFiwIEaMGFHscrkN9c4778Qpp5wS06ZNK3agunTp0jjooIPizTffLDOR/eijj+Lcc8+N1157rULvvWzZsqI5KZcuXepbDdQY+jbr8/e//z1OOumkMts98cQT5WpHzWcsqVofffRR7LHHHqW2ycvLi1/96ldxww03ZKiq2kHfhvSxX7I+bdq0ienTp5faZscdd4yZ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wrHk5ptvjsaNG2e4QrLNWJJZCxYsiIEDB8bzzz8fy5YtW2+bhg0bxlFHHRW33XZbtGrVKsMV1ixjx46Na6+9Nl5//fUS22y77bZx5plnxrXXXivUqmHuvPPOGDBgwAav/8Pz8zk5ObHddttFhEArG4RZVay0qQXPOOOM2G+//Ur8w7SifvzjH8cXX3xRKa8FlWnt2rXRv3//op8vuOCCuP/++33zD6iQtWvXxoUXXlj08/nnnx9Dhw41llAjDB8+vOjf++23X7z44oux0047Za8gsm7atGnRpUuX2HLLLeO2226LDh06RP369YuWJ0kS33zzTbzyyisxePDgmD59eowePdqYWEkmTpwYffr0Kfr5rbfeii5dumSvoBJcfPHFcccdd0S/fv2iT58+0bx582In4dauXRvTp0+P+++/v+gki5PQtcv06dPjsMMOiy222CJuvfVWY0mGvf3229ViLPnlL38ZgwYNirPPPrvMsaR3797x3HPPxZFHHpnFiquv//3vf3HYYYfFokWL4te//nUccsgh6wTIy5cvj3/9619xxx13xGGHHRavv/56bLXVVlmqeP2++eabOO6444p+/tOf/hS/+93vUndLlbFjx0bPnj1j3333jQceeCB+9KMfFRvfkiSJhQsXxogRI+L3v/99zJ07N4YMGZLFiqlsn3/+eeywww7xzDPPVMrrNW7cOHbfffeinwVaGZZQZe6///4kIpLzzz8/KSgoqPL3y83NTe65554qfx+oiBUrViRHHnlkkpOTk0REEhFJTk5OcvjhhyfLly/PdnlANWEsoSa75557ivXt3NzcZKuttkref//9bJdGFp1zzjnJtttumyxatKjMti+//HISEclLL72Ugcpqvpdffjlp0KBBkpubW7Rf1qtXL3nxxRezXVoxc+bMSXJycpKbbrqpzLarV69ODj300GT//ffPQGWkybnnnpu0atUq+e9//1tm28KxJG19vbp65ZVX1juWvPDCC9kurZivvvqqQmNJ586djSUb4Y477kjy8vKSadOmldl2xowZSYMGDZK//OUvGais/BYsWJC0a9euWN/O5PnPijjkkEOSjh07JqtWrSqz7aBBg5KISGbOnFn1hZExl156adKmTZsqf5+VK1cmRx55ZNKgQYNk9OjRVf5+tZXrJqtIaVdkkV3Lli2LwYMHR9euXaNly5ZRr169aNmyZXTt2jUGDx4cy5cvz3aJNcodd9wRL730UiRJUvRckiTx8ssvxx133JHFykqnn1AWfSSzShtLBg8enMXKSqefZE513dafffZZ9O/fv1jfzs/Pj8WLF0ffvn2LPZ8m1XV7VycjRoyIk08+OZo1a1Zm227dusUuu+wSzz33XAYqq9mWLVsWJ598cqxatarYPTXWrFkTp5xySnzzzTdZrK64kSNHRp06deLss88us23dunXj7LPPjokTJ8bcuXMzUB1pUTiWbLHFFmW2NZZUntLGkp///OfGklpsxIgR0a1bt2JXdpSkdevWcfjhh6dun/zVr34VH3744Tr3nrr77rtjxIgRWapqXYsXL47XXnst+vXrF/Xq1Suz/Zlnnhn169dP1e9A9VF4hVaXLl3i6KOPjpdffjnbJdVIwqwqIMhKrxdeeCF22WWXGDhwYIwbNy5WrlwZ2267baxcuTLGjRsXAwcOjJ133jleeOGFbJdaI6xcuTJuvPHG9Z6IKygoiBtvvDFWrlyZhcpKp59QFn0ks8oaS/74xz8Wu0FrWugnmVOdt/WNN9643mPF/Pz8mDJlSrz44otZqKp01Xl7VxcFBQUxb968cp3oivhu7v7dd9895syZU8WV1XxDhgyJ//3vf+t85iT/fyq2u+++O0uVrWvOnDnRokWL2HzzzcvVvk2bNhERTkDXIgUFBTF37twKjSVt2rQxllSC++67LxYvXlziWHLXXXdlqbJ1VXQsKexPX331VVWWVWPNmTOn3PtkRKTu8/2LL76IBx98cJ0gKyKiTp068dvf/jY1X8aaN29eJElS7u3dpEmTaNWqVaq2N9WLQKvqCbMqWXmCrM6dO0dOTk7k5OTE5MmTy/W6Dz74YNE6F198ceUWXUsMGTIkevfuHQsXLox+/frFlClT4qOPPopnnnkmPv7443j//ffj7LPPjoULF0bv3r3NkVsJnnnmmfj6669LXL5kyZJ46qmnMldQOegnlEUfyTxjCaWpztt6yZIl8dhjj5V4/9S8vLxUneyKqN7buzopKCiIiKjQPWvq1q273hNLlF+SJHHnnXeWuLygoCDuuuuuov+fbMvPz69wHylcj9qh8ISysSSzquNYkpeXV+72xpKNsyHbO03beujQoSV+ab+goCCmTp0a77zzToarWr/C7VadtzdVqyrO0Qu0qpYwqxJV5Iqss88+O+bOnRt77rlnRHz3zYaePXtGo0aNonnz5nH55ZcXO7Fx0kknxdy5c6Njx45V/nvUROPGjYsLLrggGjduHKNGjYr77rsv2rVrF7feemvss88+MWjQoNhrr71iyJAhMWrUqGjUqFFccMEFMWbMmGyXXq29/PLLpR405OXlxSuvvJLBikqnn1AWfSQ7XnnllVLHktzcXGNJLVXdt/Ubb7wRq1atKnH52rVrY9y4can5g7q6b++a4vTTT48+ffpku4waafbs2TFjxoxSv1H+xRdfxMyZMzNY1YbRTyiLPlJ1vvzyy/jss89KHUtmz54d//nPfzJY1YbRTzKnumzrF198sdRj07T9bVaS6rK9qXpVcY5eoFV1hFmVpKJTCzZq1ChatmwZeXl5kZ+fHz179ozVq1fHG2+8EX/729/iwQcfjGuuuaaofcOGDYvuR0DFrF27Nvr37x/5+fnx6KOPRrdu3Upt361bt3j88ccjPz8/BgwYUOK3pSnb22+/Xer2W7t2bbz99tsZrKhk+gll0Ueyp6yxJD8/31hSC9WEbT158uTIzc0ttc3KlSvj008/zVBFJasJ2xvKUt5v5Ja3HVA7GUuoqfLz8+ODDz4otU2SJDFp0qQMVQQbr6rO0Qu0qoYwqxJs7D2yXn755fjoo4/ikUceifbt28cRRxwRN9xwQ9x5552xevXqKqq69hg7dmxMmzYtevXqFb169SrXOkcddVT06tUrpk2bFuPGjaviCmumVatWxfTp08ts98knn5T6rfRM0U8oiz6SHatXry73WJKGe/DpJ5lTE7b1pEmTynVPgTScEKgJ2xvKMmnSpDKnIsrLy0vFPgmkl7GEmurTTz8t82+ugoKC1HzRECqqss/RC7QqnzBrI21skBUR8eabb8Zee+0VLVq0KHquR48e8c0338SHH35YmeXWSoVT2/Tt27dC65166qkREdXi8ug0mj59ermmRcrPz4+PP/44AxWVTj+hLPpIdkyfPr1cV3QUFBQYS2qZmrCt33vvvTLvl1G3bt14//33M1RRyWrC9oayTJ06tcx9Mj8/P6ZMmZKhioDqyFhCTTV16tRytZs1a1YsW7asiquBylcV5+gFWpWr/HfAYx2VEWRFRMybN6/YThIRRT/PmzevQq+1atUqHxg/UDin/Q477BCtWrWKr776ap02N910U9x0001FP2+//fbx97//vWh927Ti5s6dW+628+bNy/o21k8oiz6SHcYSSlITtvX//ve/crX773//m/Vaa8L2rk42dFrG/Px823kjLFy4sMwT0EmSpGKfjIgNnsVjxYoVqaifqreh91w0lmwcYwmlKc9V+etbJw3bev78+RVq+8NznZm2fPnyDVpvzZo1qdjeVI41a9aUu21lnqP/vsJA69hjj42jjz46nnvuuejevfsGv15tJszaQEuXLo1+/fpFr169NirIqkxJksTAgQNj4MCB2S4llQ444IByt/3iiy/iwAMPjIiIp59+Op5++umqKouIOOKII7JdQhH9hLLoI+l15JFHZruEIvpJ5tT0bb1mzZq4//774/777892KRFR87d3dTd69Oho0qRJtsuo8f7973+nZjtvs802FV7n0EMPrYJKqElefvnl1PTxmuytt95KzXbeeuutK7xO586dK7+QWqBu3boVXmfevHmp6SvltfPOO2e7hA2yevXqGDx4cAwePDjbpVCJWrdune0SigKt/fffP04//fT1fjmQsplmcAM1bNgwevXqFS+//HKMHj16o16rZcuW63y7ofDnli1bbtRrAwAAAAAAJavqc/QPPvhgvP/++3HSSSdt9GvVVq7M2kC5ubnx1FNPxfHHHx99+vSJ4cOHx+GHH75Br9WxY8f4wx/+EAsWLIjmzZtHxHf3FWjatGm0bdu23K+Tk5MTgwYNirPOOmuD6qipxowZE3369ImjjjoqnnjiiWLLfvOb38TgwYPjkksuid/97nfFlp188skxcuTIeO6556Jr166ZLLlGePvtt+Owww4rV9tx48bF/vvvX8UVlU4/oSz6SHa888475f7W59ixYyt01UhV0E8ypyZs61133bXMqTTr1q0b55xzTrHp+7KhJmzv6mTt2rWx2WabVXi9Hj16uAJuIxx77LHluo9B586dY+TIkRmoqHTXX3990VSeFfHPf/4zOnToUAUVkTb5+fmx6aabVni97t27xzPPPFMFFdUOxx13XLm+9HzooYfGCy+8kIGKSve73/1unc/28pgwYULst99+VVBRzbbvvvtWeJ2WLVum4v7Ajz32WJxzzjnlajt79uzYfPPNq7ii0n3wwQdFswSUV7169eKiiy6KG2+8sYqqItN+85vflPs+VZV1jn597r333jjvvPNiwIABceutt27Ua9VmwqyNUK9evUoJtLp37x5t27aNvn37xp///OeYN29eXH311dG/f/+oX79+hV6rfv360bhx4wrXUJP17Nkz2rRpEyNHjowJEyZEz549i5YVXt5dt27dYtvtxRdfjJEjR0abNm3iyCOPjLw8u0pFtWvXrkJts91v9RPKoo9kh7GEktSEbd22bdsyw6y1a9fGHnvsoW/XMht6z6zc3Nys95XqrG3btjF+/PhS761Qt27dVOyTEd/9PbohGjZsmIr6qXobes8sY8nGadu2bYwbN85YwnptyG1KcnJyUrGt99prr3K122yzzaJVq1ZZvyVLo0aNNmi9Hx7TUr1VZGrPyjxH/33fD7IGDRqU9X2jOjPN4EYqDLS6d+8effr0iVGjRlX4NXJzc2PkyJGRm5sbHTt2jFNPPTV+8YtfrPPNVjZMXl5e/PWvf43c3Nz42c9+FmPHji21/dixY+Pkk0+O3NzcuOOOO5x42UDNmjUr17zbLVu2jC222CIDFZVOP6Es+kh2bL755uW6H0iLFi1iyy23zEBFpdNPMqcmbOt99923zD+ukiSJ9u3bZ6agUtSE7Q1lad++fZk3CV+zZk0q9kkgvYwl1FR77bVXuU7C77vvvk7WUy1VxTl6QVblEmZVgsoItHbYYYd48cUXY/ny5bFw4cK4+eab/dFfibp27Rp33nlnLFu2LHr06BEXXHBBfPjhh9G/f/947bXX4rzzzouPPvoo+vfvHz169Ihly5bFnXfeGd26dct26dXaj3/846hTp+Rhpk6dOvHjH/84gxWVTj+hLPpIdhhLKEl139b77LNPmSe7cnJyKnSFYlWq7tu7pnjwwQdj+PDh2S6jRtpnn30qtV026SeURR+pOsYSNkR12NaNGzeO1q1bl9qmbt261WIq2+qwvcmOyjxHL8iqfNKSSlLRKQfvuuuuuP/+++PNN98s12W6jz76aJx77rmxYsUK397ZQOeee25su+22cdZZZ8Xdd98dd999d2y22WbRrFmzWLx4cXz99dcR8d23+4cOHVps+hw2TMeOHUu9n0BOTk507NgxgxWVTT+hLPpI5nXs2DGef/75EpcbS2q36ryty7rHW05OTrRt2zZV05xU5+0NZfnRj34UjRs3jmXLlpXYpkGDBrHHHntksCqgumnTpk00adIkli5dWmKbBg0axJ577pnBqqBydOrUKWbNmlXilMhr1qyp8H2qIJuq6hy9IKtquDKrEpX3Cq1HH300Pvroo5g8eXLsvvvu5Xrt3r17x+TJk2P69Olx9dVXV2bZtUrPnj1jxowZcfvtt0eXLl2iXr16MXv27KhXr1506dIlBg0aFDNmzHDipZL07du31OUFBQVltskG/YSy6COZdeqpp5a6vKCgIH7xi19kqJry008yp7pu69atW8dPfvKTyM3NLbHN2WefncGKyqe6bu/qqKCgoErasn5169aN0047rcRv3+bl5UXfvn2jQYMGGa6sZPoI5aGfZFZ5xpKf//znqRpLkiQpd1t9ZONV5+19xhlnlHpvz8022yx1x4DVeXtTtarqHL0gq+q4MquSlecKrVatWlX4dTfZZJPYZJNNKqvMWq1x48YxcODAGDhwYLZLqfFatWoVp5xySjzxxBPrHOzk5eXFiSeeGNtuu22WqiudfkJZ9JHMKWssOeGEE4wlVNttfeWVV0avXr3Wu6xp06ZxxhlnZLii8qmu27u6yMvLi4YNG8aCBQvKvc6CBQvKnPqHsl188cVxzz33rHdZfn5+XHzxxZktqBSbbrppLF68ONauXVuu6W8K+9Omm25a1aWRErm5udGoUaMKjyU77rhj1RVVS1x88cVx9913r3dZfn5+XHLJJRmuqGQVHUsWLlwYEd+FFlTcpptuWqF9cuHChana1p06dYp99903pkyZEvn5+cWW1alTJy655JKoX79+lqorrvDzrrzbu6CgIBYtWpSq7U3Vqopz9IKsquXKrCpQGffQgprihhtuiKZNmxb71nlubm5ssskm8fvf/z6LlQHVSeFY8v0/sI0l1AQ9e/aMnj17rve+cLfeems0bdo0C1WRBocddliMGDGiXN8mnjdvXkycODEOO+ywDFRWs+26665x+eWXr3fZxRdfHG3bts1wRSU77LDDYtmyZTFu3LhytX/uueeiVatWscsuu1RxZaRJRceSt956y1hSCXbZZZe44oor1rts4MCBqRxLxo4dW672xpKNc9hhh8WoUaNi1apVZbZdu3ZtvPDCC9G5c+eqL6yccnJy4o477oi8vLxix6+5ubmx0047pepLH9ttt120bt06nnvuuXK1/9e//hWLFy9O1famehFkVT1hVhURaMF3dtxxx3jrrbdim222KXpu6623jrfeeit22mmnLFYGVCc77rhjTJw4sdhYss0228Rbb73lSgSqtZycnHjmmWfi+OOPL3ouNzc3HnrooTjzzDOzWBnZ1q9fv3jjjTfioosuirlz5663TZIkMWnSpOjVq1dsttlm0adPn8wWWUP98Y9/jOuvv77Yc1dccUXccsstWapo/Tp06BDt27eP008/PV555ZV1viFf6Jtvvonbb7897r777jjrrLPWG55Tc/Xr1y/efPPNGDBgQJljSe/evWPTTTeNY445JsNV1kw33nhj/O53vyv23FVXXRW33nprlipav3333Tf22WefOOOMM+KVV14pcQq5b775JgYNGhR33313nHnmmcaSDXTqqafGt99+G8cff3x88sknJbabMWNGnHzyybFgwYLUTal+0EEHxbhx44rd17Vdu3bx73//O1WzSuXk5ES/fv1i2LBh8ec//7no3q4/lJ+fH+PHj4++fftGmzZt4qCDDspsodQIgqzMyEkqMnEoFbZ69eo4/vjj4+WXX15nysG33norTjvttHUOFFavXh0R3wViFTFjxoy47777ol+/fhtfOFSyL774InbYYYeIiPj888+L/g1QEYsWLYpXX301kiSJQw45JLbccstslwSV4ttvvy26CmvixInx4x//OMsVkQaDBw+OSy+9NPLz86NVq1bFpu1JkiSWLFkSixYtihYtWsRLL70U++yzTxarrXkmTJhQdIXK0qVLi520S4v58+dHjx49YsqUKbHJJpvElltuWewE85o1a2Lu3LmxZs2aOOecc+Luu+92AroWuuOOO+KSSy4xlmTJxIkT49NPP43WrVtHx44ds13OehlLMmvUqFFxwgknxNKlS6Nly5bRqFGjohPfSZLEihUrYu7cudGoUaN49NFHU/tllenTp0ebNm0i4rs+1Lx58yxXtK4kSeLiiy+OwYMHR926dWPrrbeOunXrFi0vKCiIxYsXx5IlS6Jt27bx8ssvb9DUc6TXlVdeGbfeemuFz0OWdH6+adOm8fTTTxf7gr4gK3OEWRlQUqB1zTXXxO233x79+/cvartmzZqib/xdeumlxQbYsjRq1Cguv/zyVN1EFAotW7YsmjRpEhHpPRkAANnic5KSLF68OJ5//vmYMWNGrFmzptiyRo0axQEHHBCHHXZYhf5uoHyqy36ZJEm8/fbbMW7cuFiyZEmxZbm5ubHNNttEr169YrvttstShaRBWWPJ/vvvH126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j8svvzx23XXXaNSo0Tpjd/PmzePEE0+MUaNGZbtUgEo3efLkOPfcc2O77baLBg0aFBv/GjRoEK1atYqzzjor3n777WyXmmqPPPJIhc6vl3V+fsWKFdGwYcOIEGhlQ162C6jpSrsi65prrokdd9wxCgoKKuW9rrjiinjjjTeiU6dOlfJ6UJkeeuihon//7W9/iwsuuCCL1UDtkiRJXHnllfGXv/wlDjnkkLj00ktj0003jZycnKI2q1evjvfeey9uvvnmePbZZ2Ps2LGxxRZbZLFqqF0+/vjjon9fdNFFcccdd0SjRo2yWFHNsXr16jj55JPj+eefj8MPPzyuvvrqdbbt8uXL41//+ldcccUVMXbs2Hjqqaeifv36WaqYNFiwYEGcf/75RT/Pnz8/WrduncWKoHb57LPPonPnzrFq1ao47rjjok2bNlG3bt2i5UmSxMKFC+P555+PI444Iu65554499xzs1gx1C5JksRNN91U9PMrr7wSffr0yV5BNcyrr74aRx55ZGy55ZZx4oknxg477BC5ublFy/Pz82P27NnxzDPPxGOPPRYjRoyIn/70p1msOL0mTJgQ22yzTVx22WWV8noNGzaM0047rejnwkCra9eu0aVLlxg3blzssccelfJerCsnSZIk20XUVJmeWnDLLbeMyy+/PK688soqfR+oiCRJ4ne/+11cd911xZ6/9tpr49prry12Mh2oGu+991506NAhbr755rj00ktLbfvhhx/GwQcfHOeee26xP06AqvPGG2/E4YcfHt9++21ERNSpUyd+/OMfx4svvhjNmjXLcnXV36OPPhqnnnpqjBw5Mnr27Flq29GjR8cRRxwRw4YNi9NPPz0zBZI6//nPf6Jr164xe/bsyM/Pj4iIbbfdNsaNGxe77rprlquD2uGYY46JKVOmxOuvvx5bb711ie2SJInzzz8/hg4dGvPnz/e5CRmwZs2aOOuss+Lhhx8uei43NzeGDRsWv/jFL7JYWc2QJEm0adMmmjdvHqNHjy71C24rV66Mo446Kj799NP4/PPPnWNbj379+sWHH34Yb775ZpW+z3//+9/o2rVrzJs3T6BVhUwzWEXcI4vKtmzZshg8eHB07do1WrZsGfXq1YuWLVtG165dY/DgwbF8+fJsl7heTz755DpBVkTE9ddfH0888UTmC6rBqmsfoeo9/fTT0axZs7jooovKbLvHHnvESSedFE899VQGKgMWL14cPXr0iGXLlhU9V1BQEO+8844wpZI8/fTTceCBB5YZZEVE9OjRIw4++GBjYCWorscl+fn5ceSRR8aXX35ZFGRFRMydOzeOOOKIWLt2bRarq3mqaz+hai1btixeeuml6N+/f6lBVkRETk5OXHvttZGfnx8jRozIUIVQu914443xyCOPFHsuPz8/TjvttHj33XezVFXN8eGHH8Ynn3wSv/71r8ucqaFBgwZx1VVXxRdffGG6wSwz5WBmCLOqgCCLyvbCCy/ELrvsEgMHDoxx48bFypUrY9ttt42VK1fGuHHjYuDAgbHzzjvHCy+8kO1SiykoKIirr7466tRZd6ipU6dOXH311ZU2zWZtV137CJnx6aefxr777ltsapbS7L///vGf//zHCTvIgNtuuy2WL1++zudhfn5+PP/8804IVIJPPvkkfvzjH5e7/QEHHBCffvppFVZU81Xn45J//OMfMX369HU+A/Pz82PGjBnx2GOPZamymqc69xOq1uzZs2PVqlXlHru33nrr2H777Y3dkAFLliyJP//5z7G+ib7y8vLit7/9bRaqqlkKx7L999+/XO0POOCAYuuRPQKtqifMqmTlCbI6d+5cdBO5yZMnl+t1J0yYULSOOWhrlyFDhkTv3r1j4cKF0a9fv5gyZUp89NFH8cwzz8THH38c77//fpx99tmxcOHC6N27dwwZMiTbJRcZN25czJgxY72BVUFBQfznP/+JsWPHZqGymqU69xEyY/Xq1RX6YkVh2zVr1lRVSUB8t2/eddddJX6xIy8vL+66664MV1XzbMgYuHr16iqsqGar7scld9xxx3q/iBXx3Zex7rjjjgxXVDNV935C1Socg43dkD6PPPJIrFixYr3L1q5dG6NGjYqZM2dmuKqapaJjYGE7Y2DFVcU5eoFW1RJmVaKKXJF19tlnx9y5c2PPPfeMiO9u9N2hQ4eoX79+tG/ffp32Bx10UMydOzdOPPHEqiqfFBo3blxccMEF0bhx4xg1alTcd9990a5du7j11ltjn332iUGDBsVee+0VQ4YMiVGjRkWjRo3iggsuiDFjxmS79IiIePbZZyMvL6/E5Xl5efHss89msKKap7r3EbLv9NNP9yUJyJJ///vfsXjx4hKXr127Np566qn1fvOVjWf8q3zV/bhk0aJF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UKTKBo+L58/v3bu3V+0vtuvNufX0L0FW//OUqp8ItOBf06dPj507d0Y2m42SkpIoKSmJbDYbO3fujHvuuafY5cGQ8Mgjj0RHR0esXLkyzp07d9V2uVwuduzYEc3NzbFo0aICVghDVzabjZaWlpg8eXKk0+nIZDIREbFixQovfeTJ4sWL4/jx4/Hyyy/3uC1OZ2dnvPrqq9Ha2moMHOKamppizpw5kUqlIpPJRCqVilmzZsWHH35Y7NJgSMhkMvHoo4/Gli1b4tChQz22PX36dKxcuTIqKyvj/vvvL1CFMLQ99thjsXXr1kvfk+l0OkaMGBEtLS1x2223Fbu8AW/06NExc+bM2LBhQ5w4caLHtidPnoz169dHXV1dTJo0qUAVciWCrMJI5Wys2a9OnjwZjY2NUVJSctmWg21tbfHiiy/mbW/TpqameOmll+K5557Ly/0gnz799NNoamqKXC4XCxcujIaGhmKXBEPKjh07YunSpVFeXh733ntvVFZWdlsxef78+fjss8+ira0tFi1aFO+9995VzwwB8u/PP/+M119/PX799deor6+PZcuWdfuM8t+88sorsWHDhrj55ptjxowZUV5efunnm8vl4u+//47Dhw/HL7/8Es8//3y88MILfv5D3IULF2Lr1q1x/PjxmDBhQjzzzDOXwmag/7W3t8e8efPi0KFDUVNTE7fffnu3z2BXV1f89ttvcfDgwchkMrFnz56YMWNGESuGoeejjz6KPXv2RHl5+aXdBsiPU6dORWNjY3z77bcxffr0GDt2bKTT6UvXOzs749SpU3H48OGoqqqK/fv3x/jx44tYcXItX748mpubY+7cuXm5X1lZWWzcuDFGjhx56e8EWYUjzCqAqwVaa9asie3bt+ftoX42m41t27b58gDgir7++utoamqKo0ePxpkzZ7pdy2QyMX78+Hj44Ydj9uzZ3SbKAIPBJ598Ek1NTfHFF19ctkq1tLQ07rzzzli4cGFMmzZNkAWQAOfOnYvdu3dHc3Nz/PDDD5etrr3xxhujsbExFi5ceNlZ5QAD3enTp6O5uTl2794dv//+e3R1dV26lkqlYtSoUfHAAw/EQw891C1YobsjR47E+vXr83a/gwcPxubNm2P16tURIcgqNGFWgVwp0FqzZk0cOHAgPv/882KXBwAAAAAAXEV5eXls2rQpVq9eLcgqAmdmFYgztAAAAAAAYGATZBWHMKuABFoAAAAAADAwHTt2TJBVJLYZLIKLWw5+9913UVNTY5tBAAAAAABIsPLy8jh79mzU19cLsoqgpNgFDEUXV2g1NjZGdXV1scsBAAAAAAB6UF1dHel0WpBVJFZmFdG5c+di+PDhxS4DAAAAAADoQS6Xi3/++SdKS0uLXcqQJMwCAAAAAAAgsYYVuwAAAAAAAAC4GmEWAAAAAAAAiSXMAgAAAAAAILGEWQAAAAAAACSWMAsAAAAAAIDEEmYBAAAAAACQWMIsAAAAAAAAEkuYBQAAAAAAQGIJswAAAAAAAEgsYRYAAAAAAACJJcwCAAAAAAAgsYRZAAAAAAAAJJYwCwAAAAAAgMQSZgEAAAAAAJBYwiwAAAAAAAASS5gFAAAAAABAYgmzAAAAAAAASCxhFgAAAAAAAIklzAIAAAAAACCxhFkAAAAAAAAkljALAAAAAACAxBJmAQAAAAAAkFjCLAAAAAAAABJLmAUAAAAAAEBiCbMAAAAAAABILGEWAAAAAAAAiSXMAgAAAAAAILGEWQAAAAAAACSWMAsAAAAAAIDEEmYBAAAAAACQWMIsAAAAAAAAEkuYBQAAAAAAQGIJswAAAAAAAEgsYRYAAAAAAACJJcwCAAAAAAAgsYRZAAAAAAAAJJYwCwAAAAAAgMQSZgEAAAAAAJBYwiwAAAAAAAASS5gFAAAAAABAYgmzAAAAAAAASKz/A0CXnGP+x3uvAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "class MBCUnaryIterator(Bloq):\n", + " ctrl_bitsize: int\n", + " state = []\n", + " sys_bitsize: int\n", + "\n", + " @property\n", + " def signature(self) -> Signature:\n", + " return Signature([Register('ctrl', QAny(self.ctrl_bitsize)), Register('anc', QAny(self.ctrl_bitsize - 1)), Register('sys', QAny(self.sys_bitsize))])\n", + " \n", + " def set_ops(self, ops):\n", + " self.ops = ops\n", "\n", - "Now that we have a data structure that can query the state of `ctrl` given `q` our next goal is to extend it to act on a quantum `ctrl` register and utilize ancilla *qubits*, not bits. The key point to remember is that the query is still classical. Now the first thing we have to do to update our boolean logic to be reversible, as we currently just set our classical `ancilla_bits` to whatever we need them to be. One thing to keep in mind is that the uncomputation works in reverse, if we have ancillas $[c_0 \\land c_1, c_0 \\land c_1 \\land c_2, c_0 \\land c_1 \\land c_2 \\land c_3]$ we would uncompute them as $\\to [c_0 \\land c_1, c_0 \\land c_1 \\land c_2, 0] \\to [c_0 \\land c_1, 0, 0]$. One of the key insights is that when we uncompute and then recompute the ancillas, the most significant ancilla can simply be updated instead of uncomputed. This is the $Toffoli(a,b,c) \\cdot I \\otimes X \\otimes I \\cdot Toffoli(a,b,c) = CNOT(a, c) \\cdot I \\otimes X \\otimes I$ gate reduction we implemented. " + " def compute(self, query: List[bool], bb: BloqBuilder, ancs, ctrls):\n", + " for ix in range(len(self.state)):\n", + " assert self.state[ix] == query[ix]\n", + " if len(self.state) == len(query):\n", + " return\n", + " if len(self.state) == 0:\n", + " g0 = XGate() if query[0] == False else Identity()\n", + " g1 = XGate() if query[1] == False else Identity()\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " ctrls[:2], ancs[0] = bb.add(Toffoli(), ctrl=ctrls[:2], target=ancs[0])\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " self.state.append(query[0])\n", + " self.state.append(query[1])\n", + " else:\n", + " ctrl_ix = len(self.state)\n", + " g = XGate() if query[ctrl_ix] == False else Identity()\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " [ctrls[ctrl_ix], ancs[ctrl_ix - 2]], ancs[ctrl_ix - 1] = bb.add(Toffoli(), ctrl=[ctrls[ctrl_ix], ancs[ctrl_ix - 2]], target=ancs[ctrl_ix - 1])\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " self.state.append(query[ctrl_ix])\n", + " self.compute(query, bb, ancs, ctrls)\n", + "\n", + " def uncompute(self, query: List[bool], bb: BloqBuilder, ancs, ctrls):\n", + " first_diff_ix = None\n", + " if len(query) == 0:\n", + " first_diff_ix = 0\n", + " else: \n", + " for ix in range(len(self.state)):\n", + " if self.state[ix] != query[ix]:\n", + " first_diff_ix = ix\n", + " break\n", + " if first_diff_ix is None:\n", + " # state is a prefix of query so we do not need to uncompute\n", + " return\n", + " if first_diff_ix < len(self.state) - 1:\n", + " # we have some extra bits we have to undo\n", + " if len(self.state) == 2 and first_diff_ix == 0:\n", + " # we are the bottom of the barrel\n", + " g0 = XGate() if self.state[0] == False else Identity()\n", + " g1 = XGate() if self.state[1] == False else Identity()\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " ancs[0], ctrls[0], ctrls[1] = bb.add(MeasurementUncomputation(), ctrl=ancs[0], q1=ctrls[0], q2=ctrls[1])\n", + " ctrls[0] = bb.add(g0, q=ctrls[0])\n", + " ctrls[1] = bb.add(g1, q=ctrls[1])\n", + " self.state.pop()\n", + " self.state.pop()\n", + " else:\n", + " ctrl_ix = len(self.state) - 1\n", + " g = XGate() if self.state[ctrl_ix] == False else Identity()\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " ancs[ctrl_ix - 1], ctrls[ctrl_ix], ancs[ctrl_ix - 2] = bb.add(MeasurementUncomputation(), ctrl = ancs[ctrl_ix - 1], q1 = ctrls[ctrl_ix], q2 = ancs[ctrl_ix - 2])\n", + " ctrls[ctrl_ix] = bb.add(g, q=ctrls[ctrl_ix])\n", + " self.state.pop()\n", + " self.uncompute(query, bb, ancs, ctrls)\n", + " elif len(self.state) == 0:\n", + " return\n", + " else:\n", + " # first_diff_ix is the last bit, so we just need to do the CNOT trick\n", + " if first_diff_ix == 1:\n", + " g = XGate() if self.state[0] == False else Identity()\n", + " ctrls[0] = bb.add(g, q=ctrls[0])\n", + " ctrls[0], ancs[0] = bb.add(CNOT(), ctrl=ctrls[0], target=ancs[0])\n", + " ctrls[0] = bb.add(g, q=ctrls[0])\n", + " self.state[1] ^= True\n", + " else:\n", + " ancs[first_diff_ix - 2], ancs[first_diff_ix - 1] = bb.add(CNOT(), ctrl=ancs[first_diff_ix - 2], target=ancs[first_diff_ix - 1])\n", + " self.state[first_diff_ix] ^= True\n", + " return\n", + "\n", + " def build_composite_bloq(self, bb: BloqBuilder, ctrl: SoquetT, anc: SoquetT, sys: SoquetT) -> Dict[str, 'SoquetT']:\n", + " queries = list(self.ops.keys())\n", + " queries.sort()\n", + " ctrls = bb.split(ctrl)\n", + " ancs = bb.split(anc)\n", + " bb.add_register_allowed = True\n", + " for q_int in queries:\n", + " q_bools = int_to_bool_list(q_int, self.ctrl_bitsize)\n", + " self.uncompute(q_bools, bb, ancs, ctrls)\n", + " self.compute(q_bools, bb, ancs, ctrls)\n", + " [ancs[-1], sys] = bb.add(self.ops[q_int], q=[ancs[-1], sys])\n", + " self.uncompute([], bb, ancs, ctrls)\n", + " ctrl = bb.join(ctrls)\n", + " anc = bb.join(ancs)\n", + " return {'ctrl': ctrl, 'sys': sys, 'anc': anc}\n", + " \n", + "cbloq = UnaryIterator()\n", + "cbloq.ctrl_bitsize = 2\n", + "cbloq.sys_bitsize = 1\n", + "ops = dict()\n", + "for ix in range(4):\n", + " ops[ix] = CZPowGate(exponent=float(ix))\n", + "cbloq.set_ops(ops)\n", + "msd = get_musical_score_data(cbloq.decompose_bloq())\n", + "fig, ax = draw_musical_score(msd)\n", + "fig.set_figwidth(18)\n", + "fig.set_figheight(7)" + ] + }, + { + "cell_type": "markdown", + "id": "e4aa6e9a", + "metadata": {}, + "source": [ + "Now we can use Qualtran's resource estimation protocols to determine just how many T-gates the measurement based uncomputation has saved us." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "af387d37", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Toffoli based uncomputation:\n", + " T-count: 112\n", + "Rotations: 0\n", + "Cliffords: 64\n", + "\n", + "Measurement based uncomputation:\n", + " T-count: 56\n", + "Rotations: 0\n", + "Cliffords: 92\n", + "\n" + ] + } + ], + "source": [ + "cbloq = UnaryIterator()\n", + "cbloq.ctrl_bitsize = 4\n", + "cbloq.sys_bitsize = 1\n", + "ops = dict()\n", + "for ix in range(2**4):\n", + " ops[ix] = CZPowGate(exponent=float(ix))\n", + "cbloq.set_ops(ops)\n", + "mbc = MBCUnaryIterator()\n", + "mbc.ctrl_bitsize = 4\n", + "mbc.sys_bitsize = 1\n", + "mbc.set_ops(ops)\n", + "from qualtran.cirq_interop.t_complexity_protocol import t_complexity\n", + "print(\"Toffoli based uncomputation:\\n\", t_complexity(cbloq))\n", + "print(\"Measurement based uncomputation:\\n\", t_complexity(mbc))" + ] + }, + { + "cell_type": "markdown", + "id": "83e29013", + "metadata": {}, + "source": [ + "As we can see from the above we have cut our T-count in half! This makes sense as every Toffoli in the compute stage cannot be eliminated (we have to do an AND at some point), but the \"mirror\" Toffoli used to uncompute can be replaced with a measurement and Clifford gates. " ] } ],