#!/usr/bin/env python3

# compressor.py
from subprocess import Popen, PIPE

def compress(value):
    """Compresses a byte array with the xz binary"""

    process = Popen(["xz", "--compress", "--force"], stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def decompress(value):
    """Decompresses a byte array with the xz binary"""

    process = Popen(["xz", "--decompress", "--stdout", "--force"],
                    stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def compress_file(path):
    """Compress the file at 'path' with the xz binary"""

    process = Popen(["xz", "--compress", "--force", "--stdout", path], stdout=PIPE)
    return process.communicate()[0]

# compressor.py

import os
import sys
from optparse import OptionParser
from sys import argv
import base64
try:
    import cPickle as pickle
except ImportError:
    import pickle
from io import BytesIO

from os.path import basename
from errno import EPIPE

def load():
    ppds_compressed = base64.b64decode(ppds_compressed_b64)
    ppds_decompressed = decompress(ppds_compressed)
    ppds = pickle.loads(ppds_decompressed)
    return ppds

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.items():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            try:
                print(ppd.replace('"', '"' + binary_name + ':', 1))
            except IOError as e:
                # Errors like broken pipes (program which takes the standard
                # output terminates before this program terminates) should not
                # generate a traceback.
                if e.errno == EPIPE: exit(0)
                raise

def cat(ppd):
    # Ignore driver's name, take only PPD's
    ppd = ppd.split(":")[-1]
    # Remove also the index
    ppd = "0/" + ppd[ppd.find("/")+1:]

    ppds = load()
    ppds['ARCHIVE'] = BytesIO(decompress(ppds['ARCHIVE']))

    if ppd in ppds:
        start = ppds[ppd][0]
        length = ppds[ppd][1]
        ppds['ARCHIVE'].seek(start)
        return ppds['ARCHIVE'].read(length)

def main():
    usage = "usage: %prog list\n" \
            "       %prog cat URI"
    version = "%prog 0.4.9\n" \
              "Copyright (c) 2010 Vitor Baptista.\n" \
              "This is free software; see the source for copying conditions.\n" \
              "There is NO warranty; not even for MERCHANTABILITY or\n" \
              "FITNESS FOR A PARTICULAR PURPOSE."
    parser = OptionParser(usage=usage,
                          version=version)
    (options, args) = parser.parse_args()

    if len(args) == 0 or len(args) > 2:
        parser.error("incorrect number of arguments")

    if args[0].lower() == 'list':
        ls()
    elif args[0].lower() == 'cat':
        if not len(args) == 2:
            parser.error("incorrect number of arguments")
        ppd = cat(args[1])
        if not ppd:
            parser.error("Printer '%s' does not have default driver!" % args[1])
        try:
            # avoid any assumption of encoding or system locale; just print the
            # bytes of the PPD as they are
            if sys.version_info.major < 3:
                sys.stdout.write(ppd)
            else:
                sys.stdout.buffer.write(ppd)
        except IOError as e:
            # Errors like broken pipes (program which takes the standard output
            # terminates before this program terminates) should not generate a
            # traceback.
            if e.errno == EPIPE: exit(0)
            raise
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = b"/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4JWmSWhdAEAAyynXgKBkJTK2v/boY8ub5Lk8y5tWR4Cl367kvOVWcheqwdhdf3XAmwhsM2eT7ShySIHWOB55pgy6HOCTX2gX8GlhRIM4mWatisQ4eqngQRmidhkjdeqqiNm1boWhAqocWsqiogtERabv0quTC58bk7ZQM3q1/Haw235yeMrnEtBiZXLSQ6Rgv9eZYT5JZGCAtM/PNTKF2MYllOS8BBqvN+U1yjr22UMI7jz4Y3pIGlwh9IlS66bF8ST/rhHvrR7m89+Fc3iTCGoM54rk/2RUjc0/06bkfYEnjMjCjC6xVRcGdZdoNhMyc28EGl7j46o6bans8DIYh00DpA/D0AKvdkzz96CMOb6au/fPVuH9ZCTPy1qvttkb8GSEqwth6WASjUmP4rJedAQ3mwS8+VBcMv44wenR1xCwIZhzhBLiOAIAlunUoi3fMWU1pFSBVcURZTfwHz01C21IF7V00sALcUmBDiM2GNPX9ZvWnp3luaTEE91Fd1IsLQruuPPOLWIkY1hF1SMAeO5MiLCH+0e3zRxtop2Xr+4cim3OPkRHF0rNcuYr4Z6HNVGyHjBS8KFau7cFORn+w6JhUG/Z+wGmDvLo8VmmpOehw6U4n05mGhFJKjXJOVo/LanyQOopBKy6mSLDJnY9vnwQo+i9gfect8P1h8BrFKcf+JDBpHEI8pmNpNb80pK6HiDmZbyp68JbsWcMOO0xs2WaezTcTbJV8nlAeKnId7kg6X08gCavbSG7tiyc02DF0PbT2+tsWQXWADuBSfFzsCpusAzWyDwLQVFVoPlSxIea5e56TKXbrzQOpyVnICkH+xlR713/8G/001BRM+PEszCkLMUjPsYx2GYDcMYpllBkj67M4wItwsfeyIFfaqUkNFiFYt0MUy00RaUzimSGesO0Bbt2Sfo/L2Gvhz8TrfkPioykYAeS1MG+TQ5sD42cRzWSjGYr4noz2hwuc57ThmBMCTmg7BtRXUTjVjme0bW70u9RG/3iJKk05T2TjUZ+veXEs6n9+RNr0pj+86j/HU4i/oWkPbc5gLv/Ry7bMY6BnV7F6JEuxrrilvDbs7mh7eM6PL8iRhkK783VWgGHBKJv0UdxNNxHIKqcjK/XxoOZYV0LyfpPZN2XxxgknXkOqBXwS71eGs9CWmvFX7waiBrxuN8Y0Lwk8tOFpx/XhS305wLnF4biXzOIDvZ95uUF2Wk/ObGhRd4ycIQRFNAFiNEqp7k56kaeuwXiTXrgbEE23lsUVN32FBIjkqEKlJaQivXz7iuXsgDjwlNzc6eZBzJzKNWqLM5o456BOdgepacsi38Ej8/owjFJ4Zzq1jMCbOTmTprOAsrCwZ4Da2EZYvMwZm0GhQfcSn7EK18WzlM+1+avXl9pe7GEdRg8FjrDZdLqumzJBVltC8pvj8ba22ii973XjYfcJem7ARwwQX+OGEwNVuecMQq06dDJUvv3B7jaa3ngdUb47aBqj5my0A0zSy15EmNGnHBXp3vmCVOYvO4OAc5HOnZRjTboYkXidZMxdjsZgnaHYq2u/5ANfc91uCUWOVr7k1UkJMslgwODsave4TUhUquKBWVDJYIi0G/8cBr6Kd2mQ98JCryPEW9T8XUD51SrjFRYuwDxjda9rMsruA9/i70PwMtJMfpcIgrxZT262VfGOm/+F8NH6StfBDjbgNwhNeKzGJzDQdkZV/c0zMP2qP+tSWFAp3oWaG5Z9RcQi3pz61+QGa/F4xvp6dvOCIO5Wr7L+TAQvbhy3sONLeHkv2Qd9LEXKBFrQVV+HQk9odisbzp2DRi2OH1zu+yb03ZpVTpbk3NQz011Hho3pqjgaJ2SYANgAxnpU9m7OXs2QwhAYsjFMxsuXslr1/86mNwZOBNo5hSMBKtXywnE0avkjXjZLAAvu/bFjIia735Mqto/4btlRbbkuSrMj77K5v+hm5y2eEM5o0B4iog1RvmOQZ01T7gCdmJLPRDBvp+Gfx1x1Zp65KLNHq9yZSEIEYV2gvrhwzLkJjx2hCMDULEf9x+ac0GmkPHy5eYRSwfgwQ5srXw2B2AMpxOzrumud5cWtoJ6oX1+at5SJoh57mXyGHwtZbpNBy6P20qrBF0dTY+WsSx8NnrVne6XQGBmnzup6XkhBcTWAeISiT4E/X3HqZVpG3Yf2A7uzzc6OB+9l2OtRgf4pG+DzjuSY6gLipk5fvpe2UtcSUIuABTEGCi3fQue2WGj/5CuunltnmvEEofGnKKjXTIYnh5dU8ctJ18+Rfwm6mt/xhtrVroU6RB+mYeGcRS4p6r85nie4Owj6phMx1zNqJ8o0AsiW+Pwl2T74/FbGReWBmqxCJB2nDi7pb+T/Q8v+XN0r+qN0KoTGiaY/JFxCgeAgYj8U7pVNx9lMCAkpB17wa3l7idt1sdBkExDhX0LJoxJHX0MEvOVVMyFVQqqaQtyV5Ub8joBwjqldGMOZZ1/YjCF+/IeaQYf9/8VgWCPeBLS2fJI2S11bPIGTFqDoIgfATsO3avqSuH2ZnzJyI/5M3wlzq1WAqubjzFccmDtbI6ItvXZTIA7pzGod/JHSuXw3+Te6E6QBQ1orHedTv7CtqK6o4UT41bCEE9cmGV4/A0uywrebnQ9GPeC1iIAcQvMbm5fuAq6gUYxa9iK3GhFwOjGp211/KY39mj7Wak++SSGUwUV0BdRkWcn393VZNWjbu89NLmmiD9VaQKnjFVLPGjXjeB67wAYfF7t0eEgJ54+eFvBu0VqakYEG8EdTm6vTbD1hpdKiSn4YE7CSgAIDkD+dIix03OPVit6toUh5Ty6gHuKWmURF76+AEXgygaFRsHmoOZM8QQhlMmZ/h1C96ZFFJ1pzhCdOFua37tWi5CXBdP0EJnTLdrigYfNCapn8HA6ilgxDL+2f3gDkl3zkW1vNmP/eaP5F7E/VSNj7CTOILZ2hLIL00vtX35o95dKfgb254XUaBFjt/kGgmiQnphH9pgY3c7Uje49Gu1rJyBOV5iT+WTQjLOMjwj7vwZ1gaFZDu/GSq8poaftlty/F/99cigBjLf2R/xeLwSJJKodvb0qwN+AEtKaiMDkR5LUfHkzRzRMtMkllI+JfZG9nth/WY4eBhPVemrMWhJacoGVtMRmCM+/TEgS78O5Cagj8boyB5oWmLUKoulTE2RIs1wopyVbhNB8jIItjpq0t/oTXc/Wv7CcL6JsTdZJR5K3LdQY00xImzp/qR/SXm0l35zKvEUAAperZiZmhx0J4GIyi3jKK29L5R3U45jOfb7jTFMqLo0qNyUinusby7uYHYabQOZKy9hmijIHnXFDpGdTz2gcfhN/NToZwZ4qLej0pzZNrwp9TTvySRvWdq3MMVLDjltcEmaUUVtBKZSEwHrOrtiWux+JIlZ0HlTFJzy/FvoIoYS9HeHzQNrC06Xlinm0X7Or8ZBNKc6c/pVw3UIPjHPjTy8b1xGlaoUdr0Be+Zb/Wx9t14k1wcBLv8lGWhQ5m4c+YkQbCohDZukZmBdDQe+8A75h5Mh5EH7KC0KfqUgk7u5/vCP3my88uNYs2B+t64Z2prUmuQilTO8G/0Ebr+cCbSwfIkS1vdGLlbgDRAvrjtcs3FpjQ3Hao5G6l8RjB0hBTFbyt9TEyd5lC1RtBSAuPQf1YJRm4DUYsXMIZJCYx2DwqCI4HZN3Z7QsXcke36CbxGj0k3uQnlasARxvNMa/aBti3j86M8tIHi/XN5UvOhLnZ+8jQ1e3ffCLwHYyuHBSqvHDPuHkZPfCFdor3p1iyFhQQWT056/cvPAkgNKU2LY/p15cAFCgtC0fYpls3/GSEHqjH8b8z6p3KTOXS8LPSVETRfHVDPcuVqFSHe6fCwoXc68NNl99Z630hX1TNiCuPWfP6nzP2UBiGk4F5J2JSTDGkYCiT07Ha2COr1z4qR81+wN4gT7BV4JbV3lthMqZfxnbc0ZmFMM44eBfRQkd5J/ywc5RmepfP5faEWOBixT6f5TjIGVkMStJyO6KJX+50u+naF34jWkVwJEzA9seBLYGvUr/Z3AOqoXaAT31gpt4QFcYxgTt2B0vjldMS3anmdzlkmWdIdK/p5EUouZK8zWZarivCLrclS8545UADQbrIN3UBO0QqyabACjH850QX8qu4+N7XEJMpyorw0wM4AHK27s793licj8i/M1sy6MsS3GdKgUFoAF1+giKQqDAIVjNDSSiidKl+73AWAEHx+CXI9qP+c8QAyzzC+TqsFjylwcorlcADssAQcvIL9dvYjh2hBWb7/7nApnlRgEPqB6Op3IMApLPZvcMiCrBd0ojTmNE0qKSL8jYSoYDblwN5FNQhuIJ3SfiZzFV5ZTRI8G97KQp+b+/K6HhbouOxujUARuuIVtEef0bzSeCC6jgJdDqCD3XDrYO4cSywoTDNHRuGWaIy0gujCbqydEdUXrhPeSMKDSAoebrg9aOZze1yI5G8iBqLwsQ60ad68ubUvtdk/cEDzxxa5jVuTIEm4fRZoN0oYh8N32+Uo0gcsGljvQp7nkxuWiWLa0faHdnwX7kZ5Z7nYaRdIHGncJVzk99qkaeqDLhiSLTwtYmA5uUPIMZrPsudkEL4YVkj+LUH+VLtRh/rzZm0MFCkMe+6EzFT+k//rfVUkC9/dKhNGKWVLYtc85aL55rx2eAVgb8c1tRYzE/ITqBHYz3RwJ6D1u9lV2G++zlwx/vQ6+9SxFAfbPMFOCX7QeQurLHyWFT2cO5cNy/sYQyzML5T/tBU5keeK3LW2iTPawJFx1cqrQPBuIzmDRZEj6s70iPDV+6HwcOxocvSx1KDNeVOOikI6A60DlMlr2VxIgz+JwyMM2RYXVJzdzvypVaRf7JcYZt8vqEyy1NH1bZEQQ55GED/ZYrGwhNiIhdlNzFB5BsUoJyCLKBAXAiCK9nV4NHejlmr0Y479ehcEXP+5DdXMP9N/wlUGbW/T9pxnHD7F92XcG6HPZxUx1R1V8Ain25LAcj6QXvVOoshQjR8tFDLbzBCjcauV11+2g8144IMeQ8B/3IZ9pHFCgalnp1ILrWKGJQd1AaOwxLVxtZKt7TyvjL9QO19uwVLuZy1DL4SfKZcWazI6BpFz+9ynjAaqk2G/f6oymMdKv4Sos3BU4nxXsFJsF72oDbGzvhy4ojTnr7xx9rRAj16+hToWX7FIqU4bMpphTuCCgHw/9cfGusxvGtAcEbl+V8oftSdMv67gC0ZaJLm33fCVmu+Clqjb4d44fzg3FHkjzyHXyhPGhVtLJ3lfHLV2/aHm00jMdO248hSalnb8WekH48lzc/BoqbBOiAWHCqtwv6AImMR/ndxKKi/C0TVIPt9VMHtRuY42/50MYVCKHlzZv+rRyEfUq5meclnNALQOGHmVErXLIhKdcRlWTS6mPBUL06JIYUHHEpqVyfCPAUFx/jin5m73/Mnq0ZVa1BAdjMm0sHaQNacVnDiGE65wkbnHCoMmPIBgLEwuoX9sWerAo8r94dehruHN4McVbBa5SW3D5VcJIXgSjN3YxZ35hPvORE5T1/5TvILns42wJx/cMR6zdWZEPOfN7nk8pwGSIprz1UaGvn5/KFLBoacMF0bL3vjEpkXJe5LVEeNhxXKuyNVpUki4x2NxaxsyGPRE5Et+mVrPyIpjxJHwKWsD2FAVzc9YS9d6WDCFXkxtkAnR4M+jFyuAyPI/MsqifIhD6pYA93SC1rIqRMFFMvaoJBmdyglxr4QZSK8cU3vKFMgizbocfXeVEZo94azEhOZYoJBORPnaDYCIwvDujuQA3C5QgNPJ1g0Qkgi2HH4qK4UgmBUjJAqiwvLge/dvga9BjDA5FCKC+Kumrhx0HT+6jiHYdHApg7Kd5hFA05y/dfWxpZJi4j0SA6eZuthLkOOzwzc3+rStmoNYcECv0Ta8GVP2eMmYCfbvmu9Syvf6qiIgBcuRf9j9OC7/1ByiKV2XRAsvVW7EwT1FPkwnksjZ2rs5j8W77vq8RxkNWKh5CvUrDkn/rJO0G8qa/frhH37uOqMjYO11hC2/K8T5U1MFi6nSv7k4p0jIx+Axw/YimfLzIPblYYxqaIOXLTTU2rjFTrlLWcxrcLFS3QWgu2XOUTmHlDyLvrTeqdtoc0sr9M2SUJ6BWR7qICefbyd8he6spIBeyBD01wW4FqcoN5tVFL6SoPjb210AeubFlqX0oSpe6rv7jKwGOoUPVXOrc/43oqtnbgUfqpG11d8BJmQx+lcvtyMQLBAYS11msQm/m8rekVKoe+iySq6haIi6yruK6SsQDyEdp3+C+FZCdd3U3LRIfrgscNpU7vtkpptmoNKws9+9QQJAvqelcYoTXGiP9ZXubJQbuV5LvuQfwY+9yn/BrH/nNPm4i1q6DeU6bDXvtHGmNoxnC5Yc9/55cLxAmOgTMz2kgMpZ3B9dQEqakwDs7YSJndR9rcH6iFQeDpQaw5Jn5/2kAIP4gOhZemXPYxd/Y3eULv28FtLB6LDc2r7Nm06NKXZFhIwvYwgXBtrfIUVXEJ/jkSTkROmyaoYnlorvbubrJcgecWXx94FEDw+K+W62uZIVqtgYTFUEdqRMQGTIubKe4I+AQFIjqMS3l1MTMKasnJ/7Oe0zcSKmJczxzfX+K/vhamnkhk/F+w7DpjfR5gDjvdheP8k5F0zGdh0XPi+akGF1A56QczgFfqLL94sj+bz3U7gztHI5WySQfaRfnfQrYZp6RXnpmtGPt92MTpNB2hFk6yrJWvPud+AJmzSCLA/LF8yUSThR8TashkrCcepzz8WsXObvCRqNN5/7EjcvDsU2qBph0D8OVRyl97O9QRM/6qJk7hOru7uWwZQdM0q1HgHiBlmClFMQNJzM+CqZw1pyPChtX0SSjK+Qho0HVl+czYh2Yba2/qKaeoZhlL+MwOBVlLADNzbP1Fs+0nA2RHND+Sg0F7iXwlBWIwp3sf7h96iGSHWELqS/7iS8AF9seupZFT7ShQNBC2M2nVlKASfnljWuqrZMJhfmtCcUBEkztKaLDYaCOv+kCCr6KX+Kz0gC0NnUrWf50cc4OTKTH8v49wGLA1r7BiHpctc5ggtSHOfgjfl/Iva7wb/2w6YRhIwY1jcaKsa2tf8qkCkMYWYRDMdEB4LM8w29qDYmKgfoCVfO5MsQEBS/KuxTB0kIe6gg/GCHZUozxZZ/eQsFEoHLBEI8S0nB0NV96er0A2jNHmA7kwvS6rvFtD+5tAEIry3oa1M6SBlnk1RQYiDlP+7HJ6L8396f2UjnGcNH/vAyXWC1kkP8qJ2DKVln/lB6HCsdryH5Zqbv65+tqjK6UbN1XAxRgQ8V5CNSt3Yn9XwX63GmGOiZjgMVW7Fjcg1YZ8MDMkIoD3MgPrdBjkESsGLpMhaNOAZFMLaTIsX05tlFUqEvLEaLGIt6BitfNB1eTIJd1LexN02wg1K6vbnbLkT2F9JmW1JTIucER3kO3gntaqUbwzvxfAFBm3eB3Ac0LJLBfx2yLuriJcL6Nlvxe/eK60lAwwMoLR8M1cGdN3/LMHXKO1c3qv4Swn5fNQ+L3iznMz91iDUpOsVTOTm+kXMZfYmr7UV8jxeSHpGHwU5ny3rV7gxtFlZf1zwZ6uUAdyUAilihIr46BK3O/n6vke6qGiVLzrtMy6V4VAxN1Eisj4uuxjmqJ/rH5Jd/kd/TSI4O+N7k62ZsIecuiThqyyrNkd7mqNcVbEVp6eW6jqZRL0Fo6AHw4599S3CFDCwkSM8oBNa4jhBzCYXnsdSLVBlbVX9z99c9P0UrefJ/+NJS2bz/hkJaZBFxS4qCc7CB9tEy2oVc36/lHmo9bAKcj2BxRiy+de2nNw3kWS7cWdAwx5fzhYUpWLRp7gawtT38aO5oB6LezjE0TAHhcuvaL5hVpYmWe4kVlNPMbnwglCvuNuxjIYdDIrZl4iiQybXqoRHKHIY4zrUH45NiIgJ1xPFEFsLQGZHLLHRY07byN8TLO8qcpCxkNqyT6BXEz9/n/qevnyrB817bN+ymPi8FDRnn3G332gejLB/BeiN6kQThwM2aDJy+K6K3en6Up637zBrNvFzTfJeWo0cZz0J2MknXtm2KFN3Kc60UdzUjmTHN5SjRWTP62MstH/xSBSE71RWwovfa95Ojvb5ECspP2mM7P47j51T+fHAqxkaMHXkCAfK/IrZxwxkb42iJjxE/vM16I05pLv/pjqQRMeLz96ki7r/uSZFmY0r7vVR0RBt291+N1ooF9HDIMT4O+WUBcb1wd9y6wN0eSB148RWNEi5R/TRU7EeI9EPIFTO9PTN8QAC+J7E/RjhweS4UzF2Smh/25tIZd6kGbaLgE+YLPAi6+1qyu7K/jnt386p/0vKKcLT454EppeWMvoCnwGQMM86ZJqJdeb3Cs02ZTiXSwpm6hPx6zaQ3KWWYanN+/tWIIw2F16N5zB2LZ3dha4cMeAAW30uKOqEcoJQjkUFXT/724YFduBcw4qJvlRXt+kCvOz5+aUnNzc2dH/8BwRqK6jfJjNT4JIhPfqffV8fZ8QZaLn8jBNv/OagO819nq61Tx9FmBVpTru7bLS4PofKXgB7fmo4YowgfEtcpLObe9E01INHdujATNLISUdZjWK+uGU9YVFHKaUFQ6tVmxggAdQtUq5pNPQQXnaqZA81WAubzjgW/KEYj7mxnYTpniVpQfhSJ4p0EqvDBJ3O9VQf12oV7f/vPdif2TZGxrv57hFszUOzGuVgWCxEjZwT6ybb+GSt3Hp8Eugr0SGA4u75JXeK11heLOrxIAgqLTna2q9wgO8Hq2/GOg2C8RzUuUb+NagvmOP2M2p+zZDhd+HqhNYOhoIvT79Z85RIzubLFQFPd5ASnSHiF2tfp9m1VK/kK2UM/Eo1E8mOrC3Is85Z6qngOQHfQiKZC7Y/H1BSblcgvd570hLaBIYAWVFrqozXC5RHANcLtDzUi6A3HxfC4gL8tDWH/iAx3E7Ns0YFzyGim+Hu7ehnTSL/S4it1hWBqw2FfR8D0kZbjivCITU3e55zKoZ/xjDTukGDJE6NqMtYxtTXTgssjYCUL/H7AISWJ1HQ3dm5IlYGv+DnDMNB+PWgggKYEMohPaRhoMvvxWrnErG0cF3oOoyRJ23RpabAegHWrWI5TlF4jUFEf65Y216Q9pg9JxVr8txl4zkgQlMQjvOw+WOsMpOJwlnMElvdR7sHFon55ngDDDOufZimrnG764ZapyWf55goY160+ojGxigBZbuIxcxDHTeA831DHtjMbmIeah5vdF3nUoVYFxGh+fZ5QCHr0r1cNVF9qmJqea6O6O2sr/QNIiYY9sg0T06ddYRTtjm97u/dG0wKgWYybENSYSSHPL8Moh/NJNKVSZiaw1YOpwG/Iviym+jg+xUmYAdIi6YYfutqboU6IoZKQaZjPC1vELASgFEs0/r2fGvXW7Zg52dIQiPTIQQzAzHWX00egRbnOgOvBbHkagC6M1nUo1v+fCJVThe6H8DQ3iJa4nVg65YF25L9WrfGjQq92CLet4JKUGD7aJzEsrBpg9Od7IF5hLogjMjHPQvwvfbPzh5RFSmg3js83YlOM63c+cnf/icXtlB09URTfJgUBf0kisVL+Y6AROJs8zHzdOhegwa78igU5J6gffVdausCNeQYsyDt3lspYGPP7XXbfFUleQT7YgftupYFFZOZIKGB29hRq2TVEAFmc4aT++5ii0hGYtC0gV5ghZaU8dM4PCcq0nkqdz2meipGCRdm78FkJUF2nKscjIQTxeFbTYW4jh5rRDtJxL6P+S6Wlw1TAO6iTkkjnzDtWCDrjBmXeEXfWT6l8zh2Zqg09zuhVJseXE4W0tDyyEhAcPQ/JXiELDe6U1BJjr7f2QKThRs1bLPxxmtSw2sryn65m4x4KJG6nelhwez6y9esFbpEHr/JALij/hETg4McnRKtQJgfqUsaQzm4lF81s6uyeejvAp+VN9eHuxAxLXkgIjYA9LxsYsvOvuhh23enimai1nMaTwqqtlFaQi4F7yrSzK/I3HBdRZEEy0AtubyTlVAyFIkYr/ENGjt663WFuqcQ6UIdgQpoo/pOqg+4D6OpgjZ9fz+oLTNkvunmpjSSam7OmiQGRA4TynPovsFp3Q6GDxsjFDfqbL/5e9m+XI2hsKX17EHn+j4EqaklChRbtUitlXbwxbXbrsHCfsyZFf312T60yFZMExSqFHF8RWYpfPsq1c7HnyDJv7n04rPOqsL1O+eaCJAfOHy1XkLMwM5+FFtsy3H1YucJnk2hkhS0qxf1oZ3N8jqwqxHhSUUGBbAKIzwSZgUVnC2TOyFX0Hu8oQrMM53QzPo+Xdq974mgWx1+Ebi5/ksecC8Y9DNJBsvA4rBpeQAbyLdxIN8URJGz0AznEXuK97JLVR8c9BABRTt0te639I9Nj/R2Bv9pBPIKZCIHKSB0vOXYseOSUp4jSEa1iyrKUr/9YJRKeKbBvWlHPS4+Yv4Nkwd4yAcjfp7OALsX1oBo4hYMMusbU+JNHG42tsG5t0rFrajudO3qa7CL3fwpWX82ATmLFpD3vETeo1NGkE9IVdSlQNg3IgUQzMrBgnROWuXPsMLCKbUP0bbzOzanUNB+JSTwdhOPUOKuhfqPHtcpj4jQpktPx6lE4Wd1vM7f6YtYuPfrR+rsQn0NGA7Kl0l6+ccwPNByXe17fepSZHNCEUkDKZFKlXUVXXYJeQDveplzN1ChtbUQQmrO9CqGx2yRgMLWkF+xKEPYtxlijpzTC6HFMiPjXpVAVJV1m36xyADeT3v3L6fHckQRHymPrLu6GBJ/y21p0eQcctivZVzq2Mssw3rVpKSHeKpj1UX97GdePTd9h7ZY/6DkCH+x2kKfNeZCtZlUaJ6+H25BVj4lHcFqWeJYoFO24Kc4PUtucmkqpINbZRA98lLmwKchaKMT6d0ebz/q3c6ogBorjr7FQN1l5I5Oq6YMbB2lpfypTy79CoKgDYulDakw+nyvBRjxp5oEL+64yHGvL/YtZUDsiZmWVr8up4y4VEEgkDIL6uGOToep6dpAp4PZV8r/qbfBluXBc0VY9mVfTUmrz0M1NB3nMqn1mXwYZRkV/9fqlt4+qkDe5gFWWMvTotoZbyvCJxS6nOOTYvrVw9NXc2iyRLNHHZsgl5vb1k0icGk2jQ4nv1nTyA+PuPWMQw7iRD/FeqSA8nWPNg97HTHYCSaF3ow2QmkIATxh4lk5giI8vFDV/3WN8XwSXwHBjDvqiNyjj3usHZsFRwMoTAbpeTRMeAU1cWY13NJp4zHNfanhwSs5y3hOdCmTMJJ/jcmauyztuMRjqiDh9YxOYB8iD/YJnQTcdIKJcSyxzKAo6fTSsqvxJr5F1Vy2eJoAhFLv3v0EPArSoo4tG1nLHvUfHKtbXgLSdGLriHj2VZ2l0tDvVEzULlm5JRrxZVqPVGB9fc2ynDTJdrrMeSX/545Ugha0bvG7HNvxOSgd+GqWJXUv7i7FoMGY1cZrkGf1uh4qzhZS0SrF3zmF6wr1rwgG2/co5zxh28z7O+VAWmXTli4BYC9Yd1zQDWm3PHVZAxlVwIBuWuhzkzzvB2Dvig643iFBZnKcKTZnemU6S/ggBFVxKlvZKr/mDZojk+EsYaFcvJysuQbKQhwN/BOAcWC19y9x6D0ZgyPhIrvW2jVqzLXsxlnRkPTpk4PhI5F4xqTkeiIig1iZA0vmvBareqMiOoAl1Q9Ky5DnyY9Uix/nWYVjPJ535gTxsXkUC7b82FKgxCnc7emr6koVGewl63TWWACG5upxgcgh9HABIMohoZB/umOXY2qflQngxZkmEw8vI+cxXWR1N6LPNKyiG9SiQSjX7Lm60JW+rk5kF8CxWpGDmHBUsTQU7fuhYNuqwXiTZbsCqKAoh2uBIyk7lZOLchLZE2vziFdUGuZpZ8RFvaP12AJWjwPM0SR5EOgag2USq/C9BT4/uUrWOaeAQzFBsmHfjE4trTArLksl28QlSNHvt6JydH1013xhkuuh7u3lVmC1Iyg+32xt48A+fKFOotmrKrWOLXFZEiPFGEeD6uN/GzUaJ9Ghj/dOV2d+ozEV60HE/EVgYovF2Bu7qEnITJ4dzJ3pHvwlvwHsvfqr+xzsDpHUl9kfgAQqXpPm9s9bpo6RpIONjTPnWIBC6JpdxvNYpHusf13RU3U9V6fWuwF/wMLbj7ch2tcyrsxMdIpbb46vi+ViuRzpTbVNDAElhVixLfnpVTqG0qySUHKi+8VvDySqBIqvr9N5MHJO29wbnqiKN6del9iti89tDlYsEX8TveLlt/LDYJ8LEonTsxjZyxMfit4mYhRsWWJbkfzGGR9DELB3L1lwM7YBXqzB4swi9YB6EZbSCcNGNj6sExzkvup1Ipo+RJ8nVYcsa/W0ukOL/NvbkvWFaQi8YVv8a8EPjZM2CwA4pueLZevV7p8on6i4//DS30ZPCPO0qIm6qXHFLMy4yluiBV1fKCArrNFXq1mFfD+N+N9C2hDnklPmh9nH/HoGMiEsePeoDq7q8nmtRs6NHrtAqgVcpygptd/eooExVwLXIntyqI8uh49EXxxMy5kirIli/sfUZvVYl4UptCIEUEMGCBvF8eZeEOHMUPkSb81wi/ZFBjLKcX2wMySQho7rrGuBEBZDyJgDmJfUcg65shAUhnyHAC72QPu8Ldk4oSnlJfCxlfvdj5s/O7667PdP/EKdo/RtZR2Ub5gN9YNrreNuaE/MldxjXRBhtk7FZmwHwEgZfzNVVJZkRq9RU/hdS3ex6z+ZggY5WcNVNZ0Gj96SeMKorbVHb+cABBVRRGzqiG/dUiwqpI1brh01kJjiS+l2hfUZ0axD2TvE/BeUramqoFq09YVKIeicBKvGGGKiOtBClAFTExIuQCsg7UkbTcUwhx8cy+3LGdGt5MkbWkSIuenZn4bK5mi+zv14MtL3aaCjRSRu5UdNSqft58wOxsHmhm96BDtBUzkwOYkuAvdai0/B2gEIt87e1jE9IKoX7RJAOGYx/n7r2lqwp3IWViIO9FOkxYor19ZDQCFH6UQMT6VATfJ9//7wQYvmxB6rkDJvr7Sq+3cYW3V1l1MzBZuAnjJmLdGUJchFUcB3IZQ9a0+cWTK7ZcJ3L0uz7rf/zJxcB9PbRIVO9cgQGW1RqfznEuNlD4VFxOmDS4fVS3MG3gp07+QyM+oxxM2U/0DQWzcbIgkv7CDZNj3kD1cOwyyK4XXg3ut5rMvJTBwHhDZHvOzx3ZdYYIXsPZHGqLJWbHwH50zfBgKRASSdXeQF82ruqT9BmiwbmrJteXLWVt6MX+KYPnU7ktR4yKHgcXDnpLbKuoJRofRMj9EjjbSCFoY7nYNwP0zDzIET4bEBBZccg1ESKK7Qc7VUNUFeaUI7aDVuocUjYa6w42ynuZDxBbd7xX/DqPZ2UeXsGL5f9fheL90p67X7rC7xOMz1XkOzMBRw8cgGnCWiQLcNbqIw36RKrdQc/0WU2oZP4slZ4o/ifkSh/OlkOv5K9YszENotZVMLca5uCUU+Q2rJe9jtdPxSqIQjpJGIm2Wd3IA/wC50ilY47bTQ1eVbwExrZO2yucM3MiuVbI3Z6BnAGcncnIJQIleYgJvOPHgoww0/oYOsOfCqkFRSfhDJEPeMTagD8Bq6KzPkH31Q/6yriEdbsgEIISJEaoWnyoW6h32Rg1PplrmAYJaoMK6w0pzRX2v0O8ycfluyAVv1efvnM6pcQuRk4UcLhy5IyvljGMrb6b0YkQm/UMSBoEAbSx3kR1VysfSBJ2yj6viEHHZiEXMZnfrPZZNOIlEa0DRXRh1CCtf7KzzjbbR36KgJdAFsq6uuVBgEsym7jywmJLPriteEcpB1yF6cF/xRv9ycmuljhNH4AH5REogiqnmjgvPnbPJRp7QgChO2WhDp4NMy4QfYH2l/gW/0jhe8S7qvfbgE4PuPUBC2bQUTG+/1EtEDoK7yLSKgpOa2mwX/hX0EMEmitrhy6GckbsEJ0P2FUJVSw0DneRpcI4z0k3oBl+86hsRz4X0NjnoRs1zqA3xsY2LADStx7mMS/Jxu5CeWnIiBZtZOpMjnYANjgCoV8Db02ni7e8AShyJgl3WaIEBZeXEt7ygbc+PoEudlU69rTULnbAQQj1DqwNySqev44rWiWRhjFJ1vG7mRAS7/y6cxH5cxJOPm+SVACyq4q8i+D5mRNJzd5uh+aVHH4gvt0Jcp3EybVKSXrppQIb2l5QRCJV3bx8caNTpeL3VPnPvkN2NCzzZq7BepiyxGmzETxCSngOToGWWbekvQAu54E/t87G3IL8p8/N6LEmASRVln6gkBfOv+dJihCaKmoOMX43dNZghb0ZL3Gs/GtwzeB99LMLtk5Og8BXE8kAlBF3VIFYMmA6VGqT3tQhSu/3myEvegcyp5QUuPsF06fn9pY3yMk8R+zqqJ4l2Ez7Q6QQiFtfzZ0Xw8RblWvT6pscs3AijObP4ptE9h86lKzgl05kgCsisCwlVg/1iGpxS5EawWADmPVfWWcGAtps9kFW2mMEoXiv0u3Xha8hbt+/GD3KJB06E45l6z7NRRRjT/nizc99ihjKDqgFRI/sVjt1wGfLHfDap2o+8bNu7tDV7gti2caed8FpyTtTPhweGyAX0OmZUYIBhKz0o6YQdxtV+axrN8lOOpUzTUuQHwTk7670GFZrc5XMdjR5442WMQNPvzevTL14b5F5jivdJgplsDPB3l1kiAfFtvqFFMaLChUrqm43fCyupxPTXsGr8a6cT/6mCb2YZ2IsFR8WAilka1h+MoRDxgvxvJHzLhWvpKVfWd+avtFNCOkHreMKVfr6TMaOYudi08GhmEt138Dt2Rl0yYi6rHE7gt9Lms+/vhVUnNoAxT4e1sbzWKSdWntiQd0wjzSsZy+l0a+tlR4S43LCp40f5CW0N1a/VL4CLTQ7BefJKsBpWjtg8yN+JvBfgO/u20ZiPC3wX6rbFRbecArAYu59iTrUFmSQX7oAxUVsZCz7sorCvIADX5PGPURz8D+IhMWuMYPM/Eji66qJrFkaoAOe8yDTHBCQf3y6Verxdji/PKK+Oh+xqW/LiVeisnfwlzbsiTV7aPDH/Hme2mNjljs+jDE2o1LtGtJsk2sZNMwEEJTUUbm7AoQREjbOS5tc8BFn5UlJmi8dOGLF2S++B+z4mbkJU5dSwBqAe7vEA9OnyYKvcqV3jtRsEtoEUwV8kY6J2zSvqaOuCMSHxUNVmraQ+j9wcEDsO7lZQbRJA0ejU78JtPDIcRdmBSm+xnXaLJOC95y0bFclC0Sot0RL5u5us7xhLdtzdkiAZYG4iMe9BQyVczfTgB8MeD4sw/FzTTGnAtuCTvRepnVlHB3Pl7B3ftaaSaFPVMBiD7BUmaV5afh2j0UmFyUjZqK1sIB0fx/hHSrAZ2qRcwhHi5Yev9cdAZQFFix5cjVSw/Cn8+ysvFz5Mwy3e5zoj/ExFYPnL7yxtXC1HfXAZsTUkcdypBmQdPir0VZ8f4jF9Zq3aVUDPDGFg0d4emVA7VFSOgqQF/oD5R1mt4oB88v20YXF6gvxwEjQWhD0yrbkUAMSU88NZvM4s4+zqBol4xusom78qfsNHPNJ2rZMYNoBd2nlh3TAmgQs9QsmDoiHYdIhcHSTS6fd3zxfb9DBLNIbmesc7z3XzBx2ZUmbFUfL+KRVN/BZjYldYDqpkBUk104bKnZEinh8OQhGktzoqudSKz3/Ez24J/6sI/cGe0ieGq5CKSMpFKcIzWARTtlUe8os4Focj7N6QClNh/T+W8rmyFrrxsapIz1w3qkn6rEqdSQujiHZvcwYnOgYxCFVA4cOPCtuoatm3O9OAwvmV7gFv68dvYfxWO9AnI6iNyrRMBkLj1gZ61Q7ouKCpYeoyAQ4+crv0ZL/rr/5LsTuAcQ71mK9f3p457vkw4TJkFJIxv2A9b0uliTIGycrriaDN1qQGRK4tqOVMELyvKilE8CVhnDa8R9CHY3IQXhZ6EWy1W8XaNYc8fa/bTPMdSo1VJyQPM5QgupyOOXK1IFPrfSzKYC+8M1wVL22WXDEnjknqB7FQjYfxpIs4lFXMwUHcTKAInZZKulAX2m2pw5907WOH4E+Ob9rsZiCvxYikBe/G60d1BJtQWdXrh23w5PBjyEOr4hVCRwYP4i6aSyjgozmy9ue++4LeK34sjbvNo1v3hlklRo5kh6IhZzwpTuB83kVf+w516/I4GU8/AvGCJgFr2XC+v0UwfdQFUfY7pUBYhId/hZBolr0oci7qOBVkj74bktXq3LIpPsxvki8xZussdkoWvROG4BknVYzHdVPyHz9XZT90Ybm0OB+NCMgP/zD8noo5xLfu+X1DQ14F7/38kBPNQUabahenasx+LWGpSMUMHG+TyiJtVhyGwvZed0gwhzl0r9shftMu1O+h1k62cM1kRIIL73yJHzHJf6vIecIPI2jOvaDs89e/mKu7HGQDTJBit4pzaQkD6RYQ/OW5WNtZmup7j/6JDWYDsntwYNiopleXW1n6CVd6co33c2MFt29OwS0d8z9jpqdyYlS0DJ1bCkcvet06ipaqeu35yAGmcUELxuTeHSdVEUp019YX5h4jSBpJWWe1q6/CeRiSlhL4pElwbekYXNpemS2IVLK8CceUhFJdGZIJmZoyaovoRJKvyvXwpIyUGZQjnzq44jVsLMRl0Fy9jWpnghemFZRydhnK31EssthDfaYtkxtMWZkS9BFaXWWzBg6E/Oapb22u5crukpTg0enPULiEpzpDoJtju3Fvr7m0F8AiVDoxMawyRg+WvW5xDZHC/jX8wZiJl3sOjULQWFOFiUUfyFF1SluZNEk+fHH4Zj6Ydv+cT/tGnIQ9mSgWI2ft6JS8p8BhLns5hui7aS37yU/TIZ+uZEAn6HkQlCQCxTAF7qzNyP/4+FzEv0CIezk+IrK/Tviuc715Lg5aEmw9efbGmnxDtjBCRO+fvqrp/D/bEXvmoET/mSACGos3YohvYGXBbV6n8fRPNkBx9bfP6eUYNnPyOZCMLaGA5XJDG+/vtCfxDR/4KtPQNhPTCNRVyv5yQW8WvUhOfRMMeXxVA+GNRq5En/ZwSCgCNwh3ys9qAsOPF0wXg8TsWtFlTyUYmXuH9adCj0TT5CHZ1KcXkPePwmEcWHvj8dEWjjp1zatmgfFVuIu+Ka1WUKoKYwNU2Kpuq/uK7ODUkRSAsxlHUs6kRmPPXeZJvtlEywpw+CQ14KwtlJPKaTSGnn9dQMdpV92EJCU7hkKnMbj2O4I6haE1wtaSnDN52mKSKnuO86Vp2CIo8O9OWkfZ/VW9P9lWnvXJ1HdNJq2Ics3FloEwtMi4DhboPnIXgHMZh9Jq8IG6E5T4RRoeANdkvzHOWCkC4fWi8CP0yL9UNcQfKTsMXSCgrUlTJQb8wzLcUBmFzylkKzxvC+iTkKtkVZHThVoYs3OQPNQs1rf9evEvYD6LMjteMPF1/uAz1BZRvDjv4cl4jgFWcPm9EvyyYh9z5Z7bQjH9ruPiZdFB1tMw41GByVcSOnHwhV7WQz2HO1SmkrtVCrVCkcKUVcnuaBdCSbcQvOo8+dsFT2jIDAz2dKDu0LFSAJOwGW/V3UX9xkX43agrGL1bYb3ToK+Tgxiv0UlGlvOcqbqO+sKCBlknPqK9lOr09z9YooL12PxqjOyyGxVqkuCBUPnGdMw4dltxeLAdfE61u2kCimP4R+aRpSZkU7iWAluCm+d/jzA5urHoXz8M7thPIfTGXvpNiF9R/LD/sGVcEhD87jLJauBrWRDqPXHXGU3ECNm8FZvr7Hn/AFQQoWSkLl4gxingCSutO1gT6X9se9K5Yyb4KWZW2nd1iWd0Hn6o8i7s+Isa6rI8xOlA5ShNzuXLrgXQ9OwpdaYHXBxJwf6as9X1kJ1cB80Ze5QkLgoV24nFVcVI/w/kORwaN2BMrv+k4ttMP7jMOqbrGOji+9WzAEYjyzYm/HkEyLtOxnwTp6q48RTIDzKfwr9lF4gy1opRMgRm946SpZ/mV+JW2c3YA2iogBwpGCtalIZu62BIknCxzfC/+WUE4E6grg8Yc1T7f1I21aTsShiLi19NnL66miI0SPZI9mIYLZKgvdn0XibNNz/Rha5K/xPOBU1+foHco/gl75PlPCzm8ZSoKP6a8x89Tks/JZYh9i6ZlyQo5CbeM46ZmwiH9mW2ior8ghV7jqpt+pNIx5QX7fOpFSqT3MabrVlbSEFRAGYvhpG9lph+/Quoet0SvHCi4aH0I2Bj1xMz7333kvGvYAMVFJfRvHGSGHINd9UC9k8WaoGjNDaXNF5LSc3xFxi9qdcYQk7ukFtLL/HuzRqL6xdqJO1xWzQVUhTZ8sCVkW8UxSOhKZEUjVu35i9xTlPJCrDiE1B17hdede66IUDzPhDN+WZgXrGawBTYfST+zzgQ2tURMQq+yTk5+aG7u0mg+WpDTY+xEfLSGjF9ZMpkDsIymZkaDpnluKG/sw5b8NALlEf1OcY8V63qTi3Pl8o/CvrY1BZ71fHnpthjmtJcztiUJe34YEsJpyoCF+04J5OeL1uO74mPQCXm7Db9Q59H/cvODxOlgsj4RQoq75f3Di0OJ1bq/V5CnBhKOMj5H/w2Q2DKfoRyzTUPXU7nli77G4fZxUyXJwjk1ecxpc0eYngQnlZi9UUS+6dpJzbwhr85lEHlTdUiYoTxyKYgPXAVqfp4ohMZ0Mc4/GVEZlHGcNgpRoJLAKUIEWR3vyJLk+e5zRCKS6fRfgBv/Vnk6mla0baZjLPflzJicvmVd1o4I7zrO8a/In/IKm2631IKroiaP+gpsroDOJVv0A/jYi+rgF6ziy8UksBk4kSk/HPhSt262NEXxCBgCxkKZLxe1PuBVTaCMSaWRstGp8y+0+IoURH2AsfDeaUO3pLj7tvbdjfKcS4o94d+ZMQogWc74KUc3ruRzI1jVkjxmvRXBK/mlHlC0byrcFok2Wa0XuP8F48z0jAnvFjzMVDyPz3cm31BsY8BY1bqkSEyXh2FGcrCiCS0VK73RbbBFMpS3iek7Jzxpqc/IjGQgkxSqY09VgunKk9mWJMxQriVPIFoUbdmS8+sfAy0LYlDOCet4Wrh+jVkFL7zUJ6+rJ2gbrN/Qgs5DtX/Wym02ULs7k2JBcgj4f0Vf0nizRBtZrbOHZVuhMST0bVanCDYvHMw1U2GIZbcmLLqDmWqWt0jTykRVSb8yKStfoAx7byuyVMleGu/fiitT0JQkaojC6/TSSbtL3fGkX9iYrj51Pl67Am2yqJyKlZlEjT8yfBk/rCc2YAqmmD2Nf6ULcGIJwMu5vIYPRRxEsCsz2YJQ9y2lu3BgG/AJ8CU6ukuBrT8MrME+wsHZScMSWsTMW04S5QJ6GopV9K/FPGN5r1J6tXdmlY6CI3r2ZcQkdr01YJmohmSn/3QL0wu0YyDh9tSm/mEzHarfCSN08teiJOziTApa6XspCwrWrjTK8jYrmwUdmmdbJ/1Dxs+yN+1p2EhUEbRC7O2wBoyoMkUZehIrj9eIyESLYy3w+xQtVKTDVoWbj7n2G7rb65zpNlCuenU5ALc73Y04e9HjFQ/3Lv0C/U65PHihyaJwLQmdEaqAbtRJSLykAkd2E4v6YAH8T5tJtfqpyfKM5abOrulwzV8kogx49V+FPTxj/8SMvGG5Ne4cQYuO9lOV42GBeR6wWFjbzpvr7fn56tid/XO6BnGWa1Jzl8CcEX1+sDWfTSt8jdd6bDsIjoJ5JGdqkOx9m9LtR9vtWdHNRK1DA8m7FPJtoo4Umjc0Ie0CY6PTkX4zLmFQXTkuQX3OxH3Qpqb+tXWl52GOCrXcSnwKOsCyNB5F53zvKJKxepM266HYEhOAhQqqEiLXNk5sIyzU6qBsyOUyorDiXyYdCKibB0Yc/sy9EsJ+MR7ZX7G6VtDeT4C7UEBOy3dKVPTa6JBayge75dZ1Lr+3b//v3lVqdkhyrpJ5oj6AWUJFw1OmrTF2dWKHaDeZL/Umfz9JSYLwnh0fXQQ771xZZSmCHAyWM8QOKcoainsg48aFOEWghqUG+NPXGnnff7zICeDTzDYUn3Yh0aGEWdjz93vtOho+dEfoWvGbwke+XC4NCLA+Vik4CPWtraU5LLUVni90dgxx4mTCedjFss2SfjE5b3TDlCKFOpJAUrNawtQf5Fni5W97sotSl6jKkfvBD7Fcxcw5OtTe7WRok2Pm10U+bIa0sc3hQb8uKfmihK7bLgCXHdjEHvUzuq5a0awN+5tBpOx5oOrYTw8Xc+z6XRc2isiovNUIl81VJChRxfFN04djP4Z/XT/7kvy89rtHTzJnY0F1dQj4rKj4O5Y75i20XczMteT8YM2KcVe9kAfUtSmCtexCQEkiSmYWeo6Szw5lSES8suil0lRFZ7p0DCnby40lBz/7kAISlZiSw9O/D9Eq5dpM9REfhKZM7dz/D2wRiSnnVknkvPyErSFK9AfIwSv1HXF8flba9qp1h/eQ4Cu96HMKSXuLACdqC6C3oTQav9GXIUcaPWLKAZDuhTWA1Pt/CiLJEv++5abN4OjgjZgiQYE2DvhlD8OHyhuSgUPn8wMSP63cdu0WAssVA9w/9UZuS66jka8bizurBX4Udd3gMOLXZkQBDC0Q7PP6oglyVO18kK2nlreXC1P5OMng0qcmRxoJW0p/jfSz9gCyl07R8tW52XlqL1Rl/7u+8AWCR377Pg0+FkaMXPmfA1ZNCKB6QVU/WTS4ZXJNmfaZBxNwVuz6q+gFDTs4fJ6a9d35Rno9D2BegIoMpaX5XRwURG1mTcIxzyNvPW1snznKgdLQ/5ZXVYFhB9DCxmMA4euQlIm+SHR9bweNhcLrsu4eH/W6N0NFOgWMKI2zx6qW93t9B9aELDr6BWllBcG+OuD+dFKi7u6FPcJVy3zKPoeHRTr0hJNa3GvgmJWsXSHEA0JYz0XIjojhvgF2jLF9Qp8KkDYSCFNzTmcfJF9ishn6V6HKqiw6yIuqWuwwHQdnw8CS8SYejUNCTfxDKUmq8VC+SLWGNRG3qVErVSW0UmWMdpMQv42u7Xl2GrRpSKdptXgz2tUsVjp46XcADHx9xsrWy3qgAY5diked2m/ufeJEJXJYCEQuMXsCh+eMgh4CIX/orRhdtznxOfybakfZHZwu2/q7yjfKA93EUkqwUBmyfhaBlPc+bA9r+q/7+PEm3JKvRXP3/tc3MCqGB0AHhKbpOTSVhLzRHxhmPcHfU17k4G3rpLc2SJURFGqxIZIfF0Z55ucHHG0j4xaQiqxhseuSJLqogvvE68RSvk6tD5PcWRd7nWs1GMLLMgMqkrYErn18PE1Yk/2Xe5uN+dyygmWcc6JcKnmKrOxnoPlBQmcvHCGEqkwJJoV8uvU3e7NLF620akRjEHMpv/eI0aREZnr+anSxWqvBEpE/JF9TcufpVvkOA5fzM2fo3ocOtQu4KiXmbaBbd0CLE75CukmIG5aUYQXy5IacPhqr3hE73WK23hD3GtNU7fIMiiF3/9VGk3/3iHN0O/sBN2/AEY41K+OOcaBAdmsHEfXD3ZEjh8t89otzHZ79ciPJ2VimFKrwev7Ou02/Tn84LLem8Fg2hybKv80KAEPt8XxNnHxsXwms9dmWD3SRDsXMuQMmQF+dpFCJXZWa4TLaJbwyNax3LGR6oNPAk89zmnb4jF5BPeiwUlM0YhVNJP3F0FV0zmOvDXmoFvFsa8a4Oe1w+V+v2VM7XNkVlh75IVn5Np3/j0DoIXydXzoJRDKBfHLBLlrLWKsCiaTenFj+3x6wK+17aBJ1JxtwzKnDyB8rOkElwt43tX/GeSWyY16O3gHvPe7b9sA41JoP4eZJeUCcXYnLjfgAndMXmWkqgYnQ6FEQ925WA0SVF9B10nfyCvA0wa/NgQgelsT/vgfddbEieB8+tdhm0f0qhJsggtOPD+bBTJ2cqarHBNx7P1dqBoej57xZpWOKVQ+Y6FBIV69Qgb40Vn6tw08tAGWGNdGz9Pe2wv/o9G4fBz82hY01uyVSwRCbcdqFp3fauIpOkIZXlB3IyMOYYVXpoEfqBzOA0u1OKwt02QuM1A2UINAkOiJRVYHBE0jSQ+Cfxv1S3OPbXb0BQ1FJNqFglr/SxLlhQxHWyLcO/kaR6KDuV45AyTBNW4BaDffhYpR+rrkMfK44zrdCfxDbuHcxh2fEGMrfs2NVwgYSMYrgFL0JA4F4CsI4xTdC5/m75fqr72S6X9ZOiVGtn/JBwsEj7WLszay/rS96tu1szV9p7HhG2YhNErLJe6B3KP8xT7xmMKVYmLoT8XtDSLEB2tUsrKk1mBQR94PBy95hW3ZQ5KGh37x9JvexvzUoPY7ikPNsH2m1qSQE+Fma51B88gUXJHQ2Y0boWpd0la3AI65mctLB4tKpf+58SKZ5jog1iI6RyY7BfVHX1Uk2ydZEMoaVICablEVY+/Wh2yXGI9ZDvxTk4GVH9sqzmjB3szNVEv1b73kASiMvLzQzVx/LVY2upplE0/RQBffqNb4m/7UPVGZUY1J8BXRDDKsvaNAEs8y1LMD1mW5VW06oFiL0uJEfrOBDq4bu6OD+XORrvGq8x1NEVxDKS4LF/ooe64RUM9R3hyRR1S3xYFJrwQGZiNogEFTyiU+J0G/B8tz4gOpNDMsnp4PdgeAoE7XTyN685BWgdyd+ojmMUdiKkZ8SMhabLJPnCFPq2U3kJt48aoROttKZkhch3TjzJVXHVGAiSb4WKyK+gBRuBwq2p0cgblAlPrWAmh+0VJ7DFujTkAMS5P42rL7ODJQTVcnvRiVfpWV8idAvO4TKl2mG5RLVQtpy7SG7ia8af7daOmZD8N1sr0fRsRADsJ/40HVUYap/tM51Nwg+T5toFDOGvZ4aO541jrkSt51bZi6P0VLFHTNPfLYXrYIlYLDre1o02Fxsev6JYh8ibiILQJ+XjT6ZP6crb2NZ5UxwaoBIDBXTGmoDpNMW4f65ND71ttPmx68IlTLiJ6Vrfv8Zeir5soaEsCCRfWOBUhFtVs6p8OY0jW2YkFwdKSB96omDfhvAsqowDkfrhYjUWWRuMJTx/IHb5OL2Gloyom/d7HYG7feDEik9X7XUB7HKf7DBQEkzK5mjPW33kXHOY+RwHeYrRlhaaAi/PrEqqamCkwGKwuSKSD7FA/5QLOtseDl25b2QZ1TLEk7R5DvNj/ODHuXfdU8CsrFJHE/4sHRqwZGjnkhP1SWpZC1DNvhUDHFTdF7o1t0lMkyM5WYFF7Y4vJImD4lsCw9UeJcNCsm4tGoPnSzY4+0JujbWX9+awp6GGwUT98yVC9uW5abAIX0FZ5Q0kU0RLKirPWv4V6y89Hz0MNp0sPHCM15JOtVhmExnLqoIEqo4StBp//AOYZ3+j6zgk1eq62dldF8f1FczFCdpzmNWq38gzLZQzExFUHSD3GkTziomkSYfhZKNNYE7pivrvaSWPnAAk9J5dDlhvXstiunsqPB157VB2UfiMiwm+iPmj7uA8ZpzjTYq3lEU59LbiTqt3jHesaKaR9UB7N7YFhvDJEZuFw4QXPo9+LRK2eB+peNvJvVR6NV0mbMh7J4W/U+vp9SQ23NA730tHiq7RmapdJ7B+0VbNfDdrJnUdI9uEymsduXqTO5LyUfKm/9B/z1zHIHNe8Bf9N6k0jsJ1sVnROlbdjNI6LXBe6iuYrN330QbxUp4qir6e8jyir83wE8C16U4Ere9njsKXZGb/tEQBJK6IX+c5UTkIerxWX5WI0lXRHQODO2s2AS3RB2C+L05eRe1a+tR7qWvSSBB8h/gvq7Qu2nxUEn7OCkwkOT4MH610NN+fW95QRZ4izKjG4zAiFMFU440yCL9iiieNMIJ+1XNArP4XTwwfGodUGV1blVbia33f17MA9rLn+j5RfryPTNe/YpXns3497tuv9BiAn+350SfaEQZrZc/DV9C2aVSWU5AlvrXZHwj8LegbJdSd3dG7ElN3ayTGrCx7mWM3cA8NBazOAHgbF08Y/T9j9xvMx6MIRiR7M5LFGFKIUEa7M77V47ee22VFcvN9L593QC43899/N+kKZfHKusg5jYE9o0kLDf0eDOqJzoMnWlvwE5bzR32osqRBDJazJB/wQH+3GOw+GAOY1UPA7TPt6TX0N33ZdiaFs93NnIW+OJjre9V2xzOI33kGkzpovEJnLxO6LWc6CnIAq78sdLJgstwq5pO2N5/Vx7LqtV4uru0eWd2z3Bks6mRfVzGdHcTdn+Gf7VmSE0VqUbZcvggHTSjyq24uP8tq7/L+jDlVTBrIBMurCuSsVGo2IMJaRRZLDk6eisCC6h7ybOR4CP1ttI/jFKTZ+AEnGH471IzPI3M4gTZmEOM9beru6QYgfuOHxLVNCquhglqBeYn3Y5+LWNkJbUeI2qXg7vswmrdZLohealOuMZ9vVnbqkFL8BDN1l78VjGl7wahD1eXlvcx3jNc5GNHPWdd212pP1HGoY50EGbhg5Y/FsXKcsxACeY0JA88azH39Mw+YOQNKwdqB4ElUajcxXORUzTEGhRgdpIlTO1e9NeI/9d5G6FHnMxXP3cvkoVDEABbgIUFzIlnc34OT8QDyYQJJxaP82+JtqgoAmM6u+rAIneG9C9ZO8G2yFK9grgI/CtQeSiiX92iAdg2EeeO+BLTwRcef2Zaoho384fY8fFlHNXkNB7gHNE1CZH8yErVDYrdCV6CP4lUIVxkXQQ7G8V0iTUHThlLXpMJKHjpqZx94uCghncpdyuX3Zh2I0kiaSwHSNc8SCr5f70PDvlDACaZKElJsH5iFz6en2kfs+9E5OgqbwuNxjvydnSbiYY1anZjyfGkflaqIchcQakQnUncjBtjmv7YZtjITAcExIfEgKZAEhLoELgRY37j4WR22Lit7CrolFAlke/yJS5yjCGaNC1/IS0MzBFVcF7R2/Y5GgqVgA0683qjOscKOa600Cz20nvNSkEkeAzFjH8YyTLRxVpP09v7kdkcGJGOiBjp+PMbnqTJq1OCOhv9dW5eUavqJZfRoUDEZMCpeNnZf2pnLuTJadcVgD5q6OUUS+21wABhJMBp6sCXfekF7HEZ/sCAAAAAARZWg=="

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        # We don't want a KeyboardInterrupt throwing a
        # traceback into stdout.
        pass
