{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Understanding TargetPixelFile objects" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Learning Goals\n", "\n", "In this tutorial we will learn the following, \n", " - What a TESS Target Pixel File (TPF) is. \n", " - How to obtain a TPF from the [MAST archive](https://archive.stsci.edu/tess/) via *Lightkurve*.\n", " - How to plot the TPF image.\n", " - How to access the metadata, and understand the file properties and units.\n", "\n", "We will also show the user where they can find more details about TESS Target Pixel Files." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What is a Target Pixel File?\n", "The *TESS* telescope observes stars for long periods of time, just under a month per sector. By doing so *TESS* observes how the brightnesses of a star change over time.\n", "\n", "Not all data for the stars in a given sector is recorded. Instead, pixels are selected around certain targeted stars. These cut-out images are called Target Pixel Files, or TPFs. By combining the amount of flux in the pixels where the star appears, you can make a measurement of the amount of light form a star in that observation.\n", "\n", "TPFs can be thought of as stacks of images, with one image for every telescopic time-stamp. Each time-stamp is referred to as a **cadence**. The TPF images are cut out 'postage stamps' of the full observations, making them easier to work with. TPFs also include information about the astronomical *background* to the image, which is removed from the raw flux.\n", "\n", "TPF files are stored in a [FITS file format](https://fits.gsfc.nasa.gov/fits_primer.html). The *Lightkurve* package allows us to work with FITS files without having to directly handle its detailed file structure.\n", "\n", "TPFs are typically the first port of call when studying a star with *TESS*. They allow us to see where our data is coming from, and identify potential sources of noise or systematic trends.\n", "\n", "In this tutorial we'll cover the basics of working with TPFs in *Lightkurve* using the [`TessTargetPixelFile`](https://docs.lightkurve.org/api/lightkurve.targetpixelfile.TessTargetPixelFile.html?highlight=tesstargetpixelfile) class." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports\n", "This tutorial requires:\n", "- **[Lightkurve](https://docs.lightkurve.org)** to work with TPF files.\n", "- [**Matplotlib**](https://matplotlib.org/) for plotting." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline \n", "import lightkurve as lk\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Defining Terms\n", "\n", "- Target Pixel File (TPF): A file containing the original CCD pixel observations from which light curves are extracted. \n", "\n", "- Cadence: The rate at which TESS photometric observations are stored. \n", "\n", "- Sector: One of TESS's 28 (to date) observing periods, approximately ~27 days in duration. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Downloading Data\n", "The TPFs of stars observed by the *TESS* mission are stored on the [Mikulksi Archive for Space Telescopes](https://archive.stsci.edu/tess/) (MAST) archive, along with metadata about the observations, such as the CCD used.\n", "\n", "Besides raw data measured by the CCD, it will also carry information about the astronomical background, and the recommended aperture for extracting flux.\n", "\n", "You can search for a TPF using the [`search_targetpixelfile()`](https://docs.lightkurve.org/api/lightkurve.search.search_targetpixelfile.html#lightkurve.search.search_targetpixelfile) function. This will search for the right file in the MAST data archive.\n", "\n", "Note here that `search_targetpixelfile` can take several inputs as listed below, only the first is required,\n", "\n", "1. The ID number or name for the object of interest \n", "\n", "2. The mission that the object has been observed in.\n", " \n", "3. Which part of the survey you want to obtain the data from. The *TESS* the survey is divided up into sectors.\n", " \n", "4. The quality of the data you want to obtain. This is set using the keyword `quality_bitmask` and more information about this and can be found [here](https://docs.lightkurve.org/api/lightkurve.utils.KeplerQualityFlags.html#lightkurve.utils.KeplerQualityFlags.DEFAULT_BITMASK). \n", "\n", "In this case we want the Target Pixel File with TESS ID - TIC 307210830, which refers to [L 98-59](https://arxiv.org/pdf/1903.08017.pdf), a bright M dwarf star at a distance of 10.6 pc. This star is host to three terrestrial-sized planets. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "SearchResult containing 7 data products.\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
#observationauthortarget_nameproductFilenamedistance
0TESS Sector 2SPOC307210830tess2018234235059-s0002-0000000307210830-0121-s_tp.fits0.0
1TESS Sector 5SPOC307210830tess2018319095959-s0005-0000000307210830-0125-s_tp.fits0.0
2TESS Sector 8SPOC307210830tess2019032160000-s0008-0000000307210830-0136-s_tp.fits0.0
3TESS Sector 9SPOC307210830tess2019058134432-s0009-0000000307210830-0139-s_tp.fits0.0
4TESS Sector 10SPOC307210830tess2019085135100-s0010-0000000307210830-0140-s_tp.fits0.0
5TESS Sector 11SPOC307210830tess2019112060037-s0011-0000000307210830-0143-s_tp.fits0.0
6TESS Sector 12SPOC307210830tess2019140104343-s0012-0000000307210830-0144-s_tp.fits0.0
" ], "text/plain": [ "SearchResult containing 7 data products.\n", "\n", " # observation author target_name productFilename distance\n", "--- -------------- ------ ----------- ------------------------------------------------------- --------\n", " 0 TESS Sector 2 SPOC 307210830 tess2018234235059-s0002-0000000307210830-0121-s_tp.fits 0.0\n", " 1 TESS Sector 5 SPOC 307210830 tess2018319095959-s0005-0000000307210830-0125-s_tp.fits 0.0\n", " 2 TESS Sector 8 SPOC 307210830 tess2019032160000-s0008-0000000307210830-0136-s_tp.fits 0.0\n", " 3 TESS Sector 9 SPOC 307210830 tess2019058134432-s0009-0000000307210830-0139-s_tp.fits 0.0\n", " 4 TESS Sector 10 SPOC 307210830 tess2019085135100-s0010-0000000307210830-0140-s_tp.fits 0.0\n", " 5 TESS Sector 11 SPOC 307210830 tess2019112060037-s0011-0000000307210830-0143-s_tp.fits 0.0\n", " 6 TESS Sector 12 SPOC 307210830 tess2019140104343-s0012-0000000307210830-0144-s_tp.fits 0.0" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search_result = lk.search_targetpixelfile('TIC 307210830')\n", "search_result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The search function returns a [`SearchResult`](https://docs.lightkurve.org/api/lightkurve.search.SearchResult.html) object, displaying a list. \n", "\n", "In this list, each row represents a different observing period. We find that *TESS* recorded 7 sectors of data for this target across 1 year. The **observation** column lists the TESS sector. The **target_name** represents the TESS Input Catalogue (TIC) ID of the target, and the **productFilename** column is the name of the FITS files downloaded from MAST. The **distance** column shows the separation on the sky between the searched coordinates and the downloaded objects--- this is only relevant when searching for specific coordinates in the sky, and not when looking for individual objects.\n", "\n", "The `SearchResult` object also has several convenient operations, for example, we can select the second data product in the list as follows:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "SearchResult containing 1 data products.\n", "\n", "\n", "\n", "\n", "
#observationauthortarget_nameproductFilenamedistance
0TESS Sector 5SPOC307210830tess2018319095959-s0005-0000000307210830-0125-s_tp.fits0.0
" ], "text/plain": [ "SearchResult containing 1 data products.\n", "\n", " # observation author target_name productFilename distance\n", "--- ------------- ------ ----------- ------------------------------------------------------- --------\n", " 0 TESS Sector 5 SPOC 307210830 tess2018319095959-s0005-0000000307210830-0125-s_tp.fits 0.0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search_result[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This allows us look at the TPF from sector 5 only. Let's now download this data via the `download()` method. Note that we want to specify the quality of the data that we are obtaining, and as such use quality_bitmask='default'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TessTargetPixelFile(TICID: 307210830)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tpf_file = search_result[1].download(quality_bitmask='default')\n", "tpf_file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above code has created a variable named `tpf_file` which is a Python object of type `TessTargetPixelFile`.\n", "You would get the same result if you used the following code instead,\n", "```\n", "tpf_file = lk.search_targetpixelfile('TIC 307210830', mission=\"TESS\", sector=5).download(quality_bitmask='default')\n", "```\n", "This file object provides a convenient way to interact with the data file that has been returned by the archive, which contains both the TPF as well as metadata about the observations.\n", "\n", "Before diving into the properties of the `TessTargetPixelFile`, we can plot the data, also using *Lightkurve*." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAGRCAYAAACkF/OmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeVhT19o34F8SpjBPRRBEnFCKolWc6oy21nmoVrG21tbh9LTV+iq2Ra11qO1bbT9tnVo9UiuIFhWHVgUVEQUUKSKiCCgCKiLzEMKUZH9/8GYfQhJIAoQQnrtXrqvucSUkez97rWetxWEYhgEhhBBCiI7itnUBCCGEEEIaQ8EKIYQQQnQaBSuEEEII0WkUrBBCCCFEp1GwQgghhBCdRsEKIYQQQnQaBSuEEEII0WkUrBBCCCFEp1GwQgghhBCdRsEKIYS0sgMHDmDatGnYunVrWxeFkHbJQNUNp02bpvFJVq5ciQkTJmi8f3vy8OFDJCQkwMbGBpMmTdL4OGfOnMHBgwcBAMHBwTA3N5dZP3/+fFRUVMgsMzAwAJ/Ph7m5OVxdXdGjRw+MGDECrq6uGpdDFaWlpbh27RoePXqEzMxMlJaWoqysDIaGhrC3t0ffvn0xadIkdOvWrdHjiMViXLx4EVevXsWzZ88gEong4OCAIUOG4O2334aFhYXC/RR9Fsp0794du3btkllWUlKCW7du4e7du8jIyEB+fj4YhoG1tTXc3d0xYcIEeHt7Kz2mUChEcnIyHj9+jMePH+PRo0coLCwEACxZsgQzZsxQqWz5+fk4deoU/vnnHxQWFsLY2BjdunXDhAkTMG7cuEb3ra2tRXh4OKKjo5GZmQmhUAgjIyM4OjpiwIABmDZtGl555RWF+0ZHR+PBgwd4/Pgx8vPzUV5ejtraWlhZWaF79+4YPXo0Ro8eDS638Webhw8f4syZM3jw4AHKyspgaWkJDw8PzJgxAx4eHip9Bs317NkzREREICkpCS9fvoRAIIChoSFsbW3Rs2dPDBs2DEOHDoWhoaFWykNaR3N/cwcOHMDZs2ebPE9gYCCsrKzklufk5CAlJQWPHj3C48eP8eTJE1RVVQFQfL1uSJVrlre3NzZu3Kh0/ZMnT/DXX3/h/v37yM/Ph0QigaWlJXr06IFx48Zh5MiR4HA4jZ5DLBbj8uXL7HWjvLwc5ubmcHBwwKuvvopJkyahc+fOjR5DW1QOVqytrRUur6qqYv9IyrYxNjbWoGjtU2pqKoKDg9GtW7dmBSuqMjY2Bp/PZ/9dUVGB8vJyvHjxArdu3cLRo0fRr18/fPLJJ3B2dm6VMjx58gQHDhxg/83lcmFqaoqKigo8ffoUT58+RVhYGN577z3MmTNH4TGqqqqwceNGPHjwAEBd4GVgYMDuHxERgW+//RZdunSR29fa2rrRm49YLEZ5eTkAoFevXjLrhEIhFi1aBIlEwi4zMjICl8tFfn4+8vPzER0djREjRmD16tUKz3P37l1s27atkU+oacnJydiyZQuEQiEAgM/no6KiAklJSUhKSsLNmzexdu1a8Hg8uX2Li4vx9ddfIzMzk11mamqKqqoqPHnyBE+ePMGFCxfwxRdfKAy6Dhw4wF7opftyOBwUFhaisLAQt2/fxoULF7BhwwalF+HTp08jICCA/RzNzMxQVFSE6OhoxMbGYvHixZg5c2ZzPqJGVVdX47fffsPly5dl/pZmZmaora3F8+fP8fz5c1y7dg329vZYtWoVvLy8Wq08pHW1xG8OAAwNDWFmZqZ0vbIA/dChQ7h161azz29mZqb02tVYwHPu3DkcPHiQ/a4bGBjA0NAQRUVFKCoqwu3bt3HlyhX4+/vDyMhI4TFycnKwdetWPH36FMB/r9tlZWUoKSlBWloaunbt2v6ClSNHjihcfvToUQQHBze6DWk9EydOxNKlS2WWCQQCpKenIzIyElFRUbh37x5WrFiBb775Bv369WvxMlhbW2POnDl49dVX0bNnT1hZWYHL5UIkEiE1NRWHDx9GSkoKDh8+jG7dumHQoEFyx/jll1/w4MEDGBkZ4eOPP8a4cePA4/Fw//59/PTTT8jLy8PmzZuxZ88euR/f/v37Gy1feHg4fvnlFwDAG2+8IbNOIpFAIpHA09MTPj4+eO211/DKK6+AYRi8ePECQUFBiIqKQnR0NGxsbLB8+XKF55A+0UhfP//8MyorK1X6/IqLi7F161YIhUJ0794dq1atgpubG6qrq/H333/j8OHDiImJQVBQEN5//325/ffs2YPMzExwuVwsWrQIEydOhJmZGcRiMe7evYv9+/fjxYsX2LFjBw4ePCh3ERw7dixcXFzQp08fODg4sJ9vXl4ezp8/j5MnT+LBgwfYu3cv1q5dK3f+hIQEHDp0CAzDYOzYsfjwww9hY2OD4uJiHDp0CJGRkTh06BBcXV0xcOBAlT4TdVRVVcHf3x/p6ekAgGHDhmHq1Knw8PBg30txcTHu3LmDv/76C+np6UhOTqZgpZ1rzm9OauDAgVi/fr3a5+ZyuXB2dmbPLRQKcfz4cbWPs3LlSgwfPlytfR49esQGKr1798ayZcvQs2dPcLlcFBUV4eTJkzh79iz++ecfhISE4N1335U7RkFBAb766isUFRXB1dUV77//Pl577TUYGRlBJBIhNzcXcXFx6NSpk9rvqbWoHKyQ9sPc3ByvvfYaXnvtNUyePBlbtmxBaWkpvv32W+zZswd2dnYtej43Nze4ubnJLTcwMICnpyc2bdqEpUuXorS0FJcuXZILVtLT0xEVFQWgrgq3fpOhp6cnNmzYgJUrVyI3Nxd///03Zs2apVb5wsPDAQBdu3ZF7969ZdYZGxtj+/bt6NOnj8xyDoeDzp07w8/PDwzD4Pr167hw4QLeffdduZv9kCFDEBQUJLNs9+7dKpfvzz//REVFBczMzPDNN9/AxsaGLdvs2bNRVlaGkydP4vTp05gyZYrM308gEOD27dsAgKlTp2L27NnsOh6Ph4EDB2Lt2rVYtWoVKioqcOfOHYwaNUrm/B988IHCcjk4OOCDDz6AUCjEhQsXEB0dzZazPmmg0qdPH6xatYp9GrWxscGqVauQm5uLhw8fIiAgoFWClV9++QXp6engcDj47LPP5AJSaVl8fHzg4+ODiIgIlJSUtHg5iPY09zfXXF988YVMLWdsbKzWzn316lVIJBLweDxs2LBBppnK1tYWS5cuxYsXL3D79m3cuHFDYbDyyy+/oKioCN26dcP3338PU1NTdp2BgQFcXFzg4uKilfejKq0GK2KxGA8ePEBcXBzu37+PwsJClJWVgc/no1u3bhg3bhz7RN1QRkYGVq5cCaCuTVAaQSYlJaGkpARdunTBzz//zG4vkUhw8eJFXLp0Cc+ePQOPx4Orqyveeust+Pj4YOvWrbh16xamT58uVzMhlZ2djXPnziEpKYmtJu/UqRO8vb0xc+ZM9qYC1N00fH192X8/efJELs9HnfyFltK7d2+sWbMGGzZsQEVFBU6cOKG0dqC18Pl8dO3aFUlJSSgoKJBbHxERAaCuhkbRjcbNzQ1DhgzBzZs3ERERoVawkp2djdTUVADAm2++Kbfe0NBQLlBp6I033sD169chFouRkZEh90Su6PuqKrFYjGvXrgEAJkyYIPOdkpo1axbOnDmD2tpaXL9+XaY5pbi4mK0K7tmzp8JzdO/eHTweD2KxWO0nTwDo06cPLly4AIlEguLiYplg5dGjR8jKygIAzJkzR67anMvl4u2338a3336LzMxMPH78GD169FC7DMo8fPiQDXRnzJih8PvTkI+Pj0xTEQC2uSs+Ph7Pnj1DUVERJBIJ7O3t4eXlhZkzZzZZHR4TE4Nz584hIyMDDMPAyckJ48ePx5QpU1R6L3l5eTh79izu3LmD/Px8iMVi2Nvbo3///pg1axacnJzk9omNjcW2bdtgZmaGY8eOISsrCydOnEBSUhLKyspgY2ODwYMHw9fXV2kzPQDU1NTg0qVLiImJQVZWFioqKmBpaYlOnTph8ODBGDduHOzt7eX2Kysrw9mzZxEfH4/c3FxUV1fD1tYWffv2xYwZM9C9e3eV3ru6mvOba+/nLy4uBlD3MKEonwYA3N3dcfv2bTZFo77U1FQkJCQAAD7++GOZQEWXaTVYycrKgr+//39P/n/tbOXl5Wzb/PXr17FhwwYYGCgv2p07d7Bz507U1NSAz+fLfXFqa2uxbds2xMfHA/hvW1xqaipSUlLw8OHDJssaGhqK33//nb2oGRkZgWEYZGdnIzs7G5cuXcL69evx6quvsuewtrZGdXU1KisrwePx5BJCTUxMVPugWtiAAQPg4eGBlJQUXL16FUuXLpW5qdQPBFsjoKqoqMCTJ08AQOEFNzExEQDQv39/pX/3QYMG4ebNm8jMzERxcbHCm7oily5dAlAXlDSVpKpM/Wanhje55nr06BGbT6OoeQwArKys0LNnTzx8+BB37tyRCVYcHBzA5XIhkUjw6NEjhe8xIyMDYrEYgHzOjiru378PoO4C7eDgILNO+rfj8Xjo37+/wv0HDBjABkt37txp0WDlr7/+AlD391WWD6VIw6Bq3759MjkIZmZmqK6uZnNdIiIi4O/vr7RmqH7CJofDgampKTIzM3HgwAHcuXMHjo6OjZYnKioKu3btQk1NDYC6ayOPx0NOTg5ycnJw5coVrFmzptEmg7i4OPzv//4vampqYGZmBolEgvz8fJw/fx4JCQn48ccfYWlpKbff06dPsWXLFrx48YL9bExNTVFSUoKioiKkpKSgtrYWCxYskNkvKSkJ3333HQQCAYC674CRkRHy8vIQERGByMhILFu2TGGwVv/zUiUhlfyX9LuUl5eH0tJShQFLWloaAMUPMNKHQxcXF60lvrcErQYrBgYGGDFiBMaOHYvevXvD2toaHA4HFRUViIqKQmBgIBISEhASEiJTS9HQL7/8gj59+mDJkiVsD5Pnz5+z64OCgthAZf78+ZgxYwbMzc0hEAhw6tQphISENPrjuHLlCg4dOgQjIyO8/fbbmDhxIuzs7CCRSJCdnY3Dhw8jPj4e27Ztw549e2BlZQVTU1McOXKE7cXj6uoqU9PT1gYPHoyUlBQ2cGjJG4YiEokEpaWlSE9PR3BwMMrLy8HlcjF9+nSZ7Wpra5GTkwOgrplGmfrrsrOzVQpWamtrcfXqVQDA8OHDlfYmasq9e/cA1N2EWrpnlbRWAmj6/T98+BDZ2dkyy42NjTF+/HhcunQJf/31F+zs7BTmrAB1+U1N9ciSEgqFyM3NRXh4ONuMNnnyZLl8IWn5HR0dlQbjJiYm6NSpE3JycuTK31xJSUkA6poLlT1lqsLZ2Rnvvvsuhg8fjk6dOsHExARisRhZWVk4duwYYmNjsWPHDvz2229y146IiAj2xjt+/HgsWrQINjY2qKysxIULF3D48GGZJPiG7t69ix9//BEAMH36dEydOhWdOnUCh8PBy5cvERwcjIiICOzYsQM7d+5UmGReXV2N7du3Y9iwYXjvvffg6OiImpoaREVFYd++fcjNzUVwcLBcrWppaSm+/vprFBQUwNraGosXL8bw4cPB5/NRW1uL3Nxc3Lx5U+49Z2dnY/PmzaiuroaPjw9mzZqFLl26gMfjoaioCKGhoTh79ix+++03dOnSRWfzg9LS0vDxxx8jLy8PPB4P9vb26NevH6ZMmdLqvSiBupzPffv2oby8HHw+H66urhg2bBjefPNNpTUeb7zxBkJDQyESibBlyxaZnJXi4mKcOHECt2/fhpmZGd577z25/aWdGPr27QuBQIATJ04gJiYGBQUFMDExabKVo61oNVhxdXXFl19+KbfczMwMkyZNgpOTEzZs2IC///4b8+fPV9rtyt7eHt98841MFrW0p4u0WhIAZs6cKdNeZ25ujvfffx/V1dVKu61VVlayXYZXr16N119/nV3H5XLh5uaGDRs2YP369bh37x7+/vtvuScOXVT/JpWbm9tqwcoPP/yA69evyy23sbHBp59+KvdkX1JSwtZWNJZLU39dUVGRSmWJi4tDaWkpAMVNQKooLi7GmTNnANQFfLa2thodRxnpe+FyuY0GYNL3r+i9L126FAKBALGxsQgICEBAQADMzMxQWVkJiUQCZ2dnLF26tMnhB/755x988803cssNDAzw1ltv4cMPP1Ra/qbyoOzs7JCTk6Py304VZWVlbJV4c5sbFi9eLLeMx+Ohe/fu+Oqrr/Dll1/iwYMHiIyMxNSpU9ltxGIx27FgyJAh+Pzzz9l1fD4fs2fPhkQiweHDhxWeVyKRYN++fZBIJPjoo4/kekw5Ojpi1apVAOqCohMnTrD/rk8kEmHQoEHw8/NjlxkZGWHChAkoKChgE8UbBivHjh1DQUEB+Hw+vv/+e5keg4aGhujSpYvC4OjAgQOorq7G1KlT5Y5pa2uLjz76CCYmJjh27BiCg4N1NlgpLi5GaWkpTE1NIRQK2d6HFy9exPvvv4+33367Vc+fmZkJIyMjGBsbo7y8HPfv38f9+/dx7tw5fPXVVwprRpycnODv74+ffvoJqampWL16NdtKUVlZCUNDQ4wcORILFy5U2ANU+nAozfEqKCiQ6cEpbeW4evUqNmzY0GYtAg3p1KBw/fv3h6GhIUpLS/Hs2TOl282YMUNpd6+4uDjU1taCx+MprRaeO3eu0i5pMTExEAgE6Ny5s0ygUh+Xy8XYsWMBgG3703X1n4ykzQ5S3bt3x7lz53Du3LlmNwGZmZnB2tpaphbD1tYWS5YsUdjMUT+HorEu7vXXqZp3Ia0R6NSpk0YXS5FIhB9++AECgQB8Ph8fffSR2sdoivS9GBkZNTomgvT9SyQSVFdXy6zj8/nw8/ODr68v+72uqKhgg8Dq6moIBAKIRKJGy2JoaAhra2tYW1uzT1QcDgdTp07F3LlzFTbR1S9/Y6Tl1yRnRpn63+PWbEbgcDhsl2/pU6lUSkoKm4c1f/58hfvPmDFDaffY+/fv4/nz5+Dz+Y3mtvj4+ACoawJXZt68eQqXDx06FEBdcFc/WBSLxWyTwLRp01Qe2iAvLw+JiYngcDiNNr1Jy5ySkiKXO7F06VL2mtMWTUCurq5YsmQJfvvtN5w6dQrBwcEICQnBhg0b4OrqColEgt9//529hrS0kSNHwt/fH0FBQTh58iSOHTuGP/74A++//z7blLZp0yalwf3gwYNlhnIQiUTsb0ssFqOqqkruOg/U1TZLmxrDwsJQXFyMxYsXs0FlUFAQ5s6dC6Cu1rKpnpbapPXeQFVVVQgPD8etW7eQnZ2t9CJaWFioMKIHwOaJKPL48WMAQJcuXZRWC1tbW8PV1VVmXAop6cUoPz9fYRWaVG1tLbsd+a9PPvkEn3zyCYC6G1NycjL++OMPbN++HRcuXMC6deu0cnHKz89n8yneeOONJgdHaohhGPzyyy9ITk4Gl8vFypUrdWa8gYaePn2KrVu34sWLFxg/fjymT58OJycnlJaWIiEhAYGBgQgODkZSUhK2bNmiNND38vJiawnEYjFycnIQGhqK06dP4/Lly/jyyy+V5qW0BYZh2P9X9++rSFpaGsLCwtgApKqqSuYcAOQSxB89egSgbmwaZQnOhoaG8PDwYJum65Neb2pqahTWXElJc46Ki4tRW1sr9zfk8XhKa0vr1waWl5ez/87OzmbH9RkyZIjScysrMwCZmqTGyl5YWNhq4zxpYuLEiXLLjIyMMGTIEPTt2xdr1qzB06dPcfjwYYwbN67FBxH89NNP5ZbZ2Nhg7ty56NWrF77++muUlJQgJCREruaKYRgEBQXh+PHjcHBwgJ+fHzw9PcHn8/H06VOEhITg1q1bSExMxNq1a2XynKTfI6DuwWfOnDkyPQilrQ+FhYWIiIjA1atXMX/+/CZzrrRBqzUr+fn5WLFiBQ4cOMD24uFyubCysmKf6KQXHUVZzFKNtU1Lq/2bqq5Xtl4aydbW1qKkpETpSzr6YMOnXF0lTYIDoHHuhrr4fD4GDx6M7du3w8XFBcnJyTh06JDcNlKNfZb11zXW/i8lHRyMy+WqPXoywzDYvXs3IiIi2KrSESNGqHUMVUnfS01NjdyNsT7p++dyuTK1TLW1tdi8eTNycnIwdepUrFy5Et26dWPzRCZNmoSNGzeCy+Xi/v37bEJqU3g8Hrp06YIVK1Zg3rx5EAgEbC2TsvI3Rlp+Vf52qqqfLKroKVIdf/75J9asWYPw8HA8ffoU1dXVbC2htbU1W+6G31FpF2hbW9tGAyZFPWmA/15vxGJxo9eb+u9P0e/ExMREaW1x/byD+jcraRMaALnE6cZIy8wwTKNlrt89vL1cJ4G6wFOaPlBWViZXm9baBgwYwNZC37x5U259eHg4jh8/Dj6fj++++w6jR4+GnZ0dTE1N0bt3b6xfvx5DhgyBSCTCvn37ZGozG35PlPWslAYwEomk0do8bdJqzcrevXvx4sUL2NraYvHixXjttdfkAo933nkHlZWVjV64Gxv2W7qfpk9a0qrz0aNHy7T/tnfS3jiA4h45rcnExAQTJ07Ef/7zH0RERODjjz9mn1Ssra3Z3iz1R1FtqP66pgJRhmFw+fJlAHWDPqkzrgzDMNizZw/Cw8PB4XDwySeftOpUEdL3Iu0WrOy9Sd9/w/UxMTHIzc0FoPzC4+7ujr59+yIpKQkxMTFqj1Mzc+ZMHD9+HGVlZYiNjZXpHiwtT2N/u8bK3xyWlpbs4HMZGRkaHyctLQ2BgYFgGAbjx4/HtGnT4ObmJnOTDw0NZceTUaS515vevXtjx44dGh1D26QBj42NDf744482Lk3rqD+cQW5urtZrFPv06YP4+HgUFBRAJBLJNMGGhoYCqGtKUhZkzp49G3FxcSguLkZKSopMLzZbW1sUFBTAyspKYe8woC4HVHpd1pXWA63VrAgEAja/Y8WKFRg7dqxcoFJVVdXsNm3pWAJNJfIpWy/dX1ETUXsmHTjM3Nxc4QBurU0aMIjFYuTl5bHLDQ0N2eaV+j1jGqq/rqks/cTERPYc6iTWSgOVsLAwcDgc/Pvf/1ZYXdyS6vcAUuX9N3zv0qGyDQwMlM79A4D9jF++fKl2Gc3NzdmcFGn3Vilp+V++fKm0NrSqqor9e7R0DwtpLtKDBw/YWlV1Xb9+HQzDoHfv3vj888/Ro0cPuV4Q9Wsh6pNeLwoLCxt9wFIWzEmTqp89eyZT66EN9RO66/8mVd2vpKRE48+caKa2tpb9DTbWNFO/ybrhb156/W+JplNt0lqwIh1kCVCeuS/NMWgOabttdna20h9SSUkJe5FvSJoPk52d3ejNQxnpF6CxC5e2JSYmIiUlBUBd0ltTE9K1BunTPyDfFDBgwAAAdV04lV2wpYGum5tbk92WpUlx1tbWKrfFS5t+6gcqb731lkr7NkfPnj3ZZjllydqlpaVsbsRrr70ms076fROJRI0G6NIqeU2aYYqLi9lmHmV/O5FIxHYjbuju3btsXlrD8jeXNCm1pqYGJ06cUHm/+uPlSJ8cG+tRdPfuXYXLpXkqQqGQzZdrqLa2lv39NSQd56KiogL//PNP0wVvQa6urmzib1xcnMr7Sa+R0pGd9VH9sbjaIl9DOpClvb29TK1K/Wt3YwFm/Sa4hr9Z6W+wpKQEZWVlCvd//vw5+xvRlSH3tXbXqp8NX79JQqqmpgZHjx5t9nkGDx4MQ0NDiMVinDp1SuE2J0+eVHpTHDlyJFvWffv2sYm0yjRsw5f2jVd1FuDWlpaWxlYvm5ubt0pXvKaeCAUCAS5evAigrnqxYVOAtNdASUkJO4hbfVlZWezFVLqtMmVlZezgXuPHj1dpnABpoFK/6UcbgQpQl08wZswYAHV5Noqe4M+cOQORSARDQ0O5ofLrJ1WeP39e4Tlyc3PZQKjhaL2qPM3/+eef7P83nFuqZ8+ebO3KiRMn5AbNk0gkOHnyJIC6WpiW7jLv4eGBkSNHAqj7nBR9fxqKjIxku6MD/702KbouAcC1a9eUNjN5eHiw+SjK5oY5d+6c3HVCysvLi22WPXToUJPXjebm5tTH4/HY39O5c+dkxqpqTOfOndnvwbFjx5psJmjJMreEph4kKysr2fnuLCwsGu3Q0Rrnv3v3LpuMLe3JJcXj8diakdjYWKXTRtS/FjT8zY8aNYrNe1N2j5Qu5/F4Sger1DatBSt2dnbsRW3//v1ISUlh/2iPHj3C+vXrkZub2+jItaqwsrJix5MIDQ1FcHAwewEQCAQIDAzE6dOnlfZIMTMzY4ffv3//Pr766iskJSWxF3WGYZCTk4O//voLK1asQGRkpMz+0veYn5/fZt2apXPA7Ny5E1988QVKS0thbGyM9evXK8wZyMjIwLRp0zBt2jSZi7iqNm7ciCNHjuDRo0cywZ1QKER0dDTWrFnDPgUomqeiV69eGD16NADg4MGDuHLlCvt5P3jwAFu3boVYLIajo2OTQ5dfvXqVLYMqQ68zDIO9e/eygcqnn36qUdNPeXk5SktL2Zf0u11VVSWzXFFTyTvvvAMzMzMIBAJs3ryZrdGrqalBaGgoe7OfOXOmXP7NoEGD2JvdiRMn8Mcff7AXsOrqasTGxmLdunWoqalROCjf33//je+//x63bt2SecoSi8V49OgRfvzxRzYp19vbW+HUBB9++CE4HA5SUlKwc+dO9vwlJSXYuXMnUlJSwOFwlPZ22bp1K6ZNm6a0629TVqxYgR49eoBhGPz888/Ytm0b7t69K/NdLC0tRWRkJPz8/PDjjz/KNDdL2/Ol8xdJrxdCoRBnzpzBzp07lSal83g89jt98+ZN/Pzzz2zAWVVVhdOnT+Pw4cNKuy7zeDx88skn4PF4eP78Ofz8/HDr1i2ZhOW8vDy2N1b9wLElzJs3D/b29qisrMSXX36JiIgI9jtaW1uL7OxsHDlyRC4QXr58Ofh8PkpLS+Hn54fIyEiZz7S4uBjXr1/Hpk2bsGfPHrnzHjhwgL3mKAvkmqLpby4uLg6bNm1CVFSUTG1kbW0t4uPjsXbtWvY3+P777yvsCVRbWytzjvrvXSAQyKxr+ECwc+dOHDx4EPfv35cpW3FxMU6ePInNmzeDYRhYWFiw3Yjrk6UlLwMAACAASURBVI7zU1ZWhg0bNuDevXvsdz0vLw+7d+9mHw6HDx8uVzMk7XUE1M2WfurUKbb8AoEAR44cYbu0T5kyRWlyuLZpNcF2+fLl2LhxI168eIG1a9fCyMgIPB6PHcjGz88Pu3btanI8iKYsXLgQmZmZSEhIwNGjR3Hs2DGYmZmxY09MnToV+fn5uHXrlsIv4vjx41FTU4PffvsNqampWLduHQwMDMDn81FZWSlTvobtfr169ULPnj3x6NEjbNy4EWZmZuyFav78+SrdQNURFhbGzo0C1F1gG/bM8PLywieffNJqXW/Lysrw559/4s8//2QHF2IYBkKhkL2AGBkZ4aOPPpKrGZD67LPPkJ+fz97wdu/eDQMDA/bHbGNjg6+//rrJ8TykT9aenp4qdZXMzMxkf9hcLhdHjhxpdPbwhQsXKgxmli5dqvCpODAwEIGBgey/Fc1FZWNjg/Xr12PLli149OgRPv30U5iamqK6upq90L3++usKAz1DQ0OsW7cOGzduRGFhIUJCQhASEgI+ny/T9dbAwACffPKJXM0GwzCIjo5GdHQ0gLpkaCMjIwiFQpnv+eDBg5UmnA8cOBAffvghAgICcPXqVURGRrKDbDEMAy6Xi8WLF7fKJIYA2AHNfv31V0RERCA2NhaxsbHssPf1x5YA6qr16ydMDh8+HN7e3oiPj8epU6dw6tQpmJubQygUsjNye3t7Kx3YbcKECXj8+DH++usvXLp0CZcvX2YH5ROLxfD29oajo6PSnlj9+/fHF198gZ07d7Ld0LlcLjvkf/2yu7u7t9CnVsfKygqbN2/G5s2bkZubi//3//4fdu3axf79pDVlDUcU79q1KzZt2oTvv/8ehYWF+PHHH9ky19bWytyEW6snnaa/OYlEgvj4eLb2wtjYmP3OS39vPB4PCxcuVFrDKh3BXFm56tu1a5dME2NFRQUiIiJw5swZ9jsqXS7l4OCAr776SmHngDfeeAOZmZk4e/YsMjMz4e/vDy6XCyMjI5nPvXfv3lixYoXCMr7zzjvIy8tDeHg4AgIC8Mcff7CDwkn/5iNGjFA4WGJb0Wqw0q9fP2zfvh3Hjh3D/fv3UVlZCUtLSwwdOhSzZ89Gt27dsGvXrmafx9DQEF9//bXMRIbS6bQnT56MsWPHsiPpKnvimTRpEgYNGoTz58/jzp07ePnyJSoqKsDn8+Hm5gZPT08MGzZMYRXhN998g6NHj+LOnTsoKCiQeVJradXV1Wy3QGlAZWdnB1dXV/To0QMjR45UOl5NS/n3v/+Nf/75Bw8ePMDLly9RWloKkUgES0tLODs7o3///pgwYUKj3SNNTEzw3Xff4eLFi7h69SqePXuG2tpauLi4YOjQoXj77beb7HKdlpbGPhGpmlhbv0pW2n20MY11qW+Ovn37Yvfu3Th16hTi4+NRWFgIU1NTuLm54Y033mh0XqOuXbtiz549uHDhAm7fvo2nT59CKBTC2NgYDg4O8PLywpQpUxTOojpq1CgYGhri3r17yMrKQklJCQQCAYyNjdG5c2e4u7tj7NixTfaGmDlzJvr06YPTp08jJSWFnUTPw8MDM2bMaHQOEmnyacMZsdVhYmKClStXYvbs2YiIiMC9e/fw8uVLCAQCGBoawtnZGb169cLrr7+OwYMHy+UBrFu3DqGhobh69SpevHgBhmHQvXt3jB07FlOnTm2yy/fy5cvh6emJv/76CxkZGRCJROjatSs7kWHDLvsNDR8+HK+++irOnz+Pf/75B8+fP0dFRQWMjY3h5uYGDw8PDB06tFVGgu3SpQv7NB4TE4Ps7GxUVVXBxsZGZiLDhjw8PLB//36EhYUhLi6OnQDR0NAQLi4ucHd3x9ChQ1stSNVU79698cEHH7DTV5SVlbHXdkdHR/Tt2xdvvfVWq806PGPGDDg5OSE1NRX5+fkoLy+HWCyGjY0N3NzcMHToUIwfP77RkWOXLl2K4cOHIzw8HA8fPkRhYSFEIhGsra3RvXt3jBo1qtHh8qVDMgwdOhQXL15Eeno6BAIBLCws0KtXL7zxxhtKB0VtKxxGlzJBtUQkEmHhwoWoqKjAhg0b1BoQiRDScioqKrBgwQJIJBL89NNPGk20SAjRfzo13L62nD9/nn1q8fT0bOviENJhJScnQyKRYPjw4RSoEEKU0ttg5dtvv8WtW7dkMtELCwsRFBTEVslOmjRJaTMQIaT1JSUlgcvlYuHChW1dFEKIDtPbZqD6M8xKhxiunzMycOBArFu3rsmETUIIIYS0Lb0NVi5evIjExEQ8efIEpaWlqK6uhrm5OXr06IGxY8di9OjRbTI4GiGEEELUo7fBCiGEEEL0A1UtEEIIIUSnUbBCCCGEEJ1GwQohhBBCdBoFK4QQQgjRaRSsEEIIIUSnUbBCCCGEEJ1GwQohhBBCdJpWZ10mrUsikaCoqAh8Ph8cDqeti0MIIU1iGAaVlZWwtbVts4E6a2pqIBKJNN7fwMCARkNvZRSs6JGioiIsXry4rYtBCCFqCwgIgL29vdbPW1NTgyUfzkBxqea3QxsbGxw8eJACllZEwYoe4fP5AICqy0aAmGpWiBJarnXjmvC1dzKedp/MJQKBVs+nl3gMTCbUsNcvbROJRCguNcCB/02HKV+i9v7CSi6WftELIpGIgpVWRMGKHmGbfsQcQETBClFC202EWg2ctdyMQL+zFtPWTdfGJiIYm6gfrIgZSv3UBvqUCSGEEKLTqGaFEEJIhycBAwnUn9dXk32I+ihYIYQQ0uFJ/u8/9fcj2kDBCiGEkA5PzDAQM+rXkmiyD1EfBSuEEEI6PEbDZiCGmoG0goIVQgghHZ4YDMQaBB6a7EPUR72BCCGEEKLTqGaFEEJIh0e9gXQbBSuEEEI6PEqw1W0UrBBCCOnwJNCsG3Jj+2RkZODIkSPIzMxEWVkZjIyM4OzsjClTpmDcuHEy21ZWViIwMBA3btxAeXk5XFxcMGfOHIwePVruuKpuq84xdR0FK3rI6PVqALJDV4uzeBBn0Z+bEEIUaY0E24qKCtjb22P06NGws7NDVVUVrl27hp9++gl5eXmYN28eu+22bduQnp6ORYsWwdnZGdeuXcP27dshkUgwduxYmeOquq06x9R1dPfSQzUxxjRnCSGEqEHM1L002U+Zfv36oV+/fjLLhgwZgpcvX+LixYtssBIfH4/ExESsWbMGY8aMAQB4eXkhLy8PAQEBGDVqFHg8nlrbqnPM9oB6AxFCCOnwGPy3KUidlyYZKxYWFjKBQmxsLPh8PkaOHCmz3YQJE1BUVIS0tDS1t1XnmO0BBSuEEEJIK5JIJBCLxSgtLcXff/+NO3fu4O2332bXZ2VlwcXFRa6mw83NjV2v7rbqHLM9oGYgQgghHZ4YHIihfvO5Kvvs27cPFy9eBAAYGBhg2bJlmDRpEru+vLwcjo6OcvtZWFiw69XdVp1jtgcUrBBCCOnwJEzdS5P9mjJ37ly8+eabKC0tRVxcHH799VdUVVVh9uzZ6p+wg6JghRBCSIfXmjUrDg4OcHBwAAB4e3sDAP744w+MHz8eVlZWsLCwUFjTIV0mrQ2R/r8q26pzzPaAclYIIYR0eNJgRZOXutzd3SEWi5GbmwugLo/k2bNnEIvFMttJ80q6du3KLlN1W3WO2R5QsEIIIaTDkzAcjV/qSkpKApfLZXNKhg0bhsrKSsTExMhsd+XKFdja2sLd3Z1dpuq26hyzPaBmIEIIIR1eazQD7d69G3w+H+7u7rC2tkZZWRmio6Nx/fp1zJ49G1ZWVgDqmoYGDBiAvXv3QigUwsnJCVFRUUhISMDq1atlevSouq06x2wPKFghhBBCWkGfPn1w+fJlREREoKKiAiYmJujWrRv+53/+R264fX9/fxw5cgRBQUHs0Ph+fn4Kh8ZXdVt1jqnrOAxDszDpC6FQiHnz5qEqjEawJY3gaPe7weXztXcyLT8tStpZ90+dZMDAZGI1jh8/DlNTU62fXnrd/GLHfRjz1Z8dqLqSi/9d49lm5e8oqGaFEEJIh6dp/okm+xD1UbBCCCGkw2vNrsuk+ShY0UM06zIhhKhHzHA1nMiQOtVqA9299FDNTVPFOSst/ZuSiJvehugcjrZ7AWjzfBL1cw6aRZv5P5Re2Kok4EKTb4+ERgDRCvqUCSGEEKLTqGaFEEJIh0c5K7qNghVCCCEdnpjhaJR/IqbeQFpBwQohhJAOjwFHo5wVhmpWtIKCFUIIIR2eGFyIoX4SMzUDaQcFK4QQQjo8MbgQa9DjioIV7aBghRBCSIdX13VZ/WBFQsGKVlCw0sLCwsKwe/dumJiYICQkhF0uFApx/PhxZGRkICMjA2VlZfD19cWCBQsUHqeyshKBgYG4ceMGOwHVnDlz2uUEVIQQQkhzULDSggoLCxEQEABbW1sIhUKZdeXl5QgLC4ObmxuGDRuG8PDwRo+1bds2pKenY9GiRXB2dsa1a9ewfft2SCQSjB07thXfBSGEdDx1vYE024+0PgpWWtCePXvg6ekJc3NzxMTEyKxzcHBAcHAwOBwOSktLGw1W4uPjkZiYiDVr1mDMmDEAAC8vL+Tl5SEgIACjRo0CT9ujkBJCiB6jBFvdRiPYtpCrV68iOTkZH3/8scL1HA4HHBWH5o6NjQWfz8fIkSNllk+YMAFFRUVIS0trdnkJIYT8l4ThavwirY8+5RZQUlKCAwcOYNGiRbC3t2/28bKysuDi4iJXe+Lm5saubxSPAQxUeHFprhFCCAHqEmzFGrxobiDtoGagFrBv3z64uLhg8uTJLXK88vJyODo6yi23sLBg1zfGxKdSpfOI0g0hemSkfgEJIUTPiBmORs9vlLOiHRSsNFN0dDTi4uKwa9culZt5WltVBB8Qq1AWLU9QSwghhGiCgpVmqKysxP79+zF16lTY2tpCIBAAAEQiEQBAIBDAwMAAJiYmah3XwsJCYe2JdJm0hkUpMQcQ6UbgRAgh7QGNs6LbKFhphrKyMpSUlOD06dM4ffq03HpfX18MHToU69evV+u4bm5uiIqKglgslslbkeaqdO3atXkFJ4QQIqOuGUiDWZcp9U8rKFhpBhsbG2zbtk1u+YkTJ5CcnIxvvvkGlpaWah932LBhCAsLQ0xMDEaNGsUuv3LlCmxtbeHu7t6schNCCJEl0XAiQ2pN1w4KVprByMgI/fr1k1t++fJlcLlcuXXx8fGorq5GZWVdAmx2djaio6MBAIMGDWKbi7y9vTFgwADs3bsXQqEQTk5OiIqKQkJCAlavXk1jrBBCSAsTM1wNE2xbvixEHgUrWrRv3z7k5eWx/46OjmaDlYMHD8rktvj7++PIkSMICgpih9v38/Oj4fYJIaQViMHVqBOyuMVLQhShYKUVrFq1CqtWrZJb/p///EflY/D5fCxbtgzLli1ryaIRQghRgGE4kGhQS6LBRM1EAzSaDSGEEEJ0GtWsEEII6fDE4GrUCZmagbSDghVCCCEdXt08P5rs1/JlIfIoWCGEENLhicGhmhUdRsEKIYSQDo9qVnQbBSt6yGi4EGjwjCDOMoQ427BtCkQIITqOalZ0GwUreqgmxkTJ3EA01qKu4hhqb/ZrnoO91s4FABBr73IuyivQ2rkA6G+/VW1OykpT6xAV6HWw8uTJE3C5XJpLhxBCSKOoGUi36fU4KytXrsRvv/3W1sUghBCi4yQMB2KGq/ZLosHkh0R9el2zYm5uDhsbm7YuBiGEEB0nAUejrJW6xnWqXmlteh2s9O7dG1lZWW1dDEIIITpOzHABDWpJxAwDSrNtfXodrPj6+uKLL75AaGgoZs2a1dbFIYQQoqMkDAccDYKVxnJW7t69i8jISKSkpKCgoABmZmbo1asX5s+fj549e7Lb3bt3D/7+/gqPsX37dvTp00dmWWVlJQIDA3Hjxg12ots5c+bITXSr6nbtgV4HK8+ePcO4cePw+++/4+rVqxg8eDBeeeUVGBkp7nnh4+Oj5RISQgjRBWJwoUnXJHEjTUAXLlxAeXk5pk+fji5duqCsrAyhoaFYs2YNNm3ahP79+8ts//7776Nfv34yyxR1ENm2bRvS09OxaNEiODs749q1a9i+fTskEgnGjh2r9nbtgV4HKzt37gSHwwHDMMjMzERmZiY4CrrkMQwDDodDwQohhJAW869//QvW1tYyywYOHIhly5YhJCRELljp3LmzXC1KQ/Hx8UhMTMSaNWswZswYAICXlxfy8vIQEBCAUaNGgcfjqbxde6HXwcr8+fMVBieEEEJIfa3RDNQwUAEAPp8PV1dXFBRoNiZQbGws+Hw+Ro4cKbN8woQJ2LFjB9LS0uDh4aHydu2FXgcrCxYsaOsiEEIIaQck4GrYG0i9nkAVFRV4/PgxvLy85Nbt378fP/zwA4yNjdGnTx/MmzcPnp6eMttkZWXBxcVFrlbEzc2NXe/h4aHydu2FXgcrhBBCiCokDEej3kDqDgq3f/9+VFVV4Z133mGXmZqaYvr06ejbty8sLS3x4sULnDp1Cv7+/ti4cSMGDhzIblteXg5HR0e541pYWLDr1dmuvegwwUpGRgbS09NRVlYGV1dXDB06FABQW1uL2tpamJqatnEJCSGEtBVtBCuBgYGIjIzE8uXLZXoD9ejRAz169GD/7enpiWHDhuGzzz5DQECATLDSUel9sPL06VPs2rUL6enp7DIfHx82WLl06RJ+/fVXfP311xg0aFBbFZMQQkgbkmg4zopExfmhgoODcfz4cbz33nuYOnVqk9ubm5tj8ODBuHDhAqqrq2FsbAygrmZEUa2IdJm05kTV7doLvR5uPy8vD19++SXS0tIwdOhQfPDBB2AafLFGjx4NHo+HmJiYNiplyzMaXgWjUbIvXldRWxeLEEI6pODgYBw9ehQLFiyQaf5pivR+Vb+jiJubG549ewZxgwlCpQOgSrs6q7pde6HXwUpwcDAEAgE+//xz+Pv7KxwYztzcHF26dMHDhw/boIStoybWBDXXZV/iLL2vRCOEEI2JwdH41Zhjx47h6NGjmDdvHnx9fVUuj0AgwO3bt9G9e3eZscGGDRuGyspKuQfsK1euwNbWFu7u7mpt117o9R0sISEB3bt3b3L8FAcHByQnJ2upVIQQQnRNa+SshIaGIigoCAMHDoS3t7fcQ7F0TJXt27fjlVdeQa9evWBpaYmcnByEhoaipKQEn3/+ucw+3t7eGDBgAPbu3QuhUAgnJydERUUhISEBq1evZnv/qLpde6HXwUp5eTleffXVJrfjcDioqanRQokIIYToIgk0zFlppOtyXFwcgLoH54SEBLn1586dA1DXZHPjxg1cvHgRlZWVsLCwwKuvvor/+Z//UVgD4u/vjyNHjiAoKIgdRt/Pz09uGH1Vt2sP9DpYsbS0xMuXL5vc7unTp7Czs9NCiQghhOiiutmTWzZY+e6771Q6xty5czF37lyVz8nn87Fs2TIsW7asRbZrD/Q6Z6Vv3754/PgxHjx4oHSbuLg4PH/+HAMGDNBiyQghhOgSMcPR+EVan14HK3PnzgWPx8OWLVsQHh6O0tJSdl1lZSWuXr2KXbt2wdjYmGZlJoSQDoxhuJBo8GIYvb6N6gy9bgbq2rUrVq9ejZ07d2LPnj3Ys2cPOBwOIiIiEBERAQAwNDTE6tWr4eTk1MalJYQQQogieh2sAMCIESPQs2dPnD17FomJicjLy4NEIoGdnR0GDBiAmTNnonPnzm1dTEIIIW1I04kMGWoG0gq9D1YAoFOnTli6dGlbF4MQQoiOkoCj0USGjAb7EPV1iGCFEEIIaQzVrOi2DhGs1NbW4ubNm3jw4AEKCwsBAHZ2dvDw8MDw4cNhaGjYxiUkhBDSliQMFxwNkmVVnBqINJPeByt3797Fzp07UVRUJDcv0Pnz52FjY4OVK1fitddea6MSEkIIaWtUs6Lb9DpYSU1NxaZNmyASieDu7o7Ro0ejU6dOYBgG+fn5iIqKQmpqKrZs2YLvvvsOvXv3busiE0IIaQOUs6Lb9DpYCQwMhFgsxscff4xJkybJrZ82bRouXryIvXv3IigoCJs3b26DUrY8o+FVaDgSoziL1/KTGXK1PLcEI9Haqbj/Nx27tnC6ddHauYRdrbV2LgAQmWpvHAqzs4VaOxeg1a+kdmmzbYPaUYgK9DpYSUtLQ8+ePRUGKlJvvfUWLl26hNTUVC2WrHXVxBgDIor2CSFEVdQMpNv0eug9Doej0mBvTk5O4HDoC0cIIR2VhOFo/CKtT69rVtzd3ZGZmdnkdpmZmejVq1frF4gQQohOYhiOZrUkFKxohV7XrCxcuBA5OTkIDAyERCLfuMwwDIKCgpCTk4OFCxe2QQkJIYToAqpZ0W16VbMine+nPh8fH4SEhCAyMhKvv/46HBwcAAB5eXmIiYlBfn4+3nzzTTx//px6AxFCSAclAQcNOyaohqPfT/06Qq+ClZ07dyrMPWEYBnl5eTh9+jS7vv6YK2FhYQgPD4ePj4/WykoIIYQQ1ehVsDJ//nxKlCWEEKI2CcPRLP+kgzcDiUQiPH/+HKWlpaioqICZmRmsrKzg7OwMA4OWCzH0KlhZsGBBWxcBYWFh2L17N0xMTBASEiKzrrKyEoGBgbhx4wbKy8vh4uKCOXPmYPTo0XLHefz4MYKDg5Geng6BQIBXXnkFY8aMwaxZs2BiYqKtt0MIIR0CBSuqKy0txZUrV3D79m2kpaVBJBLJbWNoaAh3d3d4e3tj/PjxsLKyatY59SpYaWuFhYUICAiAra0thEKh3Ppt27YhPT0dixYtgrOzM65du4bt27dDIpFg7Nix7HbZ2dlYu3YtnJ2dsWTJElhaWuL+/fs4duwYHj9+jPXr12vxXRFCiP6TMNAwWGnxouisnJwcBAUFITY2lg1QLC0t4ezsDAsLC/D5fAiFQggEAjx79gzJyclITk5GYGAghg8fjnfffRedO3fW6NwUrLSgPXv2wNPTE+bm5oiJiZFZFx8fj8TERKxZswZjxowBAHh5eSEvLw8BAQEYNWoUeLy6EWGvXbuGmpoafPXVV+w4Mf3790dRURHCwsIgEAhgbm6u3TdHCCF6jGpWGvfrr7/i4sWLkEgk8PLywpgxY9C3b184Ojoq3Sc3NxdJSUm4du0abty4gZiYGLz11ltYvny52ufX+2CltLQU58+fR3JyMoqKilBbW6twOw6HgwMHDmh8nqtXryI5ORl79+7FkSNH5NbHxsaCz+dj5MiRMssnTJiAHTt2IC0tDR4eHgDAtvOZmprKbGtubg4ul9ui7YCEEEL+byRaClaUCg8Px+TJkzF79mzY2dmptI+joyMcHR3x5ptvorCwECdPnkR4eDgFKw1lZmZi3bp1EAgEcjMut6SSkhIcOHAAixYtgr29vcJtsrKy4OLiwtaeSLm5ubHrpcGKj48Pzpw5g3379uGDDz6ApaUlkpOTcfHiRUyePJlyVgghpIU1p+tyR3Dw4EHY2NhovL+dnR2WLVuGuXPnarS/XgcrBw4cQHl5OcaNG4dZs2bB0dGxVW70+/btg4uLCyZPnqx0m/LycoXVZRYWFux6qU6dOmH79u3Ytm0bli5dyi6fNm2azL+V4qkYmEkASDrGD40QQojmmhOotMRx9DpYSU1NhZubG1atWtVq54iOjkZcXBx27drVYt2mX758iS1btsDa2hpffvklrKyskJaWhuPHj6OqqgorVqxodH+TCTUqnUeUxoMo3bAlikwIIe0a5azoNr0OVvh8vsaZx6qorKzE/v37MXXqVNja2kIgEAAAmyUtEAhgYGAAExMTWFhYyNSeSEmXSWtYAODw4cOorKzEzz//zNYE9e3bF5aWlti1axfGjRuHfv36KS1X1WUjQKzCD0hfp7cnhBA1Uc6KbtPrYMXLywvp6emtdvyysjKUlJTg9OnTOH36tNx6X19fDB06FOvXr4ebmxuioqIgFotl8laysrIAAF27dmWXZWRkoEuXLnJNVtLJFrOzsxsNViDmACL6ARFCiKoYaDaRIaeD5Kwo8/TpU2zatAkHDx5s1fPodbCycOFC+Pn5ISAgAIsWLQKX27IzONjY2GDbtm1yy0+cOIHk5GR88803sLS0BAAMGzYMYWFhiImJwahRo9htr1y5AltbW7i7u7PL7OzskJWVhcrKSvD5fHb5w4cP2fWEEEJaDs26rBmRSIT8/PxWP49eBytOTk744YcfsHXrVty8eRP9+vVTeqPncDiYP3++Wsc3MjJSWMNx+fJlcLlcmXXe3t4YMGAA9u7dC6FQCCcnJ0RFRSEhIQGrV6+WqW2ZPn06vv32W2zYsAEzZsyApaUlUlNTceLECXTp0gWDBg1Sq5yEEEIaJ9EwWOHoebASHBzc6Pri4mKtlEOvgxWRSIQ///wTz58/B8MwePHihdJtNQlW1OXv748jR44gKCiIHW7fz89Pbrj9oUOHYuvWrThx4gQOHDiAiooKvPLKK5g4cSLmzp0LQ0NKiiWEENL6goODYWNjo3R8L0VD7bcGvQ5WAgMDERERAWtra4wZM6bVui43tGrVKoU9kPh8PpYtW4Zly5Y1eQwvLy94eXm1RvEIIYQ0wDB1L/V3bPGi6JRXXnkFixcvlhvQVCojI6NVe9xK6XWwEhkZCSsrK/z888+wtrZu6+IQQgjRURJwwGiQLKvvCbbdunVDRkaG0mCFw+G06qCrUnodrAgEAgwcOJACFUIIIY2iBFvFZs2ahcrKSqXrnZyc8O2337Z6OfQ6WHF1dUVJSUlbF4MQQoiOowRbxTw9PRtdb2Ji0vhQGi2kZfvy6phZs2YhPT0dKSkpbV0UQgghOkyas6LJi7Q+va5Z6d27N6ZMmYJNmzZhxowZGDBgQKNjlDg4OGixdIQQQnRFazQD3b17F5GRkUhJSUFBQQHMzMzQq1cvzJ8/Hz179pTZtrKyEoGBgbhx4wbbW3TOnDlyvUXV2VadY6qqtLQUv//+EvGYmQAAIABJREFUO1auXKnxMTSh18HKkiVL2OSfY8eO4dixY41uf+bMGS2VjBBCiL67cOECysvLMX36dHTp0gVlZWUIDQ3FmjVrsGnTJvTv35/ddtu2bUhPT8eiRYvg7OyMa9euYfv27ZBIJBg7dqzMcVXdVp1jqkooFCIiIgKfffZZiw+02hi9DlY8PT1bbHLB9sTo9Wo0nLZcnMWDOEuv/9yEEKKx1qhZ+de//iXXwWPgwIFYtmwZQkJC2GAlPj4eiYmJWLNmDcaMGQOgbviKvLw8BAQEYNSoUezAoapuq84x2wO9vnt99913bV2ENlETa6J4bqCWjtsY7c6EyNHiD4vrqN0mQUHPlpl+XRUf7wjR2rkAYL6Fdka4BIDJ13y0di4AEBcWafV8pPW0RoKtop6ofD4frq6uKCgoYJfFxsaCz+fLdQ+eMGECduzYgbS0NHh4eKi1rTrHbA/0OsGWEEIIUYW2EmwrKirw+PFjuLq6ssuysrLg4uIiV9Ph5ubGrld3W3WO2R5QsEIIIaTDkzYDafJSx/79+1FVVYV33nmHXVZeXg4LCwu5baXLysvL1d5WnWO2B3rdDNTUBEz1aWNuIEIIITpKC+OsBAYGIjIyEsuXL5frDUQap/fBSmNDAUuTbxmGoWCFEEJIqwkODsbx48fx3nvvYerUqTLrLCwsFNZ0SJfVryFRdVt1jtke6HWwoqwfOMMwyM/Px507d/Dw4UNMmTKFolxCCOnAGGg2J6Eq+wQHB+Po0aNYsGCBTPOPlJubG6KioiAWi2VyTKR5JV27dlV7W3WOqS5tzAXUkF4HK+PHj290va+vL0JCQvDnn39i4sSJWioVIYQQXaNp1+Wm9jl27BiOHj2KefPmwdfXV+E2w4YNQ1hYGGJiYjBq1Ch2+ZUrV2Brawt3d3e1t1XnmOqwsLCAr6+vVsdYAfQ8WFHF3LlzceXKFfzxxx/4+uuv27o4hBBC2kIrVK2EhoYiKCgIAwcOhLe3Nx4+fCizvk+fPgAAb29vDBgwAHv37oVQKISTkxOioqKQkJCA1atXy9SMqLqtOsdUh7m5udKgqzV1+GAFqKsuS0xMbOtiEEIIaSN13ZA1qVlRvi4uLg4AkJCQgISEBLn1586dY//f398fR44cQVBQEDs0vp+fn8Kh8VXdVp1j6joKVgC8ePECEol2BzgjhBCiOzSdlLCxfdQZmJTP52PZsmVYtmxZi22rzjHV9ezZM5SWlqJnz54wNjZu8eM31KHHWREIBPjPf/6DJ0+eoFevXm1dHEIIIW1EW+Os6IvTp0/D399fbnC54uJinDhxAiEhIcjMzGyx8+l1zcqSJUuUrquqqkJ5eTkYhoGRkREWLVqkxZIRQggh7VdKSgo6deokk6hbW1sLPz8/5Ofng2EYBAYG4r333sOcOXOafT69Dlby8vKUruPxeLC3t0ffvn3x9ttvywx9TAghpKPhNDopYaP7dUCFhYVycwtFRUUhLy8PPXr0wOjRo3HhwgUcOXIEHh4e8PT0bNb59DpYOXv2bFsXoU0YDa+C3KzL2QY06zIhhCjRGjkr+qympgampqYyy6Kjo8HhcPDFF1/A0dERI0aMwPLly3Hu3DkKVog8pbMuE0IIUaw1R4XTQ7a2tsjPz2f/XV1djaSkJHh4eMDR0REA4ODggFdffRUpKSnNPl+HTrAlhBBCAEqwVVe/fv2QmprKJthGRESgpqYGgwYNktnO1tYWZWVlzT6fXtWspKWlNWt/TUf0I4QQ0s5RzYpaZs+ejaioKHz11Vfo27cv/vnnH3C5XJnRcgGgrKxMrrlIE3oVrKxZs4adnFATZ86cacHSEEIIaS9aa7h9fdWlSxf4+/vjl19+wc2bN8HhcPDuu++yTUAAIJFIkJ6eDnt7+2afT6+CFU9PT7WDlbS0NNTU1DQryCGEEEI6mkGDBuHQoUPIycmBmZkZbGxsZNYnJiZCIBBg5MiRzT6XXgUr6owWGB8fj6NHj6KmpgYANQERQkiHRs1AGuFyuXBxcVG4jmEY+Pj4YMSIEc0+j14FK6pISEjA0aNHkZ6eDoZh0KtXL/j6+sLb27uti0YIIaTNcKDZmClUK6/MoEGD5BJuNdVhgpU7d+7g6NGjSEtLA8Mw6NGjBxYsWIDBgwe3ddEIIYS0NapZ0Wl6H6zcvXsXQUFBSE1NBcMw6N69OxYsWIAhQ4a0ddEIIYToCgpWVFJaWorff/8dK1eu1Op59TZYSUpKwtGjR5GSkgKGYdCtWzf4+vpi2LBhbV00QgghuobRcLj9DtYbSCgUIiIiAp999hm4XO0N1aZ3wcq9e/dw9OhRPHjwAAzDwM3NDb6+vhg+fHhbF40QQgghGtCrYGXdunVITk4GALi6usLX1xevv/56G5eKEEKIrqO5gXSbXgUr9+7dA4fDgZGREWxtbREeHo7w8HCV9uVwONi4cWMrl5AQQohOopwVnaZXwQpQ16+7uroad+7cUWs/fRoUzuj1asjNuvzUCJKnRi16Hg5Pu1NLMWKJ9k6m5e9DuQtPa+eab1GstXNpnb2tds9XWKTd85HWQzkrOk2vgpVvv/22rYugE2pvmQNi+gERQoiqOEzdS5P9SOvTq2ClX79+bV0EQggh7RE1A+k0vQpWCCGEEI1QM5DKmDbIKtZu0gEhhBBC2i0LCwv4+vpqdYwVgGpWCCGEEGoGUpG5uTl8fX21fl4KVgghhBAKVnQaBSuEEEIIBStqKy8vx6lTp5CYmAiBQAAzMzP4+Phg+vTpLX4uClZaWFhYGHbv3g0TExOEhITIrKusrERgYCBu3LiB8vJyuLi4YM6cORg9erTCY92/fx8hISF4+PAhamtrYWdnBx8fH8yfP18bb4UQQjoQDRNs0fESbAGgsLAQa9euRUFBARiGAZ/PR15eHp48ecJuk5KSgqqqKvTt2xeGhobNOh8FKy2osLAQAQEB+P/t3XlU1PX+P/DnsA4IA47iioq4y+ICKJnkktXNLfOKgr9b6rlJi3XVtE6RlW1mUS7H9St2qVyQNDG9XsVUEBUT0RRRVMQLWiogiAzMsM78/uDOXMcZYPYZxufjHM6Rz+f9+bzfbxiZ17w+70UsFkMqlWqcX7ZsGfLy8jBr1ix07doVx44dQ1xcHORyOUaPHq1WNi0tDStXrsTIkSPx9ttvQygU4s6dOygr4yJURESmxnVW9PPjjz+ipKQEzzzzDObMmQMPDw+NjEptbS2WLl2Kt956C+PGjTOqPrsOVm7duoVu3bpZrL5169YhICAAHh4eyMjIUDuXlZWF8+fPY/HixRg1ahQAIDg4GMXFxUhISEBERAQcHRtXMS0tLcW6devw3HPP4Y033lDdIzg42GJ9ISIiasq5c+fQpUsXvPnmm02uAD9o0CB4eXkhMzPT6GDFrqcuz5s3Dy+99BKWL1+O/fv3o7Cw0Gx1paamIicnB6+//rrW86dOnYKbmxtGjhypdnzcuHEoKyvDtWvXVMcOHTqE6upqTJs2zWztJSKihyiM+HoMVVVVoWfPni1uVdO5c2cUFBQYXZ9dZ1ZCQkKQm5uLjIwMnDp1CgAgEokQEBCAwMBABAUFoUePHkbXU15ejvj4eMyaNQvt27fXWqawsBC+vr6q7ImSn5+f6vyAAQMAADk5OfD09MQff/yBzz//HIWFhfD09MQTTzyBOXPmwN3d3eg2ExERGUosFqO0tLTFcu3atWOw0pKPP/4YcrkcN27cQE5ODrKzs1XBS0ZGBgQCATw8PBAQEIDg4GBMnDjRoHo2bNgAX19fjB8/vskyEokEnTp10jju6empOq9UWlqKmpoaLF++HJGRkZg7dy7y8vKwbds2FBYW4quvvmo+mnXUMdSX47FcfZGI6FEcs6Kf4OBgHD16FIWFhc1+6JfJZKivrze6PrsOVgDAwcEBvXv3Ru/evTFlyhQoFArcuHEDFy9eRE5ODn7//XecPn0ap0+fNihYOXnyJDIzM7F69WqT7dysUChQW1uLl19+GZGRkQAa9z1ycnJCfHw8Lly4gMGDBzd5vevoSp3qqc93QUO+0CRtJiJq1bjcvl5eeOEFpKam4quvvsLSpUvRoUMHjTI1NTW4fv062rVrZ3R9dh+sPKqkpASFhYUoLCxEQUEB6urqAABOTvr/KGQyGTZu3IiJEydCLBajsrIxSFBGkZWVlXBycoJQKISnp6da9kRJeUyZYXn430OHDlUrGxISgvj4eOTn5zcbrNSk6bjrsrzlIkREjwWus6KXHj164JVXXsGmTZswf/58PP/882rna2pqsH79elRUVOCJJ54wuj67D1aKi4uRk5ODixcv4uLFiygpKYFCoYCTkxP69OmD0aNHIygoCP3799f73hUVFSgvL8eePXuwZ88ejfPR0dEYPnw4lixZAj8/P6Snp6OhoUFt3Ipy0O/DaTQ/Pz9cvXpV437KzaNazOA0CHQLVoiIqBGDFb1NmDABYrEY69evx65duwAAx48fx6VLl1BSUoKGhgZ4enpi+vTpRtdl18HK3LlzUVxcDABwdHTUCE5cXV2Nun/btm2xbNkyjeO7du1CTk4Oli5dCpFIBAAIDw9HSkoKMjIyEBERoSp75MgRiMVi9O3bV3VsxIgRSElJwdmzZ9GrVy/V8aysLABAv379jGo3ERGZn1QqRVJSEm7cuIEbN26goqIC0dHRmDlzplq5ixcvIjY2Vus94uLiND5M67rAqL4LkRriiSeewJAhQ3Dw4EH89ttvKCgowN27d+Hi4oKQkBDMnj27yYkn+rDrYKWoqAgCgQDdu3fHtGnTEBISAg8PD5Pd38XFBUFBQRrHDx8+DAcHB7VzoaGhGDx4MNavXw+pVIrOnTsjPT0d586dw6JFi9SyLUOHDsWwYcOwY8cOKBQK9OvXD3l5edixYwfCwsIQEBBgsj4QEZF5BthKJBKkpKTAz88P4eHhOHToULP3evnllzXeU7QNXtV1gVF9FiI1hlAoxJQpUzBlyhQAjUMhDBla0Ry7DlbGjx+PnJwc3Lx5EytWrADQ+IglKCgIgYGBCAwMNGnw0pLY2Fhs2bIF27ZtU0W577zzjtYo991330ViYiIOHjyIxMREiMVivPDCC1bZ7ZKIyO6Z4TFQhw4dkJiYCIFAgAcPHrQYrHTp0qXFIQm6LjCqz0KkpmbqQAWw82DltddeA9A4tkQ5+ycnJwf79u3D3r17IRAIVMFLUFAQhg8fbpJ6Fy5ciIULF2ocd3NzQ0xMDGJiYlq8h6urK2bPno3Zs2ebpE1ERNQMMwQrppoh+rDmFhj95ptvcO3aNQwYMEDncq2FXQcrSiKRCE8++SSefPJJAI2puZycHJw9exapqakoKCjAvn378Msvv1i5pUREZA22sM7Kxo0b8fXXX8PV1RX9+/fHjBkzNB7767rAqD4LkerCVNvXGHqfxyJYUaqrq8PVq1dVWRblbsaAeSJgIiJqJay4zoq7uzsmT56MwMBAiEQi3LlzB7t370ZsbCw+/vhjtWUsdF1gVJ+FSHXx5ptvIiIiApGRkQat/H7jxg3s2rULGRkZWmfPtsSugxVtwUl9fb1qCnC7du1Uy+5rGyhLRERkbr169VKb+RkQEIDw8HC89dZbSEhI0FhzyxqioqKQnJyM48ePw8/PD6NHj0ZgYCB69uypdYxKXV0d8vPzcfHiRRw7dgy3bt2Cq6sroqKiDKrfroOV6Oho1NXVqYITHx8f1cDaoKAgrVEnERE9hmxsnRUPDw+EhYXhwIEDqKmpUS21oesCo/osRKqL6OhoPP/88/jpp59w9OhRJCQkQCAQwNHRER06dICHhwfc3Nwgk8kgkUhQXFwMuVwOhUIBd3d3TJo0CZGRkfDy8tKrXiW7Dla8vLxUgUlgYCCDEyIi0soWxqw8SttCoLouMKrPQqS68vb2RkxMDGbNmoUTJ07gzJkzyM3Nxe3btzXKtm3bFgMHDkRYWBhGjhwJFxcXvet7mF0HK9999521m0BERK2BjWVWKisrcebMGfj7+6u90eu6wKg+C5Hqy9XVFU8//TSefvppAMCDBw9QXl4OqVQKd3d3eHt7G5xBaYpdByuPK+fhlQDUB3013HKB/JZxkS0Rkb0yV2YlKysLNTU1kMlkAICbN2/i5MmTABr3exMKhYiLi4OPjw/69OkDkUiE27dvIzk5GeXl5ViwYIHa/XRdYFSfhUiN5eXlZfLg5FEChTLPZMcKCwuxf/9+XL58GWVlZQAAsViMgIAAjB8/3qB0mC2SSqWYMWMGag63scu9gRQNDRarS2CmxZKa4uDubrG6qp7Sfx8sY9R6OlisLvGJPyxWFwDU/3nHcpXJLff6tygnBYTP1SApKQnuFvx/oKT8u5kX+hTkBixm5lBfjz5Z6U22/+9//7tq25dHbd68GR07dsTOnTtx4sQJFBUVQSaTwdPTEwMHDsS0adO0ZkBkMhm2bNmitox+ZGSk1uX2dSnXGth9sLJ3714kJCSoBvo8ytHREXPmzMHkyZOt0DrTYrBiOgxWTIfBiokwWDELVbASYkSwcrbpYIVMw64fA/3+++/YvHkzXF1d8Ze//AVjx45Fhw4dIBAIUFRUhNTUVBw8eBDfffcdevTogUGDBlm7yURERPQIuw5W9uzZA0dHR3z66acaK/X17NkTPXv2xIgRI/Dee+8hOTmZwQoR0WNKAAPHrJi8JaSN5fKzVpCXl4fAwMBmlxTu378/goKCcO3aNQu2jIiIiHRl15mVmpoaiESiFsuJRCLU1NRYoEVERGSTbGzqMqmz62Clffv2uHLlisaiOA9raGjAlStX0L59ewu3joiIbIUtLgpH/2PXj4GGDx+OkpISrFmzBlKpVOO8VCrFmjVrcO/ePYSHh1uhhUREZBMURnw9hoqKinQum5mZaXR9dp1ZiYyMxKlTp5CamorffvsNoaGharOBsrKyIJVK0alTJ0RGRlq7uUREZC18DKSX+fPnIyYmBmPHjm2yTG1tLTZv3oyUlBT88ssvRtVn18GKp6cnli9fjnXr1iErKwvp6ekaZUJDQzFv3jx4eHhYoYVEREStT11dHVavXo2srCy88cYbGu+h169fx7fffos///zTJPvy2XWwAgDt2rXDRx99hLt372qsYDtw4EBubkhERICBY1Ye18zKqlWr8M033+DEiRPIzc3FwoULERwcDADYuXMnEhMTUV9fj3HjxiEmJsbo+uw+WFHq1KkTAxMiItKOj4H00q1bN6xYsQJbtmxBcnIyPvzwQ0ycOBH5+fm4fPkyPD098eabb+KJJ54wSX12PcBWV+Xl5fj++++t3QwiIrIS5WwgQ74eV46Ojpg9ezY+//xzuLm54V//+hdyc3MxaNAgrF271mSBCvAYZVa0KSkpwe7du/Hrr7+irq4Os2fPtnaTTMI5vAoauy7fdOauy0RETWFmxSBSqRSHDh1Sm3H7xx9/4ObNm2jbtq3J6rG7YEUulyM9PR2///47ysvL4e3tjZCQEIwcORIODo2JpJKSEiQmJiI1NRVyuRwA7Grqct1v9rmRIRGR2TBY0VtOTg5WrlyJkpIS+Pv7Y8GCBUhPT8fPP/+Mjz76CJMmTcKsWbPg7OxsdF12Faw0NDRg6dKlyM7OVtthOS0tDSdOnEBsbCx+/fVXbNq0CbW1tQAa12KJjo5Gz549rdVsIiKiVuWHH35AcnIyFAoFpk6dir/97W9wcnKCn58fQkJCsGLFCuzbtw8XLlzAokWL4OfnZ1R9dhWs/Otf/8KFCxfg7OyMp59+Gj169IBUKsXZs2dx+vRprF27Fr/++isUCgWGDBmC2bNnM0ghIqLGsSdcwVZnP//8M9q1a4e3334bQUFBaucCAgKwZs0abNiwAceOHcOiRYvw888/G1WfXQUrx48fh4ODA7788kv07dtXdTwyMhLr16/HwYMHIRAIMHv2bEydOtWKLSUiIpvCx0B6GTlypNb1VZTc3d2xaNEihIWFYcOGDUbXZ1fByh9//IH+/furBSpKU6dOxcGDB9G1a1cGKkREpI7Bil7effddnco99dRTGDhwoNH12VWwIpPJ0LFjR63nlMf52IeIiB7Fx0DmY4qNgu0qWFEoFKoZP48SCBpnx7i4cPouERE9gpkVveTk5OhVPjAw0Kj67CpYISIiMgQzK/qJjY1VJQF0wY0MH3H06FEcPXpU6zmBQNDseWN/mERERI+DMWPGaA1WFAoF7t27h/z8fEilUgwbNswkGwXbXbDy8PoqREREOuFjIL0sXLiw2fMSiQRr1qzBzZs38c033xhdn10FK3v37rV2E4iIqDVisGJSnp6eePvttxETE4MffvgB8+bNM+p+3MiQiIgeewIjvkg7oVCIvn37IjMz0+h72VVmhYiIyGDMkpicTCZDZWWl0fdhsGKHnIdr2XW50BENhfx160pRX2/R+hokEovVJdx/xmJ1AYCbo6PF6pI7WfY1LrBg3xTyBovV9TjibCDTy8zMxKVLl9CtWzej78V3LztUm+EK1DM5SURE5rF69eomz8lkMty+fRuFhYVQKBR48cUXja6PwQoREREH2OrlyJEjLZbx8fFBdHQ0xo4da3R9DFaIiIgYrOjliy++aPKcs7Mz2rZt2+T2N4ZgsEJERI89jlnRT1BQkEXrY7BCRETEzIpNY7BCRESPPWZWbJtdBStN7fmjK1MMAiIiolaImZVmvfLKKwZfKxAIEB8fb1T9dhWsrFq1Sq9dIJUUCgUEAoFJgpWUlBSsXbsWQqEQO3fuVDsnk8mwdetWnDhxAhKJBL6+vpg2bRqeeuopg+9JRERkbsXFxVat366ClaioKIOCFVMpLS1FQkICxGIxpFKpxvlly5YhLy8Ps2bNQteuXXHs2DHExcVBLpdj9OjRBt2TiIiMx8dAzbP23nt2FazMnDnTqvWvW7cOAQEB8PDwQEZGhtq5rKwsnD9/HosXL8aoUaMAAMHBwSguLkZCQgIiIiLgqGU1zObuSUREJmKGx0BSqRRJSUm4ceMGbty4gYqKCkRHR2t9r9In865rWUOz+baIGxmaSGpqKnJycvD6669rPX/q1Cm4ublh5MiRasfHjRuHsrIyXLt2Te97EhGRiSiM+GqCRCJBSkoK6urqEB4e3mz1y5Ytw5EjRxAVFYWlS5eiT58+iIuLQ1pamsFl9blnSz744AP8/PPPWs9JpVLU1tbqfU992FVmpTkSiQTXr19HRUUFOnTogAEDBpjs3uXl5YiPj8esWbPQvn17rWUKCwvh6+urkT3x8/NTnX+4Tbrcs0mOOn48kAOQc1l+IiJzPAbq0KEDEhMTIRAI8ODBAxw6dEhrOX0y77qWNTSb35SLFy+iQ4cOWs9FR0fj6aefxj/+8Q+d76cvu8+s3L9/H1999RVeeuklLF26FCtWrFB7wezfvx/R0dG4dOmSwXVs2LABvr6+GD9+fJNlJBIJPD09NY4rj0ke2chOl3s2RTiuFsLnalr8cupl2c36iIhslhkyKwKBQKdxlPpk3nUta0g231AKhQIKhXkH79h1sPLgwQO8++67OHnyJPz8/DB+/HiNH2h4eDhkMhlOnjxpUB0nT55EZmYm3nzzTZMN7jX2ntWHXVCd4triV33+Y5NYIyKyWbpk3vUtq889WwO7frdKSkpCUVER/t//+3+YMWMGgMZMysPatWuHbt26GZRZkclk2LhxIyZOnAixWIzKykoAQH19Y8aisrISTk5OEAqF8PT01MieAP/LqCgzLPrcs0kNAu66TESkB4FCARiQHRCYIKMgkUjQqVMnjePaMu+6ltXnnq2BXQcrp0+fhq+vrypQaYqPjw+uXr2q9/0rKipQXl6OPXv2YM+ePRrno6OjMXz4cCxZsgR+fn5IT09HQ0ODWqSrjG579Oih9z2JiMhEuCicTbPrYOX+/fsYPnx4i+VcXFwgk8n0vn/btm2xbNkyjeO7du1CTk4Oli5dCpFIBKDxcVNKSgoyMjIQERGhKnvkyBGIxWL07dtX73sSEZFpWHOdFV0z7/qU1eeerYFdBytt2rRBaWlpi+Vu376Ntm3b6n1/FxcXrTtPHj58GA4ODmrnQkNDMXjwYKxfvx5SqRSdO3dGeno6zp07h0WLFqmyLfrck4iITMSKmRVdM+/6lNXnnro6evSo1m1tBAJBk+eUfvnlF73re5hdD7Dt378/8vLymh1IdPnyZRQUFCAgIMDs7YmNjcWYMWOwbds2fPzxx7h69SreeeedJlevJSIiyxAoDP8ylnKix6MLfz6aedenrD731JVy1o8hX8ay68zKlClTkJmZic8//xxvvvmmRlbi0qVLWLlyJRwdHfHCCy+YrN6FCxdi4cKFGsfd3NwQExODmJgYk92TiIhMxAzjT7KyslBTU6MaanDz5k3V7NOQkBAIhUKdM++A7ll6fe6pC2svty9QmHtytJXt3bsX3333HYDGYEEmk8HNzQ2Ojo6qmTYxMTGYMGGCNZtpElKpFDNmzEB1iitnA7U2VtzTytwEev5RNKouJ8t+/lI0yC1XV515Vwi1GicFhM/VICkpCe7u7havXvl3s7htBBQC/V8/AkU9Otw/3mT7//73vze5CeDmzZvRsWNHAI0zQbds2aK2NH5kZGSTy+3rUlafe9o6uw9WAODKlSvYtWsXsrOzUV1dDQBwdnZGYGAgpk+fbpFHQJbAYKUVY7BimroYrLQ+NhKslHgbHqz4lDcdrJBp2PVjIKX+/ftjyZIlUCgUqKiogFwuh0gk0jsNRkREdsrQj+12/3HfNjwWwYqSQCCAl5eXtZtBREQ2xtCBsqYYYEsts+vZQMnJyTqVk0gkWL58uZlbQ0RENku5gq0hX2R2dp1ZSUhIwLlz57BgwQK0a9dOa5kLFy5g1apVKCsrs3DriIjIVjCzYtvsOlgJCgrChQsX8NZbb2HevHl48sknVefq6+vxww8/qKZjvfjii9ZqpslAzdclAAAgAElEQVS5jKgBoD5gs6HQEQ2Fdv3rJiIiO2XX715ffPEFdu/eja1bt+Lrr7/GmDFj8Oqrr6K4uBjffvstCgoK4OPjgwULFtjVyrC1GZwN1OpYMpVs4ZlHCrnl+iZwsPCTbQvOBiIz4wBbm2bXwQoATJ06FUOGDEFcXBxSU1Nx4cIFVFRUoK6uDqNGjcJrr72GNm3aWLuZRERkRQI5Hk1I63YdgxWLsOsBtko9e/bERx99BDc3N5SWlqK+vh5jxozBokWLGKgQEdH/9gYy5IvMzu4zKwBw6tQprFu3DlKpFL169cLNmzeRlpYGAHj11Ve5kA8R0eNOYVBihcGKhdh1sFJdXY1NmzbhyJEjcHR0xOzZs/Hiiy+isLAQ3377LVJTU3Hp0iUsXLjQblaxJSIiAygMTJNw6rJF2PVjoPnz5+Pw4cPo2rUrvv32W0ydOhUCgQB+fn5YsWIFJk2ahJKSEnzwwQf48ccfrd1cIiKyEmvuukwts+tg5c6dO5gwYQJWrVqFnj17qp1zdnbG3LlzsXTpUnh5eeHnn3+2UiuJiIioOXb9GOijjz5CaGhos2WGDBmCNWvWYN26dRZqFRER2RxOXbZpdh2stBSoKIlEIrz//vtmbg0REdkqgx/nMFixCLsOVoiIiHTCAbY2za6ClaNHjwIAwsPD4e7urvpeV2PHjjVHs4iIyMYxs2Lb7CpYWbVqFQQCAfr16wd3d3fV9y1RKBQQCAQMVoiIHlcMVmyaXQUrUVFREAgEEIlEat8TERE1RwAw8LBhdhWszJw5s9nvHxfcdZmIiOwJ373sEHddJiLSk9zQjX4Udr5imW2wy2AlKysLv/32G0pKSuDs7Aw/Pz+MGzcOnTp1snbTiIjIFvERkE2zu2Dlm2++wfHjxwE0DpwFgDNnziA5ORnvvvsuhg8fbs3mERGRDeKy+bbNroKVQ4cOIT09HY6OjhgzZgz8/f0hk8lw5swZXLlyBStXrsR3332HNm3aWLupRERkSwxdZ4UpGYuwq2Dl6NGjEAgEWLp0KQYNGqQ6HhkZiVWrViE1NRWnTp3CuHHjrNhKIiKyNcys2Da7GhZUUFCAfv36qQUqStOnT4dCoUBBQYHlG0ZEREQGs6vMikwmQ+fOnbWeUw6ulUqllmwSERG1Bsys2DS7ClYUCgUcHLQni5THFdzHgYiIHiHgmBWbZlfBChERkUHk1m4ANcfugpWjR482uYGhQCBo9vwvv/xizqYREZGNYmbFttldsMLHPEREpDe+ddg0uwpW9u7da+0mEBFRa8TMik2zq6nLREREZH/sKrNCjbjrMjVH4OJi0focPD0sVpdAKLRYXQCgqJBYrK6GulqL1fU44qJwto3vXnaIuy4TEemJj4FsGoMVIiJ67AnMMHX54sWLiI2N1XouLi4O/fv3V30vk8mwdetWnDhxAhKJBL6+vpg2bRqeeuopjWv1KWsvGKwQERGZMbPy8ssvIygoSO1Yjx491L5ftmwZ8vLyMGvWLHTt2hXHjh1DXFwc5HI5Ro8ebXBZe8FghYiICDAsVtHhiXuXLl3UsiiPysrKwvnz57F48WKMGjUKABAcHIzi4mIkJCQgIiICjo6Oepe1J5wNREREZEWnTp2Cm5sbRo4cqXZ83LhxKCsrw7Vr1wwqa08YrBAR0WNPoGhcxVb/r5bvvXHjRrzwwguYPn06PvroI1y6dEntfGFhIXx9fTUyIn5+fqrzhpS1J3wMREREpFD8d9yK3hc2ecbd3R2TJ09GYGAgRCIR7ty5g927dyM2NhYff/wxhg4dCgCQSCTo1KmTxvWenp6q80r6lLUnDFbMICUlBWvXroVQKMTOnTvVzuk6ivvChQtIS0tDbm4u7t27hzZt2qBPnz6IiopC7969LdkdIiL7J4fJx6z06tULvXr1Un0fEBCA8PBwvPXWW0hISFAFK9QyBismVlpaioSEBIjFYkilUo3zuo7iPnDgACQSCSZPnoxu3bqhoqICycnJWLx4MT755BMMGjTIgr0iIrJvAjNkVrTx8PBAWFgYDhw4gJqaGri6usLT01NrRkR5TJk1Uf5b17L2hMGKia1btw4BAQHw8PBARkaG2jl9RnG/9tpr8Pb2Vrt+6NChiImJwc6dOxmsEBGZkoWClcaqGq8RCBrTMn5+fkhPT0dDQ4PaWBTl+JOHpznrU9aecICtCaWmpiInJwevv/661vP6jOJ+NFABADc3N3Tv3h337t0zbcOJiB53ymDFkC89VFZW4syZM/D394fLf7e+CA8Ph0wm0/iAe+TIEYjFYvTt21d1TJ+y9oSZFRMpLy9HfHw8Zs2ahfbt22sto8so7gEDBjRZR1VVFfLz8xEcHNx8Yxx1/M8jByDnsvxEROYQFxcHHx8f9OnTByKRCLdv30ZycjLKy8uxYMECVbnQ0FAMHjwY69evh1QqRefOnZGeno5z585h0aJFau8Z+pS1JwxWTGTDhg3w9fXF+PHjmyxj7CjujRs3orq6GtOnT2+2nHCcbhue1V9zRH2es05liYjsmhkG2Pr5+eHEiRM4ePAgZDIZPD09MXDgQLz99tsaGZDY2Fhs2bIF27ZtU02+eOedd7Quoa9PWXvBYMUETp48iczMTKxevVr1DNLUtm7dirS0NLz66qstzgaqPuwCNOjQDjPshUFE1BqZY4BtZGQkIiMjdbqLm5sbYmJiEBMTY9Ky9oLBipFkMhk2btyIiRMnQiwWo7KyEgBQX18PoPH5pJOTE4RCocGjuBMTE5GUlISXXnoJEydObLlRDQLuukxEpA8LDrAl/TFYMVJFRQXKy8uxZ88e7NmzR+N8dHQ0hg8fjiVLlhg0ijsxMRHbt2/HzJkzW3z8Q0REBmKwYtMYrBipbdu2WLZsmcbxXbt2IScnB0uXLoVIJALQOIo7JSUFGRkZiIiIUJVtahT3jh07sH37dsyYMQPR0dHm7QgR0eOMwYpNY7BiJBcXF42tvwHg8OHDcHBwUDunzyju5ORkbNu2DUOHDkVoaCiuXLmidv/mdvAkIiKyJwxWLEzXUdyZmZkAgHPnzuHcuXMa99m3b59F2ktE9Fgww2wgMh2BQmFQ3otskFQqxYwZM1Cd4soBttQkgaurRetz8PSwWF0CodBidQGAosJym8Y1VFRYrC6LclJA+FwNkpKS4O7ubvHqlX83628MBBQGrFEiaICT/2Wrtf9xwcwKERERx6zYNAYrRERECgUgNyDwcGCwYgkMVoiIiAzNrHAkhUUwWCEiImKwYtO46zIRERHZNGZWiIiImFmxaQxW7JDLiBo8Ovm/odARDYX8dRMRaSU3cIAtZwNZBN+97FDd6TZad10WmPi3rfjvZo1kAg4GrO9gaFX/3f7BYjqILVZV6ZC2FqsLAET5MovVJTh1wWJ1PZYUckBhwPpUCm5fbwkMVoiIiBQw8DGQyVtCWjBYISIi4mMgm8ZghYiIiANsbRqnLhMREZFNY2aFiIiImRWbxmCFiIiIwYpNY7BCREQklwMGzULm1GVLYLBCRETEzIpNY7BCRETEYMWmcTYQERER2TRmVoiIiBQGLgonYGbFEhisEBHRY0+hkBu2GC33BrIIBit2yDm8Chq7Lt90hvyWi3UaRERk6wxdbp+ZFYtgsGKH6n7TvusyERE1gQNsbRqDFSIiIkPXWRHwMZAlcDYQWZaDAk596gAHO/w0Ys99Eyjg0PWBfaa8FXK0kf3H/sYe2PPr0RyUmRVDvsjsGKyQZTkATn0b7POVZ899Eyjg2LXCLoMVAeTwqC6EwN5WIrXn1yM9dvgYiIiIHnsKuaLxUZC+7DCAt0UMVoiIiBQKA6cuM1ixBAYrREREcoWBA2wZrFgCn2YSHLrVGnSdY496E7fE9PUZ2kZL9s3gNnavM+g6hw4Sg66zZF0OnvcMus6t+k+DrrNkXY6udw27rjW8Ji38N8GkFHLDv8jsGKyQwW96jj0aTNwS09dnaBst2TfD22hgsNKx0qDrLFmXocGKe43lghVD63ISFhl0Xet4TVr2b4IpKeQKg7/I/BisEBERkU3jmBUiIiKFHFAYsPI3B9haBIMVIiJ67CkUBg6w5aJ7FsFgxY4olBG+o77/eRQGXPPf65z0vM7R0DYaWJ9B1xh4ncF9s2Abldc56PlXWVle3+ugAASGjGMw8DqFAgKFfoM8leX1va7xE7UhA0qNuE6f37fF/68ZeN1/26ewdobC0cBdlx1N3hLSQqCw+iuETOXevXuYM2eOtZtBRKS3hIQEtG/f3uL11tbW4pVXXsH9+/cNvkfbtm2xefNmuLhwZ3tzYbBiR+RyOcrKyuDm5gaBgLsuE5HtUygUkMlkEIvFcHCwzpyP2tpa1NcbPu3aycmJgYqZMVghIiIim8apy0RERGTTGKwQERGRTWOwQkRERDaNU5epRVKpFElJSbhx4wZu3LiBiooKREdHY+bMmWrlLl68iNjYWK33iIuLQ//+/ZusIyUlBWvXroVQKMTOnTs1zl+6dAk7d+7ElStXUFdXh3bt2mHs2LGIiopq1X3Lz89HYmIi8vLyUFlZCR8fH4waNQovvvgihEKhzfVNn7IymQxbt27FiRMnIJFI4Ovri2nTpuGpp54yql/W7tuFCxeQlpaG3Nxc3Lt3D23atEGfPn0QFRWF3r17t+q+Paql/5dElsJghVokkUiQkpICPz8/hIeH49ChQ82Wf/nllxEUFKR2rEePHk2WLy0tRUJCAsRiMaRSqcb5tLQ0rFy5EiNHjsTbb78NoVCIO3fuoKyszLAOPcSafbt58ybeffdddO3aFa+88gpEIhEuXbqEHTt2ID8/H0uWLDG8YzBv33Qpu2zZMuTl5WHWrFno2rUrjh07hri4OMjlcowePVr/Dj3Emn07cOAAJBIJJk+ejG7duqGiogLJyclYvHgxPvnkEwwaNMjAXjWy9u9NqaX/l0SWxGCFWtShQwckJiZCIBDgwYMHLf7x7NKlS7OZhketW7cOAQEB8PDwQEZGhtq50tJSrFu3Ds899xzeeOMN1fHg4GD9OtEEa/bt2LFjqK2txfvvv4/OnTsDAAYNGoSysjKkpKSgsrISHh4e+nfqv8zZt5bKZmVl4fz581i8eDFGjRoFoPF3VlxcjISEBERERMDR0fDVtKzZt9deew3e3t5qx4YOHYqYmBjs3LnT6GDFmn17WHOvXSJL45gVapFAIDDbui2pqanIycnB66+/rvX8oUOHUF1djWnTppmlfmv2zcmp8bOCu7u72nEPDw84ODiozhvKnH1ryalTp+Dm5oaRI0eqHR83bhzKyspw7do1o+5vzb49GqgAgJubG7p374579wzbLfph1uybUkuvXSJLY2aFTG7jxo34+uuv4erqiv79+2PGjBkICAjQKFdeXo74+HjMmjWryZUrc3Jy4OnpiT/++AOff/45CgsL4enpiSeeeAJz5szReKM3N1P2bezYsfjll1+wYcMGzJ49GyKRCDk5OTh48CDGjx9v9JgVfenaN13KFhYWwtfXVyN74ufnpzo/YMAAs/VF3/YaWlapqqoK+fn5Jsv46cPUfdPltUtkaQxWyGTc3d0xefJkBAYGQiQS4c6dO9i9ezdiY2Px8ccfY+jQoWrlN2zYAF9fX4wfP77Je5aWlqKmpgbLly9HZGQk5s6di7y8PGzbtg2FhYX46quvLPIp1Bx969ixI+Li4rBs2TLMnTtXdXzSpElq35ubPn3TtaxEIkGnTp006vL09FSdb61902bjxo2orq7G9OnTLdEtvdurT1ldXrtElsZghUymV69e6NWrl+r7gIAAhIeH46233kJCQoLaH8STJ08iMzMTq1evbjbYUCgUqK2txcsvv4zIyEgAQFBQEJycnBAfH48LFy5g8ODB5uvUf5mjb0VFRfjss8/g7e2N9957D15eXrh27RqSkpJQXV2Nf/zjH2btk5I+fdOnrC2wRN+2bt2KtLQ0vPrqqyaZDaQrc/RN19cukaVxzAqZlYeHB8LCwlBQUICamhoAjVNaN27ciIkTJ0IsFqOyshKVlZWqvTkqKytRXV0N4H+fxB99owgJCQHQOPXXWozt2w8//ACZTIZPP/0UTz75JAIDAzF16lTMnTsXv/76Ky5evGhTfdOnrKenp9bsifKY8vdqDcb27WGJiYlISkrCSy+9hIkTJ5qryTozpm/6vHaJLI2ZFTI75fZTyk9qFRUVKC8vx549e7Bnzx6N8tHR0Rg+fDiWLFkCPz8/XL16tcV7Wosxfbtx4wa6deumMTalT58+ABqnNj86zdSS9PkZP1rWz88P6enpaGhoUBu3UlhYCKD56d6WYEzflBITE7F9+3bMnDnToo9/WmJo3/R57RJZGoMVMqvKykqcOXMG/v7+ql1J27Zti2XLlmmU3bVrF3JycrB06VKIRCIAwIgRI5CSkoKzZ8+qpbGzsrIAAP369bNAL7Qztm/t2rVDYWEhZDIZ3NzcVGWvXLmiOm8t2vqmT9nw8HCkpKQgIyMDERERqrJHjhyBWCxG3759zdr+5hjbNwDYsWMHtm/fjhkzZiA6OtrcTdaZMX3T57VLZGkMVkgnWVlZqlQx0Pip/+TJkwAaH8kIhULExcXBx8cHffr0gUgkwu3bt5GcnIzy8nIsWLBAdS8XFxetGYPDhw/DwcFB7dzQoUMxbNgw7NixAwqFAv369UNeXh527NiBsLCwFmdp2HLfJk+ejC+++AIffvghXnjhBYhEIly9ehW7du1Ct27dVI+6bKVvAHQuGxoaisGDB2P9+vWQSqXo3Lkz0tPTce7cOSxatMioNVas3bfk5GRs27YNQ4cORWhoqCq4VNJnHR5b6ps+r10iSxMolHlAomb8/e9/R3FxsdZzmzdvRseOHbFz506cOHECRUVFkMlk8PT0xMCBAzFt2jSdPkmvXLkSGRkZGst619TUIDExEceOHcP9+/chFosxevRoREdHw9nZuVX3LTs7G7t27UJBQQGqqqrg4+ODsLAwREZGmuRTrKn7pk9ZmUyGLVu2qC23HxkZaZLl9q3Zt/fffx85OTlNtmvfvn2ttm/aNPXaJbIkBitERERk0zgbiIiIiGwagxUiIiKyaQxWiIiIyKYxWCEiIiKbxmCFiIiIbBqDFSIiIrJpDFaIiIjIpnEFW7KoSZMmqX0vEAjg7u6OHj16YOzYsXj22WfV9jTZvn07EhMTMX/+fIwbN86ibTWm7urqahw8eBCZmZm4desWKisr4erqCl9fXwwePBjPPvssOnToYFT7lIuTKRcJs2cPL8S2bNkyraupXrx4EbGxsRg6dCg++eQTSzexRZMmTUKHDh3w3XffWbspRK0OgxWyirFjxwIA5HI57t69i9zcXFy+fBnZ2dl45513rNw641y5cgVffvklysrK4Orqin79+sHb2xtSqRR5eXlISkrC7t278dFHH2Hw4MHWbm6rs23bNixfvtzazSAiC2KwQlaxcOFCte9///13fPLJJ0hPT8eoUaMwbNgwAMCECRMQEREBsVhsjWbq7T//+Q8++OAD1NbW4q9//SuioqLUdlWWy+X47bff8P333+PevXtWbGnr5OLigkuXLuHChQsYNGiQtZtDRBbCMStkE4YMGYIxY8YAAH777TfVcS8vL3Tr1g1t2rSxVtN0plAosGLFCtTW1mLmzJmYPXu2WqACAA4ODhgxYgRWrlyJPn36WKmlrdf48eMBND6iI6LHBzMrZDP8/f0BQC3joG3cSFZWFj755BN07twZq1evhpubm6q8QqHAkiVLkJ2djTlz5mDq1KlqdVy6dAl79uxBbm4uqqqqIBaLMWzYMERFRcHLy8uo9p87dw4FBQVo3749pk+f3mzZNm3aaARg1dXV2LNnD44fP467d+/CyckJPXv2xPjx43Xe/K+oqAivvPIKAgMD8eWXX2qcb2ocjnLjvH379mH//v3497//jbt378Lb2xvjx4/H1KlTIRAIcP36dWzbtg1XrlxBQ0MDgoODERMTozH+ZuXKlTh69CiWLVsGgUCAxMRE5OXlAQACAgIwZ84cdO/eXac+PezJJ5/E+fPncfnyZZw/f16nx2gtjT16uO9KyvEvY8eOxZw5c/Djjz/izJkzqK6uRs+ePTFnzhwMGDAAAHDgwAH8+9//xu3btyESifDss89ixowZcHDQ/lmwrq4OP/30E9LS0lBaWqramHP69OlwcXHRWv7AgQNITU3Fn3/+Cblcju7du+Mvf/kLnnnmGbUxXsD/xsZs3LgRu3btwrFjx1BUVISQkBAsWbKkxZ8XkS1iZoVshkwmA4AWd1IODQ3FhAkTcOfOHWzatEntXHJyMrKzsxEcHIwpU6aondu7dy/ef/99ZGZmonPnzhg+fDhcXFzwr3/9C4sWLUJZWZlR7c/KygLQ+Ibq6Oio17VSqRTvv/8+tm3bhgcPHiAsLAwDBgzAtWvXEBcXh/j4eKPapqv4+Hj885//hJeXFwYNGgSJRILvv/8e27dvx+XLl/Hee++hqKgIwcHB8Pb2xunTp7FkyRLU1NRovV9mZiY++OADSCQSDBkyBGKxGFlZWXjvvfdw//59g9oYFRUFwDLZlaqqKrzzzjs4e/Ys+vfvjx49eiA3NxcffvghCgsLsWnTJmzevBkeHh4YNGgQqqqqsH37dmzdulXr/RQKBZYvX47du3ejW7duCA0NRWVlJZKSkvDpp5+ioaFBrXx1dTU+/PBDxMfHo7i4GAMGDEBQUBDu3LmDNWvWYP369Vrrkcvl+OKLL7B7927Va721PEol0oaZFbIJCoUCZ86cAQD4+fm1WH7OnDnIzs7G4cOHERYWhhEjRuA///kPtmzZgjZt2mDBggVqn2yvXLmC7777Dj4+PliyZAl69uypqjcpKQnbtm3Dpk2b8N577xnch/z8fABAr1699L52y5YtuH79OgYPHozY2FhVtujWrVuIjY3F3r17MWTIEISGhhrcPl2cPHkSK1asQI8ePVT1z58/H8nJyTh69CheeuklvPDCCwAaP/EvXboU2dnZOH78uNasxd69e/H2229j1KhRAICGhgZ8/fXXyMjIwP79+/G3v/1N7zaOGDECPXv2RG5uLs6dO4ehQ4ca0ePmnT59GhEREViwYIEq66HM1Hz11VeQSqVqP6+bN29i/vz52Lt3LyIjI9WyfgBQUlIChUKBdevWoVOnTgCABw8e4IMPPsCFCxewf/9+TJ48WVX+n//8Jy5duoQxY8bg9ddfV93vwYMH+Oyzz3Dw4EEMGzYMYWFhavXcu3cPzs7O2LhxI9q1a2e2nw+RpTCzQlbV0NCA27dvY/Xq1bhy5QqcnZ11mibs6uqKxYsXw8nJCWvXrsWdO3cQFxeH+vp6zJs3Dz4+Pmrld+3aBblcjnnz5qkCFaBx6vSMGTPg7++PU6dO4cGDBwb3RSKRAIDej5Oqq6tx6NAhODg4qL0hAUC3bt1Uj5QefkxhLn/7299Ub7zK+kNDQ1FTUwMfHx9VoAI0ZsCUb6wXL17Uer+nnnpKFagAgKOjIyIjIwE0PpIzhEAgQHR0NADzZ1fatGmDN954Q+3xzJQpUyAQCHDr1i2Nn1f37t0RFhaGmpoaXL9+Xes9o6KiVIEK0Ph6mTNnDgDg3//+t+p4eXk5fv31V3Ts2BFvvfWW2uvCy8sL8+bNAwAcPHhQaz2zZs1ioEJ2g8EKWcWkSZMwadIkTJkyBa+++iqOHDkCNzc3vPPOO+jcubNO9/D398dLL70EiUSCBQsW4NatWxgzZgwiIiLUysnlcmRnZ8PNzU3rDBKBQICBAwdCLpersiOGUCgUBl13/fp11NbWok+fPujSpYvGeeXA49zcXIPr0JW2MSDKN9YhQ4Y0ea6pRzrarunatWuz1+giPDwc/v7+uHr1Ks6ePWvwfVrSu3dveHh4qB1zd3eHp6cngOZ/Xk09Vnz09QkAISEh8PDwwJ9//qkKmHNyclBfX4+hQ4dqfTTas2dPuLm5qcYCPUwgEKhm1BHZAz4GIqtQrrPi4OCgWhRuxIgRGm8MLZkyZQqOHz+O69evo127dnjttdc0ykgkEtV4mEfHsTyqoqJCr/ofJhKJ1N5sdKV8U2tqYTcPDw+0adMGVVVVkEqlZp0Zpe2TuHJGU3Pn6urqtN6vffv2GseUGYKmrtGFMrvyxRdfYPv27QgJCTH4Xs1pKjMhFApRUVGh98/Ew8MD7u7uWu/ZoUMHVFZWoqysDF5eXiguLgbQOID3wIEDTbaxtrZW45iXl1eLY7+IWhMGK2QVj66zYqibN2+isLAQQGOgUVxcrDHmRS6XA2h8k3ziiSeavd+jj4/04e/vj9zcXOTn56uyIab26MwPfSl/Fua6v7nv97Dw8HD06tUL165dQ1ZWFlxdXQ26T0s/k+aYsn+PZs2Ug239/f11Gsf1MG2ziohaMwYr1GrV1dXh22+/RV1dHUaPHo20tDR8++23WLFihdqnSpFIBGdnZzg5OZksSNImNDQU+/fvx8mTJzFnzhydZwQpZ2kUFRVpPV9VVYWqqioIhUKNAZuPcnJq/C9dXV2t9by9LUQ3c+ZMfPbZZ9i+fbtq3MejmvuZNDQ0oLy83KxtfFhlZSWkUqnW7EpJSQkAoG3btgD+l5UKCgrCK6+8YrE2EtkijlmhVuv7779HQUEBRo8ejUWLFmHUqFEoKCjA999/r1bO0dERQUFBkEgkqv1lzCEkJATdu3fHvXv38NNPPzVbViqVqjJCvXv3houLC/Ly8nD79m2NsmlpaQCAgQMHtvhJXiQSwcnJCUVFRRrTYOvq6szaf2sYNmwYevfujby8PGRmZmotowwG//zzT41z2dnZqK+vN2sbH3X8+HGNY+fOnUNlZSW6dOkCb29vAEBwcDAcHBxw5swZjd8l0eOGwQq1Sr///jv27dsHHx8f1TiV1157DT4+Pti3bx9+//13tfKRkZFwcHDAypUrtfbUsMAAAAN9SURBVM5CKS0txf79+41qk0AgwKJFi+Di4oLt27fjhx9+0Pg0r1AocPr0aSxcuFA1MFIoFOKZZ56BXC7Hhg0b1K75888/kZSUBACYOHFii21wdnZGv379IJFI1PpTX1+PzZs3N5m9ac1mzpwJQH0mzcMCAwMBNAZ9D/f/7t27+L//+z/zN/ARO3bsUGvHgwcPkJCQAOB/K/QCjeNlnn76ady+fRsrVqzQOhYqNzdXtb4PkT3jYyBqdSoqKrBq1SoIBAIsXLhQNeDUw8MDCxcuxJIlS7Bq1SqsWbMGIpEIQOMb1ty5cxEfH4/33nsPfn5+6NKlC2pra1FSUoJbt27Bzc0NEyZMMKpt/v7++Oyzz/Dll19i165d2LdvH/r37w9vb29UVVXh+vXrKC8vh4uLi9r4mJdffhlXr17F+fPnMXfuXAQEBKCmpgbZ2dmora3FpEmTNNbSaEpUVBQ+/vhjxMfH4/jx42jbti2uX7+OmpoajB07FkePHjWqj7YmLCwMffv2xbVr17Se79Spk6rf8+fPR0BAAKqrq3H16lWEhoairq5ONZjV3Hx8fODn54d58+Zh0KBBcHR0RHZ2NqqqqhAcHKwRkMbExKCoqAjp6ek4c+YM/P39IRaLcf/+fdy5cwelpaWYPHmy2dffIbI2BivU6qxduxZlZWX461//iqCgILVzQUFBmDJlCnbv3o21a9ciNjZWdW7ixIno378/fvnlF+Tk5CAzMxNubm5o164dnn/+eTz55JMmad/AgQOxadMmHDx4EJmZmSgoKEBlZSWEQiF8fX3x/PPP49lnn1WbKePu7o4vv/wSycnJOH78ODIzM+Hk5ITevXtj/PjxamuVtGTw4MFYsmQJEhMTkZ+fD6FQiEGDBmH27Nk4cuSISfpoa6Kjo/HJJ580ef7NN9+EWCxGWloazp07Bx8fH0RGRmLatGmIiYmxWDsFAgHef/99JCYm4tixYygrK4NYLMaECRMwffp0jXFOQqEQn376KY4cOYLU1FQUFBTg6tWr8Pb2RqdOnTB58mSdt2Igas0ECnMv3EBERERkBI5ZISIiIpvGYIWIiIhsGoMVIiIismkMVoiIiMimMVghIiIim8ZghYiIiGwagxUiIiKyaQxWiIiIyKYxWCEiIiKbxmCFiIiIbBqDFSIiIrJpDFaIiIjIpjFYISIiIpv2/wEDERmsG66unwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "tpf_file.plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above figure indicates the pixels on the CCD camera, with which L 98-59 was observed. The color indicates the amount of flux in each pixel, in electrons per second. The y-axis shows the pixel row, and the x-axis shows the pixel column. The title tells us the *TESS* Input Catalogue ([TIC](https://tess.mit.edu/science/tess-input-catalogue/)) identification number of the target, and the observing cadence of this image. By default, `plot()` shows the first observation cadence in the Sector.\n", "\n", "It looks like our star is isolated, so we can extract a light-curve by simply summing up all the pixel values in each image. To do this we use the [`to_lightcurve`](https://docs.lightkurve.org/api/lightkurve.targetpixelfile.KeplerTargetPixelFile.html#lightkurve.targetpixelfile.KeplerTargetPixelFile.to_lightcurve) function which collects the flux of an object from specified pixels, i.e., an aperture mask. How to do this is explained within the [LightCurve Objects](LightCurve-objects.html) tutorial." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Note\n", "\n", "You can also download TPF FITS files from the archive by hand, store them on your local disk, and open them using the [`lk.open()`](http://docs.lightkurve.org/api/lightkurve.search.open.html?highlight=open#lightkurve.search.open) function. This function will return a `TessTargetPixelFile` object just as in the above example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Accessing the metadata\n", "\n", "Our `TessTargetPixelFile` has lots of information from MAST about the observation, this data is dubbed `metadata`. \n", "\n", "Most `metadata` are stored in the headers of the FITS files. These can be accessed from the `TessTargetPixelFile` through the get_header() method.\n", "\n", "For example, the first extension (\"extension 0\") of the file provides metadata related to the star, such as its magnitude in different passbands, its movement and position on the sky, and its location on *TESS's* CCD detector:\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SIMPLE = T / conforms to FITS standards \n", "BITPIX = 8 / array data type \n", "NAXIS = 0 / number of array dimensions \n", "EXTEND = T / file contains extensions \n", "NEXTEND = 3 / number of standard extensions \n", "EXTNAME = 'PRIMARY ' / name of extension \n", "EXTVER = 1 / extension version number (not format version) \n", "SIMDATA = F / file is based on simulated data \n", "ORIGIN = 'NASA/Ames' / institution responsible for creating this file \n", "DATE = '2019-02-10' / file creation date. \n", "TSTART = 1437.976957548360 / observation start time in TJD \n", "TSTOP = 1464.288062220275 / observation stop time in TJD \n", "DATE-OBS= '2018-11-15T11:25:39.948Z' / TSTART as UTC calendar date \n", "DATE-END= '2018-12-11T18:53:39.392Z' / TSTOP as UTC calendar date \n", "CREATOR = '7561 TargetPixelExporterPipelineModule' / pipeline job and program us\n", "PROCVER = 'spoc-3.3.55-20190205' / SW version \n", "FILEVER = '1.0 ' / file format version \n", "TIMVERSN= 'OGIP/93-003' / OGIP memo number for file format \n", "TELESCOP= 'TESS ' / telescope \n", "INSTRUME= 'TESS Photometer' / detector type \n", "DATA_REL= 7 / data release version number \n", "OBJECT = 'TIC 307210830' / string version of target id \n", "TICID = 307210830 / unique tess target identifier \n", "SECTOR = 5 / Observing sector \n", "CAMERA = 4 / Camera number \n", "CCD = 4 / CCD chip number \n", "PXTABLE = 136 / pixel table id \n", "RADESYS = 'ICRS ' / reference frame of celestial coordinates \n", "RA_OBJ = 124.5319000000000000 / [deg] right ascension \n", "DEC_OBJ = -68.3130000000000000 / [deg] declination \n", "EQUINOX = 2000.0 / equinox of celestial coordinate system \n", "PMRA = 96.47160000 / [mas/yr] RA proper motion \n", "PMDEC = -340.08300000 / [mas/yr] Dec proper motion \n", "PMTOTAL = 353.50136703 / [mas/yr] total proper motion \n", "TESSMAG = 9.39299965 / [mag] TESS magnitude \n", "TEFF = 3469.00000000 / [K] Effective temperature \n", "LOGG = 4.94010019 / [cm/s2] log10 surface gravity \n", "MH = / [log10([M/H])] metallicity \n", "RADIUS = 0.31299999 / [solar radii] stellar radius \n", "TICVER = 7 / TICVER \n", "CRMITEN = T / spacecraft cosmic ray mitigation enabled \n", "CRBLKSZ = 10 / [exposures] s/c cosmic ray mitigation block siz\n", "CRSPOC = F / SPOC cosmic ray cleaning enabled \n", "CHECKSUM= 'OGRBPEO9OEOAOEO7' / HDU checksum updated 2019-02-10T15:15:39Z " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tpf_file.get_header(ext=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is an AstroPy [`astropy.io.fits.Header`](https://docs.astropy.org/en/stable/io/fits/api/headers.html) object, which has many convenient features. For example, you can retrieve the value of an individual keyword as follows:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tpf_file.get_header(ext=0)['Sector']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When constructing a `TessTargetPixelFile`from a FITS file, *Lightkurve* carries a subset of the `metadata` through into user-friendly object properties for convenience. You can view these data via the following," ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Attribute Description \n", "--------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------\n", " camera 4\n", " ccd 4\n", " column 1545\n", " row 401\n", " sector 5\n", " targetid 307210830\n", " mission TESS\n", " path /Users/rhounsel/.lightkurve-cache/mastDownload/TESS/tess2018319095959-s0005-0000000307210830-0125-s/tess2018319095959-s0005-0000000307210830-0125-s_tp.fits\n", "quality_bitmask default\n", " hdu PRIMARY, PIXELS, APERTURE, TARGET COSMIC RAY\n", "background_mask array (11, 11)\n", " cadenceno array (17894,)\n", " flux array (17894, 11, 11)\n", " flux_bkg array (17894, 11, 11)\n", " flux_bkg_err array (17894, 11, 11)\n", " flux_err array (17894, 11, 11)\n", " nan_time_mask array (17894,)\n", " pipeline_mask array (11, 11)\n", " pos_corr1 array (17894,)\n", " pos_corr2 array (17894,)\n", " quality array (17894,)\n", " quality_mask array (18944,)\n", " dec \n", " ra \n", " shape \n", " time \n", " wcs astropy.wcs.wcs.WCS\n" ] } ], "source": [ "tpf_file.show_properties()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This means that there are a small number of very common keywords/columns have a shorthand alias which you can call via *Lightkurve*, see below." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tpf_file.sector" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'TESS'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tpf_file.mission" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "124.5319" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tpf_file.ra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can view other data resources stored in this extension by viewing the associated FITS header, for example the cadence number." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([151576, 151577, 151578, ..., 170517, 170518, 170519], dtype=int32)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tpf_file.hdu[1].data['cadenceno']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also look at the values in the second extension of the fits file by accessing the AstroPy FITS `HDUList` object. For example, to look at all the column titles:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "XTENSION= 'BINTABLE' / marks the beginning of a new HDU \n", "BITPIX = 8 / array data type \n", "NAXIS = 2 / number of array dimensions \n", "NAXIS1 = 2448 / length of first array dimension \n", "NAXIS2 = 18944 / length of second array dimension \n", "PCOUNT = 0 / group parameter count (not used) \n", "GCOUNT = 1 / group count (not used) \n", "TFIELDS = 11 / number of table fields \n", "TTYPE1 = 'TIME ' / column title: data time stamps \n", "TFORM1 = 'D ' / column format: 64-bit floating point \n", "TUNIT1 = 'BJD - 2457000, days' / column units: Barycenter corrected TESS Julian\n", "TDISP1 = 'D14.7 ' / column display format \n", "TTYPE2 = 'TIMECORR' / column title: barycentric correction \n", "TFORM2 = 'E ' / column format: 32-bit floating point \n", "TUNIT2 = 'd ' / column units: Days \n", "TDISP2 = 'E14.7 ' / column display format \n", "TTYPE3 = 'CADENCENO' / column title: unique cadence number \n", "TFORM3 = 'J ' / column format: signed 32-bit integer \n", "TDISP3 = 'I10 ' / column display format \n", "TTYPE4 = 'RAW_CNTS' / column title: raw pixel counts \n", "TFORM4 = '121J ' / column format: image of signed 32-bit integers \n", "TUNIT4 = 'count ' / column units: count \n", "TDISP4 = 'I8 ' / column display format \n", "TDIM4 = '(11,11) ' / column dimensions: pixel aperture array \n", "TNULL4 = -1 / column null value indicator \n", "WCSN4P = 'PHYSICAL' / table column WCS name \n", "WCAX4P = 2 / table column physical WCS dimensions \n", "1CTY4P = 'RAWX ' / table column physical WCS axis 1 type, CCD col \n", "2CTY4P = 'RAWY ' / table column physical WCS axis 2 type, CCD row \n", "1CUN4P = 'PIXEL ' / table column physical WCS axis 1 unit \n", "2CUN4P = 'PIXEL ' / table column physical WCS axis 2 unit \n", "1CRV4P = 1545 / table column physical WCS ax 1 ref value \n", "2CRV4P = 401 / table column physical WCS ax 2 ref value \n", "1CDL4P = 1.0 / table column physical WCS a1 step \n", "2CDL4P = 1.0 / table column physical WCS a2 step \n", "1CRP4P = 1 / table column physical WCS a1 reference \n", "2CRP4P = 1 / table column physical WCS a2 reference \n", "WCAX4 = 2 / number of WCS axes \n", "1CTYP4 = 'RA---TAN' / right ascension coordinate type \n", "2CTYP4 = 'DEC--TAN' / declination coordinate type \n", "1CRPX4 = 6.441276957091532 / [pixel] reference pixel along image axis 1 \n", "2CRPX4 = 6.350830655251798 / [pixel] reference pixel along image axis 2 \n", "1CRVL4 = 124.5332711499119100 / [deg] right ascension at reference pixel \n", "2CRVL4 = -68.3147861875501700 / [deg] declination at reference pixel \n", "1CUNI4 = 'deg ' / physical unit in column dimension \n", "2CUNI4 = 'deg ' / physical unit in row dimension \n", "1CDLT4 = -0.005486384927700 / [deg] pixel scale in RA dimension \n", "2CDLT4 = 0.005486384927700364 / [deg] pixel scale in DEC dimension \n", "11PC4 = -0.5337830820472862 / linear transformation matrix element cos(th) \n", "12PC4 = 0.8130667476670455 / linear transformation matrix element -sin(th) \n", "21PC4 = 0.8497123440435488 / linear transformation matrix element sin(th) \n", "22PC4 = 0.5791250385649829 / linear transformation matrix element cos(th) \n", "TTYPE5 = 'FLUX ' / column title: calibrated pixel flux \n", "TFORM5 = '121E ' / column format: image of 32-bit floating point \n", "TUNIT5 = 'e-/s ' / column units: electrons per second \n", "TDISP5 = 'E14.7 ' / column display format \n", "TDIM5 = '(11,11) ' / column dimensions: pixel aperture array \n", "WCSN5P = 'PHYSICAL' / table column WCS name \n", "WCAX5P = 2 / table column physical WCS dimensions \n", "1CTY5P = 'RAWX ' / table column physical WCS axis 1 type, CCD col \n", "2CTY5P = 'RAWY ' / table column physical WCS axis 2 type, CCD row \n", "1CUN5P = 'PIXEL ' / table column physical WCS axis 1 unit \n", "2CUN5P = 'PIXEL ' / table column physical WCS axis 2 unit \n", "1CRV5P = 1545 / table column physical WCS ax 1 ref value \n", "2CRV5P = 401 / table column physical WCS ax 2 ref value \n", "1CDL5P = 1.0 / table column physical WCS a1 step \n", "2CDL5P = 1.0 / table column physical WCS a2 step \n", "1CRP5P = 1 / table column physical WCS a1 reference \n", "2CRP5P = 1 / table column physical WCS a2 reference \n", "WCAX5 = 2 / number of WCS axes \n", "1CTYP5 = 'RA---TAN' / right ascension coordinate type \n", "2CTYP5 = 'DEC--TAN' / declination coordinate type \n", "1CRPX5 = 6.441276957091532 / [pixel] reference pixel along image axis 1 \n", "2CRPX5 = 6.350830655251798 / [pixel] reference pixel along image axis 2 \n", "1CRVL5 = 124.5332711499119100 / [deg] right ascension at reference pixel \n", "2CRVL5 = -68.3147861875501700 / [deg] declination at reference pixel \n", "1CUNI5 = 'deg ' / physical unit in column dimension \n", "2CUNI5 = 'deg ' / physical unit in row dimension \n", "1CDLT5 = -0.005486384927700 / [deg] pixel scale in RA dimension \n", "2CDLT5 = 0.005486384927700364 / [deg] pixel scale in DEC dimension \n", "11PC5 = -0.5337830820472862 / linear transformation matrix element cos(th) \n", "12PC5 = 0.8130667476670455 / linear transformation matrix element -sin(th) \n", "21PC5 = 0.8497123440435488 / linear transformation matrix element sin(th) \n", "22PC5 = 0.5791250385649829 / linear transformation matrix element cos(th) \n", "TTYPE6 = 'FLUX_ERR' / column title: 1-sigma calibrated uncertainty \n", "TFORM6 = '121E ' / column format: image of 32-bit floating point \n", "TUNIT6 = 'e-/s ' / column units: electrons per second (1-sigma) \n", "TDISP6 = 'E14.7 ' / column display format \n", "TDIM6 = '(11,11) ' / column dimensions: pixel aperture array \n", "WCSN6P = 'PHYSICAL' / table column WCS name \n", "WCAX6P = 2 / table column physical WCS dimensions \n", "1CTY6P = 'RAWX ' / table column physical WCS axis 1 type, CCD col \n", "2CTY6P = 'RAWY ' / table column physical WCS axis 2 type, CCD row \n", "1CUN6P = 'PIXEL ' / table column physical WCS axis 1 unit \n", "2CUN6P = 'PIXEL ' / table column physical WCS axis 2 unit \n", "1CRV6P = 1545 / table column physical WCS ax 1 ref value \n", "2CRV6P = 401 / table column physical WCS ax 2 ref value \n", "1CDL6P = 1.0 / table column physical WCS a1 step \n", "2CDL6P = 1.0 / table column physical WCS a2 step \n", "1CRP6P = 1 / table column physical WCS a1 reference \n", "2CRP6P = 1 / table column physical WCS a2 reference \n", "WCAX6 = 2 / number of WCS axes \n", "1CTYP6 = 'RA---TAN' / right ascension coordinate type \n", "2CTYP6 = 'DEC--TAN' / declination coordinate type \n", "1CRPX6 = 6.441276957091532 / [pixel] reference pixel along image axis 1 \n", "2CRPX6 = 6.350830655251798 / [pixel] reference pixel along image axis 2 \n", "1CRVL6 = 124.5332711499119100 / [deg] right ascension at reference pixel \n", "2CRVL6 = -68.3147861875501700 / [deg] declination at reference pixel \n", "1CUNI6 = 'deg ' / physical unit in column dimension \n", "2CUNI6 = 'deg ' / physical unit in row dimension \n", "1CDLT6 = -0.005486384927700 / [deg] pixel scale in RA dimension \n", "2CDLT6 = 0.005486384927700364 / [deg] pixel scale in DEC dimension \n", "11PC6 = -0.5337830820472862 / linear transformation matrix element cos(th) \n", "12PC6 = 0.8130667476670455 / linear transformation matrix element -sin(th) \n", "21PC6 = 0.8497123440435488 / linear transformation matrix element sin(th) \n", "22PC6 = 0.5791250385649829 / linear transformation matrix element cos(th) \n", "TTYPE7 = 'FLUX_BKG' / column title: calibrated background flux \n", "TFORM7 = '121E ' / column format: image of 32-bit floating point \n", "TUNIT7 = 'e-/s ' / column units: electrons per second \n", "TDISP7 = 'E14.7 ' / column display format \n", "TDIM7 = '(11,11) ' / column dimensions: pixel aperture array \n", "WCSN7P = 'PHYSICAL' / table column WCS name \n", "WCAX7P = 2 / table column physical WCS dimensions \n", "1CTY7P = 'RAWX ' / table column physical WCS axis 1 type, CCD col \n", "2CTY7P = 'RAWY ' / table column physical WCS axis 2 type, CCD row \n", "1CUN7P = 'PIXEL ' / table column physical WCS axis 1 unit \n", "2CUN7P = 'PIXEL ' / table column physical WCS axis 2 unit \n", "1CRV7P = 1545 / table column physical WCS ax 1 ref value \n", "2CRV7P = 401 / table column physical WCS ax 2 ref value \n", "1CDL7P = 1.0 / table column physical WCS a1 step \n", "2CDL7P = 1.0 / table column physical WCS a2 step \n", "1CRP7P = 1 / table column physical WCS a1 reference \n", "2CRP7P = 1 / table column physical WCS a2 reference \n", "WCAX7 = 2 / number of WCS axes \n", "1CTYP7 = 'RA---TAN' / right ascension coordinate type \n", "2CTYP7 = 'DEC--TAN' / declination coordinate type \n", "1CRPX7 = 6.441276957091532 / [pixel] reference pixel along image axis 1 \n", "2CRPX7 = 6.350830655251798 / [pixel] reference pixel along image axis 2 \n", "1CRVL7 = 124.5332711499119100 / [deg] right ascension at reference pixel \n", "2CRVL7 = -68.3147861875501700 / [deg] declination at reference pixel \n", "1CUNI7 = 'deg ' / physical unit in column dimension \n", "2CUNI7 = 'deg ' / physical unit in row dimension \n", "1CDLT7 = -0.005486384927700 / [deg] pixel scale in RA dimension \n", "2CDLT7 = 0.005486384927700364 / [deg] pixel scale in DEC dimension \n", "11PC7 = -0.5337830820472862 / linear transformation matrix element cos(th) \n", "12PC7 = 0.8130667476670455 / linear transformation matrix element -sin(th) \n", "21PC7 = 0.8497123440435488 / linear transformation matrix element sin(th) \n", "22PC7 = 0.5791250385649829 / linear transformation matrix element cos(th) \n", "TTYPE8 = 'FLUX_BKG_ERR' / column title: 1-sigma cal. background uncertain\n", "TFORM8 = '121E ' / column format: image of 32-bit floating point \n", "TUNIT8 = 'e-/s ' / column units: electrons per second (1-sigma) \n", "TDISP8 = 'E14.7 ' / column display format \n", "TDIM8 = '(11,11) ' / column dimensions: pixel aperture array \n", "WCSN8P = 'PHYSICAL' / table column WCS name \n", "WCAX8P = 2 / table column physical WCS dimensions \n", "1CTY8P = 'RAWX ' / table column physical WCS axis 1 type, CCD col \n", "2CTY8P = 'RAWY ' / table column physical WCS axis 2 type, CCD row \n", "1CUN8P = 'PIXEL ' / table column physical WCS axis 1 unit \n", "2CUN8P = 'PIXEL ' / table column physical WCS axis 2 unit \n", "1CRV8P = 1545 / table column physical WCS ax 1 ref value \n", "2CRV8P = 401 / table column physical WCS ax 2 ref value \n", "1CDL8P = 1.0 / table column physical WCS a1 step \n", "2CDL8P = 1.0 / table column physical WCS a2 step \n", "1CRP8P = 1 / table column physical WCS a1 reference \n", "2CRP8P = 1 / table column physical WCS a2 reference \n", "WCAX8 = 2 / number of WCS axes \n", "1CTYP8 = 'RA---TAN' / right ascension coordinate type \n", "2CTYP8 = 'DEC--TAN' / declination coordinate type \n", "1CRPX8 = 6.441276957091532 / [pixel] reference pixel along image axis 1 \n", "2CRPX8 = 6.350830655251798 / [pixel] reference pixel along image axis 2 \n", "1CRVL8 = 124.5332711499119100 / [deg] right ascension at reference pixel \n", "2CRVL8 = -68.3147861875501700 / [deg] declination at reference pixel \n", "1CUNI8 = 'deg ' / physical unit in column dimension \n", "2CUNI8 = 'deg ' / physical unit in row dimension \n", "1CDLT8 = -0.005486384927700 / [deg] pixel scale in RA dimension \n", "2CDLT8 = 0.005486384927700364 / [deg] pixel scale in DEC dimension \n", "11PC8 = -0.5337830820472862 / linear transformation matrix element cos(th) \n", "12PC8 = 0.8130667476670455 / linear transformation matrix element -sin(th) \n", "21PC8 = 0.8497123440435488 / linear transformation matrix element sin(th) \n", "22PC8 = 0.5791250385649829 / linear transformation matrix element cos(th) \n", "TTYPE9 = 'QUALITY ' / column title: pixel quality flags \n", "TFORM9 = 'J ' / column format: signed 32-bit integer \n", "TDISP9 = 'B16.16 ' / column display format \n", "TTYPE10 = 'POS_CORR1' / column title: column position correction \n", "TFORM10 = 'E ' / column format: 32-bit floating point \n", "TUNIT10 = 'pixel ' / column units: pixel \n", "TDISP10 = 'E14.7 ' / column display format \n", "TTYPE11 = 'POS_CORR2' / column title: row position correction \n", "TFORM11 = 'E ' / column format: 32-bit floating point \n", "TUNIT11 = 'pixel ' / column units: pixel \n", "TDISP11 = 'E14.7 ' / column display format \n", "INHERIT = T / inherit the primary header \n", "EXTNAME = 'PIXELS ' / name of extension \n", "EXTVER = 1 / extension version number (not format version) \n", "SIMDATA = F / file is based on simulated data \n", "TELESCOP= 'TESS ' / telescope \n", "INSTRUME= 'TESS Photometer' / detector type \n", "OBJECT = 'TIC 307210830' / string version of target id \n", "TICID = 307210830 / unique tess target identifier \n", "RADESYS = 'ICRS ' / reference frame of celestial coordinates \n", "RA_OBJ = 124.5332711499119100 / [deg] right ascension \n", "DEC_OBJ = -68.3147861875501700 / [deg] declination \n", "EQUINOX = 2000.0 / equinox of celestial coordinate system \n", "EXPOSURE= 19.768406119079 / [d] time on source \n", "TIMEREF = 'SOLARSYSTEM' / barycentric correction applied to times \n", "TASSIGN = 'SPACECRAFT' / where time is assigned \n", "TIMESYS = 'TDB ' / time system is Barycentric Dynamical Time (TDB)\n", "BJDREFI = 2457000 / integer part of BTJD reference date \n", "BJDREFF = 0.00000000 / fraction of the day in BTJD reference date \n", "TIMEUNIT= 'd ' / time unit for TIME, TSTART and TSTOP \n", "TELAPSE = 26.311518552044 / [d] TSTOP - TSTART \n", "LIVETIME= 20.8387226932191570 / [d] TELAPSE multiplied by DEADC \n", "TSTART = 1437.975829368090 / observation start time in BTJD \n", "TSTOP = 1464.287347920134 / observation stop time in BTJD \n", "DATE-OBS= '2018-11-15T11:24:02.473Z' / TSTART as UTC calendar date \n", "DATE-END= '2018-12-11T18:52:37.676Z' / TSTOP as UTC calendar date \n", "DEADC = 0.7920000000000000 / deadtime correction \n", "TIMEPIXR= 0.5 / bin time beginning=0 middle=0.5 end=1 \n", "TIERRELA= 1.16E-05 / [d] relative time error \n", "INT_TIME= 1.980000000000 / [s] photon accumulation time per frame \n", "READTIME= 0.020000000000 / [s] readout time per frame \n", "FRAMETIM= 2.000000000000 / [s] frame time (INT_TIME + READTIME) \n", "NUM_FRM = 60 / number of frames per time stamp \n", "TIMEDEL = 0.001388888888888889 / [d] time resolution of data \n", "BACKAPP = T / background is subtracted \n", "DEADAPP = T / deadtime applied \n", "VIGNAPP = T / vignetting or collimator correction applied \n", "GAINA = 5.239999771118164 / [electrons/count] CCD output A gain \n", "GAINB = 5.119999885559082 / [electrons/count] CCD output B gain \n", "GAINC = 5.159999847412109 / [electrons/count] CCD output C gain \n", "GAIND = 5.159999847412109 / [electrons/count] CCD output D gain \n", "READNOIA= 10.270400047302246 / [electrons] read noise CCD output A \n", "READNOIB= 7.424000263214111 / [electrons] read noise CCD output B \n", "READNOIC= 7.327199459075928 / [electrons] read noise CCD output C \n", "READNOID= 9.391200065612793 / [electrons] read noise CCD output D \n", "NREADOUT= 48 / number of read per cadence \n", "FXDOFF = 209700 / compression fixed offset \n", "CDPP0_5 = 253.29708862 / RMS CDPP on 0.5-hr time scales \n", "CDPP1_0 = 198.38166809 / RMS CDPP on 1.0-hr time scales \n", "CDPP2_0 = 165.88996887 / RMS CDPP on 2.0-hr time scales \n", "CROWDSAP= 0.99811256 / Ratio of target flux to total flux in op. ap. \n", "FLFRCSAP= 0.89177799 / Frac. of target flux w/in the op. aperture \n", "CHECKSUM= 'OklEOiiDOiiDOiiD' / HDU checksum updated 2019-02-10T15:15:39Z \n", "TMOFST44= 1.059999942779541 / (s) readout delay for camera 4 and ccd 4 \n", "MEANBLCA= 6689 / [count] FSW mean black level CCD output A \n", "MEANBLCB= 6826 / [count] FSW mean black level CCD output B \n", "MEANBLCC= 6751 / [count] FSW mean black level CCD output C \n", "MEANBLCD= 6503 / [count] FSW mean black level CCD output D " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tpf_file.hdu[1].header" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a lot of information to process and if you would prefer to only look at certain items you can specify a string such as `'TYPE'` for instance:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TTYPE1 = 'TIME ' / column title: data time stamps \n", "TTYPE2 = 'TIMECORR' / column title: barycentric correction \n", "TTYPE3 = 'CADENCENO' / column title: unique cadence number \n", "TTYPE4 = 'RAW_CNTS' / column title: raw pixel counts \n", "TTYPE5 = 'FLUX ' / column title: calibrated pixel flux \n", "TTYPE6 = 'FLUX_ERR' / column title: 1-sigma calibrated uncertainty \n", "TTYPE7 = 'FLUX_BKG' / column title: calibrated background flux \n", "TTYPE8 = 'FLUX_BKG_ERR' / column title: 1-sigma cal. background uncertain\n", "TTYPE9 = 'QUALITY ' / column title: pixel quality flags \n", "TTYPE10 = 'POS_CORR1' / column title: column position correction \n", "TTYPE11 = 'POS_CORR2' / column title: row position correction " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tpf_file.hdu[1].header['TTYPE*']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can find more information on FITS file handeling [here](https://docs.astropy.org/en/stable/io/fits/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## WCS\n", "A new piece of `metadata` included in the `TessTargetPixelFile` objects is the [World Coordinate System](https://fits.gsfc.nasa.gov/fits_wcs.html) (WCS). The WCS contains information about how pixel numbers map to celestial coordinates. This is important when comparing a TPF from a *TESS* observation to an observation of the same star with a different telescope." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WCS: WCS Keywords\n", "\n", "Number of WCS axes: 2\n", "CTYPE : 'RA---TAN' 'DEC--TAN' \n", "CRVAL : 124.5332711499119 -68.31478618755017 \n", "CRPIX : 6.441276957091532 6.350830655251798 \n", "PC1_1 PC1_2 : -0.5337830820472862 0.8130667476670455 \n", "PC2_1 PC2_2 : 0.8497123440435488 0.5791250385649829 \n", "CDELT : -0.0054863849277 0.005486384927700364 \n", "NAXIS : 2448 18944\n" ] } ], "source": [ "print(f'WCS: {tpf_file.wcs}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Flux & Time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The most interesting data in a *TESS* `TargetPixelFile` object are the `flux` and `time`, which give access to the brightness of the observed target over time. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can access the time-stamps of the observations using the `time` property:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "