{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "y5UdBkJ6Mohb" }, "source": [ "##### Copyright 2020 Google" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "cellView": "form", "execution": { "iopub.execute_input": "2023-11-16T10:14:30.519702Z", "iopub.status.busy": "2023-11-16T10:14:30.519220Z", "iopub.status.idle": "2023-11-16T10:14:30.522789Z", "shell.execute_reply": "2023-11-16T10:14:30.522245Z" }, "id": "rBLKFEKeMpq6" }, "outputs": [], "source": [ "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# https://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License." ] }, { "cell_type": "markdown", "metadata": { "id": "vYA4VckiMuB6" }, "source": [ "# Routing with t|ket>" ] }, { "cell_type": "markdown", "metadata": { "id": "kHP0aFB1M1Ka" }, "source": [ "\n", " \n", " \n", " \n", " \n", "
\n", " View on QuantumAI\n", " \n", " Run in Google Colab\n", " \n", " View source on GitHub\n", " \n", " Download notebook\n", "
" ] }, { "cell_type": "markdown", "metadata": { "id": "-S_-zwQ5Lzhf" }, "source": [ "Wrap tket's compilation unit framework to keep track of qubit mappings and work with generic devices." ] }, { "cell_type": "markdown", "metadata": { "id": "czrY4tYHNBRO" }, "source": [ "## Setup\n", "\n", "Install the ReCirq package:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:14:30.526227Z", "iopub.status.busy": "2023-11-16T10:14:30.525740Z", "iopub.status.idle": "2023-11-16T10:15:46.169652Z", "shell.execute_reply": "2023-11-16T10:15:46.168725Z" }, "id": "8cBvm5NrNCXt" }, "outputs": [], "source": [ "try:\n", " import recirq\n", "except ImportError:\n", " !pip install -q git+https://github.com/quantumlib/ReCirq sympy~=1.6" ] }, { "cell_type": "markdown", "metadata": { "id": "rNrxric3NKqM" }, "source": [ "Now import Cirq, ReCirq and the module dependencies:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:46.174396Z", "iopub.status.busy": "2023-11-16T10:15:46.173797Z", "iopub.status.idle": "2023-11-16T10:15:48.587525Z", "shell.execute_reply": "2023-11-16T10:15:48.586723Z" }, "id": "jwfyjjUxLzhj" }, "outputs": [], "source": [ "import cirq\n", "import recirq\n", "import networkx as nx\n", "from cirq.contrib.svg import SVGCircuit\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:48.591598Z", "iopub.status.busy": "2023-11-16T10:15:48.591237Z", "iopub.status.idle": "2023-11-16T10:15:48.676930Z", "shell.execute_reply": "2023-11-16T10:15:48.676266Z" }, "id": "6Z1Ub6hRLzhq" }, "outputs": [], "source": [ "from pytket.predicates import CompilationUnit, ConnectivityPredicate\n", "from pytket.passes import SequencePass, RoutingPass, DecomposeSwapsToCXs\n", "from pytket.placement import GraphPlacement" ] }, { "cell_type": "markdown", "metadata": { "id": "7aFT1aKpLzhu" }, "source": [ "### Example circuit\n", "We'll route a 3-regular circuit to Sycamore23. To try to clear up some of the confusion about which indices are which, we'll construct the initial circuit with `LineQubits` 10 through 19 which should be thought of as \"logical indices\"." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:48.680693Z", "iopub.status.busy": "2023-11-16T10:15:48.680435Z", "iopub.status.idle": "2023-11-16T10:15:49.740888Z", "shell.execute_reply": "2023-11-16T10:15:49.740326Z" }, "id": "2ZkI9QFyLzhv" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "data": { "image/svg+xml": [ "10: 11: 12: 13: 14: 15: 16: 17: 18: 19: HHHHHHHHHHZZZZ^0.721ZZZZ^0.721ZZZZ^0.721ZZZZ^0.721ZZZZ^0.721ZZZZ^0.721ZZ^0.721ZZZZ^0.721ZZZZZZ^0.721ZZZZ^0.721ZZZZ^0.721ZZZZ^0.721ZZZZ^0.721ZZ^0.721ZZZZ^0.721ZZX^-0.005X^-0.005X^-0.005X^-0.005X^-0.005X^-0.005X^-0.005X^-0.005X^-0.005X^-0.005ZZZZ^-0.99ZZZZ^-0.99ZZZZ^-0.99ZZZZ^-0.99ZZZZ^-0.99ZZZZ^-0.99ZZ^-0.99ZZZZ^-0.99ZZZZZZ^-0.99ZZZZ^-0.99ZZZZ^-0.99ZZZZ^-0.99ZZZZ^-0.99ZZ^-0.99ZZZZ^-0.99ZZX^0.705X^0.705X^0.705X^0.705X^0.705X^0.705X^0.705X^0.705X^0.705X^0.705" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.problem_circuits import get_generic_qaoa_circuit\n", "from recirq.qaoa.gates_and_compilation import compile_problem_unitary_to_arbitrary_zz, \\\n", " compile_driver_unitary_to_rx\n", "\n", "problem_graph = nx.random_regular_graph(d=3, n=10)\n", "nx.set_edge_attributes(problem_graph, values=1, name='weight')\n", "circuit_qubits = cirq.LineQubit.range(10, 20)\n", "gammas = np.random.randn(2)\n", "betas = np.random.randn(2)\n", "circuit = get_generic_qaoa_circuit(\n", " problem_graph=problem_graph,\n", " qubits=circuit_qubits,\n", " gammas=gammas,\n", " betas=betas)\n", "circuit = compile_problem_unitary_to_arbitrary_zz(circuit)\n", "circuit = compile_driver_unitary_to_rx(circuit)\n", "SVGCircuit(circuit)" ] }, { "cell_type": "markdown", "metadata": { "id": "ZwSWNgqkLzh0" }, "source": [ "### \"Route\" this circuit\n", "\n", "Let's look at the \"connectivity graph\" of the circuit vs. that of the device" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:49.744165Z", "iopub.status.busy": "2023-11-16T10:15:49.743930Z", "iopub.status.idle": "2023-11-16T10:15:50.090790Z", "shell.execute_reply": "2023-11-16T10:15:50.090246Z" }, "id": "d6hnsXA0Lzh1" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAByH0lEQVR4nO3deViUVfvA8e8MO6goCBgqEC6ovJqouC9h5l655JZppb2upWku5IJguVZaWrlUmrmm5pa7Jua4JlqCioSp4I4Csm+z/P7gx7wiLggDA8z9ua6u4HnOnHMP6jw357mfcxQ6nU6HEEIIIUyW0tgBCCGEEMK4JBkQQgghTJwkA0IIIYSJk2RACCGEMHGSDAghhBAmTpIBIYQQwsRJMiCEEEKYOPP8NNJqtdy6dYvy5cujUCiKOiYhhBBCGIBOpyMpKQlXV1eUyif//p+vZODWrVtUr17dYMEJIYQQovhcv36datWqPfF8vpKB8uXL6zurUKGCYSITQgghRJFKTEykevXq+uv4k+QrGci5NVChQgVJBoQQQohS5lm3+KWAUAghhDBxkgwIIYQQJk6SASGEEMLESTIghBBCmDhJBoQQQggTJ8mAEEIIYeIkGRBCCCFMnCQDQgghhImTZEAIIYQwcZIMCCGEECZOkgEhhBDCxEkyIIQQQpg4SQaEEEIIEyfJgBBCCGHiJBkQQgghTJwkA0IIIYSJMzd2AIaUkqHmWmwKmWotluZKPBztsLMqU29RCCGEMLhSf6WMvJvE2lPRBEfEEB2Xiu6hcwrAzcEWPy9nBjZzo5ZLeWOFKYQQQpRYCp1Op3tWo8TEROzt7UlISKBChQrFEdczXY9LZcrWMFSX72OmVKDRPvlt5JxvU7Mys3vWp7qDbTFGKoQQQhhHfq/fpbJmYMPpaDos/IPjV2IBnpoIPHz++JVYOiz8gw2no4s8RiGEEKK0KHW3Cb4JjuSL/f8U6LUarQ6NVof/ljDuJ2fwgV8tA0cnhBBClD6lamZgw+lo5u88x/VFA0m+EFyovr7Y/w+/PGWGYOnSpbi5uZGRkVGocUTJkZKh5sKtBP6KjufCrQRSMtTGDkkIIUqEUlMzcD0ulQ4L/yDmyHqSQw/gOmwZCqUZAOrkOJJCdpBxK4LMO5fRZabhMmA21u4N8vSj06hJOLGRlLDf0STHUq1aNYa9PxR/f3/Mzf83UZKeno6HhwdTpkxhzJgxxfY+hWFJgakQwpSVuZqBKVvDyMrKIjFkB+Ve6qhPBADUsTdIPLkZTVIslk7uT+3n/m9fknB0PdbuL+H46nAsqtZj+vTpjBo1Klc7a2tr3nnnHRYsWEA+8iVRwlyPS2XQj6d49asjrD4VRdQjiQCADoiKS2X1qShe/eoIg348xfW4VGOEK4QQRlUqkoHIu0moLt8n+Z9TaFMTsK3TJtd5yyo1qTZ2PVWHL6e8b48n9pNx+x9SL6mwb9kPx65jsGvYBU3bUQwd+SE//PADoaGhudr37duXqKgogoMLd0tCFC8pMBVCiOdTYpKBo0eP4uvri7W1NTVq1GDZsmUEBgaiUChYeyoaM6WC1MiTmNm7YFHphVyvVVrZYmbz7CnejOsXALCt11Z/zEypQFmjFTqdjl9++SVX+8aNG+Pg4MD27dsN8A5FcfgmOBL/LWFkqLXPTAIepdHqyFBr8d8SxjfBkUUUoRBClDwlIhkICwujY8eOxMTEEBgYyHvvvceMGTPYunUrAMERMdkf1DfDsXKpUeBxdJosABTmlvpjGq2Os3eyp4bPnDmT5zWNGjXi2LFjBR5TFB8pMBVCiIIpEclAQEAAOp0OlUqFv78/06ZNIzg4mAsXsn+Tj45LRafVoI6/g3lFlwKPY+FQDYCMG+G5jl8Ly04Cbt68mec1np6eXLx4scBjiuJxPS6VGTsukBSyA6WlDXZ1/zf7o06OI/7wT9xZ9wnRC/oQNbc76VGhT+wr/UY4d9ZMYkDL2ji7uDBmzBiSk5NztXn33XfJzMxk2bJlRfaehBCiuBg9GdBoNOzbt48ePXrg5uamP163bl06deoEZBd6adOSAB1K63IFHsumRhPMKjgTH/wjqRHHUSfEkBKuIv7IaszNzUlLS8vzmkqVKpGWlkZqqhSWlWSGKjDNvHuFmA1T0WVl4NjhfVx8u7J8+XL69OmTq50UmAohyhKjLzp079490tLSqFUr7wJAXl5e7N69O9exwnzwKswtce4zg/vb53Fv6+zsg2YWVPJ7j6Qjq7hz5w6dO3fGxsYGa2trbGxs+OuvvwAIDAykfPnyuc5ZW1vn+vpp5ywtLVEoFAWOXTxZToFp6jMKTM1sypNy6SgZN+c+sa/4P1ahtC6Hy1tzUFrZkgQEtG/M1I8/ZP/+/XTs2FHftm/fvsyfP5/g4GDat29fVG9PCCGKnNGTgfxS2pQHFGjTk5/Z9mksndx5Yei3ZN2PRpuejEVlNxTmljz4/Xscq7hgZ2dHeno6CQkJpKenc/36dRQKBRs3biQ9PZ309HTS0tLIzMx8rnEVCkWBkoj8nHtWe6XS6BNAhXb06FHGjRtHWFgYVatWZdKkSdy+fZugoCBmbD//zALT/NBmpJJ+7W8q+L6hf42ZUkGae2vKlSvHxo0bcyUDDxeYSjIghCjNjJ4MODk5YWNjQ2Rk3urtiIgIIHtxGJRmmFeqgjrhbqHHVCgUuaaL0/49jU6nY+rUqQwbNixX21dffZX4+HhCQkJyHddqtfrkICdBeNz/83ss5/8PHjx4Zl/POztiaWlpkKTjec9ZWFgU/A/pITkFpk5OTgQGBqJWq5kxYwYuLtn1I4YqMM28dw20Giyr/G+WSqPVceRqPA0bNtTPEj1MCkyFEGWB0ZMBMzMzOnXqxLZt24iOjtbXDYSHh7Nv3z4ge5W4qLhUrFzrkH79vEHH12ZlkHp8HS+88AIDBgzIc/7s2bMMHDgwz3GlUomtrS22tsW7A6JOpyMrKytficXzJCKpqanExcU9tX1WVtZzxWpmZlboWQ0bGxtWrFiBWq3G398fNzc3rK2tefHFF3nnnXeA7IWDcgpMbWs1L/DPVpMclx13uUq5jkfHpuLjUoUTx47meY2npyerV68u8JhCCFESGD0ZAAgKCmLv3r20adOGUaNGoVarWbx4Md7e3oSGhuLn5czqU1HY1GpOyoVgsuJuYuFQNVcfD45tACDrfvbjYMkXgkm/kf0UQMVW/fXt7m2bi1k5Bywqu6HNSCUl9ADaxLts27Ob8uVzr1Vw5swZ4uLieOONN4ry7T8XhUKBpaUllpaW2NvbF+vYarWajIyMAs96POnY/fv3n3guNTVV//jeo6tEPswQBaY6dfatH4VZ7hkNHaDG7JkFpsWdGAohhKGUiGSgQYMG7Nu3j/HjxxMQEEC1atUICgri9u3bhIaGMrCZGz+duIZtraYobSqQEq7KdYEHSFCtyfV9SugB/dcPt7WsUpPksIMk/70XhbklVtW82bBxPa+0b5Unrk2bNuHm5ib3g/+fubk55ubm2NnZFduYd+7c4YUXXuCTTz5h0qRJuRKFWbNmsXbt2lztC1tgCv9bj+Jh6enp2NjY5DmeM54UhwohSrMSkQwAtG3bNs99+cDAQABquZSnTc3KHL8SS/kmr5ESegD7Fn1yPT7m7r8zX+PYN38T++ZvAtnFYS09HXm9fbM87TIyMli1ahX+/v7yQV8CmJubU7FiRSpWrKg/5uzsrP/aEAWmZuUcANAkx+c5F3svBldX1zzH4+PjsbW1fWyiIIQQpUWpKTOf3bM+5koFFXx7oM1KJyX8SKH7NFcqmN2z/mPPrVy5EgsLC0aMGFHocUTB5bfAVGGAAlPLyu6gNCPzziNjabL452IYDRs2zPOaq1evUrdu3QKPKYQQJUGpSQaqO9gS9Lo3Sksbqo9ZSzlvv0L3OfN1b6o7PP4+74gRI4iOjsbKyqrQ44iCe7TANMejBaYAVq51yLxzucBjKa3tsPZoSMqFw2gz/rfIlOW1YyQnJ+dZeAiyC0xbtmxZ4DGFEKIkKDG3CfKjv68b95Mz+GL/PwXvRKcDhYKJHb3o5+v27PbC6J5VYOpumUyUVmeQAtOKbQdxZ/VE7q77hHINO6FNiiU5ZBsdO3akc+fOufosiQWmQghREApdPiquEhMTsbe3JyEhgQoVKhRHXE+14XQ0M3ZcQK3VPdfOdEp0qLMy6VE9k0Vj+z/7BaLEOHLkCOPHjycsLIxq1arx8ccfc+DAAbZt24aFY3Vc/7sEnSaLG9+8Q/kmr+cpMI2a2/2JfT9ab5J+/QIPDv9E5t1/UVja8Fb/vnz31Zd5njbx9/dn/fr1XLt2TepKhBAlUn6v36UyGYDsjWmmbA1Ddfk+ZkrFU5OCnPNtalZGfWI1O9avJCQkRO71lkKpqamsWLGCL774gqioKCB7dcKll8w5fiWWWNU6UkIP4jp8ea4C04IwU0DLGpVZPfTxBaYeHh74+/szduzYQo0jhBBFJb/X71JTM/Co6g62rB7ajAMftWVQM3fcHW153O9mWXG3aF/dgoPj2rJ6aDN++HoeHh4e9O3bVzYfKkUePHjArFmz8PDw4KOPPqJ169b64s5WrVoZvMBUp8ueRepZ/fFbFEuBqRCiLCm1MwOPk5Kh5lpsCplqLZbmStwq2VDTozpDhgxhzpw5+nYXLlzA19eXt99+m+XLlxsxYvEsd+7cYeHChSxZsoTMzEyGDBnChAkT8PT0JDAwkKCgIP2z/htOR+O/JcxgYztE7iF021Lmz5/PuHHj5FaAEKLUKfMzA49jZ2WOt6s9Pm6V8Ha1p7yNJV26dGHXrl252nl7e7N48WK+//571q9fb6RoxdP8+++/jBgxAg8PD5YsWcKoUaO4du0a3333HZ6eno99TX9fNyZ0rG2Q8Sd29OLU+oWMGzeOjz/+mD59+pCYmGiQvoUQoqQpUzMDj7Nx40b69etHdHQ01atX1x/X6XQMGjSI7du3c/bs2cduoSyKX2hoKHPnzuWXX37B0dGRcePGMXLkyFyLDT1LQQtMzZQKzJUKZr7unetJk61bt/Luu+/i4uLCr7/+Sv36j1+bQgghShqTnBl4nFdffRUzMzP27NmT67hCoWDJkiW4urrSt29f0tPTjRShgOwiwO7du/PSSy9x/PhxFi1aRFRUFJ988slzJQKQPUNwcFw7Wno6AtkX+afJOd/S05GD49rleeS0Z8+ehISEYGNjQ7Nmzfj555+fKx4hhCjpynwyUKlSJVq2bMnu3bvznCtfvjwbN24kPDycCRMmGCE606bT6di9ezdt2rShTZs2XLt2jdWrVxMZGcno0aMLtcRvfgpMFYC7oy2DmrnrC0yftAhVrVq1OHHiBP369eOdd95h+PDhkkAKIcoOXT4kJCToAF1CQkJ+mpc4c+bM0dnZ2enS09Mfe37JkiU6QLdp06Zijsw0ZWVl6datW6dr0KCBDtA1b95ct337dp1GoynScZPTs3Tnbz7QnY2K052/+UCXnJ713H1otVrd999/r7OystI1atRId+XKlSKIVAghDCO/1+8yPzMA0LVrV1JSUlCpVI89P3z4cPr06cPQoUO5cuVKMUdnOtLT01m2bBleXl689dZbvPDCCxw+fJjjx4/z+uuvo1QW7V/HRwtM7ayefwFOhULB+++/z/Hjx4mPj6dx48Z5ClSFEKK0MYlkoH79+lStWvWxtwog+wP++++/p3LlyvTr14/MzMxijrBsS0xMZP78+bz44ouMHDmSxo0bc+bMGfbu3Uu7du1K5SN7jRo14syZM7Ru3Zru3bszdepUNBqNscMSQogCMYlkQKFQ0LVr1ycmAwD29vb88ssvnDt3jsmTJxdjdGXXvXv3mDZtGu7u7kybNo3u3btz6dIlNm7cSKNGjYwdXqFVqlSJbdu2MWfOHObOnUvHjh2JiYkxdlhCCPHcTCIZgOxbBREREfz7779PbNOkSRO++OILvvrqK3bs2FGM0ZUtUVFRfPjhh7i7u/PVV18xZMgQrl69yvfff0/t2oZZB6CkUCqV+Pv7c/DgQc6fP4+Pjw/Hjh0zdlhCCPFcTCYZ6NChAxYWFnkeMXzUhx9+SI8ePXj33Xf1a9+L/Ll48SLvvPMONWvWZN26dUyePJmoqCi+/PJLqlat+uwOSjE/Pz/++usvPD09efnll1m4cKF+ZUQhhCjpTCYZKFeuHO3atXvqrQLIvqWwYsUKKlSowIABA8jKyiqmCEuvU6dO0bNnT7y9vTl06BCff/450dHRzJgxA0dHR2OHV2xcXV05dOgQY8eOZfz48bJqoRCi1DCZZACybxUEBwc/c4OiSpUqsWHDBk6fPs20adOKKbrSRafTceDAAdq3b0/z5s25ePEiP/74I//++y8fffQRdnZ2xg7RKCwsLPjiiy/49ddfOXDgAE2aNCEszHD7JQghRFEwuWQgPT2dw4cPP7Nt8+bNmTNnDvPnz3/mbIIp0Wg0bN68GV9fXzp27EhiYiKbN2/m4sWLDBkyBEtLS2OHWCL06tUr16qFq1evNnZIQgjxRCaVDNSuXRtPT898X9zHjx9P165dGTx4MDdu3Cji6Eq2zMxMVqxYgbe3N3369MHe3p79+/dz+vRpevfujZmZmbFDLHFyVi3s27cvgwcPZsSIEbJqoRCiRDKpZCDnEcNdu3blq7hLqVSyatUqrK2teeutt1Cr1cUQZcmSnJzMwoUL8fT0ZOjQodStW5eTJ0/y+++/8+qrr5bKNQKKk62tLStXrmT58uX89NNPtG7dmmvXrhk7LCGEyMWkkgHIvlVw7do1IiIi8tW+cuXKbNiwgePHjxMUFFTE0ZUccXFxBAUF4e7uzqRJk3jllVe4cOECW7dupVmzZsYOr1RRKBT897//5fjx48TFxdGoUSNZtVAIUaKYXDLw8ssvY21t/Vx1AK1bt2bmzJnMmjWLgwcPFmF0xnfz5k0+/vhj3NzcmDdvHgMHDuTy5cusWrWKevXqGTu8Uu3RVQunTZsmqxYKIUoEhS4f8+X53Q+5tOjWrRvp6en8/vvv+X6NVqulc+fOnDt3jnPnzlGlSpUijLD4/fPPP8yfP5+ff/4ZW1tbPvjgA8aMGYOzs7OxQytztFot8+bNY9q0abz88susX79efs5CiCKR3+u3yc0MQPatApVK9VzPgCuVSlavXo1SqWTgwIFl5je6s2fP0rdvX+rUqcOuXbuYNWsW0dHRfPbZZ3KBKiJKpZJPPvlEVi0UQpQYJpkMdOnShaysrOeaGQBwcXFh3bp1BAcHM2vWrCKKrujpdDoOHz5Mp06d9JsGLVmyhKtXrzJx4sQyMftTGjy6auFXX30lqxYKIYzCJJMBT09P6tSpU6D1A/z8/AgICCAoKChf6xWUJFqtlh07dtCyZUv8/Py4c+cO69evJyIiguHDh2NtbW3sEE3Ow6sWjhs3jr59+8qqhUKIYmeSyQCg38WwIL+JTZ8+nbZt2/LWW2+Vil3qsrKyWL16NQ0aNOCNN97A3NycXbt28ffff9O/f3/Mzc2NHaJJe3jVwn379uHr68v58+eNHZYQwoSYdDJw69YtQkNDn/u1ZmZmrF27FrVazeDBg9FqtUUQYeGlpaXx7bffUqtWLQYPHoyHhwcqlQqVSkXXrl1ljYASplevXpw5cwYrKyuaNWvGmjVrjB2SEMJEmGwy0Lp1a8qVK1fgpYZdXV1Zs2YN+/fvZ/78+QaOrnAePHjA7NmzcXd3Z8yYMbRs2ZJz586xc+dOWrdubezwxFPUqlWLkydP8uabbzJo0CBZtVAIUSxMNhmwsrKiQ4cOhdp3oGPHjnzyySdMmzatRFSD37lzB39/f9zd3QkKCqJXr178888/rFu3jgYNGhg7PJFPtra2/PTTT7JqoRCi2JhsMgDZtwqOHz9OfHx8gfsICgqiRYsW9O/fn9jYWANGl39Xrlxh5MiReHh48N133zFixAiuXbvG0qVLqVGjhlFiEoWTs2rhsWPHiI2NpVGjRrJhlhCiyJh0MtClSxe0Wi379+8vcB/m5uasX7+etLQ03n333WJ9NCwsLIyBAwdSq1YtNm/ezPTp04mOjmbevHm88MILxRaHKDqNGzfm7NmztGrVim7dusmqhUKIImHSyUC1atVo0KBBoX/jqlatGqtWrWLnzp0sXLjQQNE92bFjx+jevTsNGjTg6NGjfP3110RFRTF16lQqVqxY5OOL4lWpUiW2b9/O7NmzmTNnDp06dSoVT7EIIUoPk04GIHtp4j179hT6iYBu3boxYcIEJk+ezKlTpwwU3f/odDr27NlD27Ztad26NVevXmXVqlVcvnyZDz74AFtbW4OPKUqOnFULDxw4QFhYGI0aNeL48ePGDksIUUaYfDLQtWtX7t27x5kzZwrd1+zZs2ncuDH9+vUrVB3CwzQaDRs2bMDHx4euXbuSmZnJtm3bCAsLY/DgwVhYWBhkHFE6tG/fnrNnz+Lh4UG7du1k1UIhhEGYfDLQvHlzKlasaJDiLAsLCzZs2EBCQgJDhw4t1Id0eno6y5cvx8vLiwEDBuDs7MyhQ4c4ceIEb7zxBkqlyf/RmayqVasSHBzMmDFjGDduHP369ZNVC4UQhWLyVxRzc3M6depksEptDw8PVq5cydatW/n222+f+/VJSUl8/vnneHp6MmLECHx8fAgJCWH//v34+fnJQkECyE48v/zySzZv3szevXtl1UIhRKGYfDIA2bcKTp8+bbCirB49ejBmzBg+/vhjzp49m6/X3Lt3j+nTp+Pm5sbUqVPp0qUL4eHhbNq0icaNGxskLlH29O7dm5CQEFm1UAhRKJIMAJ07d0an07Fv3z6D9Tl//nzq16//zI1noqOjGTNmDO7u7ixYsID33nuPK1eu8OOPP+Ll5WWweETZVbt27VyrFo4cOZKMjAxjhyWEKEUkGQCcnZ3x9fXV3ypIyVBz4VYCf0XHc+FWAikZ6ufu08rKil9++YV79+4xbNiwPPUD4eHhvPvuu9SoUYM1a9YwadIkoqOjWbBgAdWqVTPI+xKmI2fVwmXLlrFixQpZtVAI8VwUunxUuSUmJmJvb09CQkKZ3ev+o4C5/HL2FrXa9eB6XBoP/1AUgJuDLX5ezgxs5kYtl/L57nfjxo3069ePpUuXMnz4cP7880/mzp3Ltm3bcHV15eOPP+a///0v5cqVM/h7EqbpzJkzvPnmmyQkJLBmzRq6du1q7JCEEEaS3+u3yScD1+NSmbI1DNXl++i0GhRKsye2NVMq0Gh1tKlZmdk961PdIX/P9o8YMYIVK1bg4+PDn3/+Sa1atZg8eTJvv/02VlZWhnorQujFxcUxePBgdu3axbRp0wgMDMTM7Ml/t4UQZVN+r98mfZtgw+loOiz8g+NXsvcUeFoiAKDRZudNx6/E0mHhH2w4Hf3U9lqtll9//ZXTp0+TlZXFuXPn+PnnnwkPD2fo0KGSCIgi4+DgwI4dO5g1axazZ8+mc+fO3Lt3z9hhCSFKKJNNBr4JjsR/SxgZaq3+Ip9fGq2ODLUW/y1hfBMcmed8ZmYmK1eupF69erz55ptUqFCBH374AXNzc/bv3y9rBIhioVQqmTJlCvv37+fcuXP4+PjIqoVCiMcyyavST3+EM7a7L8kXggvd1xf7/+GX/58hSElJ4euvv6ZGjRoMGTIEKysrXFxc2Lt3L0OHDmXZsmWsWbOGn376qdDjCpFfr7zyCn/99Zd+1cKvv/5aVi0UQuRicjUD1+NS8ek9koS/9+M6bJn+1oA6OY6kkB1k3Iog885ldJlpuAyYjbV7g1yvVz+4y82lQ5/Yv0Kh4O2332by5MnUqFEDDw8PpkyZwpgxYwAYOnQo69evJyQkhHr16hXdGxXiEVlZWUyePJmFCxfSt29ffvjhB8qXz38xrBCi9JECwicYuOwYG8Z3o4LvG9i36Ks/nh4Vyt31UzCv5IqZbQUybl56bDKgzUwn9Z8TuTvVaUk5f4j0qHN88803jB49Wn9q8uTJ/PLLL1y9ehWFQkFqaipNmzYF4M8//5QNhkSx27x5M0OGDMHV1ZVff/0Vb29vY4ckhCgiUkD4GJF3kziwbzfa1ARs67TJdc6ySk2qjV1P1eHLKe/b44l9KC2tKfcfv9z/1X8FgHLlKzB0aO5Zg759+xIVFUVwcPYtCVtbWzZu3MiVK1f0swVCFKc333yTkJAQLCwsaNq0KWvXrjV2SEIIIytTycDRo0fx9fXF2tqaGjVqsGzZMgIDA/Xr+a89FU3a5VOY2btgUemFXK9VWtliZlOwKVN1chzp0WHU9G2PtbV1rnONGzfGwcGB7du364/Vq1ePb7/9lh9//FE+iIVR5Kxa2Lt3b95++21GjRolqxYKYcLMjR2AoYSFhdGxY0ecnJwIDAxErVYzY8YMXFxc9G2CI2JIv3ERK5caBh079eIR0GnR1Gj12PONGjXi2LFjuY69++67BAcHM3z4cJo0aSJLD4tiZ2dnx6pVq2jdujUffvghISEhbNq0CXd3d2OHJoQoZmVmZiAgIACdTodKpcLf359p06YRHBzMhQsXAEjOUBN1Pwl1/B3MK7o8o7fnk3LxMGblHEh08Hrs0sWenp5cvHgx1zGFQsF3331HtWrV6Nu3L2lpaQaNSYj8UCgUDBs2jGPHjhETE4OPj4/BdvAUQpQeZSIZ0Gg07Nu3jx49euDm5qY/XrduXTp16gRAVGwKmrQkQIfS2nBL/2bF3STzzmVs67YBhZJrsSl52lSqVIm0tDRSU1NzHS9XrhwbN24kIiKC8ePHGywmIZ5XkyZNOHv2LC1btqRbt24EBASg0WiMHZYQopiUiWTg3r17pKWlUatWrTzncqbfM9Va/TFDPmOdcuEwAHbefnnGeXS8nNqFhzVo0ICvv/6apUuXsnHjRoPFJcTzenjVwlmzZtGlSxdZtVAIE1EmkoH8sDRXorQpDyjQpicbrN+Ui4cxd6iGVZWa+nEeFR8fj62tLTY2No/tY9iwYfTr14/333+ff//912CxCfG8Hl618O+//8bHx4cTJ048+4VCiFKtTCQDTk5O2NjYEBmZd2ngiIgIADwc7VAqzTCvVAV1wl2DjJtxKwJ1/G3svNsB2bsbejja5Wl39epV6tat+8R+FAoFy5cvx9nZmX79+klVtzC6nFUL3d3dadu2LYsWLZJVC4Uow8pEMmBmZkanTp3Ytm0b0dH/2zwoPDycffv2AWBnZY6bgy1WrnXIvHPZIOPqbxHUexkAN0db7KzyPqCRcy/2aSpUqMDGjRsJCwtj0qRJBolPiMKoWrUqhw8f5sMPP2Ts2LH079+fpKQkY4clhCgCZSIZAAgKCgKgTZs2zJs3j1mzZuHn55drdTU/L2fsvFqgSbxHVtzNPH08OLaBB8c2kBqRvZlL8oVg/bFH6bQaUi6psHT1wqLSC5gpFfjVds7T7syZM8TFxfHGG2888z00atSIL7/8kkWLFrF169Z8v3chioqFhQULFixg06ZN7NmzB19fX/0TOkKIsqPMJAMNGjRg3759ODk5ERAQwIoVKwgKCqJnz576NgObuWFdwxelTQVSwlV5+khQrSFBtYbU8CMApIQe0B97VPq1v9GmPNDPCmi0Ot5u7pan3aZNm3Bzc6N9+/b5eh+jR4+mV69eDBkyhGvXruXrNUIUtTfffJPTp09jbm4uqxYKUQaV+b0JAgMDCQoK0t/vHPTjKXb9/A1J5w7gOny5fqOiwjBTKmjp6cjqoc1yHc/IyMDDwwN/f3/Gjh2b7/4ePHiAj48PLi4uHDlyBEtLy0LHKIQhpKSkMHLkSFavXs3IkSNZuHAhVlZWxg5LCPEEsjfBE8zuWR/H5j3RZqWT8v8zAIVlrlQwu2f9PMdXrlyJhYUFI0aMeK7+KlasyIYNGzhz5gxTp041SIxCGELOqoVLly7lxx9/pE2bNkRFRRk7LCFEIZlcMlDdwZZP32xC9TFrKff/awMU1szXvanukHf3wREjRhAdHV2g35yaNWvGvHnz+OKLL9i1a5chwhTCIBQKBcOHD9evWtioUSP27Nlj7LCEEIVgcskAQH9fNyZ0rG2QviZ29KKfb95aAUMYN24c3bt3Z/Dgwdy4caNIxhCioHJWLWzevLmsWihEKVfmawaeZsPpaGbsuIBaq0Ojzf8z1GZKBeZKBTNf9y6yRCBHbGwsDRs2xMPDg+DgYMzNy8zeUqKM0Gq1zJkzh4CAAF555RXWrl2Lk5OTscMSQiA1A/nS39eNg+Pa0dLTEci+yD+VNvu3npaejhwc167IEwEAR0dHNmzYwIkTJwgICCjy8YR4XkqlkqlTp+pXLWzUqJGsWihEKWPSyQBk1xCsHtqMAx+1ZVAzd9wdbXk0JVAA7o62tHTWcPP7EYzzsXhsjUBRadWqFZ999hlz5szRL6IkREnzyiuvcPbsWdzc3GTVQiFKGZO+TfAkKRlqrsWmkKnWYmmuxMPRDjsrc9RqNV5eXjRp0oRffvmlWGPSarV07dqVs2fP8vfff+Pq6lqs4wuRX1lZWUyaNImvvvqKvn378sMPP1C+fHljhyWESZLbBIVgZ2WOt6s9Pm6V8Ha11y8xbG5uzqRJk9i8efNj90EoSkqlkp9//hlzc3MGDhwohVqixLKwsGDhwoVs3LiR3bt307RpU1m1UIgSTpKB5/TOO+/g5OTE559/XuxjOzs7s379eo4cOcKnn35a7OML8Tz69OlDSEgIZmZmNG3alHXr1hk7JCHEE0gy8Jysra0ZN24cq1at4tatW8U+frt27ZgxYwYzZ87k0KFDxT6+EM/Dy8uLU6dO0atXLwYOHMjo0aNlV04hSiBJBgpgxIgRWFtb89VXXxll/KlTp+Ln58fAgQO5e9cw2zELUVTs7Oz4+eefWbJkCT/88ANt27aVVQuFKGEkGSgAe3t7Ro0axZIlS4iPjy/28c3MzFi7di1arZZBgwah1WqLPQYhnodCoWDEiBEcO3aMu3fv0qhRI/bu3VugvlIy1Fy4lcBf0fFcuJVASobawNEKYXrkaYICunPnDh4eHgQEBDBlyhSjxHDw4EE6duzIZ599ZrQYhHhesbGxDBo0iL179zJ9+nQCAgIwM3v6hmGRd5NYeyqa4IgYouNSefhDSwG4Odji5+XMwGZu1HKRJxeEyJHf67ckA4UwcuRIfv31V6KiorCxsTFKDNOmTWPOnDkcPnyYNm3aGCUGIZ6XVqtl9uzZBAQE0KFDB9atW0flypXztLsel8qUrWGoLt/HTKl46kqhOefb1KzM7J71i3UtECFKKkkGisG///5L7dq1Wbx4MaNGjTJKDGq1mvbt23PlyhX+/vvvx36gClFSHTx4kAEDBmBtbc2mTZto3ry5/lxhlwsPet2b/sWwSqgQJZmsM1AMatSoQb9+/fj8889Rq41z39Lc3Jz169eTnp7OO++8I/UDolTp0KEDf/31F9WrV6dt27YsXrwYnU7HN8GR+G8JI0Otfa5EAECj1ZGh1uK/JYxvgot3PRAhSitJBgpp8uTJXLt2rdhXJHxY1apVWb16Nbt372bBggVGi0OIgqhWrRqHDx9m1KhRjBkzhnbvTmZsd1+SLwQXuu8v9v/DL6ejH3tu7969lCtXjnv37hV6HCFKO7lNYABdu3bl+vXrhIaGolA8Y7OjIjR58mQWLFiASqXKNd36sCcttSxESbBszWYmL9tKyvlDuA5bhkKZXVioTo4jKWQHGbciyLxzGV1mGi4DZmPt3iDX67VZ6aSEHiQ18hRZ966hzUrHstILBEwYw+RxH+QpVGzYsCHt27eXJFqUWfm9fstVwAD8/f1p164du3fvplu3bkaL47PPPkOlUtGvXz/+/vtvKlWqBEgltig9jqS8QNLZXVTwfUOfCACoY2+QeHIz5pVcsXRyJ+Pmpce+Xv3gDnEHlmHt8RLlm/ZAaWlL+tWzTJ34ERFhZ1m1alWu9sOHD2fChAkEBQXJ/gnCpMnMgAHodDpatWqFmZkZKpXKqLFERUXh4+OTvWvcj2uZuu28VGKLUiHybhKtRs7l3tbZuA7/HotKL+jPaTNS0Wk1mNmUJ+XSUe5vm/vYmQFNagKalAdYOrnnOn5/11ekhB0kMjKSmjVr6o/HxMTg6urK8uXLGTJkSNG+QSGMQAoIi5FCocDf35+jR49y9OhRo8bi7u7OypUr+f1qGn5fHOL4lViAZxZh5Zw/fiWWDgv/YMMT7rMKUVBHjx7F19cXa2tratSowbJlywgMDNTfWlt7Kpq0y6cws3fJlQgAKK1sMbN59m/uZrb2eRIBgHJ1WgIQHh6e67izszMNGjRg+/btBX1bQpQJcpvAQLp37069evWYN28erVu3Nmos1yvUw7HrGNQ6HYoCVGJrtDr8t4RxPzmDD/xqFVGUwpSEhYXRsWNHnJycCAwMRK1WM2PGDFxcXPRtgiNiSL9xESuXGgYfPyspDuCxj942btyYbdu2GXxMIUoTmRkwEKVSyeTJk9m5cydhYWFGi+OnP8L1ldiFLWZ8WiX20qVLcXNzk01nRL4EBASg0+lQqVT4+/szbdo0goOD9VsbJ2eoibqfhDr+DuYVXZ7R2/PRabJICtmBub0L9Rr45Dnv6enJ/fv3iYmJMei4QpQmkgwY0IABA3Bzc2PevHlGGf96XCoTAueitLTBrm5b/XF1chzxh3/izrpPiF7Qh6i53UmPCn1sHzqdlqS/dnNrxYdEf/kmA/1ewq9DR44fP56r3bvvvktmZibLli0r0vckSj+NRsO+ffvo0aMHbm7/WwSobt26dOrUCYCIm7Fo0pIAHUrrcgYdP27/UrLuR+PQcQQ3EvImrzmFtvfv3zfouEKUJnKbwIAsLCyYMGEC48aN49NPP+XFF18s1vH9N/1F/J/bC1yJDRB/aAVJp7dh5+1H+UbdICOFkND9tGvXjmPHjtG0aVMgeyvnd955hwULFvDhhx8a9ZFKUXgajYaMjAzS0tJIT0/X//e07/PbNjExkbS0NA4dOoSXl1eu8ykpKQC0bN0W5zcDgOyCXENJOPUryef2Yd/mbWxq+JKpzrsoV8548ndYmDJJBgxs6NChzJw5ky+//JJvvvmm2MaNvJvEgX270aYmYFsn9x4FllVqUm3sen0ldsbNuY/tQ6fVkPzXHmy9WlH5tY/1x7O8WpG89H3Wrl2rTwYA+vbty/z58wkODqZ9+/ZF88ZMSFFekJ/1fVZW1nPHa2Njg7W1NdbW1rm+fvj7cuXKYWdnB2QXt7Zr1y7X+V27dnHo0CFmfzaTRRE2gAJterJBfp7JoQd5EPwT5Xy6ULFVfwAszfNOhubsPCpLeQtTJsmAgdna2jJmzBj9JizOzs4G6ffo0aOMGzeOsLAwqlatyqRJk7h9+zZBQUHodLpnVmLnh06jRqfOwMyuYq7jluUqoVAq82zG1LhxYxwcHNi+fXuZSQbK6gW5cuXKTzz/tNc+6XtLS8t8/yat0WgoX748NWrU4PPPP8917vfffwdgxMDefBO4D/NKVVAn3H3un8OjUv85SeyeRdh6tcCh40gge00ND0e7PG2vXr1K5cqVcXJyKvS4QpRWkgwUgdGjRzNv3jwWLVrEZ599Vuj+iqsSW2lhhaWrF8lhv2NZtQ7W1bzRZqSQcGwDZtblGDZsWJ7XNGrUiGPHjhV4zMeRC7LhL8jGZGZmRqdOndi2bRvR0dH6uoHw8HD27dsHgJ2VOW4OttxzrUP69fOFGi89+jz3d8zHqvp/qPzaRBSK7NkAN0fbx662eebMGVq0aFGoMYUo7SQZKAIODg4MHz6cb7/9lkmTJhV6oaaHK7FzPkh79+5N/fr1gdyV2La1Hr8McX5Vfu1j7m+bR+xvX+qPmVesgvPA+cQlphAXEpLrIgrZycr3338vF2TxREFBQezdu5c2bdowatQo1Go1ixcvxtvbm9DQ7GJWPy9nLnm1IOVCMFlxN7FwqJqrjwfHNgCQdT/7CZfkC8Gk37gIoL8NoE6IIebXTwEFdnVakXIpe90PpRIca1QmNNSRBg3+t1BRTEwMoaGhjB49ukjfvxAlnSQDRWTcuHEsXryY5cuXM2HChAL386xK7N27dxMVm2KwSmylpQ0Wld2wqloHa/eX0KQ8IOHkJmK2fEaLrUrU9x//qOGwYcPkgiyeqEGDBuzbt4/x48cTEBBAtWrVCAoK4vbt2/pkYGAzN1Ye9UVpU4GUcJX+Ap8jQbUm1/cpoQf0X+uTgQd30GVkFyXG7V+Sq/1WoEGF9FzJwJYtW7CysqJv374Ge69ClEaSDBSRatWqMXjwYH21vZWVVYH6uXfvHmlpadSqlXfxHy8vL3bv3p2rQrowldg6rYa7G6ZhXb0+Dh1H6I9be7zErR9G061nHz6btj3XBXnOnDl8/fXXpKSkYGsrSxiLJ2vbti0hISG5jgUGBuq/ruVSnrZeL7DL93WSzh3AvkWfXE/FuPvvfOYY1u4N8rQzUypo6enI6qHN8rRftmwZw4YNk30JhMmTdQaK0MSJE7lz5w4///xzkY5jaa5EaVOewlZip0efJ+teFDa1cn9oWjhUxcKxGreir9KwYUPq1KmDu7s7Li4upKamYmtrK4mAMIjZPevj2Lxn9u6D4UcM0qe5UsHsnvXzHN+7dy+RkZF88sknBhlHiNJMkoEi5OXlRa9evZg/fz4ajaZAfTg5OWFjY0NkZGSecxEREUB2hbRSaVboSmxt6oPsL3R5n8VGq8Fckff41atXqVu3boHHFOJh1R1s+fTNJlQfs5Zy3n4G6XNEE4fHbrzVuXNnkpOTDfbEjxClmSQDRWzy5MlcvnyZLVu2FOj1j1Zi53hcJbaVax0y71wucKzm/1+wlXIx929kGXcukxV3k8aNGuV5zdmzZ2nZsmWBxxTiUf193ZjQsbZB+rK8tJeZ73bmyBHDzDIIUVbJFsbFoEOHDsTHxxMSElKgQrfQ0FCaNWuGs7NzrkpsFxcXQkND0el0BO64wJJV64jZMhvXYcueWomdGn4EuwavYm6f/Wjiw4VadzdMJ/3aX9jUboHNiz5okuNJOvMbZmgI+/svvLy89G3PnDlDkyZNOHjwIK+88kpBfjRCPNGG09HM2HEB9f9vnpVfZkoF5koFM1/3pnNte3r27MmxY8dYvXq1FAoKkyNbGJcg/v7+nD17loMHDxbo9TmV2E5OTgQEBLBixQqCgoLo2bOnvs3AZm5Y1/hfJfajElRrSFCtIfX/78OmhB7QH3uYU+9p2LcZiDruJvG//0hiyA6sqtZl864DuRIBgE2bNuHm5lZmFhwSJUt/XzcOjmtHS09HIPsi/zQ551t6OnJwXDv6+bphb2/P3r176dOnD/369WPBggUGXe5YiLJCZgaKgU6nw9fXF3t7e/2Ka4YQGBioX4EQYNCPp9j18zcknTuA6/DluSqxC+pJldgZGRl4eHjg7+/P2LFjCz2OEE8TeTeJtaeiCf4nhujYVB7+0FKQvaCQX21n3m7uRk3nvE8GaLVapk6dyty5cxk7dixffvklZmaF//chREmX3+u3PFpYDBQKBf7+/vTp04c///wz1/r+hjS7Z31O/tOThJDfSAk/YpACrCdVYq9cuRILCwtGjBjxmFcJYVi1XMoT+Lo3gXiTkqHmWmwKmWotluZKPBztHruy4MOUSiVz5szBzc2NDz74gBs3brB69eo8S2wLYapkZqCYaDQa6tWrh7e3d4GLCR/16MwAZN9n9d8SZpD+Aeb1qk8/X7dnNxSilNixYwf9+/enUaNGbN++HUdHR2OHJESRkZqBEsbMzIxJkyaxdetWwsPDi2wcQ1ZiT+zoJYmAKHNef/11goODiYiIoFWrVly9etXYIQlhdDIzUIwyMjLw9PSkU6dOrFixokjHMkQltiQCoiy7fPkynTt3JikpiV27dtGkSRNjhySEwcnMQAlkZWXF+PHjWbNmDdevXy/SsQxRiS1EWVazZk1OnDiBh4cHL7/8Mrt37zZ2SEIYjcwMFLOkpCTc3Nx47733WLBgQbGM+XAldlRsaq5z+anEFqIsS01NpX///uzevZulS5fy/vvvGzskIQwmv9dvSQaMYPr06SxcuJCoqKhiL176/Y+jdOk7mA0bN+NVq0a+KrGFKOvUajVjxoxhyZIlBAQEEBgYKDthijJBbhOUYGPGjEGr1fLtt98W+9gWCi1ZMVfxrmKHt6u9JAJCAObm5nz77bfMmTOHmTNnMmTIELKysowdlhDFRpIBI3BycmLo0KEsWrSIlJSUYh07Z8MkWXBFiNxy1gNZs2YNa9eupXv37iQlJRk7LCGKhSQDRjJhwgQePHjADz/8UKzjarXZOw9KMiDE4w0cOJC9e/dy8uRJ2rZty61bt4wdkhBFTpIBI3F3d+ett97iyy+/JDMzs9jGlZkBIZ6tffv2HD16lHv37tGiRQsuXrxo7JCEKFKSDBjRpEmTuH79OuvXry+2MXOSAaVS/uiFeJr69etz8uRJKlSoQKtWrWQbZFGmyRXBiP7zn//w2muvMW/ePP30fVGTmQEh8q9atWocPXoUHx8fXn31VTZu3GjskIQoEpIMGJm/vz/h4eH89ttvxTKeJANCPB/ZBlmYAkkGjKxly5a0adOGOXPmFMsHjCQDQjw/S0tLfv75Z/z9/fn4448ZN26c/t+SEGWBJAMlgL+/P6dOnSqWe5LyNIEQBZOzDfK3337L4sWL6devH2lpacYOSwiDkGSgBOjSpQsNGjRg7ty5RT6WzAwIUTijRo1i69at7N69mw4dOhAbG2vskIQoNEkGSoCcxU727t3LX3/9VaRjydMEQhRezjbI//zzDy1btpRtkEWpJ1eEEqJPnz68+OKLzJs3r0jHkZkBIQyjWbNmnDhxAo1GQ/PmzQkJCTF2SEIUmCQDJYS5uTkTJ05k06ZNXL58ucjGkWRACMORbZBFWSHJQAny7rvvUrlyZb744osiG0MKCIUwLCcnJ4KDg2nfvj2vv/56sS8xLoQhSDJQgtjY2PDRRx+xcuVKbt++XSRjSM2AEIZna2vLli1bGDZsGP/973+ZMWOGrEUgShW5IpQwI0eOxMrKiq+//rpI+tdoNDIrIEQRkG2QRWkmyUAJU7FiRUaOHMmSJUtISEgweP8ajUZmBYQoIrINsiit5KpQAn300UdkZGTw3XffGbxvmRkQoujJNsiitJFkoAR64YUXePfdd/nqq68MvsKZVquVZECIYiDbIIvSRJKBEmrChAncv3+fn376yaD9ysyAEMVHtkEWpYUkAyVUzZo16dOnD59//jlqtdpg/UoyIETxkm2QRWkgyUAJNnnyZK5evcqmTZsM1qckA0IUP9kGWZR0kgyUYD4+PnTq1Im5c+ca7INDniYQwjhkG2RRkslVoYTz9/cnNDSUvXv3GqQ/mRkQwnhkG2RRUkkyUMK1a9eOZs2aGWx7Y3maQAjjk22QRUkjyUAJp1Ao+OSTTzhy5AjHjx8vdH8yMyBEySDbIIuSRJKBUuC1116jbt26BpkdkGRAiJJDtkEWJYUkA6WAUqlk8uTJ/Pbbb5w/f75QfUkBoRAli2yDLEoCuSqUEgMGDKB69erMnz+/UP3IzIAQJY9sgyyMTZKBUsLS0pKPP/6YdevWERUVVeB+pIBQiJJJtkEWxiTJQCny/vvvY29vz5dfflngPmRmQIiSS7ZBFsYiyUApYmdnx5gxY/jhhx+4d+9egfqQZECIku1x2yAnJiYaOyxRxkkyUMp88MEHKJVKFi9eXKDXSzIgROnw8DbI7dq1k22QRZGSZKCUcXR0ZNiwYSxevJikpKTnfr08TSBE6SHbIIviIleFUmj8+PGkpKSwfPny536tzAwIUbrINsiiOEgyUApVq1aNt99+mwULFpCRkfFcr5WnCYQofWQbZFHUJBkopSZOnMjt27dZs2bNc71OZgaEKJ1kG2RRlCQZKKXq1q1Ljx49mD9//nNtgyrJgBCll2yDLIqKJAOl2OTJk/nnn3/Ytm1bvl8jyYAQpduj2yD37dtXtkEWhSbJQCnWrFkz/Pz8mDt3br6nC+VpAiHKhpxtkPfs2SPbIItCk6tCKefv709ISAiHDh3KV3spIBSi7JBtkIWhSDJQyr366qs0atSIOXPm5Ku93CYQomyRbZCFIUgyUMrlLF36+++/c/r06We2l2RAiLJHtkEWhSXJQBnQq1cvatasybx5857ZVpIBIcom2QZZFIYkA2WAmZkZkyZNYsuWLURERDy1rSQDQpRdsg2yKChJBsqIwYMHU6VKFT7//POntpOnCYQo22QbZFEQclUoI6ysrBg3bhw///wzN2/efGI7eZpAiLIvp5Zo9erVrF27lm7dusk2yOKpJBkoQ4YPH46dnR0LFy58Yhu5TSCE6Xj77bfZu3cvp06dkm2QxVNJMlCGVKhQgdGjR7N06VLi4uIe20aSASFMi2yDLPJDkoEyZsyYMWg0Gr799tvHnpdkQAjTI9sgi2eRZKCMcXZ2ZujQoXz99dekpKTkOS/JgBCmSbZBFk8jyUAZ9PHHH/PgwQNWrFiR63hKhppMO2cSLRy4cCuBlAy1kSIUQhiDbIMsnkShy8ffhMTEROzt7UlISKBChQrFEZcopLfffhuVSsWe43+z8cwtgiNiiI5L5eE/bAXg5mCLn5czA5u5UculvLHCFUIUI61Wy9SpU5k7dy5jxoxhwYIFMmNYRuX3+i3JQBl14MRfvP31TmxebISZUoFG++Q/5pzzbWpWZnbP+lR3sC3GSIUQxvLdd9/x4Ycf0qNHD9asWYONjY2xQxIGlt/rt9wmKIM2nI7mg913sPFoCPDURODh88evxNJh4R9sOB1d1CEKIUoA2QZZ5JBkoIz5JjgS/y1hZKi1oHi+P16NVkeGWov/ljC+CY4sogiFECWJbIMsQJKBMuWnP8IZ292X5AvBhe7ri/3/8MsTZgj27t1LuXLluHfvXqHHEUIYn2yDLKRmoIy4HpeKT++RJPy9H9dhy1Aos4uB1MlxJIXsIONWBJl3LqPLTMNlwGys3Rvk6SPt6llSwlVk3oogK/YG5hUqc+XK1cfWEDRs2JD27duzYMGCIn9vQojice/ePbp3786FCxfYuHEjXbt2NXZIopCkZsDE+G/6i/g/t1PupY76RABAHXuDxJOb0STFYunk/tQ+Ui78QerFP1Ba2WFWzgGAKVvDHtt2+PDhLFu2jKSkJMO9CSGEUck2yKZLkoEyIPJuEgf27UabmoBtnTa5zllWqUm1seupOnw55X17PLWfiu0GU33cRqoM+hxL5xfR6UB1+T6XY/Je8Hv37k1GRgabNm0y5FsRQhjZo9sgBwQEyFoEJkCSgVLg6NGj+Pr6Ym1tTY0aNVi2bBmBgYEoFAoA1p6KJu3yKczsXbCo9EKu1yqtbDGzyd/6AeblHVGYmec6ZqZUsOZk3toBZ2dnGjRowPbt2wv4roQQJdXD2yB/+umnvPfee7INchln/uwmwpjCwsLo2LEjTk5OBAYGolarmTFjBi4uLvo2wRExpN+4iJVLDYOPr9HqCP4nhkC885xr3Lgx27ZtM/iYQgjjy9kGuVq1agwZMoRbt26xefNmqRsroyQZKOFypuhUKhVubm5A9hR9/fr1AUjOUBN1Pwl1/B1sazUvkhiiY1NJyVBjZ5X7r4unpyf3798nJiYGZ2fnIhlbCGFcb7/9Nq6urvTs2ZN27dqxa9cuXF1djR2WMDC5TVCCaTQa9u3bR48ePfSJAEDdunXp1KkTAFGxKWjSkgAdSutyRRKHDrgWm3fTo0qVKgFw//79IhlXCFEyyDbIZZ8kAyXYvXv3SEtLo1atWnnOeXl5AZCp1uqPFWWRz8PjPDpeTu2CEKLskm2QyzZJBko5S3MlSpvygAJtenKRjvOo+Ph4ACpXrlxk4wohSg7ZBrnskmSgBHNycsLGxobIyLxLA0dERADg4WiHUmmGeaUqqBPuFkkciv8f51FXr16lcuXKODk5Fcm4QoiSR7ZBLpukgLAEMzMzo1OnTmzbto3o6Gh93UB4eDj79u0DwM7KHDcHW+651iH9+vkiicPN0TZP8SDAmTNnaNGiRZGMKYQouSwtLfn555+pXr06H3/8MVFRUbINciknyUAJFxQUxN69e2nTpg2jRo1CrVazePFivL29CQ0NBcDPy5lLXi1IuRBMVtxNLByq5urjwbENAGTdz14vIPlCMOk3sguAKrbqr2+XGXOV1MhT2W3jb6PLSCHx+C+YVa/Ib78l89prr+nbxsTEEBoayujRo4vuzQshSiylUsmcOXOoXr06H374ITdu3JBtkEsxSQZKuAYNGrBv3z7Gjx9PQEAA1apVIygoiNu3b+uTgYHN3Fh51BelTQVSwlW5LvAACao1ub5PCT2g/zpXMnDn3zxt44+sJhhwM0/MlQxs2bIFKysr+vbta6i3KoQohUaNGkXVqlUZMGAAHTp0YMeOHTg6Oho7LPGcZKOiUiowMJCgoCD9vbpBP55i18/fkHTuAK7Dl+fan6DAtBoautqxbewreU75+Pjw8ssvs3DhwsKPI4Qo9U6dOkX37t1xcHBg7969vPjii8YOSSAbFZmc2T3r49i8J9qsdFLCDfTIj07L3k8HM2nSJJKT//ekwt69e4mMjOSTTz4xzDhCiFJPtkEu3SQZKCOqO9jy6ZtNqD5mLeW8/QzS52c9GxAwfjSLFy+mXr16bN26FZ1OR+fOnUlOTpZVB4UQudSsWZMTJ07g4eHByy+/zO7du40dksgnSQbKkP6+bkzoWNsgfU3s6MXbLTyZMmUKFy9epEGDBvTq1YvXXnuNK1euGGQMIUTZI9sgl06SDJRSgYGBj3229wO/WsztVR8rcyVmyudbGdBMqcDKXMm8XvUZ7VdTf/zFF1/kt99+Y+vWrYSGhuLt7c2sWbPIyMgo9PsQQpQ9sg1y6SMFhGXU9bhUpmwNQ3X5PmZKBRrtk/+Yc863qVmZ2T3rU93B9oltU1JSmDlzJgsWLKBGjRp8++23vPJK3gJDIYTQ6XTMmzePTz75hHfeeYfvv/8eCwuLfL02JUPNtdgUMtVaLM2VeDjaPXa9E/F0+b1+SzJQxkXeTWLtqWiC/4khOjaVh/+wFWQvKORX25m3m7tR07l8vvs9f/48o0aNQqVSMWDAABYsWECVKlUMHr8QovRbs2YNQ4YM4eWXX37qNsj6z6uIGKLjHvN55WCLn5czA5u5Ucsl/59XpkySAZGHoTNtnU7Hzz//zIQJE8jMzGTWrFmMHDlSViETQuRx6NAhevbsiaenZ55tkItqJlNIMiCKUVxcHFOmTGH58uX4+PiwZMkSmjZtauywhBAlTFhYGF26dMHMzIw9e/ZQr149NpyOZsaOC6i1uqcmAY8yUyowVyoIet2b/r5uz36BiZJ1BkSxcXBwYOnSpZw4cQKdTkfz5s0ZOXKkfldDIYSA3Nsgt2zZEtsKFfng00VkqLXPlQgAaLQ6MtRa/LeE8U1w3s3ccuzdu5dy5cpx7969woZfpsnMgDAotVrNd999x7Rp07C2tuaLL75g0KBBKBTP92SDEKLsSkhIoF7rLsTcuIrrsGX6FVPVyXEkhewg41YEmXcuo8tMw2XAbKzdG+Tt4/hGUi+fQh1/G21mGlVcq9Kv1xtMnTo1z06qDRs2pH379ixYsKBY3l9JIjMDwijMzc0ZM2YMERERvPLKK7zzzjv4+flx8eJFY4cmhCghYtPh7pWLlGvQMdfS6erYGySe3IwmKRZLJ/en9pF55zKWzi9i37IfDh1HklG1EStWrKRly5akpKTkajt8+HCWLVtGUlJSkbyfskCSAVEkXnjhBdavX8+BAwe4ffs2L730Ev7+/nn+kQohTM97M5eiSU3Atm6bXMctq9Sk2tj1VB2+nPK+PZ7ah1OvKTh2/oAKvm9Q/qWOVGo/FJ+3/bl8+TK//fZbrra9e/cmIyODTZs2GfqtlBmSDIgi1aFDB0JDQ5kxYwZff/019erVY/v27cYOSwhRRI4ePYqvry/W1tbUqFGDZcuWERgYqL9VGHk3iTNH9mNm74JFpRdyvVZpZYuZTcEeGdRodfyTlv1kwYMHD3Kdc3Z2pkGDBvLZ8xSSDIgiZ2VlxbRp07hw4QLe3t706NGD119/nWvXrhk7NCGEAYWFhdGxY0diYmIIDAzkvffeY8aMGWzdulXfZu2paDJuXsLKpUahx9PpdGhSE9Akx5N+/TzxB7PrD15++eU8bRs3bszx48cLPWZZJcs5iWKT83zx1q1bGTt2LPXq1WP69Ol8/PHHWFpaGjs8IUQh5Sw7rFKpcHPLftyvd+/e1K9fX9/m0MXbqONvY1urWaHH06Y84MY3g/Tfm5WvTJ23plKnTp08bT09Pbl//z4xMTGyydpjyMyAKFYKhYJevXoRHh7OqFGjmD59Oi+99BLBwcHGDk0IUQgajYZ9+/bRo0cPfSIAULduXTp16gRAcoaaa7fuAjqU1uUKPabSphzO/T/D6c0A7NsMRGlTgZjYB6RkqPO0rVSpEgD3798v9LhlkSQDwijKlSvHF198wV9//YWjoyPt27dn0KBB3L1719ihCSEK4N69e6SlpVGrVq0857y8vACIik3RLzFsiI2LFGYW2Hg0xLZmUyq2GoBDx5HE7lnETxt+zdM2Zzx5zPnxJBkQRlW/fn2OHDnCihUr2LNnD15eXnz33XdoNBpjhyaEMLBMtRalTXlAgTY92eD9W1eri1k5B37bsjHPuZxF0CpXrmzwccsCSQaE0SmVSt577z0iIiLo27cvo0ePpnnz5oSEhBg7NCFEPjk5OWFjY0NkZN7VACMiIgCwNFeiUJphXqkK6oSimQXUqTNJTc67nsDVq1epXLlyngWJRDZJBkSJ4ejoyPLlyzl+/DhZWVk0bdqUDz74IM9jQkKIksfMzIxOnTqxbds2oqOj9cfDw8PZt28fAB6OdigAK9c6ZN65XOCxtJnpaLPS8xxPuXQMbXoyLZvl3RvlzJkztGjRosBjlnWSDIgSp0WLFoSEhLBgwQJWrVpFnTp1WLt2rUHuMQohik5QUBAAbdq0Yd68ecyaNQs/Pz+8vb0BsLMyx83BFptazdEk3iMr7maePh4c28CDYxtIjch+DDD5QrD+WA51/C1ufjeE2P1LSAz5jaQzO7m/6yvu75iPVaUqTPx4XK4+Y2JiCA0N5Y033iiqt17qSTIgSiRzc3M++ugjLl26RLt27Xj77bd55ZVXCA8PN3ZoQognaNCgAfv27cPJyYmAgABWrFhBUFAQPXv21Lfx83KmvFczlDYVSAlX5ekjQbWGBNUaUsOPAJASekB/LIdZeUdsvVqSHnWOB3+sIu7QD2TcuEiFxt0Zs2gTjo6OufrcsmULVlZW9O3bt4jeeeknGxWJUmH//v2MHj2aqKgoJkyYwLRp07C1lX3MhSgNAgMDCQoKQqfTEXk3iVe/OsKDY+tJCT2I6/DlufYnKKyD49pS0zn3KoY+Pj68/PLLLFy40GDjlBayUZEoUzp27EhYWBhTp05lwYIFeHt7s3PnTmOHJYR4TrVcytOmZmUqNeuJNiudlP+fASgsM6WCNjUr50kE9u7dS2RkJJ988olBximrJBkQpYa1tTUzZszg/PnzeHl58dprr9GjR49cxUpCiJJvds/6WFrbUn3MWsp5+xmkT3Olgtk96+c53rlzZ5KTk2XVwWeQZECUOjVr1mTPnj1s2rSJ06dPU7duXebNm0dmZqaxQxNC5EN1B1uCXvc2aJ8zX/emuoPcOiwoSQZEqaRQKHjzzTe5dOkSI0aMYOrUqfj4+PDHH38YOzQhxCMCAwPzPA3U39eNCR1rG6T/iR296Ofr9uyG4okkGRClWvny5fnyyy85c+YM9vb2vPzyy7zzzjvExMQYOzQhxDN84FeLub3qY2WuxEz5fMsEmykVWJkrmderPqP9ahZRhKZDkgFRJrz00kscPXqUH374gZ07d+Ll5cXSpUtlWWMhSrj+vm4cHNeOlp7ZjwPqtE//N5uTM7xok8nBce1kRsBAJBkQZYZSqWTo0KFERETQq1cvRo4cScuWLTl79qyxQxNCPEV1B1tWD23G0teqknR2F8428Og8gQJwd7RlcHMPakf+QtSqibxQQbY+NxRZZ0CUWceOHWPkyJFcuHCB0aNH8+mnn2Jvb2/ssIQQT7Bs2TJGjx7NgwcPUFhYcy02hUy1FktzJR6OdthZmQPw999/4+Pjw48//siQIUOMHHXJlt/rtyQDokzLyspi8eLFBAQEUL58eRYsWED//v1lG1MhSqCBAwcSGRnJn3/++cy2ffv25dSpU/zzzz9YWVkVQ3Slkyw6JARgYWHB+PHjuXTpEq1bt+att97i1Vdf1e+iJoQoOVQqFW3atMlX28DAQK5fv86PP/5YxFGZBkkGhEmoVq0amzZtYvfu3Vy9epUGDRowffp00tLSjB2aEAKIiori+vXrtG3bNl/t69Wrx8CBA5k1a5b8OzYASQaESenSpQvnz5/H39+f+fPn4+3tze7du40dlhAm78iR7GWJW7dune/XzJgxg7t377J06dKiCstkSDIgTI6NjQ1BQUGEhYVRo0YNunXrRq9evbh+/bqxQxPCZKlUKurVq5dnx8GnqVmzJu+++y5z584lOTm5CKMr+yQZECardu3a7N+/nw0bNnDy5Enq1q3L559/TlZWlrFDE8LkqFSqfN8ieNj06dOJj4/nm2++KYKoTIckA8KkKRQK+vXrx6VLl3j//ffx9/enUaNGHD161NihCWEyYmJiuHTpUr6LBx/m7u7Of//7X+bPn09CQkIRRGcaJBkQAqhQoQJfffUVISEh2NnZ0aZNG9577z3u3btn7NCEKPNyku+CJAMAU6dOJS0tja+++sqAUZkWSQaEeIiPjw/Hjx9n2bJlbN++HS8vL5YvX45WqzV2aEKUWSqVCg8PD6pXr16g17u6ujJy5EgWLFhAbGysgaMzDZIMCPEIpVLJsGHDiIiI4I033mD48OG0atWKv//+29ihCVEmHTlypMCzAjn8/f1Rq9V88cUXBorKtEgyIMQTODk5sXLlSo4cOUJSUhKNGzfmo48+IjEx0dihCVFmJCYm8vfffxeoePBhzs7OjB07lkWLFsmupQUgyYAQz9CmTRv++usv5s2bxw8//ECdOnX45Zdf8uzPLoR4fidOnECr1RZ6ZgBgwoQJmJubM3fuXANEZlokGRAiHywsLJgwYQLh4eE0b96c/v3706lTJyIjI40dmhCl2pEjR3B2dqZ27dqF7svBwYHx48ezZMkSbt68aYDoTIckA0I8h+rVq7NlyxZ27tzJ5cuX+c9//sOMGTNkOVQhCihnPwJDbR720UcfYWNjw+zZsw3Sn6mQZECIAujWrRvnz59n4sSJzJkzh/r167N3715jhyVEqZKens6pU6cMcosgh729PZMmTeL7778nKirKYP2WdZIMCFFAtra2fPbZZ4SFheHu7k6XLl3o06cPN27cMHZoQpQKp0+fJjMz06DJAMCHH35IpUqV+PTTTw3ab1kmyYAQheTl5cXBgwdZt24dR48epW7duixYsECWNRbiGVQqFeXLl+ell14yaL92dnb4+/vz008/SV1PPkkyIIQBKBQKBgwYwKVLl3jvvfeYOHEi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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import cirq.contrib.routing as ccr\n", "\n", "uncompiled_c_graph = ccr.get_circuit_connectivity(circuit)\n", "nx.draw_networkx(uncompiled_c_graph)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.094469Z", "iopub.status.busy": "2023-11-16T10:15:50.094232Z", "iopub.status.idle": "2023-11-16T10:15:50.269033Z", "shell.execute_reply": "2023-11-16T10:15:50.268445Z" }, "id": "YwtLw63mLzh4" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import cirq_google as cg\n", "\n", "dev_graph = ccr.gridqubits_to_graph_device(cg.Sycamore23.metadata.qubit_set)\n", "nx.draw_networkx(dev_graph)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.272459Z", "iopub.status.busy": "2023-11-16T10:15:50.272239Z", "iopub.status.idle": "2023-11-16T10:15:50.275155Z", "shell.execute_reply": "2023-11-16T10:15:50.274582Z" }, "id": "wSLdPQmwLzh8" }, "outputs": [], "source": [ "# alias for the device. If this notebook were wrapped\n", "# in a function, `circuit` and `device` would be the arguments\n", "device = cg.Sycamore23" ] }, { "cell_type": "markdown", "metadata": { "id": "G79yrP3_LziE" }, "source": [ "### Convert to pytket `Device`\n", "The provided function doesn't work with `GridDevice`. We use existing functionality to turn Devices into graphs to provide a more robust solution." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.278034Z", "iopub.status.busy": "2023-11-16T10:15:50.277779Z", "iopub.status.idle": "2023-11-16T10:15:50.283729Z", "shell.execute_reply": "2023-11-16T10:15:50.283179Z" }, "id": "2E-W4pJBLziF" }, "outputs": [], "source": [ "import pytket\n", "from recirq.qaoa.placement import _device_to_tket_device\n", "\n", "tk_circuit = pytket.extensions.cirq.cirq_to_tk(circuit)\n", "tk_device = _device_to_tket_device(device)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.286548Z", "iopub.status.busy": "2023-11-16T10:15:50.286322Z", "iopub.status.idle": "2023-11-16T10:15:50.291030Z", "shell.execute_reply": "2023-11-16T10:15:50.290204Z" }, "id": "jz5Km8QzLziJ" }, "outputs": [ { "data": { "text/plain": [ "[q[10], q[11], q[12], q[13], q[14], q[15], q[16], q[17], q[18], q[19]]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tk_circuit.qubits" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.293964Z", "iopub.status.busy": "2023-11-16T10:15:50.293743Z", "iopub.status.idle": "2023-11-16T10:15:50.299075Z", "shell.execute_reply": "2023-11-16T10:15:50.298464Z" }, "id": "igPQlOO9LziN" }, "outputs": [ { "data": { "text/plain": [ "[(grid[8, 5], grid[7, 5]),\n", " (grid[8, 5], grid[8, 4]),\n", " (grid[7, 5], grid[7, 4]),\n", " (grid[7, 5], grid[6, 5]),\n", " (grid[7, 5], grid[7, 6]),\n", " (grid[8, 4], grid[9, 4]),\n", " (grid[8, 4], grid[7, 4]),\n", " (grid[8, 4], grid[8, 3]),\n", " (grid[7, 3], grid[7, 2]),\n", " (grid[7, 3], grid[6, 3]),\n", " (grid[7, 3], grid[7, 4]),\n", " (grid[7, 3], grid[8, 3]),\n", " (grid[7, 2], grid[6, 2]),\n", " (grid[6, 3], grid[6, 4]),\n", " (grid[6, 3], grid[5, 3]),\n", " (grid[6, 3], grid[6, 2]),\n", " (grid[7, 4], grid[6, 4]),\n", " (grid[5, 0], grid[5, 1]),\n", " (grid[5, 1], grid[5, 2]),\n", " (grid[5, 1], grid[6, 1]),\n", " (grid[5, 1], grid[4, 1]),\n", " (grid[6, 4], grid[6, 5]),\n", " (grid[6, 4], grid[5, 4]),\n", " (grid[5, 4], grid[5, 3]),\n", " (grid[5, 2], grid[5, 3]),\n", " (grid[5, 2], grid[4, 2]),\n", " (grid[5, 2], grid[6, 2]),\n", " (grid[5, 3], grid[4, 3]),\n", " (grid[4, 2], grid[4, 1]),\n", " (grid[4, 2], grid[3, 2]),\n", " (grid[4, 2], grid[4, 3]),\n", " (grid[6, 2], grid[6, 1])]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tk_device.coupling" ] }, { "cell_type": "markdown", "metadata": { "id": "ci-ctyWgLziR" }, "source": [ "### Placement and routing pass" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.302074Z", "iopub.status.busy": "2023-11-16T10:15:50.301852Z", "iopub.status.idle": "2023-11-16T10:15:50.305446Z", "shell.execute_reply": "2023-11-16T10:15:50.304866Z" }, "id": "XFqDGhq5LziR" }, "outputs": [], "source": [ "from pytket.predicates import CompilationUnit, ConnectivityPredicate\n", "from pytket.passes import SequencePass, RoutingPass, DecomposeSwapsToCXs, PlacementPass\n", "from pytket.placement import GraphPlacement" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.308098Z", "iopub.status.busy": "2023-11-16T10:15:50.307842Z", "iopub.status.idle": "2023-11-16T10:15:50.749184Z", "shell.execute_reply": "2023-11-16T10:15:50.748626Z" }, "id": "Rws7DjwQLziU" }, "outputs": [], "source": [ "unit = CompilationUnit(tk_circuit, [ConnectivityPredicate(tk_device)])\n", "passes = SequencePass([\n", " PlacementPass(GraphPlacement(tk_device)),\n", " RoutingPass(tk_device)])\n", "passes.apply(unit)\n", "valid = unit.check_all_predicates()\n", "assert valid" ] }, { "cell_type": "markdown", "metadata": { "id": "IGw2STFBLziX" }, "source": [ "### The initial mapping\n", "This maps from logical LineQubits to \"physical\" GridQubits" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.751966Z", "iopub.status.busy": "2023-11-16T10:15:50.751744Z", "iopub.status.idle": "2023-11-16T10:15:50.756056Z", "shell.execute_reply": "2023-11-16T10:15:50.755491Z" }, "id": "bKh-ZXE-LziY" }, "outputs": [ { "data": { "text/plain": [ "{q[10]: grid[5, 4],\n", " q[11]: grid[6, 2],\n", " q[12]: grid[6, 4],\n", " q[13]: grid[7, 4],\n", " q[14]: grid[7, 3],\n", " q[15]: grid[8, 3],\n", " q[16]: grid[7, 2],\n", " q[17]: grid[5, 2],\n", " q[18]: grid[6, 3],\n", " q[19]: grid[5, 3]}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "unit.initial_map" ] }, { "cell_type": "markdown", "metadata": { "id": "nfuiEUtZLzia" }, "source": [ "### Bookkept initial mapping\n", "We \"decode\" our tket conventions back into Cirq idioms." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.759197Z", "iopub.status.busy": "2023-11-16T10:15:50.758823Z", "iopub.status.idle": "2023-11-16T10:15:50.764125Z", "shell.execute_reply": "2023-11-16T10:15:50.763593Z" }, "id": "GguVHRklLzib" }, "outputs": [ { "data": { "text/plain": [ "{cirq.LineQubit(10): cirq.GridQubit(5, 4),\n", " cirq.LineQubit(11): cirq.GridQubit(6, 2),\n", " cirq.LineQubit(12): cirq.GridQubit(6, 4),\n", " cirq.LineQubit(13): cirq.GridQubit(7, 4),\n", " cirq.LineQubit(14): cirq.GridQubit(7, 3),\n", " cirq.LineQubit(15): cirq.GridQubit(8, 3),\n", " cirq.LineQubit(16): cirq.GridQubit(7, 2),\n", " cirq.LineQubit(17): cirq.GridQubit(5, 2),\n", " cirq.LineQubit(18): cirq.GridQubit(6, 3),\n", " cirq.LineQubit(19): cirq.GridQubit(5, 3)}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def tk_to_cirq_qubit(tk):\n", " ind = tk.index\n", " return cirq.LineQubit(ind[0]) if len(ind) == 1 else cirq.GridQubit(*ind)\n", "\n", "initial_map = {tk_to_cirq_qubit(n1): tk_to_cirq_qubit(n2) for n1, n2 in unit.initial_map.items()}\n", "initial_map" ] }, { "cell_type": "markdown", "metadata": { "id": "YPeQtWPOLzie" }, "source": [ "### The final mapping\n", "This maps from logical LineQubits to final GridQubits" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.766866Z", "iopub.status.busy": "2023-11-16T10:15:50.766635Z", "iopub.status.idle": "2023-11-16T10:15:50.770843Z", "shell.execute_reply": "2023-11-16T10:15:50.770328Z" }, "id": "TMe1ZunmLzif" }, "outputs": [ { "data": { "text/plain": [ "{q[10]: grid[5, 4],\n", " q[11]: grid[6, 2],\n", " q[12]: grid[6, 4],\n", " q[13]: grid[7, 4],\n", " q[14]: grid[8, 3],\n", " q[15]: grid[7, 3],\n", " q[16]: grid[7, 2],\n", " q[17]: grid[5, 2],\n", " q[18]: grid[6, 3],\n", " q[19]: grid[5, 3]}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "unit.final_map" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.773816Z", "iopub.status.busy": "2023-11-16T10:15:50.773361Z", "iopub.status.idle": "2023-11-16T10:15:50.777758Z", "shell.execute_reply": "2023-11-16T10:15:50.777232Z" }, "id": "utRI3lcBLzii" }, "outputs": [ { "data": { "text/plain": [ "{cirq.LineQubit(10): cirq.GridQubit(5, 4),\n", " cirq.LineQubit(11): cirq.GridQubit(6, 2),\n", " cirq.LineQubit(12): cirq.GridQubit(6, 4),\n", " cirq.LineQubit(13): cirq.GridQubit(7, 4),\n", " cirq.LineQubit(14): cirq.GridQubit(8, 3),\n", " cirq.LineQubit(15): cirq.GridQubit(7, 3),\n", " cirq.LineQubit(16): cirq.GridQubit(7, 2),\n", " cirq.LineQubit(17): cirq.GridQubit(5, 2),\n", " cirq.LineQubit(18): cirq.GridQubit(6, 3),\n", " cirq.LineQubit(19): cirq.GridQubit(5, 3)}" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "final_map = {tk_to_cirq_qubit(n1): tk_to_cirq_qubit(n2)\n", " for n1, n2 in unit.final_map.items()}\n", "final_map" ] }, { "cell_type": "markdown", "metadata": { "id": "4wGb_vbYLzim" }, "source": [ "### The compilation unit applies the mapping\n", "So our circuit qubits are now GridQubits" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.780442Z", "iopub.status.busy": "2023-11-16T10:15:50.780226Z", "iopub.status.idle": "2023-11-16T10:15:50.784277Z", "shell.execute_reply": "2023-11-16T10:15:50.783751Z" }, "id": "VYFQpNXsLzim" }, "outputs": [ { "data": { "text/plain": [ "[grid[5, 2],\n", " grid[5, 3],\n", " grid[5, 4],\n", " grid[6, 2],\n", " grid[6, 3],\n", " grid[6, 4],\n", " grid[7, 2],\n", " grid[7, 3],\n", " grid[7, 4],\n", " grid[8, 3]]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "unit.circuit.qubits" ] }, { "cell_type": "markdown", "metadata": { "id": "JTAFgW8uLzip" }, "source": [ "### Convert the circuit back to Cirq" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:50.786938Z", "iopub.status.busy": "2023-11-16T10:15:50.786724Z", "iopub.status.idle": "2023-11-16T10:15:51.721097Z", "shell.execute_reply": "2023-11-16T10:15:51.720525Z" }, "id": "0nIM0-VaLziq" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "data": { "image/svg+xml": [ "(5, 2): (5, 3): (5, 4): (6, 2): (6, 3): (6, 4): (7, 2): (7, 3): (7, 4): (8, 3): HHHHHHHHHH××ZZ^0.721ZZZZ^0.721ZZZZ^0.721ZZZZZZ^0.721××××ZZZZ^0.721ZZZZ^0.721ZZZZ^0.721X^-0.005ZZ^0.721ZZX^-0.005ZZZZ^0.721ZZ^0.721ZZZZ^0.721ZZZZZZ^0.721ZZ^0.721ZZX^-0.005X^-0.005X^-0.005ZZZZ^0.721ZZZZ^0.721X^-0.005××X^-0.005X^-0.005X^-0.005X^-0.005ZZ^-0.99ZZ××ZZZZ^-0.99ZZ^-0.99ZZ××ZZ^-0.99ZZZZZZ^-0.99ZZZZ^-0.99××ZZZZ^-0.99X^0.705ZZ^-0.99ZZX^0.705ZZZZ^-0.99ZZ^-0.99ZZZZ^-0.99ZZZZZZ^-0.99ZZ^-0.99ZZX^0.705X^0.705X^0.705ZZZZ^-0.99ZZZZ^-0.99X^0.705X^0.705X^0.705X^0.705X^0.705" ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "routed_circuit = pytket.extensions.cirq.tk_to_cirq(unit.circuit)\n", "SVGCircuit(routed_circuit)" ] }, { "cell_type": "markdown", "metadata": { "id": "afZSGet3Lzit" }, "source": [ "### Now it's nice and compiled" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:51.724264Z", "iopub.status.busy": "2023-11-16T10:15:51.724041Z", "iopub.status.idle": "2023-11-16T10:15:51.878924Z", "shell.execute_reply": "2023-11-16T10:15:51.878339Z" }, "id": "wsT08hz4Lziu" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "routed_c_graph = ccr.get_circuit_connectivity(routed_circuit)\n", "nx.draw_networkx(routed_c_graph)" ] }, { "cell_type": "markdown", "metadata": { "id": "XoWLNcPELzi5" }, "source": [ "### Check that circuits are equivalent" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:51.881862Z", "iopub.status.busy": "2023-11-16T10:15:51.881644Z", "iopub.status.idle": "2023-11-16T10:15:51.885015Z", "shell.execute_reply": "2023-11-16T10:15:51.884452Z" }, "id": "gElylkOxLzi5" }, "outputs": [], "source": [ "for op in routed_circuit.all_operations():\n", " if len(op.qubits) != 2:\n", " continue\n", " a, b = op.qubits\n", " assert a.is_adjacent(b)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2023-11-16T10:15:51.887821Z", "iopub.status.busy": "2023-11-16T10:15:51.887609Z", "iopub.status.idle": "2023-11-16T10:15:53.007911Z", "shell.execute_reply": "2023-11-16T10:15:53.007136Z" }, "id": "QXULkstkLzi8" }, "outputs": [], "source": [ "import cirq.contrib.acquaintance as cca\n", "def permute_gate(qubits, permutation):\n", " return cca.LinearPermutationGate(\n", " num_qubits=len(qubits),\n", " permutation={i: permutation[i] for i in range(len(permutation))}\n", " ).on(*qubits)\n", "\n", "final_to_initial_map = {final_map[cq]: initial_map[cq]\n", " for cq in circuit_qubits}\n", "initial_qubits = [initial_map[cq] for cq in circuit_qubits]\n", "final_permutation = [initial_qubits.index(final_to_initial_map[q])\n", " for q in initial_qubits]\n", "rcircuit_with_perm = routed_circuit.copy()\n", "rcircuit_with_perm.append(permute_gate(initial_qubits, final_permutation))\n", "expected = circuit.unitary(qubit_order=cirq.QubitOrder.explicit(circuit_qubits))\n", "actual = rcircuit_with_perm.unitary(qubit_order=cirq.QubitOrder.explicit(initial_qubits))\n", "cirq.testing.assert_allclose_up_to_global_phase(expected, actual, atol=1e-8)" ] } ], "metadata": { "colab": { "name": "routing_with_tket.ipynb", "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.18" } }, "nbformat": 4, "nbformat_minor": 0 }