{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "married-breast",
   "metadata": {},
   "outputs": [],
   "source": [
    "# voicebank, vctk: 44h, 109 spks, british accent\n",
    "\n",
    "# spectral map\n",
    "# 2mins per epoch, ~30 epochs gets 2.65 pesq\n",
    "\n",
    "# mimic loss\n",
    "# 10mins per epoch, ~50 epochs get 3.0 pesq\n",
    "\n",
    "# metricgan\n",
    "# 30mins per epoch, ~600 epochs get 3.15 pesq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "forced-indie",
   "metadata": {},
   "outputs": [],
   "source": [
    "## Tutorial\n",
    "# https://colab.research.google.com/drive/18RyiuKupAhwWX7fh3LCatwQGU5eIS3TR\n",
    "\n",
    "## SpectralMask\n",
    "# https://github.com/speechbrain/speechbrain/tree/develop/recipes/Voicebank/enhance/spectral_mask\n",
    "\n",
    "## MimicLoss\n",
    "# https://github.com/speechbrain/speechbrain/tree/develop/recipes/Voicebank/MTL/ASR_enhance\n",
    "\n",
    "## MetricGan\n",
    "# https://github.com/speechbrain/speechbrain/tree/develop/recipes/Voicebank/enhance/MetricGAN\n",
    "\n",
    "\n",
    "\n",
    "## Sepformer\n",
    "# https://github.com/speechbrain/speechbrain/issues/499"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "instructional-acquisition",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.environ['CUDA_VISIBLE_DEVICES'] = ''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dental-drinking",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torchaudio\n",
    "import numpy as np\n",
    "from pydub import AudioSegment\n",
    "from scipy.io import wavfile\n",
    "from IPython.display import display_html\n",
    "\n",
    "def convert_array(arr):\n",
    "    if isinstance(arr, torch.Tensor):\n",
    "        arr = arr.cpu().numpy()[0]\n",
    "    if \"float\" in str(arr.dtype):\n",
    "        arr = np.floor(arr.copy() * 32768).astype(np.int16)\n",
    "    return arr\n",
    "\n",
    "def play_array(arr):\n",
    "    arr = convert_array(arr)\n",
    "    display_html(AudioSegment(\n",
    "        arr.tobytes(), \n",
    "        frame_rate=16000,\n",
    "        sample_width=2, \n",
    "        channels=1\n",
    "    ))\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "chubby-friendly",
   "metadata": {},
   "source": [
    "### cloud model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "nominated-leisure",
   "metadata": {},
   "outputs": [],
   "source": [
    "from speechbrain.pretrained import SpectralMaskEnhancement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "tracked-america",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                    <audio controls>\n",
       "                        <source src=\"data:audio/mpeg;base64,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kjbn+qnsGhHcSPIYAVi6zpo8GvzvdoCo908dWAY0Ot0f//+pJEELS3Yhg76jYAXZMGGFpYyRgl6VnA9z6AnoOA7koHqK2CUVYn0iMjhxWJgU//M4xOcXIO5UCssHBMOzeQIs6oHyr3qg5flyyjYZ0oBWAC60wQ2ucJybX/+nOeKP2UN/9n/V/06lCCzSgvLXicHQEwBCckK7zgLuLiPq9LmsDFCqd07S2oO0E5NhCghkYggQrTC6tGWtvVec//M4xOkXMOZUCsPSxGY4Z75ZJ1u0hP52q5RmFwzS73cdFMVaOIioOl1LUNOg4p7BZu2pNH/s/oVMQU1FMy4xMDBVVVUCq/l2Cr4vUFnIS050oc7hmWQYzkoTdQHy4swJoVRZ04TQQgRIhZ8v//M4xOsWINZQBs4MdIqgPLJybwOiEN4xmlSEN9S/9n/rO8UT6f+xlC/vqVhSYBnTerFZGzMfuARY0UMthYBBYqrDQ6Egm/CiQWJSbSkByQ4PEUUVVF6Fuy2KeTVIm26GaVQhATrXQ1mDQ1SC//M4xPEXYS5cNsMEzOF3Y2+udfb+aNto6w1zqFTUJZ7/pD+1Mgn7c9HdmHQrpgG5kZsinIVTKE4vQOaFM+xTNEtJ879l+FfP/Lz/8vwZgYmFw+92x4cuXlEA5LrtgPWtIK4RCOJW2rwsKXPl//M4xOYRcKpsVkvSMJVSUpxKBxV6Ub4StZp1Ip3kmIiqF5pn9sqijpXWmK8vd6K8ClxiYbze7V4rJGC9PR02dfVsMK2bTXnH86+sXWX2nZT712crM9eB7Wq8/SjtLIEg0E0/SUhxZtMWplUY//M4xP8jMq5AAMsHLEDfeqPVufPXi/ydEDQcGWx7RuMYxSoh4iSx/URpFT0h7WjbYk8uiuYVPEVw4QcqgCHKKizk/lc3FifEqXoaGvcMRpLVL2fcFZn1dmMm7DmMb27BipK1pXob/T/0f/qX//M4xNEj0wJ0XnsNHa7IKKVmQCBiXBp4ikhE9R7grWCgVO/pxKVnVVSATw4yZOUuChSjMiKATLDuwgiB2gEFQJUrgJBNBbdesvh1yY4SpAqJCZoKhlAyITyJql2GrAISBwkKhk661a1AKg0b//M4xKAW0hpYDHjFJAF5L//0f/9CAdpQTU0W20CrlWJdGmUTkSYJKC6CmFfIQZaMTapUSlAyCakkSRoopNSUhUVJD2f8CimBRUWR/u/FW9YqxP/X7P8X6mddTEFNRTMuMTAwVVVVVVVVVVVV//M4xKMS6LosAE4SGFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//M4xLYRKKXwFjPMUFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\" type=\"audio/mpeg\"/>\n",
       "                        Your browser does not support the audio element.\n",
       "                    </audio>\n",
       "                  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "enhance_model = SpectralMaskEnhancement.from_hparams(\n",
    "    source=\"speechbrain/metricgan-plus-voicebank\",\n",
    "    savedir=\"/data-ssd-3/georg/tmp/sb-models/metricgan-plus-voicebank\",\n",
    ")\n",
    "\n",
    "# Load and add fake batch dimension\n",
    "noisy = enhance_model.load_audio(\"tmp/bg_noisy.wav\").unsqueeze(0)\n",
    "\n",
    "# Add relative length tensor\n",
    "enhanced = enhance_model.enhance_batch(noisy, lengths=torch.tensor([1.]))\n",
    "# enhanced = enhance_model.enhance_batch(noisy)\n",
    "\n",
    "play_array(enhanced)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "frequent-democrat",
   "metadata": {},
   "outputs": [],
   "source": [
    "# enhance_model = SpectralMaskEnhancement.from_hparams(\n",
    "#     source=\"speechbrain/mtl-mimic-voicebank\",\n",
    "#     savedir=\"/data-ssd-3/georg/tmp/sb-models/mtl-mimic-voicebank\",\n",
    "# )\n",
    "\n",
    "# noisy = enhance_model.load_audio(\"tmp/bg_noisy.wav\").unsqueeze(0)\n",
    "\n",
    "# enhanced = enhance_model.enhance_batch(noisy)\n",
    "\n",
    "# play_array(enhanced)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fifth-bottle",
   "metadata": {},
   "source": [
    "### local model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "id": "nervous-palmer",
   "metadata": {},
   "outputs": [],
   "source": [
    "# use generic interface\n",
    "# NOTE - had to add: `pretrainer: !new:speechbrain.utils.parameter_transfer.Pretraine` to yaml\n",
    "from speechbrain.pretrained import Pretrained\n",
    "\n",
    "enhance_model = Pretrained.from_hparams(\n",
    "    source=\"/data-ssd-3/georg/tmp/sb-models/spectral-mask_4234\",\n",
    "    savedir=\"/data-ssd-3/georg/tmp/sb-models/test\",\n",
    ")\n",
    "\n",
    "noisy = enhance_model.load_audio(\"tmp/bg_noisy.wav\").unsqueeze(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "id": "european-event",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cpp = \"/data-ssd-3/georg/tmp/sb-models/spectral-mask_4234/save/CKPT+2021-03-17+18-29-07+00/model.ckpt\"\n",
    "state_dict = torch.load(cpp, map_location='cpu')\n",
    "enhance_model.modules.model.load_state_dict(state_dict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "id": "nasty-relative",
   "metadata": {},
   "outputs": [],
   "source": [
    "# implement non-standard wrapper similar to SpectralMaskEnhancement (find info in train.py)\n",
    "from speechbrain.processing.features import spectral_magnitude\n",
    "\n",
    "def _compute_features(model, wavs):\n",
    "    feats = model.hparams.compute_STFT(wavs)\n",
    "    feats = spectral_magnitude(feats, power=0.5)\n",
    "    return torch.log1p(feats)\n",
    "\n",
    "def enhance_batch_generic(model, noisy):\n",
    "    noisy = noisy.to(model.device)\n",
    "    noisy_features = _compute_features(model, noisy)\n",
    "\n",
    "    mask = model.modules.model(noisy_features)\n",
    "    mask = torch.squeeze(mask, 2)\n",
    "    enhanced = torch.mul(mask, noisy_features)\n",
    "\n",
    "    return model.hparams.resynth(torch.expm1(enhanced), noisy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "id": "medical-marijuana",
   "metadata": {},
   "outputs": [],
   "source": [
    "out = enhance_batch_generic(enhance_model, noisy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "id": "resident-glasgow",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                    <audio controls>\n",
       "                        <source src=\"data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjgzLjEwMAAAAAAAAAAAAAAA//NYwAAAAAAAAAAAAEluZm8AAAAPAAAA8gAAZswABAcKDA8RExYYHB4hIyUoKi0vMjU3Ojw/QUNHSUxOUVNVWFteYGJlZ2pscHJ0d3l8foGEhomLjpCSlZebnaCipKepra+xtLa5u77Aw8bIy83Q0tTY2t3f4eTm6ezv8fP2+Pv9AAAAAExhdmM1Ny4xMAAAAAAAAAAAAAAAACQDMgAAAAAAAGbM8z5xLQAAAAAAAAAAAAAA//M4xAAN0FpstnhEJCAgSeAVh3lzUdtPGOrhAARhwMWfE7wQdg+feXf4Py8HPk5CqUdg/6gxP/1n//ynifwQhh/+D4fVJIkqBsLdAVGlvXlhcXULxKstYqRWEg2JfCM7hgCxlJiRMo0c/QmK//M4xCcWmeJsIsMGFCYeQiBvKStcRlfNSQzzj/3pOf+1PMyeJJvDyELC4PjU7xyC+zvU5EYCDLJNBt5vWhkMYooO+a2SWOyYIcTR/PH2RPLWmmrTA5ZYBZAFPNMiEms+5gQRl42kIhye0j7Z//M4xCsZIeqRvnmGPRKKk6dLIPEVVM0Zgivl/Tz4a1jPu9SXOTUsuqYlGNzgUOkgVoP//9iaz19ktEG+vey5xl/JQHetnAoOSKa3V2Sy8FsWxmithWykyKp+fIo3qpUaVs00wn4ptRzYd7Iw//M4xCUcI0KaXmGG6OKuNxIlnQps9QGUMzp35dSoVx2COlYJVuRInWd6ff8zSkfD/hk6Er5SzMrG6SH/7f+RkZHlscp+qKUCgqcUi0NdPeYNqZOxxcYThEoF3WXbX7XXYBZU0czJPKcK3sYS//M4xBMYwUaaXkmMJUenpdjYhceUpZh7VtOXk/dtZV9qdHq/SIKh8NNNlCfT1uyi68HYyVDApDqkp9+ycyO5omSWtxE0dx+7fz3OmZw73elLgBahGdl5o7X/RB6US+gCKf6qJPmOEkgsJWed//M4xA8Ygv58KnmGPWg4g3B7DdMPSSu22FKeiadRKHp1zKZO7ixd8oPTqWlHt4byOZXtkuxZFk+5wo+z7vC6e+7n195z8v///+//3d9NM7IR7xKL3Op5ziYQlbahwLvXBhQdlpQoDy9YwppO//M4xAwWkPaRtGGGPEJFB6o7NOXbKnP5w5im5OhYQm8qOEc8jhp6SAWIw5gQFQ8ck61P9SDkcQJFhUaFiQoEEHQuZj49f/I9Ao2eCYNFSRsFSwXYTQECx4XPhCoESuSFdPxki1mfx6w4c7HH//M4xBAYed6M6nmGnGoDSGC2hSfJWUe7RPQa4pC3KhdWXft366IFKk0aTw/YeP6lNzhXTbd966JXb0yUy/+9kypgsYZWPVUg/8kb1QimcPmBU+wclB1zkIDxUQiMixMEqhhqwOBWsqacobqE//M4xA0YUuqQ9HjE/eW2J2ytTG6bGd9HhbzG76wmhtgQvDIdVVUmhqXxmXCqoNc2parxiOHZxvnxm189s4qrPjP7N9KtFaUBK2pq//+lf7V6tbVDe5Sm0DCpnhTwr7lQWZUaaywOpbm5QJBQ//M4xAoXAQJ0TMJGFCLyKM0SzbJkdejD0lOLGTruEE0MEIhbJcyJ0NGN4ZIw5x0lBMEDCxIcEJdRwAn3PcPaDg+OfJvFQTAQQB1QdBJDPWls5KQ9oqdyooTHh5FLy+t19DvGsVp1sVVJNw1n//M4xA0X0fKEKnmGUMAnABbBd22lYm1FID/1QG6+WTny7uYdohgA1/N4nyEyEec0w4uA2AwsEQIAEP+YRXcIIiVFbPgRwRmDAgEAaVoh/XaJ5dBNJpB6q1UhXSICjvuVJBZJjNAOYetpxabU//M4xAwWWYqJqnmGMAipdkeDYSYUTmyJhY1Nel5Mr/2IjON5Z6kSAjATJmFGfP8y1hxYZeBOq1IzCmXSdCbSSXqFg8eYKyWWa9MSua5p5m1H1B2hBMRpa+JSKnulLalE6EAkJxmR0rcnyh8L//M4xBEV2XqVvGGGOKHIRKe5RjK1kVr5qdgwWQAIPDe0f4X7wMCKJUX/6hkvOmztb6rEyBvUOMnYrEDEoOnHbxbhexzQuXfTTej6nlBS4pQGAfN1NBGlYBNAdLkrD+joHYlfJXolRskf6a/V//M4xBgXQyKJknmEPc1STV9PDbhVRdS+toIxxNHtmQwNCMvQzuv3ehyLa6tvSkv7b1Z5db+iPWXp7amf7p1ZWlNQwo2qGCorGtKVgJ84kJG4iwSm2oUKQfhNgaB/PyYlJqOLLXTdBTZOobu2//M4xBoU6O59kHmGHHE/JFIkd4XwydoFDhhCBCwDwzoYsXScDpZAYYIiN/GsxrEy7HL1GNT6x84kPzBguWQogcQOrFb3m1IIYqSO9omiVQiG37geBbbniaOrnXUIpkMXGEV/Sv04Og56f/C8//M4xCUcCi6JsnjSvZ4SAA5EgNKanucOv9c0cbQICdZHSc5tyQJwuf8NjUs2EMfCCYB1gxiRdZBBJyO8TOJuel0zP/tXz0SvPgpbeGI/ot8nlj0cAxE/xFVAJW2dqQcDwkUYh10bECAkQOsn//M4xBMXQgKhskjM7Nb891AkxBwNwgAIlcjQmP0kTKI5mkzIMzk9ggQy9aCBoXshaRjNbQxiGb4j+z7iP/d/6zfxEfg+mZaa+XpQ4H3yH//3MutJFsKpltm2/+tklADjtvMsjASApA/yHhDx//M4xBUZwfr6XnmQ1tbt4fioV6OSC25tTIiUZ4OQSOtfvFPohiDeU7jGQyG1kFplrNWTWQNJxAPgLg+EVkB2WHDRDtyeQa9P1zaRE/XdcLdVdxRArIf8owoXPMU8+ipFplZ3d41tt4A/uGyU//M4xA0YEdcfHssQa4W4IRxEOcORsHJ7LWZMBpVESykzeq4wyXyDW5hJ7in0EpTWk/3fC9Ro6jJoaPmR8JYqxAykgdHRYbJxw0Rl3Ir5ifh/6PSsepEXuMD9K2p//7u/FWYS3LbCiXAl3vB7//M4xAsUqZLuXHpGcgRCgKQVoSYQBY6wiFJlNEcBFdPGsl9JZMRUDDJwymDZ9jmcprv//f1YAD7C01VHLpOez0zasiiCNGDQGMgkPEIkFhoNpo/w0kSFG5gBUAt65OYSFLLpD0gCnTpBI9BV//M4xBcVISLZtnmGjtSSD4cTLRS22xMseUMp+VHfo2fIBnI//9MtUMUdCrGFklUHXBNILFitrFlhyTojDw0AuJLTQWv//7fULO6aipism9bjltEtMU4txejxWclWlFQlvDn1iuWRm+H/KBFR//M4xCEV+hcCXnjEzgMFavrK1c2vOfTVQbFkMbqzf7mLPMbcpPp6t991LP1XjLDHybLjgRPiQmXem58RlxzmMUcQJDMEJ227kVKMe8caYXLgwwmsW04deDh7jddb//mJ04YWX3ifOsKNWZC5//M4xCgdqzbNtnhY/NinmjSZqpf4dostZwvfMz0/NGbWp1t6PqZSsz1/6aXmDaVgiVrGO84JjF/shHqGIiTi6dD4aIRIKzvHB2fpzaIUAYWnzik6PFButXYyfsJu72YiZ28ZUolYKJUZtYdb//M4xBAXGz7mfhiZPV/s+fk2RU90hLalk/9fJuYy0X/7/0/2////0/0Vla32TLKVbmRgQurGOUlTE6LqCP22KhqjLr+nhAcYhMD1a+gn90txUYtHBrY/YfHVt33aHZ9bLgAHDRzSxFGY5DDa//M4xBIU4jLyfEBHThSjDaGZTi53mwULusFM+pbaRDZkUAHYVzFRmsjDzm685yxGVmzlsDKKh3JIZH5Se2eevdfCjf//6ZZ4TAQkdKvalXbrbrtbZfEvG4TSadiGvJ5yXUIexfU8gwKbEwtd//M4xB0VAYreXGDEsstjcwGrsxtPDQ2+t5myOiFXdZC/Ut0Sj5jPuQCYHALBo69glCT1eRfrO+WeoO1nkCL/5UNZYktyV667W6S2EoUBUkruHEa9w4WiUQMag+ttprbIgGCEgGwgJTJ7gHPr//M4xCgVST7mXDJGNvwuuZX8nwkfQzoI61gRQfhEgDg8+GLtpQ1+Xz/UcaxLJTWf1g+D/HBgEOUrD6py62+/W22RMZoDbBiiCuHhOpkdPka+tCGKMBS2D/wzTwiM5LLOz532OMGKhkFYyUfk//M4xDEV8ncCXhhG+1FKygSsCOx/7kSmsxxab/ZT7/n54nhZEewNU+t34m/CijSXgrlu7gGnZVJEgWQMT0TATANBHokDISSIW9/OoE+j2pQKyseqfUeOm/EAC5YVN7ng2plHfy2QI8H1BEc6//M4xDgUQP7KXAvGGF6z/xUcHyhzD98ZB8+4cKL09W/vU+szEpEBgQyNjDBU4fGuFQc5fjlUgee9hgsCFp6DZXLG52U5T7vOjLWxtYz6tZmf/d//vvIZ8s7LNiD4mZWtsULsEYJvRvIBQyu9//M4xEYbOfrKUovSNUKOhahmLdCACKQMNoFamgJUSUSA8sSOFYNr62knDExW1EAH9sZ3+WMBRLJCUJ/GlPVGodAM0o1n9WC1NUXUpdxwRmirpKW9W2NV5vQ98/eMbe1go3po5h9W74SzJJqJ//M4xDgVAeLeUniMtRxhpWxmqOkgBnAIGYKNpIwHDUKkKOJbDvjeWXGFOSSAXKITMSEqlYVJo9YEkYQ8umq0q7MTWtbRquqC02xLuJXQZxLFgaeRbIiIGp0RSrs6VSsZIkZYRHjueypZ6cbJ//M4xEMUYMLRFjJQKnwWpRSShVRIWhoKioShtQpHXdZLJK7QFiJuK+KsbC05JyR6yiTF0DHcauynLIu3NWg1y0yXIEhG4ImNAWTLRod5VYybe7e7kY7J3m33ZKPFPGCJIJsfg//7tiBVxWOr//M4xFAU2eamXkjEvE6sUapJkDQGjBLGxFsZSFrSgkBjgg1IhKBhBOldyVXzCZmfC0xplE523MzIhiWAAxIgg+FxZZgXWFgyUGoGmRzoZXaGAQMOoHb/3MWxvKOUka2GK3aUn5TrVnh4eHiN//M4xFsVQQaMTHmGTL67/in5L3/NZ2tvyr5lZt6EPSatiF4LGDUqFNLij/xCN2mST8cg65wz48Cx4wXjpi1HF10JTVerp14TOzRIPDwOAFB2L4uqKl2SKsKOLlIjiiDj4YUquYV76LM5+P/6//M4xGUiIh8HHsMQ7o4RLkQzz7LBuH5hANAgRBQUR+lyo6QSwIDyEnYK+pu6J0Wh+ndbbtttY7aBrHgwlPxv0UF1mg7DqsYa01JkQ5nglIB9C4qiePl3/KYtQtYzjK2rV+2Zxc8YxSuKYjFp//M4xDsfWh8CXsMQnvJoCi+IpYMlvLkZ7V15jupeObmoOdYZjpW4/r/e/56+K9AWGTeWHYoMxFDkYOUsAB0PmlJB8chdRhrwiLHAfD/l/bVOOW67RtJOUHGoCJ4xbCtTdIL9qd57bA7GzSzh//M4xBwbezr2XhhM8+/MfMTh/LbPuHKvHon2QMaN/lNi6f5Xz7U2sCLCzAsHSJpiYetzTDRU6dr7bZ//vt4f9o3/PpjZEYuf6szPdFk22Hj3ngtnT5dveyEGnEIhWB6W2ya2xEAqAAdgOkZG//M4xA0X+x7mXBlNz8TsFEdlYlELhAL4ZmD1rlwrSO/mWi4zNmzyd8pekTdKSFlbkqdDPPP1yugkZSjhAIlaeh3jLrT//oVDWq7s7yoWpyuysRBt971pRzzDZWSJfkJ1l2132saAFgcHzNio//M4xAwS+druXDBG4mk9yEottRG0NWoszaGZkiBlNSn9v/blUK1g7NJf+eWqQqA+tjnzZLf/+3hK8OooUYIhI5in9Gn6NOtf724EPzKr3eys3L+SDk4jeWryWIYBwDk8Gg6DgJBwYXffpSjj//M4xB8VGgr3H0wQAJs3+gIQYquqXCq9Umb8lla6GXSf/92lXK0yt//o+Z1oyiHMVJqKGAqPsX871PPK/xVGJRS1lQg4HBrBFWGQ0JXsABprscmA636sXcw2U8hkRSJoubA5zcSZSuZNIlqU//M4xCkfoiLlv494ANXc5o6jcmx8zf/95rMJWSVnvme8d5TDxcqNXt1MyxsSfP3qlL13Rsqo5Y16x29meR7Y1/n5dvIEG95MageNmsGa2M7p//9f9jpGiC55zwZNObqGN9ClTMR//bu4+qug//M4xAkT+LL2L88YAjQV3yiz4foaQNiZt8kgN0yU403zWIlrDZawQUWgNVUEde6HosDRQKqct810KBsEg0FRctWhwuxP6v9rB1KK2+vdyMr8Og1Wqabkeoq7im5MDvi9vJSgNVClFscC4ZEM//M4xBgVEJLttnpMhpENBofXqp9ka5FCxMDRoFSsZBt5TWVCRMKkyIDF2GEsQZHiuEEBwYwWFmU//HGgLco/+/s2LvwEwF4JiCoEXb0AA38Z8CCVUrYpDxJzVvJiA4tEMLJbvJV614mCPR7p//M4xCIVYdbJHnmElGuWRR9Ocv5jVsrfmvQUGynb90sCptZi5kBla4lSnBDuZjBjLJLz3+I8NRjbfrMo9XYorooE4aIoAAoAdOB6IxYuPSOxOCUDpitWutNHvPV1laOrq8UTWIIJCMrjUahh//M4xCsU8WqtPmDE7O/3lJn0f9QEsxnlEzGm2MYwY7DqiwFTEolInRK5YKuf/vUFXCVbZK2qQnE6Iojq/DQ3Bj1cFxCRHB6bSQ1KgVtloL76EaEMdTpXn/PKl+lRSCEtMoFTM4s1Kzqpwsz7//M4xDYU2YpsAMJGTEZwkLgpSHnKeZLThgt1Nbjhh9t5AWfcGF5p9rNtFQSUpEkowJAFyqURDhTYxClhDMQR7oPnb/1r02buU8lGsSJApKSrRJAZdPneu9EWQWOvDpYkShkJN2Dzow+6mtSh//M4xEEVCQaBHHgMYMRSsY1mMX//SgNhc8LDkMGXLueqTdBhMgFL2ARzFo1xodegg82CglI0BHKDaxJdR0q5lFOE9LeHWGz41rmxwQmSUynsaZv980wlBAEHF1KWs23jDgowMIpu2aXS7iHo//M4xEsTaW50AMJGHOrwvVtELLwV8l49Zzi5qgviENxKBDEMVrEXM3jwG4JAGD8kLH05nGzHNNWOMHAIEwkEx0SFK4kCQWGO5DP80XnOchF0ajyKH3OdHRgmAb690RtdsgoQPiYfMRXEBR+Z//M4xFwXQdqgAHsK0adgshzodSwl0MIpXNaSHOXBLo4TUbppA2lHCaEQNEJLfuM3ToqmpRplE8ZAy1JELazto+htWf06I7QzFMxhShhnXArPPqS6OTFOZbV6lHJP+FOwwzOVS5UBJm0hYRhl//M4xF4SoWawAHpEzcKtRaFQVQgqMcOMpHyr2dUuqqw/pdvSMmY2sY12Y4ZH6oDjA2oY+qLi55R8KLGON1fzoQijna3ezqRF3lDU28XpcraH8kIGYEEY1eK+P96p2dgcEWzLD+JJiELKIRd2//M4xHIVAVqkXnpGSJ2eLPoHChAbBEPgQ4cLg+UBD+J7wHKUT5z+4u8QSdQ0/++D4Poq7Na7GlGmQiSAYUBBjqGJu6uswxB91XMhRXESTkNicpI5O0eESOIWWRLTf9JgzxTxlAnCUnIoCUFt//M4xH0UcLKkDnmGqFUnFKfmWhQnZhDWYLWQhLVF3OplwZxeVvea6rdFl5d1KO7lXvi0ylsqcoHB5zYA780e6ko3G0CP7rGpcoxOl4yYWgWckChsRBdmv/9P1/uXY7SqGoilABrDWK4sskzA//M4xIofSeacAMvS0DFer51JpkY0QdCnN+baFLwLPQCAgbOHYOSI2mFW1ELo4qZ4YUBVSKeUfdi+W6Z2F6HNIWfxviJSh01PdhrghUajQ8987/5+DMkZgBaj4d17xDvOGNFN8/YsJSIw/EPb//M4xGsUsda4PnpGzJnUCi09QISaTPSTJ4nZPSHadk+IB03TYtLLORARBAYABtiFHyH/e3olVOml6ey/6NSGQSVJky81+iiBWU5A4vlggSDzEHaWFBZHekWZrPwvrIyZVsCQFIJdljhldGoM//M4xHcUgerIPnmE1FZ3Lrc2tpjav7Pa6VSVPZgh4XajUpP+fn+pxWugpZKFgKtET/YUF0PQn/+O76NRGoCtUpaLUEUEDGrQxTbCMXjw+Py0OyqlpwIGtBhTyLpgx4HNhgopynGhMAzTqVOY//M4xIQVIf7EtniG2nD6RWJgInU29cVDjQudYOYLM/NvB5zSlZx1OUGyCtouftY9ygQqRdTuwlpZXiFqaVnFnWdJNEIAuTPoGYSI7WwYAijggBoEDTbJ/LFRDV31Bvx0C5HxpfRs0hNu6nqM//M4xI4VELLM1ksGEq1F963zzlGvt+dOzpt+TJO0eOCduKk24SjB2zhHbnNjYMNK0QPxBZGQaoSZtr0hMo2EJxwVWcST8Vxm51ynJuMiKgMXYsDJolEI7/Q4Pk6V4gL7lIDXeCRGJlgweG8d//M4xJgeog7ENnsSzHE2LnJe9iYuUJ8+fUt8tQRbvqrEs25f2q8qHxgBjyBEBCOxjvVux923KfQjOJREDBYCf01CSFhyAgbge1G4UKkzIkixv6nwbVMwSBHY5yH4E7iI7IW8jdyG1vSuC7u+//M4xHwUKerVVGPKeKqE/WqDu+iXbjJmG3krEdy2r//p1ApUM3fv78XoE0CNuPX/OyS5q/T1KgKQQLMEEBx/XIjbXS5fxYmV6tjfixIRhxNQ0klYUJfMCusotx1gu4c31huVW4LIw43gCq9W//M4xIoVCfLVvnpFJHmcpr+ca/8vVSVOm3p26PqbUe2MHXhh5Jn/////0Z0365QMy2uPQ3beiciMJlwAwDOixCr7MRlHmzLq/zQx3AqSzj8pvyqjSOkOHZlkae1KkRshlmEg1QDMwdXY2Jdf//M4xJQUufbRvnjLRKdS4UBbgRg0IrXgk9vmM9/6VaWup20YrdcDhly2A5FDdEjIQq2AcJY4SBJVheGuQvxlVTX7/x5yeG+kyoGp8OGCoo1Bl4mEQRBMXYgX/yVQ1Ysh6/xO0Vl0ipYdNDW///M4xKAUkebQ1npEruhNhChCQ6TbkiblGBGrFfJeEHWThJFhH8qmdeL+wMkZJRqpAJmSLpy0dpy8uZ71u5VZywqF9SAVDXrcpwLglMSKWoavRtA48UCYHdir6LTcijX///uM1RZYBgLENTJg//M4xKwUaP7MVnpGipYG2Wk3QVFBEj2RBxy3MAs+hxaLajMgsSUmsfi4QSZoCAT2I4dnVOn7hxjEPWksM1TJsQguDoDDIEIq6gwpRdRku5q1MOUokEfHKhCelJToAv0GIwGBqzlMBHup5rSI//M4xLkUSNrVvgvMFiKf3mVVZ4zXHo3rdsZv8ZZ8vG8QhCKtQCgiPruMAUMfHIQY72hZ+J73+hYTcJ+x6RqmE4hqIEGHx8+LJLopQs+cIKq2pgqAKANXqxKP79xZRNWcrKor3qdIsEzYryTs//M4xMYUiNqkVMpGpPATMLwMQYycZfjvzzjVmFGYqeQBY0WXNNn65Q1eTtz0xE0mBuTg9HdpWBQCA6OMCQ5E5RyD5Sh26XsQBDBc447A48XGQnXVmpmmIYrcwxKoBctSkQ/ThnYIYQmrYpiQ//M4xNIWMP68/sPQWCVTQxJFMDsh3ffdf0ti0diu6zSGbZXl9vx2YZQmrD0Ml5wMZ3oyXvWG7P0Dz3oxzCJ6uGZjJ2ORsphKah4VgzNbGYaG0wgDrzMEwZxLCQgTA433pAjwCQ+M2Qhj8yL0//M4xNgYCR64PMPYfDggwlX98P+l5/C+b8Ytk2XG8jcfUkU2YtWKc/3LanVsLKrJLqGTFXctrMJvSWFvdRP14CJMlwGPXbe/b58zb52Z31tObtbbrWaMmRksE8Oj5wqbWyxdMES1XbOCGwY9//M4xNYfsdawAMMNac4701w513UgWHKzWx4M////WfUq14gBCcowtOCeM7cHZIQkgSk9bbXvTiwzV6IK3LC7P1VOaeTWxvbblHOeKExYacnW0L1c3ataXtSKvFMKoXSpGlrGuYFBoiMEzZoc//M4xLYaigrdVnsG+AK2Sa5Zf2M9Lv+kAAYDJpXIMoXIJY8Y7xr6lCnVVYhsKZSsklL3dtt8nVPheGFbTlePs0iR24eBm2QSS12UndqVzTcrZmmMrV0bC8rtto7zO1W17W1RV0fRmdf/6I9R//M4xKoWcV7hjmGFQkG5xH9FqV/++OpRwzMJzDUSkw1poaJSwll8XKWD9vG3quP6DWcaEncrem0VU9OcTQ6D6Z3ljQzR9Hobq2vTpxszjtV1dyKbVtW0Vrl0cjo5VdRJB8a+LJSERZizf/1k//M4xK8WYlLZdnrE7vb9L2iWJIiVQBqxEHcSjm4YCiBadWlXTA1a5LJ632lj1/lNf5oEYUKJkNWMKAlAIKAtcMOFIVTz8rDPaqt1tmVtPZuBh4ef+R/9Rj7qvMKMwcwRAUS/7eddct22+3/2//M4xLQWcgbVdnsKXt/97dZ/h+ALkudIEfavS5bS3IcXWXnirpjSL2PpyzlYxAek4knK1SaXwXlqTrr4fnOzd4pjttzKSYw0ONBHSNCe02EYlFick+z53N/OPXQJpOKWyXEMyrQqK2Mc+bPx//M4xLkU+dK0P1gYAMnYdRoZEOTDKyYaMp39XNHCWbuqX9dgHAwPptBsPkG1KP/////ZUd/dTbKuUzp2ocaQ83QPmmYQ+KoLQfLi4ccvju5Rt++3zYoYFDf6/KOyyMggWHO4QrnDiFufVSJw//M4xMQm+x76X49YA0hxnPGOv7ztZ1XZ10al2ZGxSaQSWXRMosGhRdba+7Ws2t67m/Vkcd16k497ddtpI7cB9qVQxCKFN9AfI1Ky3ba37jM0x3maYCahD2lAGYUYbFIsw8zMOQ7cHLviUrza//M4xIcUee6szcwQANopvqnOXfRjgQQnGhLga46bWsgRGCM5hE9YwUq1XdE375GvrqizAtLbf/r+pQQNTi7nI/vr//c3TpWS2x2tuNuUATVfqRTEZO/4MTh6Do4iDm6DXYIsNNbC6tLGhS4Q//M4xJQbofb6XsJFQgqXzfuaGintBW7TTWno9WMUTY5jROGbbXFwQEay1/quk/s79u1EPIEF+43qMPS6NMBAoBv9mtXaZYHGm7sINERHZtBa4JosqZ6MBuNph3ExGDW0gNZa+eDD6IJ/HKgM//M4xIQW0XL2XsvE6qSLxpMxFubZAqyIfNOCi3FaQwKzKiY8BpPqd+LEEL3mL+5hN2632VqBQAKACBFYDwbtrxNXHF55oChxZWOWISEscKMLQ74kWxsuW0JzlEJ4zCmJy+yvmoHEokk/Tdsp//M4xIcT6MrxnlpEWkMv3NQSeeID3/W1Asl5wCmHCNTJhCc8cZzN1aq62nLRxWKB5KIwz+ctAXIZWR7yjV0HzNHK8Gz3zsRlkCX+foBW1s7NPqVJlNd7njfZtlQhMhwbCAEAdCIhdvrvU0G5//M4xJYUKRrMvnsG6PEQfF/omGdH9TJZPX6FajcWmauS7iEiEWtITkhmRuki5fB3aqk4GthKptctgwomDPz9iNjOGuxUionDIKqaSHAQ+jESZ7M54sOLEkBSLLPDnkr9r4rDjUdeef+5+9oj//M4xKQUoWrpfkmE8hr1Kg4XSk4AXHhksVJeRKRKWhSkkkaOgK0FMXPBTNnNx9RRONZSzKiBxDgNlq7MJwXBvCoFWCbLxYk5lSp58kBXSZQTEppV39FlotasVdzWdeocfL4wWD0atRycg1gk//M4xLAUyQr2PkmGUlGuI2mmS7pNjHSTKxzrm74Vm2lVRBad3nZSlwGAeAwhGgdRgAR1IgqYJAQocoafowfE5QMaggB61EfymYc3WXGoDEzTmJgnihcPnzAuDICojDoes6a0mS2tBrfLK3zx//M4xLsVOQKo1kmGPNzD8dx1VXUdcL6JHMz6cTGVC40m+C7CLFgQiRidAqufxeWpEBIvrp0zWW54UEgfA3qYrFDK+LowTl7q5yhUd1eWT/hc90tOFbkXrnJpOu6EZZfZpT/NA4Hgk4IzEaoI//M4xMUU+LqZtHpMAAZJHtr0rMVLp/VLe1+3+/qiJ0trpf9dTy8Zq4QloD5JJVlaaBJZVaKeJXQqRAKYcKpDJgjFSiIRFyZl7KZlFsJIperucN//vtSlLtL1+P3rRs8ttXn3y5ZMxJ/ZQ2iI//M4xNAb4w6gAEJHjeoqSTXTSEBTEwSbK58jK9pbLH+jVI6+55MSkv9/WVtEqcCJbG6qu21EktXUuM5TZsm/XJSal1j1KGqsc/Zq21LAUeFQ1KiUl/yOIoKxF+Hf1B3AtASqGYEkEUkwNBU2//M4xL8YEyaoADpHjIJYrZoTMkhoieRle5IlwLyO+bSn0SUGjt+hmeFUyLMlyybxayGXctjyL2tVJVucIv+GJzYFNmycTFjyf9u99edXxKVUwrtM/JVV+26BMQHGcQQr2iCHNrFlYss2UkG3//M4xL0VEdKiXEmGlJyOv0rf+Xi/BN+UnnRTGxnzUZw3Xrf8jUYY46DRAMAiNRJlZUGgsDQQEJhoKZQiFDVr8evtZ0ey771O10oaFl6AjYtBJUAj7iOJUwqYRJkS+y8ijEWBuWmf8ix10k0M//M4xMcUacZ0InpGFFOccSbchatTR8PURQyOSuhS2Da9pE6YPFNJ3LPE1/58rfuQoNpDg88KKS3oRwNY61209JWySm31Bbq+6sBugvIo7qXtazFELWlaqZEnka1Yex+mSwmXyc5oSmfSXsjh//M4xNQUqSJ4VMJMALyGooYmLMrl0zHK21S4po+b0QVUKExqyImF80SbUv3V2VOvHtdXZxA7f4sqEQqSBQR4TwxeKO18WCSCjAfRqiMwBqXApZ53rlOokmci2mxgxMjq5RorOJgTqMiIEUgW//M4xOAWWep0VHmGPE0LdaTFwNqTM5HDjHnY5LP9wfcztOruFU6+h25qRfuafb0GHpppC8maKsL6RWf3LxeTH9oAJpOSNr7A2j3OZXUhrpLTApAVqCZ8S/+7P3czT22c15PISgrI/Ri0SnO5//M4xOUUiZaA9HmGHJLt5QSNhgERNWclQ2H2jDjxDYcHNNMpSRAp8c8c176c4h8ADWsPydPYByaTepNVhhs68+ATgVODWq6mEsVoc2UQthjjPlIV73xaQjRtS77j0700HHolpOy7rYFAZN5L//M4xPEZofpoIsGGWWI83NKR0w6OkpXwagdX8Wwn8+a+KfD1TvntX7+eGy792ROiX+wtz+3/fXrX5bQFmGHQkz2oLAVYrDl+KGAvJGDIYOGkLI6c7EstqpKSXh/s2Z3b6I4JkjRsj1lzFUKi//M4xOkW+RJ9vHjMKJmdYvWCXoOsS5KyUI6JEhAzgnOmbsa/ywlKaGFFwmH7TjVU95e7bc8wONOkosoOVC8a1REDbUbcNob+P7D9JCO+7EMuPKWJ6ljO3vlrpsPe+kuWGCOSjBwECrSh5sgE//M4xOwW+apwMsGGLYvqjBQwu2oSRFZuBcNnAxAUIIJGBGFwNj/0UGyAUCjJpEhGAAAAGFW51FucLKElo91GKzefAuJ6nk9TFYJhtuegHEEAzDsAAAARzoG5pQMXu8p3iPCod3PkT/8whD/H//M4xO8ZQe5sSsJGXJgB+riPMPz/MPL1aELaQCoH0ZNkzDBmQUayWEAyIB2Dq5c4sCIikzDGaOd4SjSCzz2SoahRLOnS2MKqllnOMKRQNLb2OQdLiUio8NJj0g0bdV9r1UHdH6qVSNPUNUoJ//M4xOklGrp8AMJG/cpSdsjSUdGXCAfAuE45wyzZGpkqRLFIEDjE4ehlE4REtIDJcbWEYDDrThOiE4UB8Em9gjjcGn8HupWMkiVajtpvpVnfez/dXyst3VD02MqNcwxll327Ox3/2/VC9rCd//M4xLMUmUqhlGGGODgJliTu4cZz2JicFC8gaSLNHZBTAG8pwNBStFMDlTxdSNDTm5o+W21xNJd2Vp8YWHuXDKeCWQxJVBJ5UCBkqLJU/QLPcs8PcFCtJwSNQeCSAE9/391belbO+73RYyeQ//M4xL8X6fKyXnpEsNUH1YEC9/bJvwzJxsKDTOu1Oh1ZleqFdLGWVjhZI1Hqo48KQngaMHkY5Mmna+8bGikCEZxQSOO2ve/mfbPymtPwsi3hDm0DxxVrRqAK0+JRYWd9V4gdidDb31rIBYUD//M4xL4YUPKo/nsGkCotYh2ZoYgFPbRqa4GiZsch+jRHxjCpMbEYTj9Y4sjq4/MW5Cy7vNuatezH4zwOy4huJ2NhngKPxd0eBbUItDlPXdMjNNva6nIxGXxPv+9PgsAIFDWrESDUcULiYav///M4xLsYwY6tHnmGsGQgtBDDYeOYXJCsOPS1ILYynrhyqOw4sJ3stgr6neMKCFTdn8FygbnyGp/sXWZlo+SusrUzEeQCmhkoUQVpUgaCmW0SzOXSvT1jGBtwjYzd6kR2bGenZMoVvRW//NUq//M4xLcd2p6kfmDRUYlSjGUpClKVuZf/KwCZIyopiV3ek9GPQsAgGSoawFYtxOSRxyOSQGhSwmKocjDjD6l7FEgVdjBTuF3NrIM7+n/3+p+be3vpOi7SPtGF1aKxEgWyWtjNyX/95NCfBFxG//M4xJ4XclaVtmDE1IcmiioVNvj9xdRPqDIg7lO9dQHIgpDxzrpjWo4iYSTjhB4XGQ+xwsGUesO3ua1osRk5bMSZetOaLBGMKiYuaKyCirPJwiKOXEiCaBsDvPasaO03J0HzSy46ByTFEb3X//M4xJ8UWfq6XkBHitylOUqJiF2BKRUO2K5m5OVesz96jbfn5ra3V/9RXCoLHdTe/HpAURnsWm9OYfKB6pLwiLsuONDrsucjqdUjBh5rFnVbNTww/bXIIRMWI1yH5fAbvkwusJuEEzFXrIM7//M4xKwgev54AHsMPWOiTHfntIzu5DmIhlPkRxNLajXeznSQ5z9691RhBTzFJOAgcOlEYUOQqEVv+pie87GV1crVXezP0VCu7h8EVjsVDEmFyoJkit3ij8Jyj9kUipu2OpEQldtdYQLpbi6w//M4xIkdcwqUosGKycIBCpbXVGjwnQziJrLamWCIqMk1xRwPSAysQrJk9T5Ha1AuFkKAFzS6YcNMow4Ggvss0RQgGXgCYIACRTAAQDH+9QDeTggfLJd/9f///56mCiSvfTji8KMiQ8xNwAs2//M4xHIYsVqw9MJG0BuPY92R6wl6gIyxkmXF0urW9q9VVOshu4ExlIpQULBSL6H6JZFuXKWRCmOmDK7RwgMSgPUO2fvWLoBoVFXf1wCsN/2//6oyQKExBErUSMU0S5U/xBIzCRZcItMeZsmc//M4xG4VcVbJFnmG7Na6uyHMIChQ5UEjcnVYzL15/utnCqkwnbWgKQbqfCL1ISVTI+l5jqocQOLCLmLEsY9vS6VaCoAUgNk6ATqbcu/BokySIUT+Mcx+oTZjeHUxzQgEjqVjdoVuUxnQ2hlb//M4xHcUoXaoKsGG0HVpmKxnVO/UG3crvq6tMiCi/T9bvRdvlKUEBQwFAbYpnlUvUmEPqh/pUVigXTW6SlP/7qnLR8WQAtCUyBHMklZ375PaN/9ai7Y5kb/aZHZbXVJq0aYsjC3T5r/K1baM//M4xIMU8ebAfgvEEP//vRWJWQshLkU+//+VlZMniFxCSnC9ChIleXObmYITJkB1IOR5Nwk5AQCcHiRIGccsDxRFZwGmYZjIOxBNPffd9gAEdjHTfskovS6V3Dmhf6J2XctM9K/d4iOBoXEI//M4xI4Veu7EfjCHHbdNz3c+U0UxDjwI8gwMYcGCFVxUbnlOagYYIvp/uBGjPGReN0nShfPEoTodFEIVZ5qmWkBD2FLk4Vi7frhQMDLGvpujP6alhQFy8VmzvRz2RWdjSbldxjMzpfcoM6pu//M4xJclS0aofDDfNDUSFZpayBhwDcgicL0Kg9HkWFiE6AklA8Aa75CAICha9SIzHesopjOwrCvKiQOjTtM8eoBk6GoiO196nlYKkYiFwV/waDuo9lToNAr/lh7qRLiWPhAsxxjiUpZwEY3t//M4xGAU8P7GfDDEsKqGoVgmFDThWGBsOsCMTQr9dRwn9itio+12mdv7m+ESzC2VZe7b9ry2nPI9N6h9Qb+HmWdLg1oPXpaOJOEP3f/uRgMDSkct3ByVGmAiBWB79uQISmgae8dCDLv7fQVG//M4xGsTQaaUCnpGfJBCIiO+7vpmz/aKbpynvVOdVsm36uIf0bS10q8LrFQm8YUa52RtvsZN9sBl4fvNbXHJPKVV4LpcOYSQLwuqWRFC8LnMRZjNTMnEk1Ri/ncK4aDqMW9LOkWhcBUwDQR7//M4xH0UaWq1vjDFKJPGue7O52+uMyJRyQv9z/f78QqZYYAFy7pigdNPEEWhwPjnmBjuoDD/c5/6UiHcLcHmccNVZIssUFqw1BGtASB4PVFAPNDWVJA+w8RWGGoI2HM+UGn1GpRhkLywUYIm//M4xIoVwWqsKnjNSYyABHMf7ur7/t+k7uZHlNnVGWod0fn6+j/SXaMgjesKAyfugPq9ScVzzPOuC5aSUbMh6jxeZOcE2gLUM1Ny0bD8ZoCRN8elgfqMYaHRq93roAVUX51sxH1/FfIzZdZ6//M4xJIUmZa8KsPEXaqKI0dhBOVA4MCnpnkB6cESXUGWiomKLIlLUlSB7Dyc+SY5EnWsphMTUU6AJI9VcPvWOuVjd4BWT72rH+9Hql5bNRSxr804sLrvMLcpMGbOlPn+QbkpWNummpv8tXl5//M4xJ4Y2fLRVHiNRKlDXQSUsD18xbU5Xrny80rJ5n9Ovjs/bQrXIXQMgFmUwm/tLhz+wIvmghkY/WCwZ25MIYeK9CUto8pJl+BUQbs1L6nTel0OCghPgA67ffbDVMs6anoSdzkBw4o8H25a//M4xJkUmgbmPniNTBkPqcx7wiwQEp9tkei7eWpwfjfykADVx/RQfDc3Hol036JYbSxNcaYHarEW4i+oIZzB3hb5RF2UorXfVLqupbVKlP/6Pytmf+hubyFQwedQCFi3//DoIkRYHmR2XGRf//M4xKUUKMbo9gsWHiAAAWRXq5NcDJmcI0zfRoBRaiSRElk4wNaLlAKNanRxt7HVPdGsr8tE88EipAFWhAwwWDZJQdc78KCWfxmdLfaWPN4sp8Ot1nUaV9bVKcubOEpQzUMmFpLilBcqyqVw//M4xLMVOg8KPnpKjiSSJ5y24MqYqquC6vOaiX0thVWVthVXahhQCAhYOgY8xwTMngafOlgqsrLAVYaIsi4azpaKjQ1yX7152Ib1HjSbFPdnZ6VOyw8Fru1I1zCKC4bAYitbKKhR/SMOy0yC//M4xL0UqM7KPgvMAAv7BmgMWBFTuE1klQsv1LVolVCCCIVJAXQhmdFgI0TLmjKDiThy/QoUUQDUuPCwZOF3L/9Zd7Hfcnry8L5NBl5gkRvj8I2hwdEF+/lW3CBNHamFcCTmkCkNVqFsHAwq//M4xMkVAOaQInmGVDJAQJLEY+ZDaNhJlUExeOwRisVvUOk6MnhO29MO5lESmCh0+IEL0nokdWn55FTL/4iVz8oefJariwfP+jZCKOOS9tGOUp6lQ2w7Snrdd9/9ttgArkdEAyAMgvGFD1tH//M4xNQU8T6JnHmGFOH0I2VSvqZEQpnar0yRc8EIc1ooZtQfaBU7A6kKabCEfDKGAWLN65LEn7XezeMLhgd0ph0YCrU+MxKKiVy4T+Rok4536CO08qBvQghyDB0Bl0x0NMOOroZ0xAMjUyYw//M4xN8a6gaMynpG7KEE4MTZzGnN2OpeJe9a5KAM4kT5Dodnimco0149uuOKUPyCqc4Jxu3rQ4rvjB+rZ0IAwVGQSAcZSIaOM+UkAgHjZ+/fV+O9/+HCzc9HPteFSr29cxEQkovsRJ6RMvQQ//M4xNIfIg7+Xn4GthgaXHHJ+rWnroFIngG9zpFUbu2MF8yLNKdPzUby7rqy7E3QDv2RGa9e49g5kqPGgID/ESANraMlE8IDDtpi7zH06M7nO24ty3KdLt0viBzUXUuwMEj0KDUMkmPGTa1S//M4xLQXce7VnnsGfGZu1taeq2zs88E5500NmivCUoDABWmNhi/JUIxbVkJfV07Eb3yWPz+D/CZg7el6z9uP7xZzhsTrj4J5TwFIDo6iwvUQ9OWLXu3otfVwk1llVQ1uSxh1FnLLocDYVgJh//M4xLUZeg7UvHsS6WClYGFK30a+Y6kpxARNHAFwyry5cYlV5X4lap2/cHVIaRd7qRsjsRUif7Vq1C3aVculdrzAh3wYjJ72LzBTbKavcuZujadd1d2BiEMo7spNXTZqNVPfQWdFNdhZ9CWI//M4xK4WgYrVVmPQzJJSV6kobKz4Ia9hQla2FI+7dO6fsCaP1JIJF6jL2fy2ziugbyZwbGinNsOdvV2f5uXtkDuzPq2r1T+j6tQj2EUZlfX/9dsqnQacn973f+rrWoSii603G5fxgwiAyNOS//M4xLMUsgrd9HrE8CVFEqfEAqziW9wUJmZR1HtzSmM6lLmdHAUCtl79jCRl2llK1DJ5g8LE3ZU8d+0RUrIoEUSgqzKub0Fg75bERv+6IvF6DaTccbbblDIKKOSDkRQKjMWjRoLA0ODoSGhI//M4xL8UanbqLnsKOiwMCcwGxAsiRWDQLA8JFhtQlBpZ4kktCcfF9a2j3IfELwODgGFHxv/5r93w+fuOUPgAMHxWUhkD8epB0zHIyaNwcB55J+JuZZPwc5e7MY+xY3MgOicQGTCq/6rzO45g//M4xMwUYWb2XkmKHmCuTwXAmbVf7f5+kLPJy49KBYMA45TGpYNB8IAgqI4Pn7jb8EDkTgg7+rdC72TGP9Ho+gjVrPxQoTCI5LtuhgTNdjC+xEevaG2kGwkZoAckPEgHUIqhsqpAcBmS115u//M4xNkT8EbFvhmMBgym8vBitjNuCzWuvyXsLOrCLiAoKq0vlMugUk4DcqjHR24RxeS7GmUCIEk3p7WpWyzC8NIK55jw2lYhTpxL51JCHVVjCOSDSnelCcPtRU1ZmKv780pdCiguWANXfY1S//M4xOgXiMqkVHpYwHbrnxWe5EsK9R//vNzYc/VKSKtUlR4316xU7LDO4ePSnBuB08k/RTAon8j9p/jdslMk5ts7VFhjCWp6m5B229KednULRRZllKjGMeYArLlf1vH/07uIXkPZkcaEKamZ//M4xOggGg6gAMmTTDcdij2Gm2wTXZQv2yOPtS2UTbWURXdnXdWjbL2Jl+jiKTIhMQiJhxGUQssnFqLcNo8mBDhhBDn24bWkiP0Xc7Uj93cwfEWApXI078LKqhx7iId2TMmy0I8LIYWywsjy//M4xMYWQerIVMMG7ZWJCz/h5kVpisjLUpWt6Bis0zZiqzzpojLEpjIYyP9jf6h61vltIkZlxP+Im6gaUe+tz2NqaEYKwv0KRrstu1tm+Hc6mcFjlb9NgK2SQic3c/pf7N2l/ckZrQZHbJEv//M4xMwU+erg1lhHbmzf68Ayd7+1dHPh5rZ+IP503oyFFiBY46Xbi7+QrFjk/qiA5QIKQAcjz4nhiisvKMWqB3A/B4nOHCJqoFdOxN3q2uoWO9gtrj8sv8k0N9vGq0gywXjOECtoQERxSICY//M4xNcU2gbQ/klHGk0JRiOymxX9WZc8Nrrfsn6nbYWVef4uKp5HYxq4qwa/jmRjKeRrf8//8fe0mSpoE1Ga0tdJpT1a6tzaVIRUkaEpVhEcyBEmceofc5MsTmZaeJkBryXJRSWGz+IptySR//M4xOIUub7dvjBFhskbckADUQOXZkGms1FpMCg5ljHXaWssNjTRjk6NbMsl99IrsZ0iDgyI3lCo0YCN243KSaETagGhBINsYuUIfuMoricq46++fYtaL6Y3Ok4RgIhtUuArHyF6yHimrJae//M4xO4iq0aIdnjTMLBxCF7iXzSicZjut1v6Q5hP7l02f8zwnyoQPnYeWVrwvP+mx767VDU/vlZrzA0z+sSyFneKDX3fJasKlPCbEabHaM19z5d9v/HrWUfuOz4jdtmvupxNdnspJVHgSJVv//M4xMIUsPauXjDNCjydZ4zmI7hTEtW0BVBqB4kBeIUdgMcYt3gqIgrLVBBZ30rEdp8klzngiz0JoUNmVdqhLG+pbJl3mX0GgiUWNgVApUJg8KizkJAOzRWLqXV1qW64OgqtiifQRUiPBaAC//M4xM4eCy5wIsMMDYgyCkBJpmPZfamZ4nZF6ni7BJmcLkZIu4hiI1bztO9qJm0LPywXaktvLLSsN7UHEw8bDQq8RnJCZuvcshT245dCIRTAoNsS5D6FTKoa+TNxuH6AXFRkTLbbtXPKazD6//M4xLQUgYp4KHmGFNRrcm+ELgAJZPcjRIrJxLeJIVRKOoeCDRRohNkFli4AEgbApMIqNxhDi8YgsWcLvMllW2tYJ3oLvcFZE76/ZV0pKwwHFFBqFBkOgcFhoECYOj8CgrgTCsSxHPz0eCwe//M4xMETiSp8UHpGECyrz0Da99//eh0CuaIYtyTmV9zN97GEAtOCAxRCNN+Iz/rvlz60lDMmHhAELPwN0ff/9a3OWtUDRatUqJIFeqXqRMlMGUrlUXYcRggRND5lESjUy/C2tcLVOCpFbn8t//M4xNEVOPqZvEmGHNq2UZmt+bM1XqnluDEgYBLl7nycFFIDpoqdFj2gtrhKRXIlg7/9YjrBkjNoXqFV7OgFLr1GR5k/p5l8ScOnQEKllaZY06uLU1jkyVh236+BCFw+3GduRSHt+Zbv5fXv//M4xNsU0QaVrGDNCKO7RqOQza+pS8N8tipeAluNKkHk3mjs4sLsHrkiizN6YpSUCBlAoEAA0k2QQhl6qKFooepakBLM9rt7brtwI3ICJpLyRT6NRUUxuFB7ZBjmnCl/89fyZ1HXLrDadvtc//M4xOYXwSadtnsMbPNyio85MC62KyK83sxS/oxxWSfRfH9WfRKEMVut93/7z4JuP3m29dfrXvpdxi3/40J/QEUSVRyehFaA6C3q2CtNUCkN5Qwm1nJgMm0EwGF4kQQQnLAAWKCQs4LYwmty//M4xOYXeUaA8npMDNIgACCzoNzn6UqaZUOcJ48v/YhP98IICoczg3FnNPJRCVWnWTKKOOo62rLgAMVOoS0W0vIDZlUIBkOVmgq1e4K7tVW2P4OjcIq4VLEFqKAVuwoOb3mdo7exKqqMYkJw//M4xOcXiZKiXkmKfdLJY+saNeRm2/S1Az9/JlG++zGNiqQbRUWLKeoSiQNAQXhpR6SargyReelXam1EYvyNzI84oEngB4socday4nJBK1FWDvhApZpi1wqwBMMsaYOCm4nUU4G7kEEU+iLl//M4xOcX0X6E9HmGXKJW9tDMUoLmeamvpapEh3LbPh8Un7/QbAjKJVT7/Cn5Ugff5mdgMCLc2VOIKhIwnVPUsY8BBRUEQH4AIdh0Kc/qv1G8gToY9VcR6f7RJI1m0gga1ptGlwyE30vOTcQH//M4xOYXOYqNlHmGfI7H2eKzEKyd2Hdmxoc+vjZjy0bN1js5fZ8bxVbpISGLephdRV7hMAjJe2OYQCzpoAJW3vtNp6Fi1oyKrWot2yTWS6OR4EwMNNTSak0i8SsF8SWrMQylAItKw4ozvDpC//M4xOgYOnJ0MnmGMGesY4czLPk+7fGoy5qa+QYNP3XRKd5TOtSlKb2Tmepq/b/X7+xCpXRah7//JvC5eHRxhlULduR9TTgPBoTiFqkbKrBEoipY6mRtESA06oTUFRPCdegcigiwQOcYSOx9//M4xOYZGd50wHmK3JAEGSikSrj/lfPkcn4/mRpkiK5RtvM41/MLD87g0xc81U/WXcs9sb5nrEn80fScIRa0WNck/8xb4/uGxsLx9kzcFh0U9sOam6JicBilGCpMBcAFZuREWSi9OFCzyB3D//M4xOAVSp6iXkjEvLoD9uGsIcEGyrpEYEO1Bmv6rNSQEDdcOpFfmVXQvYi0Pz+Hp0v2jXXv+y06F2IitP7Pp///zvt0+qXKNo0ufffOLS76/yls/sKLWE19JADpTEJQ9okyFS9gkXUGFXHo//M4xOkd40KFtEjNHDWdcWxlqaR7pyEDl4tNNhpxEJhKNNo+Pe1XhLIcIp580ThcT8/hOZfh6xClI21snxU2SK2mpKeGcrVQIQ3OFHCSPYoBqukVAVgmJaGIyYeRb5gvn7EcDA8Y6OD+sdcs//M4xNAXcx546nmGKO2ZBO935uv31v9r33vveM/nM8Fqx98NXefjY8HiA1tlKgsnSJh9RHup3+V1Pv6yCG//7IxKeUEWltrHCkW8iGXHdh8jZSkkSJrxdC4qMt0RyN+7MztuoUR4yzVZJO8///M4xNEVWeJ0KnmGLM1+cx5Vxqmfa7mZSsZHcj1OSdWDqNvGxp3q9zSCwNquiIN/uqixv/daqW1BVvf3tXszsmqLRDm9rbiEVZ4hGgyPdDQIe3baa6zUCtpkCooqBq9EiVozBKDgc3GfJ/wB//M4xNoX+nKBnHmE3BUUzWGIPA0mZa0sLgmEgw+ZixE1BkYGkXDBx5qFhVh4KqcEgo5NqiW4j5busrcZUzRqLDheEhM59QX5LLpJJLQsCD0n5au9FLaPvfhgwUlHw4gWFZ2rRwxRvOry3M3Q//M4xNkXeraJHHjLDMDBQzhocO1jL+bedX1c1xO0fqCzobfWeOmCJh2SpqOL0mhZnQ6vEF3yrGlm1xSJqGpBLtI+Ygc2G0SJORI9wJ9AA5GVZ1px7Bmx/5byl8x/2KIqnPSO7lXKNbibCJPq//M4xNoVGKKdvlmGHPa7fd9bv/mH+Uv3sI0MCSkUAlUUPnw+lUnd5G3lEyfGLtbLVf+57nSVf5H//9Kd/K+lGZJRYBEFx2ETK8XhEpYbElPdMNLBywrxKcbXf4xOPd+xntDEGLkMYBRyn9aU//M4xOQVAZqRvmCGsMw06BsWvNVUyUdTI8l+bEHYQ4kKAmeWwc3OC3Ps6EEqThxEp2CsvZcw2/kc+KhUPJU6SsxNNwL/peu+68OR/LKntP5DkFwO/7lxJXc9Zd92gABdDkLbTAkr4MEoY86k//M4xO8YoYpkCMJMMU4u1uXszMI0I6R/30ZZDUTeAmckEgECxEIaMmLHKVXmB5O0uvVv/0L9C6TxHVtr3segAZhMmEIHhZOjzx8HrQAZ9XpAyaLPZiGZEbAIssLtv/t3/4dmbH57Rj5ylXHM//M4xOsXYYJwVMMGOG2O7Z45mZn19jX/93/lxz6hveMfCbmYhT38mUdAEjG8LQZpAAWh/iHnwSw4D1LedafQAwzrZ3sckCjBw2hqnfRtWqrveeH3nehS+aeOJrDqBvM7C7GDyF34AmYsyguA//M4xOwpIz6IfsMNSJIP/UsMreTmRMoqpL/4PA6SfnDKE6r7YQBBZdsS1bDMaQRDklvma4sziwcyfAio42yZvJzN5ZShm/lqZlIMi71kL44LOVSMDGwklKnJo98hiZSUD9YGgU5Gm2oLucKG//M4xKYm+hacKn4Y0AlLbE4DTP1+BUP1GqKiObLsKqXMpLzhxHnlboJ5VXUqwJ3dh0ItewR5q1ZSp9h0NWxGtIGA2FjqjEOHGnmOKIjzRFuTEebdd8pHlNPNGORDdbUTjX1phk0C5k4KD5YF//M4xGkmWjK9nn4S2ASMRaFBpKAPkkxASm0FozzaR2E1x5DPCdTZMRhPGVqZfHJpesixA5a1y6jqf/+n4pWQLEvcDOqpkLaF4QHt6qDuJXFpJActRe3BSDEWLCwyaloFgy7lCyRqkdPY0HUa//M4xC4WuebI7noKuEPT4salWSi8StO+1yQiHMo4krLM/uzmS5iWZTqlxMNCj1Y+aSlJ7yp3/+0j1EIZqepaKSP1YOmbbeTJiJCpiAa1o94EmD3YsSWd3R5RcsoMuK8RTTKZpQ6G3vZl+N8L//M4xDIVee7RjnlG1uoqqmGYGKhX+XNi7f+bT7r4IM41YqLfLHWDiskb/22dG6weKUMbq+pwQVkhq5V6vMJqfxcRvoWs+idqnA8A/Alp14PGY/PNj9mNtSOJcg4kjUKRYjExEspYdEglDoVM//M4xDsUmQbNlnmGprr0HvJFUPBFKm2jkz1K2BgyDzBT///9KoRWHaxop7BcsfMS8jORUB5CLRBA6inbf+NWagmarLOsllmHUjsdXfqoOXVEyqbSS6qa3ZKalbqV3Sq/p/5zn+XtSlN7bwGD//M4xEcjs0a5PmCZGJTY8cnfnN9hzoXyoTDzlhXLbw4A0LBXEc0pPHb/tn7IJm7aED4zPR3HMSz4RFgkREsCYBCwS1xdVrEhdIpuJA5nRyP5IHQ4cgErEm36tStP//////7f////f+2y3ekY//M4xBcYIz60ABJf5LnWl5Tn/BVhaMEEQ9RXUoR3cuNMLH8UMFUSAmJmkIMokJCQEch588ljsks7t7GN9dNStZosWWBM+fVG4/Vs8i4itGHJURHsefa6t/uWGZrbHAgHiGxW1BAK58RFV9xd//M4xBUT0zLqfEhHXyyOeMkK8WY+Kz2J6p9rU3S30hRE55NRRGcJyJkbQUHs17rIc5/y/n/nn/zzRP/////ovJ+WT/yjKGWqltkut2tliKBwOqMWAyXsEsmHhVPRm5ktBsiOpS+PIpkRnV94//M4xCQU6c7WXmDEfm1Xq4+o1+hjKyPq9GZK/0avPldEZCFDgmNVwULgoFFQwl9aiIY/+ot/tW7gYObRFY65LbbbZI2wA4uPfpTVqSAQzv1lgpT4c/MY968MjL3eMmxRCQDcXhzRzcxcyfqC//M4xC8gCzbuXijSvwAz+2/7nVIFEDCWQzzz76mu3t/kb7Rt7k5oDyNuyM3CIUBAwgyGXLZ7nh0AobxvVGECpPCGsTI2/2JwQHUQ42o9jLaQXOd6XE6C16u6gzrEyKrW2W7bbbXRgOaobE4g//M4xA0YSjsSXklY/jJPbm1LuSCM9nvyEKp1rsxLV/SfnOQ71uJiSjRysaSlrP0rnFCCRREeUIh4ROHfYsRNuyo7iAwY/AsfUThKC0RANGNg6A0ljMtaOlz31LOnr/3/ytVnp3ZniH1smNib//M4xAoUoVMfGNJQrmUK2G/RnKFhQILCsjNJhYK/sNrkQlwqsfBAodtZVYSChWa4CHqBokttd8JN0MNRPWXVB4KBRPs+7pi750/WDOMggsCN/EDEIoUCEBW/uzbMxJTzs2e6CjCOK/yNJoy+//M4xBYUYcbOAMCSrJagAR2kN4nmBPwQbtI3s2jFZMJU8eCANe8+y+4rDZdKccgQLxw2uFiadr1GVf5v3dyGRlGLD2BU/UHppYqkU5Hd82wy4MLwTudZVY41QOq8QAIAa4RFbGCjZ0sbU+4W//M4xCMVUM76VnoYcurYFx2drjJ9fq1W1OoS9JtstDkSgMRh2C5o30KmhEHBU60lakmS5zl3RooEVf//XtyilWugS4pbcAZ0n4ikcmrTYEvmTsG16HBUNKypiXA2GK6KlocCP6KUqBolDgZ+//M4xCwVCmbqNmDK0UdCnfTon38dnE+nU+RfkdJF6N7uQQYmeqMMC3kWc8PM1joqDnwdGuoqdnb14MJyvpXlLFtBI29mjMQb4WOdmAYawOhWf6t/zVi+k2c6N+rBTEkxQ2zQRqGYjj5TDgXZ//M4xDYf6hrUAnsM0ZMuLckr2XGwyKWoGCSl8BgS4RWjrlbEpQyodi6hOtP0zNT7O0tr/cqTrkiP0VqHLJSkQMWCSUQcsFEog5YGJRByYGJRByIGJRB9koMRwM6yEKVk4pMlmUoi5fFvx2I0//M4xBUTQPLlbGPMTlx21FqsLCO+I7kI74iu2T69y+SdtlxahoAWh4saNAyEqCRYRAqWaETLxjA7TRng0SoN9LKhh90UwAI1UARJjz0IkzzvgKbPRFkMgxLCycyQqhiqhEIlIOJ7UAmjHIq///M4xCcUmXrFbnpGiBjoYCMzAnVthR06jMZHFfh3hylSJmb1EuSVDR6JVpa6WZQKAUwoQ8Sjls0qBdNgajdtUhFc8MBoCAXuw+FCia25fNP6uXA8MGFOojOwZ54x3ZEU9swzNje1mqGcPuS7//M4xDMTudKkTMoGpH51cjzZOCS7M1s/Bl9pef7Tolc6edcIrvkUdNdAw1yyJTDcbfdwFtKSn4gBKC6ozRMbpm/rRCe7ubvWecq3rYm8mUKMAVarTMCkx5Z5TRCPnkk1pANI85hsId+9ekyo//M4xEMUYfa1vsBG/Fa9QiRV//6EoY9TrupQxX+kVp+VBkfplIYAqBRmSqVNSjWXZzLC1nqtl+P8+ZfFmsH4/1zH/d/LM5FLn6/+ijwZ5d4qtJe/+Er//t78gx7j6LPcUFDKe5DsPzIBQCwz//M4xFAZGz6kIsBQ/euXLF2FKd0mxADwUp3V4FEIQODBCr/6i/EUnAULLJAeFjRRCT7LNJWN7f9y5/zDlBGczH3gWRUdLneTDf/5EX////4tSKgkYoYSay2vDbzJNeDSFEiu5QewhmeREcG2//M4xEoZa0K4VFhTHIiWOiUmQGyJbtwWOgi4zBOniW9VEgtuyzXaQtUlxSxiPGnBJEkrsOcliqfmOai+zFQ/ZLKhWe/1YHHrry+HyJfR+lIjvKzFmoR5nlc/aUtn9qke9VyNXv0+6qikFGo///M4xEMUGXKwcnsEmN2UAakDxzm//26f/Z1KQ3WL7YAoVGUBIUKBkv++oEOhSxFVYukl9D4JEofjKkpNDYaoFCcVR0sSoUFenfHNz9rJJcFTovDoKwqCuHQ6BRKCo1FrRFQWDizB0RBlolcd//M4xFEU8OaYAsMMoPt/qk63DGlbwXIEwaVQoxqknAMSJBS9QMILknt/XAZHWR3kGFntuihPJdPV7VvQJCDbMSdPNRP2ovsk3ZGY9FnFmgstX+xZEkpFQi6PZ/UOkUUNTVfzZuGGUChcJor9//M4xFwTqe6kfkmEjBkpcovk153QhEsKBwIlGVfLJ/SI5/LxNpeQZVdI97UYhGEclT6EIQAEK/o3//nV/QOgkCCEAwxA4XArpP/EDvR5Rwnf+zIKHZx0Q3N2JuS+Gn3+Ye2d/mItRn07mwHp//M4xGwU2ga5FjIE1PssPCWvXl9X6h4wHMtjm/BZehMistfcwEtaXi+Yj+DcwOSfa2fT2NucLSqz52fKOMIoDNW2dCQRx0Bgdll5ami1ZWDuzPV5EplKl6B3lbZGmUcapBp5tCcWF3yTWtVh//M4xHcgshqkKnsM3MVe/SgdHl2LFLxnpgtBqtDx4alBiLpWPCfl1LEiTsgExndWKIcOAEQOKwQLBNXrAbiHRCwSzvpOnExdKYJmaGgjgFDkJ2JBoklEfv+Pfd1tN3FsVDJsO8L5dpiD6OB4//M4xFMWQWLBinsMfJx4EYTIDN3hYE+UAbvZkHU6aj/TQtW5YxmBM9YbF1vXPQen1mIOfVsdWOWqNY6L45+R6YoSit4FAZinF5a3odF/ln6x/0B8/Qf2sRFrQIgWfUQWewyfygSfOSbSyoCZ//M4xFkZEdbVlnrTTBgcPDwfOPFh3d36KojCoDUAF3NZcwVLDPgmCeKwYjeW9NCyEkxeGAi3LAVr4/ss3RA++DhVEkFUaHiKibF8pegr865oK6rq8GAt6YUusZvKW8H3gMSNFa9/+6iAwXAA//M4xFMTwcLmDnoGmp0ogBJKAUF2UkyTkCj2Ngmr1iE4iOLoYwncXU14rTjGVSekKolWBk+1ixGiliJkJiGRUITF5CF/8K5YQmiE8Ess0WJnU1tuXs/qAcJV3ABEEBMargJGBSHpUrEQjCGw//M4xGMTgf7UzkhFblOECVwVgrFIPYzAygVQgrjNYa8Amqz8CBhRj+HC5Wqw/y5tSzZP+f8ha/C8jI1ICjGz4lMMHdoET7xV1piIj1UVZuSSNuS0ReFiUtIQJUjNLLFcZEGyhTO6K1DBb+Cg//M4xHQVCgK8dhsGEBZEWysNLZIGARLkMW3L/U02pTZlW6OlH/p9KfccFSwNNPlkrYN+pWxvDLUwQAkam+xut6oGKSSNqbAVQ3iQNasHAMI1R4wySzsnnC0dSseHa9i7Byj7x3muH0ggmxd6//M4xH4UierJvjDE0u/cwgMcJ0IHny5l4IIH1rcGI5XGBHSboTSBdzqO761GLkWRdyFvFFmtt0E1t1TyKpD8dpzeoDGawWjYj4LQjHks3HO8bvqFeTtASEEGabFMgMOab4yJYhb2S2VLCXrR//M4xIoUQOqxHmGGxOQs6WgBOmaJ1/KX6wyFDpUOe93XeP0xDkcbbuwCMI7ZFErh64LG3ox/VBv3kAgrQEdFmRMuR7CfMlW0s2HiF2b5IR56TSSXP75f5wpb+yhPZW9zppkKmpnQIIsOFDZ7//M4xJgT+dacIMMGiRr84TFnSYIWIrT7lcASo3/TlALRaWBYdRkMXROCe5Bekb13d7HdELCAUEZZZ2p9aHRWeUyNc1ikR5qo7GHNFCYcvuUsiIhlhWseGlmg0FxKZeZ+oXQoO0Han6JVYaLK//M4xKcU0ebEfgvGEHiqAWkkksjlwHqI25sSlUJ8ldarjUsMkSJWl3QhA4zlPkNKXqjTpTn6nBypBxark1Wkx3go5YzXK2IexzNv/psrOlAqLaixX01P2atzhZ8ext5iCShFNgdDQoIo3JUI//M4xLIVKS7NtmBGwj6Q9MSokJ+WaUhQ6wQFqILGEWo8IspClcrQM5pUiZm4g2QAte72IzJktWlUIRZ3zn0oruecltkajcm+5H/kp067d87ISooRUDZzFFnginQsOsk8dhuf3yWDZU8bjm8c//M4xLwUMebNvkjFFtF9TGUDjjTM1zo/pEMrTXgdsokAU+oRrz5eMU8pwjfIoLWUFCPZQZR+0+mepLDPDVhlNEJ3cWbBDJCRFdCdEKkXxz7wqwMOZnQ7QsReTfRWwFS0R6q+YUEPDdloZisH//M4xMoY6u6gVmDEuViULXwJ8OcslSCmV7mpy+KNiTO/E1Fw2vY2MQke2S9mVozmFgeH+kFBpzRSxWkCbcTO7u/K7UFwzFWl6bXGz9GzIHU/c+38xL/ST9kKLEpbhAO6YGtpUFUhtbv2//v///M4xMUVuc6cAMJGsP112Tccbbm2F9wiong9FTTtxsILsCX7u1am73P58Dlb9Bt3Wp+161w5EmKCWRTBDX0izLe92wfdYNpln34yGctfcImlD34sqOx/tzC00H2y2w8rLpO19LMIX2y+7fx///M4xM0b2fKoFsPMfB/+rwhZiAIEFkyAu//GXntow+iG20bv/1C3U7KTCIDqVZuURF+Uc1NOQn6tL+pn1roivSsW14SQm6qrlWnT1qObjE3vbPyBW/CoIGXhRK7NvxeMygjvyVY1EkYIU7/5//M4xLwewtrhHnsMmvhkZtbKR1QoWMx40MjQ+o1zjVj14x3Gb/JFCPVaE4Kg0W1PJZX1rYEQa/kkluAPlXEKXcvVYgydaL5a/U7zy+7zcJRf5v/5b+XP/8HD20JIdr0U/UBHojCz6ZI7Aygp//M4xKAZ8m7I9nsGXqKTRVNjaQGtg+L6aeZfALONZ5HoqmRVUD7Un0sO5eWd4ubmObUlg26Fca2u9WELgFmVxRCFykxE5BuFEB7kvYfnXmR8v8TtU2cZxoiBGyR8qCrfKY8KjwFE3tYKJ2fK//M4xJcZIm7aPnsGXrm7niCtJJ/khF5u/7Cy4lHDhRxAEGRQDtlDKioIGAu1t3MmJ1o4kq5G1qSelQsKnsJRKoBKqE9G3SkHv5r0RebJRNSYnG4tGdBEZEexQYQlU9LdD97zJJmTvTE4d6IE//M4xJEXoVqgFsmGyCCK7Gf/J5Z7lQe6EvUZpDqzy9d/5Il4C4YKu3OrqTFG/tFobMpahNRFlwolgBb/+nLhCuPS7dYXAitV7ZOXYjlkUZeJjbA+QUGFWQyrqWqxcw+MJRztboc6SGPcPCAF//M4xJEXcfKsNsGGoA2VF0InXmtros/RFB1ct/oTF/4IiiWCAMrNpuO6xY6kqp0245G5bhUDC3BAkNhGOEJ3cQiu2NYnuhNnkZborpW/9RiSBxiEt3fPKrHkUaeb2qa/Q76Pdx8jMX1z+Xv6//M4xJIU6P7RlmDMsgc+mcsvwsstZzLNtaamWLhcapi5CioM0yGChcD7OOtIHFYi+CRMWa8+qyVNH1au0SAYxGQYDSKSpHUplvSG81DsfFkSWPlbNHGwvSKGs+xtYda8ujO/mSzHfPbqiJUq//M4xJ0U0urdHhhHjgQHQbOVCz6aBVdXTbis2eJDX4i8aqjCGLHCsUlcQTpTGviu0jZiciCj7GGjHE8m1pLzaxYx0BBJ544GT0JSK5IBC7U38VnjASnKS8r+4RTz3os7v9dtXrrQVty2Syy4//M4xKgUIWqkIMGG1CYTBIyQUbCJub58TSJQkMIbbuw4lwr/SaTXZCWm57fFMKhET/rn//GvHP2YSgeBgyiAwKY2SOoA50ixZ17Ugs+5T/9v0oR9Qzr2F00pPKSzbAPH0UNssTKf4mSrLEAH//M4xLYT4PKsdsMGTAjHJLEos6JBx0FHJWRQLVn11fHeOlfaE8CaskK3jswgAX5cQ4REpp6Ilw4RQOmHImCjkuHVczIrE2YlgyAH60f3//+i5cU3LI5LthCpHjVzMKeiZiihliIcufM/Tt+L//M4xMUUqXLJvnpGKgopFlvh7diHaZB1C7FsJ2K+PWIYRPoEWsUODyb4y242+vu0PWwAvAAdLjx7U/n0qHANLgfH/9WsLofhANF1DNbLWADbs63IK+m3JRsJcRLsjGoL0XtN9K8St0CaOOH3//M4xNEV4VawfnsGXBwwdiFHzLf51SuuXpjWethmg9qWAzEMQSLK1rJ5zrQ1yBoPhiF6HBii2hDyemVPZYaDS7avlgAo4lsb//9+Ku2/dUtiVYGCM4AMzPRkuTdFFKT87Uu5tE5b7MgukPDW//M4xNgX8RbZHkvZIh0ZcTTfp0RwL63CymdsKZBPnEZ5gaB0pk50QQ8uTKn9JUQJ7NwOLpw/DeFywNhw/GpJA6JREMDD3IXri98ygFpwAR2mAfjU4sJ4SXaoUOMunNcthcYDW1klmajRdw01//M4xNcXUeLdnmGG9o2otpcjcjA4Sukdl56/yaldUl59+3/80/JbpPcpD37xZ/8VKd1/guAkzsfzccv9rF2BqnLRSMpVuK70hLhlsgQ9RcPmNthvSplitopV9OG5waS2yapJmciMPpN8GFDO//M4xNgV+XbA1npG6rc57mTe8Qu8OW573KuiBUQGJFi3F8NOu36ZycKyoQaCEXNs/K/+Z/M+nPyyK5ZZ//3yWmleOZXThOhXXOUIIL4LqiQABrTqVBMvGEewT6Vyn4itP0zm6gQlcq1rIQ3o//M4xN8UaerEtnpG6mjlesJMC1YqS+ofOAcrZOkSNZz0WJISQV9/KfL+sTVuiieT8EqH/+b7v4NbSBI7Pmzj//GRnnI3LsKVPgso68HylsTTSWVsBkt3XV7rTjtvrenSsK5GXn7FqvNIoPMq//M4xOwbyybItnpG70rBjXRlLq7vadXnV3fn63VjTUTTvbdJ5XEKBy5UqxtrzCiF5AOAvTyB8lkxIfstB+8llJFlI3LbbdwlTh8cSTQ3NmOLIliqFFtNT10yst1WTNbkmfTUTGqNVXoI13ka//M4xNsUQNqwDnpM4SXEJhzkpeVQ1M2340DD6KScvnIjZOGDhqEFKCauZ7h9/zdzeFoX/C62ZymiAAgIAMAJudKc5txQAwuhWfr0T6EIh4YIZ/S8dY9O1xIPCW/A4nOgaFiGKhO2osRug0DY//M4xOkXge7Q/mBFIoSLLeyKBYfLzxXqZxYoz/HvPGzbF2uXXq1NGt38mb23PuPd3u3jKVsNG7D62/fe+/H1vk33d7ek2OU9tdLj3Jx5XEJYWJ7lRC4LwNXek2m1re9zcyGOtoUl9hxuFxfZ//M4xOogkzrdvkjZPg3o09EZoV3CWQzgkAoSSqfEgex8YHqxFQj1osk0QibdDK9x/JhGeotqvD/g+h+nZZFEoEzuGTA3ztQwP1TLavPFzbEJVbM8FqlUwacX9in7aq/rDpOWQk7HEisGm3PS//M4xMYk4zqUAHmZOVYkCxIwWovlg7+LTzLDyCIlriUFXfV+BRpUws6WAu72ndcEqmqbcBGxR/jcDQVJzP1VhdCytXAwAY2YXbjlwPWe9I4Biz9K99Xla0tv9dl7vUNDtszrVfkW3++VzMEB//M4xJEU+O65vHmGpJAmJTpQ+93tZY1HLXM2Oq30TZJqCxYhUP+w1p4jCOEYaXbTEbdTCNLsh113FkjuXqKGMcYsnZxRR935QhplmdzEK6gvUS0X6d4jdUdL6NISji1HuPCRwmaT+p91AEk1//M4xJwUweas9kjEvqv8HHNW0CW6jlZD/60BKvv/kkFNpzFIlIms6KX01Tsaiiza7VhchXuZItVu1WzBhZc1VuwYMbAlY1uhnMhjKK0c2Yi3y//d/0Z0hTSlBhMjfbKw0lO1/ht9X3LTknXq//M4xKgVcU6QDMGE0Aa25JG3I4xQubQksamqmoTJxQp4vTUrpu4yGoUwsTEbussuqewMk7rcMPOGhZAws0Xa4epZZdIdOtHc0wuKERVDAsEE51RXUN/N9nUmkfa9i+RqFmBJkGaDWEDam+sV//M4xLEUWf61lkmEPpr4fNUZyg9/B3VevrghBxxBE7hRqXFjHtspF0QXV6eDLMmKPydznpo3R1s3+/9ncwlb69kVac7L+t099HVP1p1KanK1aO4LcNRVvLP8BC0OJupVVIELL+LFTS0dyCw+//M4xL4UwMqlvkpMcmR0x3sG4XTMuOYs+lHeEs5+rfualjikMkp3Qry9/hc/gx9/vCL4w2RFZ6qOZ2a8SiFiXLvdy82XfD9aaxwH6AX4TAsA+z+aGNgalwXB9Or1o5Gp7HXBBtutUemm/L31//M4xMoVSwJ4VHjEvNqKcnmdw+3bNb670qr2orFY7BWedMMU6N29d0ZyD3AwLExOABAaIjlhb/+3/pPNVb6KAgLt/43AN4NE3xdCkFsKGsTYGSxySKWmggVpNFykyH/SfdajtMZCQQBb8Rfv//M4xNMUeg58NHmGKIzN6Nk7ZfG+8rZOxvv2Gc0JERuRDgtecepSA6AYTEQxBw1a1JltNtJsPvZX2N4yBHsckVmEVcEZYTxi0JalAUZp4ySRHiYlB6ALkQXFTAgQm0KKxQZaElyZfarFRuqY//M4xOAU4aZ4AHmE0D0SJc3NI4S0BlRWMpdOmPQBywWcgXTirgP2OOsAgIISVSP0yMpdLpQXQw10CJj0GVvAkrGL6SAJ5olQAyiIOwREAhOKoENE0AXwKYKcw90y+emhp8PJ9Yii5a/cKCNU//M4xOsYiV6FlnpMALwQCHpQOEZIAhoG0MGrF1i6DYKj+g0dn7soDYhck8dKgGNDvRT2R6KCi2ShUtFlSyaUHgydFzuk3G5JI4AHFwAQGLN8G4NR1Jj4zEIGpRNwFAzTgSizGrjL9ZGjFTkW//M4xOcXwSZwCsJGXCM2dEt6G1faJ6UtV1iCI829FIcOc27UKxJ8xWWYAbCIdeoMmB4yob/4pPYwKyqAExQizxVAYErYGEBWEglLWljx5DC4djynunRWbW6sTniUFlfKj+WXqbG5vrIpvKnq//M4xOcXwOZ89npMBIHBFTVcW9b2omj7IfNVywgFMPigschQXMhRQu0/sWtxFQ8QwIukMGp1noAzGqUBGDKtAApFKhqpgaNrVItt+OxCoTQA0EicuqSZAmMZqrPv4KAB8s5FL+dp13mSsIrJ//M4xOcXQcqlvjIHEt6Xw5GpKaMYbGpU79Wzw2f/qb/oYoNym7Uy7//oNit2jaz+NwxmDfFf/UQy1Wu+r7zx+uITfMwGBFqNah1zJfEeIzR1SZQ2gegVbUJitxSVXJWquQjLIkZIquNILGas//M4xOkWIUJsAMMQGMznsQTOPiJUsEFGEfQ5kpdGd1o5GyKKT4ZSCKueJoacFXqDaGNe+LNjV6JpCBp1rybwef8Oa9E/52yy6yXYGAqERQNkSjyPFCVdVVl0mIozysGZaoXYSqh7wLlsRy8n//M4xO8ZKYJ0dHmGnbrkcEjACg7TNjKBEDZHPrjgodyLJ4R1NKrbdftR1Rr7YlhC0r9XSjL2Xb6LvYqhnMeR2hCAJ0gyXU9bY/baEJdqVYAHwogn0d3dIkerfXEVhkbtQIsN9jE/hAiVfFGj//M4xOkYeX50TMJKPJtgg4RDSqZtqahwQtDCApzU/wg0yTGetczKlObd1y7zb/9/+TpaIPmhVbqb/TmUN1NyCJi+tphqsxUIKCMsrADMGDA6ZSBpMJcSAo002Gsnif2y7OVYdZicDUQaSTzU//M4xOYZatKRvkjFFa4o1G80JhVLYy5ipxqB9hSpDouYTOpnShQazhmUM5bNOu6UjedNB/NpTT3fzsuZlRp41RQLh2H0Ck+i3nd3OkcNGOi202JXabkyKWXWN7fLZp3/tys4tO9yTNlL15rK//M4xN8Wmf549U8YABKiK7rQcCwclkt6f+NVRI3RcS4umJDkOZsK5ROUr2Lh9qE+fRt1evTCgICsZm4eq7MTBmPCU6jBUqCp0RHgaPdQdKnRK7lTpY8Ig7BXrOiUNQaUe8OwVWGvxFBpTEFN//M4xOMkUt5oNZhYAEUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//M4xLATcMW8Ac8YAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\" type=\"audio/mpeg\"/>\n",
       "                        Your browser does not support the audio element.\n",
       "                    </audio>\n",
       "                  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "play_array(out)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "outstanding-sleeping",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "signed-scholarship",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "infrared-bradford",
   "metadata": {},
   "source": [
    "### data prep"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "moral-courtesy",
   "metadata": {},
   "outputs": [],
   "source": [
    "# read_df = pd.read_csv(\"/data-ssd-3/georg/data/DNS-Challenge/datasets/clean/read_speech_meta.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "id": "conceptual-amplifier",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "\n",
    "TRAIN_DATA_DIR = \"/data-ssd-3/georg/data/DNS-Challenge/datasets/training_data-09_02_2021/\"\n",
    "\n",
    "with open(TRAIN_DATA_DIR + \"meta_tr/clean.json\", 'r') as f:\n",
    "    clean_data_tr = json.load(f)\n",
    "with open(TRAIN_DATA_DIR + \"meta_tr/noisy.json\", 'r') as f:\n",
    "    noisy_data_tr = json.load(f)\n",
    "with open(TRAIN_DATA_DIR + \"meta_val/clean.json\", 'r') as f:\n",
    "    clean_data_val = json.load(f)\n",
    "with open(TRAIN_DATA_DIR + \"meta_val/noisy.json\", 'r') as f:\n",
    "    noisy_data_val = json.load(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "id": "rapid-excess",
   "metadata": {},
   "outputs": [],
   "source": [
    "tr_dict = {\n",
    "    \"tr_\" + str(n): {\n",
    "        \"clean_wav\": clean_path,\n",
    "        \"noisy_wav\": noisy_path,\n",
    "        \"length\": n_frames / 16000,\n",
    "    } \n",
    "    for n, ((clean_path, n_frames), (noisy_path, _)) in enumerate(zip(clean_data_tr, noisy_data_tr))\n",
    "}\n",
    "\n",
    "val_dict = {\n",
    "    \"val_\" + str(n): {\n",
    "        \"clean_wav\": clean_path,\n",
    "        \"noisy_wav\": noisy_path,\n",
    "        \"length\": n_frames / 16000,\n",
    "    } \n",
    "    for n, ((clean_path, n_frames), (noisy_path, _)) in enumerate(zip(clean_data_val, noisy_data_val))\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "id": "opened-internet",
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(TRAIN_DATA_DIR + \"sb_meta/train.json\", 'w') as f:\n",
    "    f.write(json.dumps(tr_dict, indent=4))\n",
    "with open(TRAIN_DATA_DIR + \"sb_meta/val.json\", 'w') as f:\n",
    "    f.write(json.dumps(val_dict, indent=4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "collected-wallpaper",
   "metadata": {},
   "outputs": [],
   "source": [
    "# /data-ssd-3/georg/data/DNS-Challenge/datasets/training_data-09_02_2021/sb_meta/train.json\n",
    "# /data-ssd-3/georg/data/DNS-Challenge/datasets/training_data-09_02_2021/sb_meta/val.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "invalid-badge",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cardiovascular-juice",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "brilliant-express",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "fluid-topic",
   "metadata": {},
   "source": [
    "### Train model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "automated-grace",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 500h, ~20mins per epoch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "future-silver",
   "metadata": {},
   "outputs": [],
   "source": [
    "# cd /data-ssd-3/georg/code/speechbrain/recipes/Voicebank/enhance/spectral_mask\n",
    "python train.py hparams/train.yaml --data_parallel_backend --name=lr_0005"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "general-enterprise",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "wooden-veteran",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "burning-virgin",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "juvenile-philosophy",
   "metadata": {},
   "source": [
    "## Playground"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "armed-married",
   "metadata": {},
   "outputs": [],
   "source": [
    "cd recipes/<dataset>/<task>/\n",
    "python experiment.py params.yaml --data_parallel_backend"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "naughty-sequence",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "liquid-premium",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "external-denial",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "acceptable-touch",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "addressed-submission",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "buried-gilbert",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
