diff --git a/kmymoney/plugins/kbanking/gwenkdegui.cpp b/kmymoney/plugins/kbanking/gwenkdegui.cpp index 7959ceb9a..5c0468873 100644 --- a/kmymoney/plugins/kbanking/gwenkdegui.cpp +++ b/kmymoney/plugins/kbanking/gwenkdegui.cpp @@ -1,156 +1,237 @@ /* * A gwenhywfar gui for aqbanking using KDE widgets * Copyright 2014 - 2016 Christian David * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License or (at your option) version 3 or any later version * accepted by the membership of KDE e.V. (or its successor approved * by the membership of KDE e.V.), which shall act as a proxy * defined in Section 14 of version 3 of the license. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include "gwenkdegui.h" #include #include #include #include #include #include #include "widgets/chiptandialog.h" +#include "widgets/phototandialog.h" + + +#define KBANKING_TANMETHOD_TEXT 0x00000001 +#define KBANKING_TANMETHOD_CHIPTAN 0x00000002 +#define KBANKING_TANMETHOD_CHIPTAN_OPTIC 0x00000003 +#define KBANKING_TANMETHOD_CHIPTAN_USB 0x00000004 +#define KBANKING_TANMETHOD_CHIPTAN_QR 0x00000005 +#define KBANKING_TANMETHOD_PHOTOTAN 0x00000006 + gwenKdeGui::gwenKdeGui() : QT5_Gui() { } gwenKdeGui::~gwenKdeGui() { } int gwenKdeGui::getPasswordText(uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, GWEN_GUI_PASSWORD_METHOD methodId, GWEN_DB_NODE *methodParams, uint32_t guiid) { return QT5_Gui::getPassword(flags, token, title, text, buffer, minLen, maxLen, methodId, methodParams, guiid); } int gwenKdeGui::getPasswordHhd(uint32_t /*flags*/, const char * /*token*/, const char * /*title*/, const char *text, char *buffer, int minLen, int maxLen, GWEN_GUI_PASSWORD_METHOD /*methodId*/, GWEN_DB_NODE *methodParams, uint32_t /*guiid*/) { QString hhdCode; QString infoText; const char *sChallenge; sChallenge=GWEN_DB_GetCharValue(methodParams, "challenge", 0, NULL); if (! (sChallenge && *sChallenge)) { DBG_ERROR(0, "Empty optical data"); return GWEN_ERROR_NO_DATA; } hhdCode = QString::fromUtf8(sChallenge); infoText = QString::fromUtf8(text); //! @todo: Memory leak? QPointer dialog = new chipTanDialog(getParentWidget()); dialog->setInfoText(infoText); dialog->setHhdCode(hhdCode); dialog->setTanLimits(minLen, maxLen); const int rv = dialog->exec(); if (rv == chipTanDialog::Rejected) return GWEN_ERROR_USER_ABORTED; else if (rv == chipTanDialog::InternalError || dialog.isNull()) return GWEN_ERROR_INTERNAL; QString tan = dialog->tan(); if (tan.length() >= minLen && tan.length() <= maxLen) { strncpy(buffer, tan.toUtf8().constData() , tan.length()); buffer[tan.length()] = 0; return 0; } qDebug("Received Tan with incorrect length by ui."); return GWEN_ERROR_INTERNAL; } +int gwenKdeGui::getPasswordPhoto(uint32_t /*flags*/, + const char * /*token*/, + const char * /*title*/, + const char *text, + char *buffer, + int minLen, + int maxLen, + GWEN_GUI_PASSWORD_METHOD /*methodId*/, + GWEN_DB_NODE *methodParams, + uint32_t /*guiid*/) { + QPixmap picture; + QString infoText; + const uchar * pictureData; + unsigned int pictureDataSize; + + pictureData = (const uchar *)GWEN_DB_GetBinValue(methodParams, "imageData", 0, NULL, 0, &pictureDataSize); + if (! (pictureData && pictureDataSize > 0)) { + DBG_ERROR(0, "Empty optical data"); + return GWEN_ERROR_NO_DATA; + } + + bool loadSuccessful = picture.loadFromData(pictureData, pictureDataSize); + if (! loadSuccessful) { + DBG_ERROR(0, "Unable to read tan picture from image data"); + return GWEN_ERROR_NO_DATA; + } + + infoText = QString::fromUtf8(text); + + //! @todo: Memory leak? + QPointer dialog = new photoTanDialog(getParentWidget()); + dialog->setInfoText(infoText); + dialog->setPicture(picture); + dialog->setTanLimits(minLen, maxLen); + + const int rv = dialog->exec(); + + if (rv == photoTanDialog::Rejected) + return GWEN_ERROR_USER_ABORTED; + else if (rv == photoTanDialog::InternalError || dialog.isNull()) + return GWEN_ERROR_INTERNAL; + + QString tan = dialog->tan(); + if (tan.length() >= minLen && tan.length() <= maxLen) { + strncpy(buffer, tan.toUtf8().constData() , tan.length()); + buffer[tan.length()] = 0; + return 0; + } + qDebug("Received Tan with incorrect length by ui."); + return GWEN_ERROR_INTERNAL; +} + + + int gwenKdeGui::getPassword(uint32_t flags, const char* token, const char* title, const char* text, char* buffer, int minLen, int maxLen, GWEN_GUI_PASSWORD_METHOD methodId, GWEN_DB_NODE *methodParams, uint32_t guiid) { switch( (methodId & GWEN_Gui_PasswordMethod_Mask)) { case GWEN_Gui_PasswordMethod_Unknown: case GWEN_Gui_PasswordMethod_Mask: DBG_ERROR(0, "Invalid password method id %08x", methodId); return GWEN_ERROR_INVALID; case GWEN_Gui_PasswordMethod_Text: return getPasswordText(flags, token, title, text, buffer, minLen, maxLen, methodId, methodParams, guiid); case GWEN_Gui_PasswordMethod_OpticalHHD: - return getPasswordHhd(flags, - token, - title, - text, - buffer, - minLen, - maxLen, - methodId, methodParams, - guiid); + int tanMethodId = GWEN_DB_GetIntValue(methodParams, "tanMethodId", 0, 0); + switch(tanMethodId) { + case KBANKING_TANMETHOD_CHIPTAN_OPTIC: + return getPasswordHhd(flags, + token, + title, + text, + buffer, + minLen, + maxLen, + methodId, methodParams, + guiid); + case KBANKING_TANMETHOD_PHOTOTAN: + return getPasswordPhoto(flags, + token, + title, + text, + buffer, + minLen, + maxLen, + methodId, methodParams, + guiid); + default: + DBG_ERROR(0, "Unknown tan method ID %i", tanMethodId); + return GWEN_ERROR_NO_DATA; + } /* intentionally omit "default:" here to be informed when new password methods are added to * gwen which have not been implemented. */ } DBG_ERROR(0, "Unhandled password method id %08x", methodId); return GWEN_ERROR_INVALID; } diff --git a/kmymoney/plugins/kbanking/gwenkdegui.h b/kmymoney/plugins/kbanking/gwenkdegui.h index d53af2822..6d21dd5a8 100644 --- a/kmymoney/plugins/kbanking/gwenkdegui.h +++ b/kmymoney/plugins/kbanking/gwenkdegui.h @@ -1,117 +1,126 @@ /* * A gwenhywfar gui for aqbanking using KDE widgets * Copyright 2014 - 2016 Christian David * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License or (at your option) version 3 or any later version * accepted by the membership of KDE e.V. (or its successor approved * by the membership of KDE e.V.), which shall act as a proxy * defined in Section 14 of version 3 of the license. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #ifndef GWENKDEGUI_H #define GWENKDEGUI_H #include #include "gwen-gui-qt5/qt5_gui.hpp" /** * @brief Gwenhywfar Gui by KDE * * * @author Christian David */ class gwenKdeGui : public QT5_Gui { public: gwenKdeGui(); ~gwenKdeGui(); int getPassword(uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, GWEN_GUI_PASSWORD_METHOD methodId, GWEN_DB_NODE *methodParams, uint32_t guiid) final override; private: int getPasswordText(uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, GWEN_GUI_PASSWORD_METHOD methodId, GWEN_DB_NODE *methodParams, uint32_t guiid); int getPasswordHhd(uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, GWEN_GUI_PASSWORD_METHOD methodId, GWEN_DB_NODE *methodParams, uint32_t guiid); - + int getPasswordPhoto(uint32_t flags, + const char *token, + const char *title, + const char *text, + char *buffer, + int minLen, + int maxLen, + GWEN_GUI_PASSWORD_METHOD methodId, + GWEN_DB_NODE *methodParams, + uint32_t guiid); }; /** * @brief Helper class which is receiver for several signals */ class gwenKdeGuiTanResult : public QObject { Q_OBJECT public: explicit gwenKdeGuiTanResult(QObject* parent = nullptr) : QObject(parent), m_tan(QString()), m_aborted(false) {} ~gwenKdeGuiTanResult() {} QString tan() { return m_tan; } bool aborted() { return m_aborted; } public Q_SLOTS: void abort() { m_aborted = true; } void acceptTan(QString tan) { m_tan = tan; m_aborted = false; } private: QString m_tan; bool m_aborted; }; #endif // GWENKDEGUI_H diff --git a/kmymoney/plugins/kbanking/kbanking.cpp b/kmymoney/plugins/kbanking/kbanking.cpp index 1629b86b7..bfff8b4f8 100644 --- a/kmymoney/plugins/kbanking/kbanking.cpp +++ b/kmymoney/plugins/kbanking/kbanking.cpp @@ -1,1518 +1,1534 @@ /* * Copyright 2004 Martin Preuss aquamaniac@users.sourceforge.net * Copyright 2009 Cristian Onet onet.cristian@gmail.com * Copyright 2010-2019 Thomas Baumgart tbaumgart@kde.org * Copyright 2015 Christian David christian-david@web.de * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include "kbanking.h" #include // ---------------------------------------------------------------------------- // QT Includes #include #include #include #include #include #include #include #include #include //! @todo remove @c #include // ---------------------------------------------------------------------------- // KDE Includes #include #include #include #include #include #include #include #include #include #include #include #include // ---------------------------------------------------------------------------- // Library Includes #include #include #include #include #include #include #include #include #include #include // ---------------------------------------------------------------------------- // Project Includes #include "mymoney/onlinejob.h" #include "kbaccountsettings.h" #include "kbmapaccount.h" #include "mymoneyfile.h" #include "onlinejobadministration.h" #include "kmymoneyview.h" #include "kbpickstartdate.h" #include "mymoneyinstitution.h" #include "mymoneyexception.h" #include "gwenkdegui.h" #include "gwenhywfarqtoperators.h" #include "aqbankingkmmoperators.h" #include "mymoneystatement.h" #include "statementinterface.h" #include "viewinterface.h" #ifdef KMM_DEBUG -// Added an option to open the chipTanDialog from the menu for debugging purposes #include "chiptandialog.h" +#include "phototandialog.h" + +#include "phototan-demo.cpp" #endif #ifdef IS_APPIMAGE #include #include #endif class KBanking::Private { public: Private() : passwordCacheTimer(nullptr), jobList(), fileId() { QString gwenProxy = QString::fromLocal8Bit(qgetenv("GWEN_PROXY")); if (gwenProxy.isEmpty()) { std::unique_ptr cfg = std::unique_ptr(new KConfig("kioslaverc")); QRegExp exp("(\\w+://)?([^/]{2}.+:\\d+)"); QString proxy; KConfigGroup grp = cfg->group("Proxy Settings"); int type = grp.readEntry("ProxyType", 0); switch (type) { case 0: // no proxy break; case 1: // manual specified proxy = grp.readEntry("httpsProxy"); qDebug("KDE https proxy setting is '%s'", qPrintable(proxy)); if (exp.exactMatch(proxy)) { proxy = exp.cap(2); qDebug("Setting GWEN_PROXY to '%s'", qPrintable(proxy)); if (!qputenv("GWEN_PROXY", qPrintable(proxy))) { qDebug("Unable to setup GWEN_PROXY"); } } break; default: // other currently not supported qDebug("KDE proxy setting of type %d not supported", type); break; } } } QString libVersion(void (*version)(int*, int*, int*, int*)) { int major, minor, patch, build; version(&major, &minor, &patch, &build); return QString("%1.%2.%3.%4").arg(major).arg(minor).arg(patch).arg(build); } /** * KMyMoney asks for accounts over and over again which causes a lot of "Job not supported with this account" error messages. * This function filters messages with that string. */ static int gwenLogHook(GWEN_GUI* gui, const char* domain, GWEN_LOGGER_LEVEL level, const char* message) { Q_UNUSED(gui); Q_UNUSED(domain); Q_UNUSED(level); const char* messageToFilter = "Job not supported with this account"; if (strstr(message, messageToFilter) != 0) return 1; return 0; } QTimer *passwordCacheTimer; QMap jobList; QString fileId; }; KBanking::KBanking(QObject *parent, const QVariantList &args) : OnlinePluginExtended(parent, "kbanking") , d(new Private) , m_configAction(nullptr) , m_importAction(nullptr) , m_kbanking(nullptr) , m_accountSettings(nullptr) , m_statementCount(0) { Q_UNUSED(args) QString compileVersionSet = QLatin1String(GWENHYWFAR_VERSION_FULL_STRING "/" AQBANKING_VERSION_FULL_STRING); QString runtimeVersionSet = QString("%1/%2").arg(d->libVersion(&GWEN_Version), d->libVersion(&AB_Banking_GetVersion)); qDebug() << QString("Plugins: kbanking loaded, build with (%1), run with (%2)").arg(compileVersionSet, runtimeVersionSet); } KBanking::~KBanking() { delete d; qDebug("Plugins: kbanking unloaded"); } void KBanking::plug() { const auto componentName = QLatin1String("kbanking"); const auto rcFileName = QLatin1String("kbanking.rc"); m_kbanking = new KBankingExt(this, "KMyMoney"); d->passwordCacheTimer = new QTimer(this); d->passwordCacheTimer->setSingleShot(true); d->passwordCacheTimer->setInterval(60000); connect(d->passwordCacheTimer, &QTimer::timeout, this, &KBanking::slotClearPasswordCache); if (m_kbanking) { //! @todo when is gwenKdeGui deleted? gwenKdeGui *gui = new gwenKdeGui(); GWEN_Gui_SetGui(gui->getCInterface()); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); if (m_kbanking->init() == 0) { // Tell the host application to load my GUI component setComponentName(componentName, "KBanking"); #ifdef IS_APPIMAGE const QString rcFilePath = QCoreApplication::applicationDirPath() + QLatin1String("/../share/kxmlgui5/") + componentName + QLatin1Char('/') + rcFileName; setXMLFile(rcFilePath); const QString localRcFilePath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).first() + QLatin1Char('/') + componentName + QLatin1Char('/') + rcFileName; setLocalXMLFile(localRcFilePath); #else setXMLFile(rcFileName); #endif // get certificate handling and dialog settings management AB_Gui_Extend(gui->getCInterface(), m_kbanking->getCInterface()); // create actions createActions(); // load protocol conversion list loadProtocolConversion(); GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Gui_SetLogHookFn(GWEN_Gui_GetGui(), &KBanking::Private::gwenLogHook); } else { qWarning("Could not initialize KBanking online banking interface"); delete m_kbanking; m_kbanking = 0; } } } void KBanking::unplug() { d->passwordCacheTimer->deleteLater(); if (m_kbanking) { m_kbanking->fini(); delete m_kbanking; qDebug("Plugins: kbanking unplugged"); } } void KBanking::loadProtocolConversion() { if (m_kbanking) { m_protocolConversionMap = { {"aqhbci", "HBCI"}, {"aqofxconnect", "OFX"}, {"aqyellownet", "YellowNet"}, {"aqgeldkarte", "Geldkarte"}, {"aqdtaus", "DTAUS"} }; } } void KBanking::protocols(QStringList& protocolList) const { if (m_kbanking) { std::list list = m_kbanking->getActiveProviders(); std::list::iterator it; for (it = list.begin(); it != list.end(); ++it) { // skip the dummy if (*it == "aqnone") continue; QMap::const_iterator it_m; it_m = m_protocolConversionMap.find((*it).c_str()); if (it_m != m_protocolConversionMap.end()) protocolList << (*it_m); else protocolList << (*it).c_str(); } } } QWidget* KBanking::accountConfigTab(const MyMoneyAccount& acc, QString& name) { const MyMoneyKeyValueContainer& kvp = acc.onlineBankingSettings(); name = i18n("Online settings"); if (m_kbanking) { m_accountSettings = new KBAccountSettings(acc, 0); m_accountSettings->loadUi(kvp); return m_accountSettings; } QLabel* label = new QLabel(i18n("KBanking module not correctly initialized"), 0); label->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter); return label; } MyMoneyKeyValueContainer KBanking::onlineBankingSettings(const MyMoneyKeyValueContainer& current) { MyMoneyKeyValueContainer kvp(current); kvp["provider"] = objectName().toLower(); if (m_accountSettings) { m_accountSettings->loadKvp(kvp); } return kvp; } void KBanking::createActions() { QAction *settings_aqbanking = actionCollection()->addAction("settings_aqbanking"); settings_aqbanking->setText(i18n("Configure Aq&Banking...")); connect(settings_aqbanking, &QAction::triggered, this, &KBanking::slotSettings); QAction *file_import_aqbanking = actionCollection()->addAction("file_import_aqbanking"); file_import_aqbanking->setText(i18n("AqBanking importer...")); connect(file_import_aqbanking, &QAction::triggered, this, &KBanking::slotImport); Q_CHECK_PTR(viewInterface()); connect(viewInterface(), &KMyMoneyPlugin::ViewInterface::viewStateChanged, action("file_import_aqbanking"), &QAction::setEnabled); #ifdef KMM_DEBUG QAction *openChipTanDialog = actionCollection()->addAction("open_chiptan_dialog"); openChipTanDialog->setText("Open ChipTan Dialog"); connect(openChipTanDialog, &QAction::triggered, [&](){ auto dlg = new chipTanDialog(); dlg->setHhdCode("0F04871100030333555414312C32331D"); dlg->setInfoText("

Test Graphic for debugging

The encoded data is

Account Number: 335554
Amount: 1,23

"); connect(dlg, &QDialog::accepted, dlg, &chipTanDialog::deleteLater); connect(dlg, &QDialog::rejected, dlg, &chipTanDialog::deleteLater); dlg->show(); }); + + QAction *openPhotoTanDialog = actionCollection()->addAction("open_phototan_dialog"); + openPhotoTanDialog->setText("Open PhotoTan Dialog"); + connect(openPhotoTanDialog, &QAction::triggered, [&](){ + auto dlg = new photoTanDialog(); + QImage img; + img.loadFromData(photoTan, sizeof(photoTan), "PNG"); + img = img.scaled(300, 300, Qt::KeepAspectRatio); + dlg->setPicture(QPixmap::fromImage(img)); + dlg->setInfoText("

Test Graphic for debugging

The encoded data is

unknown

"); + connect(dlg, &QDialog::accepted, dlg, &chipTanDialog::deleteLater); + connect(dlg, &QDialog::rejected, dlg, &chipTanDialog::deleteLater); + dlg->show(); + }); #endif } void KBanking::slotSettings() { if (m_kbanking) { GWEN_DIALOG* dlg = AB_Banking_CreateSetupDialog(m_kbanking->getCInterface()); if (dlg == NULL) { DBG_ERROR(0, "Could not create setup dialog."); return; } if (GWEN_Gui_ExecDialog(dlg, 0) == 0) { DBG_ERROR(0, "Aborted by user"); GWEN_Dialog_free(dlg); return; } GWEN_Dialog_free(dlg); } } bool KBanking::mapAccount(const MyMoneyAccount& acc, MyMoneyKeyValueContainer& settings) { bool rc = false; if (m_kbanking && !acc.id().isEmpty()) { m_kbanking->askMapAccount(acc); // at this point, the account should be mapped // so we search it and setup the account reference in the KMyMoney object AB_ACCOUNT_SPEC* ab_acc; ab_acc = aqbAccount(acc); if (ab_acc) { MyMoneyAccount a(acc); setupAccountReference(a, ab_acc); settings = a.onlineBankingSettings(); rc = true; } } return rc; } AB_ACCOUNT_SPEC* KBanking::aqbAccount(const MyMoneyAccount& acc) const { if (m_kbanking == 0) { return 0; } // certainly looking for an expense or income account does not make sense at this point // so we better get out right away if (acc.isIncomeExpense()) { return 0; } AB_ACCOUNT_SPEC *ab_acc = AB_Banking_GetAccountSpecByAlias(m_kbanking->getCInterface(), m_kbanking->mappingId(acc).toUtf8().data()); // if the account is not found, we temporarily scan for the 'old' mapping (the one w/o the file id) // in case we find it, we setup the new mapping in addition on the fly. if (!ab_acc && acc.isAssetLiability()) { ab_acc = AB_Banking_GetAccountSpecByAlias(m_kbanking->getCInterface(), acc.id().toUtf8().data()); if (ab_acc) { qDebug("Found old mapping for '%s' but not new. Setup new mapping", qPrintable(acc.name())); m_kbanking->setAccountAlias(ab_acc, m_kbanking->mappingId(acc).toUtf8().constData()); // TODO at some point in time, we should remove the old mapping } } return ab_acc; } AB_ACCOUNT_SPEC* KBanking::aqbAccount(const QString& accountId) const { MyMoneyAccount account = MyMoneyFile::instance()->account(accountId); return aqbAccount(account); } QString KBanking::stripLeadingZeroes(const QString& s) const { QString rc(s); QRegExp exp("^(0*)([^0].*)"); if (exp.exactMatch(s)) { rc = exp.cap(2); } return rc; } void KBanking::setupAccountReference(const MyMoneyAccount& acc, AB_ACCOUNT_SPEC* ab_acc) { MyMoneyKeyValueContainer kvp; if (ab_acc) { QString accountNumber = stripLeadingZeroes(AB_AccountSpec_GetAccountNumber(ab_acc)); QString routingNumber = stripLeadingZeroes(AB_AccountSpec_GetBankCode(ab_acc)); QString val = QString("%1-%2").arg(routingNumber, accountNumber); if (val != acc.onlineBankingSettings().value("kbanking-acc-ref")) { kvp.clear(); // make sure to keep our own previous settings const QMap& vals = acc.onlineBankingSettings().pairs(); QMap::const_iterator it_p; for (it_p = vals.begin(); it_p != vals.end(); ++it_p) { if (QString(it_p.key()).startsWith("kbanking-")) { kvp.setValue(it_p.key(), *it_p); } } kvp.setValue("kbanking-acc-ref", val); kvp.setValue("provider", objectName().toLower()); setAccountOnlineParameters(acc, kvp); } } else { // clear the connection setAccountOnlineParameters(acc, kvp); } } bool KBanking::accountIsMapped(const MyMoneyAccount& acc) { return aqbAccount(acc) != 0; } bool KBanking::updateAccount(const MyMoneyAccount& acc) { return updateAccount(acc, false); } bool KBanking::updateAccount(const MyMoneyAccount& acc, bool moreAccounts) { if (!m_kbanking) return false; bool rc = false; if (!acc.id().isEmpty()) { AB_TRANSACTION *job = 0; int rv; /* get AqBanking account */ AB_ACCOUNT_SPEC *ba = aqbAccount(acc); // Update the connection between the KMyMoney account and the AqBanking equivalent. // If the account is not found anymore ba == 0 and the connection is removed. setupAccountReference(acc, ba); if (!ba) { KMessageBox::error(0, i18n("" "The given application account %1 " "has not been mapped to an online " "account." "", acc.name()), i18n("Account Not Mapped")); } else { bool enqueJob = true; if (acc.onlineBankingSettings().value("kbanking-txn-download") != "no") { /* create getTransactions job */ if (AB_AccountSpec_GetTransactionLimitsForCommand(ba, AB_Transaction_CommandGetTransactions)) { /* there are transaction limits for this job, so it is allowed */ job = AB_Transaction_new(); AB_Transaction_SetUniqueAccountId(job, AB_AccountSpec_GetUniqueId(ba)); AB_Transaction_SetCommand(job, AB_Transaction_CommandGetTransactions); } if (job) { int days = 0 /* TODO in AqBanking AB_JobGetTransactions_GetMaxStoreDays(job)*/; QDate qd; if (days > 0) { GWEN_DATE *dt; dt=GWEN_Date_CurrentDate(); GWEN_Date_SubDays(dt, days); qd = QDate(GWEN_Date_GetYear(dt), GWEN_Date_GetMonth(dt), GWEN_Date_GetDay(dt)); GWEN_Date_free(dt); } // get last statement request date from application account object // and start from a few days before if the date is valid QDate lastUpdate = QDate::fromString(acc.value("lastImportedTransactionDate"), Qt::ISODate); if (lastUpdate.isValid()) lastUpdate = lastUpdate.addDays(-3); int dateOption = acc.onlineBankingSettings().value("kbanking-statementDate").toInt(); switch (dateOption) { case 0: // Ask user break; case 1: // No date qd = QDate(); break; case 2: // Last download qd = lastUpdate; break; case 3: // First possible // qd is already setup break; } // the pick start date option dialog is needed in // case the dateOption is 0 or the date option is > 1 // and the qd is invalid if (dateOption == 0 || (dateOption > 1 && !qd.isValid())) { QPointer psd = new KBPickStartDate(m_kbanking, qd, lastUpdate, acc.name(), lastUpdate.isValid() ? 2 : 3, 0, true); if (psd->exec() == QDialog::Accepted) { qd = psd->date(); } else { enqueJob = false; } delete psd; } if (enqueJob) { if (qd.isValid()) { GWEN_DATE *dt; dt=GWEN_Date_fromGregorian(qd.year(), qd.month(), qd.day()); AB_Transaction_SetFirstDate(job, dt); GWEN_Date_free(dt); } rv = m_kbanking->enqueueJob(job); if (rv) { DBG_ERROR(0, "Error %d", rv); KMessageBox::error(0, i18n("" "Could not enqueue the job.\n" ""), i18n("Error")); } } AB_Transaction_free(job); } } if (enqueJob) { /* create getBalance job */ if (AB_AccountSpec_GetTransactionLimitsForCommand(ba, AB_Transaction_CommandGetBalance)) { /* there are transaction limits for this job, so it is allowed */ job = AB_Transaction_new(); AB_Transaction_SetUniqueAccountId(job, AB_AccountSpec_GetUniqueId(ba)); AB_Transaction_SetCommand(job, AB_Transaction_CommandGetBalance); rv = m_kbanking->enqueueJob(job); AB_Transaction_free(job); if (rv) { DBG_ERROR(0, "Error %d", rv); KMessageBox::error(0, i18n("" "Could not enqueue the job.\n" ""), i18n("Error")); } else { rc = true; emit queueChanged(); } } } } } // make sure we have at least one job in the queue before sending it if (!moreAccounts && m_kbanking->getEnqueuedJobs().size() > 0) executeQueue(); return rc; } void KBanking::executeQueue() { if (m_kbanking && m_kbanking->getEnqueuedJobs().size() > 0) { AB_IMEXPORTER_CONTEXT *ctx; ctx = AB_ImExporterContext_new(); int rv = m_kbanking->executeQueue(ctx); if (!rv) { m_kbanking->importContext(ctx, 0); } else { DBG_ERROR(0, "Error: %d", rv); } AB_ImExporterContext_free(ctx); } } /** @todo improve error handling, e.g. by adding a .isValid to nationalTransfer * @todo use new onlineJob system */ void KBanking::sendOnlineJob(QList& jobs) { Q_CHECK_PTR(m_kbanking); m_onlineJobQueue.clear(); QList unhandledJobs; if (!jobs.isEmpty()) { foreach (onlineJob job, jobs) { if (sepaOnlineTransfer::name() == job.task()->taskName()) { onlineJobTyped typedJob(job); enqueTransaction(typedJob); job = typedJob; } else { job.addJobMessage(onlineJobMessage(eMyMoney::OnlineJob::MessageType::Error, "KBanking", "Cannot handle this request")); unhandledJobs.append(job); } m_onlineJobQueue.insert(m_kbanking->mappingId(job), job); } executeQueue(); } jobs = m_onlineJobQueue.values() + unhandledJobs; m_onlineJobQueue.clear(); } QStringList KBanking::availableJobs(QString accountId) { try { MyMoneyAccount acc = MyMoneyFile::instance()->account(accountId); QString id = MyMoneyFile::instance()->value("kmm-id"); if(id != d->fileId) { d->jobList.clear(); d->fileId = id; } } catch (const MyMoneyException &) { // Exception usually means account was not found return QStringList(); } if(d->jobList.contains(accountId)) { return d->jobList[accountId]; } QStringList list; AB_ACCOUNT_SPEC* abAccount = aqbAccount(accountId); if (!abAccount) { return list; } // Check availableJobs // sepa transfer if (AB_AccountSpec_GetTransactionLimitsForCommand(abAccount, AB_Transaction_CommandSepaTransfer)) { list.append(sepaOnlineTransfer::name()); } d->jobList[accountId] = list; return list; } /** @brief experimenting with QScopedPointer and aqBanking pointers */ class QScopedPointerAbJobDeleter { public: static void cleanup(AB_TRANSACTION* job) { AB_Transaction_free(job); } }; /** @brief experimenting with QScopedPointer and aqBanking pointers */ class QScopedPointerAbAccountDeleter { public: static void cleanup(AB_ACCOUNT_SPEC* account) { AB_AccountSpec_free(account); } }; IonlineTaskSettings::ptr KBanking::settings(QString accountId, QString taskName) { AB_ACCOUNT_SPEC* abAcc = aqbAccount(accountId); if (abAcc == 0) return IonlineTaskSettings::ptr(); if (sepaOnlineTransfer::name() == taskName) { // Get limits for sepaonlinetransfer const AB_TRANSACTION_LIMITS *limits=AB_AccountSpec_GetTransactionLimitsForCommand(abAcc, AB_Transaction_CommandSepaTransfer); if (limits==NULL) return IonlineTaskSettings::ptr(); return AB_TransactionLimits_toSepaOnlineTaskSettings(limits).dynamicCast(); } return IonlineTaskSettings::ptr(); } bool KBanking::enqueTransaction(onlineJobTyped& job) { /* get AqBanking account */ const QString accId = job.constTask()->responsibleAccount(); AB_ACCOUNT_SPEC *abAccount = aqbAccount(accId); if (!abAccount) { job.addJobMessage(onlineJobMessage(eMyMoney::OnlineJob::MessageType::Warning, "KBanking", i18n("" "The given application account %1 " "has not been mapped to an online " "account." "", MyMoneyFile::instance()->account(accId).name()))); return false; } //setupAccountReference(acc, ba); // needed? if (AB_AccountSpec_GetTransactionLimitsForCommand(abAccount, AB_Transaction_CommandSepaTransfer)==NULL) { qDebug("AB_ERROR_OFFSET is %i", AB_ERROR_OFFSET); job.addJobMessage(onlineJobMessage(eMyMoney::OnlineJob::MessageType::Error, "AqBanking", QString("Sepa credit transfers for account \"%1\" are not available.").arg(MyMoneyFile::instance()->account(accId).name()) ) ); return false; } AB_TRANSACTION *abJob = AB_Transaction_new(); /* command */ AB_Transaction_SetCommand(abJob, AB_Transaction_CommandSepaTransfer); // Origin Account AB_Transaction_SetUniqueAccountId(abJob, AB_AccountSpec_GetUniqueId(abAccount)); // Recipient payeeIdentifiers::ibanBic beneficiaryAcc = job.constTask()->beneficiaryTyped(); AB_Transaction_SetRemoteName(abJob, beneficiaryAcc.ownerName().toUtf8().constData()); AB_Transaction_SetRemoteIban(abJob, beneficiaryAcc.electronicIban().toUtf8().constData()); AB_Transaction_SetRemoteBic(abJob, beneficiaryAcc.fullStoredBic().toUtf8().constData()); // Origin Account AB_Transaction_SetLocalAccount(abJob, abAccount); // Purpose AB_Transaction_SetPurpose(abJob, job.constTask()->purpose().toUtf8().constData()); // Reference // AqBanking duplicates the string. This should be safe. AB_Transaction_SetEndToEndReference(abJob, job.constTask()->endToEndReference().toUtf8().constData()); // Other Fields AB_Transaction_SetTextKey(abJob, job.constTask()->textKey()); AB_Transaction_SetValue(abJob, AB_Value_fromMyMoneyMoney(job.constTask()->value())); /** @todo LOW remove Debug info */ AB_Transaction_SetStringIdForApplication(abJob, m_kbanking->mappingId(job).toUtf8().constData()); qDebug() << "Enqueue: " << m_kbanking->enqueueJob(abJob); AB_Transaction_free(abJob); //delete localAcc; return true; } void KBanking::startPasswordTimer() { if (d->passwordCacheTimer->isActive()) d->passwordCacheTimer->stop(); d->passwordCacheTimer->start(); } void KBanking::slotClearPasswordCache() { m_kbanking->clearPasswordCache(); } void KBanking::slotImport() { m_statementCount = 0; statementInterface()->resetMessages(); if (!m_kbanking->interactiveImport()) qWarning("Error on import dialog"); else statementInterface()->showMessages(m_statementCount); } bool KBanking::importStatement(const MyMoneyStatement& s) { m_statementCount++; return !statementInterface()->import(s).isEmpty(); } MyMoneyAccount KBanking::account(const QString& key, const QString& value) const { return statementInterface()->account(key, value); } void KBanking::setAccountOnlineParameters(const MyMoneyAccount& acc, const MyMoneyKeyValueContainer& kvps) const { return statementInterface()->setAccountOnlineParameters(acc, kvps); } KBankingExt::KBankingExt(KBanking* parent, const char* appname, const char* fname) : AB_Banking(appname, fname) , m_parent(parent) , _jobQueue(0) { m_sepaKeywords = {QString::fromUtf8("SEPA-BASISLASTSCHRIFT"), QString::fromUtf8("SEPA-ÜBERWEISUNG")}; QRegularExpression exp("(\\d+\\.\\d+\\.\\d+).*"); QRegularExpressionMatch match = exp.match(KAboutData::applicationData().version()); QByteArray regkey; const char *p = "\x08\x0f\x41\x0f\x58\x5b\x56\x4a\x09\x7b\x40\x0e\x5f\x2a\x56\x3f\x0e\x7f\x3f\x7d\x5b\x56\x56\x4b\x0a\x4d"; const char* q = appname; while (*p) { regkey += (*q++ ^ *p++) & 0xff; if (!*q) q = appname; } registerFinTs(regkey.data(), match.captured(1).remove(QLatin1Char('.')).left(5).toLatin1()); } int KBankingExt::init() { int rv = AB_Banking::init(); if (rv < 0) return rv; _jobQueue = AB_Transaction_List2_new(); return 0; } int KBankingExt::fini() { if (_jobQueue) { AB_Transaction_List2_freeAll(_jobQueue); _jobQueue = 0; } return AB_Banking::fini(); } int KBankingExt::executeQueue(AB_IMEXPORTER_CONTEXT *ctx) { m_parent->startPasswordTimer(); int rv = AB_Banking::executeJobs(_jobQueue, ctx); if (rv != 0) { qDebug() << "Sending queue by aqbanking got error no " << rv; } /** check result of each job */ AB_TRANSACTION_LIST2_ITERATOR* jobIter = AB_Transaction_List2_First(_jobQueue); if (jobIter) { AB_TRANSACTION* abJob = AB_Transaction_List2Iterator_Data(jobIter); while (abJob) { const char *stringIdForApp=AB_Transaction_GetStringIdForApplication(abJob); if (!(stringIdForApp && *stringIdForApp)) { qWarning("Executed AB_Job without KMyMoney id"); abJob = AB_Transaction_List2Iterator_Next(jobIter); continue; } QString jobIdent = QString::fromUtf8(stringIdForApp); onlineJob job = m_parent->m_onlineJobQueue.value(jobIdent); if (job.isNull()) { // It should not be possible that this will happen (only if AqBanking fails heavily). //! @todo correct exception text qWarning("Executed a job which was not in queue. Please inform the KMyMoney developers."); abJob = AB_Transaction_List2Iterator_Next(jobIter); continue; } AB_TRANSACTION_STATUS abStatus = AB_Transaction_GetStatus(abJob); if (abStatus == AB_Transaction_StatusSent || abStatus == AB_Transaction_StatusPending || abStatus == AB_Transaction_StatusAccepted || abStatus == AB_Transaction_StatusRejected || abStatus == AB_Transaction_StatusError || abStatus == AB_Transaction_StatusUnknown) job.setJobSend(); if (abStatus == AB_Transaction_StatusAccepted) job.setBankAnswer(eMyMoney::OnlineJob::sendingState::acceptedByBank); else if (abStatus == AB_Transaction_StatusError || abStatus == AB_Transaction_StatusRejected || abStatus == AB_Transaction_StatusUnknown) job.setBankAnswer(eMyMoney::OnlineJob::sendingState::sendingError); job.addJobMessage(onlineJobMessage(eMyMoney::OnlineJob::MessageType::Debug, "KBanking", "Job was processed")); m_parent->m_onlineJobQueue.insert(jobIdent, job); abJob = AB_Transaction_List2Iterator_Next(jobIter); } AB_Transaction_List2Iterator_free(jobIter); } AB_TRANSACTION_LIST2 *oldQ = _jobQueue; _jobQueue = AB_Transaction_List2_new(); AB_Transaction_List2_freeAll(oldQ); emit m_parent->queueChanged(); m_parent->startPasswordTimer(); return rv; } void KBankingExt::clearPasswordCache() { /* clear password DB */ GWEN_Gui_SetPasswordStatus(NULL, NULL, GWEN_Gui_PasswordStatus_Remove, 0); } std::list KBankingExt::getEnqueuedJobs() { AB_TRANSACTION_LIST2 *ll; std::list rl; ll = _jobQueue; if (ll && AB_Transaction_List2_GetSize(ll)) { AB_TRANSACTION *j; AB_TRANSACTION_LIST2_ITERATOR *it; it = AB_Transaction_List2_First(ll); assert(it); j = AB_Transaction_List2Iterator_Data(it); assert(j); while (j) { rl.push_back(j); j = AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } return rl; } int KBankingExt::enqueueJob(AB_TRANSACTION *j) { assert(_jobQueue); assert(j); AB_Transaction_Attach(j); AB_Transaction_List2_PushBack(_jobQueue, j); return 0; } int KBankingExt::dequeueJob(AB_TRANSACTION *j) { assert(_jobQueue); AB_Transaction_List2_Remove(_jobQueue, j); AB_Transaction_free(j); emit m_parent->queueChanged(); return 0; } void KBankingExt::transfer() { //m_parent->transfer(); } bool KBankingExt::askMapAccount(const MyMoneyAccount& acc) { MyMoneyFile* file = MyMoneyFile::instance(); QString bankId; QString accountId; // extract some information about the bank. if we have a sortcode // (BLZ) we display it, otherwise the name is enough. try { const MyMoneyInstitution &bank = file->institution(acc.institutionId()); bankId = bank.name(); if (!bank.sortcode().isEmpty()) bankId = bank.sortcode(); } catch (const MyMoneyException &e) { // no bank assigned, we just leave the field empty } // extract account information. if we have an account number // we show it, otherwise the name will be displayed accountId = acc.number(); if (accountId.isEmpty()) accountId = acc.name(); // do the mapping. the return value of this method is either // true, when the user mapped the account or false, if he // decided to quit the dialog. So not really a great thing // to present some more information. KBMapAccount *w; w = new KBMapAccount(this, bankId.toUtf8().constData(), accountId.toUtf8().constData()); if (w->exec() == QDialog::Accepted) { AB_ACCOUNT_SPEC *a; a = w->getAccount(); assert(a); DBG_NOTICE(0, "Mapping application account \"%s\" to " "online account \"%s/%s\"", qPrintable(acc.name()), AB_AccountSpec_GetBankCode(a), AB_AccountSpec_GetAccountNumber(a)); // TODO remove the following line once we don't need backward compatibility setAccountAlias(a, acc.id().toUtf8().constData()); qDebug("Setup mapping to '%s'", acc.id().toUtf8().constData()); setAccountAlias(a, mappingId(acc).toUtf8().constData()); qDebug("Setup mapping to '%s'", mappingId(acc).toUtf8().constData()); delete w; return true; } delete w; return false; } QString KBankingExt::mappingId(const MyMoneyObject& object) const { QString id = MyMoneyFile::instance()->storageId() + QLatin1Char('-') + object.id(); // AqBanking does not handle the enclosing parens, so we remove it id.remove('{'); id.remove('}'); return id; } bool KBankingExt::interactiveImport() { AB_IMEXPORTER_CONTEXT *ctx; GWEN_DIALOG *dlg; int rv; ctx = AB_ImExporterContext_new(); dlg = AB_Banking_CreateImporterDialog(getCInterface(), ctx, NULL); if (dlg == NULL) { DBG_ERROR(0, "Could not create importer dialog."); AB_ImExporterContext_free(ctx); return false; } rv = GWEN_Gui_ExecDialog(dlg, 0); if (rv == 0) { DBG_ERROR(0, "Aborted by user"); GWEN_Dialog_free(dlg); AB_ImExporterContext_free(ctx); return false; } if (!importContext(ctx, 0)) { DBG_ERROR(0, "Error on importContext"); GWEN_Dialog_free(dlg); AB_ImExporterContext_free(ctx); return false; } GWEN_Dialog_free(dlg); AB_ImExporterContext_free(ctx); return true; } void KBankingExt::_xaToStatement(MyMoneyStatement &ks, const MyMoneyAccount& acc, const AB_TRANSACTION *t) { QString s; QString memo; const char *p; const AB_VALUE *val; const GWEN_DATE *dt; const GWEN_DATE *startDate = 0; MyMoneyStatement::Transaction kt; unsigned long h; kt.m_fees = MyMoneyMoney(); // bank's transaction id p = AB_Transaction_GetFiId(t); if (p) kt.m_strBankID = QString("ID ") + QString::fromUtf8(p); // payee p = AB_Transaction_GetRemoteName(t); if (p) kt.m_strPayee = QString::fromUtf8(p); // memo #if 1 p = AB_Transaction_GetPurpose(t); if (p && *p) { QString tmpMemo; s=QString::fromUtf8(p).trimmed(); tmpMemo=QString::fromUtf8(p).trimmed(); tmpMemo.replace('\n', ' '); memo=tmpMemo; } // in case we have some SEPA fields filled with information // we add them to the memo field p = AB_Transaction_GetEndToEndReference(t); if (p) { s += QString(", EREF: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("EREF: %1").arg(p)); } p = AB_Transaction_GetCustomerReference(t); if (p) { s += QString(", CREF: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("CREF: %1").arg(p)); } p = AB_Transaction_GetMandateId(t); if (p) { s += QString(", MREF: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("MREF: %1").arg(p)); } p = AB_Transaction_GetCreditorSchemeId(t); if (p) { s += QString(", CRED: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("CRED: %1").arg(p)); } p = AB_Transaction_GetOriginatorId(t); if (p) { s += QString(", DEBT: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("DEBT: %1").arg(p)); } #else // The variable 's' contains the old method of extracting // the memo which added a linefeed after each part received // from AqBanking. The new variable 'memo' does not have // this inserted linefeed. We keep the variable 's' to // construct the hash-value to retrieve the reference s.truncate(0); sl = AB_Transaction_GetPurpose(t); if (sl) { GWEN_STRINGLISTENTRY *se; bool insertLineSep = false; se = GWEN_StringList_FirstEntry(sl); while (se) { p = GWEN_StringListEntry_Data(se); assert(p); if (insertLineSep) s += '\n'; insertLineSep = true; s += QString::fromUtf8(p).trimmed(); memo += QString::fromUtf8(p).trimmed(); se = GWEN_StringListEntry_Next(se); } // while // Sparda / Netbank hack: the software these banks use stores // parts of the payee name in the beginning of the purpose field // in case the payee name exceeds the 27 character limit. This is // the case, when one of the strings listed in m_sepaKeywords is part // of the purpose fields but does not start at the beginning. In this // case, the part leading up to the keyword is to be treated as the // tail of the payee. Also, a blank is inserted after the keyword. QSet::const_iterator itk; for (itk = m_sepaKeywords.constBegin(); itk != m_sepaKeywords.constEnd(); ++itk) { int idx = s.indexOf(*itk); if (idx >= 0) { if (idx > 0) { // re-add a possibly removed blank to name if (kt.m_strPayee.length() < 27) kt.m_strPayee += ' '; kt.m_strPayee += s.left(idx); s = s.mid(idx); } s = QString("%1 %2").arg(*itk).arg(s.mid((*itk).length())); // now do the same for 'memo' except for updating the payee idx = memo.indexOf(*itk); if (idx >= 0) { if (idx > 0) { memo = memo.mid(idx); } } memo = QString("%1 %2").arg(*itk).arg(memo.mid((*itk).length())); break; } } // in case we have some SEPA fields filled with information // we add them to the memo field p = AB_Transaction_GetEndToEndReference(t); if (p) { s += QString(", EREF: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("EREF: %1").arg(p)); } p = AB_Transaction_GetCustomerReference(t); if (p) { s += QString(", CREF: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("CREF: %1").arg(p)); } p = AB_Transaction_GetMandateId(t); if (p) { s += QString(", MREF: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("MREF: %1").arg(p)); } p = AB_Transaction_GetCreditorSchemeId(t); if (p) { s += QString(", CRED: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("CRED: %1").arg(p)); } p = AB_Transaction_GetOriginatorId(t); if (p) { s += QString(", DEBT: %1").arg(p); if(memo.length()) memo.append('\n'); memo.append(QString("DEBT: %1").arg(p)); } } #endif const MyMoneyKeyValueContainer& kvp = acc.onlineBankingSettings(); // check if we need the version with or without linebreaks if (kvp.value("kbanking-memo-removelinebreaks").compare(QLatin1String("no"))) { kt.m_strMemo = memo; } else { kt.m_strMemo = s; } // calculate the hash code and start with the payee info // and append the memo field h = MyMoneyTransaction::hash(kt.m_strPayee.trimmed()); h = MyMoneyTransaction::hash(s, h); // see, if we need to extract the payee from the memo field QString rePayee = kvp.value("kbanking-payee-regexp"); if (!rePayee.isEmpty() && kt.m_strPayee.isEmpty()) { QString reMemo = kvp.value("kbanking-memo-regexp"); QStringList exceptions = kvp.value("kbanking-payee-exceptions").split(';', QString::SkipEmptyParts); bool needExtract = true; QStringList::const_iterator it_s; for (it_s = exceptions.constBegin(); needExtract && it_s != exceptions.constEnd(); ++it_s) { QRegExp exp(*it_s, Qt::CaseInsensitive); if (exp.indexIn(kt.m_strMemo) != -1) { needExtract = false; } } if (needExtract) { QRegExp expPayee(rePayee, Qt::CaseInsensitive); QRegExp expMemo(reMemo, Qt::CaseInsensitive); if (expPayee.indexIn(kt.m_strMemo) != -1) { kt.m_strPayee = expPayee.cap(1); if (expMemo.indexIn(kt.m_strMemo) != -1) { kt.m_strMemo = expMemo.cap(1); } } } } kt.m_strPayee = kt.m_strPayee.trimmed(); // date dt = AB_Transaction_GetDate(t); if (!dt) dt = AB_Transaction_GetValutaDate(t); if (dt) { if (!startDate) startDate = dt; /*else { dead code if (GWEN_Time_Diff(ti, startTime) < 0) startTime = ti; }*/ kt.m_datePosted = QDate(GWEN_Date_GetYear(dt), GWEN_Date_GetMonth(dt), GWEN_Date_GetDay(dt)); } else { DBG_WARN(0, "No date for transaction"); } // value val = AB_Transaction_GetValue(t); if (val) { if (ks.m_strCurrency.isEmpty()) { p = AB_Value_GetCurrency(val); if (p) ks.m_strCurrency = p; } else { p = AB_Value_GetCurrency(val); if (p) s = p; if (ks.m_strCurrency.toLower() != s.toLower()) { // TODO: handle currency difference DBG_ERROR(0, "Mixed currencies currently not allowed"); } } kt.m_amount = MyMoneyMoney(AB_Value_GetValueAsDouble(val)); // The initial implementation of this feature was based on // a denominator of 100. Since the denominator might be // different nowadays, we make sure to use 100 for the // duplicate detection QString tmpVal = kt.m_amount.formatMoney(100, false); tmpVal.remove(QRegExp("[,\\.]")); tmpVal += QLatin1String("/100"); h = MyMoneyTransaction::hash(tmpVal, h); } else { DBG_WARN(0, "No value for transaction"); } if (startDate) { QDate d(QDate(GWEN_Date_GetYear(startDate), GWEN_Date_GetMonth(startDate), GWEN_Date_GetDay(startDate))); if (!ks.m_dateBegin.isValid()) ks.m_dateBegin = d; else if (d < ks.m_dateBegin) ks.m_dateBegin = d; if (!ks.m_dateEnd.isValid()) ks.m_dateEnd = d; else if (d > ks.m_dateEnd) ks.m_dateEnd = d; } else { DBG_WARN(0, "No date in current transaction"); } // add information about remote account to memo in case we have something const char *remoteAcc = AB_Transaction_GetRemoteAccountNumber(t); const char *remoteBankCode = AB_Transaction_GetRemoteBankCode(t); if (remoteAcc && remoteBankCode) { kt.m_strMemo += QString("\n%1/%2").arg(remoteBankCode, remoteAcc); } // make hash value unique in case we don't have one already if (kt.m_strBankID.isEmpty()) { QString hashBase; hashBase.sprintf("%s-%07lx", qPrintable(kt.m_datePosted.toString(Qt::ISODate)), h); int idx = 1; QString hash; for (;;) { hash = QString("%1-%2").arg(hashBase).arg(idx); QMap::const_iterator it; it = m_hashMap.constFind(hash); if (it == m_hashMap.constEnd()) { m_hashMap[hash] = true; break; } ++idx; } kt.m_strBankID = QString("%1-%2").arg(acc.id()).arg(hash); } // store transaction ks.m_listTransactions += kt; } bool KBankingExt::importAccountInfo(AB_IMEXPORTER_ACCOUNTINFO *ai, uint32_t /*flags*/) { const char *p; DBG_INFO(0, "Importing account..."); // account number MyMoneyStatement ks; p = AB_ImExporterAccountInfo_GetAccountNumber(ai); if (p) { ks.m_strAccountNumber = m_parent->stripLeadingZeroes(p); } p = AB_ImExporterAccountInfo_GetBankCode(ai); if (p) { ks.m_strRoutingNumber = m_parent->stripLeadingZeroes(p); } MyMoneyAccount kacc; if (!ks.m_strAccountNumber.isEmpty() || !ks.m_strRoutingNumber.isEmpty()) { kacc = m_parent->account("kbanking-acc-ref", QString("%1-%2").arg(ks.m_strRoutingNumber, ks.m_strAccountNumber)); ks.m_accountId = kacc.id(); } // account name p = AB_ImExporterAccountInfo_GetAccountName(ai); if (p) ks.m_strAccountName = p; // account type switch (AB_ImExporterAccountInfo_GetAccountType(ai)) { case AB_AccountType_Bank: ks.m_eType = eMyMoney::Statement::Type::Savings; break; case AB_AccountType_CreditCard: ks.m_eType = eMyMoney::Statement::Type::CreditCard; break; case AB_AccountType_Checking: ks.m_eType = eMyMoney::Statement::Type::Checkings; break; case AB_AccountType_Savings: ks.m_eType = eMyMoney::Statement::Type::Savings; break; case AB_AccountType_Investment: ks.m_eType = eMyMoney::Statement::Type::Investment; break; case AB_AccountType_Cash: default: ks.m_eType = eMyMoney::Statement::Type::None; } // account status const AB_BALANCE *bal = AB_Balance_List_GetLatestByType(AB_ImExporterAccountInfo_GetBalanceList(ai), AB_Balance_TypeBooked); if (!bal) bal = AB_Balance_List_GetLatestByType(AB_ImExporterAccountInfo_GetBalanceList(ai), AB_Balance_TypeNoted); if (bal) { const AB_VALUE* val = AB_Balance_GetValue(bal); if (val) { DBG_INFO(0, "Importing balance"); ks.m_closingBalance = AB_Value_toMyMoneyMoney(val); p = AB_Value_GetCurrency(val); if (p) ks.m_strCurrency = p; } const GWEN_DATE* dt = AB_Balance_GetDate(bal); if (dt) { ks.m_dateEnd = QDate(GWEN_Date_GetYear(dt), GWEN_Date_GetMonth(dt) , GWEN_Date_GetDay(dt)); } else { DBG_WARN(0, "No date for balance"); } } else { DBG_WARN(0, "No account balance"); } // clear hash map m_hashMap.clear(); // get all transactions const AB_TRANSACTION* t = AB_ImExporterAccountInfo_GetFirstTransaction(ai, AB_Transaction_TypeStatement, 0); while (t) { _xaToStatement(ks, kacc, t); t = AB_Transaction_List_FindNextByType(t, AB_Transaction_TypeStatement, 0); } // import them if (!m_parent->importStatement(ks)) { if (KMessageBox::warningYesNo(0, i18n("Error importing statement. Do you want to continue?"), i18n("Critical Error")) == KMessageBox::No) { DBG_ERROR(0, "User aborted"); return false; } } return true; } K_PLUGIN_FACTORY_WITH_JSON(KBankingFactory, "kbanking.json", registerPlugin();) #include "kbanking.moc" diff --git a/kmymoney/plugins/kbanking/kbanking_debug_rc b/kmymoney/plugins/kbanking/kbanking_debug_rc index 07e43b293..3eb4a0dcb 100644 --- a/kmymoney/plugins/kbanking/kbanking_debug_rc +++ b/kmymoney/plugins/kbanking/kbanking_debug_rc @@ -1,4 +1,5 @@ - + + diff --git a/kmymoney/plugins/kbanking/phototan-demo.cpp b/kmymoney/plugins/kbanking/phototan-demo.cpp new file mode 100644 index 000000000..247424491 --- /dev/null +++ b/kmymoney/plugins/kbanking/phototan-demo.cpp @@ -0,0 +1,2864 @@ +static unsigned char photoTan[] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a, + 0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52, + 0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64, + 0x08,0x06,0x00,0x00,0x00,0x70,0xe2,0x95, + 0x54,0x00,0x00,0x00,0x01,0x73,0x52,0x47, + 0x42,0x00,0xae,0xce,0x1c,0xe9,0x00,0x00, + 0x00,0x06,0x62,0x4b,0x47,0x44,0x00,0xff, + 0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93, + 0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73, + 0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13, + 0x01,0x00,0x9a,0x9c,0x18,0x00,0x00,0x00, + 0x07,0x74,0x49,0x4d,0x45,0x07,0xd9,0x01, + 0x10,0x11,0x21,0x14,0x1f,0x3d,0x91,0xb1, + 0x00,0x00,0x00,0x19,0x74,0x45,0x58,0x74, + 0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x00, + 0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20, + 0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d, + 0x50,0x57,0x81,0x0e,0x17,0x00,0x00,0x20, + 0x00,0x49,0x44,0x41,0x54,0x78,0xda,0x3c, + 0xbc,0x47,0x8f,0x66,0x69,0x9a,0x9e,0x77, + 0x3d,0xaf,0x3b,0xee,0x73,0xe1,0x33,0xa3, + 0x32,0xb3,0x4c,0x57,0x77,0x75,0x4f,0x9b, + 0x69,0x52,0x3d,0x9e,0x20,0x44,0x6e,0x66, + 0x30,0x32,0x43,0x40,0xa0,0x16,0x84,0x00, + 0x69,0xa3,0x9d,0x7e,0x83,0xd0,0xbf,0x42, + 0x7f,0x40,0x0b,0x41,0xa2,0x20,0x88,0x02, + 0x24,0x6e,0x44,0x12,0x23,0x03,0x0d,0x89, + 0x1e,0x8e,0x6b,0x33,0x5d,0x5d,0x59,0x95, + 0x95,0x36,0x32,0xfc,0xe7,0x8e,0x7b,0x9d, + 0x16,0x27,0x7a,0x16,0x1f,0x62,0xf5,0x9d, + 0x88,0x78,0xdf,0xc7,0xdc,0xcf,0x7d,0xdf, + 0xcf,0x91,0xff,0xf2,0x8f,0xfe,0x20,0xdb, + 0xd9,0x82,0x9f,0xfc,0xed,0x17,0xfc,0xfe, + 0x8f,0x7e,0xc4,0xb0,0xb9,0x44,0x65,0x41, + 0x95,0x96,0x9c,0x23,0x24,0x88,0x5a,0xe1, + 0x8a,0x0a,0xfc,0x80,0x42,0x20,0x74,0xec, + 0xef,0x36,0xc8,0xd8,0x51,0xad,0x0e,0x20, + 0x25,0x50,0x9a,0xd0,0x6e,0xa1,0xeb,0x11, + 0x51,0x98,0xd9,0x1c,0x59,0x2c,0x49,0x37, + 0x37,0xc4,0xe8,0xd1,0x22,0x88,0x08,0xc1, + 0x07,0x8c,0x55,0xa8,0x98,0x88,0x29,0x91, + 0xc9,0xa0,0x14,0x4e,0x0c,0x7d,0x4c,0xec, + 0xc6,0x00,0x62,0x70,0x26,0x51,0x68,0x45, + 0xa5,0x41,0xe5,0x48,0xca,0x80,0x28,0x7c, + 0x4a,0x98,0x83,0x33,0x64,0x7b,0x4d,0x69, + 0x34,0x0a,0xe8,0x63,0xc6,0x98,0x82,0x72, + 0x56,0x23,0xf3,0x43,0x2e,0x9f,0xff,0x92, + 0xd2,0x08,0x83,0x4f,0x8c,0x19,0x66,0x56, + 0xa1,0x05,0x22,0xc2,0x75,0x2e,0xf8,0xe1, + 0xef,0xfd,0x36,0xeb,0xf7,0x6f,0xf1,0xbb, + 0x0d,0x6a,0x36,0xa7,0x7f,0xf9,0x02,0x5b, + 0xd6,0x8c,0x02,0x95,0x51,0x10,0x12,0x7e, + 0xec,0x51,0x31,0xa3,0x05,0xb2,0x52,0xc4, + 0x10,0xc9,0x64,0x44,0x2b,0x9a,0x6f,0xff, + 0x7d,0x74,0x5d,0x11,0x12,0xdc,0x6f,0xee, + 0x79,0xf7,0xe2,0x05,0xf3,0x66,0xce,0xf1, + 0xa3,0x13,0x86,0x76,0x44,0x52,0xa6,0x6e, + 0x2a,0x94,0x68,0xae,0xaf,0xaf,0xc9,0xa2, + 0xf8,0xeb,0xbf,0xfd,0x9c,0x45,0xa5,0x29, + 0xc2,0xc8,0x30,0x7a,0x10,0xa1,0x2e,0x2d, + 0x4a,0x19,0xba,0x3e,0x90,0x73,0xe0,0x7a, + 0xdb,0x61,0xd6,0xbb,0x7b,0xdc,0x7e,0x8d, + 0xea,0x5a,0x5e,0xfe,0xe2,0xaf,0x99,0xa9, + 0x04,0x24,0x94,0x80,0x16,0x61,0x71,0xf6, + 0x88,0x14,0x61,0xfb,0xe2,0x2b,0x04,0x10, + 0x01,0xa5,0x0d,0x26,0x27,0x72,0x4a,0x0c, + 0x97,0x17,0xe4,0x0c,0xa2,0x0d,0x85,0x2b, + 0x31,0x8b,0x43,0x86,0xae,0xc3,0x55,0x0b, + 0xec,0x7c,0xc9,0xe0,0x33,0x55,0x61,0xf1, + 0xeb,0x35,0xc3,0x6e,0x43,0x4a,0x30,0x74, + 0xe3,0x74,0x98,0x65,0x83,0x73,0x05,0x2a, + 0x45,0x92,0x1f,0x99,0x2f,0x96,0xcc,0xac, + 0x66,0x76,0xfe,0x94,0x71,0x7d,0x03,0x21, + 0x61,0x8d,0x21,0xe6,0x88,0x2d,0x1a,0x86, + 0x98,0x28,0x19,0x09,0x09,0x64,0xb1,0xc2, + 0x39,0x4b,0x56,0xc2,0xcc,0x18,0xca,0xaa, + 0xc2,0x14,0x15,0x58,0xc7,0x49,0xd1,0x30, + 0x6c,0x37,0x58,0x3f,0x90,0x45,0x21,0x92, + 0x31,0xda,0x92,0x73,0xe6,0xd3,0xc3,0x63, + 0x6e,0x5e,0xbe,0x60,0xfd,0xea,0x25,0x04, + 0x8f,0x71,0x16,0x23,0x82,0xef,0x7b,0xaa, + 0x66,0x41,0x58,0xdf,0xa2,0x04,0x14,0x09, + 0xb2,0x90,0xd0,0xa4,0x1c,0xf0,0x29,0xa3, + 0x95,0x22,0x45,0xa8,0x97,0x2b,0xc4,0x16, + 0xec,0x36,0x5b,0x1e,0x9d,0x3d,0xe6,0x70, + 0xb6,0x44,0x89,0x50,0x94,0x16,0xbf,0x08, + 0xd4,0xb3,0x05,0x88,0x62,0x1c,0x06,0x9a, + 0xc3,0x43,0xfc,0xd8,0xb1,0xd9,0xed,0xd8, + 0x5e,0xbe,0x26,0xc4,0x48,0x3b,0x78,0x9e, + 0x7e,0xfc,0x11,0x1f,0x7d,0xeb,0x3b,0xcc, + 0xe6,0x33,0x7c,0xdb,0x71,0x7b,0x75,0x4b, + 0xf1,0xfc,0x4b,0xe4,0x9f,0xfc,0xe8,0xd3, + 0x6c,0xb5,0xf0,0xfa,0x6e,0xcf,0xa2,0x28, + 0x39,0xaa,0x0d,0x4a,0x84,0x2c,0x42,0x4e, + 0x19,0xad,0x84,0x31,0x4c,0x11,0xae,0x95, + 0x60,0xb5,0x25,0xe6,0x44,0x39,0x3f,0xc0, + 0x36,0x0b,0x8c,0x51,0x60,0x2c,0xcd,0xe1, + 0x31,0xca,0x29,0x22,0x0a,0x67,0x1d,0xfb, + 0x9b,0xd7,0xcc,0x4f,0x9e,0x10,0x46,0x4f, + 0x24,0xe3,0xac,0x23,0x8d,0x81,0x61,0xe8, + 0x21,0x8e,0xd4,0xcb,0x05,0x31,0x65,0xb4, + 0x36,0x88,0x32,0x8c,0xbe,0x45,0x89,0xb0, + 0xbd,0x7b,0x4f,0x33,0x3b,0xc4,0x0f,0x2d, + 0xfb,0xab,0x4b,0x16,0xc7,0x8f,0x28,0x16, + 0x07,0x6c,0xdf,0xbf,0x42,0x75,0x2d,0x69, + 0x7b,0x07,0x61,0x84,0xd5,0x31,0xb3,0xf3, + 0x67,0x34,0x47,0x67,0xf8,0x6e,0x47,0x1c, + 0x7b,0xba,0xfb,0x35,0xfd,0xfa,0x8e,0x72, + 0x3e,0xa7,0x98,0xcf,0x69,0x8e,0x4e,0xff, + 0xee,0x50,0x33,0x09,0xa3,0x2d,0xc3,0xb0, + 0xc3,0xa0,0x18,0xda,0x3d,0xa1,0x6b,0x21, + 0x27,0x92,0x28,0x96,0x07,0x87,0xb8,0x72, + 0xc6,0xee,0xfd,0x5b,0xfa,0xab,0x77,0xa4, + 0x94,0x69,0xbb,0x96,0xc2,0x58,0xb2,0xd6, + 0x88,0x08,0xd1,0x7b,0xb2,0x73,0x9c,0xfc, + 0xc6,0x6f,0xa2,0x9c,0x43,0x44,0x21,0xa2, + 0x89,0xbe,0x43,0x69,0x4b,0x08,0x03,0x92, + 0xc1,0x18,0x83,0xd2,0x0a,0x1f,0x12,0x43, + 0xbb,0x43,0x49,0x66,0xf4,0x89,0xcf,0x7f, + 0xfa,0x33,0x72,0x1c,0xa9,0xeb,0x39,0xcf, + 0x3e,0xfb,0x94,0x66,0x71,0x84,0x48,0xa6, + 0xdb,0x6f,0x71,0xae,0x22,0x05,0x8f,0x51, + 0x64,0x62,0xcc,0x9c,0x2d,0x17,0x2c,0x1e, + 0x9d,0xa3,0x10,0x94,0x4a,0xd8,0xa6,0xc6, + 0xb9,0x82,0x6e,0xbb,0x81,0x76,0xe4,0xe0, + 0xec,0x14,0x25,0x8a,0xa2,0xaa,0x81,0xc0, + 0x98,0x04,0x5b,0x36,0x58,0x6b,0x11,0xc9, + 0xc4,0x30,0x22,0x5a,0x91,0xbd,0xa7,0xdf, + 0x6f,0xd9,0xbc,0xf8,0x92,0xb2,0x5e,0x60, + 0x9b,0x05,0x3a,0x65,0x9c,0xb3,0x0c,0x5a, + 0x53,0x16,0x96,0xb7,0x7f,0xfd,0x13,0x72, + 0x7a,0xc2,0xb8,0x5b,0xe3,0xea,0x19,0xaa, + 0xa9,0x19,0xee,0x33,0x33,0x93,0xd8,0xbe, + 0xbb,0xa0,0x8f,0x6f,0x50,0x31,0x62,0x82, + 0x67,0xbf,0xdd,0xb1,0xa9,0x6a,0xe2,0xfa, + 0x0e,0x43,0x46,0x09,0x90,0x81,0xeb,0x2b, + 0xee,0x6f,0xae,0xe9,0x4f,0xcf,0x99,0x7f, + 0xf4,0x29,0xef,0xfe,0xea,0xaf,0xa8,0x8a, + 0x92,0x72,0x36,0xa7,0xbd,0xb9,0x63,0xff, + 0xfa,0x35,0xdb,0xd9,0x2b,0x8a,0x0f,0x3e, + 0xc4,0xcd,0x0f,0x30,0xd6,0xb2,0xd9,0x6e, + 0x78,0xfd,0xea,0x39,0xa7,0xa7,0x27,0xec, + 0xf7,0x3b,0x96,0x07,0x87,0x74,0xed,0x0e, + 0xdf,0x75,0x2c,0x4e,0x2c,0x7d,0x1c,0x31, + 0xc7,0xc7,0xcc,0x0e,0x0e,0xd0,0xd6,0x21, + 0x9b,0x2d,0x8b,0xf9,0x8c,0xf5,0xdd,0x25, + 0x5a,0x29,0xaa,0x62,0x41,0x14,0x78,0xf9, + 0xe2,0x39,0x21,0x67,0x16,0x07,0x07,0x1c, + 0x1e,0x9f,0x31,0xb6,0x2d,0xe3,0x7e,0x47, + 0x51,0xd5,0x68,0x67,0xe8,0x77,0x1b,0x32, + 0x8a,0xe0,0x3b,0x76,0xb7,0x77,0x18,0x9d, + 0xb0,0xf5,0x8c,0x47,0x47,0x0d,0x76,0x7e, + 0x4e,0x8c,0x1e,0xd1,0x00,0xe0,0xbd,0xc7, + 0x9a,0x02,0xef,0x23,0xae,0x70,0xc8,0x7f, + 0xfe,0x1f,0xfe,0xbd,0x0c,0x20,0xce,0x61, + 0xab,0x8a,0xd9,0xea,0x80,0x14,0x02,0xc6, + 0x15,0x38,0xeb,0x10,0x33,0x45,0x17,0x68, + 0x44,0x40,0x2b,0x41,0x92,0x9f,0x4a,0x81, + 0x2a,0x41,0x09,0xda,0x18,0x92,0x1f,0xf0, + 0x7e,0x40,0xa5,0xc0,0xfe,0xf9,0xe7,0xa8, + 0xa1,0x07,0x63,0x31,0x56,0xe1,0x4e,0x9f, + 0x42,0x55,0x43,0xca,0x90,0xa1,0x28,0x1d, + 0xe3,0x6e,0xcb,0xee,0xcb,0xaf,0x88,0x31, + 0xa0,0x17,0x87,0xfc,0xb7,0xff,0xdd,0xff, + 0xc4,0xbf,0xfe,0xb3,0x7f,0xcf,0xff,0xfe, + 0x93,0xaf,0xb8,0x8c,0x05,0xa9,0xdf,0x53, + 0xf9,0x35,0x95,0xac,0x39,0x36,0xb7,0x1c, + 0xda,0x44,0x0c,0x1e,0x6b,0x0c,0x32,0x8c, + 0xa4,0xde,0x63,0x8c,0xc1,0x16,0x86,0xe2, + 0xf1,0x53,0xc2,0x7e,0x4b,0x76,0x0e,0x14, + 0x53,0x4f,0x0b,0x11,0xe9,0x77,0x04,0x1c, + 0x6b,0xdf,0xf1,0xee,0xd5,0x2b,0x50,0x82, + 0x0f,0x99,0x10,0x03,0x63,0x3f,0xa2,0x54, + 0x46,0x44,0x71,0x78,0x78,0xcc,0xf7,0xbf, + 0xff,0x1d,0x94,0xd2,0x24,0xe5,0x88,0x21, + 0x11,0x53,0xc4,0x68,0x0d,0x61,0xa0,0xdd, + 0xdd,0x50,0xce,0x8f,0x41,0x0c,0x46,0xc0, + 0xfb,0x81,0x6e,0xdf,0x11,0x73,0xa6,0xac, + 0x6a,0xea,0xa6,0x01,0x84,0x94,0x33,0x7e, + 0x68,0xc9,0x39,0xe2,0x5c,0xc3,0xcb,0xff, + 0xf7,0x5f,0x72,0x7d,0xb3,0xc1,0x6a,0xa1, + 0xd0,0x42,0x5d,0x39,0x04,0x21,0x8b,0x46, + 0xce,0x9e,0xe2,0x73,0xc2,0x3a,0xcb,0xc1, + 0xe9,0x39,0x4a,0x09,0x21,0x26,0x8c,0x57, + 0x8a,0xbe,0xed,0x48,0xbb,0x3d,0xa2,0x37, + 0xac,0xef,0x77,0x3c,0x7a,0x72,0x46,0x8c, + 0x01,0xaf,0x2d,0xd3,0x23,0x14,0x5a,0x32, + 0x7d,0x3f,0x60,0x9a,0x9a,0x44,0x42,0x8b, + 0x21,0xe7,0x00,0x49,0x93,0xc3,0x80,0x11, + 0xcf,0x76,0xbb,0x67,0x56,0x55,0x24,0x3f, + 0x52,0x34,0x73,0x54,0x33,0x43,0xc4,0x50, + 0x1d,0x9c,0x62,0xea,0x86,0x34,0x74,0x5c, + 0x7f,0xf1,0x39,0x34,0x4b,0xaa,0x93,0x43, + 0xcc,0xa7,0x05,0x61,0x18,0x08,0xc5,0x82, + 0x7f,0xf5,0xe7,0x3f,0xe1,0x3f,0xf9,0x8f, + 0xfe,0x31,0x57,0xde,0xf2,0xbf,0xbc,0x6f, + 0x88,0x08,0x7d,0x0c,0xdc,0xa4,0xcc,0x2b, + 0x3f,0x30,0x1b,0x2e,0xf9,0x56,0x7e,0xc1, + 0x33,0x73,0x8b,0x52,0x0a,0x65,0x2c,0xde, + 0x8f,0x38,0x6b,0x18,0xd6,0x77,0xc4,0x38, + 0xe2,0x37,0x37,0x74,0xf7,0x37,0x9c,0x7d, + 0xe7,0x37,0x31,0x75,0x03,0x75,0x41,0xbb, + 0xdf,0xb3,0x2c,0xe6,0xf8,0xa3,0x63,0xde, + 0x5c,0xbc,0x25,0x46,0xc8,0x24,0x52,0x0c, + 0x48,0x56,0xc4,0x1c,0xb9,0xbc,0xbc,0xe0, + 0xcf,0xff,0x62,0xe0,0xf4,0xfc,0x11,0xbb, + 0x7d,0xc7,0xc9,0x6c,0xc9,0xed,0xcb,0xe7, + 0xcc,0x66,0x35,0x52,0x2f,0xb8,0xba,0x78, + 0x4d,0x35,0x7b,0xcf,0xe3,0x0f,0x9e,0xa0, + 0x8c,0x26,0xa4,0x4c,0x1f,0x06,0xae,0xaf, + 0x6f,0x99,0x2f,0x97,0x9c,0x57,0x15,0x31, + 0x06,0x8c,0x28,0x50,0x9a,0xec,0x3d,0xbb, + 0xed,0x2d,0xfb,0xa0,0x50,0xda,0xa2,0xad, + 0xa0,0x4d,0x41,0x3b,0x78,0x4a,0xa7,0x29, + 0xcf,0x1e,0xb1,0x7c,0xf6,0x0d,0xde,0xfe, + 0xcd,0xbf,0x67,0x73,0x7f,0x0d,0x77,0x17, + 0xc4,0x21,0xa2,0x8b,0x1a,0xf9,0xa7,0x7f, + 0xf8,0x3b,0xf9,0xf6,0xed,0x25,0xe3,0x18, + 0x38,0x3e,0x3b,0x63,0xf9,0xf8,0x11,0x65, + 0x55,0x60,0xb4,0x43,0x6b,0x8d,0xa8,0x00, + 0x32,0x35,0x44,0x57,0x94,0xe4,0x9c,0xd1, + 0x78,0x34,0x91,0x90,0x35,0x5a,0x97,0xa0, + 0x35,0x92,0x7b,0xb4,0x2a,0x51,0xc0,0x6e, + 0xb3,0xa6,0x99,0xcf,0x88,0x39,0xb2,0xb9, + 0xba,0xe4,0xe0,0xf4,0x09,0x38,0x03,0x31, + 0x91,0x63,0xa0,0x28,0x4b,0x52,0x0a,0x8c, + 0x7d,0x8f,0xdf,0xac,0xc9,0xa6,0xa4,0xf9, + 0xf0,0xbb,0xfc,0xf5,0xe7,0x5f,0x70,0xfc, + 0xcd,0xdf,0xe7,0xc2,0x9c,0x71,0xad,0x8f, + 0xd1,0x46,0xa1,0x81,0x98,0x13,0x61,0x18, + 0x88,0x43,0xcf,0x72,0xfd,0x25,0xc7,0xbf, + 0xfa,0xdf,0xa8,0xba,0x4b,0xd2,0x30,0x52, + 0x36,0x35,0x66,0x1c,0xd0,0x22,0x90,0x3c, + 0xde,0x47,0xd4,0x62,0x86,0x5b,0x2e,0xa8, + 0xe6,0x4b,0x66,0x07,0x8f,0x30,0xb3,0x39, + 0x29,0x06,0xda,0x76,0xcb,0x4f,0xff,0xe6, + 0x17,0xcc,0xe7,0x0b,0x36,0xdb,0x1d,0x31, + 0x47,0x16,0xa5,0x43,0x8b,0x46,0x8a,0x8a, + 0xba,0xaa,0x98,0xcd,0xe6,0x5c,0x7f,0xf9, + 0x4b,0xd2,0xfe,0x8e,0x62,0xb6,0x64,0x1b, + 0xe0,0xf0,0x78,0x41,0xca,0x91,0xc2,0x18, + 0xc4,0x3a,0x8c,0xb1,0xcc,0x0e,0x1e,0x21, + 0xc6,0x31,0x8e,0x23,0x24,0xcf,0xbb,0xbf, + 0xfd,0x19,0xce,0xb7,0xa4,0xa2,0x24,0x54, + 0x0b,0x88,0x89,0xd5,0x6a,0xc1,0xdd,0xf5, + 0x35,0x45,0x59,0x72,0xf6,0xf4,0x09,0x92, + 0xc1,0xfb,0x48,0x54,0x9a,0x83,0xd5,0x01, + 0xaf,0xff,0xbf,0x7f,0x45,0xec,0x5b,0x94, + 0xd1,0xe8,0xa2,0xc4,0xce,0x0f,0x91,0xff, + 0xe6,0xbf,0xfa,0x27,0xf9,0xea,0xdd,0x15, + 0x39,0x66,0x0e,0xcf,0x1f,0x81,0x08,0xca, + 0x58,0x14,0x0a,0x34,0x90,0x22,0xb6,0xa8, + 0x50,0x4a,0x21,0xa2,0x40,0x32,0xdb,0xcd, + 0x35,0xb7,0xd7,0xb7,0x68,0xe5,0x38,0x3c, + 0x3e,0x62,0x36,0x9b,0x11,0xfa,0x0e,0x94, + 0xc6,0xb8,0x82,0x61,0x7b,0xcb,0x70,0x73, + 0x4d,0xbf,0xd9,0x12,0x87,0x40,0xbd,0x5a, + 0xa1,0x9d,0x05,0x32,0x7e,0xb3,0xc1,0xcd, + 0x16,0x88,0x55,0xa4,0xb6,0x25,0xf6,0x3d, + 0x2f,0xaf,0x6e,0xf9,0xab,0xb7,0xf7,0x10, + 0x13,0xe6,0xf8,0x23,0xbe,0xf3,0x0f,0xfe, + 0x98,0xe1,0x3b,0x7f,0xc8,0xa0,0x2b,0x8c, + 0x52,0x68,0x2d,0x64,0x32,0xc9,0x07,0xc2, + 0xd0,0x13,0xef,0xae,0x58,0xfd,0xec,0x5f, + 0xf0,0xc1,0xf8,0x4b,0x74,0x4e,0xd4,0xb6, + 0xa4,0x28,0x8b,0x09,0x3c,0xd4,0x15,0xd5, + 0xd1,0x01,0x6a,0xb6,0x42,0x94,0xa6,0xaa, + 0x97,0x88,0xd6,0x04,0x3f,0xd0,0xb5,0x1b, + 0x46,0x1f,0xe9,0xbb,0x11,0xef,0x7b,0x62, + 0xe8,0x31,0x5a,0x68,0x9a,0x86,0xb2,0x9e, + 0xa3,0xb5,0x61,0xbb,0x59,0x23,0xa3,0xa7, + 0x6d,0x3b,0xbc,0x40,0xdf,0x6e,0x98,0xcd, + 0x96,0xdc,0xdd,0xde,0x32,0x5b,0xce,0xb0, + 0xca,0x70,0x74,0x72,0xc2,0x6c,0x71,0x4c, + 0x48,0x89,0x98,0x3c,0x39,0x0b,0xbb,0x8b, + 0x77,0xdc,0xbf,0x7c,0x41,0x9c,0xcd,0xd8, + 0xc7,0x88,0x72,0x53,0xd0,0x0d,0xfd,0x48, + 0xdb,0xf7,0xcc,0xe7,0x33,0x9c,0x33,0x9c, + 0x3f,0xfe,0x80,0x83,0xe5,0x11,0x59,0x60, + 0xfb,0xfc,0x97,0xb4,0xef,0x5f,0x51,0xac, + 0x8e,0xc0,0x35,0x98,0xa6,0x41,0xfe,0xeb, + 0x7f,0xf6,0x1f,0xe7,0x9c,0x22,0x28,0xc1, + 0x96,0x0e,0x95,0x34,0x49,0x59,0xb4,0x12, + 0x2a,0xa7,0x08,0x31,0x10,0x04,0x9c,0xad, + 0xc9,0x08,0xf7,0xb7,0xd7,0xbc,0xbf,0xb8, + 0x60,0xbb,0x6b,0x99,0xd7,0x05,0x4a,0x2b, + 0x52,0x82,0x6e,0x18,0x68,0xea,0x8a,0xa3, + 0x83,0x63,0xe4,0xfe,0x0e,0xfa,0x96,0x94, + 0x02,0x64,0x98,0xaf,0x0e,0x28,0x0f,0x8f, + 0x28,0xe7,0x73,0x44,0x14,0xdd,0xae,0x45, + 0x13,0xd1,0x2a,0x13,0x06,0xcf,0xfd,0x66, + 0xc7,0x5f,0x7c,0xfe,0x35,0x9b,0xfb,0x35, + 0x9b,0xb6,0xc3,0x1d,0x9e,0xf3,0x9b,0x7f, + 0xfc,0x5f,0x70,0xff,0xf4,0x1f,0x92,0x8a, + 0x1a,0x51,0x0a,0xad,0x20,0xe5,0x44,0xf4, + 0x81,0xec,0x47,0xe8,0xf6,0x9c,0xad,0x7f, + 0xca,0x0f,0x67,0x57,0x58,0xab,0x21,0x27, + 0x04,0x18,0xba,0x1d,0xc6,0x18,0xaa,0x66, + 0x09,0x22,0x64,0x49,0x48,0x16,0x7c,0x18, + 0x19,0xdb,0x3d,0xbb,0xae,0xe5,0x8b,0xe7, + 0x5f,0xb2,0x9a,0xcf,0x48,0x09,0x6e,0xae, + 0xaf,0x71,0x95,0xc3,0x5a,0x43,0xca,0x8a, + 0xa3,0xa3,0x03,0x54,0x8e,0x0c,0x5d,0xc7, + 0x66,0xbd,0xc5,0x0f,0x23,0xb3,0xc3,0x03, + 0xc6,0x7d,0xc7,0xae,0xdd,0x61,0x9d,0x23, + 0xc7,0x8c,0x2d,0x2c,0x8f,0x9f,0x3e,0xe1, + 0xc9,0xa3,0x0f,0x48,0x31,0xa2,0xb4,0x01, + 0x11,0x5e,0x7d,0xfd,0x92,0x57,0xef,0x5e, + 0xd2,0xf5,0x01,0x67,0x0c,0x5a,0x29,0x3a, + 0x1f,0x70,0x6a,0x82,0xd6,0xe5,0xac,0xe6, + 0x5b,0x9f,0x7c,0xcc,0xe2,0xe0,0x18,0xe7, + 0x4a,0x52,0x18,0x09,0x02,0x4a,0x34,0x31, + 0x44,0x0c,0x4a,0x91,0x72,0x42,0x8b,0x82, + 0x28,0xdc,0xed,0xb7,0x38,0x57,0xd3,0x38, + 0xc5,0xa8,0x2c,0x46,0x41,0xd8,0xde,0x92, + 0xaa,0x84,0x28,0x03,0xa2,0xc8,0x4a,0x93, + 0x43,0x64,0xe8,0x06,0x90,0x8c,0x12,0xc1, + 0xe5,0xc4,0x7a,0xbd,0x45,0x12,0x3c,0x39, + 0x39,0xe5,0xe0,0xe8,0x33,0xbc,0xef,0xf0, + 0x7e,0xa4,0x98,0xcf,0xd1,0xb6,0x24,0x46, + 0x4f,0x8e,0x01,0xd5,0x38,0x8c,0x73,0x28, + 0xad,0xd1,0x64,0x4e,0x1e,0x9d,0xf1,0xfb, + 0x27,0x47,0xa4,0xa1,0xe3,0xdd,0xc5,0x35, + 0x7f,0xf6,0x97,0xbf,0xe0,0xa7,0x7f,0xfa, + 0xbf,0xf2,0x0f,0xfe,0xe4,0x94,0x9b,0xea, + 0x37,0xd9,0x64,0x21,0x67,0x41,0x2b,0x0d, + 0x76,0x02,0x59,0x49,0x32,0xef,0xd5,0x0f, + 0xf8,0xf3,0xf5,0x4f,0xf9,0xe4,0xe2,0xdf, + 0x50,0x15,0x0e,0x7b,0xf2,0x08,0xad,0x35, + 0x21,0x43,0xbf,0xdf,0x81,0x64,0xc6,0xfd, + 0x1e,0xdb,0xd4,0x53,0xd6,0x1b,0xcd,0xe5, + 0xfb,0x1b,0x6e,0x6f,0xee,0xe9,0xf6,0x3d, + 0x7d,0x1f,0xf0,0x31,0x10,0xd7,0x1d,0x59, + 0x20,0xe7,0xcc,0xeb,0x37,0x97,0x58,0x33, + 0x1d,0x6e,0x8e,0x11,0x44,0x78,0xbf,0xb9, + 0x40,0x2b,0x10,0x20,0xee,0xf7,0x80,0x20, + 0x6a,0xe0,0xf6,0xfe,0x97,0xbc,0x7b,0xf3, + 0x9e,0x6a,0x36,0xe3,0xe9,0x07,0x1f,0xd0, + 0xd4,0x0d,0x39,0x25,0xfa,0x76,0x44,0x44, + 0x91,0x53,0xa6,0xeb,0x5b,0x7c,0x4c,0x50, + 0x96,0x14,0x65,0x89,0x1f,0x46,0x6c,0x33, + 0x9b,0x86,0xdc,0x30,0x12,0xda,0x1d,0xca, + 0x96,0x04,0x46,0xc6,0x98,0xd1,0xbf,0xf1, + 0xcd,0x67,0x3f,0x16,0x11,0x42,0xf4,0x8c, + 0x43,0xcf,0xdb,0xcb,0x5b,0x36,0xbb,0x2d, + 0x6d,0x3f,0xa0,0xb4,0x06,0xa5,0x49,0x59, + 0x53,0x14,0x15,0x92,0x3d,0x56,0x2b,0x4a, + 0x67,0x30,0xd6,0x31,0xc4,0xc0,0x30,0x8c, + 0x58,0xa5,0x49,0x4a,0x91,0x13,0xd4,0x75, + 0x49,0x33,0x9f,0x83,0x81,0x44,0x62,0x7b, + 0x7b,0x83,0x68,0xc3,0xd0,0x6f,0xd9,0xad, + 0xef,0x71,0x56,0x93,0x22,0x13,0x68,0x18, + 0x46,0xb6,0xaf,0xbf,0xe6,0xfe,0xcb,0x5f, + 0x31,0x5c,0x5d,0x11,0xc7,0x16,0xbb,0x58, + 0x30,0xee,0x5b,0xde,0xbe,0x7a,0xc9,0x76, + 0x08,0xfc,0xb3,0x3f,0xfa,0x47,0x5c,0xec, + 0x3c,0x6d,0x16,0x94,0x4c,0x9f,0x9c,0x33, + 0xe4,0x8c,0x00,0xdb,0x3c,0xa7,0x7d,0xfb, + 0x8a,0xf9,0xfd,0xe7,0xac,0x9e,0x7e,0x4c, + 0x61,0x1d,0xca,0x4c,0xe8,0x30,0xe5,0x88, + 0xb2,0x16,0xa5,0x84,0x1c,0x03,0xa3,0x4f, + 0x7c,0xf9,0xd5,0x2b,0xba,0x6e,0x60,0xf0, + 0x1e,0x9f,0x13,0x0a,0x88,0x29,0x41,0x4a, + 0xd3,0x73,0x45,0x18,0xbc,0x87,0x04,0x21, + 0x65,0x42,0x4a,0xa4,0x87,0x80,0x88,0x51, + 0x48,0x40,0xc8,0x90,0xb3,0x22,0xa5,0xcc, + 0xfd,0x76,0xc7,0xdd,0xed,0x1d,0xd7,0x37, + 0xb7,0x3c,0x3a,0x3b,0xa0,0x6f,0x3b,0xd6, + 0x9b,0x0d,0x55,0xe1,0x70,0x4a,0x28,0x8b, + 0x9a,0x83,0xd5,0x9c,0x59,0x59,0xd0,0xd4, + 0x8e,0xc3,0xc5,0x8a,0x8b,0xb7,0x6f,0x70, + 0x65,0x81,0x51,0x86,0x9c,0x13,0x62,0x0d, + 0x5f,0xbd,0x7a,0xcd,0xac,0xac,0xd0,0xbf, + 0xf7,0xdb,0x3f,0xfa,0x71,0x0c,0x11,0xa3, + 0x05,0xdf,0xed,0xd9,0xed,0x5a,0x72,0x52, + 0xd4,0x65,0x49,0x55,0x16,0xf4,0x5d,0x4b, + 0x51,0x4d,0x11,0x96,0x53,0x20,0xfb,0x2d, + 0x61,0x0c,0x1c,0x1d,0x1f,0x50,0x15,0x25, + 0x77,0x77,0xf7,0x84,0x90,0x28,0x8d,0x41, + 0x29,0xcd,0xc9,0xf1,0x31,0xab,0xd5,0x12, + 0x44,0xa1,0x45,0xb1,0x7d,0x7f,0xc9,0xfa, + 0xfa,0x92,0xf5,0xc5,0x0d,0x79,0xf4,0x74, + 0xdb,0x1d,0x47,0xe7,0xcf,0xb8,0x7a,0xf1, + 0x05,0xed,0xcb,0x17,0xd0,0xb7,0x98,0x94, + 0xd0,0x92,0x31,0x21,0x20,0x5d,0x8b,0xd4, + 0x33,0xb2,0x1f,0x78,0xf7,0xe2,0x0b,0x5e, + 0x0c,0x05,0x3f,0xfc,0xec,0x23,0x62,0xdf, + 0xd1,0x2a,0x87,0x88,0x26,0x0b,0x48,0x9e, + 0x9a,0xbd,0x88,0xd0,0x36,0x4f,0x28,0x77, + 0xef,0x38,0x39,0x5e,0x30,0x86,0xe9,0x12, + 0xc2,0x18,0x50,0x0a,0x44,0x34,0x20,0xf8, + 0x10,0xf8,0xe5,0xf3,0xe7,0x5c,0xdd,0xdc, + 0x82,0x52,0x80,0x22,0xe5,0x08,0x02,0x1a, + 0x45,0x22,0x11,0xe2,0xf4,0x31,0x5a,0x50, + 0x64,0x44,0x09,0x8a,0x69,0x40,0xce,0x39, + 0xa1,0x35,0x84,0x98,0xa6,0x21,0x53,0x65, + 0x0a,0xe7,0xa6,0x73,0x8b,0x91,0x9c,0x32, + 0x5f,0x7d,0xf5,0x35,0x87,0x87,0x4b,0x4e, + 0x4f,0x4f,0xa9,0x9a,0x19,0x1f,0x3e,0xfd, + 0x80,0xd3,0xb3,0x53,0xe6,0x8b,0x05,0x87, + 0xab,0x25,0x65,0x51,0xb0,0x58,0x2e,0x69, + 0x0a,0x8b,0xab,0x6a,0xb4,0x11,0x52,0x8a, + 0x18,0x53,0x31,0x2b,0x0b,0x94,0x53,0x98, + 0x6a,0x56,0xe3,0xaa,0x82,0x76,0x7d,0x45, + 0x3d,0x5b,0x32,0x6b,0x7b,0xb4,0x9d,0xd3, + 0xcc,0x2a,0x08,0x53,0xf4,0x0f,0xed,0x9e, + 0x52,0x2b,0xfa,0x61,0xa0,0x28,0x96,0x2c, + 0x0a,0x83,0xae,0x4a,0xe6,0xda,0xf2,0xbd, + 0xcf,0x3e,0xe1,0xfe,0x6e,0xcd,0xea,0xe0, + 0x88,0xd9,0xf2,0x80,0x24,0x0a,0xad,0x15, + 0x3a,0x03,0x44,0x76,0xfd,0x40,0x1e,0x23, + 0xc7,0x67,0x27,0x04,0x3f,0x52,0xce,0x17, + 0x8c,0x7d,0xcb,0xf2,0xe8,0x98,0xf5,0x76, + 0x4b,0x20,0xa3,0x73,0x46,0x01,0xca,0x39, + 0x9a,0x66,0xc1,0x47,0xcb,0x03,0x8e,0x0e, + 0x57,0x2c,0x5e,0xbe,0xe7,0xf9,0x4f,0xfe, + 0x25,0xff,0xd7,0xc7,0xbf,0xc3,0xa1,0x4b, + 0x9c,0x15,0xb7,0xa4,0xe5,0x33,0x6e,0xb2, + 0x26,0x08,0x88,0xd2,0x44,0xa3,0xd1,0x8b, + 0x86,0x2f,0x3f,0xfc,0x63,0x9e,0xf2,0x05, + 0x55,0xde,0x12,0x87,0x8e,0xac,0x0c,0xe3, + 0x38,0xa2,0x45,0x91,0x44,0xb8,0xbe,0xb9, + 0xe6,0xcd,0xab,0x77,0x88,0x08,0x29,0x06, + 0x12,0x13,0x05,0x44,0x1c,0xc9,0xa2,0x51, + 0xa2,0xa8,0xac,0x9a,0x80,0x47,0x48,0x04, + 0xc0,0x28,0x99,0xf8,0xbc,0x1c,0x49,0x64, + 0xbc,0x57,0xd3,0x08,0x80,0xd0,0x8f,0x9e, + 0xae,0x1f,0x30,0x32,0xf1,0x5d,0xe3,0x30, + 0x22,0x46,0x43,0xce,0x5c,0x5f,0x5f,0x73, + 0x50,0x17,0xec,0x6e,0x3b,0xc2,0x18,0x31, + 0xa5,0x23,0x45,0x70,0x4d,0x4d,0x4a,0x91, + 0xdb,0xbb,0x1b,0xdc,0x6e,0xcd,0xb8,0x59, + 0xa3,0x00,0xd1,0x16,0x29,0x2b,0xc2,0xd8, + 0x63,0x86,0x61,0x44,0x01,0xb6,0x9a,0x93, + 0x86,0x81,0xba,0x99,0xa1,0x6d,0xc9,0x62, + 0x31,0x43,0x69,0x4b,0xca,0x19,0x67,0x2c, + 0x4a,0x69,0x4a,0xeb,0x48,0x29,0x13,0x73, + 0x26,0x79,0x8f,0x16,0x83,0x69,0x16,0xd4, + 0xf5,0x82,0x71,0xec,0x19,0xfb,0x0e,0xe5, + 0x2c,0x46,0x17,0xe4,0x1c,0x11,0x11,0xbe, + 0xf1,0xbd,0xef,0x82,0x0f,0xec,0xae,0xde, + 0x90,0x42,0xc7,0xdd,0xbb,0x0d,0xfb,0xcd, + 0x86,0xc5,0xc9,0x21,0xe6,0xe8,0x18,0x57, + 0x56,0x64,0xdf,0xa3,0x44,0x93,0xc8,0xf4, + 0xfb,0x3d,0xe9,0xee,0x3d,0x85,0xb6,0x7c, + 0xff,0xdb,0xcf,0xb8,0xfb,0xb7,0x3f,0xc3, + 0x0c,0x6b,0x36,0xb3,0x8f,0xd9,0xa7,0xc4, + 0x3f,0xfd,0xf4,0x80,0xe3,0xda,0xf1,0xdf, + 0xff,0xf9,0x05,0x9d,0x52,0xa0,0x0c,0xa2, + 0x2c,0x7a,0x7e,0xc4,0x9f,0xdd,0xef,0xf9, + 0xfd,0xe2,0x1e,0x15,0x02,0xb6,0x14,0x44, + 0x29,0xee,0x77,0x3b,0xde,0xbf,0xbf,0xe4, + 0xcd,0xeb,0x77,0x0c,0x3e,0x60,0x95,0x30, + 0x84,0x34,0xc1,0xe4,0xd0,0x4f,0xbd,0x22, + 0x45,0x94,0x80,0x31,0x8a,0xe0,0x23,0x31, + 0xc7,0x69,0x46,0xf1,0x03,0x3e,0x26,0x44, + 0x41,0x8e,0x09,0x85,0x26,0x4b,0x9c,0x7a, + 0xae,0x12,0x94,0x12,0xac,0x28,0x0a,0xab, + 0xc8,0x39,0x73,0xfe,0xec,0x09,0x26,0x67, + 0xaa,0xdb,0xf7,0xe4,0x3b,0x18,0x48,0xe4, + 0xac,0x18,0x53,0x02,0x11,0x6e,0xb2,0xf0, + 0xf8,0xbb,0x3f,0x20,0x5f,0x5f,0x4f,0x2d, + 0xc1,0x08,0xd9,0xd8,0x89,0x92,0x49,0x20, + 0x0a,0x4c,0x1a,0x3a,0x32,0x82,0x7a,0xc0, + 0xd8,0xcb,0xd5,0x01,0x19,0x43,0x4e,0x82, + 0x28,0x70,0xd6,0x10,0x72,0xc2,0xa1,0x19, + 0xfa,0x9e,0xb2,0x6e,0xc8,0x39,0x63,0x45, + 0x73,0xfb,0xe6,0x2b,0x56,0x47,0x67,0x8c, + 0x64,0x32,0x8a,0xfd,0xe5,0x1b,0xfa,0xf5, + 0x96,0x10,0x46,0xaa,0xf9,0x8a,0xc3,0x8f, + 0x3e,0xe1,0xfa,0xf9,0xcf,0xf1,0xeb,0x35, + 0x4e,0x69,0x50,0x0a,0x1d,0x13,0xa1,0xef, + 0xb8,0xbb,0x7d,0x3f,0xf1,0x64,0x0a,0x94, + 0x28,0x52,0x4a,0xf8,0x90,0xd0,0x46,0xd3, + 0x8f,0x9e,0xc6,0x5a,0x8c,0x12,0xbe,0x31, + 0xb7,0xbc,0x78,0xfd,0x73,0xca,0xe3,0x8f, + 0x49,0xda,0xf1,0x3f,0xff,0xcd,0x35,0x9f, + 0x9e,0x36,0x7c,0xaf,0xd9,0xf2,0xe5,0xce, + 0x72,0x25,0x86,0xac,0x2c,0xc6,0x78,0x86, + 0xc5,0x39,0x3f,0xb9,0xdd,0xf1,0xbb,0xb3, + 0x57,0xf4,0x6d,0xcb,0xdb,0xd7,0xaf,0xe9, + 0xf7,0x2d,0xdb,0x5d,0x4f,0xf0,0x91,0xa6, + 0x70,0xe4,0x94,0x30,0x5a,0x13,0x63,0x44, + 0xc9,0x44,0xfb,0x94,0x46,0xe3,0x8a,0x92, + 0x94,0x12,0xa3,0xf7,0xcc,0x94,0x42,0x29, + 0x8d,0x53,0x8a,0xc2,0x6a,0xda,0x71,0x60, + 0x56,0x37,0x34,0x65,0xc1,0xfd,0x76,0x47, + 0xd7,0xf5,0x88,0xca,0x78,0x3f,0xb2,0x3c, + 0x3c,0xe2,0xf1,0xc9,0x31,0x56,0x1b,0xea, + 0xa6,0xe1,0xf2,0xf2,0x3d,0xba,0x6a,0xd0, + 0xce,0x51,0x1f,0x1d,0x93,0x95,0xa2,0x28, + 0x8b,0x89,0x56,0x52,0x8e,0x61,0xbf,0x45, + 0xd5,0x33,0xba,0xd1,0x4f,0x43,0x77,0x7c, + 0x60,0x04,0xb4,0x20,0x75,0x85,0xc9,0x39, + 0xa1,0xc4,0x4c,0x8d,0x2f,0x4f,0x7d,0xa0, + 0xeb,0x77,0xb8,0x66,0x4e,0xca,0x89,0xf6, + 0xe6,0x96,0xfd,0xfa,0x16,0xab,0x1d,0xa6, + 0x2a,0x19,0xef,0xae,0xd9,0x5c,0x5e,0xa2, + 0x01,0x82,0x47,0xfb,0xc8,0x7e,0x1c,0x49, + 0xf7,0x37,0x98,0xa2,0x24,0x79,0x4f,0xf0, + 0x1e,0x69,0x84,0x9c,0x13,0x88,0x06,0x65, + 0xf0,0xa2,0x70,0xa6,0xa0,0xa8,0x0c,0x12, + 0x13,0x6d,0xb7,0xc7,0xe4,0x8c,0x41,0x33, + 0xf1,0x1d,0x19,0xa7,0x15,0x39,0xc3,0xc9, + 0xd3,0x8f,0xb0,0x55,0x09,0x11,0x8e,0xae, + 0xde,0xf3,0xea,0xee,0x15,0x12,0x06,0xa4, + 0x30,0x64,0x14,0xbf,0xba,0x19,0x78,0xce, + 0x92,0x6f,0x94,0x1d,0xbb,0x0c,0x6d,0x54, + 0x04,0xe5,0xc0,0x28,0xb6,0x47,0xdf,0xe1, + 0x57,0x7b,0xcf,0x37,0xd4,0x1b,0xce,0xce, + 0xce,0x19,0x87,0x8e,0xa7,0x22,0x88,0x29, + 0x40,0x29,0xb2,0xef,0x19,0xc6,0x8e,0x34, + 0x7a,0xfa,0x76,0x0f,0x21,0xb0,0x58,0x2c, + 0x31,0x3a,0x33,0xec,0x5b,0xfc,0x38,0xa2, + 0xb5,0x22,0x64,0x21,0x65,0xa1,0x3e,0x3e, + 0x62,0xbe,0x3a,0x20,0xc6,0x88,0xd6,0x96, + 0xd3,0xb1,0x23,0x0c,0x3d,0x21,0x44,0x2e, + 0x6f,0xee,0xf8,0xf0,0xc9,0x63,0xaa,0xf9, + 0x9c,0xec,0x03,0xbb,0xed,0x8e,0xf9,0xb2, + 0x61,0xfe,0xe4,0x8c,0x30,0x06,0x62,0xf4, + 0x80,0x10,0xb4,0x61,0xe8,0x3b,0xc6,0xb0, + 0x47,0x86,0x8e,0xf9,0xd9,0x29,0x9d,0x1f, + 0x59,0x3d,0x7e,0x8c,0xab,0x6b,0xee,0xdf, + 0xbf,0x47,0x97,0x8e,0xa2,0x69,0x30,0x17, + 0x9f,0xff,0x92,0x72,0xb9,0x02,0xc9,0x18, + 0x6d,0x30,0x55,0xc5,0xfb,0xd7,0x6f,0x68, + 0x2a,0xc7,0xb0,0xdd,0x23,0x59,0x50,0x39, + 0xe0,0x10,0x54,0xd3,0x10,0xba,0x8e,0xa2, + 0xac,0xb1,0x76,0xca,0x28,0xe5,0x4a,0x8e, + 0x4f,0xcf,0x18,0x57,0x87,0x48,0x5d,0x63, + 0x52,0x40,0x69,0x8d,0xad,0xe7,0xb4,0x9b, + 0x2b,0xda,0x71,0xe4,0xf4,0x93,0x6f,0x52, + 0xce,0x66,0xa4,0x2c,0x28,0xe3,0x88,0xbe, + 0xa3,0xec,0x07,0xc6,0xae,0xa3,0x2c,0x2a, + 0x5c,0xe9,0xa0,0xef,0xe9,0x87,0x0e,0x52, + 0x44,0xcd,0xe6,0xb4,0xdb,0x3b,0xac,0x2d, + 0x59,0x7c,0xf4,0x09,0xf5,0x97,0x1b,0xfc, + 0xb0,0x05,0xeb,0x40,0x5b,0x00,0x32,0x8a, + 0xe7,0x7d,0xc5,0xb3,0x26,0xf1,0xe5,0x38, + 0xa2,0x94,0x20,0x5a,0x40,0x15,0xbc,0x2c, + 0xbf,0xc9,0xb9,0xbf,0xc1,0xe6,0x9e,0x3c, + 0xb4,0x5c,0x5c,0x5c,0xa0,0x10,0x74,0x0a, + 0x94,0x75,0x45,0x96,0xcc,0xf6,0xf2,0x96, + 0x92,0x8c,0xd5,0x9a,0xe1,0xfe,0x96,0x3e, + 0x45,0xac,0x16,0xcc,0x03,0xd2,0x6a,0xac, + 0x65,0x8c,0x91,0xfe,0xee,0x86,0x9d,0x16, + 0xc6,0x2c,0x13,0xfd,0x1e,0x02,0x72,0x7c, + 0xca,0x07,0xcf,0x9e,0x32,0x5b,0xcc,0x90, + 0x94,0x68,0xf7,0x3b,0xd6,0xef,0xde,0x72, + 0xf7,0xfe,0x12,0xeb,0x0a,0xf8,0xf0,0x19, + 0x8b,0x83,0x63,0x32,0xc2,0x57,0xbf,0xfa, + 0x82,0x7d,0xd7,0xf1,0xe9,0x67,0x9f,0xa2, + 0x62,0x26,0x84,0xcc,0xdd,0xfb,0x37,0x6c, + 0xae,0x6e,0x69,0xef,0xd7,0x18,0xa3,0x49, + 0x21,0x30,0xc4,0x8c,0xb3,0x06,0xe3,0x23, + 0x6c,0xde,0x5d,0x50,0x17,0x0e,0x65,0x0c, + 0x27,0x1f,0x54,0x38,0x57,0x72,0xf8,0xe8, + 0x1c,0x1e,0x09,0xc6,0x18,0xc6,0xb1,0xa7, + 0x9a,0x2d,0xf0,0xed,0x16,0x11,0x41,0xd9, + 0x02,0x6d,0x26,0xba,0xf2,0xee,0xe2,0x15, + 0xbb,0xd7,0x1b,0x8e,0x3f,0xfa,0x06,0xdb, + 0xcb,0xb7,0xdc,0xbf,0xbf,0xa0,0x38,0x3c, + 0xa2,0xbd,0xff,0x05,0x12,0x46,0x24,0x44, + 0x2e,0x3e,0xff,0x05,0x76,0xb6,0x22,0x8e, + 0x03,0x65,0x53,0xb3,0xd9,0x6c,0xf0,0x7d, + 0xc0,0x5a,0xcd,0xc7,0xdf,0xfd,0x01,0x9b, + 0xdb,0x2b,0xfc,0xcd,0x35,0xde,0x7b,0x14, + 0x19,0x95,0xdf,0x82,0x52,0xf4,0x39,0x53, + 0x18,0x83,0xf3,0x0b,0x7c,0x8a,0xf8,0x61, + 0xc0,0x9a,0x12,0x85,0x46,0x2b,0x45,0x46, + 0xb0,0x56,0x81,0x78,0x72,0xd6,0xbf,0x4e, + 0x34,0x52,0xb9,0xe2,0xaf,0xde,0xd5,0x2c, + 0x3f,0xff,0x37,0x74,0x6d,0x47,0xa1,0x20, + 0x23,0x64,0x04,0xb7,0xde,0x52,0x69,0x18, + 0x42,0xa4,0x2e,0x4b,0xb4,0x52,0xc4,0x9c, + 0xd1,0x22,0x84,0x3c,0xa1,0xb7,0x14,0x33, + 0x24,0x3f,0x3d,0x0f,0xb0,0x49,0x30,0x31, + 0x92,0x50,0x90,0x33,0xed,0xf5,0x15,0x97, + 0x4a,0xb0,0xc6,0xb0,0x7d,0xf3,0x8a,0x76, + 0xbf,0x27,0xc6,0xc4,0xa6,0x8f,0xcc,0x4a, + 0x87,0xe9,0x7b,0xee,0xe7,0x6f,0x69,0x77, + 0x2d,0x17,0xd7,0x1b,0x42,0x86,0x9f,0x6f, + 0x5a,0x9e,0x7d,0xfa,0x31,0xeb,0xb7,0x6f, + 0xd8,0x6e,0x77,0x68,0x51,0x84,0x90,0xe8, + 0x83,0x80,0x24,0x1a,0x63,0x48,0x39,0x63, + 0x18,0x5b,0xe6,0x64,0xb4,0xef,0xc1,0x67, + 0xae,0x9f,0xff,0x0a,0x51,0x86,0x61,0xb7, + 0x40,0x95,0x8e,0xe7,0xbf,0xfc,0x05,0xbb, + 0x76,0xe0,0xa8,0x76,0xa8,0x94,0x50,0x92, + 0x1f,0x32,0x60,0x41,0xce,0x23,0xfd,0x7a, + 0x8b,0xd5,0x7a,0x22,0x16,0x67,0x15,0x43, + 0xdb,0xd2,0xee,0xf6,0x44,0x32,0x11,0x45, + 0x63,0x04,0xa3,0x04,0xbf,0xbe,0x03,0x51, + 0xa4,0xd0,0x93,0xfa,0xc0,0x76,0x88,0xcc, + 0x93,0xe5,0xea,0xed,0x1b,0x92,0xef,0x99, + 0xc5,0x40,0x46,0x88,0x53,0x80,0x92,0xf2, + 0x04,0x1e,0x8c,0xca,0xb8,0x34,0xb0,0xcf, + 0x11,0xf2,0xc4,0xf8,0x8a,0x9a,0x90,0x93, + 0x95,0x44,0x6d,0x12,0x59,0x01,0x68,0x48, + 0xfc,0xdd,0x8c,0xb2,0x5d,0x7e,0x8b,0xf5, + 0xe6,0x4f,0xb1,0xc9,0x52,0x99,0x40,0x6d, + 0x14,0x5a,0x3c,0x0a,0x8f,0x52,0x82,0x32, + 0x25,0x21,0x45,0xf2,0x83,0xe8,0x96,0x44, + 0xa1,0x44,0x10,0x0d,0x3e,0x0b,0x63,0x4e, + 0x68,0x05,0x9b,0x2e,0x90,0x01,0xad,0x35, + 0xa5,0xb3,0xb4,0xe3,0xc8,0xe2,0x70,0x89, + 0xef,0xf6,0x1c,0x7f,0xf8,0x09,0xe4,0x44, + 0xd1,0xb6,0x08,0x9a,0xb3,0xa2,0x84,0x9c, + 0xd1,0x92,0x90,0x98,0xb0,0x45,0x83,0xae, + 0x67,0xf8,0xb1,0x27,0x67,0x61,0x36,0x6f, + 0x70,0x1f,0x7e,0xc8,0x19,0x8a,0xe8,0x3d, + 0xbb,0xf5,0x3d,0xde,0x67,0x0e,0x4e,0x57, + 0x94,0x55,0xc9,0xd0,0x0f,0x98,0x38,0x06, + 0x8a,0x07,0xb8,0xa6,0xb5,0xa0,0x52,0x22, + 0xc7,0x91,0xdd,0x9b,0xaf,0xf1,0xd5,0x8c, + 0xdd,0xfd,0x8e,0x98,0x13,0xdb,0x14,0x68, + 0xac,0x50,0x58,0x43,0x3f,0x44,0xb2,0xbf, + 0x45,0x49,0x26,0xa6,0x4c,0x59,0x18,0x42, + 0xb7,0x43,0x6a,0x47,0x7d,0x70,0x00,0xb6, + 0x42,0x52,0x44,0x5b,0x8b,0x90,0x31,0x46, + 0xe1,0x47,0x4f,0x0c,0x11,0x21,0x71,0x70, + 0x50,0xb3,0x8a,0x23,0xdb,0x61,0x64,0xb4, + 0x05,0x03,0x99,0xad,0x87,0x42,0x47,0x9c, + 0x9a,0x00,0x46,0xbd,0x98,0xb3,0x1b,0x02, + 0xa3,0xd5,0xcc,0x97,0x35,0xf7,0x21,0x21, + 0x6e,0xea,0x5b,0x51,0x19,0x50,0x9a,0x67, + 0x15,0x0c,0x41,0x50,0x18,0x62,0x0e,0xe4, + 0x04,0x3c,0x5c,0x48,0xb4,0x15,0xc3,0xd1, + 0x67,0xb4,0x6f,0xbe,0x62,0x33,0x0a,0xa0, + 0xd0,0x4a,0xf1,0xc1,0x51,0xe2,0x83,0x4f, + 0x2a,0xce,0x9b,0x25,0x3e,0x78,0xb2,0x52, + 0x8c,0x7d,0x47,0x55,0x37,0xdc,0xaf,0x37, + 0x58,0x63,0x59,0x5f,0x5d,0xd1,0xb7,0x2d, + 0xc3,0xb6,0x63,0xbe,0x58,0x12,0x86,0x1e, + 0xd7,0xd4,0x0c,0x0a,0xc6,0xfd,0x86,0x37, + 0x5f,0xbd,0xa4,0x34,0x9a,0xf5,0xdb,0x0b, + 0xc6,0x98,0xd9,0xa7,0xcc,0xa7,0xdf,0xff, + 0x0e,0xa7,0x27,0xe7,0xb4,0xbb,0x0d,0x8b, + 0xe5,0x0a,0x6d,0x2d,0xdd,0x76,0x4b,0xbd, + 0xd9,0xf0,0xab,0xd7,0x6f,0x51,0x08,0x3f, + 0xfb,0xf9,0x73,0xaa,0x65,0x8d,0x4a,0x11, + 0x32,0x3c,0xfe,0xe0,0x9c,0xb2,0x2c,0xf0, + 0xdb,0x3d,0x6f,0x5f,0xbc,0xe5,0xf6,0xe6, + 0x16,0x13,0xb5,0x25,0x14,0x6e,0x9a,0x58, + 0xc9,0xe4,0x1c,0x89,0x09,0xca,0x66,0xce, + 0x7c,0xb9,0xa0,0xdb,0xee,0x31,0x4a,0x51, + 0x96,0x05,0xda,0x28,0xc6,0x98,0x38,0x98, + 0x2f,0xe8,0x86,0x81,0xb6,0xed,0x99,0xaf, + 0x1a,0xca,0xa6,0x26,0x0f,0x7b,0xe2,0xd8, + 0x11,0x7d,0x44,0xfc,0xc8,0x38,0x04,0x62, + 0x06,0x8f,0x46,0x67,0xa6,0x09,0x3b,0x65, + 0x92,0x86,0x72,0xa6,0xc8,0x75,0xc5,0xc5, + 0x66,0x8f,0xf2,0xd7,0x28,0x14,0xd6,0x5a, + 0xda,0x90,0xf9,0xc6,0xf1,0x19,0x47,0xe7, + 0xa7,0x8c,0x63,0x44,0x75,0x3b,0xde,0xbf, + 0x7d,0xcf,0xf5,0x38,0xc0,0xa7,0x69,0x42, + 0x63,0x40,0x4e,0x09,0x15,0x03,0xc3,0xd5, + 0x4b,0x5e,0x94,0x4f,0x88,0xf1,0x41,0xd6, + 0x17,0x45,0xce,0x89,0x2c,0x19,0x8c,0xa3, + 0xfa,0xde,0xef,0xb0,0x5b,0xdf,0x63,0xf6, + 0xbb,0x07,0xbd,0x42,0xf3,0xfa,0x46,0x90, + 0x5a,0xf3,0xdb,0x3f,0x3a,0x60,0x55,0x96, + 0xf8,0xd1,0xb3,0xeb,0x7b,0xd6,0xef,0xdf, + 0xf1,0xd5,0x97,0x2f,0xd0,0xd6,0x70,0x50, + 0x37,0x3c,0xfd,0xe8,0x23,0x6e,0xbe,0x7e, + 0x45,0x8a,0x81,0x59,0xe9,0xa8,0x57,0x33, + 0xf6,0x6d,0x87,0xd3,0x8e,0xa2,0x08,0x68, + 0xad,0x51,0x29,0xe0,0x14,0x88,0x28,0x5e, + 0x7d,0xf1,0x15,0x47,0x47,0x67,0x9c,0x3c, + 0x3a,0xc7,0xc7,0x91,0x76,0xbf,0xc7,0xce, + 0x1b,0xe6,0x55,0x49,0xb3,0xd9,0xf2,0xfd, + 0xef,0xff,0x80,0xf7,0x6f,0xdf,0xd1,0x75, + 0x1d,0xb7,0x57,0xef,0x69,0xf7,0x2d,0x17, + 0xbc,0xe5,0xe0,0xf4,0x88,0xd3,0xe3,0x13, + 0x52,0x12,0xde,0x5d,0x5c,0xa3,0x4f,0x17, + 0xb3,0x1f,0x27,0x6b,0x49,0x43,0x4f,0xf0, + 0x23,0x7e,0x0c,0x94,0x65,0x85,0x2a,0x0c, + 0xd8,0x8a,0x2c,0x86,0xf3,0x4f,0x3e,0xa2, + 0x3e,0x3c,0xc4,0x58,0x4b,0x1f,0x32,0x47, + 0xc7,0xc7,0x80,0x26,0xa6,0xcc,0x30,0x06, + 0x6e,0xae,0x6f,0xc8,0xbb,0x35,0xb1,0x6d, + 0xc9,0xe3,0x48,0xd7,0xf6,0x8c,0xde,0x43, + 0x16,0x8a,0x6a,0x86,0x62,0x8a,0x5a,0xe3, + 0x1c,0x55,0x5d,0x30,0xf8,0x40,0x12,0x45, + 0xe3,0x0c,0x8f,0x56,0xc7,0x2c,0x57,0x0b, + 0x16,0x95,0xe3,0x7e,0xbd,0xe1,0xe3,0x8f, + 0x9f,0x82,0x86,0xba,0xaa,0x68,0x56,0x0b, + 0xe6,0xcb,0x15,0x5d,0x1f,0xd8,0xae,0x3e, + 0x23,0x17,0x15,0x59,0x1b,0xc0,0x30,0x1f, + 0xef,0xc8,0xc6,0xd1,0xea,0x19,0x22,0x00, + 0x0a,0x99,0x52,0x04,0x62,0x42,0x10,0x74, + 0x4e,0x88,0x73,0xc4,0xf7,0x17,0x48,0x9e, + 0xfa,0x81,0x88,0xa2,0x6d,0x33,0x1f,0x7f, + 0xb2,0xa2,0xa8,0x4a,0x42,0xf0,0x68,0xc9, + 0x10,0x02,0xf3,0xa6,0xc2,0x0f,0x23,0x8e, + 0x84,0x35,0x8a,0xe5,0xf1,0x92,0x94,0x85, + 0xe5,0xe1,0x01,0xcd,0x72,0x46,0x51,0x14, + 0xec,0xf6,0x1d,0x6d,0xef,0x31,0x02,0x4a, + 0x69,0x66,0x4e,0xb3,0xeb,0x03,0xc5,0x6a, + 0xc5,0xe6,0xfa,0x9a,0xfd,0xdd,0x1d,0x77, + 0x6f,0xdf,0xd0,0x6f,0xb7,0x34,0x8b,0x05, + 0x24,0xcf,0xe9,0xd9,0x29,0x49,0xa0,0xa8, + 0x4b,0x56,0x07,0x4b,0x56,0x8b,0x39,0xa1, + 0xeb,0xa8,0xeb,0x92,0xa1,0xed,0x78,0xf5, + 0xfc,0x35,0x97,0xd7,0x37,0x2c,0xe6,0x73, + 0x4c,0x55,0x55,0x84,0x10,0xa8,0x80,0xc5, + 0xea,0x80,0xc5,0xe9,0x09,0x59,0x69,0xfa, + 0xe4,0xb1,0xda,0xb2,0x68,0x8e,0xc8,0x61, + 0xc4,0xd5,0x35,0xd9,0x3a,0x1e,0x9d,0x1d, + 0x81,0xca,0xac,0x8e,0x56,0x84,0x18,0xd9, + 0x6d,0x36,0xac,0x96,0x0d,0x87,0x87,0x4f, + 0xc8,0xed,0x96,0xbb,0xeb,0x5b,0x54,0x82, + 0xaa,0xa9,0xe9,0x3d,0xe8,0xc2,0x32,0x3b, + 0x5a,0xb1,0x5b,0x6f,0xf8,0xe0,0xe3,0x67, + 0x78,0xdf,0xb3,0xdd,0x6e,0xa8,0xeb,0x19, + 0xfb,0xc1,0x33,0xab,0x4b,0x76,0xed,0x1e, + 0x6b,0x34,0x1f,0x3e,0x7d,0x4c,0xce,0x42, + 0x08,0x89,0x20,0x81,0xe8,0x07,0x52,0x4a, + 0xcc,0x8e,0x0f,0xc8,0xd6,0x91,0x53,0x84, + 0x9c,0x51,0x12,0x99,0x87,0x1b,0xde,0x97, + 0xdf,0x9c,0x14,0xb8,0x0c,0xfa,0x61,0x16, + 0xca,0x92,0x41,0x34,0x59,0x25,0x56,0x66, + 0xc4,0x1f,0x56,0x5c,0xcd,0x57,0xb0,0xdd, + 0x32,0xd5,0x34,0x88,0x11,0xde,0xbd,0xed, + 0xb0,0x69,0x4f,0xbf,0xdf,0x4f,0xfc,0x55, + 0x0c,0x1c,0x9e,0x1c,0x53,0x95,0x53,0xb9, + 0xcd,0x4a,0xa1,0x54,0xe6,0xec,0xe9,0x29, + 0xc6,0x16,0xec,0x37,0x3b,0xda,0xcd,0x9e, + 0x47,0x1f,0x9c,0x63,0x9e,0x19,0xac,0x06, + 0x37,0x9b,0xb1,0xb9,0xbd,0x61,0x15,0x13, + 0x8b,0xc3,0xa3,0x69,0xc0,0x53,0x8a,0xa2, + 0x28,0x27,0x5a,0x46,0x09,0x12,0x85,0xed, + 0xfd,0x3d,0x3e,0x79,0x48,0x19,0x6b,0x35, + 0x4a,0x1b,0x9e,0x7e,0xf2,0x8c,0x7e,0x1c, + 0x21,0x06,0x0e,0x0f,0x0f,0xb0,0xae,0xa0, + 0x6d,0x7b,0x4c,0xdd,0x54,0x34,0xcb,0x06, + 0x12,0xd4,0xb3,0x0a,0x5d,0x56,0x64,0x32, + 0x75,0x36,0x13,0xbb,0x9a,0x41,0x9c,0x45, + 0x89,0xc1,0x39,0x87,0xd6,0xc2,0x38,0x8e, + 0x28,0x02,0x47,0x47,0x33,0xce,0x4e,0x0f, + 0xe8,0xba,0x1d,0x29,0x25,0xf4,0xbc,0xe1, + 0xc9,0xe9,0x31,0x56,0x6b,0xfa,0xde,0xe3, + 0x87,0x40,0xf0,0x3d,0xca,0xc0,0xe1,0xa3, + 0x63,0xb6,0xdb,0x5b,0xc6,0x6e,0x98,0x48, + 0x42,0x65,0x58,0x36,0x1a,0x5b,0x6a,0x9c, + 0x9a,0xe3,0x8a,0x62,0x9a,0x73,0xfa,0x0e, + 0xa7,0x0c,0x31,0x8e,0xa0,0x27,0x24,0x25, + 0xca,0x22,0x66,0xd2,0x2e,0x05,0x61,0xd9, + 0x5e,0xb2,0xad,0x1f,0x93,0x65,0xea,0x7d, + 0x22,0x1a,0xd4,0x74,0x59,0x92,0x98,0x1a, + 0x7e,0x8e,0xd4,0xdd,0x1b,0x5c,0xee,0xb9, + 0xa9,0x17,0xa4,0xdd,0x16,0xe1,0x41,0x45, + 0xce,0x99,0x5f,0xfe,0xe2,0x3d,0x76,0xb3, + 0xc5,0x0f,0x2d,0xab,0x27,0xe7,0x94,0xae, + 0x44,0x3b,0xcb,0x6c,0xd6,0x70,0x73,0x71, + 0xc5,0xfa,0x6e,0xcd,0xf2,0x70,0x41,0x35, + 0x9b,0x93,0x7c,0xe6,0xfe,0xe2,0x96,0xfd, + 0x7e,0xc7,0x96,0x4c,0x8e,0x91,0xaa,0xae, + 0x39,0xff,0xac,0xe6,0x66,0xd3,0xd2,0xd4, + 0x73,0x5e,0xbf,0xb9,0xf8,0x3b,0xce,0xac, + 0x6e,0x6a,0x1e,0x9f,0x9f,0x53,0x54,0x8e, + 0xfb,0x8b,0x37,0x8c,0x63,0x40,0x29,0xcd, + 0xf5,0xab,0x77,0xc4,0xa1,0xa3,0x5a,0xad, + 0x38,0x7d,0x7a,0x4e,0x0a,0x23,0x19,0x28, + 0xab,0x12,0x63,0x1c,0xd6,0x19,0x4c,0xb5, + 0x6c,0xd0,0xd6,0x50,0xb8,0x49,0xdb,0x68, + 0xbb,0x96,0x10,0xe2,0x34,0xa5,0xce,0x1b, + 0x52,0x8c,0xd0,0x67,0xb4,0x89,0x90,0x3d, + 0x29,0x6a,0x76,0xd7,0x57,0x8c,0xbb,0x3d, + 0xab,0xa7,0x4f,0x18,0x25,0x22,0x29,0x91, + 0x53,0xc6,0x77,0x81,0xd8,0x6d,0x49,0x5a, + 0xd1,0xdd,0xad,0xb1,0xd6,0xa1,0xb4,0x20, + 0xb6,0x80,0xe4,0x71,0xa2,0xc1,0x5a,0x9a, + 0x7a,0xc6,0xee,0xf6,0x1a,0x53,0xd5,0x14, + 0x75,0x05,0x36,0x11,0x62,0xc0,0xef,0xf7, + 0x44,0xa5,0x29,0x5d,0x45,0x4a,0x81,0xaa, + 0xa8,0xe8,0xc7,0x11,0xc3,0xc3,0x50,0x27, + 0x53,0xdd,0xd6,0x55,0xc3,0x46,0x35,0x28, + 0xe2,0xd4,0x57,0x72,0x22,0xa5,0x4c,0x4e, + 0xd3,0x81,0x0b,0x82,0x4e,0x91,0xd2,0x38, + 0x62,0xbb,0xc5,0x8c,0x89,0xa8,0x6a,0x72, + 0x1a,0x91,0xec,0x81,0xc4,0xbe,0x83,0xb1, + 0x38,0xa4,0x59,0x35,0x13,0xfb,0x90,0x32, + 0xdb,0x9b,0x7b,0xac,0x2b,0x28,0x9a,0x0a, + 0xb5,0xdd,0x13,0x62,0x44,0x6b,0xc3,0xfd, + 0xcd,0x0d,0xbb,0xdd,0x7e,0x52,0x07,0xc9, + 0x58,0x81,0xdd,0x7e,0x87,0x20,0x38,0xeb, + 0x98,0xaf,0x56,0x2c,0xd5,0x92,0x9c,0x04, + 0x5b,0x18,0x76,0xeb,0x2d,0x75,0x61,0xb9, + 0xbf,0xb9,0xe3,0xf5,0x8b,0xd7,0x93,0x47, + 0xc1,0x28,0x24,0x4e,0x0c,0xf5,0x7c,0x39, + 0x23,0x8b,0x26,0x84,0xc4,0x7c,0xbe,0xe0, + 0xee,0xf6,0x9a,0xbb,0xeb,0x35,0x45,0x5d, + 0x61,0xb4,0x02,0x23,0x9a,0x18,0x03,0x82, + 0xa6,0xb0,0x05,0xa1,0xdf,0x30,0x74,0x2d, + 0xa2,0x35,0x55,0x59,0xd1,0x8f,0x03,0x5d, + 0xdf,0x63,0xad,0x46,0x52,0x60,0x54,0x8e, + 0x93,0x4f,0xcf,0x50,0x28,0x52,0x0e,0xf4, + 0x49,0xd3,0xf7,0x1d,0xcd,0x62,0x46,0xe9, + 0xf4,0xa4,0x57,0xf4,0x1d,0xbb,0xeb,0x7b, + 0x10,0x45,0x7b,0x7d,0x87,0xd5,0x02,0x4a, + 0xb1,0x3a,0x7f,0xc4,0xe5,0xf3,0x2f,0x21, + 0x04,0xf6,0xda,0xb0,0x51,0x8e,0xc7,0x87, + 0x73,0xd2,0xe8,0xd9,0x74,0x23,0xef,0xae, + 0x6f,0xf9,0xf6,0xc7,0xcf,0x68,0xea,0x49, + 0xbc,0x21,0x46,0x62,0x98,0x50,0x89,0x96, + 0x49,0xc4,0xdc,0xa9,0x19,0x82,0x40,0x9e, + 0x9a,0x7c,0xca,0x40,0x16,0x84,0x88,0x0a, + 0x81,0x47,0xe1,0x0a,0xfa,0x7b,0xde,0xd8, + 0x67,0x84,0x5e,0xc8,0xed,0xe5,0xc4,0xea, + 0x2a,0x8b,0x56,0x16,0x1f,0xf7,0x90,0xe1, + 0xfa,0x4e,0x38,0x3d,0x99,0x93,0x52,0x22, + 0xc5,0x88,0x2b,0x1d,0xd6,0x39,0xea,0xa6, + 0x99,0x06,0xc9,0xc2,0x82,0xc0,0xfc,0x68, + 0x12,0xbb,0xac,0xd1,0xac,0xef,0xee,0xc8, + 0x29,0xb3,0x3c,0x3a,0x9c,0xc8,0xd0,0xc5, + 0x82,0x83,0xa3,0x03,0x52,0x0c,0x58,0x6b, + 0x89,0x7e,0x64,0xb6,0x58,0xb2,0xdf,0xad, + 0xb1,0x66,0x32,0x80,0x54,0xd6,0x11,0x83, + 0xa7,0x39,0x5c,0x10,0x86,0x9e,0x7a,0xd1, + 0x10,0xc2,0xc0,0x38,0x8e,0xdc,0xbc,0x79, + 0x8f,0x2e,0x0c,0x9b,0x4d,0x4b,0x99,0x04, + 0x93,0x52,0xe6,0x6e,0xbd,0x46,0x72,0x46, + 0xb2,0xd0,0xd4,0x0d,0xc5,0x7c,0xc6,0xec, + 0xf8,0x08,0x63,0x35,0x88,0xe6,0xd5,0xcb, + 0xd7,0x9c,0x9c,0x9e,0x22,0x02,0x6d,0x3f, + 0xd0,0x54,0xd5,0x54,0x4e,0x42,0x26,0x6b, + 0xc7,0x6c,0x35,0x43,0x6b,0x83,0xd6,0x0a, + 0xfa,0x0d,0x98,0x8a,0xb0,0xef,0x90,0x18, + 0x18,0xe3,0xc4,0x9a,0x4a,0x16,0x6c,0x69, + 0x30,0xf3,0x39,0x76,0xb3,0xe3,0x7e,0xb3, + 0xc1,0x1d,0x9f,0x70,0xbb,0x6d,0xe9,0x7c, + 0xa0,0x34,0x16,0x91,0x84,0x32,0x16,0xc9, + 0x89,0xe0,0x47,0x94,0xae,0xb1,0x65,0x89, + 0xbf,0x5b,0xc3,0x61,0x24,0x21,0x88,0x68, + 0xce,0x2b,0xc5,0xe5,0x00,0x08,0x48,0x4e, + 0xa8,0x94,0x39,0x2d,0x32,0xa7,0x8d,0xf0, + 0xfe,0xa6,0xe5,0x46,0x1f,0x70,0x2f,0x47, + 0x84,0x2f,0x3e,0xa7,0x7c,0xfe,0x0a,0x95, + 0x33,0xe9,0xc1,0x25,0x29,0x08,0x56,0xcd, + 0x88,0x69,0xcf,0xfd,0x3a,0xb1,0xb9,0xbe, + 0x67,0xbb,0x59,0x63,0x0a,0xcb,0xf2,0xf8, + 0x04,0x33,0x78,0xc6,0xbe,0x63,0xf0,0x91, + 0xc2,0x3b,0xda,0x76,0xe0,0xf1,0x87,0x4f, + 0x70,0x45,0xc5,0xbe,0xdd,0x71,0x3c,0x3b, + 0x27,0xf9,0x8c,0xb6,0x8a,0xb7,0x2f,0x5e, + 0x71,0x78,0x72,0x84,0xef,0x5b,0x12,0xc2, + 0x30,0xf6,0x94,0xc5,0xd4,0xeb,0xaa,0x7a, + 0x86,0xd7,0x8e,0xf3,0x8f,0x3f,0xe2,0xf0, + 0xf0,0x88,0x76,0xbf,0x46,0xc9,0xe4,0x80, + 0x14,0xa5,0xe9,0xd6,0x77,0x94,0x55,0x89, + 0x2a,0x26,0x92,0xf2,0xbb,0x3f,0xf8,0x16, + 0x51,0x40,0xfe,0xe0,0x3b,0x1f,0xe5,0x10, + 0x13,0x4d,0x5d,0xe2,0xac,0xa5,0x28,0x4b, + 0x4e,0x1f,0x1d,0x73,0xb0,0x9a,0x93,0x25, + 0xd3,0x8f,0x91,0x14,0x23,0xed,0x10,0x50, + 0x64,0xfa,0x21,0xd0,0x6f,0x7b,0x8e,0x1f, + 0x1f,0x92,0xc2,0x80,0x76,0x25,0xdb,0xf5, + 0x3d,0x39,0x0b,0x87,0xc7,0x47,0xf4,0xdd, + 0x8e,0x71,0xb7,0xc7,0x64,0x21,0x0c,0x23, + 0xc3,0x30,0xa2,0x8c,0x60,0xac,0x63,0x7e, + 0xb0,0x42,0x17,0x8e,0xdd,0xfd,0x9a,0xcb, + 0xcb,0x1b,0x9a,0x79,0x0d,0xe5,0x8c,0x61, + 0x8c,0x2c,0x66,0x15,0x47,0xab,0xc5,0x54, + 0x9f,0xab,0x07,0x91,0x69,0x3a,0x73,0x9e, + 0xbf,0xba,0xe1,0xab,0x47,0x7f,0x48,0x3c, + 0x38,0x47,0x6c,0xc1,0xc9,0xa2,0xe6,0x69, + 0x95,0xf9,0xad,0xcf,0x9e,0x60,0x8c,0xb0, + 0xf5,0x89,0x3f,0x7f,0x71,0xcb,0xe7,0x6f, + 0xf7,0x0c,0x41,0xc8,0xdb,0x0d,0xf1,0x67, + 0x3f,0xa5,0xbe,0xbd,0x23,0xa7,0x9e,0x18, + 0x5a,0x46,0xbf,0x81,0x18,0x10,0x11,0x10, + 0xfd,0x40,0xa3,0x0f,0x9c,0x97,0xcf,0x51, + 0xd9,0x93,0x73,0xc2,0xbb,0x92,0xca,0x68, + 0xc4,0x59,0xea,0xba,0xa0,0xdd,0x77,0xc4, + 0x00,0xe5,0xbc,0xe6,0xe4,0x78,0xce,0xbb, + 0xf7,0xb7,0x2c,0xe6,0x4b,0x3e,0xf9,0xe6, + 0x27,0x8c,0x7e,0x60,0xe8,0x7b,0xc8,0x01, + 0x57,0x54,0xc4,0x94,0x79,0xfd,0xe5,0x97, + 0x1c,0xad,0x96,0x74,0x9b,0x0d,0x61,0x0c, + 0x04,0x6b,0xa9,0x9a,0x86,0x8c,0xb0,0x3c, + 0x58,0x60,0x9c,0x25,0x8b,0x82,0xf4,0xf0, + 0x8f,0x85,0xc9,0x4e,0xe5,0x83,0x9f,0x02, + 0xc5,0x69,0xcc,0xc9,0xd9,0x31,0xce,0x59, + 0xca,0xca,0x41,0x16,0x36,0x9b,0x1d,0x28, + 0x61,0xd3,0xf7,0xa4,0x34,0x7d,0xd3,0x8f, + 0x9e,0x76,0xef,0xd1,0x3a,0x03,0x8a,0x66, + 0x59,0x43,0x8c,0x0c,0x7d,0x4f,0x6c,0x77, + 0x80,0xc2,0x28,0xc5,0xfd,0xf5,0x7b,0xb2, + 0x08,0xd6,0x39,0x52,0x4e,0xa0,0x2c,0x63, + 0xe8,0xa6,0x54,0xdf,0xdc,0x72,0xdf,0xee, + 0xb1,0x85,0x41,0x8b,0xa2,0x6a,0x1c,0xdb, + 0xed,0x9e,0x6f,0x3c,0x7a,0x44,0xe1,0x26, + 0x16,0x56,0x09,0xb8,0xba,0x64,0x08,0x81, + 0x52,0x65,0x42,0x8a,0xdc,0xdf,0xb5,0xbc, + 0xfc,0xba,0x26,0xa7,0x4b,0xe2,0xec,0x14, + 0x49,0x9a,0xeb,0xf5,0xc0,0x5d,0x6b,0xf9, + 0x9b,0x7f,0xf7,0x96,0x94,0x12,0x71,0x4c, + 0x84,0xde,0x13,0x2f,0x2f,0x71,0x17,0x57, + 0xb8,0xbb,0x3b,0x5c,0x8e,0x44,0x99,0x3c, + 0x50,0x59,0x5b,0x4c,0xb4,0x84,0xe8,0xc9, + 0xd9,0x03,0x76,0x9a,0xec,0xc5,0xa1,0x75, + 0x85,0x84,0x81,0x2c,0x09,0x53,0x4c,0xd9, + 0xf9,0xe8,0xfc,0x98,0x7a,0xb9,0xe2,0xf2, + 0xd5,0x05,0xf7,0xd7,0xf7,0x84,0xb6,0x27, + 0xb3,0x24,0xfa,0x88,0xd5,0x8a,0xb7,0xaf, + 0xbe,0xa6,0x68,0x6a,0x8a,0xa2,0xc0,0xda, + 0x19,0x63,0xe8,0x19,0xba,0xc0,0xf6,0xf2, + 0x9a,0xee,0xf2,0x12,0xcb,0xa4,0x30,0x2a, + 0x81,0x21,0x27,0x40,0xb1,0x35,0xc2,0xe2, + 0xf4,0x94,0xe6,0xf1,0x23,0x82,0x1f,0xa8, + 0x67,0x33,0xca,0xd9,0x9c,0x1c,0x33,0xef, + 0x7f,0xf5,0x15,0x87,0xa7,0x87,0x5c,0x5f, + 0x6e,0x30,0xed,0xd0,0x91,0x88,0xb4,0xc1, + 0x13,0xd3,0xe4,0xa4,0x0b,0x57,0xd7,0x08, + 0x60,0xad,0x63,0xf4,0x81,0x71,0xec,0xd0, + 0xca,0x20,0x92,0x70,0xd6,0xe1,0xac,0xe1, + 0x6e,0xed,0x99,0xd5,0x05,0xdd,0x66,0x8b, + 0x88,0xc2,0x1a,0xc8,0x49,0x08,0x29,0x60, + 0x8c,0xa5,0x28,0xf4,0xa4,0xb6,0xf9,0x91, + 0x60,0x2a,0x7c,0x12,0x88,0x89,0xd4,0x7b, + 0x8a,0xd2,0xa0,0xd0,0xb8,0xba,0x60,0xbf, + 0xdb,0x51,0x1c,0x1e,0x90,0x43,0xa0,0x1d, + 0x47,0x76,0x1b,0xe1,0xf8,0xd1,0x21,0x31, + 0x26,0x86,0x21,0xf0,0xfc,0x75,0x43,0xc8, + 0x15,0xdd,0x17,0x9f,0x63,0x74,0x85,0x3f, + 0x3e,0xc7,0xbb,0x92,0x2c,0x0a,0x3d,0x26, + 0xf4,0xbe,0xc3,0xad,0xb7,0x34,0x9b,0x1d, + 0x2e,0x45,0x72,0x8a,0x44,0xa5,0x48,0x29, + 0x3e,0x58,0x62,0x2d,0x5a,0x22,0xa2,0x4b, + 0x52,0x1c,0x49,0x29,0x20,0x4c,0x19,0x21, + 0x4a,0x28,0x8c,0xa7,0x4f,0x1a,0x57,0x16, + 0x2c,0x8f,0x17,0x94,0xca,0x62,0xeb,0x0a, + 0x6d,0x14,0x87,0x67,0x87,0xb8,0xa6,0x64, + 0x36,0x2f,0x10,0x51,0x9c,0x9c,0x2d,0xc9, + 0x44,0xd0,0x8a,0x7e,0xec,0xd0,0x4a,0xd8, + 0xee,0xf6,0x14,0x85,0x65,0xe8,0x3a,0xba, + 0xb6,0x67,0x6e,0x15,0xda,0x5a,0x20,0x91, + 0xd2,0x54,0x4e,0x13,0x81,0x98,0x15,0x5d, + 0xd7,0xb2,0xb4,0x96,0xf9,0x7c,0x86,0x76, + 0x25,0xd7,0xef,0xef,0x98,0x2f,0x1a,0x8e, + 0x4f,0x96,0xac,0xdb,0x3d,0xbb,0x71,0xc4, + 0xa4,0x10,0xb9,0x6d,0x37,0x80,0x90,0x8d, + 0x21,0xf8,0x91,0xfd,0x26,0xa3,0xf4,0x44, + 0x35,0x8c,0xde,0x63,0xac,0x43,0x6b,0x8f, + 0xd6,0x9a,0x3e,0x24,0x6a,0x4a,0xb4,0x64, + 0x86,0x76,0xff,0x60,0xd1,0x49,0xf8,0xa8, + 0xc1,0x28,0x94,0xb2,0x88,0xd1,0x0c,0x09, + 0x62,0xf4,0x04,0x84,0x61,0x3b,0x10,0xb3, + 0xe0,0x8c,0x22,0xc6,0x4c,0xca,0x42,0x52, + 0x82,0x11,0x48,0xc9,0x33,0x0e,0x61,0x32, + 0x3e,0x2b,0xcd,0xd5,0xfa,0x96,0xed,0x6e, + 0x4d,0xb3,0x38,0xe0,0xab,0x97,0x8e,0xdd, + 0xbe,0x82,0x14,0x20,0x0c,0x98,0x2f,0x5f, + 0xd1,0xbc,0xba,0x43,0x9b,0x02,0xa7,0x0b, + 0xb4,0xb2,0x93,0xb5,0x14,0x20,0x2b,0x32, + 0x53,0x9f,0x01,0x8d,0x10,0x11,0x31,0x44, + 0x09,0x38,0x5d,0x10,0x72,0x26,0x1a,0x3f, + 0xd1,0x25,0x29,0x00,0x01,0x91,0x8c,0x3b, + 0x3d,0xa4,0x32,0x82,0x75,0x13,0xb9,0xd7, + 0xc6,0x44,0xbb,0xbe,0x67,0xd6,0xf7,0xb4, + 0x6d,0x47,0xc6,0xb3,0x7d,0x7b,0x8b,0x22, + 0xb2,0xdd,0xf7,0x74,0xe3,0x24,0x64,0xcd, + 0x17,0x73,0xec,0x99,0x26,0xa5,0x88,0x55, + 0x25,0xf7,0x63,0xcf,0xc7,0x3f,0xf8,0x36, + 0x95,0x73,0xe4,0x18,0xb9,0xbe,0xb8,0x22, + 0xc7,0x88,0x55,0x42,0x6e,0x5b,0x12,0x99, + 0xd9,0xf1,0x21,0x37,0x37,0x37,0xcc,0x67, + 0x33,0x94,0xec,0x51,0x39,0xd2,0xb5,0x2d, + 0x58,0xcb,0xc2,0x15,0xec,0x36,0xef,0x30, + 0x3e,0x66,0x4a,0xab,0x89,0x29,0xe2,0x63, + 0xa0,0x30,0x30,0x46,0x85,0xcf,0x30,0x8e, + 0x9e,0x10,0x03,0x49,0x19,0x2a,0xad,0xb0, + 0x4e,0x4d,0xde,0xdf,0xe8,0x27,0x99,0xd6, + 0x3a,0x52,0x4c,0xa4,0x9c,0xa7,0xda,0x1c, + 0x3d,0x3e,0x65,0xba,0xa1,0xc7,0x95,0x05, + 0x7d,0x3f,0xe2,0x43,0x22,0x66,0x21,0xc6, + 0x88,0x78,0x85,0x90,0x49,0x52,0xe0,0xb4, + 0xa2,0xef,0x7b,0xdc,0x30,0xf0,0xfa,0xe6, + 0x25,0x87,0x87,0x07,0xcc,0x96,0x33,0x3e, + 0xfc,0xf4,0x43,0xc2,0x18,0xf8,0xf2,0xab, + 0xc0,0x6e,0x3b,0x23,0x4b,0x20,0xc7,0x11, + 0x63,0x0a,0x2a,0x53,0x61,0x95,0x43,0x8b, + 0x41,0x72,0x46,0x3d,0x58,0x7f,0xf2,0xaf, + 0x91,0x16,0x13,0xac,0x84,0x8c,0xc6,0x22, + 0xca,0xa3,0x94,0x23,0x25,0x8f,0x32,0x15, + 0x26,0x05,0x42,0xec,0x41,0x25,0x84,0x84, + 0x92,0x81,0xcb,0xab,0x2b,0x94,0xca,0x13, + 0x71,0x99,0x33,0x31,0x4e,0xf7,0x6b,0x94, + 0xd0,0x0d,0x23,0xb3,0xa6,0x24,0xe5,0x4c, + 0xce,0xb0,0xdb,0x8f,0x18,0x67,0x48,0x29, + 0xd2,0xed,0x36,0x7c,0xdd,0xb7,0x34,0xcb, + 0xc9,0xf7,0x25,0x4c,0xe6,0xec,0x4c,0x24, + 0x66,0xa8,0x4e,0x8e,0xb1,0x92,0xd1,0xce, + 0xe2,0x43,0x40,0xe9,0xc9,0x12,0x44,0xbb, + 0x67,0xbb,0xdd,0x20,0x29,0xa3,0xad,0xc6, + 0x44,0x0d,0x49,0x61,0x0b,0xcb,0x7c,0x59, + 0x62,0x46,0xef,0x49,0x92,0xc8,0x39,0xa1, + 0x94,0x25,0x45,0xe8,0xfa,0x01,0xa5,0x14, + 0x46,0x81,0xd1,0x1a,0x25,0x50,0x39,0xa1, + 0xb6,0x6e,0x12,0xb2,0x52,0x7e,0x60,0x64, + 0x15,0xd6,0x99,0x09,0x5f,0xa7,0x88,0xcf, + 0x93,0x1e,0xed,0x8c,0xa5,0xdb,0x75,0x88, + 0xd2,0x18,0x6d,0xf0,0x3e,0x21,0x4a,0x63, + 0xcd,0xe4,0x3d,0x8a,0xe3,0x48,0xc2,0xa1, + 0x45,0x31,0x8e,0x81,0x7a,0x56,0x52,0x2e, + 0x2a,0xb4,0xb5,0x44,0x1f,0x79,0x77,0xd9, + 0xf3,0xfa,0x62,0x86,0x52,0x32,0xd1,0xe9, + 0x44,0xac,0x69,0xa6,0xec,0x13,0x80,0xe9, + 0x79,0x59,0x64,0xa2,0x44,0x04,0x84,0x44, + 0xce,0x42,0x16,0x30,0x28,0xa2,0x4a,0x48, + 0x9e,0xca,0xac,0x28,0x8b,0x16,0x8d,0x2d, + 0x97,0x94,0xd6,0xd0,0x75,0xd7,0xa4,0x3c, + 0xa0,0xe4,0x86,0x14,0x3d,0x2a,0x0b,0x21, + 0x46,0x12,0x9a,0x98,0x21,0xa6,0x8c,0x67, + 0x32,0x40,0xf4,0x43,0x80,0x2c,0x28,0x67, + 0x58,0x2e,0x6a,0x14,0x11,0x6d,0x0d,0x83, + 0xcf,0xac,0xef,0x5b,0x52,0xdf,0x93,0x76, + 0x1b,0x16,0xa5,0x70,0xbb,0xe9,0xb8,0xbe, + 0xb5,0x34,0x4d,0xc3,0x7c,0x31,0x43,0x1b, + 0xcd,0xcd,0xe5,0x15,0x21,0x4c,0xb2,0x6f, + 0xf0,0x91,0xba,0x50,0x68,0x14,0xde,0x7b, + 0xb4,0x35,0x88,0x52,0x34,0xa5,0x61,0xec, + 0x0d,0xdd,0xbe,0xc3,0xcc,0x0a,0x8d,0x8f, + 0x42,0x48,0x82,0x52,0x19,0xef,0x13,0x31, + 0x66,0x20,0x51,0x16,0x25,0x83,0x0f,0x48, + 0xca,0x58,0x53,0x82,0xd1,0x84,0x98,0x26, + 0xd3,0x57,0x8c,0x38,0x9d,0xc8,0x31,0x61, + 0x95,0x9e,0xb2,0xc2,0x94,0x8c,0x63,0x8b, + 0xd5,0x0a,0x6f,0x14,0x56,0x34,0xc6,0x2a, + 0x44,0x02,0x29,0x46,0xe2,0x30,0x62,0xad, + 0xa6,0xb6,0xa0,0xd3,0xc8,0x90,0x27,0x0b, + 0xce,0xd0,0x0e,0x74,0x5b,0x03,0x0d,0x1c, + 0x9f,0x9d,0x33,0xb4,0xee,0x21,0xd6,0x15, + 0x8a,0x44,0x14,0x85,0xb3,0x0d,0x4a,0x14, + 0xa2,0x26,0x28,0x0e,0x02,0x39,0x4f,0xf4, + 0x39,0xd3,0x0e,0x48,0x82,0x87,0xf5,0x03, + 0x10,0x11,0x44,0x32,0x64,0x8d,0xd6,0x9a, + 0xca,0x08,0x8f,0x1e,0x8f,0xcc,0x17,0x03, + 0x26,0x9f,0xb2,0xdf,0xef,0xf9,0xe0,0x93, + 0xef,0xf0,0x7f,0xff,0xe9,0xbf,0x63,0xe8, + 0x2f,0x11,0x35,0x55,0xc6,0x94,0xc2,0x24, + 0xa9,0x2a,0x3d,0x95,0xd7,0x03,0x30,0xaf, + 0x72,0x00,0x00,0x20,0x00,0x49,0x44,0x41, + 0x54,0x94,0x68,0x9a,0x12,0xc9,0x99,0x6e, + 0xf4,0x88,0xb5,0xc4,0x3e,0xd1,0xb5,0x03, + 0x87,0xb5,0x21,0xe5,0xc8,0x18,0x23,0xeb, + 0x7d,0x26,0xf8,0x84,0xd6,0x91,0x76,0x7d, + 0xcf,0x7e,0x33,0x59,0x9e,0x8c,0x08,0xce, + 0x2a,0xac,0x35,0xac,0xfb,0x01,0xad,0x1a, + 0x7c,0x48,0x6c,0x7d,0xa2,0x56,0x91,0xb1, + 0x0f,0xec,0xf6,0x3d,0x95,0xb3,0xc4,0x18, + 0x31,0x63,0x14,0x9a,0xba,0x22,0xe5,0x00, + 0x68,0x16,0x0d,0x2c,0x7d,0xa4,0x8b,0x50, + 0x37,0x25,0x7a,0xf0,0xa8,0x94,0x18,0x87, + 0x1e,0xc7,0x84,0x32,0x0a,0xab,0x30,0x5a, + 0xe1,0xf3,0x44,0xe4,0xcd,0x66,0x86,0xd2, + 0xce,0x49,0x49,0x50,0x66,0xba,0xd8,0x76, + 0x0c,0x24,0xa3,0x69,0xc7,0xc8,0x62,0xbe, + 0xc4,0x8f,0x1d,0xd1,0x7b,0x42,0xca,0xc4, + 0xa4,0x1e,0x56,0x17,0x7a,0xb4,0xd5,0x28, + 0x25,0x5c,0x5f,0x5e,0x61,0xca,0x2d,0xdd, + 0xbe,0x67,0x7d,0xa3,0xd0,0x9c,0x23,0x02, + 0x59,0x40,0x65,0x8d,0x51,0x05,0x5a,0x4f, + 0xa2,0xd8,0x24,0xfa,0xfe,0xba,0x38,0x4d, + 0x07,0x2f,0x59,0x23,0x12,0x89,0x4c,0x06, + 0x86,0x94,0x41,0xa9,0x82,0xca,0x3a,0x0e, + 0x96,0x6b,0xfe,0xd1,0x1f,0x7d,0xca,0xb3, + 0xcf,0x3e,0xe2,0xed,0xd7,0xcf,0xf9,0xf8, + 0x9b,0x9f,0xb2,0xdd,0xb4,0x8c,0xe3,0x9e, + 0x3e,0x54,0xfc,0x8f,0xff,0xfc,0x4f,0xa9, + 0xdd,0x16,0x57,0xf6,0x14,0x4e,0xff,0xfa, + 0xa9,0x58,0x37,0x1d,0xa4,0x52,0x8a,0x18, + 0x13,0xf7,0xbd,0x67,0x25,0x99,0xe8,0x3d, + 0xa5,0x44,0xca,0xa2,0xc4,0x2a,0x43,0x48, + 0x89,0x75,0x17,0xa8,0x9c,0xa5,0xf5,0x11, + 0xad,0x14,0xfb,0xde,0x33,0x33,0x96,0x71, + 0x8c,0x54,0x32,0xa1,0xd3,0xe5,0x72,0x41, + 0x37,0x8c,0x84,0xa8,0x10,0x34,0x4a,0x59, + 0x72,0x6c,0x09,0x59,0x71,0x71,0xb5,0x61, + 0x51,0x39,0x8c,0x32,0x9a,0x7d,0xe7,0xa9, + 0x0a,0x83,0x36,0x8a,0x76,0x9c,0x2e,0xa6, + 0x2e,0x14,0x7e,0x8c,0xe8,0x98,0xa8,0x4b, + 0x4d,0x0e,0x99,0x31,0x04,0x72,0xc8,0x84, + 0x54,0xb0,0x1f,0x3d,0x4e,0x4d,0x27,0x36, + 0x84,0x48,0x8a,0x79,0xa2,0x2d,0x14,0x18, + 0x67,0xb1,0xce,0xb0,0x6c,0x1a,0xf6,0xbb, + 0x3d,0x82,0xc7,0x68,0x85,0xd5,0x0e,0x51, + 0x02,0x22,0x88,0x28,0x9c,0x71,0x93,0x24, + 0x9a,0x22,0x7e,0x68,0x11,0x25,0xdc,0x5c, + 0xbd,0xe1,0x7e,0x9b,0x28,0x9a,0xa7,0x53, + 0xf3,0x4f,0x23,0x46,0x97,0x68,0x31,0x13, + 0xaf,0x26,0x42,0xfa,0xf5,0x40,0x28,0x1a, + 0xd4,0xb4,0x2a,0x91,0xb3,0x27,0xcb,0xe4, + 0xa7,0x42,0x29,0x0a,0xed,0x58,0xd5,0x81, + 0xdf,0xfd,0x87,0x33,0xfe,0x83,0x7f,0xf0, + 0xfb,0xc4,0x0c,0xf7,0x9b,0x35,0x67,0x1f, + 0x7c,0x80,0x1f,0x3a,0x6c,0x59,0x91,0x63, + 0xcf,0xf1,0xe9,0x31,0xce,0x9e,0xd0,0x8e, + 0x15,0xfb,0x7e,0xa0,0x2a,0xf7,0x1c,0x2d, + 0x46,0x0a,0x17,0xa7,0x61,0x32,0x25,0x94, + 0x36,0x8c,0xc1,0x33,0x73,0x9a,0x10,0x03, + 0xab,0x52,0x4f,0x82,0x56,0x4e,0x28,0x64, + 0x0a,0x50,0x53,0x10,0x87,0x11,0xad,0x60, + 0xd5,0x58,0x4a,0x67,0x48,0x39,0x71,0xdd, + 0x76,0xb8,0x72,0xce,0x76,0x08,0xec,0xd7, + 0x2d,0x75,0xdd,0xe0,0xc7,0xc0,0x10,0x03, + 0xca,0x6a,0xaa,0xa6,0x61,0xbb,0x1f,0x27, + 0x42,0x12,0x30,0xa4,0x84,0x16,0x18,0xc6, + 0x11,0x15,0x2c,0x42,0xc2,0x90,0xb1,0x69, + 0xb2,0xeb,0x07,0x89,0x8c,0x43,0x7c,0xf0, + 0x5a,0x29,0x7c,0x62,0x5a,0xe8,0x61,0xda, + 0xa8,0x1a,0x62,0x42,0x87,0xc9,0x89,0x68, + 0x8c,0x46,0xa1,0xd8,0xdf,0x6d,0x31,0xc6, + 0xb2,0xcf,0x3d,0x56,0x0b,0xfb,0x7d,0x3b, + 0xd1,0x1c,0xa2,0x70,0x76,0x22,0x0c,0xc7, + 0xd1,0x93,0xd2,0xf4,0xbb,0xc8,0x89,0xaa, + 0x99,0xb3,0x6e,0x07,0xb2,0x08,0x81,0x1e, + 0xed,0x6f,0xc0,0x9c,0x90,0x92,0xa7,0xb0, + 0x4b,0xb4,0x3c,0x10,0x8d,0x0f,0x23,0x1d, + 0xf2,0x50,0xae,0x1e,0xd0,0xd5,0x64,0x04, + 0x8f,0x68,0x55,0x50,0xd9,0xc4,0xb7,0xbf, + 0x25,0xfc,0xe3,0x3f,0xf9,0x21,0x45,0xed, + 0x00,0xcf,0xe5,0xdb,0x77,0x9c,0x9c,0x3d, + 0xa6,0xeb,0xb6,0xe4,0x64,0x30,0x2e,0x82, + 0x68,0xee,0x6e,0x07,0x8c,0x2e,0x11,0xb1, + 0xa4,0xe8,0x19,0xc6,0x8a,0x37,0x57,0x03, + 0xab,0xc5,0x8e,0x59,0xb5,0xc3,0x39,0x8b, + 0x8f,0x09,0x6d,0x35,0x73,0x3b,0xed,0x96, + 0x48,0xe1,0xa8,0x74,0xa6,0x74,0x96,0x90, + 0xa7,0xf9,0xff,0xf6,0xbe,0xa3,0x71,0x16, + 0x25,0x89,0x98,0xc1,0x19,0xe1,0x6e,0xe7, + 0x39,0x5e,0xd6,0xbc,0xb9,0xd9,0x73,0xb6, + 0x2a,0xe9,0xc7,0xcc,0x3e,0x74,0x3c,0x39, + 0x6c,0x68,0x70,0xd4,0x95,0x03,0x60,0xf0, + 0x09,0xd1,0xb0,0xde,0x0d,0xe8,0x4f,0x3e, + 0x38,0xfe,0xb1,0x0f,0x9e,0x71,0xf0,0x4c, + 0xbc,0x96,0xa2,0x2c,0x1d,0xd6,0xda,0x89, + 0x3e,0xce,0x11,0xeb,0xcc,0x54,0x28,0x72, + 0x9a,0x2e,0x46,0xa0,0xa8,0x0a,0xe2,0x43, + 0x0d,0xb7,0x4a,0x50,0x4a,0x33,0x8c,0x9e, + 0xa1,0xef,0x51,0x02,0x39,0x06,0x06,0x3f, + 0x92,0xa6,0xde,0x88,0xb2,0x1a,0xa3,0x15, + 0xbd,0xf7,0x53,0x93,0x4b,0x89,0x94,0x23, + 0x7d,0x3f,0xa0,0x72,0x82,0x1c,0x71,0x6e, + 0xca,0x20,0xad,0x35,0x17,0xef,0x5f,0xb2, + 0x9c,0x3d,0x21,0xa2,0x29,0xdc,0x12,0xa5, + 0x8a,0x07,0x0f,0xd6,0x94,0x5d,0x4a,0xd4, + 0x94,0x69,0x0f,0xd7,0xa4,0x94,0x62,0xe6, + 0x0c,0xf3,0xea,0x82,0x3f,0xfe,0x4f,0x9f, + 0xf2,0xdd,0x1f,0x3d,0x61,0xbe,0x9c,0x63, + 0xad,0xe3,0xeb,0xaf,0x9e,0xf3,0xcd,0xef, + 0x7c,0x8f,0x6e,0xbf,0x27,0xf8,0x11,0x63, + 0x0c,0x43,0x7b,0x8f,0xb5,0x05,0xe7,0x8f, + 0x97,0x3c,0x3e,0x3d,0x60,0x7d,0xd3,0x33, + 0x0c,0x86,0x38,0x49,0x37,0xf4,0x63,0x49, + 0xdb,0x25,0x90,0x8e,0x98,0x3c,0x5a,0x20, + 0xa4,0x38,0x39,0xec,0x8d,0x42,0x2b,0x83, + 0x8f,0x89,0xc1,0x47,0x8c,0x31,0x74,0x9d, + 0xa7,0x2e,0x15,0x85,0xb3,0x64,0x11,0x86, + 0x30,0x79,0x9e,0x43,0x4c,0xa0,0x0c,0x21, + 0x6b,0xba,0x10,0x09,0x31,0x51,0x39,0x43, + 0x53,0x39,0xda,0xb6,0x27,0xa4,0x84,0x22, + 0xe1,0xc7,0x71,0xe2,0xbe,0x1e,0x1d,0x2d, + 0x7e,0x3c,0x8c,0x71,0x62,0x19,0x49,0x64, + 0x14,0x93,0x7f,0x21,0x31,0xf4,0x3d,0xc1, + 0x67,0xc6,0xde,0xa3,0xd5,0xe4,0xda,0xf3, + 0x31,0x10,0x73,0x26,0x8c,0x23,0x3e,0x44, + 0x7a,0x1f,0x09,0x89,0xc9,0xc2,0x99,0x21, + 0x3c,0xd4,0xd0,0xc9,0x17,0x32,0xc1,0x5d, + 0x65,0xf4,0x34,0x07,0x24,0x21,0x47,0x48, + 0x39,0x12,0xfd,0x88,0x25,0x61,0x8c,0x21, + 0x2b,0xcd,0x18,0x99,0x68,0x05,0xa5,0xd0, + 0x4a,0xe8,0xc7,0x3d,0x97,0x37,0x6f,0x58, + 0xd4,0x67,0x54,0xb6,0xa1,0x28,0x1a,0x0a, + 0xed,0xd0,0xc6,0xa2,0xd1,0x28,0x05,0x4e, + 0x65,0x9c,0x06,0x09,0x37,0xf4,0x9b,0xbf, + 0xe4,0x37,0x1e,0xbf,0xe6,0xb7,0xbf,0x59, + 0x10,0x77,0xef,0x51,0x3e,0x82,0x0f,0x7c, + 0xf1,0xc5,0x57,0x7c,0xfb,0x7b,0xbf,0x81, + 0x29,0x2a,0x32,0xa0,0x32,0x18,0x6d,0x10, + 0x60,0xb7,0x7e,0x4f,0x17,0x84,0x72,0xe6, + 0x88,0x29,0x70,0xf1,0x36,0x10,0x52,0x20, + 0xe7,0xc9,0x46,0x1a,0xa2,0xa3,0x1f,0x35, + 0x75,0x31,0x60,0x54,0xc4,0xd9,0xc9,0x1a, + 0x94,0x63,0x22,0x84,0xf8,0x6b,0x5c,0x41, + 0xdf,0x8d,0xa4,0xe0,0xe9,0x86,0x00,0x08, + 0x63,0x48,0xec,0xba,0x11,0xe3,0x34,0x29, + 0x29,0x44,0x29,0x2a,0x27,0x1c,0x2f,0x2a, + 0x9a,0xca,0x10,0x43,0xa4,0x1f,0xc6,0xc9, + 0x3f,0x40,0xa6,0xb0,0x1a,0x92,0x30,0x8e, + 0x03,0xf2,0x07,0xdf,0xff,0x24,0x8f,0x3e, + 0xe2,0xac,0xa2,0x30,0x1a,0x2d,0x20,0x7a, + 0x22,0xbc,0x52,0xcc,0x78,0x3f,0x35,0x2b, + 0x1f,0xa7,0x14,0x57,0x0a,0x6c,0x59,0x93, + 0x53,0x24,0xa5,0x29,0x0a,0xc6,0x18,0x08, + 0x69,0xda,0xff,0xd3,0x5a,0xe3,0xac,0xc1, + 0xf7,0x7b,0xfc,0xe8,0x29,0xab,0x7a,0x72, + 0xcb,0xa7,0x84,0xf7,0x71,0x5a,0x8b,0x93, + 0x8c,0x28,0x8d,0x0f,0x01,0x01,0x8c,0xb5, + 0xc4,0xc4,0xf4,0x7d,0x14,0x31,0x03,0x39, + 0xf2,0xb3,0xe7,0xaf,0xd9,0xb5,0x7e,0x6a, + 0xe0,0x62,0x28,0x5c,0x33,0x0d,0x85,0xaa, + 0xe4,0x1b,0x1f,0x9e,0xf3,0xad,0x6f,0x9f, + 0xd3,0xde,0x5e,0x72,0xd4,0x94,0x3c,0x39, + 0x38,0x60,0x55,0xc0,0xa3,0xe3,0x03,0x0e, + 0x16,0x2b,0xb6,0xeb,0x2d,0xaf,0xef,0xb6, + 0xfc,0xbd,0x3f,0xf9,0xcf,0xa0,0xa9,0x88, + 0x49,0xf0,0xe3,0x48,0x4e,0x19,0x57,0x4e, + 0x1b,0x4f,0x7f,0xf9,0x6f,0x7f,0xc1,0xff, + 0xf1,0x2f,0x9e,0x33,0x06,0x47,0x4e,0x42, + 0x3f,0xec,0x11,0x02,0x6d,0xbf,0xc1,0xc7, + 0x8e,0x10,0xfd,0x74,0xe8,0xf1,0x9e,0x83, + 0xf9,0x2d,0x65,0xd1,0x4d,0x46,0x8d,0x87, + 0xf9,0x27,0xe5,0x4c,0x59,0xb8,0xc9,0xd2, + 0x1a,0x3c,0xf1,0x81,0x5e,0x8f,0x39,0x51, + 0x18,0x8d,0x12,0x21,0xa2,0x30,0x4a,0x88, + 0x39,0x4e,0x10,0xbf,0xaa,0x50,0xae,0xa0, + 0x6f,0x5b,0xc2,0x18,0x98,0x2f,0x2b,0x0a, + 0xad,0xd9,0xee,0x7a,0xfa,0x10,0xd1,0xdf, + 0x7e,0x76,0xf4,0x63,0xad,0x85,0xec,0x27, + 0x4d,0xc1,0xe7,0xc4,0xe0,0x03,0x7e,0xf4, + 0x74,0x63,0xc0,0xea,0x89,0x4e,0x6f,0x7d, + 0x98,0x36,0x8d,0xb4,0x26,0x02,0x63,0x14, + 0xdc,0x83,0x01,0x7b,0xdf,0xb6,0x38,0x33, + 0x89,0x52,0xe3,0x30,0x40,0x8c,0x58,0xf7, + 0x60,0x8c,0x46,0x31,0x8c,0x1e,0x49,0x93, + 0x31,0xba,0x74,0x7a,0x72,0x94,0xc4,0x4c, + 0x8e,0x99,0x84,0x90,0x1f,0xdc,0xe7,0xce, + 0x4c,0x4e,0xc2,0x89,0x42,0xcb,0x1c,0x2d, + 0x9a,0xc9,0x24,0xa1,0x35,0x10,0x08,0xa1, + 0x27,0xf8,0x9e,0x0f,0xce,0x7f,0x8b,0x1f, + 0xfc,0xf0,0x87,0xfc,0xce,0xef,0x7e,0xca, + 0xec,0xe0,0x80,0x47,0xe7,0x8f,0xf9,0xc3, + 0x3f,0xf8,0x03,0x3e,0x7e,0xfa,0x04,0xad, + 0x84,0x77,0x9b,0x35,0xaf,0x36,0x6b,0x9e, + 0x7e,0xf3,0xdb,0xac,0x8e,0x4f,0xe9,0xfc, + 0xb4,0x36,0x11,0xfc,0x88,0xef,0xf7,0x94, + 0xcd,0x9c,0xa1,0xef,0x38,0x79,0x74,0xc8, + 0x67,0xdf,0x3d,0x25,0x0e,0x89,0x8b,0x8b, + 0x1d,0x21,0xf4,0xcc,0x67,0x67,0x54,0xe5, + 0x92,0xc2,0xcd,0x89,0x69,0x24,0x26,0x8f, + 0x88,0x63,0xdb,0x4e,0x17,0xa0,0x75,0x40, + 0x29,0xa1,0xa9,0x4a,0x8c,0xd6,0xd8,0xc2, + 0x91,0x1f,0xe0,0xf6,0xd0,0x79,0xb6,0xbd, + 0x47,0x50,0xc4,0x90,0xf0,0x79,0x32,0x5d, + 0x0c,0x3e,0xd0,0xf5,0xc3,0xb4,0xdf,0x18, + 0x22,0x5d,0x3f,0x12,0xbd,0x9f,0x36,0x70, + 0xdb,0x7e,0x12,0xf3,0x62,0xa2,0xa8,0x4a, + 0xcc,0x30,0x06,0x9c,0xd6,0x58,0x67,0x68, + 0xc7,0x84,0xd3,0x1a,0x25,0x99,0x2c,0x40, + 0x48,0xf4,0x29,0x4d,0x4b,0xf3,0x31,0x61, + 0xad,0xa0,0x45,0xb1,0xdf,0x6e,0x88,0x11, + 0x5a,0x11,0x0a,0x67,0xb0,0xc6,0x51,0x96, + 0x05,0x6d,0x37,0xa2,0xd1,0x53,0x29,0xdb, + 0xb4,0x14,0x0f,0x5b,0x53,0x22,0x53,0x29, + 0x4c,0x29,0x71,0xb7,0x1d,0x18,0xfd,0xd4, + 0x10,0x15,0x53,0x86,0xf9,0x18,0xa9,0xab, + 0x92,0x90,0xe3,0xb4,0xf3,0x9e,0xa7,0xc1, + 0xaf,0x70,0xc2,0xc9,0xd1,0x0a,0x88,0x14, + 0x46,0x93,0x92,0x26,0xa4,0x33,0xb2,0x7a, + 0xcc,0x4f,0xff,0xe6,0x9e,0x8f,0x3e,0x3b, + 0xe7,0x47,0xbf,0xfb,0x7b,0xac,0xe6,0x33, + 0x86,0x37,0x2f,0x28,0xc9,0x2c,0x96,0x87, + 0x7c,0xf7,0xf0,0x98,0xcf,0x1e,0x9d,0x12, + 0xc4,0xd2,0x87,0x40,0x59,0xcc,0x68,0xfb, + 0x96,0xca,0x19,0x82,0x5d,0xe1,0x87,0x01, + 0x67,0x2d,0x11,0xa8,0x97,0x15,0x27,0xe7, + 0x89,0xe1,0xcf,0xd6,0xcc,0xaa,0xe3,0x07, + 0x1e,0x46,0x23,0x68,0xe6,0xf5,0x29,0x71, + 0x1b,0x51,0x0f,0x19,0xbe,0xd9,0x25,0x46, + 0x5f,0xb0,0x5a,0xee,0x18,0xbc,0x27,0x23, + 0xec,0x37,0x1d,0xa8,0x44,0x88,0xe0,0x0a, + 0x47,0x21,0x99,0xba,0x9a,0x56,0x20,0xbc, + 0x8f,0x94,0xa5,0x23,0xc5,0x40,0x59,0x38, + 0x7c,0x3f,0x30,0x84,0x40,0x37,0x44,0x0a, + 0xe7,0xd8,0x0e,0x11,0x6b,0x0d,0x75,0x61, + 0x51,0x69,0xea,0xcf,0x86,0xac,0xc8,0x59, + 0xf0,0x31,0x20,0x0a,0x06,0x1f,0x70,0x4e, + 0xe3,0xc3,0x64,0x18,0xc8,0x79,0xda,0x55, + 0x27,0x4f,0x46,0xe4,0x94,0x02,0x63,0x4c, + 0x38,0xe3,0xd0,0x56,0xd1,0xf7,0x91,0xb2, + 0x50,0xb4,0xdd,0x40,0x61,0x35,0x29,0x66, + 0x22,0x82,0x2b,0x0c,0xa3,0x1f,0x71,0x76, + 0x72,0x1a,0x46,0x1f,0xd8,0x8d,0x01,0x25, + 0x6a,0xfa,0x63,0xc3,0xb4,0x5d,0x35,0xab, + 0x1d,0x49,0xa6,0x0d,0x56,0xa7,0x34,0x21, + 0x45,0xc4,0x28,0x52,0x4c,0x64,0x95,0x31, + 0x46,0x20,0xc9,0x34,0xa8,0xa5,0x04,0xea, + 0x10,0x41,0x63,0x8d,0xe3,0xe2,0x65,0x0b, + 0xbf,0xa5,0xd8,0xec,0x77,0x14,0xed,0x1e, + 0x53,0x38,0xfa,0x76,0x20,0xcc,0xe6,0x18, + 0x1c,0x62,0x1b,0xe2,0x78,0x45,0xe8,0x76, + 0x24,0xb1,0x8c,0x49,0xa8,0x9a,0x86,0x71, + 0xbf,0x26,0xe0,0x08,0x63,0xcf,0x4f,0xfe, + 0x9f,0x9f,0xf1,0xaf,0xff,0xcf,0xd7,0x54, + 0xe5,0x21,0x62,0xec,0x43,0x7f,0x68,0xa7, + 0x35,0x01,0x55,0x30,0x6f,0xce,0x08,0x71, + 0x9c,0x86,0x52,0xd1,0x78,0xbf,0xe5,0xf6, + 0xb6,0x60,0x3e,0x5f,0x53,0xd8,0x9e,0x6e, + 0xf0,0x40,0x04,0x31,0x24,0x93,0xd1,0x29, + 0xb1,0x6b,0x07,0x48,0x19,0x9f,0x32,0xa3, + 0x0f,0xe4,0x94,0x98,0x97,0x9a,0xc2,0x3a, + 0xba,0xde,0x23,0x4a,0xf0,0x19,0x42,0x0c, + 0x0c,0x21,0x60,0x8d,0x30,0x0e,0x9e,0x3e, + 0x09,0xfa,0xe9,0xc9,0xf2,0xc7,0x11,0x28, + 0xad,0xc5,0xa8,0xe9,0xad,0x05,0xe4,0x34, + 0xd9,0x6a,0x98,0x5e,0x67,0x31,0x4e,0x58, + 0x17,0x25,0x19,0xa2,0x67,0x5e,0x95,0x20, + 0x10,0x7c,0x60,0x51,0x4f,0x91,0xee,0xfd, + 0x48,0x5d,0x39,0x06,0x1f,0x88,0x69,0x42, + 0x5e,0x53,0x8f,0x56,0xcc,0x17,0x2b,0xc6, + 0x10,0x09,0x79,0xb2,0x7e,0x28,0x25,0xf4, + 0x63,0x9c,0xa8,0x7a,0xad,0x1f,0x34,0x76, + 0xf5,0x20,0x20,0x31,0xad,0x0b,0xc4,0x88, + 0x28,0x45,0x88,0x91,0x9c,0xa7,0x3d,0x8a, + 0x14,0x0d,0x31,0x7f,0xfc,0xd0,0xaf,0x14, + 0xe5,0x4c,0xf3,0xb7,0x3f,0x7f,0xc1,0xcf, + 0x7f,0xfa,0x82,0x17,0xbf,0x7a,0xc5,0xd3, + 0x93,0x9a,0xfb,0xde,0xd3,0x99,0x86,0xd1, + 0x38,0xc2,0x03,0x31,0x95,0xe3,0x48,0x3f, + 0x78,0xbe,0x78,0x7e,0xcb,0x72,0x59,0xa1, + 0xf4,0x94,0xb9,0xd6,0x15,0xcc,0xe6,0x73, + 0xbe,0xfe,0x7c,0xc7,0x38,0x4e,0x56,0xa8, + 0x9c,0x13,0x5a,0x39,0xb4,0x76,0x68,0x6d, + 0x26,0xa6,0x4c,0x4f,0xfd,0xab,0xb0,0x73, + 0xac,0x99,0x91,0x11,0xfa,0xde,0x4d,0x3a, + 0x86,0x4c,0x4a,0xd9,0xaf,0x97,0x95,0xb4, + 0xb3,0x58,0x67,0x69,0x2a,0x3b,0x49,0xca, + 0x21,0xb3,0x5c,0xcc,0x78,0x7c,0x76,0x86, + 0x56,0x42,0x37,0x74,0x84,0x04,0x3e,0x25, + 0x8e,0xe6,0x35,0x48,0x62,0xb7,0xeb,0x26, + 0x19,0x3a,0x78,0xf4,0x87,0x8f,0x57,0x3f, + 0xb6,0xda,0x10,0x61,0x5a,0x62,0xcc,0xd3, + 0xe6,0xd0,0xaf,0x7f,0x02,0x38,0xab,0x91, + 0x9c,0x30,0x12,0xa9,0xb4,0x50,0x0b,0xcc, + 0x9b,0x12,0x91,0x89,0x0d,0x0e,0x0f,0xd1, + 0x30,0x8c,0x93,0x15,0xd4,0x68,0x85,0xd2, + 0x9a,0x9c,0xa7,0x34,0xde,0xf7,0x3d,0x9b, + 0x7d,0x87,0x8a,0x19,0x24,0xe1,0xc3,0x74, + 0xd8,0xce,0x58,0xea,0x42,0x3f,0xe8,0x14, + 0x81,0x18,0x02,0x21,0x4e,0xb4,0x39,0x0f, + 0x43,0x66,0x8e,0x93,0x53,0x32,0x26,0x21, + 0xe7,0x15,0x89,0x47,0xd3,0xeb,0x39,0x42, + 0xc7,0xf5,0xe5,0x86,0xeb,0x8b,0x91,0xdd, + 0x6e,0xa0,0x39,0xf9,0x88,0x8f,0xfe,0xfe, + 0x87,0x14,0x27,0x87,0xd4,0xab,0x25,0xd6, + 0x28,0x9c,0x73,0x54,0xcd,0x92,0x76,0xbf, + 0x65,0x0c,0x8a,0x7f,0xfe,0x3f,0xfc,0x05, + 0xb7,0xeb,0x96,0x27,0xcf,0x56,0x14,0xce, + 0xb2,0xdd,0x0f,0x68,0xe7,0x78,0xf4,0xb8, + 0xe4,0x67,0x7f,0x75,0x31,0xb1,0x07,0x49, + 0x33,0x26,0xcf,0xe0,0x3b,0xc6,0x38,0xa2, + 0x95,0x21,0xc5,0x71,0xd2,0xd7,0x6d,0x89, + 0x73,0x33,0xea,0xfa,0x88,0xa6,0x38,0x40, + 0xe4,0x80,0x98,0x7a,0xb2,0xec,0x31,0x66, + 0xf2,0x84,0xa5,0x94,0x90,0x04,0xdd,0x30, + 0x4e,0xe6,0xc0,0x1c,0xd1,0x0f,0x5e,0xe7, + 0xfb,0xdb,0x5b,0xba,0x7e,0x9c,0x9c,0x9f, + 0x02,0xdb,0xb6,0x9b,0x28,0xab,0x9c,0x70, + 0x4a,0x21,0x5a,0x30,0x21,0x41,0x3b,0x8e, + 0xd3,0x6a,0x2e,0x53,0xe4,0xed,0x47,0x8f, + 0xd5,0x82,0xd3,0xea,0xe1,0x85,0x31,0xfe, + 0xe1,0x80,0x14,0x4d,0x53,0xd2,0xfb,0xc8, + 0xbe,0x1b,0xa7,0x59,0x22,0x25,0x04,0x45, + 0x6d,0x27,0x07,0xc8,0x10,0xd3,0x84,0xbf, + 0x43,0x66,0x8c,0x81,0xdd,0x30,0x21,0xa9, + 0x1c,0x03,0x49,0x6b,0xaa,0xb2,0x40,0xf9, + 0x48,0x08,0x91,0xd2,0x09,0xc6,0x08,0x63, + 0x98,0x10,0x9d,0xd2,0x4c,0xcf,0x64,0xd2, + 0xdf,0x73,0x86,0x98,0x85,0x30,0x7a,0x7c, + 0x04,0x63,0x16,0x28,0x0c,0x5a,0x43,0x61, + 0x14,0xa2,0x13,0x79,0x74,0xf4,0x63,0xa0, + 0xf3,0x7b,0x9a,0xd5,0x0c,0x95,0x22,0xda, + 0x4c,0x3c,0x58,0x8e,0x23,0x7e,0x10,0x96, + 0xcb,0x15,0x55,0xd2,0xff,0x7f,0x55,0x6f, + 0xd2,0xa4,0xd9,0x99,0xdd,0xf7,0xfd,0x9e, + 0xf1,0xde,0xfb,0x4e,0x39,0x56,0xd6,0x0c, + 0xa0,0x30,0x34,0xd0,0x04,0x60,0x36,0x29, + 0xb2,0x39,0x48,0x6d,0x89,0x41,0x31,0x48, + 0x33,0xa8,0x70,0x58,0xb6,0xa8,0x90,0x96, + 0xb6,0xc3,0xdf,0xc1,0xbb,0xfe,0x06,0x5e, + 0x7a,0xe3,0x95,0x23,0x6c,0x6f,0x44,0x99, + 0x0e,0x0f,0xb2,0x1d,0x22,0x69,0x92,0x32, + 0x29,0x92,0x3d,0xb0,0x1b,0x6c,0x74,0x37, + 0x1a,0x8d,0xa1,0x0a,0x35,0x57,0x56,0x66, + 0xbe,0xe3,0xbd,0xf7,0x99,0xbc,0x38,0x4f, + 0x26,0xda,0xb5,0xa9,0x0a,0x54,0x56,0xe6, + 0x8b,0x7b,0x9f,0xe1,0x9c,0xff,0x74,0xc8, + 0xd7,0x3d,0xff,0xef,0xbf,0xfb,0x29,0x1f, + 0x7e,0xff,0x11,0xbf,0xfd,0x7b,0x5f,0xe1, + 0xb5,0xdb,0x87,0xfc,0xf7,0xff,0xdd,0x9f, + 0xe3,0xe6,0x86,0xc9,0xb5,0xc0,0xea,0x65, + 0xe4,0x62,0x13,0x51,0xca,0x63,0x74,0x43, + 0xc9,0xb0,0x1a,0x37,0x28,0x95,0x30,0xaa, + 0x90,0x43,0x26,0x96,0x5c,0x11,0x01,0x85, + 0xb1,0x33,0x26,0xf6,0x6b,0x84,0xf4,0x43, + 0xfa,0xf1,0xbe,0xc0,0x37,0xba,0x30,0xc4, + 0x40,0xcc,0x19,0x83,0xf8,0x14,0xcf,0x96, + 0x5b,0x76,0xc3,0x7d,0x3a,0x6f,0xc5,0x95, + 0x36,0xc8,0xf3,0xee,0x94,0x22,0xe5,0x44, + 0xd2,0x16,0xef,0x05,0x01,0xb7,0xda,0x7a, + 0x4a,0xe8,0xe9,0x77,0x43,0x2d,0xe7,0x24, + 0x7f,0xe4,0xd2,0xb3,0x61,0x34,0x58,0x2d, + 0xdd,0x24,0x18,0x9e,0xaf,0x76,0x62,0x76, + 0xa1,0xaa,0xc1,0xb3,0xba,0x8a,0x89,0xc8, + 0x45,0xb8,0x8e,0x90,0x25,0x39,0xa7,0x31, + 0x86,0x31,0x8c,0x94,0xa2,0x70,0xbe,0x61, + 0xda,0x18,0x52,0xcc,0x0c,0x41,0xd8,0xc1, + 0x89,0x77,0xe4,0x14,0x31,0x4a,0x51,0xac, + 0x41,0xab,0x8c,0x52,0x99,0x98,0x14,0x31, + 0x07,0x0a,0x06,0xab,0x35,0x45,0x81,0xd1, + 0x06,0x85,0xf8,0xc5,0x8d,0x32,0xf8,0xfd, + 0x35,0x39,0x43,0x88,0x2d,0x63,0x0f,0x91, + 0x91,0x76,0x72,0x48,0xe9,0x2f,0x80,0x8c, + 0xb1,0x56,0x2a,0x37,0xef,0xb0,0xed,0x94, + 0x61,0xb5,0xe1,0xc2,0x2d,0xb8,0xfd,0xee, + 0x8c,0x07,0xdf,0xfe,0x9c,0x3f,0xfc,0x9f, + 0x3e,0xe2,0x97,0x7f,0xed,0x0e,0xbf,0xf1, + 0x5b,0x3f,0xc7,0x1f,0xff,0x5f,0x9f,0xb2, + 0xda,0x5a,0x94,0x0a,0x18,0xbd,0x25,0x84, + 0x81,0xc4,0x40,0x41,0x61,0xb5,0xc7,0x68, + 0x39,0x41,0x12,0x89,0xa2,0xed,0x55,0xc9, + 0x6b,0xb5,0xa5,0x64,0xd0,0xbc,0x01,0x79, + 0xc3,0xc5,0xf6,0x89,0x40,0x43,0x45,0xd0, + 0x07,0x6f,0x35,0xda,0x8a,0x51,0x36,0xa2, + 0x58,0x0e,0x11,0x55,0xa0,0x64,0x43,0x83, + 0xaa,0x47,0xa7,0xc6,0x39,0x45,0x08,0x51, + 0x2c,0x72,0xa2,0x30,0x4c,0x78,0x23,0xbb, + 0xa3,0xeb,0x84,0xe3,0x30,0x14,0x9c,0xb5, + 0xec,0xc6,0x48,0xe3,0x3c,0xce,0x26,0x86, + 0x00,0x45,0x17,0x91,0xdc,0x54,0x8a,0x52, + 0x19,0xa9,0xcb,0xfb,0x5c,0xbe,0x3c,0x83, + 0x95,0x21,0xe7,0x82,0xd1,0xe0,0x8d,0x42, + 0x5c,0xd7,0x85,0x7e,0x0c,0xc4,0x94,0x31, + 0xc6,0x60,0xb5,0x65,0x88,0xa2,0xa5,0x8a, + 0x19,0x20,0x82,0x11,0xe4,0x19,0x32,0xd3, + 0xc6,0x33,0x66,0xe9,0x74,0x53,0x11,0xc8, + 0x04,0x3a,0x12,0x05,0x55,0x22,0x31,0x24, + 0x74,0x6e,0xa5,0x11,0xb5,0x9a,0x6e,0x6f, + 0xc6,0xf3,0x67,0xcf,0xb9,0x79,0xe3,0x88, + 0xd4,0xaf,0x29,0x29,0x61,0x9d,0x07,0x6d, + 0x58,0x2f,0x97,0x52,0x92,0x9a,0x43,0xf6, + 0xe7,0x3d,0x37,0xef,0xed,0xf3,0xe8,0xd3, + 0x25,0xff,0xfe,0xcf,0x1e,0xf0,0x37,0xd6, + 0x61,0x6d,0xa6,0xdf,0x45,0x8c,0xf6,0xb4, + 0xed,0x84,0x69,0xa7,0x48,0x29,0x30,0x86, + 0x2d,0x21,0xf4,0x0c,0x51,0xa4,0xa3,0x27, + 0x77,0x3a,0x42,0x02,0x85,0xe3,0xfc,0xe9, + 0x48,0xca,0xe2,0xad,0x51,0xba,0xa3,0x6b, + 0xdf,0x23,0x6d,0x76,0xe4,0x74,0x86,0x76, + 0x16,0x94,0x05,0x63,0x88,0x31,0xd0,0x78, + 0x98,0x4d,0x3b,0x0a,0x9a,0x7e,0xb7,0x65, + 0xb9,0xde,0x11,0x92,0x62,0x7f,0x31,0xc3, + 0x35,0x56,0x7c,0x92,0x04,0xce,0xd7,0x3d, + 0xe6,0xfa,0xc1,0xe4,0x9b,0x9d,0xb3,0x68, + 0xa3,0x98,0x4e,0x26,0x58,0x04,0x30,0xeb, + 0x43,0x64,0x08,0x99,0x58,0x90,0xf2,0xd4, + 0xb7,0xa4,0x9c,0x89,0x41,0x44,0x5f,0xda, + 0x4a,0xf6,0x89,0x34,0x71,0x1a,0xad,0x32, + 0xd6,0x58,0xbc,0xd5,0xc4,0x9c,0xb1,0x56, + 0xa0,0x94,0x18,0x13,0x21,0x97,0x2b,0x1e, + 0xa5,0x6d,0x1a,0x1a,0xab,0x68,0x9d,0xaa, + 0xba,0x68,0x39,0x06,0x1a,0x67,0x51,0xc6, + 0x31,0x0c,0x19,0x6d,0x14,0x19,0xcd,0x18, + 0x13,0x46,0xe9,0xea,0x56,0xf5,0x28,0xf5, + 0x9a,0x94,0xd1,0x5a,0x43,0xe8,0xd0,0xb9, + 0xa3,0x8f,0x81,0xf9,0xde,0x3e,0x07,0x6f, + 0x1e,0xb2,0xee,0x77,0xbc,0x7e,0x4b,0x82, + 0x63,0x8c,0x95,0xd5,0xbb,0xdb,0x6d,0x99, + 0xcd,0xa6,0xf8,0xe9,0x9c,0x7f,0xf3,0xbd, + 0xa7,0xbc,0xd8,0x26,0xbe,0xf6,0x95,0x09, + 0xe7,0x4f,0x97,0xec,0x36,0xa3,0x54,0x75, + 0xd9,0x62,0x5d,0x87,0xd5,0x8e,0x14,0x7a, + 0x86,0xd8,0xd7,0x95,0xdb,0xd2,0x35,0x0b, + 0xbc,0x9b,0xa0,0x0a,0x8c,0x43,0x8f,0xf1, + 0x5b,0x36,0x17,0x4b,0xfa,0xdd,0x08,0x25, + 0x51,0x72,0x20,0xe6,0x04,0x28,0xba,0xe6, + 0x3a,0xb1,0x3c,0xc7,0x5a,0xb1,0xd3,0xc5, + 0x10,0xb8,0x76,0xed,0x90,0x69,0x37,0x61, + 0xd7,0xef,0x68,0xbc,0x95,0x85,0xa5,0x2e, + 0xa5,0x57,0x89,0x61,0x0c,0x14,0x63,0x59, + 0x2e,0x37,0x94,0x92,0xd0,0x46,0x1b,0x8a, + 0x36,0x28,0x6d,0xd9,0xec,0xa4,0x79,0x59, + 0xef,0x06,0x8c,0x16,0x63,0x8b,0x56,0x80, + 0x31,0x6c,0x87,0x20,0xe7,0x1d,0x9a,0xcd, + 0x10,0x19,0x46,0x81,0x18,0xbc,0x52,0x34, + 0x5e,0x91,0x8a,0xae,0xac,0x9d,0x74,0xd5, + 0x43,0x48,0x6c,0xc6,0x28,0x71,0x4d,0x8d, + 0xd4,0xfc,0x45,0x29,0x8c,0x16,0x4d,0xec, + 0xba,0x97,0x0c,0x2a,0x8c,0xa7,0xf3,0x0d, + 0x5a,0xcb,0x11,0x33,0xed,0x64,0x8b,0x87, + 0xea,0x88,0xcd,0x39,0xb3,0x1d,0x06,0x52, + 0xee,0x2a,0x0f,0x52,0x10,0xde,0xd2,0x32, + 0x04,0x30,0xca,0x71,0xed,0xfa,0x9c,0x1f, + 0xbf,0x48,0xfc,0xf8,0xa5,0x66,0xb3,0x1d, + 0x58,0x5d,0x5c,0x48,0xb3,0x15,0xb6,0xcc, + 0xe7,0x53,0xf1,0x11,0xc6,0x81,0x49,0x63, + 0xd8,0x94,0x96,0x97,0x43,0xe1,0xdd,0x5f, + 0x7f,0x85,0x66,0x22,0xc5,0x43,0x62,0xa0, + 0x9d,0xee,0x70,0x2d,0xdc,0x7b,0xeb,0x1e, + 0x9d,0xab,0xee,0xb1,0x7e,0xc9,0x6a,0x77, + 0xc6,0x18,0xb6,0x38,0xdb,0xe1,0xcc,0x09, + 0x71,0xfd,0x0a,0x9e,0x57,0x99,0x76,0x87, + 0x58,0xe3,0x88,0x25,0x90,0x52,0xdd,0x2d, + 0x66,0x86,0x77,0x27,0xe4,0x22,0xda,0x84, + 0xf9,0xac,0x43,0x93,0x79,0x79,0x76,0xc6, + 0x72,0x23,0xd5,0xd8,0x72,0xbb,0x23,0xa5, + 0x22,0xda,0x2f,0x63,0x59,0x6f,0xb6,0x3c, + 0x7d,0xf6,0x92,0x90,0xa3,0x54,0xb2,0xce, + 0x39,0x52,0xca,0x02,0x1c,0x6a,0xd0,0x5a, + 0x60,0x74,0x63,0xe1,0x68,0xb1,0x8f,0xb1, + 0x96,0x6d,0x2f,0x58,0x8d,0xae,0x31,0x17, + 0xde,0x6a,0xbc,0xd5,0xd2,0x85,0xa7,0x0c, + 0x31,0xe3,0x95,0x58,0x87,0x87,0x18,0x29, + 0xb9,0xe0,0xaa,0x47,0xd0,0x39,0x87,0xf7, + 0x4e,0xc0,0x40,0x90,0x63,0x2b,0x17,0xe6, + 0x93,0x96,0xf9,0x74,0x42,0xeb,0x34,0x05, + 0x18,0x63,0xa6,0xa0,0xd8,0x8e,0x89,0x31, + 0x44,0x42,0x4c,0x57,0xe0,0x9c,0xd5,0x1a, + 0x6f,0x17,0x57,0x40,0xe2,0x25,0xd2,0x3b, + 0xc4,0x1d,0xde,0x4f,0x69,0x0f,0x2d,0xcf, + 0xb6,0x8a,0xaf,0x9c,0x1c,0xf2,0xfc,0x74, + 0xc5,0x7c,0x36,0xa3,0xb5,0x19,0xeb,0x1b, + 0x42,0xbf,0x91,0xa3,0x2b,0x27,0xae,0x4d, + 0x1c,0x29,0x15,0x3e,0xf8,0x62,0x43,0xd1, + 0x89,0xff,0xe0,0x1f,0xbe,0x4a,0x33,0x17, + 0x62,0xea,0xe5,0xe9,0x96,0x66,0xb1,0x62, + 0x3b,0xde,0x27,0xa6,0x9e,0xd6,0xb6,0x4c, + 0xbb,0x43,0x5a,0x37,0x81,0x9c,0xd8,0x6c, + 0xcf,0x38,0x5f,0x3e,0x61,0xb5,0x7e,0xca, + 0x76,0x58,0x51,0x8a,0xc6,0xb9,0x05,0x5d, + 0x7b,0x4d,0x20,0x1d,0xed,0x84,0x43,0xb1, + 0x07,0xe4,0x12,0x99,0x4e,0x3b,0x74,0x89, + 0x84,0xdd,0x8e,0xd9,0xb4,0xe5,0x70,0xde, + 0xf2,0xe2,0xe5,0x39,0xe3,0x18,0x89,0x31, + 0xf1,0xfc,0xf4,0x94,0xcd,0xb6,0x27,0x65, + 0x25,0xe4,0x5d,0x92,0xca,0x56,0xab,0x9a, + 0xc4,0xa0,0xa1,0xba,0x92,0x0c,0x87,0x7b, + 0x73,0xf6,0xa6,0x1d,0x59,0x29,0x52,0x96, + 0x08,0xa3,0xc6,0x5a,0x72,0x65,0x07,0x1b, + 0x67,0x51,0x4a,0x33,0x69,0xac,0x44,0x5e, + 0x18,0x83,0x76,0x9e,0x52,0x20,0xc6,0x42, + 0x2a,0xb5,0xfe,0x57,0x02,0x32,0x0e,0x63, + 0x40,0x29,0x98,0x35,0x86,0xd6,0x19,0xb2, + 0xb4,0x52,0x0c,0xc3,0x48,0x08,0x62,0xf3, + 0x4a,0xa9,0xb0,0xd9,0xf5,0x57,0x65,0x74, + 0xce,0x82,0x00,0xa7,0x9c,0xc9,0x29,0x03, + 0x7b,0xe4,0x92,0x84,0x8c,0x42,0x4c,0xfb, + 0x4e,0x39,0x1a,0xaf,0x88,0x13,0xc3,0xf1, + 0xd4,0x72,0xf6,0xf4,0x63,0xb0,0x8e,0x7e, + 0x0c,0xf8,0xc9,0x9c,0xa6,0x9d,0x62,0x5d, + 0xcb,0xb8,0x39,0xc7,0x3a,0xcb,0x8d,0xfd, + 0x06,0x95,0x23,0xa7,0x69,0xc1,0xbf,0xff, + 0xe9,0x12,0x3c,0xbc,0xfd,0xf5,0x13,0xa6, + 0x27,0x1a,0xad,0x3c,0x8f,0x3e,0xdb,0xf1, + 0xe2,0x71,0x0f,0x7a,0x60,0xdb,0xaf,0x18, + 0xc3,0x0e,0x65,0x2c,0x5d,0x77,0xc0,0x7c, + 0x7a,0x8d,0x99,0x9f,0xa3,0xc8,0x8c,0xe3, + 0x39,0xeb,0xcd,0x53,0x96,0xeb,0x87,0x6c, + 0x76,0xcf,0x29,0xaa,0xd0,0x35,0x7b,0x78, + 0xdb,0x22,0x8c,0x8c,0xc6,0x39,0xcd,0x8d, + 0xeb,0x27,0x74,0xd3,0x29,0xfd,0x6e,0x64, + 0x3b,0x64,0x76,0x7d,0xa4,0xf1,0x8e,0x7e, + 0x1c,0x49,0x59,0xb1,0xe9,0x7b,0x72,0x01, + 0x67,0x1d,0x93,0xd6,0x73,0xb4,0x37,0xc5, + 0xdc,0x39,0xd9,0xff,0x66,0xa1,0x08,0x3f, + 0x6e,0x0d,0x8d,0x15,0x4d,0xd1,0x2e,0x8c, + 0x5c,0x6c,0xb7,0xc4,0x94,0xb0,0x4a,0x53, + 0xb4,0xaa,0x22,0x33,0xf1,0x62,0x58,0x6b, + 0x18,0x63,0xa2,0xeb,0x24,0x21,0x68,0xbd, + 0xeb,0xd9,0x8e,0x02,0x38,0xa2,0x34,0x29, + 0x27,0x4a,0x46,0xec,0x62,0x46,0x57,0x17, + 0xae,0x65,0xcc,0x8a,0xc6,0x7b,0x61,0xf5, + 0x52,0x22,0xc4,0x48,0xac,0xce,0xa7,0x92, + 0xc5,0x58,0x79,0xc9,0x7a,0x14,0xf4,0x55, + 0x73,0x69,0xcd,0x9b,0x50,0x4c,0x8d,0xf2, + 0x70,0xf4,0x61,0xc0,0xdb,0x96,0xe3,0x3b, + 0x53,0xee,0xdc,0x99,0x53,0x36,0x4f,0xf0, + 0x93,0x39,0x7f,0xf7,0x93,0x4f,0xb8,0x7b, + 0x72,0xc4,0xc9,0xc9,0x09,0x9a,0xc8,0xb8, + 0x5b,0xa1,0x14,0x0c,0x61,0xe0,0xd3,0x17, + 0x91,0xbf,0x7b,0xb4,0x25,0xe7,0xcc,0xa0, + 0xe7,0x3c,0x7a,0xfa,0x8c,0xbb,0xc7,0x9e, + 0xeb,0x77,0xe7,0x18,0x5f,0x18,0x96,0x8a, + 0x61,0x17,0x31,0x18,0xac,0xa9,0x32,0xbd, + 0x14,0x09,0x59,0x10,0x6e,0x6b,0x5b,0x5a, + 0x3f,0x17,0xfe,0xa4,0xfa,0xe7,0x8c,0x56, + 0xdc,0x7e,0x65,0x8f,0xeb,0xd7,0x0d,0xd6, + 0x35,0xec,0xc6,0x87,0x68,0xbb,0x21,0x0c, + 0x23,0xcb,0xd5,0x8e,0xe5,0xb6,0x27,0xe5, + 0xc2,0x6a,0xb3,0x15,0x6a,0xb9,0x0a,0x26, + 0xfa,0x71,0xc4,0x7b,0x87,0x33,0x8a,0x4c, + 0xa1,0x6b,0xe5,0x14,0xb1,0xbe,0xc6,0x3b, + 0x84,0x14,0x48,0x29,0x33,0x22,0x2c,0x60, + 0x2e,0xe2,0x82,0x51,0x4a,0x11,0x73,0x46, + 0xc5,0x82,0xd3,0x8a,0x04,0x38,0xad,0xf1, + 0xce,0x90,0x92,0x62,0x0c,0x89,0x98,0x8b, + 0x78,0x0e,0xe3,0x88,0x36,0x42,0xdc,0x6b, + 0x23,0xbb,0xab,0x71,0x8e,0x18,0x23,0xa6, + 0x9a,0xf2,0xa7,0x8d,0x13,0xbb,0x9b,0xb0, + 0xbf,0xe4,0xa2,0xd1,0x5a,0x57,0x15,0xbb, + 0x54,0x5c,0xba,0x56,0x6e,0xc3,0x98,0x84, + 0x5f,0xc8,0x16,0xad,0x3a,0x72,0x19,0x51, + 0x5a,0xcb,0xae,0x29,0x91,0xa2,0x12,0xd7, + 0x5f,0x9d,0x72,0x76,0xf1,0x9c,0xeb,0x27, + 0xb7,0xb9,0xdf,0xbd,0xc1,0xaf,0xbc,0x72, + 0xce,0x76,0xc8,0xa4,0x24,0x06,0x9f,0x84, + 0x41,0xdb,0x86,0xd6,0xb5,0x5c,0x9f,0x0f, + 0xe2,0x0c,0x2e,0xb2,0x50,0xce,0xec,0x4d, + 0xfe,0xf8,0xe3,0x53,0xde,0x3b,0x5e,0x73, + 0xfb,0xd5,0x03,0x0e,0xae,0x4f,0x79,0xf4, + 0xf1,0x8a,0x17,0x0f,0xb6,0x58,0x34,0x5a, + 0x85,0x2a,0xde,0x76,0x62,0x68,0x8a,0x03, + 0x43,0x91,0x8a,0x6b,0xd2,0x2d,0x88,0x79, + 0x82,0xd2,0x08,0x7f,0x34,0x3d,0xe3,0xec, + 0x51,0xe1,0xfc,0xfc,0x3e,0x21,0x2f,0xd1, + 0x28,0xe6,0xd3,0x86,0xd5,0x66,0x5b,0xa3, + 0x00,0xc1,0x28,0xcd,0x9d,0x9b,0x27,0x3c, + 0x78,0xf4,0x94,0x49,0xdb,0x70,0xe7,0xe6, + 0x09,0x2f,0x4e,0x4f,0xb1,0xa9,0x10,0x43, + 0x61,0x08,0x3d,0xe6,0x8d,0x9b,0xfb,0xdf, + 0x34,0xc2,0x3d,0xa1,0xb5,0x62,0x18,0x33, + 0x5a,0x1b,0xaa,0xbc,0x43,0xf8,0x39,0xa7, + 0xc9,0x45,0x81,0x56,0x78,0x63,0x31,0xc6, + 0x90,0xc4,0x6a,0x41,0x1f,0x85,0x1b,0x50, + 0x59,0x56,0x54,0x41,0x38,0x11,0x85,0xac, + 0x6c,0x52,0xc2,0x39,0x21,0xa6,0x40,0xa3, + 0xb4,0x22,0xa5,0xc2,0x30,0x8c,0xa4,0xaa, + 0xc6,0x30,0x46,0x4b,0x3c,0x05,0x92,0xb2, + 0xa0,0x94,0xc1,0x54,0xcc,0x2b,0x17,0x45, + 0x4a,0x0d,0x8d,0x7b,0x9d,0x98,0x03,0x46, + 0x1b,0x62,0x8c,0xb8,0x26,0xb2,0x77,0xb8, + 0x47,0x73,0x98,0x68,0xf6,0x6f,0xe0,0xca, + 0x40,0xbb,0xb7,0x8f,0xcf,0x50,0x86,0x35, + 0x77,0x6f,0xec,0xd1,0x4d,0xa6,0xe2,0xea, + 0xea,0x97,0x8c,0xdb,0x25,0xde,0x3b,0xfe, + 0xe8,0x07,0xa7,0x24,0x34,0xa4,0x48,0xa1, + 0x50,0xba,0x7d,0x1e,0x6e,0x2c,0x17,0x4f, + 0xef,0x73,0xfb,0xfa,0x3e,0xd7,0x5f,0x59, + 0x70,0x70,0xa3,0x23,0xc4,0x91,0x7e,0x95, + 0xd0,0xaa,0x30,0x99,0x05,0x9a,0xc9,0x00, + 0x26,0x91,0xa3,0x87,0x92,0x09,0xe3,0xf6, + 0x4a,0x60,0xe1,0x8d,0xe7,0x62,0x75,0x86, + 0x32,0x86,0xd5,0xc5,0x4f,0x98,0x76,0x9a, + 0xc5,0x74,0xc2,0x72,0xb5,0xc1,0x79,0x47, + 0x08,0x89,0x89,0x77,0x5c,0x3f,0x5a,0xb0, + 0x5e,0x6f,0xd8,0x8e,0x23,0xde,0x18,0x4e, + 0xcf,0x2f,0xe8,0xda,0x86,0x61,0x88,0x8c, + 0x59,0x78,0x23,0x73,0xf7,0xc6,0xc1,0x37, + 0x53,0x91,0x32,0xd3,0x5b,0x5f,0x85,0x03, + 0x91,0x94,0xa5,0xb9,0x29,0x39,0xa3,0x49, + 0x74,0xde,0xe0,0xbc,0x97,0x8c,0x10,0x6d, + 0x6b,0xec,0xab,0xf4,0x17,0xde,0xca,0x11, + 0x13,0x73,0x46,0x95,0x42,0xe3,0x1d,0xda, + 0x68,0x3a,0x27,0x5b,0x5f,0x8c,0x98,0x54, + 0xa6,0xb0,0x88,0x74,0x48,0x4b,0x1f,0xd3, + 0x36,0x4e,0x38,0x70,0x5b,0xef,0x23,0xd4, + 0xcf,0x2c,0x06,0x09,0x94,0x2c,0xea,0x08, + 0x67,0x6e,0x53,0xca,0x48,0x29,0x86,0xd1, + 0x2c,0x39,0xb9,0x33,0xe7,0xc6,0xeb,0xd7, + 0xf8,0x78,0xa3,0x99,0x95,0x9e,0x07,0x2f, + 0x37,0x6c,0x5f,0x3e,0xe7,0x2b,0x77,0x8f, + 0xf8,0x7f,0x7e,0xf0,0x84,0xaf,0xbf,0xb5, + 0x4f,0x37,0x9d,0x61,0x8d,0x67,0x1c,0xb6, + 0x28,0xe3,0xd8,0xdf,0x3f,0xe2,0xaf,0x3f, + 0x7a,0xc1,0x79,0x0f,0x25,0x05,0xc0,0x42, + 0x49,0xa8,0x66,0xca,0xd6,0x1d,0xf1,0xc9, + 0x27,0x9f,0xe0,0xf3,0x9a,0xe3,0x93,0x03, + 0x4e,0xee,0x2c,0x98,0x1e,0x37,0x5c,0x9c, + 0xee,0xb0,0x16,0xf6,0xae,0x8f,0x34,0xed, + 0xc8,0xb8,0x4b,0x94,0xa4,0x99,0x34,0x73, + 0x1a,0xd7,0x49,0x3f,0xb5,0x1d,0x59,0x6f, + 0x7b,0xe2,0x36,0xd3,0xf8,0x87,0x1c,0x1f, + 0xcc,0x19,0xfb,0x8a,0x59,0xc5,0xcc,0xcc, + 0x5b,0xac,0xb1,0xbc,0x5c,0xae,0xd9,0xec, + 0x84,0xf7,0x08,0x21,0xa1,0x8d,0x66,0x18, + 0x45,0x6f,0x6c,0xea,0x62,0xb7,0x43,0x14, + 0x83,0xbf,0x56,0x5a,0x90,0x4b,0xad,0x28, + 0x15,0x9e,0xb0,0x56,0xce,0x7f,0x85,0x61, + 0xa0,0x50,0x72,0x45,0x85,0x73,0xc1,0x3a, + 0x8d,0xd1,0x06,0x6d,0x0c,0x0a,0x84,0xe8, + 0x77,0x92,0x59,0x7b,0x29,0xc9,0xd1,0x4a, + 0x54,0x84,0xb1,0x92,0x50,0x25,0xf7,0x14, + 0x2d,0xfe,0x0d,0xef,0x1d,0x51,0x82,0xa2, + 0x88,0x43,0xc4,0x78,0x43,0x4c,0x60,0xb5, + 0xa9,0x32,0x4f,0x23,0x47,0x78,0x4a,0x68, + 0xe6,0x50,0x04,0x82,0x19,0xe2,0x80,0x73, + 0x86,0xae,0x59,0x10,0x1b,0xc3,0xe9,0x7a, + 0xc6,0xcb,0xcf,0xbf,0xe0,0x2b,0x7b,0x99, + 0xd6,0xb4,0xfc,0xaf,0x7f,0xfa,0x1d,0x5e, + 0xb0,0xc7,0x98,0x3d,0xe4,0x4c,0x3b,0x9d, + 0x73,0x71,0xfe,0x94,0xe9,0x74,0x41,0x2e, + 0x99,0xf7,0x6f,0xb7,0x9c,0x6f,0x57,0xec, + 0x52,0x62,0x30,0x9e,0x71,0xdc,0xe1,0x8c, + 0x83,0x5c,0x28,0x27,0x5f,0xe5,0x5b,0x2f, + 0x1e,0xf1,0xa3,0xcf,0xbe,0xcb,0x3b,0xb7, + 0xf7,0x39,0x3c,0x3c,0xe0,0xf6,0x7b,0x13, + 0x2e,0x9e,0x0d,0xbc,0x78,0xa0,0x71,0x36, + 0x92,0xc6,0x06,0x67,0x45,0x34,0x5d,0x8a, + 0x62,0x0c,0x1b,0x72,0xca,0x28,0xd5,0x92, + 0xd2,0x39,0x43,0x0a,0xf4,0xcf,0x5f,0x12, + 0x12,0xa0,0x15,0xb3,0x69,0xcb,0xc5,0x72, + 0xcb,0x10,0x04,0x19,0x9e,0x4f,0x1b,0x0e, + 0x67,0x13,0x72,0x82,0x21,0x45,0x4a,0xca, + 0xe4,0x22,0x11,0x1c,0xbb,0x10,0x30,0x37, + 0x0e,0xf7,0xbe,0x19,0x52,0x42,0x55,0xac, + 0x35,0x26,0x81,0x83,0x2f,0xcd,0xf9,0xb1, + 0x68,0x02,0x08,0xe4,0x11,0xc5,0x16,0xed, + 0x8d,0xa1,0x18,0x83,0xad,0x2f,0x23,0xe4, + 0x22,0xa1,0xc8,0x45,0x12,0x72,0xb4,0x31, + 0x57,0xf0,0xfa,0x18,0x02,0xa9,0x40,0xdb, + 0x78,0x12,0xa0,0x9c,0x63,0xd2,0x36,0x82, + 0x6e,0x16,0x31,0x70,0x2a,0x05,0x21,0x44, + 0x61,0xe7,0x72,0xa9,0x1f,0x10,0xc6,0x51, + 0x90,0xe3,0xd6,0xde,0xa3,0xe0,0x49,0xa5, + 0x30,0xc4,0x1d,0xd6,0xb4,0xbc,0xfa,0xfe, + 0x2d,0x3e,0xe9,0x3d,0x6b,0xb3,0x4f,0x6e, + 0x66,0x3c,0xdc,0x4e,0xf8,0xec,0xbc,0x70, + 0x51,0xa4,0x4c,0xfd,0xc6,0x7b,0xb7,0xb0, + 0x64,0x52,0xd1,0xf8,0xc9,0x1e,0xe7,0xe7, + 0xe7,0x64,0x6d,0x78,0xe7,0x95,0x23,0xfe, + 0x93,0x6f,0x7c,0x95,0xff,0xf8,0xd7,0xde, + 0xe2,0xfd,0xbb,0x53,0xde,0xb9,0x31,0x63, + 0xe6,0x61,0xd8,0xf6,0xac,0xc7,0x84,0x9d, + 0xee,0xb3,0xd5,0x07,0x3c,0xf8,0xd1,0x4f, + 0x79,0xfc,0xe1,0x67,0xe0,0x4f,0xd8,0x7b, + 0xe3,0x06,0x6f,0xbe,0x7e,0xc0,0xe9,0xfd, + 0x82,0xc6,0x8b,0x97,0x3d,0x27,0xc6,0x28, + 0x82,0xf4,0x52,0x24,0x21,0x68,0x37,0x3c, + 0xe7,0x7c,0xfd,0x19,0x28,0x43,0xdb,0x68, + 0x51,0x97,0x0c,0x91,0xa2,0x44,0x05,0x39, + 0xed,0x1a,0x61,0x17,0x73,0x21,0xc5,0x28, + 0x70,0x53,0x2d,0xe5,0x25,0x65,0x08,0xcc, + 0xf5,0xa3,0xf9,0x37,0x8d,0x16,0x1d,0xaf, + 0x52,0x05,0xad,0x45,0x96,0x99,0x0a,0xc4, + 0x24,0x08,0x70,0x8e,0x12,0xe4,0x25,0xfe, + 0x3e,0xd9,0x51,0xa5,0x94,0x9a,0x36,0x2d, + 0x80,0x60,0xac,0x7d,0x44,0x4c,0xa5,0x56, + 0x56,0x06,0xe3,0x2c,0xd6,0x59,0x1a,0x67, + 0x70,0xce,0x56,0xd7,0xa5,0x66,0x0c,0x09, + 0x0d,0xc4,0x98,0xeb,0xf7,0x53,0xa4,0xba, + 0x4b,0xcb,0x25,0x46,0x56,0x8a,0x40,0x26, + 0xda,0xe0,0xcc,0x1b,0xe4,0x04,0xb1,0x62, + 0x6d,0xb7,0xdf,0xbe,0x86,0x39,0xec,0xf8, + 0x2c,0x5e,0x13,0xf2,0x2c,0x8c,0xe4,0x94, + 0x28,0x55,0x56,0x64,0x8d,0xe1,0x1b,0xef, + 0xdf,0x65,0xfb,0xec,0x33,0x4e,0x5e,0x7d, + 0x93,0x10,0x46,0x76,0xbb,0x11,0xad,0x0d, + 0x3f,0xf8,0xdb,0xef,0x32,0xdb,0x3f,0xe6, + 0xe8,0xe8,0x80,0x3b,0xd7,0x0f,0x79,0xfd, + 0xf6,0x3e,0x5f,0x7f,0xf3,0x1a,0xff,0xe1, + 0xfb,0x27,0xdc,0x3b,0x32,0x2c,0x9c,0xa2, + 0x3c,0xbe,0x4f,0xf3,0x62,0xc3,0xe1,0xe4, + 0x15,0x7c,0xdf,0x72,0xd1,0x4f,0xf1,0xaf, + 0x1e,0x72,0x6d,0x9a,0x79,0xfe,0xc5,0x92, + 0x61,0xec,0xc9,0xc0,0x10,0x7a,0xb4,0x04, + 0x39,0x81,0xca,0xf4,0xc3,0x13,0x9c,0x5f, + 0x72,0xbc,0x37,0x61,0xbd,0xe9,0x59,0xf7, + 0x81,0xcd,0x18,0x2b,0xe5,0x60,0x50,0xa5, + 0x90,0xa9,0x46,0xfc,0xba,0xe8,0x72,0xca, + 0x12,0x33,0xa5,0x15,0xde,0x1a,0xcc,0xc9, + 0xe1,0xde,0x37,0xcd,0x55,0x69,0x29,0x95, + 0x51,0x51,0x35,0x67,0xaa,0x88,0xb0,0x98, + 0x2a,0xe9,0xd4,0x5a,0xe4,0x69,0xc6,0x79, + 0x9a,0xc6,0x91,0x15,0x84,0x31,0x12,0x83, + 0xbc,0x0c,0x63,0x44,0x59,0x62,0x8c,0x54, + 0x59,0x28,0x91,0xa1,0xa2,0xad,0x5c,0xa0, + 0x45,0x5e,0x70,0xdb,0x38,0x9c,0x35,0x60, + 0x4c,0xf5,0xfc,0x51,0xb1,0x2a,0x29,0x0b, + 0x63,0x12,0x1b,0x84,0xa2,0xa0,0x55,0x8b, + 0x37,0x6f,0x48,0x04,0x6b,0xda,0x32,0x5d, + 0x4c,0x79,0xe5,0xbd,0x13,0xbe,0xf3,0xa0, + 0x27,0xb5,0xfb,0x38,0xeb,0xd0,0x97,0xbc, + 0xf6,0xd0,0x53,0xc6,0x00,0x14,0x7e,0xe1, + 0xde,0x3e,0x5f,0xfb,0xda,0xcf,0xe1,0xbc, + 0xaf,0x61,0x33,0x85,0x6e,0xbe,0xc0,0x18, + 0xc3,0xbf,0xfa,0x83,0x3f,0xe0,0xfd,0xf7, + 0xde,0xa7,0x6d,0x1b,0x52,0x4c,0x57,0x01, + 0x67,0xaf,0xdd,0xba,0xc6,0xeb,0xc7,0x8e, + 0xdf,0xf8,0xfa,0x3d,0xec,0xd3,0xef,0xb3, + 0xdc,0xde,0x46,0xdb,0x16,0xbd,0xe9,0x79, + 0xd8,0x2c,0xb8,0x77,0x5b,0xf1,0xfc,0xfe, + 0x29,0xbb,0x6d,0x5f,0x13,0x6f,0x33,0x18, + 0x51,0x2f,0x4a,0xae,0xd6,0x33,0x62,0x3e, + 0xe3,0xc5,0xd9,0x8a,0xed,0x20,0x18,0x1b, + 0x85,0xda,0x74,0x9b,0x8a,0x7d,0x49,0x4b, + 0x20,0xdc,0xbb,0xf0,0x3f,0xd6,0x18,0xbc, + 0x15,0x2d,0x82,0xb9,0x75,0x6d,0xff,0x9b, + 0x99,0x8c,0x31,0x15,0x79,0xb5,0x0e,0xa5, + 0x34,0xb9,0x0a,0x16,0x9c,0x95,0xc0,0x17, + 0x28,0xf8,0xd6,0x5f,0x95,0x9d,0x29,0x09, + 0xd1,0x9f,0xc6,0x40,0x4a,0xb1,0x2a,0xfc, + 0xd4,0x95,0x8d,0xeb,0x32,0xfd,0x4d,0x17, + 0x21,0xaa,0x52,0x2a,0x84,0x18,0xc4,0xaa, + 0xe0,0x2c,0xdb,0x41,0x20,0x78,0x45,0x21, + 0xd7,0x8a,0x27,0x24,0x29,0x26,0x4a,0xe1, + 0x0a,0xda,0xd7,0x4c,0xb1,0xee,0x15,0xfa, + 0xbc,0xc1,0x79,0xc5,0xbd,0xf7,0x6f,0xf0, + 0x79,0xe8,0x78,0x3a,0x4c,0x08,0xeb,0x15, + 0x6e,0xd2,0x89,0xe4,0xd4,0xb7,0xa4,0x5c, + 0x88,0x9b,0x25,0x4a,0x29,0xde,0xbb,0xe9, + 0x79,0xfa,0xc3,0xbf,0x66,0x75,0x71,0xc1, + 0x64,0xb1,0xcf,0xe1,0xd1,0x31,0x8d,0x73, + 0x2c,0xf6,0xf7,0xf8,0xd5,0x5f,0xfd,0x3a, + 0xce,0x1a,0x72,0x16,0x54,0x21,0x84,0x91, + 0x94,0x04,0xe8,0x9c,0x2d,0xf6,0x48,0x29, + 0xe0,0xc3,0x03,0x5e,0x3c,0xb8,0xcf,0x6a, + 0x38,0x61,0xbd,0x79,0x49,0x58,0xcc,0x89, + 0x4d,0xa1,0x09,0x1b,0x36,0x2f,0x76,0x57, + 0x89,0x13,0x52,0x67,0x65,0x94,0x2e,0xf4, + 0xe1,0x3e,0xfd,0x78,0x0e,0x28,0xe1,0x84, + 0x6a,0x63,0x2c,0x3a,0x68,0x51,0x58,0xc6, + 0xea,0xd9,0x57,0x4a,0xd1,0x34,0x5e,0x0a, + 0xa3,0xaa,0xb4,0x69,0x9c,0xc1,0x0e,0x41, + 0x64,0xf9,0x29,0xf7,0x38,0x6b,0xd0,0xa9, + 0x60,0x9d,0xc5,0x16,0xd9,0x66,0x45,0x15, + 0x9c,0x81,0x80,0xa6,0xef,0x07,0x8c,0x36, + 0x38,0x63,0xb0,0xde,0x52,0xb3,0x2c,0x60, + 0x54,0x57,0x51,0xe4,0x63,0x4c,0xa8,0x28, + 0xfd,0x0b,0x88,0x70,0xd9,0xaa,0x22,0x51, + 0xb2,0x4a,0x33,0xf6,0x3d,0x25,0x27,0xe1, + 0xd8,0xab,0xa7,0x3c,0xa5,0x8c,0x75,0x56, + 0x84,0x10,0x5a,0xa1,0x0b,0x0c,0x41,0xca, + 0xc0,0x4c,0x43,0x4c,0x91,0x6e,0x1e,0xb9, + 0xf7,0xee,0x2b,0x3c,0x57,0x53,0xbe,0x38, + 0x77,0xb4,0x8b,0x3d,0x79,0xc9,0x21,0xe1, + 0xf4,0x48,0x31,0x73,0xac,0x73,0x44,0x46, + 0xd2,0x2e,0xf0,0xea,0xdd,0x13,0xde,0xb9, + 0xfd,0x16,0x43,0x3f,0xf0,0xe9,0xf7,0xbf, + 0xc5,0xe3,0xd9,0x21,0x37,0x5f,0xbd,0x87, + 0xeb,0x3a,0x89,0xa9,0x4d,0x09,0x72,0x62, + 0x8c,0x91,0x10,0xc7,0xea,0x6a,0x2a,0xa4, + 0x18,0x98,0x4c,0x16,0x1c,0xbd,0xf6,0x0b, + 0x28,0xf3,0xdf,0xb2,0x8d,0x37,0x24,0xa0, + 0x72,0xb3,0xe5,0x61,0x7f,0xc0,0x57,0x4f, + 0x3c,0xe5,0xa3,0x0c,0x49,0x2e,0xf5,0x5c, + 0x46,0xc9,0xce,0x32,0x3d,0xb1,0x6c,0x31, + 0x4a,0x8e,0x5f,0xae,0x44,0xe0,0xaa,0x46, + 0xad,0x5b,0x62,0x0c,0x78,0x2d,0x32,0xdc, + 0x42,0xb9,0x32,0x29,0xe5,0x5c,0x48,0x4a, + 0xb1,0x1c,0x12,0x36,0xe4,0x8c,0xd3,0x0a, + 0x6f,0x2d,0xda,0x58,0x9c,0x95,0x30,0xae, + 0x31,0x44,0xb4,0xc9,0x58,0xab,0xb0,0xd6, + 0x20,0x38,0xa5,0xec,0x18,0x63,0x0d,0x25, + 0xcb,0x12,0xf1,0x8d,0xa7,0x64,0x08,0x39, + 0x31,0xf6,0x49,0x12,0x42,0xb5,0x22,0xc5, + 0x84,0x37,0x82,0x7a,0xca,0x45,0xa3,0x88, + 0x31,0xa1,0x8d,0x61,0x8c,0xa2,0x96,0x54, + 0x55,0x45,0x6b,0xad,0x65,0x0c,0xf1,0x4a, + 0x2a,0x3a,0xe6,0x84,0xb1,0xae,0xe6,0x90, + 0x58,0x8a,0xce,0x2c,0xee,0xdd,0xe3,0x69, + 0x7b,0x93,0x07,0x1b,0x8f,0x9d,0x56,0x53, + 0x48,0x89,0x24,0x1a,0x9c,0x92,0x04,0x38, + 0x43,0x62,0x72,0x70,0x9d,0xf8,0xc1,0xbf, + 0xe3,0x78,0x6a,0xb0,0x5a,0x31,0xbb,0x76, + 0x9d,0xa3,0x9b,0xb7,0xf9,0xe2,0xc7,0x1f, + 0xf0,0xf1,0xb7,0xff,0x98,0x6d,0x30,0xac, + 0x92,0xe3,0xab,0xef,0xbe,0xcb,0x58,0x5d, + 0x62,0xbe,0x6d,0x98,0xce,0x66,0x30,0x64, + 0x76,0xbb,0x9e,0xae,0x9b,0xf1,0xbd,0x4f, + 0x37,0xfc,0x5b,0xf5,0x2b,0xd8,0xc6,0x70, + 0xb2,0x0b,0xa0,0x32,0xa7,0xeb,0x81,0xb0, + 0xb0,0x34,0x33,0x4b,0xec,0x77,0x8c,0xa3, + 0x2c,0x16,0x6b,0x0c,0xba,0x7d,0x46,0xff, + 0x7c,0x85,0x56,0xa5,0x5e,0xb7,0xc2,0xb6, + 0x2a,0xa3,0xb1,0x48,0xa3,0xab,0x2b,0xda, + 0x51,0x2a,0xe2,0xab,0x94,0xaa,0xe9,0x13, + 0x09,0x95,0x11,0x54,0xc4,0xd6,0x78,0x90, + 0x98,0xc1,0x9b,0x22,0x5e,0x0f,0xad,0xb1, + 0xce,0x60,0xea,0x3f,0xa0,0x08,0xc2,0xea, + 0xbd,0x41,0x19,0x28,0x29,0x09,0x11,0x83, + 0xc2,0x5b,0x18,0x6b,0x9e,0x89,0x56,0x86, + 0x31,0x04,0xb1,0x8c,0x53,0x48,0x45,0x8b, + 0x84,0x47,0x15,0x62,0x96,0x54,0xd1,0xa6, + 0x71,0x8c,0x49,0xc4,0x13,0x97,0xe9,0x0a, + 0x29,0xd5,0x71,0x14,0x45,0xfe,0x6c,0xac, + 0xae,0x76,0x3a,0x50,0xda,0x71,0xf0,0xea, + 0x1e,0xf7,0xed,0x35,0xd2,0xb6,0x65,0xdc, + 0x2e,0xc1,0x36,0x58,0xef,0x24,0xf8,0x7e, + 0xd6,0x52,0x86,0x11,0x75,0x59,0x20,0x74, + 0x53,0x4c,0x71,0xa4,0xdd,0x8e,0x7e,0x67, + 0xd0,0xb6,0x65,0xea,0x5b,0x0e,0x0f,0xf7, + 0xb8,0x76,0xe3,0x57,0xc8,0xf6,0x80,0xdf, + 0xfb,0xcf,0xff,0x6b,0xc2,0xfa,0x7f,0x00, + 0xa5,0x71,0xd6,0xe1,0xac,0x28,0x5d,0xbe, + 0xfa,0xfa,0x6d,0xde,0x7e,0xe3,0x1d,0x8e, + 0x0e,0xae,0xf3,0xed,0x1f,0x9f,0x12,0xf6, + 0xee,0xb1,0x0d,0xcf,0xd8,0x2f,0x3b,0xd2, + 0x7a,0x09,0xb3,0x96,0xfb,0x17,0x85,0xbd, + 0xa3,0x96,0xe1,0x62,0xe4,0xd6,0xf1,0x01, + 0x1f,0xff,0xf0,0xa9,0x84,0xfd,0x27,0x03, + 0xa4,0x2b,0xcd,0x96,0x31,0x92,0x32,0x54, + 0xb2,0x88,0xee,0x8c,0x56,0x02,0x24,0x96, + 0x8c,0x1c,0x18,0xa2,0x81,0xbb,0x4c,0x23, + 0x0a,0x21,0xc9,0x49,0x71,0x59,0x56,0x95, + 0x6a,0xba,0xc9,0xa5,0xa0,0x52,0xc2,0x3b, + 0x27,0x9a,0xa9,0x2a,0x36,0xb0,0x56,0x4c, + 0x29,0x39,0x64,0xb2,0x52,0xe8,0x08,0x85, + 0x44,0x9f,0x15,0xde,0x5b,0xc6,0x90,0x08, + 0x29,0xe0,0x1b,0x4f,0x1a,0x03,0xd6,0x1a, + 0x42,0x48,0x18,0x57,0x4b,0xe2,0x2c,0x14, + 0x6d,0xaa,0x59,0x76,0x02,0x1e,0x52,0x8f, + 0x4b,0xa9,0xca,0x62,0x8c,0xa8,0x5a,0x58, + 0x88,0x78,0x2e,0xe3,0x9a,0x86,0x8b,0xc5, + 0x21,0xa5,0xd9,0x27,0xac,0xce,0x04,0x96, + 0x5c,0x9d,0x92,0xba,0x29,0xca,0x38,0xc6, + 0xd3,0x2f,0x68,0x17,0x47,0xe4,0x54,0x1f, + 0x86,0x9f,0xe0,0x67,0x0b,0xfc,0xec,0x00, + 0xad,0x12,0x29,0x8e,0xd2,0xd9,0x4f,0x8f, + 0xc8,0x71,0xe0,0x2f,0xbe,0xfb,0x21,0xf6, + 0xce,0x2f,0xd5,0xb9,0x20,0x06,0x95,0x02, + 0xaa,0x99,0x10,0x56,0x67,0xfc,0xed,0x6a, + 0xcb,0xc7,0x7f,0xf2,0x29,0xfb,0xe9,0x19, + 0x5c,0x3f,0x41,0xbf,0xea,0x89,0xaa,0x30, + 0xe8,0x80,0x7e,0xfe,0x14,0x75,0x30,0xe7, + 0x49,0x99,0x72,0xb0,0xd8,0x32,0x3c,0xd2, + 0x7c,0xb1,0x7c,0x4e,0x2c,0x19,0x07,0xc4, + 0xdd,0x3e,0xd6,0x08,0x83,0xea,0x9d,0x28, + 0xe2,0x73,0x10,0x4d,0xb0,0x51,0x92,0x47, + 0x6f,0x2e,0x9f,0x75,0x4d,0x42,0x2d,0x05, + 0x06,0x25,0x96,0x6f,0xef,0x2d,0x65,0x08, + 0xd8,0xd6,0x6a,0xc2,0x95,0xe2,0x4e,0xf2, + 0xa9,0xac,0x56,0x52,0x25,0x85,0x88,0xd2, + 0x15,0x1e,0xce,0x52,0x9e,0x65,0xf4,0x55, + 0xb6,0x94,0x31,0x42,0xd0,0xe7,0x52,0xf0, + 0x4e,0xb3,0xde,0x06,0x18,0xab,0xbf,0xa2, + 0x08,0xc6,0x33,0x8c,0x01,0x67,0x0c,0x4d, + 0xd7,0x11,0x43,0xa8,0xc8,0xad,0x64,0x16, + 0x66,0xb9,0x64,0x30,0x5a,0x76,0x94,0xa4, + 0xda,0x71,0xd5,0xc7,0x18,0xad,0x69,0xba, + 0x8e,0x97,0x51,0xd3,0x9f,0x3d,0x61,0xb2, + 0x77,0x83,0xee,0xfe,0x03,0xf4,0xcb,0x17, + 0xb8,0xf9,0x4b,0xfe,0xc5,0x7f,0xf5,0xbb, + 0x3c,0x7f,0xfc,0x88,0x17,0x2f,0x7b,0x76, + 0x46,0x13,0x93,0x26,0x5b,0x78,0xf2,0x6c, + 0x8f,0xd6,0x2b,0xb4,0x9f,0x20,0xef,0xbd, + 0x10,0xc7,0x80,0xf3,0x8e,0xc7,0xe7,0x91, + 0x5c,0xd3,0x18,0xb4,0x71,0xe4,0x10,0x40, + 0x8f,0xa4,0x38,0x92,0x86,0x11,0x12,0x34, + 0x7e,0x8a,0x1e,0xe0,0x6c,0xbd,0xc6,0x29, + 0x83,0x6e,0x5a,0xca,0xf9,0x4b,0xcc,0x7a, + 0x49,0xb8,0x76,0x93,0x55,0xb3,0xa0,0x99, + 0x3e,0xe7,0xe5,0xb3,0x0d,0x2a,0x3b,0x4a, + 0x4c,0x84,0x32,0x90,0xb2,0x44,0x3f,0x8d, + 0x31,0x91,0x8b,0x6c,0x79,0x55,0x24,0x52, + 0x30,0x16,0x41,0x36,0xd0,0x82,0x5c,0x68, + 0xc0,0x58,0x23,0xe5,0xba,0x42,0xe8,0x06, + 0xa3,0xb0,0x4a,0xab,0xab,0x3c,0x44,0x55, + 0x24,0xac,0x71,0x0c,0x11,0x57,0x0c,0x09, + 0xd1,0xb1,0x3a,0x63,0x28,0x45,0xa2,0x50, + 0xb5,0x96,0x1c,0x5b,0x55,0x40,0x29,0x87, + 0x52,0x0a,0x6b,0xa5,0x27,0xf1,0xde,0x91, + 0x86,0x1e,0x94,0x97,0xbc,0x91,0x94,0x69, + 0x9c,0x28,0x46,0x72,0x6d,0x84,0xc6,0x31, + 0x60,0xac,0xa9,0x3b,0x42,0x76,0x8e,0x77, + 0x8e,0x7e,0x18,0x31,0xc6,0x30,0xa6,0x84, + 0xca,0xe9,0xcb,0x66,0x49,0x59,0x5c,0x5a, + 0xe1,0xf3,0x8c,0x93,0x9f,0x7c,0x4e,0x1b, + 0x13,0xd1,0xcc,0xf8,0x67,0xff,0xfc,0xd7, + 0xb9,0xbe,0x88,0xfc,0xf4,0xaf,0x1f,0xf1, + 0xd1,0xb7,0x2e,0xf8,0xfb,0xbf,0xf1,0x16, + 0x5f,0xff,0x87,0x6f,0x31,0x9d,0xcd,0xb8, + 0xff,0xd5,0x03,0xc1,0xcc,0x42,0x8f,0x6f, + 0x1a,0xc2,0xb0,0x25,0xe7,0x40,0xb6,0x13, + 0x7e,0xf4,0xd9,0x53,0xb9,0x97,0x4a,0x86, + 0x94,0x88,0xfd,0x06,0xb5,0xdb,0xe0,0x86, + 0x01,0x7f,0xf1,0x02,0x97,0x0d,0xc9,0x04, + 0x5a,0xa5,0x60,0x58,0xd1,0x4e,0x0f,0x51, + 0x0f,0x9e,0x91,0x4a,0x84,0x12,0x20,0x27, + 0x1e,0x2e,0xe1,0xbd,0x5b,0x0b,0xee,0xdf, + 0x7f,0x4e,0xe7,0x17,0xb5,0xa1,0xdd,0x09, + 0x7e,0xa7,0x34,0xc6,0x89,0x26,0x4d,0xd5, + 0xb0,0x1b,0x90,0xde,0x4d,0x61,0x24,0xbf, + 0xd2,0x4a,0x45,0x3a,0x86,0xc0,0xe5,0x4d, + 0xaa,0x95,0xdc,0xa5,0xb6,0xf1,0x8e,0x31, + 0x66,0x52,0x8e,0x94,0xac,0xc8,0x36,0x5d, + 0x5d,0x36,0x29,0x8b,0xda,0x42,0x52,0x3a, + 0xa5,0x5e,0xce,0xa5,0xa0,0xb5,0x16,0x8d, + 0x55,0x4e,0x68,0x6b,0x89,0x31,0x8b,0x13, + 0xd7,0x39,0x1a,0x85,0xe8,0x80,0x11,0x2e, + 0xbc,0xdf,0x45,0xbc,0x15,0x49,0x90,0x31, + 0xd2,0xab,0x94,0x22,0x98,0x95,0x56,0x4a, + 0x24,0x47,0x29,0x4a,0xce,0x61,0xca,0xa8, + 0x2c,0xbb,0xb0,0xea,0x28,0x44,0x38,0x31, + 0x6c,0xd8,0x7f,0x39,0xe2,0x83,0x67,0x48, + 0x81,0xa6,0x6d,0xb8,0x75,0xb7,0xe3,0xf1, + 0xb3,0x87,0x7c,0xf0,0xad,0x4f,0x58,0xaf, + 0x3b,0xfe,0xf4,0xdf,0xfc,0x84,0x67,0x8f, + 0x96,0x7c,0xb1,0xf9,0x88,0x7f,0xf2,0x3b, + 0xff,0x88,0x18,0xa6,0x4c,0x67,0x13,0x36, + 0xe7,0x8f,0x98,0xee,0x5f,0xc7,0x36,0x2d, + 0x3f,0xf8,0xde,0x87,0xfc,0xe8,0xaf,0x3f, + 0x62,0xe6,0x16,0x14,0x55,0x50,0x61,0xcd, + 0xf1,0x41,0xcb,0xc5,0x8b,0x47,0xa4,0x3e, + 0x12,0xb3,0x98,0x38,0x63,0x8e,0x0c,0x29, + 0xe1,0xe6,0x47,0x18,0xeb,0xc5,0xd1,0x8b, + 0xa6,0x74,0x12,0x4c,0x13,0x62,0x60,0x55, + 0x36,0x1c,0x9e,0x78,0x36,0x2f,0x07,0x12, + 0x96,0x31,0x6f,0x6b,0xef,0x85,0xc4,0xd3, + 0x1a,0x4d,0x56,0xb2,0x43,0x42,0x2c,0x92, + 0x34,0xa1,0x0b,0xae,0xde,0xc9,0x21,0x66, + 0x34,0x32,0x9d,0xa1,0xd6,0x47,0xec,0xc6, + 0x11,0x4b,0xd5,0x12,0x19,0xad,0x85,0x10, + 0x0a,0x82,0x67,0xa5,0x0a,0xbd,0xa3,0x6b, + 0xca,0x5b,0x16,0x8f,0x9c,0x36,0x0a,0x53, + 0x0b,0x81,0x4c,0xa1,0x4f,0x52,0xf6,0xe5, + 0x1c,0xb1,0xce,0x91,0x95,0xfc,0x10,0xa5, + 0x44,0xc6,0xe3,0x9c,0x03,0x92,0xb8,0x75, + 0x6b,0xc3,0x57,0xc8,0xb4,0xce,0xd1,0xee, + 0xb5,0x0c,0xbb,0x91,0x54,0x24,0x8d,0xb4, + 0x71,0x0d,0xbe,0x69,0x48,0x71,0x64,0xb9, + 0xd9,0x52,0x8a,0x62,0xda,0x7a,0xa6,0x66, + 0xa4,0xe4,0x91,0xd3,0xe5,0x13,0x9c,0x9b, + 0x31,0x3b,0xe8,0x18,0xc6,0x0d,0x9f,0xfc, + 0xe8,0x0b,0x2e,0x5e,0x66,0xba,0xae,0xc5, + 0xda,0x86,0xfb,0x3f,0xde,0xf0,0xfa,0xd7, + 0x7f,0x91,0xb3,0xd3,0x27,0x3c,0x6f,0x03, + 0xa6,0x2c,0x98,0x2c,0xae,0x11,0xc6,0x1d, + 0x4e,0x7b,0xfe,0xe0,0x5f,0xff,0x11,0x7a, + 0xb5,0xa3,0x31,0x51,0x3c,0x8a,0x14,0x56, + 0xac,0xd0,0xcd,0x96,0x9c,0x1a,0x8c,0x5f, + 0x10,0xc6,0x1e,0x52,0x20,0x96,0x01,0x16, + 0x07,0x98,0x8b,0x53,0x52,0xdc,0x60,0x94, + 0x01,0x2d,0x5a,0xe6,0xb4,0x3e,0xe7,0x47, + 0x3f,0xfa,0x3e,0x3f,0xf7,0xf3,0xef,0x70, + 0xf6,0xf4,0x05,0xde,0x79,0x48,0x9b,0x9f, + 0x71,0x75,0xc9,0x14,0x04,0x5d,0xcd,0x49, + 0x31,0x25,0xac,0x13,0xb9,0xee,0x30,0x26, + 0x8c,0x16,0xa7,0x7c,0x1f,0xa4,0x80,0x6a, + 0xb5,0x44,0x84,0xe8,0xa2,0xb1,0x92,0x5b, + 0x68,0x25,0x22,0xb5,0x40,0x63,0x8c,0x94, + 0xaa,0x39,0x51,0x94,0x50,0xb4,0xce,0x08, + 0xc7,0xad,0xc4,0x7a,0x58,0x05,0xc8,0xc8, + 0x7d,0xa2,0x25,0x6b,0xdd,0x69,0x53,0x1f, + 0x78,0xc1,0x79,0x47,0xc9,0xa2,0x77,0x15, + 0xf0,0x51,0x8e,0xb8,0x52,0x12,0x37,0x6e, + 0xdc,0xe2,0xd6,0xcd,0xeb,0x2c,0xe6,0x7b, + 0xd5,0xcf,0xee,0xa0,0x18,0x31,0xfb,0x78, + 0x4f,0xdb,0x35,0x38,0x63,0x50,0xda,0xa0, + 0xac,0xc5,0x1a,0x2f,0x46,0xd1,0x21,0x72, + 0xfa,0x72,0xcd,0xa3,0x27,0x1b,0x9e,0x3c, + 0x7e,0xca,0x76,0xb5,0xe6,0x5b,0x7f,0xf9, + 0x09,0xde,0x2d,0xf0,0xa6,0xc3,0x9a,0x16, + 0xb4,0x66,0xfb,0xa0,0xe7,0xfd,0xdf,0xf9, + 0x3a,0x46,0xad,0x89,0x69,0x07,0xd5,0x12, + 0xf1,0x47,0x7f,0xf4,0x27,0x7c,0xa0,0x6f, + 0xa1,0x6e,0xed,0x28,0x9b,0x1e,0x1b,0x8b, + 0x0c,0xab,0x99,0x2e,0x98,0xdf,0x3a,0xe4, + 0xe5,0xd8,0x11,0xdb,0x96,0xf0,0xe9,0x0f, + 0x29,0xa7,0x1b,0xd0,0x82,0x52,0x6c,0x2e, + 0x4e,0xe9,0xf2,0x0e,0x65,0x26,0xb0,0xdb, + 0x91,0xc7,0x1d,0x3c,0xbb,0x4f,0xab,0xe7, + 0xac,0x9e,0xef,0xb8,0xfe,0xea,0x82,0xb3, + 0xc7,0x23,0x99,0x0d,0x91,0x22,0x77,0x64, + 0x29,0x18,0x2b,0x82,0xeb,0x9c,0x44,0xf0, + 0xd1,0x79,0x47,0x3f,0x88,0x49,0x29,0x66, + 0x85,0x35,0x8a,0x49,0x23,0xa8,0xb7,0x60, + 0x76,0xa2,0x92,0xb1,0xd6,0x18,0xa9,0xa6, + 0xb4,0x26,0x04,0x31,0x94,0xd8,0xaa,0x83, + 0x1a,0x43,0xc0,0x5b,0x4b,0x0c,0x91,0x9c, + 0x32,0x9a,0x4b,0x7c,0x49,0x62,0xc4,0x55, + 0xc5,0xb5,0x28,0xa2,0x10,0x51,0x56,0x53, + 0x62,0x44,0x6b,0x8d,0xb7,0x86,0x5d,0x18, + 0x71,0x75,0x8e,0xd5,0xd1,0xd1,0x01,0xaf, + 0xbc,0xfa,0x2a,0x07,0x7b,0xc7,0x94,0x9c, + 0xf0,0xc6,0xe0,0xbb,0x16,0x0c,0xe8,0x24, + 0xb5,0x79,0xe8,0x13,0xf3,0x99,0xa7,0x94, + 0x42,0xf7,0x94,0xca,0xfb,0x00,0x00,0x18, + 0xa8,0x49,0x44,0x41,0x54,0x8a,0x85,0xd9, + 0xa4,0x23,0x97,0x4c,0xdb,0x75,0x30,0x55, + 0xcc,0x0e,0xf7,0xb8,0xf3,0x46,0x46,0x95, + 0xc4,0x07,0x7f,0xf3,0x3d,0xce,0x5f,0x26, + 0xbc,0x37,0x34,0xcd,0x0c,0xab,0x0c,0x43, + 0xdc,0xf1,0xf2,0x74,0xe4,0x6f,0xff,0xea, + 0x01,0x6f,0xfc,0xfc,0x82,0x3d,0xa7,0xf9, + 0xf1,0x47,0x1f,0xf3,0xbf,0xff,0x1f,0xff, + 0x37,0x7f,0xf3,0x58,0x61,0xbe,0xf2,0x1b, + 0xe4,0x45,0x90,0x40,0x4d,0xd3,0x80,0xb1, + 0xa8,0x92,0x28,0x79,0x64,0x66,0x77,0x98, + 0x72,0x8e,0xb9,0x35,0xc5,0xf1,0x1c,0xcc, + 0x53,0xe6,0xe7,0x1f,0x10,0x6e,0xef,0x31, + 0x2e,0x3d,0xdb,0x67,0x3b,0xca,0x47,0x3f, + 0xc4,0xaa,0x42,0x53,0x06,0x8a,0x36,0xe4, + 0x4d,0xc7,0xc1,0x8d,0x96,0x66,0xb2,0xe3, + 0xec,0x61,0xa1,0x6c,0x21,0x65,0x55,0xc9, + 0x39,0x29,0x7f,0x9d,0x35,0x84,0x9c,0xd9, + 0xf4,0xa3,0xc0,0x2b,0x28,0x9a,0xc6,0xe2, + 0xb4,0x38,0x90,0x53,0x01,0xab,0xa0,0xf1, + 0x0d,0xc3,0x18,0xb0,0xa9,0xd4,0x0b,0x47, + 0xa9,0xea,0x7c,0x4a,0x0c,0x51,0x64,0x39, + 0x12,0x1c,0x90,0x18,0x53,0x66,0x1c,0x03, + 0x5d,0xeb,0x68,0xad,0x21,0x17,0x85,0x75, + 0x56,0x94,0x8d,0x5a,0xb3,0x1b,0x46,0xb2, + 0x92,0xf9,0x1e,0x22,0x21,0x2d,0x64,0x25, + 0xf0,0xc1,0x6c,0x3a,0xe5,0x9d,0xb7,0xde, + 0xe0,0xce,0x9d,0xbb,0xb8,0xa6,0x11,0x5d, + 0xb9,0x77,0xf2,0xbb,0x71,0x52,0x16,0x6a, + 0xd0,0xd6,0x81,0x92,0xc6,0xb4,0xce,0x48, + 0x43,0x91,0x71,0xd6,0x57,0x38,0xbf,0x42, + 0xfa,0x46,0xb1,0x59,0x66,0xfe,0xec,0xcf, + 0x1e,0xa0,0xf5,0x1e,0xf3,0xf6,0x00,0xa7, + 0x0c,0xbb,0x61,0x4d,0xe3,0x66,0xf4,0xe3, + 0xc0,0x5f,0xfe,0xc9,0x4f,0x38,0x7b,0x71, + 0xc2,0x5f,0x7c,0xe7,0x5f,0xf3,0xe1,0x87, + 0xdf,0x97,0x26,0x57,0x1b,0xe6,0x9b,0x15, + 0x6a,0x76,0x13,0xbd,0xfa,0x84,0x7b,0x5f, + 0xff,0x1d,0xae,0xf9,0x9e,0x6b,0x66,0xc7, + 0xc4,0x44,0x2c,0x30,0x5f,0x2c,0xf0,0xfe, + 0x08,0xf5,0xf3,0x27,0x84,0x90,0xe4,0x33, + 0x68,0x8d,0x7a,0xe5,0x6b,0x9c,0x9d,0x6e, + 0xf9,0xf8,0x27,0x8f,0xb8,0xfb,0xda,0x11, + 0xde,0x89,0x3b,0x4c,0x29,0x4f,0xdf,0x0f, + 0x44,0x3f,0x63,0x3e,0xfb,0x2a,0x1f,0x7e, + 0xfb,0x2f,0x48,0x29,0x5e,0xb1,0xa0,0x4d, + 0xeb,0x18,0x42,0xc4,0x2a,0xa1,0x69,0xe7, + 0x93,0x86,0xd5,0x6e,0x60,0x1c,0x13,0xbb, + 0x3c,0x8a,0xae,0x19,0x79,0x79,0x61,0x0c, + 0x0c,0x21,0x48,0x90,0xb2,0x35,0x96,0x58, + 0x3d,0x1d,0x31,0xc8,0x79,0x2f,0x5a,0x56, + 0x2b,0xd1,0xda,0xb9,0xe0,0xbd,0xc5,0x19, + 0x4b,0xcc,0x05,0x6f,0x8d,0x84,0x72,0xb5, + 0x9e,0x1c,0x12,0xca,0x58,0x49,0xe2,0xa4, + 0x36,0x37,0xc6,0x30,0xf1,0x8e,0x37,0x5f, + 0x7b,0x83,0xd7,0x5f,0x7f,0x9d,0x6e,0x32, + 0xad,0xc3,0xc6,0x74,0xbd,0x53,0x2a,0xe5, + 0x8b,0x16,0x28,0x3a,0x64,0xac,0x32,0xcc, + 0x26,0x0e,0x63,0x0c,0x43,0x2f,0xe3,0x1e, + 0x9c,0x6f,0x24,0x1d,0x42,0x49,0x39,0x9c, + 0x94,0x22,0x8e,0x89,0xff,0xed,0x0f,0xbf, + 0x43,0x8e,0x33,0x1a,0x3f,0xc1,0x18,0xc7, + 0x66,0x77,0xce,0x6c,0x7a,0x8d,0xf5,0xf6, + 0x1c,0xad,0xa5,0x48,0xf8,0xce,0x5f,0xfc, + 0x98,0xc7,0x4f,0xcf,0x2b,0xac,0x5d,0x50, + 0xa5,0xb0,0xfa,0xf4,0x3b,0xdc,0xba,0x7d, + 0x9d,0xdf,0xfa,0x8d,0x7f,0xc0,0xad,0x5b, + 0x01,0x95,0x2d,0xce,0x2c,0x24,0x4a,0xb6, + 0x69,0xa5,0x71,0x6d,0xa7,0x72,0x13,0x74, + 0x60,0x9c,0xb9,0x02,0xff,0xe6,0xad,0xe6, + 0xd6,0xc9,0x1b,0x8c,0x71,0xc4,0x37,0x0d, + 0x94,0xc4,0xf2,0x62,0xc5,0xe2,0xf6,0x01, + 0x31,0xf6,0x70,0x73,0x9f,0x3b,0xf3,0x86, + 0x2f,0x1e,0x3f,0xe6,0xc9,0xb3,0x27,0x5c, + 0x5c,0x9c,0x5f,0xc5,0x6b,0xcc,0x3a,0xc7, + 0x2e,0x24,0x39,0xf6,0x6b,0x0f,0x66,0xb5, + 0xe1,0xd2,0x28,0x95,0xb2,0x18,0xa3,0xb4, + 0xd1,0x58,0x6b,0xad,0x08,0x13,0x4a,0x11, + 0xc5,0x79,0x6d,0xd4,0x80,0x2b,0xcc,0xde, + 0x5b,0x2d,0xd9,0xe8,0x46,0x80,0xc5,0x10, + 0x84,0x6b,0xee,0xfb,0xf1,0x6a,0x67,0xa1, + 0x75,0x8d,0x68,0x82,0x93,0x6b,0xc7,0xbc, + 0xfb,0xce,0xbb,0xcc,0xe6,0x0b,0xb4,0x52, + 0x57,0xfe,0x11,0xad,0x8d,0xb8,0x98,0x94, + 0x42,0x29,0x87,0x35,0x9a,0x6e,0x3e,0x45, + 0x21,0x25,0xa1,0x36,0x9a,0x94,0x12,0xed, + 0xa4,0x13,0x74,0x77,0x4c,0xa8,0x90,0xc0, + 0x69,0xac,0x75,0x68,0x14,0x2f,0x2f,0x76, + 0x9c,0xbe,0xc8,0x78,0xdb,0xd0,0x36,0x33, + 0xc6,0xb0,0xa3,0x6d,0xf7,0x39,0x3d,0xff, + 0xe2,0xea,0x12,0x0d,0xe5,0x94,0x9f,0x3c, + 0xf8,0x53,0xfa,0x70,0x81,0x42,0xe4,0x9c, + 0xaa,0xc0,0xcf,0xbf,0xf7,0x36,0xab,0xcd, + 0x96,0x9f,0x7e,0xfc,0x39,0xe7,0xe7,0x4b, + 0x7e,0xfd,0x57,0x7e,0x89,0x34,0x06,0x74, + 0x01,0xdf,0x38,0xbc,0xf7,0x0c,0xc3,0x20, + 0x42,0x40,0x67,0x88,0xc3,0x0e,0x63,0x35, + 0x9b,0x21,0x53,0x4a,0xc2,0x35,0xe2,0xb6, + 0x55,0x2a,0xb3,0xdb,0xec,0x98,0x4f,0x27, + 0x74,0xde,0x92,0xcc,0x04,0x14,0xbc,0x72, + 0xef,0x15,0x0e,0x8f,0x0e,0xb8,0xf3,0xf2, + 0x36,0x4d,0xab,0xf9,0xf8,0xa7,0x3f,0xe5, + 0x47,0x3f,0xf9,0xa9,0xd0,0x0d,0x05,0xb6, + 0x63,0x42,0x9b,0x82,0x12,0xbd,0x8f,0x20, + 0x12,0x48,0x42,0x46,0xa6,0xd0,0x87,0x88, + 0x8d,0x31,0x61,0xbd,0xe8,0x55,0x63,0x96, + 0xb8,0x61,0xab,0x72,0xf5,0xcf,0x29,0x26, + 0x6d,0x4b,0x46,0xba,0xed,0x71,0x08,0x3f, + 0x43,0x22,0x01,0x4a,0x64,0xa1,0x5a,0x8b, + 0x92,0x64,0x3a,0x5f,0xf0,0xd6,0x6b,0xaf, + 0x71,0xed,0xe4,0xa6,0xf8,0x44,0x62,0xc6, + 0x4f,0x3a,0x49,0x8f,0xde,0xf5,0x18,0xe3, + 0xd8,0x3b,0xda,0x67,0xd8,0xf5,0x74,0xd3, + 0x09,0xc6,0x88,0xa8,0x2e,0x27,0xb9,0xd4, + 0xfa,0x61,0xc4,0x69,0x45,0x14,0xa7,0x23, + 0xf3,0xf9,0x44,0x8e,0x40,0x14,0x63,0x1f, + 0xe8,0xd7,0x3b,0x36,0xcb,0x9e,0x5b,0x37, + 0x8f,0x59,0x9f,0x1b,0x1a,0x3f,0x21,0x85, + 0x91,0x94,0x13,0x39,0x07,0x7c,0x3b,0xe3, + 0xf8,0xb6,0xe1,0xc7,0x0f,0x3e,0x06,0x37, + 0x32,0x71,0x9d,0xc4,0xed,0x5d,0x3f,0xe6, + 0xfe,0xfd,0x87,0xfc,0xce,0xef,0xfd,0x47, + 0xe4,0x38,0x62,0x4c,0xe1,0xda,0xde,0x31, + 0xce,0x3b,0x54,0xdb,0x12,0x53,0x12,0x41, + 0xf7,0x18,0xc5,0x6d,0x3b,0x9f,0x81,0xca, + 0xc4,0xc6,0x49,0x48,0xa6,0x73,0x68,0x25, + 0x51,0x18,0xc6,0x78,0x72,0x18,0xd1,0xb9, + 0xd0,0x4c,0x5b,0x42,0x3f,0x60,0x72,0x62, + 0xb5,0xd9,0x31,0xd9,0x9f,0x32,0xe9,0x3a, + 0x8c,0x31,0xac,0x76,0x3d,0xef,0xbe,0xfb, + 0x3e,0x7b,0xdd,0x84,0xbf,0xfa,0xe0,0xef, + 0x68,0xbc,0xa6,0xd1,0x96,0xed,0x30,0x60, + 0x6a,0x00,0x43,0x2e,0x05,0xaf,0x32,0x7d, + 0x8c,0xe4,0x6a,0x83,0xb3,0x4a,0x4b,0xc2, + 0x72,0xce,0xd2,0x00,0xc6,0x14,0x49,0x11, + 0xbc,0x37,0x58,0x6b,0xe9,0xc7,0xf1,0xca, + 0x1b,0x18,0x73,0x1d,0xa0,0xa7,0x60,0xd2, + 0x78,0x6a,0x95,0xc7,0xf1,0xfe,0x1e,0xf7, + 0xde,0x7a,0x87,0x3b,0xb7,0x5f,0x61,0x36, + 0x9b,0xc8,0x68,0x3b,0xad,0x31,0xd6,0x92, + 0x86,0x48,0x51,0x85,0xa9,0xb1,0x0c,0xe3, + 0xc8,0x66,0xb5,0xc1,0x7b,0x2b,0x04,0x0d, + 0x56,0x8e,0xb9,0x31,0x90,0x42,0xc2,0x5c, + 0x4e,0xec,0xf4,0xb6,0xc2,0x29,0x5a,0x06, + 0xb2,0x54,0x0b,0x36,0x5a,0xf3,0xe6,0x7c, + 0xc6,0xed,0xdb,0x27,0x7c,0xf0,0xbd,0x97, + 0xdc,0xff,0x38,0x31,0x14,0xc3,0x30,0x2c, + 0x31,0xd6,0xf0,0xca,0x57,0x67,0x74,0xf3, + 0x0d,0xcf,0xbf,0xf5,0x88,0xc5,0xac,0xe3, + 0x3f,0xfb,0xe7,0xff,0x29,0xad,0x91,0xe9, + 0x07,0x9f,0x3c,0xf8,0x82,0xe3,0xc5,0x5c, + 0xe6,0x94,0x18,0x53,0xb9,0x7a,0x4d,0xd6, + 0x99,0x34,0x06,0xc6,0x4b,0xed,0x58,0xd7, + 0xa0,0x8d,0xa2,0x54,0x17,0xad,0x55,0xd5, + 0xe8,0x9a,0x61,0xb7,0xd9,0x52,0xb2,0x5c, + 0xc0,0xd3,0xc5,0x02,0x28,0x4c,0x0e,0x27, + 0x3c,0x7f,0xf0,0x88,0xb1,0xdf,0x32,0x65, + 0x8a,0xb5,0x86,0x6b,0xd7,0x4f,0x98,0x6e, + 0x36,0x2c,0x97,0x4b,0x8e,0xf6,0xe7,0xa2, + 0x69,0x2b,0x90,0x42,0x10,0xe4,0xa0,0x66, + 0x11,0xaa,0x1a,0x70,0x60,0xb5,0x22,0xe6, + 0x4a,0x5d,0x7f,0xe3,0x6b,0x5f,0x29,0x9b, + 0x71,0x90,0x52,0x53,0x7d,0xe9,0x71,0xb8, + 0xfc,0xa5,0xb5,0x66,0xbd,0x1d,0x30,0xce, + 0x54,0x22,0x09,0x5c,0x25,0xa1,0xba,0x6e, + 0xc2,0xbb,0xef,0xbe,0xcb,0xdb,0x6f,0xbf, + 0xcd,0xb4,0xeb,0x64,0x24,0xab,0x73,0x38, + 0xe7,0x45,0xf7,0xaa,0x14,0x69,0x8c,0x84, + 0x21,0xd0,0x4c,0x5a,0x86,0xd5,0x16,0x28, + 0xf4,0xdb,0x9e,0x6e,0xd2,0xa1,0xad,0x25, + 0x85,0x51,0x42,0xe8,0xb5,0x62,0xbb,0xed, + 0x51,0xda,0x30,0xdf,0x9b,0x61,0xbd,0x93, + 0xbb,0x03,0xc5,0x7a,0xb9,0x21,0x65,0xf1, + 0xc2,0x7b,0xdf,0xd2,0xd6,0x01,0x33,0x67, + 0x2f,0x47,0x3e,0xff,0x74,0xc5,0x87,0x7f, + 0xfb,0x82,0xbe,0x8f,0xb4,0x27,0x89,0x54, + 0x96,0xec,0x1f,0xac,0x38,0x3a,0xde,0xe7, + 0xe4,0xf8,0x04,0xa3,0x64,0xe5,0x79,0xdf, + 0xe0,0x9d,0x24,0x0b,0x19,0xad,0x6b,0x82, + 0x84,0xa5,0x94,0x42,0x1c,0x07,0xa8,0x00, + 0x69,0x2e,0xd5,0x4b,0xa8,0x0d,0x56,0x83, + 0xb6,0x0d,0x31,0x46,0x91,0x4a,0xed,0x76, + 0x95,0xe8,0xea,0x04,0x90,0x1d,0x47,0x76, + 0xcb,0x5d,0x1d,0xcd,0x51,0xf0,0xb3,0xa9, + 0x40,0x4d,0x61,0x60,0xbb,0xd9,0x71,0xbe, + 0x5c,0xb2,0x3a,0x7d,0xc2,0xf7,0x3f,0xfc, + 0x88,0xc7,0x2f,0xcf,0xe8,0x9c,0xe1,0x6c, + 0xd3,0x63,0xab,0x72,0xa6,0x14,0x08,0x45, + 0xaa,0xda,0xcb,0x06,0xc6,0x6e,0xfa,0x1d, + 0xfb,0xd3,0x29,0x54,0x3c,0x25,0x66,0x8d, + 0xb2,0x4a,0x2e,0x5a,0x23,0x8d,0xe1,0x74, + 0xea,0x89,0xa1,0x1e,0x63,0x28,0x8c,0xd1, + 0xdc,0xbb,0xf7,0x06,0xef,0xbd,0xf3,0x1e, + 0x93,0x69,0x8b,0x1a,0x33,0xcb,0xed,0x92, + 0xa6,0x69,0x71,0x8d,0x27,0xe8,0x11,0x6d, + 0x35,0xd3,0xc5,0x9c,0x76,0x31,0x45,0x5b, + 0x4b,0x49,0x81,0xd9,0x7c,0x76,0x95,0x1c, + 0x94,0x52,0xb5,0x51,0x8f,0x23,0xab,0x97, + 0x17,0x3c,0x3f,0xbf,0x60,0x7e,0x78,0xc0, + 0xf1,0x8d,0x23,0xb1,0x42,0xa4,0x4c,0xbf, + 0xe9,0x25,0x90,0xc5,0x1a,0x66,0x8b,0x29, + 0xc6,0x4f,0x65,0x66,0x64,0x08,0x6c,0x2f, + 0x36,0x18,0xa5,0xf8,0x7b,0xbf,0x7a,0x83, + 0x3b,0xaf,0x79,0xfe,0xea,0x4f,0x7e,0xca, + 0xb3,0x8b,0xc4,0x2f,0xfd,0xda,0x0d,0xae, + 0x9d,0xbc,0x5e,0xb9,0x15,0x59,0x40,0xaa, + 0x64,0xba,0x76,0x8a,0x76,0x16,0xa5,0x5a, + 0x0c,0x32,0xd7,0x76,0xbb,0xde,0x49,0x77, + 0x9d,0x12,0x39,0xf3,0x25,0x94,0x51,0x12, + 0x49,0x39,0xce,0x57,0x2b,0x26,0xf3,0x05, + 0xc3,0x66,0xc5,0xb0,0xd9,0x72,0x70,0xed, + 0x80,0xc9,0xb4,0x11,0xd8,0xa8,0xea,0x03, + 0x82,0x1f,0x30,0xc6,0x11,0xc7,0x50,0x43, + 0x06,0x22,0xb6,0xe9,0xd0,0xa3,0xdc,0xaf, + 0xd6,0x58,0x4e,0x8e,0x0f,0x58,0xae,0xd7, + 0xc4,0x94,0x71,0xc6,0xca,0xd7,0x18,0xc3, + 0x50,0xbf,0xa6,0x14,0x18,0x2b,0x76,0xa7, + 0xbe,0xf1,0x0b,0x6f,0x95,0x54,0xf9,0x14, + 0xae,0xd2,0x43,0x34,0xd6,0x8a,0x67,0x41, + 0xdc,0x54,0x82,0x39,0x91,0xe1,0xf6,0xed, + 0x5b,0xfc,0x83,0xbf,0xff,0xab,0x1c,0x1c, + 0x1f,0xe3,0xb4,0x95,0xa0,0xcc,0x66,0x82, + 0xf1,0x0e,0xa5,0x35,0x17,0xcf,0x5f,0xd0, + 0x58,0x47,0x3b,0x9f,0x63,0x5b,0x27,0xdf, + 0xcb,0x3b,0x56,0xa7,0x2f,0xb9,0x78,0x7e, + 0x4e,0xc9,0x99,0x76,0x22,0x76,0xb1,0xe9, + 0x62,0xce,0xec,0xf8,0x84,0x38,0x06,0xc6, + 0x7e,0x85,0x6f,0x1b,0xa1,0x6e,0x2f,0x2d, + 0x16,0x45,0xc2,0x29,0x87,0xcd,0x8e,0xd5, + 0xc5,0x9a,0xf9,0x7c,0x41,0x2c,0x99,0xd9, + 0xde,0x02,0xa5,0x0d,0xb1,0x0f,0x44,0x22, + 0x9b,0x97,0x2b,0xd4,0x7a,0xc9,0x85,0x76, + 0xb4,0x53,0x2b,0x86,0xce,0x18,0x51,0x56, + 0xd3,0x34,0x13,0x4a,0xc9,0x32,0xed,0x5a, + 0x89,0xa8,0x22,0xa7,0x8c,0x73,0x86,0x38, + 0x46,0xfa,0xed,0x5a,0xfc,0x8c,0x43,0x8f, + 0x32,0x5e,0x32,0xd8,0x87,0x1d,0xc6,0x79, + 0x42,0x8c,0xf8,0x46,0xa2,0x63,0x73,0x8e, + 0xec,0x96,0x5b,0xac,0x17,0xe1,0xdf,0xe6, + 0x62,0x49,0xe3,0xad,0x0c,0x26,0xf0,0x56, + 0xcc,0x46,0xb1,0x40,0xcd,0xe5,0x3d,0x7b, + 0xf1,0x98,0xcd,0x36,0xf2,0xe2,0xe1,0xa7, + 0xb4,0x4d,0xcb,0xb7,0x3f,0xf8,0x31,0x2f, + 0x4e,0xcf,0x18,0xd2,0x4e,0xf8,0xa3,0xda, + 0x68,0x27,0xa4,0x98,0x4a,0x45,0x2a,0x2f, + 0x5b,0x6a,0x22,0x8f,0xd2,0xa6,0xa2,0xb0, + 0x5a,0xce,0xf7,0x74,0x99,0x78,0x28,0x46, + 0xfb,0xe9,0xb4,0xe5,0xe7,0xbe,0xfa,0x36, + 0x6f,0xbd,0xfd,0x36,0x7b,0xf3,0xb9,0xc4, + 0x26,0xe5,0x48,0x18,0x47,0x86,0xf5,0xba, + 0x46,0xed,0x8d,0x4c,0x26,0x13,0xa2,0xca, + 0x84,0xc1,0x60,0xed,0x04,0xd7,0x4d,0x40, + 0x29,0x16,0x47,0x87,0xcc,0x0f,0x0e,0x24, + 0xa2,0x5f,0x6b,0x48,0x85,0xe5,0xc5,0x92, + 0xb3,0xa7,0x4f,0x69,0x67,0x7b,0xc4,0x3e, + 0x11,0xb6,0x6b,0xe6,0x07,0xf3,0x2b,0x36, + 0x4d,0x21,0x2a,0xc6,0x6e,0x3e,0xa1,0x5d, + 0xcc,0xd0,0x45,0xa2,0x60,0x37,0xcb,0x25, + 0x39,0x81,0x6d,0x3d,0xdb,0xf5,0x96,0x26, + 0xec,0xd8,0x75,0x1d,0x53,0x2f,0xbc,0xb4, + 0xd6,0x0a,0x63,0x14,0xd6,0x37,0x38,0x37, + 0x21,0x26,0x99,0x69,0xe2,0x5c,0x4b,0x1a, + 0x07,0xc1,0x9b,0x36,0x01,0x65,0xe5,0x78, + 0x0c,0xc3,0x88,0x9e,0xd4,0x53,0xc0,0x68, + 0xda,0xd9,0x04,0xdf,0x4c,0x48,0xa5,0x06, + 0x1f,0x17,0x99,0x50,0x97,0x53,0xa2,0xdf, + 0x8e,0xac,0x97,0x1b,0xda,0xce,0xe3,0x9b, + 0x86,0xdd,0x30,0x62,0x3b,0x21,0xf7,0x8a, + 0x4a,0x90,0x23,0x4a,0x81,0xca,0x75,0x80, + 0x58,0x2a,0x8c,0x09,0xee,0xde,0x7e,0x95, + 0x17,0xcf,0x2e,0x68,0x74,0x8b,0xe9,0xa4, + 0x82,0xec,0x87,0x51,0x26,0x31,0x28,0xf0, + 0xda,0xa2,0x41,0xa0,0x93,0x2c,0x02,0xa8, + 0xca,0x33,0x57,0x19,0xa6,0x16,0xf1,0xdc, + 0x64,0x36,0xe7,0x77,0x7f,0xfb,0x37,0xf9, + 0xcd,0x7f,0xfc,0x5b,0xec,0x1f,0x1c,0xa0, + 0x9d,0x43,0x19,0x19,0xfc,0x02,0x54,0x3a, + 0xf6,0x52,0x79,0x12,0xd9,0xae,0x96,0x6c, + 0x56,0x6b,0x62,0x0c,0xac,0x97,0xe7,0x6c, + 0x57,0x4b,0xc6,0x7e,0xa0,0x9d,0x74,0x48, + 0xac,0x49,0xa2,0x9d,0x4c,0x68,0x27,0x13, + 0x8e,0xdb,0x6b,0xa8,0x52,0x48,0x14,0x5a, + 0x37,0xe3,0xe3,0x1f,0x7c,0x44,0x1a,0x07, + 0x56,0xeb,0x0d,0xc7,0x37,0xae,0x61,0xad, + 0xc5,0x77,0x0d,0xd4,0x58,0xef,0xa2,0x05, + 0xfa,0xef,0x26,0x1d,0x17,0x17,0x2b,0x96, + 0x67,0x2b,0x9a,0xf5,0x39,0x5b,0x14,0x69, + 0xee,0xe9,0xac,0x8c,0x88,0x45,0x29,0xbc, + 0x73,0xb8,0xa6,0x25,0x8e,0x03,0xfd,0x6e, + 0x60,0xd2,0xb5,0x0c,0x9b,0xb5,0x94,0x9d, + 0x99,0x5a,0x4c,0x0c,0x14,0xd3,0xe2,0xac, + 0x83,0x92,0xc0,0x82,0xb5,0x1e,0x72,0x91, + 0xf2,0xbb,0x6b,0x30,0x5e,0x6c,0xcd,0xaa, + 0x5a,0xd4,0x42,0x48,0x34,0xce,0xd2,0x74, + 0x9e,0xb1,0xdf,0x61,0x9c,0x63,0xf9,0xfc, + 0x8c,0xc9,0x7c,0x8a,0x6d,0x3d,0xba,0x2a, + 0x66,0xfa,0x61,0xcb,0xd8,0xa7,0xea,0x15, + 0x81,0xcd,0x72,0xc5,0x66,0xd8,0xa1,0x74, + 0xa4,0x41,0x50,0x72,0x67,0x2d,0x29,0x07, + 0x1a,0x6d,0x09,0x49,0xd2,0xf0,0xac,0xd1, + 0xa0,0x53,0x96,0x11,0x71,0x95,0xa3,0xce, + 0xb9,0xd0,0x75,0x9e,0xdf,0xfe,0xcd,0x7f, + 0xcc,0x3f,0xfd,0x17,0xff,0x92,0xe9,0x74, + 0x46,0x18,0x7a,0xb1,0x25,0x6c,0x07,0x94, + 0xb5,0xe2,0xd5,0x28,0xd5,0x36,0x5d,0x9d, + 0xb5,0xca,0x5a,0xa6,0xf3,0x03,0xe6,0xfb, + 0xd7,0xd0,0x5a,0x49,0x76,0x89,0xd1,0x28, + 0x32,0xfd,0x6e,0xc7,0x66,0x79,0xc6,0x38, + 0x04,0x62,0xdf,0x73,0xfa,0xfc,0x19,0x63, + 0x55,0x88,0x68,0xeb,0x70,0xbe,0xe1,0xd6, + 0xad,0x6b,0x68,0xdf,0xa0,0x9c,0xe1,0xf4, + 0xe9,0x73,0x56,0xeb,0x0d,0x6f,0xbe,0xfd, + 0x06,0x93,0xfd,0x85,0x38,0x83,0x53,0x02, + 0xa5,0x19,0x86,0x9e,0xcd,0x6a,0xcd,0xb4, + 0xf4,0x6c,0x4b,0x21,0x4d,0x3a,0x66,0x9d, + 0xbb,0xc2,0xcd,0xd0,0xc2,0x4e,0x1a,0x2d, + 0xd6,0x63,0x6b,0x0b,0x4d,0xa3,0x69,0xda, + 0x4e,0x4a,0xf6,0x10,0xd8,0xad,0x47,0xf2, + 0x18,0x78,0xfc,0xf8,0x39,0x8b,0xa3,0x03, + 0x0e,0x4f,0x0e,0xae,0xb2,0x54,0xf2,0x98, + 0xd8,0x2e,0xd7,0xf8,0xb6,0xa5,0x5f,0xae, + 0xc9,0xc3,0xc8,0xf2,0x4c,0x1a,0xbd,0xd9, + 0xc1,0x1e,0x25,0x45,0x94,0x55,0x0c,0x05, + 0xe6,0x7b,0x73,0x16,0x87,0x92,0xdb,0x9b, + 0xd2,0x88,0xd2,0x16,0x85,0xa6,0x71,0x2d, + 0xbb,0x30,0xd2,0x38,0x5f,0x27,0xc7,0x59, + 0xd0,0x9a,0x98,0xa0,0x8c,0x41,0x84,0x0e, + 0x28,0x26,0x8d,0x93,0xe9,0x70,0x55,0xd4, + 0x61,0x57,0x9b,0x5e,0xfc,0x21,0x5a,0x91, + 0xb2,0x21,0x56,0xb2,0xea,0x77,0x7f,0xfb, + 0xf7,0xf8,0x97,0xff,0xe5,0x7f,0xc1,0x30, + 0x46,0x56,0xeb,0x15,0x5a,0x29,0xba,0xb6, + 0xc1,0x7a,0xc9,0xa5,0xcd,0x31,0x49,0x70, + 0x98,0xb9,0x54,0x26,0x09,0x3d,0x29,0x44, + 0x96,0x60,0x34,0xfd,0x6e,0x23,0xf0,0x48, + 0x15,0xd4,0x2d,0x16,0x47,0x12,0xdd,0xe4, + 0x2c,0xaf,0xff,0xdc,0x7b,0xf4,0xdb,0x0d, + 0x67,0x2f,0x9e,0xb1,0x3a,0x3f,0xe7,0xf4, + 0xe9,0x53,0x94,0xb3,0x18,0xaf,0x28,0x17, + 0x5b,0x6e,0xdc,0x38,0xe1,0x56,0x63,0xb8, + 0x38,0xbf,0x60,0xba,0x98,0x89,0x60,0xdb, + 0x58,0xfa,0xed,0x86,0xe7,0x4f,0x5f,0xb2, + 0xd7,0x3a,0x76,0x7d,0x20,0xcf,0xe7,0xec, + 0xcd,0x5a,0x19,0xee,0x52,0x81,0x51,0xa5, + 0x15,0xc6,0x3a,0x19,0x00,0xd0,0x18,0x6c, + 0x86,0x30,0xec,0x30,0x46,0x8e,0x1d,0x6b, + 0x0c,0xcd,0xc4,0x92,0x4d,0x66,0xb1,0xb8, + 0x01,0xd6,0x92,0x62,0x94,0xc9,0xa4,0xda, + 0xa0,0x4b,0x64,0x36,0x6b,0x50,0x69,0xc0, + 0xfa,0x2c,0x47,0x9b,0xdd,0x63,0x3a,0x99, + 0xf0,0xec,0xf1,0x53,0xda,0x69,0x87,0xf7, + 0x8e,0xc9,0x62,0x2e,0x84,0x9a,0xd6,0x6c, + 0x96,0x5b,0xb4,0x71,0xa4,0x14,0xeb,0xb1, + 0x0c,0xae,0x69,0x08,0xd6,0x32,0xac,0x57, + 0x6c,0xb7,0x3d,0x46,0x29,0x5e,0x6e,0x77, + 0x1c,0x2d,0x3a,0xb9,0xb7,0xc8,0x28,0xe5, + 0x48,0xe2,0xe9,0x13,0x3e,0xe4,0xda,0xe1, + 0x8c,0x98,0x12,0xdb,0x7e,0x64,0x37,0x08, + 0x57,0x7e,0xeb,0xf8,0x26,0xff,0xf4,0xf7, + 0x7f,0x5f,0x22,0x63,0x73,0x64,0x36,0x9b, + 0x8b,0x65,0x39,0x43,0xd8,0xf4,0x8c,0xa3, + 0x28,0x47,0x54,0x3d,0xb2,0x94,0xb5,0x90, + 0x0b,0xd6,0x8a,0x6f,0xc4,0x37,0x1e,0x67, + 0x9d,0x54,0x5d,0xd6,0xca,0xc5,0x15,0x23, + 0x31,0x27,0xc6,0x6d,0xa5,0x84,0xb5,0x45, + 0x5b,0xcb,0xc9,0xad,0xbb,0xdc,0xbc,0xfb, + 0x2a,0xe5,0xdd,0xcc,0xe9,0xe9,0x29,0x2f, + 0x1e,0xdc,0x87,0x3e,0x72,0xfa,0xf8,0xa9, + 0xcc,0xb7,0x4d,0x89,0x0f,0xbf,0xf5,0x5d, + 0x16,0x8b,0x05,0x93,0x85,0xa4,0xb1,0xed, + 0xb5,0x8e,0xdd,0x93,0x27,0x84,0xf9,0x0c, + 0x6b,0x15,0x4f,0x1e,0x3e,0x63,0x32,0x93, + 0x79,0xbd,0x47,0x47,0x07,0x58,0xed,0x28, + 0x29,0x11,0xe2,0x48,0x18,0x46,0xc6,0xbe, + 0xc7,0xb7,0x32,0x73,0xf0,0xf0,0x68,0x9f, + 0xe9,0x7c,0x8e,0xf3,0xf2,0x19,0x95,0x52, + 0x57,0x73,0x4e,0x42,0x48,0x32,0xb9,0x61, + 0x1c,0x09,0x51,0x00,0xd5,0x31,0x06,0x86, + 0x61,0xa0,0x8f,0x6b,0x36,0xfd,0x8e,0xe9, + 0xfe,0x9c,0x10,0xe4,0xfb,0x2a,0x6b,0x71, + 0xce,0xf1,0xf0,0x93,0x4f,0x69,0xda,0x96, + 0x17,0x2f,0x3e,0xe3,0xd6,0xdd,0xdb,0xe4, + 0x22,0xd0,0x7e,0xae,0xd4,0xb8,0x69,0xfd, + 0x95,0xb0,0x30,0xa5,0x3a,0xc8,0x52,0x69, + 0x62,0x2a,0xd8,0x22,0xe2,0x06,0xb4,0x22, + 0x86,0x88,0xf5,0xce,0xb2,0x98,0x36,0x74, + 0xce,0xd0,0xfb,0xc8,0xa6,0xef,0x79,0xfd, + 0xde,0x6b,0x57,0x73,0x5f,0x41,0x71,0x71, + 0xb1,0x46,0xab,0x42,0xd3,0x78,0x1a,0x6f, + 0xf1,0x6e,0x22,0x54,0x7c,0x16,0x8c,0x48, + 0x29,0x53,0xcb,0x59,0xa1,0x4b,0x95,0xaa, + 0xc4,0x7d,0xdf,0xb3,0xad,0x4e,0x0a,0xad, + 0xc0,0x79,0x4f,0xd3,0x58,0xc1,0xc8,0x8a, + 0x04,0xa2,0x2d,0x57,0x3b,0x9c,0xd6,0x58, + 0xdf,0x70,0x74,0xed,0x3a,0xc7,0x47,0x27, + 0xc4,0xd8,0xf3,0xfc,0xf1,0x53,0x3e,0xfb, + 0xe1,0x8f,0xb9,0x78,0x76,0xce,0xad,0x1b, + 0xb7,0xe9,0xb7,0x6b,0x54,0x2a,0x74,0xce, + 0x52,0x9e,0x3f,0x23,0x4d,0x26,0xac,0x63, + 0xa1,0x5c,0xec,0x88,0x31,0x40,0x99,0xb0, + 0xdb,0xec,0x58,0x3b,0x77,0x05,0xec,0xcd, + 0x17,0x0b,0x8e,0x5e,0x7b,0x95,0xa3,0xe3, + 0x63,0xba,0xae,0xc5,0xd8,0x46,0xa0,0x9e, + 0x3a,0xc4,0x25,0xe7,0x84,0x71,0x1e,0xad, + 0x6d,0xd5,0x65,0x89,0x9c,0x13,0xa5,0xd1, + 0x46,0x00,0x42,0xad,0x8d,0x28,0x3a,0x8d, + 0x25,0x04,0xe9,0xe4,0xc3,0x18,0x78,0xfe, + 0xec,0x05,0x2f,0x4f,0x4f,0xd9,0xae,0x57, + 0x34,0xb3,0x7d,0xbe,0xb8,0x7f,0x9f,0x7e, + 0xb9,0xe4,0xd9,0xfd,0xc7,0x8c,0xa5,0x70, + 0xef,0xed,0x37,0x04,0xdd,0x2d,0x85,0xc5, + 0x6c,0x8f,0x71,0xf7,0x05,0xa4,0x44,0x51, + 0x19,0x63,0xc5,0x94,0xa7,0xd0,0x28,0x2d, + 0x3a,0xe9,0x18,0x33,0x59,0x81,0x3d,0x5b, + 0xee,0xe4,0x0d,0x15,0x68,0x9c,0xc3,0xbb, + 0x96,0x37,0x5e,0x7b,0x55,0x12,0x73,0xa2, + 0x40,0x25,0xd3,0xae,0x95,0xe1,0x55,0xa5, + 0xb0,0x1b,0x06,0x72,0x8c,0xe4,0x28,0x4d, + 0x5c,0xce,0x35,0x1d,0xd1,0x58,0xb4,0x32, + 0x48,0x5c,0xa1,0x68,0x27,0x9c,0x15,0xf3, + 0xe5,0x65,0x94,0x73,0x8a,0x81,0x5d,0x18, + 0x28,0x1b,0x49,0x51,0x30,0xce,0x31,0x69, + 0xdb,0xaa,0x4d,0x8a,0xf4,0xdb,0x44,0x0c, + 0x01,0xab,0xe1,0xda,0x8d,0xeb,0xdc,0x7c, + 0xe5,0x2e,0x39,0x17,0x9e,0x7e,0xf1,0x80, + 0x27,0x5f,0x3c,0xc4,0xe8,0xc2,0xf9,0x77, + 0xbe,0x45,0x69,0x26,0xac,0x95,0x65,0x6f, + 0x7f,0x81,0xd6,0x9a,0xe9,0xec,0x1a,0x77, + 0x6e,0xdd,0xe0,0xf8,0xe4,0x04,0xdf,0x48, + 0xfa,0x9c,0x36,0x92,0x02,0x91,0xab,0x1b, + 0xab,0xdf,0x8d,0xe4,0xb4,0x93,0xb8,0x10, + 0xc5,0x95,0xc2,0x9e,0x7e,0xa8,0xfa,0xdc, + 0x52,0x17,0x93,0x58,0x31,0x04,0xd7,0x13, + 0xd5,0x8c,0x36,0x06,0xeb,0x1c,0xc6,0x1a, + 0x54,0x71,0x38,0xa3,0xb9,0x75,0xeb,0x06, + 0x77,0xef,0xde,0xa1,0x90,0x79,0xf6,0xf4, + 0x09,0x9f,0x7e,0xfc,0x29,0x1f,0x7c,0xf7, + 0xfb,0x3c,0x7b,0xfc,0x8c,0x89,0x4e,0xa0, + 0x1b,0x4c,0x89,0x78,0xe7,0x89,0x39,0xca, + 0xd0,0xb5,0x9a,0x10,0xa4,0xd1,0x72,0x74, + 0x6a,0x25,0x42,0x6d,0x0a,0xd6,0x80,0x4a, + 0x5a,0xf8,0x10,0x57,0xe7,0xd3,0x2a,0x12, + 0x43,0x52,0x64,0x25,0x23,0x57,0xa7,0x93, + 0x8e,0x9c,0x12,0x9b,0xcd,0xba,0xda,0x15, + 0x64,0x3c,0x77,0x37,0x6d,0x50,0x48,0x57, + 0x5a,0x92,0x40,0xf7,0xa6,0xae,0x28,0x39, + 0xc7,0x64,0x52,0x4f,0x0c,0x89,0xd8,0x47, + 0xd1,0xae,0xd6,0x9c,0x2a,0x63,0x0d,0x58, + 0x85,0x51,0x99,0xd8,0x6f,0x29,0x35,0xb2, + 0xc1,0x68,0x85,0xb3,0x0d,0xae,0x69,0xc9, + 0x25,0x10,0xc6,0x9e,0xbe,0xdf,0x61,0xad, + 0xe3,0xe0,0x60,0x9f,0xe3,0xa3,0x43,0x3e, + 0xfd,0xb7,0xff,0x0b,0x3c,0xfc,0x09,0xd7, + 0xfe,0xc9,0x3f,0xe3,0xf5,0xe3,0x63,0x16, + 0x8b,0x39,0x6d,0x33,0x21,0x53,0xb0,0xae, + 0x95,0x86,0x33,0x26,0xc6,0xb8,0xbd,0xca, + 0xbc,0xd2,0x5a,0xb4,0xc2,0xc6,0x3b,0x34, + 0x4e,0x70,0x9f,0xa2,0x44,0xa2,0x53,0x6a, + 0xd7,0xa5,0xca,0x25,0xb3,0x5d,0x87,0xbe, + 0x70,0xb5,0x88,0x2e,0x67,0x5a,0xc5,0x38, + 0x92,0x42,0x66,0xbb,0x8a,0x38,0xeb,0x30, + 0xce,0xc9,0x88,0x0d,0xdf,0x70,0x72,0xed, + 0x06,0x37,0x6f,0xdd,0xe1,0x17,0xbf,0xfe, + 0xcb,0xfc,0xf0,0x07,0x7f,0xc7,0x83,0xcf, + 0x3f,0xe7,0xa3,0x0f,0x7f,0xc2,0x74,0x36, + 0xc3,0xfb,0x86,0x14,0xb3,0xa0,0xdc,0x45, + 0xc9,0x91,0x95,0x92,0x1c,0x61,0xb1,0x7c, + 0xf9,0xdc,0x32,0x58,0xaf,0xb1,0x56,0x4b, + 0x55,0x22,0x2a,0x09,0xc3,0xbc,0xb5,0xdc, + 0xbe,0x76,0x88,0xd5,0x8a,0xcd,0xf2,0x1c, + 0xe3,0x1a,0x99,0x93,0x6e,0xab,0x1a,0x64, + 0xec,0x49,0x41,0x5f,0x05,0x2d,0x5f,0x8a, + 0xb4,0xc7,0x20,0x89,0x41,0x05,0x50,0xc6, + 0x08,0xf4,0xa0,0x44,0x59,0xe1,0x6a,0xd6, + 0xfa,0xe5,0xff,0x1c,0xa5,0xc8,0xf4,0x4b, + 0x44,0x38,0xe6,0xb4,0x44,0x71,0xa8,0x92, + 0x08,0x35,0x18,0x2d,0x57,0x98,0xe4,0x52, + 0x69,0x1e,0x0a,0x1c,0x6e,0xcf,0xf8,0xca, + 0x2f,0xbe,0xc9,0xf6,0xed,0xaf,0x4a,0xc7, + 0x5e,0x32,0x21,0x8b,0x06,0x2a,0xa7,0xb1, + 0x1e,0x03,0x05,0xef,0x14,0x4a,0x79,0xe1, + 0xe3,0x73,0x21,0x64,0x18,0x77,0x43,0xbd, + 0x80,0xe5,0xc8,0x12,0x0a,0x97,0x6a,0xb4, + 0xbc,0xcc,0x75,0x49,0x75,0x12,0xb4,0xfe, + 0x99,0x45,0x26,0xaf,0xaa,0xf3,0xad,0x84, + 0xa7,0x19,0x45,0x4e,0x81,0x14,0x02,0xc3, + 0x6e,0xcd,0x6e,0xbb,0xc3,0x58,0x47,0xd3, + 0x76,0xf8,0xc6,0xf3,0x0b,0x7f,0xef,0x97, + 0x79,0xef,0xfd,0xf7,0x39,0x3e,0xfc,0x4b, + 0x3e,0xfb,0xf4,0x53,0x96,0xcf,0x56,0x68, + 0xe3,0xf0,0xd3,0x4e,0xe0,0x97,0x9a,0x73, + 0x02,0xa5,0x9a,0x92,0xe4,0x39,0x15,0x23, + 0x4d,0xab,0x0d,0x29,0x11,0x83,0xd4,0xee, + 0x7b,0xdd,0x84,0x5b,0xb7,0xde,0xe6,0xf1, + 0xe9,0x92,0xeb,0x8f,0x5f,0xe0,0x3a,0x47, + 0x50,0xbd,0x28,0x15,0x0d,0x14,0x63,0x71, + 0x4e,0x06,0xbb,0x58,0x33,0xc1,0x54,0xa3, + 0x95,0x52,0xd0,0x1a,0x57,0xb3,0xfc,0x04, + 0xf3,0xa2,0x88,0x0d,0xba,0xd4,0x69,0x6b, + 0x22,0x48,0xd6,0x75,0x18,0xaf,0x38,0x74, + 0x95,0xd1,0x42,0xed,0x2a,0x2d,0x48,0xb3, + 0xd2,0x18,0xe3,0x69,0x75,0x22,0x27,0x4d, + 0x4a,0x81,0x3e,0xc8,0x07,0x75,0x4e,0xe3, + 0x5a,0x4b,0x1e,0x87,0xfa,0x75,0x60,0xab, + 0x12,0x22,0x67,0x99,0x08,0x17,0x72,0xaa, + 0x2b,0xbc,0xd4,0x64,0xeb,0x2a,0xd9,0xae, + 0x41,0xce,0x39,0x67,0x54,0x89,0x22,0xf4, + 0x46,0xa2,0x02,0x4d,0x8d,0x0c,0xbc,0x14, + 0xfe,0x15,0x25,0x4f,0xa7,0x90,0x49,0xd9, + 0x88,0xe6,0xb9,0x88,0x85,0x6e,0x1c,0x87, + 0x3a,0xe3,0x4a,0xb2,0xee,0x9b,0x4e,0xa6, + 0x42,0x0c,0xbb,0x2d,0xc3,0x6e,0xc5,0x6e, + 0xab,0xf0,0x4d,0x83,0x73,0x9e,0x5f,0xfb, + 0xc6,0x37,0xb8,0xf7,0xe6,0xeb,0xfc,0x9f, + 0x7f,0xf8,0x3f,0xb3,0x3a,0xdb,0x60,0x72, + 0x6d,0xb3,0x4b,0x46,0x5d,0x49,0xcb,0x11, + 0xdb,0x86,0x11,0x42,0xce,0x2a,0x85,0xed, + 0xc7,0x58,0x55,0x8a,0x9a,0x9b,0xb7,0xdf, + 0x61,0x75,0x7e,0xce,0x0f,0xbf,0xff,0x01, + 0x0f,0x3f,0x7f,0xc0,0x62,0xef,0x98,0x83, + 0xe3,0x19,0xd7,0x6f,0x1c,0x33,0x9b,0xcf, + 0x88,0x21,0xe0,0x1b,0x39,0x07,0xdb,0xb6, + 0xa5,0xb1,0x46,0x32,0xd8,0x95,0x0c,0x22, + 0x56,0x4a,0x61,0xb5,0xd8,0x10,0x8c,0xb6, + 0xb8,0xa6,0xa1,0xe9,0xba,0xfa,0x00,0x44, + 0x7c,0xac,0x8c,0x43,0x39,0x89,0xb9,0x8b, + 0x29,0x31,0x0e,0x12,0xf0,0xe2,0x9b,0x16, + 0x6d,0x34,0x2a,0x27,0x51,0x7e,0xa4,0x8c, + 0x2a,0x75,0x60,0xb0,0x92,0x58,0xc0,0x6c, + 0x2c,0x76,0xda,0xd0,0xe7,0x42,0xce,0x02, + 0x5e,0xaa,0xaa,0xc8,0x2f,0x39,0x08,0x38, + 0x98,0x65,0x64,0x5d,0x26,0x13,0xc6,0xa1, + 0x4a,0xeb,0xc5,0x6a,0xa7,0xeb,0x68,0xbc, + 0x5c,0x75,0x53,0x31,0x88,0xc8,0x9b,0xa2, + 0x64,0x54,0xb9,0xd2,0x32,0x9c,0xc6,0x28, + 0x89,0xf4,0x40,0x38,0x1e,0x6d,0x64,0x22, + 0x90,0x70,0xfc,0xa2,0x1a,0xc9,0x31,0xb2, + 0x8b,0xd5,0x83,0x58,0x0a,0x4d,0xdb,0x88, + 0xca,0x3e,0x17,0x76,0xdb,0x2d,0x3b,0x05, + 0x87,0xc7,0x27,0xbc,0xfd,0x95,0x77,0x59, + 0xfd,0xed,0xf7,0x6a,0x74,0x20,0x57,0x89, + 0x74,0xce,0x68,0x72,0x86,0xf5,0x30,0xd0, + 0x3a,0x83,0x37,0x8e,0x5e,0xc2,0xda,0x34, + 0x16,0xc5,0xe1,0xc1,0x4d,0xe2,0x76,0xcd, + 0xb5,0xbd,0x23,0x86,0xb0,0x63,0xb3,0x59, + 0xb3,0x1e,0xb7,0xfc,0xf0,0x47,0x2f,0xd0, + 0x19,0xf6,0x0f,0x8e,0xd0,0xd6,0xd0,0x36, + 0xcd,0x15,0x21,0xe5,0xac,0x61,0xda,0x4d, + 0x98,0xcc,0xa7,0x38,0x2b,0x77,0xd1,0x74, + 0x36,0xc7,0x79,0x4b,0x4a,0xa0,0xad,0xc6, + 0x5a,0xcb,0x62,0x3e,0x63,0x18,0x7a,0x66, + 0x9d,0x68,0x68,0xa7,0xb3,0x19,0x93,0x99, + 0xac,0x24,0xd7,0x8a,0x42,0x31,0xc7,0x1d, + 0x71,0xac,0x1e,0xf9,0xda,0xc5,0x5e,0x8a, + 0x2d,0x84,0x2f,0xd3,0xa8,0x71,0x45,0x39, + 0x38,0x96,0x28,0xd8,0x7a,0xca,0x97,0x14, + 0xc8,0x39,0x12,0x43,0x24,0x69,0xb0,0x56, + 0x1a,0xad,0x52,0x60,0xd8,0x6e,0x29,0x59, + 0x44,0x79,0x4a,0x6b,0xe1,0x59,0x74,0x5d, + 0x1c,0x55,0xee,0x29,0xb9,0x1f,0x16,0x55, + 0x8d,0xfb,0xc6,0x8a,0x87,0x32,0xe7,0x44, + 0xc9,0x03,0x25,0x47,0x72,0x32,0x24,0x15, + 0x28,0x3d,0xec,0x6a,0x92,0x84,0xad,0x3c, + 0x50,0x31,0xe2,0x16,0x18,0x87,0x91,0x41, + 0x6b,0xf9,0x79,0xc6,0xd6,0x81,0x9c,0x03, + 0xdb,0xcd,0x92,0x18,0x23,0x61,0x4c,0x62, + 0x31,0xaf,0xc3,0x2b,0x55,0x35,0x2b,0x59, + 0xad,0xd1,0xa5,0xce,0x1e,0xf1,0x0d,0xb6, + 0x71,0x86,0x87,0x2f,0x37,0x7c,0x7e,0xfa, + 0x39,0xef,0xbe,0xf1,0x26,0x67,0xe7,0x8f, + 0x99,0xef,0xef,0x73,0xf7,0xd6,0x75,0xfa, + 0x71,0x20,0xcd,0x13,0x8d,0xb5,0x24,0x32, + 0x7b,0xfb,0x87,0x9c,0xbd,0x78,0xce,0xb4, + 0x99,0xe0,0x66,0x86,0xdd,0x6a,0x60,0x79, + 0xb6,0x64,0xb2,0xd8,0x63,0xfd,0xf2,0x05, + 0x21,0x45,0x48,0x89,0xe9,0x74,0xc6,0x6e, + 0xb7,0x41,0x95,0x82,0xef,0xa6,0x50,0xc4, + 0x8d,0x3b,0x39,0x58,0x30,0x9d,0x4c,0x39, + 0x3a,0xda,0xe7,0xf8,0xf0,0x80,0x83,0x83, + 0x05,0x87,0xd7,0x8e,0x98,0x2e,0xe6,0x34, + 0x93,0x06,0x25,0x78,0x37,0x51,0xb2,0x08, + 0xc8,0xab,0x35,0xe3,0x8b,0xcf,0x98,0xde, + 0x7c,0x43,0xa6,0x4a,0x97,0xc8,0x80,0x23, + 0x0e,0xbd,0xc0,0x29,0x25,0x63,0x1a,0x49, + 0x27,0x0a,0xc3,0xc0,0x10,0x7a,0x52,0x0c, + 0xd8,0xfa,0x50,0x95,0x96,0x3b,0x45,0x52, + 0x45,0xa5,0x17,0x88,0x25,0x5f,0x21,0x0c, + 0x44,0xc9,0xde,0xbd,0x2c,0x00,0x14,0x12, + 0xc2,0x99,0x73,0xa6,0xa4,0x50,0x63,0xa2, + 0xe4,0xfc,0x15,0x27,0x80,0xf8,0x3d,0xb4, + 0xd1,0xe0,0xa5,0x19,0x2d,0x15,0xad,0x15, + 0x68,0xc7,0xa1,0x9d,0xa3,0x99,0xcc,0xc5, + 0x6a,0x51,0xb2,0x88,0xfe,0x94,0xc6,0xd5, + 0xdd,0x63,0x94,0x2c,0xb8,0xcd,0xae,0xc7, + 0x68,0xc5,0xfe,0xac,0x63,0xda,0x35,0xec, + 0xfa,0x5e,0xa6,0xbf,0xfd,0xf0,0x8b,0x97, + 0x28,0xdd,0xa2,0x55,0xcf,0x5f,0xfe,0xdd, + 0x77,0xe5,0xc2,0x2b,0x0a,0xf5,0xad,0xbf, + 0x94,0x2d,0x8e,0x62,0x7f,0x3e,0xe7,0xce, + 0xcd,0xbb,0x9c,0xad,0x7b,0x86,0x8b,0x73, + 0xa6,0x6d,0x47,0xe3,0x0c,0x8b,0xf9,0x01, + 0x5a,0x69,0x2e,0x9e,0x3c,0x65,0xb1,0xbf, + 0xc7,0x74,0x31,0x67,0xbd,0xdd,0x60,0xfa, + 0x40,0xd2,0x8e,0xa6,0x6b,0xb0,0xbe,0x63, + 0xb7,0xbd,0xa0,0x14,0x4b,0x2a,0x99,0xf3, + 0xe7,0xa7,0xbc,0x78,0xf8,0x88,0xcf,0xbb, + 0x16,0x67,0x0c,0x7b,0x87,0x47,0x9c,0xdc, + 0x3a,0xe1,0xd6,0xad,0xeb,0x4c,0xe6,0x13, + 0xc6,0x10,0xd8,0xae,0x36,0x8c,0xdb,0x81, + 0xd5,0xcb,0xcf,0x39,0x30,0xcf,0x98,0x3d, + 0xbd,0x8f,0xf3,0x73,0xcc,0xa6,0xc7,0x34, + 0x17,0xf0,0xf0,0x13,0x86,0x00,0xab,0xcf, + 0xfe,0x9c,0x57,0x7f,0xf9,0xf7,0x99,0xdd, + 0xb8,0x49,0xd3,0x05,0xb6,0x67,0xcf,0xd0, + 0x35,0xa6,0x55,0x95,0x42,0x41,0x54,0x96, + 0xfd,0x2e,0x31,0x0c,0x4b,0x41,0x19,0x40, + 0x0c,0x96,0x8d,0x30,0x7b,0xce,0x09,0xa8, + 0xaa,0x45,0x76,0x8e,0x51,0x1a,0x8c,0xae, + 0xe1,0x65,0x5c,0x51,0x0e,0xe4,0x8c,0x32, + 0x96,0xb1,0x17,0xf7,0xed,0x76,0xbd,0x44, + 0x69,0x31,0x8d,0x0a,0x73,0xea,0x51,0xda, + 0x4a,0x20,0x4e,0x8e,0x0c,0x21,0x11,0xb6, + 0x17,0xa8,0x1c,0x24,0xc5,0x6e,0x1c,0x18, + 0x53,0xa4,0x58,0x85,0x36,0x9a,0xbd,0xf9, + 0x14,0xef,0x0c,0x1a,0xd8,0xf6,0x23,0x4a, + 0x19,0xa6,0x9d,0xc6,0xf6,0x63,0x41,0xab, + 0xe1,0x2a,0x71,0x3a,0x4b,0x9a,0x8c,0x08, + 0x1d,0x8a,0x54,0x42,0xcf,0x57,0x67,0x3c, + 0x5f,0x9e,0x55,0xc2,0x48,0x6a,0x75,0xcd, + 0xe5,0xd1,0xe2,0x69,0xad,0x65,0xde,0xcd, + 0xd8,0x3f,0x38,0xa6,0x73,0x1a,0x9b,0x46, + 0x9c,0xd2,0x1c,0x1d,0x1d,0xa1,0x77,0x03, + 0x9d,0x6b,0x50,0x5a,0x33,0x9f,0x2e,0x78, + 0x79,0x2e,0xa3,0xb5,0x37,0xcb,0x0b,0x8c, + 0x75,0x3c,0x79,0x79,0xc6,0x8f,0x3e,0xfc, + 0x01,0x45,0x29,0x6e,0xdf,0xbe,0xcb,0x74, + 0x31,0x65,0x36,0x9d,0xb0,0xde,0x6c,0x49, + 0x71,0xe0,0x7c,0x72,0x8d,0xbd,0x31,0x52, + 0xc2,0xe7,0xb4,0x61,0x81,0x3e,0x8f,0x0c, + 0xcf,0xbe,0x03,0xde,0x13,0xe3,0x94,0xf5, + 0x0f,0x7e,0xca,0xd1,0xe9,0x92,0xf9,0xe1, + 0x82,0x71,0xb3,0x21,0x15,0x45,0x48,0xb0, + 0x3c,0x3b,0x23,0x16,0x45,0x8c,0x81,0xdd, + 0x76,0x60,0xb7,0xdd,0x92,0xc8,0xe2,0xa8, + 0xb2,0x75,0x4c,0x6b,0xd5,0xd7,0xa6,0x52, + 0x38,0xd8,0x5f,0xd0,0x78,0xd9,0x59,0x71, + 0x18,0x98,0xce,0x66,0x52,0xc0,0x38,0x5b, + 0xa3,0x2f,0x12,0x93,0xe9,0x54,0x2a,0x2d, + 0xeb,0xf0,0x9d,0x60,0x5f,0x46,0xc9,0xf8, + 0x23,0x95,0x13,0x29,0x27,0xf1,0x98,0xa4, + 0x88,0xce,0x11,0x9b,0x33,0xdd,0xa4,0x63, + 0xdc,0x3e,0xaa,0xf6,0xee,0x82,0x2e,0x50, + 0x62,0x62,0x37,0x0c,0x8c,0xde,0xd3,0xb5, + 0x4e,0x42,0x69,0x94,0x64,0x83,0x59,0xa5, + 0xf5,0x95,0x64,0x53,0x55,0xd9,0xcb,0x25, + 0x2b,0x52,0xea,0x76,0x2d,0xd5,0x60,0x96, + 0xea,0x1c,0x40,0x72,0x24,0xa1,0x08,0xc0, + 0x90,0x13,0xeb,0x11,0x5e,0x6c,0x96,0xe8, + 0x17,0x8f,0x25,0x06,0xae,0xd6,0xf2,0xba, + 0x88,0x83,0xa8,0xb1,0x96,0xb6,0x69,0xf0, + 0xda,0xb2,0x37,0x69,0x51,0x64,0x5a,0xe7, + 0x39,0x98,0x2f,0x68,0xad,0xc8,0x89,0x9a, + 0xbd,0x05,0x0f,0x1f,0xdc,0xc7,0x69,0x83, + 0x49,0x99,0x50,0x12,0xd9,0x8a,0x5a,0xbc, + 0xe9,0x5a,0x9c,0xf5,0x6c,0x56,0x6b,0x72, + 0x4e,0xa4,0x18,0xf1,0x8d,0xc5,0x77,0x33, + 0xc8,0x7f,0xce,0x7c,0xff,0x00,0xe7,0x0d, + 0xda,0x6a,0x86,0x90,0xc9,0x21,0x70,0x76, + 0x76,0x46,0xbf,0xdb,0x91,0x62,0xc4,0x3a, + 0x5b,0xab,0x6d,0x85,0x6f,0x1c,0xa1,0x1f, + 0x24,0x92,0xb6,0xf1,0xec,0x2d,0xf6,0x08, + 0x95,0x8c,0x73,0x8d,0xa3,0x99,0x4c,0xd9, + 0x3b,0xbe,0x4e,0xec,0x3f,0x46,0x2b,0x8d, + 0x6f,0x1d,0xc6,0xc9,0x4c,0x90,0xb6,0x6b, + 0xc9,0x4a,0xd3,0x7a,0x27,0x1a,0x65,0x05, + 0xbe,0x9b,0x40,0x81,0x10,0x46,0xf6,0xe7, + 0xb3,0x6a,0x47,0x50,0x18,0x55,0x98,0x34, + 0x9e,0x38,0x7a,0x1e,0x7e,0xfa,0x48,0x4a, + 0xf7,0x14,0x51,0x14,0x62,0x49,0x74,0x5d, + 0xc3,0x6c,0xea,0xeb,0x04,0xd2,0x52,0x8f, + 0x35,0x85,0xda,0x3b,0x3e,0x29,0x97,0x3e, + 0xb8,0x4b,0x8b,0xb8,0xaa,0x01,0x00,0xaa, + 0x5a,0xaf,0x2e,0x7f,0x29,0xf5,0x25,0x47, + 0x72,0x39,0x35,0x53,0x34,0x5d,0xf5,0x95, + 0x65,0x55,0x6d,0xcf,0x5f,0x52,0x92,0x92, + 0x8e,0x2d,0x97,0x70,0xa9,0xae,0x22,0x53, + 0x33,0x0a,0x2f,0xbf,0x56,0xd7,0x9f,0x69, + 0xb5,0xa9,0x29,0x76,0x1a,0x6f,0x0c,0xb3, + 0xd9,0x82,0x99,0xd1,0x1c,0x2e,0x16,0xc4, + 0xb0,0xe3,0x60,0xbe,0xc0,0x2a,0x8d,0x9f, + 0x4c,0xd8,0x2e,0x2f,0x24,0xab,0x4b,0x21, + 0xd3,0x39,0xbb,0x8e,0x94,0x93,0x04,0x96, + 0x19,0xc3,0x6e,0x18,0x71,0xda,0xd2,0x76, + 0x1e,0x9d,0x0b,0xbe,0xe9,0x08,0x31,0x08, + 0x6f,0x91,0x22,0xae,0xf1,0x28,0x32,0xc3, + 0x18,0x48,0xa3,0xa8,0x34,0x25,0x3c,0x4d, + 0xf2,0x25,0x15,0x08,0xcd,0x40,0x16,0xca, + 0x21,0x17,0x4a,0x1c,0x19,0x13,0x0c,0x49, + 0x02,0xda,0x48,0x92,0x96,0x14,0x53,0xc6, + 0x3a,0x29,0x44,0xbc,0xf3,0x34,0x6d,0x4b, + 0xd7,0xb6,0x8c,0xfd,0x96,0x7e,0xb3,0xa5, + 0xdf,0x6c,0x78,0x7e,0x71,0xc1,0x5f,0x7f, + 0xf2,0x19,0xed,0xc4,0x70,0x6d,0x2a,0x0e, + 0xe6,0x90,0x12,0x4d,0xd7,0x49,0x3e,0x72, + 0xac,0x16,0xbf,0xfd,0xe3,0x93,0x72,0xc5, + 0xa1,0xab,0xcb,0x7e,0x55,0xd2,0xfc,0x4b, + 0x65,0xef,0xaa,0x37,0xeb,0x2a,0x49,0xae, + 0x88,0x2e,0x54,0xea,0xf7,0xfa,0x77,0xd4, + 0x5d,0x74,0xe9,0x1e,0x52,0x97,0xd6,0x02, + 0x14,0x99,0x7c,0xe5,0x28,0xba,0xfc,0xdd, + 0xd4,0x97,0x5e,0xc9,0xd0,0x8a,0x31,0xa9, + 0x7a,0x2c,0x56,0x53,0x76,0xfd,0xfe,0xba, + 0x96,0x9a,0xa9,0xa6,0x49,0xab,0x72,0x99, + 0xbb,0x22,0x49,0xa6,0xce,0x59,0x26,0xbe, + 0xc1,0x6a,0xc5,0xa4,0xed,0xd0,0xaa,0xd0, + 0x5a,0xc3,0xa4,0x3e,0x18,0x4d,0xa1,0xeb, + 0x66,0x18,0x25,0x9f,0x47,0x5b,0x03,0x69, + 0x40,0x3b,0x5f,0xd3,0x56,0xc7,0x2b,0x2b, + 0x9d,0x31,0x4e,0x18,0xc6,0x69,0x43,0x1c, + 0xc7,0xea,0x94,0x4d,0x92,0xbd,0x58,0xa9, + 0x67,0x95,0x0a,0x7d,0xea,0x49,0x4a,0x7a, + 0xa5,0xa2,0x9d,0xe8,0x81,0x63,0xc2,0x6a, + 0x79,0xd1,0xba,0x48,0xb8,0x99,0xd1,0x86, + 0xa3,0xf9,0x8c,0xfd,0x83,0x1b,0xfc,0x37, + 0xff,0xea,0x7f,0x64,0x3e,0x85,0x5b,0x47, + 0xb2,0x93,0x72,0x12,0xa7,0xf3,0xb6,0xef, + 0xaf,0xa0,0x29,0x2b,0x2b,0x5c,0x57,0x49, + 0xe8,0x65,0x39,0xa9,0xae,0xde,0x4f,0xce, + 0xf9,0xea,0xc1,0xd7,0xe0,0xd8,0xaa,0xd3, + 0x95,0x80,0x00,0xa5,0xaa,0x4b,0x08,0x25, + 0x46,0x1e,0x2e,0xa7,0xed,0x7c,0x59,0x9a, + 0x5e,0x7e,0xaf,0x52,0x1f,0xa4,0x51,0x12, + 0xdb,0x47,0xf9,0x72,0xe7,0x29,0xc9,0x22, + 0x46,0x59,0x19,0x6d,0x7d,0xe9,0xcc,0x4d, + 0x2a,0xcb,0x04,0x6b,0x32,0x4a,0x6b,0xe1, + 0x33,0xea,0x67,0x50,0xc8,0x1d,0x41,0x1c, + 0xb9,0xd8,0x6d,0xeb,0x32,0xfa,0x12,0x02, + 0x29,0x75,0xa1,0xe8,0xea,0xd6,0x32,0xd5, + 0x52,0xb6,0xdf,0xcd,0x19,0x72,0xa0,0x6d, + 0x24,0xab,0xeb,0x60,0xbe,0x40,0x95,0x80, + 0x45,0xd1,0x79,0x27,0xab,0x7c,0xab,0x71, + 0x6d,0x07,0x39,0x60,0x9b,0x8e,0xed,0xae, + 0x17,0xd5,0x66,0x92,0x26,0xd7,0xd6,0x6f, + 0xee,0xac,0xc7,0xb8,0x86,0x71,0xd4,0x78, + 0x9d,0x44,0x38,0x91,0x32,0x61,0x18,0x28, + 0x65,0x60,0x37,0x46,0x4e,0xfb,0x81,0xbd, + 0x6b,0xb7,0x48,0x39,0xa2,0x54,0xc3,0xba, + 0x0f,0x1c,0xed,0x4f,0x09,0xc3,0x48,0x51, + 0x99,0xae,0xf5,0x35,0x18,0x54,0xd5,0xe1, + 0x04,0x62,0xe9,0xe7,0xf2,0x5c,0x51,0xf5, + 0xf2,0xe6,0x67,0x07,0xa3,0x20,0x69,0x03, + 0xf0,0xb3,0xfc,0x7b,0xba,0xfa,0x6f,0x54, + 0x75,0x20,0x4a,0xd5,0x97,0xa8,0xae,0x8c, + 0x8f,0x97,0xff,0xa0,0x54,0x60,0x4f,0x7e, + 0x5e,0x0d,0xd3,0x57,0xe2,0x63,0xbd,0x9c, + 0x96,0x13,0x63,0xba,0xca,0x44,0x29,0x5a, + 0x7f,0x99,0x91,0x25,0x94,0x3e,0x35,0x56, + 0xfe,0xea,0xb3,0xe6,0x7a,0xaf,0x19,0x25, + 0x9c,0x4b,0xae,0xa3,0xec,0xa5,0x2c,0x96, + 0x46,0x4c,0x7e,0xae,0xba,0x12,0x58,0x3c, + 0xdf,0xae,0x00,0xb8,0xd8,0x6d,0x51,0x5a, + 0x73,0xff,0xc5,0xf3,0xab,0x99,0x21,0xd6, + 0x1a,0xfa,0x71,0xbc,0x12,0x88,0x6b,0x2d, + 0x3c,0x4b,0xeb,0xc5,0xfe,0x66,0x51,0x68, + 0x63,0x69,0x8c,0x64,0x07,0x3b,0x2b,0x3a, + 0xe8,0xc6,0x3b,0xa6,0x8b,0x03,0xca,0xfa, + 0x42,0x02,0x3d,0xb5,0xa1,0xd3,0x0a,0xd7, + 0x4d,0xb8,0xfb,0xce,0x3b,0x44,0xc4,0x6f, + 0xb3,0xd8,0xeb,0xf0,0x45,0xa4,0xb9,0x57, + 0x73,0x01,0x2b,0xb0,0x49,0x29,0xa8,0xc5, + 0xe1,0x51,0xd5,0x50,0xe4,0x1a,0x89,0xc4, + 0x95,0x95,0xb7,0x9e,0xf0,0xf5,0x24,0x93, + 0xb4,0x50,0x53,0xa7,0x70,0x5d,0x4a,0x82, + 0x2e,0x1f,0x64,0xa9,0x47,0xcc,0x97,0x2f, + 0x52,0x5f,0x15,0x05,0x5f,0x1a,0x56,0xfe, + 0xff,0x77,0x53,0x29,0x5f,0xe2,0x59,0xaa, + 0x32,0x68,0x3f,0x7b,0x8f,0x7d,0xf9,0x1a, + 0x25,0x05,0xf4,0x72,0x02,0xd8,0xe5,0xbd, + 0xa6,0x6b,0xe0,0xa4,0xc8,0x33,0xd3,0x97, + 0x47,0xe0,0x25,0x15,0x50,0x32,0x97,0x5b, + 0xb1,0x94,0x54,0x1b,0x42,0x4d,0x46,0xfc, + 0xe2,0xe8,0x2b,0x68,0x4d,0x3e,0x99,0xbe, + 0x9c,0xb6,0x5b,0x6a,0x83,0xaf,0xd0,0x56, + 0x13,0x82,0x5c,0xc6,0x4a,0x55,0xf3,0x7f, + 0xb9,0x2c,0x87,0x2f,0x31,0xa2,0xcb,0xd3, + 0x5e,0x5d,0x21,0xc7,0x5f,0xae,0x1a,0x19, + 0x62,0x10,0x63,0x00,0x03,0x6f,0xdc,0x5c, + 0x70,0x3c,0x93,0x1d,0xa1,0xb5,0x16,0x53, + 0x54,0xce,0x6c,0xb7,0x03,0x31,0x17,0xfe, + 0x3f,0xeb,0x8c,0x6e,0x84,0x75,0x0f,0xe0, + 0x66,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, + 0x44,0xae,0x42,0x60,0x82, + +}; diff --git a/kmymoney/plugins/kbanking/widgets/CMakeLists.txt b/kmymoney/plugins/kbanking/widgets/CMakeLists.txt index b11ac4fe1..15c347f02 100644 --- a/kmymoney/plugins/kbanking/widgets/CMakeLists.txt +++ b/kmymoney/plugins/kbanking/widgets/CMakeLists.txt @@ -1,27 +1,29 @@ ########### next target ############### set(kbanking_widgets_la_SOURCES chiptandialog.cpp + phototandialog.cpp kbaccountlist.cpp kbjoblist.cpp ) set(kbanking_widgets_UI chiptandialog.ui + phototandialog.ui ) kconfig_add_kcfg_files(kbanking_widgets_la_SOURCES ../kbankingsettings.kcfgc) ki18n_wrap_ui(kbanking_widgets_la_SOURCES ${kbanking_widgets_UI}) add_library(kbanking_widgets STATIC ${kbanking_widgets_la_SOURCES}) target_link_libraries(kbanking_widgets Qt5::Widgets Qt5::QuickWidgets aqbanking::aqbanking KF5::I18n KF5::ConfigCore KF5::ConfigGui ) diff --git a/kmymoney/plugins/kbanking/widgets/chiptandialog.cpp b/kmymoney/plugins/kbanking/widgets/chiptandialog.cpp index 807bfee16..52bfe9a82 100644 --- a/kmymoney/plugins/kbanking/widgets/chiptandialog.cpp +++ b/kmymoney/plugins/kbanking/widgets/chiptandialog.cpp @@ -1,176 +1,175 @@ /* * A tan input dialog for optical chipTan used in online banking * Copyright 2014 Christian David * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License or (at your option) version 3 or any later version * accepted by the membership of KDE e.V. (or its successor approved * by the membership of KDE e.V.), which shall act as a proxy * defined in Section 14 of version 3 of the license. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include "chiptandialog.h" #include "ui_chiptandialog.h" // Qt Includes #include #include #include #include #include #include #include // Project Includes #include "kbankingsettings.h" chipTanDialog::chipTanDialog(QWidget* parent) - : QDialog(parent), - m_tan(""), - m_accepted(true) + : QDialog(parent) + , m_accepted(true) { ui.reset(new Ui::chipTanDialog); ui->setupUi(this); connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &chipTanDialog::accept); connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &chipTanDialog::reject); connect(ui->tanInput, &QLineEdit::textEdited, this, &chipTanDialog::tanInputChanged); ui->declarativeView->setSource(QUrl(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kbanking/qml/chipTan/ChipTan.qml")))); setFlickerFieldWidth(KBankingSettings::width()); setFlickerFieldClockSetting(KBankingSettings::clocksetting()); connect(ui->decelerateButton, SIGNAL(clicked()), ui->declarativeView->rootObject(), SLOT(decelerateTransmission())); connect(ui->accelerateButton, SIGNAL(clicked()), ui->declarativeView->rootObject(), SLOT(accelerateTransmission())); connect(ui->enlargeButton, SIGNAL(clicked()), ui->declarativeView->rootObject(), SLOT(enlargeFlickerField())); connect(ui->reduceButton, SIGNAL(clicked()), ui->declarativeView->rootObject(), SLOT(reduceFlickerField())); connect(ui->declarativeView->rootObject(), SIGNAL(flickerFieldWidthChanged(int)), this, SLOT(flickerFieldWidthChanged(int))); connect(ui->declarativeView->rootObject(), SIGNAL(flickerFieldClockSettingChanged(int)), SLOT(flickerFieldClockSettingChanged(int))); if (ui->declarativeView->status() == QQuickWidget::Error) done(InternalError); tanInputChanged(QString()); ui->tanInput->setFocus(); } chipTanDialog::~chipTanDialog() { } void chipTanDialog::accept() { m_tan = ui->tanInput->text(); m_accepted = true; done(Accepted); } void chipTanDialog::reject() { m_accepted = false; done(Rejected); } void chipTanDialog::setInfoText(const QString& text) { ui->infoText->setText(text); } QString chipTanDialog::infoText() { return ui->infoText->toPlainText(); } void chipTanDialog::setHhdCode(const QString& code) { setRootObjectProperty("transferData", code); } QString chipTanDialog::hhdCode() { QQuickItem* rootObject = ui->declarativeView->rootObject(); if (rootObject) return rootObject->property("transferData").toString(); return QString(); } QString chipTanDialog::tan() { return m_tan; } void chipTanDialog::setTanLimits(const int& minLength, const int& maxLength) { ui->tanInput->setValidator(new QRegExpValidator(QRegExp(QString("\\d{%1,%2}").arg(minLength).arg(maxLength)), ui->tanInput)); } void chipTanDialog::setFlickerFieldWidth(const int& width) { QQuickItem* rootObject = ui->declarativeView->rootObject(); if (rootObject) QMetaObject::invokeMethod(rootObject, "setFlickerFieldWidth", Q_ARG(QVariant, QVariant(width))); } int chipTanDialog::flickerFieldWidth() { QQuickItem* rootObject = ui->declarativeView->rootObject(); QVariant width; if (rootObject) QMetaObject::invokeMethod(rootObject, "flickerFieldWidth", Qt::DirectConnection, Q_RETURN_ARG(QVariant, width)); return width.toInt(); } void chipTanDialog::setFlickerFieldClockSetting(const int& width) { QQuickItem *const rootObject = ui->declarativeView->rootObject(); if (rootObject) QMetaObject::invokeMethod(rootObject, "setFlickerClockSetting", Q_ARG(QVariant, QVariant(width))); } void chipTanDialog::flickerFieldClockSettingChanged(const int& takt) { KBankingSettings::setClocksetting(takt); KBankingSettings::self()->save(); } void chipTanDialog::flickerFieldWidthChanged(const int& width) { ui->declarativeView->setFixedWidth(width); KBankingSettings::setWidth(width); KBankingSettings::self()->save(); } void chipTanDialog::tanInputChanged(const QString& input) { QPushButton *const button = ui->buttonBox->button(QDialogButtonBox::Ok); Q_ASSERT(button); if (input.isEmpty() || !ui->tanInput->hasAcceptableInput()) { button->setEnabled(false); button->setToolTip(i18n("A valid tan is required to proceed.")); } else { button->setEnabled(true); button->setToolTip(QString()); } } void chipTanDialog::setRootObjectProperty(const char* property, const QVariant& value) { QQuickItem *const rootObject = ui->declarativeView->rootObject(); if (rootObject) rootObject->setProperty(property, value); } diff --git a/kmymoney/plugins/kbanking/widgets/phototandialog.cpp b/kmymoney/plugins/kbanking/widgets/phototandialog.cpp new file mode 100644 index 000000000..7c300b678 --- /dev/null +++ b/kmymoney/plugins/kbanking/widgets/phototandialog.cpp @@ -0,0 +1,110 @@ +/* + * A tan input dialog for optical photoTan used in online banking + * Copyright 2019 Jürgen Diez + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "phototandialog.h" +#include "ui_phototandialog.h" + +// Qt Includes +#include +#include + +#include + +// Project Includes +#include "kbankingsettings.h" + +photoTanDialog::photoTanDialog(QWidget* parent) + : QDialog(parent) + , m_accepted(true) +{ + ui.reset(new Ui::photoTanDialog); + ui->setupUi(this); + + connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &photoTanDialog::accept); + connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &photoTanDialog::reject); + connect(ui->tanInput, &QLineEdit::textEdited, this, &photoTanDialog::tanInputChanged); + + tanInputChanged(QString()); + ui->tanInput->setFocus(); +} + +photoTanDialog::~photoTanDialog() +{ +} + +void photoTanDialog::accept() +{ + m_tan = ui->tanInput->text(); + m_accepted = true; + done(Accepted); +} + +void photoTanDialog::reject() +{ + m_accepted = false; + done(Rejected); +} + +void photoTanDialog::setInfoText(const QString& text) +{ + ui->infoText->setText(text); +} + +QString photoTanDialog::infoText() +{ + return ui->infoText->toPlainText(); +} + +void photoTanDialog::setPicture(const QPixmap &picture) +{ + QGraphicsScene *scene = new QGraphicsScene(); + pictureItem = scene->addPixmap(picture); + ui->graphicsView->setScene(scene); +} + +QPixmap photoTanDialog::picture() +{ + return pictureItem->pixmap(); +} + +QString photoTanDialog::tan() +{ + return m_tan; +} + +void photoTanDialog::setTanLimits(const int& minLength, const int& maxLength) +{ + ui->tanInput->setValidator(new QRegExpValidator(QRegExp(QString("\\d{%1,%2}").arg(minLength).arg(maxLength)), ui->tanInput)); +} + +void photoTanDialog::tanInputChanged(const QString& input) +{ + QPushButton *const button = ui->buttonBox->button(QDialogButtonBox::Ok); + Q_ASSERT(button); + if (input.isEmpty() || !ui->tanInput->hasAcceptableInput()) { + button->setEnabled(false); + button->setToolTip(i18n("A valid tan is required to proceed.")); + } else { + button->setEnabled(true); + button->setToolTip(QString()); + } +} diff --git a/kmymoney/plugins/kbanking/widgets/phototandialog.h b/kmymoney/plugins/kbanking/widgets/phototandialog.h new file mode 100644 index 000000000..7048f4165 --- /dev/null +++ b/kmymoney/plugins/kbanking/widgets/phototandialog.h @@ -0,0 +1,71 @@ +/* + * A tan input dialog for optical photoTan used in online banking + * Copyright 2019 Jürgen Diez + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#ifndef PHOTOTANDIALOG_H +#define PHOTOTANDIALOG_H + +#include + +#include +#include + +namespace Ui +{ +class photoTanDialog; +} + +class photoTanDialog : public QDialog +{ + Q_OBJECT + Q_PROPERTY(QString infoText READ infoText() WRITE setInfoText) + Q_PROPERTY(QPixmap picture READ picture() WRITE setPicture) + +public: + explicit photoTanDialog(QWidget* parent = 0); + ~photoTanDialog(); + + enum Result { Accepted = 0, Rejected, InternalError }; + + QString infoText(); + QString tan(); + QPixmap picture(); + +public Q_SLOTS: + void accept() final override; + void reject() final override; + + void setInfoText(const QString&); + void setPicture(const QPixmap&); + + void setTanLimits(const int& minLength, const int& maxLength); + +private Q_SLOTS: + void tanInputChanged(const QString&); + +private: + std::unique_ptr ui; + QGraphicsPixmapItem *pictureItem; + QString m_tan; + bool m_accepted; +}; + +#endif // PHOTOTANDIALOG_H diff --git a/kmymoney/plugins/kbanking/widgets/phototandialog.ui b/kmymoney/plugins/kbanking/widgets/phototandialog.ui new file mode 100644 index 000000000..e0ccf12d4 --- /dev/null +++ b/kmymoney/plugins/kbanking/widgets/phototandialog.ui @@ -0,0 +1,89 @@ + + + photoTanDialog + + + + 0 + 0 + 596 + 420 + + + + Order confirmation + + + + + + + + + + + background:transparent + + + QFrame::NoFrame + + + QFrame::Plain + + + true + + + false + + + + + + + + + + + To confirm this order enter the tan displayed by your &generator + + + tanInput + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + tanInput + buttonBox + infoText + + + +