{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# [AMEX] Try to improve LGBM starter (Eng/日本語)\n\nThis notebook is to show how I have been modifying my previous LGBM starter and improving Public Score from **0.783** to **0.787**.\n\nこのNotebookは、前回わたしが公開したシンプルなLGBM Starter（下記リンクご参照）を少しずつ改良し、Public Scoreを**0.783**から**0.787**へと徐々に改善していった記録です。  \n\n(My Previous notebook = simple LGBM starter)  \nhttps://www.kaggle.com/code/junjitakeshima/amex-simple-lgbm-starter-for-beginner-en  \n\n![image.png](attachment:300bd6b5-ef77-4f9f-8127-c0028550d1f4.png)","metadata":{},"attachments":{"300bd6b5-ef77-4f9f-8127-c0028550d1f4.png":{"image/png":"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"}}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport lightgbm as lgbm\nfrom lightgbm import LGBMClassifier\npd.set_option(\"display.max_columns\", None)","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:46:23.234780Z","iopub.execute_input":"2022-07-02T01:46:23.235842Z","iopub.status.idle":"2022-07-02T01:46:25.816120Z","shell.execute_reply.started":"2022-07-02T01:46:23.235701Z","shell.execute_reply":"2022-07-02T01:46:25.814462Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# (1) Baseline [Public Score = 0.783]","metadata":{}},{"cell_type":"markdown","source":"My previous LGBM below is the baseline. Please refer to my notebook for the explanation. If you remove the comentout, you can enjoy simple LGBM model which shows Public score 0.783.\n\n前回のシンプルなLGBMモデルをBaselineとしています。こちらの解説については、前回Notebookをご参照ください。コメントアウトを外して実行していただくと、Public Score 0.783のシンプルなLGBMを試していただけます。","metadata":{}},{"cell_type":"code","source":"\"\"\"\ntrain_df = pd.read_parquet('../input/amex-data-integer-dtypes-parquet-format/train.parquet').groupby('customer_ID').tail(1).set_index('customer_ID', drop=True).sort_index()\ntrain_labels = pd.read_csv('../input/amex-default-prediction/train_labels.csv').set_index('customer_ID', drop=True).sort_index()\ntrain_df = pd.merge(train_df, train_labels, left_index=True, right_index=True)\n\nall_cols = train_df.columns\nnon_use_cols = ['S_2','B_30','B_38','D_114','D_116','D_117','D_120','D_126','D_63','D_64','D_66','D_68', 'target']\nfeature_cols = [col for col in all_cols if col not in non_use_cols]\n\ny = train_df['target'].copy()\nx = train_df[feature_cols]\n\nmodel_lgbm = lgbm.LGBMClassifier(n_estimators = 300)\ndel train_df\ndel train_labels\nmodel_lgbm.fit(x, y)\n\ntest_df = pd.read_parquet('../input/amex-data-integer-dtypes-parquet-format/test.parquet').groupby('customer_ID').tail(1).set_index('customer_ID', drop=True).sort_index()\ntest_df = test_df[feature_cols]\ny_pred  = model_lgbm.predict_proba(test_df)\n\nsub = pd.read_csv('../input/amex-default-prediction/sample_submission.csv')\nsub[\"prediction\"] = y_pred[:,1]\nsub.to_csv('submission.csv', index=False)\n\"\"\"","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:46:25.818698Z","iopub.execute_input":"2022-07-02T01:46:25.819163Z","iopub.status.idle":"2022-07-02T01:46:25.828439Z","shell.execute_reply.started":"2022-07-02T01:46:25.819121Z","shell.execute_reply":"2022-07-02T01:46:25.827095Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# (2) Increase Train data [Public Score = 0.784]\n\n","metadata":{}},{"cell_type":"markdown","source":"In baseline above, we read only a single record per each customer (= tail(1)), but if we read 2 records per customer and then train data is increased, Public score is improved from 0.783 to 0.784.  \n\nTrainデータを全量読み込むとメモリーオーバーエラーが頻繁に発生することから、Baselineでは各顧客ごとに１レコード(tail(1))のみ読み込みましたが、これを２レコード（tail(2)）にして訓練データを増やすとPublic Scoreは0.783から0.784へと改善しました。","metadata":{}},{"cell_type":"code","source":"train_df = pd.read_parquet('../input/amex-data-integer-dtypes-parquet-format/train.parquet').groupby('customer_ID').tail(2).set_index('customer_ID', drop=True).sort_index()","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:46:25.830573Z","iopub.execute_input":"2022-07-02T01:46:25.831031Z","iopub.status.idle":"2022-07-02T01:46:50.538186Z","shell.execute_reply.started":"2022-07-02T01:46:25.830986Z","shell.execute_reply":"2022-07-02T01:46:50.536811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels = pd.read_csv('../input/amex-default-prediction/train_labels.csv').set_index('customer_ID', drop=True).sort_index()\ntrain_df = pd.merge(train_df, train_labels, left_index=True, right_index=True)","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:46:50.541642Z","iopub.execute_input":"2022-07-02T01:46:50.542445Z","iopub.status.idle":"2022-07-02T01:47:07.149072Z","shell.execute_reply.started":"2022-07-02T01:46:50.542375Z","shell.execute_reply":"2022-07-02T01:47:07.147461Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# (3) Removing Outliers [Public Score = 0.785]","metadata":{}},{"cell_type":"markdown","source":"Next, let's see if there are any extreme outliers in train data. This is to see if machine lerning doesn't go well due to those outliers, in other word, to try if public score could be improved by removing them.\n\n続いて、Trainデータの各カラムを見て、極端な外れ値がないか見てみます。極端な外れ値のせいで学習がうまくいっていないか、逆に言うとそれらのレコードを訓練データから除去することでスコアが改善しないか試してみます。","metadata":{}},{"cell_type":"code","source":"column_list = train_df.columns\ncolumn_list = column_list[2:27]\nplt.figure(figsize=(20,20))\nfor i, column in enumerate(column_list) :\n    plt.subplot(5, 5, i+1)\n    plt.hist(train_df[f\"{column}\"], bins=100)\n    plt.title(column)\nplt.show","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:47:07.150777Z","iopub.execute_input":"2022-07-02T01:47:07.151193Z","iopub.status.idle":"2022-07-02T01:47:14.295873Z","shell.execute_reply.started":"2022-07-02T01:47:07.151156Z","shell.execute_reply":"2022-07-02T01:47:14.294886Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"You can see many distribution plots are far from normal distribution. Let's check how far max/min is from std.\n\n正規分布から外れたいびつな分布図が多いので、標準偏差からどの程度外れているのかを見てみます。","metadata":{}},{"cell_type":"code","source":"train_df.describe()","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:47:14.297236Z","iopub.execute_input":"2022-07-02T01:47:14.298309Z","iopub.status.idle":"2022-07-02T01:47:20.418543Z","shell.execute_reply.started":"2022-07-02T01:47:14.298268Z","shell.execute_reply":"2022-07-02T01:47:20.417264Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"\n\n![image.png](attachment:28ad8812-b59a-4c61-b688-5ec3fe1add14.png)","metadata":{},"attachments":{"28ad8812-b59a-4c61-b688-5ec3fe1add14.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAu8AAAD4CAYAAABczwhbAAAgAElEQVR4nOzdX2wb2Z0v+G8t8jgQ0Pu0+yAnvipKA5lrwNNqP7CC9mYgqZcSBlcWsmwYDQ8jdUCiPYCLmYY8HYdZxzOMp8dC37AaiAISabuVRkNoblbSYFaqbcm4uW40+WC7Y8CX5sZiKU5bD3nYYAIY8859ICkWySqyqvivivp+AAG2dKrq8PzqVJ06dc6hUCqVSiAiIiIiItf7HwadASIiIiIisoaNdyIiIiIij2DjnYiIiIjII9h4JyIiIiLyCDbeiYiIiIg8go13IiIiIiKP+Ea/DiQIQr8ORUREREQ0lPrWeAeAF38+6OfhiDzj1CvjrB8ew5h5D2PmboyP+zAm7nPqlXEOmyEiIiIi8go23omIiIiIPIKNdyIiIiIij2DjnYiIiIjII9h4JyIiIiLyCDbeiYiIiIg8oq9LRRKRR+3/GKdCnxn/7bVzeOvi3yH6zuv4Vn9zRa0wZu7TIiavvnYOf7lyG9GZbzImbsE6NFisL6bY805E9rx2Dq9WfgAADx/j0+vfx+uz6/iDw13+YX8dP5wdx6lXxnHxF193LatU0YOYAQCer+PiK+W4nXrlx/hNN/J6UlRjUvnvVw8f49PQDF6f/TF+87zDfbeLy/NafTv1yjhOzf4Ydzo95rDreh36Gr/5xY91cRrHxR90WB+HWZfryx9+8Wbt/G/8aYzp8y/ww1ld+tk38cP9wd6n2PNORDa8ifW9f8J3dL/5wy/exOvXHwMPf4rUfhj/PGN9b3/Y/zF+EPoMX3U9n1TT3Zjp/ebDnzJ2jjTG5Gv84Re/xA+uf4avHn6GcFTEF3thxz2KLeOi78187RxexWN89fAz/OSvDlDMfOb4XBhu3a9Dv/nBDMIfl//96mvn8NXDx/jq45/i9afoKPbDqZf15Rxefa3hV2f0//kCP/yr7+PT47SPjx8ckDkYWH1hzzsRdeRb7/wd3qr8+3eavd6IbwH46rU38ZPMPta/1/WskYlOYnZs/8cIfwy8lfnl8b7IqW/iW+/8E7Yyb5b/+/CnSO073FXLuHyNO6vlhvurt/bxYu8zbO0d4Itb5wA8xqer7Pm1qqM6VIkR8CbW/3yArb3P8OK3P8Krr53DWxdPdzmnw6h79eWtzGfY2mv4+VntQeAPv/h5ueH+2o/wxZ/19QUDrS9svBNR1/yl+E17G8z8E17s/ROWZ2xuR11jO2YAjhuBr/0IUfE5ftf1XJ1QM9/HTyq9gJ/ufuFgB23i8vy/4d8eAsA5/M3/Vov7cUP04S7+K4fP2Ga3Dv1mt/oA9f1ab/LpMLb2PsM/cwy9dR3Ul+cHjy2k+hr/dauc7q2VWoPeDfWFjXcicu75F7gz+/3jnokoX7m7Xzditv9L/ORh/Q2NuuGbOF19Zf/0uf1ePcdx+SZ8rwHAYxQ1uwc9gTqqQ1/j+dPyv5w9OFNNh/UF5wBNP+/gTfywbs7V1yhWHnZ9otH2g6svHPNORDZ8hvArjbP/z+GtW1x1wb26HTNd7+4MAPbUdtXp8fIQFjzU8BywER/GpXe6WYdqDUJo6/jh6k/x6cPyX1793o/ws5/xgdgO5/UFAB7j0+uPdXM/HuPT6zP4Hfax9c43gedmbxUrD7sPK0OmBvDmmD3vRGRP46oLeIxPr/8cqQHPvqcWuhizP/ziGnvde8ja6/xmluJy+n/F31R62H/yYXW87tf4zQ9m8JOHjg57cnT9uvcYn17/KT59WNvnVx//tPMVoE4Yp/Wlqm7uR2UM/VfXr7l+9SU23onIhjexrpvY8+LP5QveqyjPvucyj27UzZh9gdT1xxwi1Q+vibA+ddFqXL6J5dSPysvtffxTvP7KOE69MoPwxwYrbpBOj6573/tlZRLkZ3jx58oE404mK59ktuoL8J2fHeDFnw/KPewV35qZqUxCdv/wMTbeiagj35r5J1ytrBTz1dZ/Y6+RBziO2f5+eZzvw2rDbxyn/qq6LOFnCL8yjlM/cDLRksq+wF5l+UCcOW39zYaduJwOY+u3v8RPvlfu8X3rez/C+m9v428AmI/tpUadX/fO4SdX9UNuqvMOOlgB6sRxWF9M1WIAADh9Gn9pmK469Glw8xY45p2IiKwRRbz1vTcbfnmATz9+DOAcXv3eOP5ynJPwnDpelg7AW3OvW9/QblxOv47ln72O5eNffIG9hwAwjtNcqbDHquOlK727LG/HHNcXU7VGeZlJrI7Hwg/uYZeNdyLqzPN1fNjV3g/qOacxOx3GP/+seV+/+/gxvsI4rv6s/otsyKqv8ZtfXEP4emX87vd+ae/LX2zE5Q/760it7uJ3F28fDxn4zQ8qjaDvzTB+Vjm+7n0Tf33xHH7y8DE+3f0C0ZlK77vJMp5kpMP6gi9w5wc/x799DPyl7ovJag8Db2J2BjhezeZheU336Ex5Pskf/p/d8lut1+bw1wN6+GLjnYhs+Azh2YPjr6jGw8e6b3J8E+s/s9n7sf9jXFw9AAB8Venx+Or6NVzcAoBxXN1jY7BzXY4ZdYEuJnXxqK440sOYaLv49OFj4OEMTm2dw6vHxy8P4yAj3a1D33rn7/DW1vfx6cffx+uV+QZfPaw2RP8Oy+yNb9Dt+vI6TuP7+ArAV6FxfHq82kz5r29laved7/zsl3jr4+/j04c/xeuv7Fa+YbWSboCT9tl4JyJ7Gi6e5dfyf4efXXW2VOTxTetY9eI47jCD1KTLMaMuqIvJObz62jiupr6P75zuba/rt975DF/gx5Wvli/n4dXX3sTV1D/hO2w0mutqHXod/7y3D98PruEnH1evd7WlJ8lAl+vLd362j/XxX+LDrVo9wGtv4icr38dyXS/+6/jn3/4SiP4cnz6sxMowXX8JpVKp1JcDCQJe/PmgH4ci8pxTr4yzfngMY+Y9jJm7MT7uw5i4z6lXxtnzTkTd9gV+OPtzky+3qOKQGHdhzNyJcfEOxmrwTk4M2PNO5ALs3fAexsx7GDN3Y3zchzFxn1OvjHOddyIiIiIir2DjnYiIiIjII9h4JyIiIiLyCDbeiYiIiIg8go13IiIiIiKP6OtqM0RERERE5Fxf13kvvXzUz8MReYYwMoU+PUdTlwiCwJh5DGPmboyP+zAm7iMIAofNEBERERF5BRvvREREREQewcY7EREREZFHsPFOREREROQRrmq8q/ItqIc2NjjMIipne5YfIiIiIiI3cU3jXVtbRmLiMoJjNjYak7AycR/RvZ5li4iIiIjINdzReD/cQHhzButXRm1vKl65jMnbt6Ba3iKL6MgUhJFlKG16+VV5CsLIFKS1I9v5IiIiIiLqNlc03tUP9+G/dgmio61HIV8D5mwNn1lEZAnIfN6qUZ7F9t1yOiJyQoMSlSAIAgRBgBRVoNndXhIgSC2201REJaF2DCkK1ShxQzpBikIx3GmneXYzC+Wpo0YFCIJkUk69PEZlH4LJT7Shq6bxHIiqQxSzRg7PT02BZFieBvG1Wp5W61413zbOC2/pw3VOp2W9tBI7O+eCZ/UyJjavTwA0NaorcwnRxoJ2EJPBN94PN5B4OoOV2Q72MXsBkbv3bfS+a5icF5Hb/NI8oHv3kV66gIUOskV0cmlQJB8yk3EUSyWUSkXEJzPwWbpBaVCVKCQhDIQiLZIpkHxzQLyIUvUYoTzmfNH6a0FTuhKKcSDmM2o0Os2zm1ksz7pNFCTyEUQCgziGCDlbOo5V7aeIZACILAR1aVVEG88BzMFncAP1vg7Pz0Cysp3+Jwu5rtfMYnlarXtOzgtP6cN1rm6TVvXSRl2wdC54Va9jYuf6BECNohyWSrpiHMiEoTSGxWZMBt541z7fBxa/7bDXvUrCwtImtu2MfR+7gMiDfeyYDJ1RdzYRmDjVUa6ITix1FTEksS4HK3VbRFBeRxIxrLZtVxWxXZhEvJiFPG6eStvJAMkiUsHq1aNyjEAa22p9ulxkV5cOEIMp7EZyyOzoLucd5dnNrJWnnroagz++gkk3HaMSnxXdvVFTEkjXxVZEMLWLSDoxRL2IFX04P62Wp9W65+S88JQ+XOfqD2deZ05UXWilzzFpPO5KXdtdRXQujchuCrWwBJHKZiEHDfZhg3njXVOhSLXXDkLLV2LOFZ89gV80Get+mIUyvQxhpDz2XJg2X40mOL+I9I6doTMSFpaemAydyWL77lmE3mg1Bv8IqlzLmzS9YZw3K5/hcAPS9AY0HEFduwWpuk856/EePzqptIM84B9veCgXMe4H0tvtrqBBpFIygm2e6EU5i2xTt0T5GPmD+poTmPQ1be+brO++6izPbmatPI9pChL5xpvQoI+hQUmkEYnLuvho2Mnkmnu6EMRC44PZEOjo/CwWkGvatukIlsvTet2zeV54TD+uc7WDtaozNuqCpXPBu/oak9pRDa5PANRtpAMWrnMOYmLSeC+/fsmE4sfd+MU4DF6JdeoIB0/PYtJwhZksoudkZBbfRvHlI5RePkLxGjB3rsXk1KcvbDV2g/OLxkNn9u4jfX4G86Yr3xxBmb6IxEQtb+vXnhvkzd5n2JFvYFu8jOzLRyg9VuB/KiPMybLkQcVCzrzBnD/o4UOpiu10AKF5XS/7fAjI7DQcU8NOBnXpBpdndyn37sk9vbnbPoZhr5Y532QAuULRafZcaZDnp7XybK57w66fMXFaL4exLrQykHpicn0yfpDoDuPGu7qNfED/2gEQgytIBvI46NcdbO8+8uffxfoVqZaH2ctIntdwYNTDPXYalodnVs0aD53RNA2BVkN59j5B7IyCbF3ermN3aRMJfWPbzmd48AEK83eQmq309o9JWFk8i9yzF3Y/FdGAaShfs5prkDju7+FhVSjRbUwWG8YJijLW4wWEpSgUVaukWwXW9ekGlGe3UaMOet17fwx126BXq0VvWrGQ6zSXLtON8/OgbhJf89v0DsrTrO4NtT5eM9rWGbuxa3cueNVgruPG1yfdg4Sm6CYSS4gaFra9mBg33oMpZLNGT3g59O0BbvY6sveMVqB5goKdL3JqyWjozBF2NtFyyIzZePjg/GJ9Y9vWZ1jEQieTdolOqPLqCwIE3xxiecBoqKIYXEHcn0dszgfBN4cMJg3TnWwalES+x73uDo6hKUikI2gaEQAguJJEIJ3Q3Qw1qFEJibztrpzhly5gfCV7PLlu12CCqd3ytFL3qFPW6oyt2Fk4F8iiFtcnAEBhFdFVYKUyybW4G0J+Ltw8D8FmTFqMea/MupUkSJIAQfAh1u/OjMPKGPDpZUjTUxBGLiL2wCztczjJXtPQmcMvkUHrITMHT4Hcexdr49irP9/dbB66Y+czEJFtwVSp4YLXsIqMpiIq+JBACLvFEkrFXfjzmeZ0J526ipg/jlRPe93tH0PbySAXmETzi3AAooxsMQQkfJUeqzC2F9axHupWhodEMIVSSTdpTjfBNKGvBDbLs23do85ZrTNWY2f1XCBLWl6fAOTyk1hJybpRLDLWk0BMP3vWQUyMG++aAsnnQ6Iwifj6OtaztWVwumsU42dMetIPNyCdu4jEs9OIp25i/d4jlF5uIXm+xe7OnLLfYzR7AZEHz1F9oWB19ZvIr8tj2Jt+9D3tTj4DkecZTxoFKmMAe3jcoJzFbiSnuzBqUMJzyCeLyFYnIlVm+xeTQCxcXT5sUHl2i3LvXrKn42WcHaNYyCEQmje/JosyUtna0mqpoGg67tW7enF+ipgPGYyHdlSeRnVv2PXjmmGzzjiuCybnguf0/zre7vpk9DexnMk24+9bx8Sw8a6uxoDjm53Y04lLvomzhqvEqB9+ALy/haxyCcGx0bZ5UHc2EZmXHORAv8xk+yEz5QcOIK+1n0hq9zMQDQuzSVJtG2JdOrbuiCjkjCfRifMhBHKF4wf3QeZ54LQdZHI5xHz6LwjxIXb8uy70qDo6horttPEY1hYHMh336mWDOz+tl2fjCk7Drucx6bheDmddaKW/9aT19amXk4UNGu9mwS6iF3OAxDdmEGhaJaY8NKV5CckXKBgOOSl/G6rTMePHy0y2HTJTS2+0So22tgxprfogYvczEA0P456Fbt5IyuM5jb5/pH6Clg+TAZO5OsVC3evO3ufZxUQZWcMvHQkgWezSF7g4OYZ2gDwCsNWJru0gk2sxBtWjOjk/VUWC1PxVqibLCzYmayxPq3Vv+PX8mtFpvTSoCx2dCx7Q1+t4m+uTOB9CIL3dNG5dLbf4jx8knMTEoPFembWcqH0blaYqiEoHmOzFF6SNXUL8zD5W675gqdy7nb69UcvD3gai0y8wuWSwj737yC9dgOPTrvINrYrVL4yavYwkPkBYtw67treB8HtA6I1q77/Nz0A0TIIrSCKGsFL9em4NajRs8CU7ksNeXRHBBT/Sc1J5BZnq/tQo5tIB3WtmEXI80pQOWuXLM/STwCzm+aRzHjMHigXk4IfpPVdTIOlXZdBURH0xILni/H7gVh3UqeC4H7lYuGEyo8G5bak8rda9E6Dn1zkbLNYFy+eCV/UzJu2uT6KMeCSNuaiqa0831xMnMTEcNhNMFZH0Z+CrvKYJbwMrWRnjMB5L1Kng1RnkdY1cAAgqW0ie2YevMhk0vAOs3LtUzoNWvzqMchuIK06GzFSVh87E3ms3ZKZqFPK9LcTx0XH+fLefI/T4DmRdr731z0A0bETI2SJChUTlOlKeMFpsWsXKj0CgcQkvDUp1Wa25NJCLVfbRcKENplDcDaFwPEFLgC8B7DYuVxdMobjrR0aXTggngN1iwyQwq3n2GovlaVkHMbOb84M80GIyGEQZ6yEgUR1WUD4BDL5AaBh0UKeCKZTqJjOabGu1PK3WvR6dF+7Rh+uc5axYj52lc8Gz+heTttcnlNvTu5MJhNvco+zGRCiVSiULpdExQRBQevnI9O/a2jLCuInsFSuN5/rtVsU7SHGZRfIwYWQKfaqK1CWCIDBmHsOYuRvj4z6MifsIgtBiqcg+E6/cQfzZJ1DtrOF+uIHVZ2+z4U5EREREJ4Jret6JTjL2vHsPe6S8hzFzN8bHfRgT93FVzzsREREREbXGxjsRERERkUew8U5ERERE5BFsvBMREREReQQb70REREREHtHX1WaIiIiIiMi5b/TzYFwqksgYl4r0Hi6h5j2MmbsxPu7DmLgPl4okIiIiIvIQNt6JiIiIiDyCjXciIiIiIo9g452IiIiIyCNc1XhX5VtQD21scJhFVM72LD9ERERERG7imsa7traMxMRlBMdsbDQmYWXiPqJ7PcsWEREREZFrGDfeNQWSEIXar1wcbiC8OYP1K6N1v5NGbrXNg3jlMiZvt09X7wiqvAxpZApC5UeSN6A15En/d7Mfae2oskEWUcM0y5DkLDQ7bxSIiIiIiAy4oudd/XAf/muXIDraehTyNWDO8vCZIyjTFzGHt7H+8hFKLx+h9HILcezDp39YGLuE7PHfH6H0UkEEZ5F8rP/dI2T1DxwGfy89vok4PoLv3DLfENAJo0GJShAEAYIgQIoq9Q/INrYVpCgUw40tptNURCVBlxe1bV7UqABBkEyO60UaFEmAILWIQ0M5mZd743YKJEG33fGPQfk1xkKKQm1KY2V/lc9jmE6AEO1b91P/OI1Pg9bntoV620m8LdQ9b3FynbN57nb7+tWl88i9HN57Ojivrd6jWuVFU6O640uItgjK4BvvhxtIPJ3BymwH+5i9gMjd+9Z63/c+QQzvoqhIuoeFUQSVm0ie37TxEGDR2CiCyh0Ufy0i/d1lKOyBpxNBgyL5kJmMo1gqoVQqIj6Zga9Vw7FxW1S3LaEYB2K+xguo1XQqor45IF5EqZoXzMHXqnGnKUjkI4gEHH58V9GgKlFIQhgIRVokUyDVlZNZeZoIJI/jUPvJQtb3yjQdo4h4KI85n8Gb3rb7EyFnG/9e3mcyAEQWgnYKyf06jY9uP+bnto16ayXeTuqepzi9ztk5d7t8/erWeeRandx74PA61uYeZSUvahTlXVaOWYwDmTAUkzAPvPGufb4PLH7bYa97lYSFpU1sW+jZ1jQNOHPK4HijkFNbKCpSRzkxI85ex+7SE8Q+5ARbOgHUVcSQxLocrNQ1EUF5HUnEsNruvl3dNhU8rqdiMIXdSA6ZHc12Ok1JIB3ZRSp4nArB1C4i6YTpzUpdjcEfX8Gk3c/tSkVsFyYRL2Yhj5un0nYyyNWVk0m5d0DbyQDJYn0s5HUkA2lsd6s9VzkvVoat7d6l+LQ8tzupt0Z5dlD3PKXL5WV07nb7+tWPej5Q3Y6JActlaDkvKqJzaUR2U6iFOYhUNgvZ5DrWpvGu7+6XEG16t9m54rMn8IujLVIcQZGXj8ePR/eODFMF5xeR3mnfMBZFETDrpR8b7fAhorXg/CLw9MWQvTIkaqYd5AH/eEN9EjHuB9JtWmnqQR6B0LxhXcwVijbTadjJ5Ax6YYNYMLtZaQoS+WFq/AWRSskIWri4BSZ9Tb/zTVp4/VAsINcU72ainEVWbkxVPi/yB7pYWNxfMw1KIo1IXO7ptXxQHMenqs25bbneWoqPg7rnMZ1c5wz2ZnDu9ub61fF55GIdxcTGdcdKGVrOi7qNdMDePadF4z2PRHQV4yvZShd+CPk5H7r7tusIB0/PYtJ0hRkNCfkTjF+9Uxk/PoP8dy+ajx230jCevYAINjE3vWFvWcpuGDuNwIPnKLZPSeRpxULO/OKWP2hZT4OGDTwNB/n618lW05nxTQbqHgaqyr1Ww9n4a0WcDwGZnYbYaNjJAKH5XpaGiu10oDvHGNJed6A78Wl3bndSb+0wq3te09XysnnuOr1+Da6e90c/zmGrZWg1L8aN/NZa9ryHVvRd+DKyuxGkE3YmnXUudPV6bfnIsUvI/noR6dsbzXkYOw1rz40SUi+3kDyzj7lzld58uZ8NeQ0HHPdOQ63cgPaPN1+KxHG/sz0qYUs3tuZ05j0uxUKueQdqdMh63W0QZazHCwhLUSiqBmgqlOgqsN44jtnMQdPk4bYvazUVSnQbk0WjY9jfn7o9vL3uHcen7bltt962i4/Nuuc53b3OGZ+7Pbh+dVzP3awbMbFw3bFUhtbzctzI1xTdJNjWo11aNN79aDpmcAGRXAb9e9slYryxV372AiIP9rHTUQN4FLJS7s0v/noGk6g05KcNHgqIaKA0RYIv5sdutnWjzCxdcCWJQDqhuxBqUKMSEvnGx30NSiJ/Invdq8TgCuL+PGJzPgi+OWQwiRbD5OulC7U3taUids0moqK6EoYAwTeHWB7Gx7CxPwDl4QLpCIZtnqqe8/j04Ny2EB/rde+Ea3Hu9uL61VE9H3YWrztdL8PCKqKrwEplInNxN4T8XNh0XsPAJ6x2zeFzOHmWF2cvVRryW0jiA/h63oA3eCAhIkOaIsGX8WO3mEKrNlnLdKKMbDEEJHyVHo0wthfWsR5qSKeuIuaPIzXEjb+WNBVRwYcEQtgtllAq7sKfz2DOyioUwRRKJd2bWt1E1ITBxsFUqeHm2HAMm/sDKpPIApNofkk9JDqJT7fPbavxsVr3TriW5263r1+dnEfDzup53YMyzOUnsZKqPXiJQRnrSSBmMst2wI33UYyfeYJCt4aRGK4iYz0vcurdno5J1z7fR+786eG9uRABMJyAWKEd5C3vpdwgD6GYTbWcbGkpnSgjla0t+5UKig3jEcu9VskTOV4GADQo4Tnkk0Vkq5NbK6sdFJNALOxkuKSI+VC7sc0ignIWu5Gc6U3K6v6KhZzpBGbv6yQ+Vs/tTuutSXza1j2v6s51DrBw7nbt+tWLeu4m3YuJfp/157XVMrSXF6P4i+UdGMbEXuNdO4DTj2/GN3HW0ioxxw5fGOZB3dlEZL79Mo/a3kabtdZ7NSb9CDubTxDoeFlMIvczm0xluYGlRi0NlbGcrknDeERtB5lcDjGf/os5fIgd/27Ye6WKKOSMJ42K8yEEcoWeTrTvfKULFdtp4/Glw6GD+Ng4tzuut5aYjwX2mu6Ul5Nz1+n1a7D1vB96fw5bL0OreXEygbvlajONDwzlVzshdHNCsvjGDAKmq8Q0N6TLvdczmK8bepLF9t1FLFj4oqfizgfma60fPjfYd3doazcQe7CI+JVWy2ISDQfjHgOrN20V0bk8km2GylhPZ0DbQSanG2MqysgafmFKAMmi0ZfPDBsfJgM5GN4/ioW2w1FURYLU/BWEDcvclcfqGq1Y1jj5ztr+9H86QB4BeL4z11QH8bFxblutt7bjU5esoe55WGfXuWpyB+eu4+tXZ/XcCzqJibXz2noZWs2LOB9CIL3dNK5eLT/VGT5wmDfeA34UVmuzbDVVQTiW6/5M/rFLiJ/Zx6rR8o/nRRQ+vHW8Eoy2t4Hwe08QuXapPg9795FfumDpBh5UFETuypDkbF2Banu3IH13s3nfHdIOs1DkZfg2Rew+vm6/kUHkRcEVJBFDWKl+jbcGNdq8YoymSE292pqSQD653raxbDUdNAWSfsUATUXUFwOSK6yPx0TI8QjSc1J59YQqrfLlIbrrvlHMguN+5GLhhkl1zSv/BBf8TcfQ1Cjm0oG6V/7W9qdTLCBntMjC0OgsPpZZrLeW4zPsda+D69yxduduV8vQ+nnkWR3ExOp1zHIZWswLRBnxSBpzURW1MDdfF/XMG+/+BaRSC9gOl1/B+OYy8O8WezKZK3h1Bnmj5R/PXEBKuYDt6BSEkSn4vrsP/6+3kKrrYT+CchuIW/5m1PJSkXF8hPDIVOXLn6YQvg2EmvZt1xPEztX2KYxMwRf9CIWJt1G8p1vykmjoiZCzRYQKCfgqr3ATCKHYNLzFj0BAv2xWuZcjF/PpXv/qfo67ba2mQ3lZrxCQqL5S9iWA3aLBGvHDSoNSXX5sLg3kYpWYNE8SLe76kUnoyjRcLqv6635jzMrbluom1ZnEO5hCcTeEgu4Y5XA0vNmwur/qJzzIA0PQa9hSJ/GxzGK9tRqfoa97Tq9zNW3P3W6Xod0IyKIAACAASURBVOXzyKs6iImt65iVMrSaFyCYKmJ3MoFwq+uijlAqlUrOCsgeQRBQevnI9O/a2jLCuImszWEl2toyVsU7HTa6iQZLGJlCn6oidYkgCIyZxzBm7sb4uA9j4j6CIAx6tZka8codxJ99Yu/Lkg43sPrsbTbciYiIiOhEcE3PO9FJxp5372GPlPcwZu7G+LgPY+I+rup5JyIiIiKi1th4JyIiIiLyCDbeiYiIiIg8go13IiIiIiKPYOOdiIiIiMgj+rraDBEREREROfeNfh6MS0USGeNSkd7DJdS8hzFzN8bHfRgT9+FSkUREREREHsLGOxERERGRR7DxTkRERETkEWy8ExERERF5hKsa76p8C+qhxcSHWUTlbE/zQ0RERETkJq5pvGtry0hMXEZwzOIGYxJWJu4jutfTbBERERERuYY7Gu+HGwhvzmD9yqitzcQrlzF5+xZUy1tkER2ZgjCyDKVND78qT0EYmYK0dlT3e21t2dL2RERERETd5orGu/rhPvzXLkG0veUo5GvAnK3hM4uILAGZz49apMli+245XRNxBpGlGYzbzCnRiaOpgCQAQuVHigKale2U2jZ1P5Jue61+340/UaNH+so2ktLq4EBUsp/noaFBiUoQBAGCIECKKjY+vtVtB5VuWFg5j02205/bUbPtB5XOqzr5fF0sQ0vXTZP9Dd11zsnns3lPsXV/s1pnrdftwTfeDzeQeDqDlVmH289eQOTufRu97xom50XkNr80L+e9+0gvXcCCwZ/E2UtIKZesD+8hOok0BfDNAfEiUCoBpSIQygO+qLXtA8nKdvqfLGpP+CKQbfx75TgBAAtBfWYAJQoIYSAUaZVpQPIBiNf2FwfgM7r5DSMNiuRDZjKOYqmEUqmI+GQGPslKY9jqtoNKNwysnscm20o+YDJeqyeTGYNGwqDSeVUnn68HZdj2uqnb39Be55x+Phv3lKb7m9kxbNx7bNbtgTfetc/3gcVvO+h1r5KwsLSJbTtj38cuIPJgHzsmQ1/UnU0EJk45zhHRibeTAZJFIFit2SIgrwOBNGw8adunrgJIAvq2O4pAYRIoZtHylVl125Ru42AKiOSAnaG4q7WmriKGJNblYOV6LCIoryOJGFbbxczqtoNKNxQsnsdGque2XD23K/URsfr6OKh0XtXJ5xtUGQ77da7bn8/onrKTASK7uvub2TGs1ln7dbtF470/ryKLz57AL5qNdT+CIi9DGKmMP5c3DPMQnF9EesfO0BkJC0tPTIbOZLF99yxCb5jk6XAD0kjDOPvDDUjTG9BwBHXtFqTj/GaH40GWyC45C8iNj+Qi4Adw0KZWFAuA38nANA1IpIG43PD7IJCS0baH4CAPhOaN/1YoOsiPt2gHecA/3lBMIsb9QHq7dSvB6raDSjccLJ7HRirlVK9SH/XlNKh0XtXJ5+t2GVq9bg77da6rn8/sngJg0mfwu0DDL6zWWft126Tx3q9XkUc4eHoWk4ZDUI6gTF9EZuJtFF8+QunlFuIT+/BNGzfg8fSFrbwF5xeNh87s3Uf6/AzmHQyL2ZFvYFu8jOzLRyg9VuB/KiO81mpsPdFJogLpADDv/D1b690b9brbYPjAoQF5NAzDGU7FQg4BgxuSbzIA5A9aXl+tbjuodCdeIWfe2MgfDD6dV3Xy+QZVhsN+nevm5zO7p8yHgMxO8zEy6N39rYFx4930VWSmf29V9j5BDO9i/YpUycMoglduIgmD4S5jp9H4vNPWrPHQGU3TEHAyjOfBByjM30FqttJjPyZhZfEscs9e2N0T0fDRVCC6XX4taKlyHdifcLRt0kPSCSWMjh4IPEOrdPA1B0cc93dp20GlO+kqDReDckJDeQ4mnVd18vl6VYYOrpvA8F/nnH4+s3uKKAPxQrl8Va1yf1sF1q3e3zpn2HhXt9MIhOabXkXK2WzzA02PqDubBo3oUcj37kDuymRRo6EzR9jZhPmQmZYWseB00i3RsIpWbiK+ufJNyKp0AVjJWp/sqilAOtLdm48iATE/kO3yAwERUS/YvW4Cw3+dc/r52t1TgiuAPw/M+cr3N0x2mlNbDBrv5r0Z/XOEg6doMRa+weFz5BwcpWnozOGXyMDZkBmiE0WRmpfSMhrimSo13EgsrGgQTAGlVP3KMtXJrorJxjsZINDFi6ciARk/UEx1b59ErVitU9Q/XoqJk+umF69zdmLSyedrdU/RVEDwAQgBxRJQ3AXymb6u2DPg1WZGMX7mCQrd+MKjM6fsv62YvYDIg+eoTmHofOUbohNCzjYvqdWy11ssbxPJwdkyICIQCphPOCrkzCcp2aVIQCYEZFN9ewU6eOVJnnmDycTaQbtXJla3HVQ6j7Bdp6xqMVG8oTwHk87FWsakk8/XrzJscd306nXOaj3p9POZ3lM0IDxXXk2tOslUDALZLJAEEO7PMqgGjXfzC2Iv+CbOGqwUM4rxM0BeszbZU93ZRGRecnB0/TKTnQyZISJLmmbjd4MKpGE8LtT2rqLD/Qq5Bd9kADmDm3yxkDMYRuls20GlO/EmTRpwjQ2UQaXzqk4+3yDLcNivcx1/vlb3lCKQM1l4YT4E5AoOj2mPYc+7bzKAXGbH4MswJChdfmUkvjGDgMFKMb6JswarwRxBmV6GUreme/nbUJ2ONz9eZpJDZoi6pPLtdkbXioKFAW6KZPCaVwMyOePVArQDAAHAYEEGe1RgLu+tV8hdJJZ7bZqu+1aGUVrddlDpTrxKOdUzmAw5qHRe1cnn63YZWr5uDvt1rgufr+U9xQcEcoDRS+BiobvDN1swbLyLlS+5CCvq8UVRU8KI5fwY7/Zs5LFLiJ/Zx2rDlyyJV24iiQ8QXqutla6t3UDsgYhxfUN97z7ySxecv12sfEOrwiEzRF0iAgt+YE4qz8SvUqPlpSJXdLVVkZq/vnvcD8TCum01INpitYBiAYC/81e/SgJIrnvrFXI3BVcarvsa1GgYMSTrQqYpEgRBqm8nWNx2YOlOEqM6FVwBEEOt982kTg0qnVdZ/Xz9iInV6+awX+esfj6jmFS1vKeIQDzSfH/TVGCuByuemTAZ8y5CzhYRKiTgq3xJUzgTwm4x1ZP6Frw6g/ztxvXbRyHf20Lo2UfwVb70KLw5g93H13V5OIJyG4grTobMVJWHzsTe45AZoq4JpoDdEJDw1SYVJWCwVKQfCPibty3qt61MDDJ7BXqQb9PboQFSJQ9zaSAXq+xXf+Gu9FDFfM2ToQQBiLp1llo3NV73fUgghGJWbriH+RFojJnlbQeVbhhYOY8BwzoFEcgWgUKiTZ0aVDqvsvr5+hATS9fNYb/O2fl8RjGpaHdPCaaAXX/9/S2cAHaLDQ+lVuus1XQ1QqlUKlkqkw4JgoDSy0emf9fWlhHGTWSvWG9Aa2vLWBXvIMUlGsnjhJEp9KkqUpcIgsCYeQxj5m6Mj/swJu4jCMKgV5upEa/cQfzZJ1CtrjxzuIHVZ2+z4U5EREREJ4Zret6JTjL2vHsPe6S8hzFzN8bHfRgT93FVzzsREREREbXGxjsRERERkUew8U5ERERE5BFsvBMREREReQQb70REREREHtHX1WaIiIiIiMi5b/TzYFwqksgYl4r0Hi6h5j2MmbsxPu7DmLgPl4okIiIiIvIQNt6JiIiIiDyCjXciIiIiIo9g452IiIiIyCNc1XhX5VtQD21scJhFVM72LD9ERERERG7imsa7traMxMRlBMdsbDQmYWXiPqJ7PcsWEREREZFr2Gq8a4oEIap2PxeHGwhvzmD9ymj7PKwtQ9D1totXLmPy9i1Yz1UW0ZEpCCPLUNr08qvyFISRKUhrR5b3TkRERETUK67oeVc/3If/2iWIjrYehXwNmLM1fGYRkSUg83mrRnkW23fL6YjIKQ2KJECQFGi2NlMRlQQIQvlHkqJQDXegQYlKx+kEKQqlzYHUqABBkFqkc5jnQbBcTjWmn19TIAm1fdV+WpVV3Q7qYiFFzcpvUOmcsn+O1Tatj0/ztpVzzbDcBZPOMqfn57DGxwkLZdhYt6Jq23y3v7Y4zIvldEMeE8t1sYM667AMrealdVlbr9uDb7wfbiDxdAYrsx3sY/YCInfv2+h91zA5LyK3+aV5Ae3dR3rpAhY6yBbRyaVBVaKQhDAQitjcVIHkmwPiRZRKJZRKRcRDecz5og11XIMi+ZBBHMVSCaVSCcU4EPO1uHlqChL5CCKBLud5ECyXU/025p8fQCB5XJa1nyzktj0rlVhMVmNRRHwyA1/TTWhQ6ZxycI4db9oYH6NtRcjZxvIuf45kAIgsBOvy4vz8HNb42GW1DFVEG+sW5uBrNfKgXd1ynBfr6YY7JlbrYgd11m4ZWs2Lhf3ZrdsDb7xrn+8Di9922OteJWFhaRPbdsa+j11A5ME+dkyGzqg7mwhMnOooV0QnVxHbhUnEi1nI4/a21HYyQLKIVLB6VRARlNeRDKSxrb93qquIIYn1VPD4+iEGU9iN5JDZMb5Kq6sx+OMrmOxyngfBcjnptP78HajGQq7GopIXxLBqFLN+p+v0c9k4x6q0nQxykV1dfKxvWz3uir7t3sn5Oazxsc1aGWpKAum62IkIpnYRSSdMG4D265bVeFpMN+QxsVwXO6iztsvQal7alrX9ut2i8a5Ckapd/RKi7d7FOlR89gR+0WysexbK9DKEyhj16J75MJfg/CLSO3aGzkhYWHpiMnQmi+27ZxF6o8UY/EN93qYgTDeulHMEZbp5vLwqcww9nQRBpFIygg6eykU5i2xTV6+IcT+QP6hdh9SDPAKhecMH/1yh2PxLTUEi39gg6k6eB8FqOR1r9/mLBeT84446UrSDPNC0bTkvad2TxKDSOWX7HGsQmPQ1/c432a5rVoOSSCMSlxuO6/z8HNb42GelDDXsZHINbz3K2y6YNQDbXluc5sV6uuGOifW62EmdtVo2Vo9hvazt122TxrsGRZpDJlTt6l/HwsEqVgvWd2zNEQ6ensWk4QozR1CmZWQW30bx5SOUXt7EgvYJVp+12N3TF7Ze+wTnF42HzuzdR/r8DOZNV77JInpOn7dHKF4D5s7pJ86OQr62iNx7n9R+t3cLc3cXEbcwMZeI9FRspwMIzdeubkHDxquGg3zjcIPKHlZj8Dc1iIZNczkd/6WHn79YyJk3VPMHx9fYQaVzyu45pifOh4DMTtPr8Z0MDONzzLDXvTPDGp9+800GDBuAbri2DHtMrNbFTuqs1bKxeoxelrVx492wqz+FBeQ6OJRNe58ghnexfkWq5GEUwSvXsYAnxunHTsPyULOqWeOhM5qmIdBqKM/efeTP6/MGiLOXkTyv4UC/r9nr2F3arEymPYJyexORX19HF6/JRMNPU6FEtzFZbD/2WlPCxg0fNeqgZ8xjWpWT5c9/0DQJq/1L1/JNyz/eHBxx3O+CdN1leo41ZULGeryAsBSFomqV+KwC663PY3XbqNe9oxyfqPh0zrwXulgwaAO54toy7DExZrUuWkvXWdk0H6O3ZW3YeFe304avBNq/7usedWfTsAHtmzjbxaMYDZ05ws4mWg+Zmb2O7D2j1XGeoNDwIBBUFETuypDkG4jh3c4m5hKdIOWVGwQIvjnE8kC7oYCaIsEX82M329jw0aAk8gPvGeuV9uVk4/OnCxhfyR5P0tttNwH2hDE/x4yJwRXE/XnE5nwQfHPIYLL1eawpSKQjaNNBSD0WXEkikE7ohgtrUKMSEvnGNtBwX1vczGpdtFtne5mXbjJovJs/LfTPEQ6eosVYeAOHzx29F2gaOnP4JTJoNWSmmu4I6totSNPLkKanIIxcROyBUUIJK++fRe4ukEw5XQ6T6OQJpkoNjUjz1QI0RYIv48duMdX8ZktdRcwfR2pIG0Rty8nq5w+mUCqldOMuaxNgE/bWvhtKLc8xww1URAUfEghht1hCqbgLfz7T+jzeySAXmETzi3bqK1FGthgCEr7KW6gwthfWsR5qSDfk1xa3sloXbdfZHual2wa82swoxs8091Y7duaU/cbx7AVEHjxHdRSbpdVvDjcgnbuIxLPTiKduYv3eI5RebiF53jh58dkTAGaTY4moNRFBOYvdSA4xg+UQyhfPEIrZlMGEn3LPWHKox8tUGZVTp59fxHzIeJyvPo3ZJFntIO+CdJ1rfY4ZbgElPId8sohsdSKaGEQqm0UxCcTCxsvyFQs504lwzg1/fHpClJHK1pZLTQXFhjHMbrq2nJCYwHpdtF9n7ZdN62P0tqwNGu8tVivoAd/EWYNVYkYxfgbIa9Ybu+rOJiLzkoMc6JeZtDBkBoD64QfA+1vIKpcQHBtt29BP3D2L5PsNk1eJyBbDYXtqtPXrSm0HmVwOMZ/+y298iB3/zu4XqrhfXTn16fObTeRrbIwOKl1H2p1jhooo5IwnDovzIQRyBRhMe8R2ujdvvYc6Pn3TMCrBZdeWExETq3XRUZ21WTYWjtHLsjbseQ8uRJBrmiVvMlmjQ+IbMwgYrBJjthJMuRe7UfnbUBccjic/XmbS0pAZsyE9L1BoGjZzBCX6AfD+TchX9JNXichYeWyp0XehNF9/VETn8ki2el0pysgafgFOAMmi1S8gciOL5WTj86uKBKn5a1dNls2rJ5Z7fJpWVmkcgjmodM5ZOMcM+TAZyMHwhUWxYDw0RjtAHgEYLE7RseGNTx9pO8jkdPMRXHZtGf6YWK2LTuusnbKxdoxelrXxsJngCpKIwXf8dcDlb39qnqzRBWOXED+zj9XGL1iavYwkPoBPzlbyUB5jnnhqMGF17z7ySxecjzeqfEOrYukLo8pvBdK3N44Dou1tIDr9ApNL9Sm1tRuVFXPKDf3g1XcRuPsRlG4NEyLyOE2RGnqoRAQX/EjPSeUVOqrp1Cjm0oG6V9SakkA+ue7RxnenrJeTVcFxP3KxcMMkveZVGppjhuN7RljR3TMMth1YOoesnmNG57EcjzTFB5qK6JzJajLFAnLwo9P200mKT89oCiT9SkuaiqgvBiRXHLUzDGPSbUMeE+t10WmdheWysXzv6WFZm4x5FyFni0giAV91ssb4SvNkjS4JXp1BXtcYLhuFfG8LSXwE38gUhJEb2BYvY32xcesjKLeBuOJkyExVeehM7L32Q2YAIKhsIXlmv5KvKYR3gJV7lzAO/VCfLFbfa5ikOnYJ6+8DsWjjZyUaNhoUqfIqeS4N5GKVa0njDcyPQKBh2axgCsXdEArHk8UE+BLAbt0SiOUe4VzMp3tlrftp9TXmHefZJSyVk739leom6ZUnWxabXgsbxKxyzwgVqvcMs20Hlc4JO+eYwdJvwRSKu35kdPERwglgt2g4wVE7yAMtJ6t2UKeGMj5OWCxDUcZ6CEhUh8SUK5bB2t5WGcXEajytphvmmFiti/bqrLN6YucYVsva/r1HKJVKJfuFbZ8gCCi9fGT6d21tGWHcRNbmFxhpa8tYFe8gxSUYycOEkSn0qSpSlwiCwJh5TO9ipkGRdjA/sAbQcGCdch/GxH0EQRj0ajM14pU7iD/7BKqdISWHG1h99jYb7kRENDjqKgpun+xHREPDNT3vRCcZe969hz1S3sOYuRvj4z6Mifu4quediIiIiIhaY+OdiIiIiMgj2HgnIiIiIvIINt6JiIiIiDyCjXciIiIiIo/o62ozRERERETk3Df6eTAuFUlkjEtFeg+XUPMexszdGB/3YUzch0tFEhERERF5CBvvREREREQewcY7EREREZFHsPFOREREROQRbLwTEREREXkEG+9ERERERB4x4MZ7FtGRKQgjy1AOW6dU5SkII1OQ1o76k7U2tLVlk3xnEZ0u51WY3oDWMu2g8khEREREXuSCnvdFRJaAzOetGuVZbN8tp3MNcQaRpRmMN/xalWWkzygovnyE0r1LEFuk7Z4jKNNTiO5ZyyMREREReVNfv6TJmIbJeRHp219Cu1Jp7Dbau4/00gXsYhP5fmfPhDh7CalZ478FJk7VfY5WaXtpUMclIiIiot5wQc87gLELiDzYx47J8A51ZxOBiVM9OPARVHkZwsgtqD3YOxERERFRN7mj8Q4JC0tPTIbOZLF99yxCb4yab36YhTK9XB5nPjIFYfoWVKMHgcON2nj0kSlI0zewPXETpZfXEdSlkaY3oOEI6totSNW0chZaw74kfaN/7xaEkSnM3QVy712sH5/fmPbYERS5lm9J3qg/hpXPtncLwshFxB4A6e9W0sjZLhzXYjkQERERUd+4pPEOBOcXkdv8srlhuHcf6fMzmB8z2zKL6DkZmcW3y+PMXz5C8Rowd66h0Xq4AencPiavbaH08hFKL7cQP/ME6WcvDPe6I9/AtngZ2ZePUHqswP9URrjVZNnZ6yi9fITdJSDwfvkY2SstHjhwBGX6IjIT1XxvIT6xD9+0viFt4bPNXkfp5RaS54HIr8tpSorU4XE7KAciIiIi6hnXNN4xazx0RtM0BBa/bTwWHgD27iN//l2sX5GO04izl5E8r+FAty/t833klt6GPFttUI8iqCiI3L3f3DP94AMU5u8gVU07JmFl8SxyJg19R/Y+QQz6fI8ieOUmktCVgcXP1vlx72D3zAfNjfJ+lAMRERERWeaexrvh0Jkj7Gyi9ZCZ2evI3jOa6PoEBcdLJC5ioccTPdWdTYOHklHI9+5Arr5l6MFnMz4u4JswapT3vhyIiIiIyDoXNd4Nhs4cfokMWg2ZqaarjMueXoY0PXU8BlxPfGMGgbsfQdmrPhwclZd1XLpQG+/eN0c4eAr4xVbDaiosfLZuHFcUReDpC45nJyIiInIxVzXey0NnnqNY+a/2+T7QasgMUBnLfhGJZ6cRT93E+r1Hx2PA64xdQnzpCTK3L1Ymal5EAgqKLceHD5jVz0ZEREREJ4IL1nnXk7CwJGN77zqCs5UhM6nWvdPqhx8A72+1mRxa/rbRxMQWsoqF3u6eG8X4GSCjHQGz5vmx+tm6cVxN04AzF1o/KBERERHRQLmr5x3loTPpnazFITNmw0BeoNAwtKT47Alym19C3TuCdng08OEhvomzBqvrHEGZXoayV/631c9mh/GqPkfY2XzSo7X0iYiIiKhbXNd4x+wFRO7eh2JlyEylJzl9u7bMoba3gej0C0wu1acMKltIntnH3O0bCEdvIKxbN11xPLHVOfHKTSTxAcJrtXXTtbUbiD0QMT4L2Plsx2l3LKzBPnu5fNzj9dqPoK7dqKxA44a3EkRERERkxn2Nd0hYWNpE7L02q8xUVBvlvkpjPLwDrNy7hHEAea22co0q30Bh/g5K9+4ge+9Oed3yyrrpscY14ftiFPK9LYSefVTL++YMdh/XvjDK6mcDgOBVBZGncjmtyZrtdcdF9bgXkXg2g6LhqjZERERE5CZCqVQq9eVAgoDSy0f9OFSzww1I554jrv8m1WNZREc+wuRj3RKNRH0mjEyhT1WRukQQBMbMYxgzd2N83IcxcR9BENzY894DY99G6PwmEnLDsJLDIyjyR0gvvc2GOxERERG53slovOuGihyPdR+ZghC9gcLE2+5eLpKIiIiIqOJkDJshcjkOm/Eevk72HsbM3Rgf92FM3OfkDJshIiIiIhoCbLwTEREREXkEG+9ERERERB7BxjsRERERkUf0dcIqERERERE5941+HoyrzRAZ42oz3sNVGLyHMXM3xsd9GBP34WozREREREQewsY7EREREZFHsPFOREREROQRbLwTEREREXkEG+/kKqp8C+phnw96mEVUzvb5oERERET2sfFOrqGtLSMxcRnBsT4feEzCysR9RPfsbHQEZfoW1F7liYiIiMjAgBvvWURHpiCMLENp09uqylMQRqYgrR3V/V5bW7a0/cl0BFVehjRSLjthZAqSvAGtw71qa8sQut1TfbiB8OYM1q+Mdne/FolXLmPyto3G+N4nyJy5gGD1/4cbkEbYmCciIqLeckHP+yIiS0Dm86MWabLYvltO10ScQWRpBuO9yp6rHEGZnrLYQ3wEZfoi5vA21l8+QunlI5RebiGOffiaGpl29tsb6of78F+7BHFgORiFfA2Ys/hQou5oCF2VepwnaqYBkgBISutkahQQhMqPBChWH1k1ICrVtpWi6PhplyxoKPdom/jWbaqWzwnGrIc6iA/rVI8wJq6iKbp7jlB//7Fcthbvb3BF413D5LyI3OaX5p9v7z7SSxewYPAncfYSUsql/g+1cLu9TxDDuygqkq5BPIqgchPJ85uWG6l9cbiBxNMZrMwOOB+zFxC5e79973klv/M85/pIA5QoIISBUKR1UjUKzAEoloBSCSjGgUwY7QOrAZIPQLy8XakExAH47Fx8yb5KuU9Wy70ITGYs3cCgKYBvDogXGbOe6SA+rFM9wpi4UiBZK9Pjnyza90rauL9VuKDxDmDsAiIP9rFjMvRF3dlEYOJUf/PkSHmYiuCC4ROapgFnThmcM6OQU1soKu7pNdY+3wcWvz3AXvcqCQtLm9hu8wZC+3zQbwlOoiJQmASKWbR+zaYCc2lgN1W7YIpBIJtFbYyT2aarAJJASpcwmAIiOWCHd7WeqZa7XC13EZDXAcTaP3DtZIDILhDU1UbGrLs6iQ/rVG8wJkPG6v2txh2Nd0hYWHpiMnQmi+27ZxF6w2QstNFY48MNSNMb0HAEde3W8ZhvSc5ae7A8zEKZXj4eJy5Mm6yAcriB6LRuPPn0DWxP3ETp5fX6sdAW86Lp/i6MLCO6pyuPvVsQRi4i9gBIf7eSpkXvuSiKgFkv8thoreHZdr/6smjIU5cUnz2BXzQb634ERV7ubMy+1XgCCM4vIr3T6q1EFqubrd4S6PPbm/I6mYJASm7fg6Ful3s/2jXUjRzkgdC88d8KRQc7JEsO8oC/8Y4lAn4A2xa6QSZ9Br8LdCNnBHQWH9ap3mBM3KdYMIiJVRbvbzouabyXG02GQ2f27iN93tkQhR35BrbFy8i+qnfkeAAAG9xJREFUfITSYwX+pzLCa+0aU1lEz8nILL6NYmWsePEaMHfO4AHh3D4mr23VxpOfeYL0sxfO8rJ3C77N04g/roxPfzyD/Hcv1sahz15H6eUWkueByK8raVr1ns9eQASbmJveaL30Ysv9HkGZ1pfFTSxon2D1WZsirHweownGzY5w8PQsJg3jWx63n5moHn8L8Yl9+KbtNOAtxlPv6QvT/WtrHyFv+pZAQ0L+BONX7xjHkHrP8KZmkZwF5MbIakAewIKTpwGypJAzb4DnD1pvOx8CMjsNv9SADIB5vhvrik7iwzrVG4zJieeaxjtmjYfOaJqGgJMhFQ8+QGH+DlKzlR7dMQkri2eRM2lcH9u7j/z5d7F+pTZWXJy9jOR5DQe6vGmf7yO39Dbk6v4xiqCiGI+ZtpAXdWcTgcVv18buj13C+vtnkdec9txKSL3cQvLMPubOVXqB5TYN+UaVcfO1shhF8Mp1LOCJpc0D58/C7yDnrY9/E0mYD7Fq3oe1eB4bOw3zPrsj7GyKiLdYESd09XpdDLO/XkT6ducr/JBF1ZuapugmMUqA6jACShiAw558sqDSaBg3uMKPW7h6iDIQL5Qn3KlaefJqdBVYtzLOlNrrMD5GWKc6xJi410HfJgK7p/FuOHTmCDubMB8y09IiFpxMgJy9juw9o/HMT1BwvBxl+7z4Js42vXkQr9xBtqOlE0chK+Ve4OKvZzCJSkPeYs919YGisSx8E2fbbzx7Hdl7d5DqIP/Gxx+FfO8OZKtvYroZz71PkFm83OL6JmK8MV8mD6XUQ4VVYBVAtjJhaDcEzIXtX0QVCYj5gazci1xStwRXAH8emPOVJ69ictA5IjOsU+7DmHRPugCsZGuTiEN5wBftyaFc1Hg3GDpz+CUyGMCqHoeV8enTy5Cmp47HhOuJb8wgcPcjKMdjmo+gyjLSSxccPbyKV24ieWYfvpEpCNPLiK5loXWxwSfOXqo05LeQxAcWhp4c4eApWoxF7zVrxy+v8z9V99M0TMVCPGtpnyNnkh/ltubwQZLaUqTmJbaczvrOT5bHD1YFZSAJYNXGDhUJyPiBYsphJuhYN2PbSFMBwQcgVF5dqLgL5DNcOcOOXsan8TisU9YwJu7TLibBFFDSLZRQnUQcSNtYqtg6VzXey72Uz1GdMjGQVUgONyCdu4jEs9OIp25i/d6j4zHhdcYuIb70BJnbFyuNxotIQOlgFZfR48Z18drbmHz2EcLnrIwZd3Cc1LsI6Mp5sEYxfsb5Ww3xSmV8ue4npX/LYTWeekar9Bx+icyZt633+JM9crZ5iS2nr3CNJmON+9uPBa1SJCATArIpDr3ohpaxrUyyOzC4uR3k2+xYA8JzQLJYm+xVXVkoCSBsZ93rE6xn8dFhnbKHMXEfR/coEQgFejIR2F2N97ql+joZMuOc+uEHwPtbyCqXENSvytJAW1tGYmIL2Xu1RmO2bk11p0YhzkqQlTvIPn4XeO8TRw/c2t5Gm2+dNRnzrcvH+Bl0MObeOt/EWYMVXrpzfKvxPE6/s4nIfPMDmPrhPvwGv2/r8AVsXE6pU5MdXijVKF8h95tZzAo581UxAABFIBcwnpg6HwJyha5l8URzHJ8K1qnuY0xOPJc13nVL9Q1kyIzZUI0XKDQMsyg+e4Lc5pdQ946gHR51+Ia2vD58N1clKe58gNiHJkseHj5HzsIKPmYrABWfWZuwapX4xgwCBiu8GM0DKK9AswzF4rfMWo1nWfmbfJvnJ2SxbelLpJofiLTP9y2VNXXJfAhIbzf/fjttYRUaFZjL8xVyvxm+FWkxKe+YDwjkYPgKsVgAAhz73hWO4wOwTvUIY+I+itE3eWtAJteTVXxc13ivfsulMpAv7in39upXB9H2NhCdfoHJpfqUQaWyksvtGwhHbyCsW0O8dY+38XF9E0D6u/r1x4+gfvgBcnVj6Cv522m/Xn155Ru5aT15be8WpO9uIlL3JUMm+529XB4ff7yP8tjxxFMLE1b3ymPMo1aG/YxdQvzMPlYbGuTilZtI4gOE12r50tZuIPZAxLilycjW41nO833kDeYsaGsfAVa+lOm8iMKHtRhqexsIv/ekoaypp0QZiKSBqO59lRoF0gFgRRdZRWr+2molASTX+Qq534IrAGKAUo2ZBkQNVr9oipkIxCPAXMNqQlrli7ri7FXsCsfxAetUrzAm7jPuB2Jh3bXIRkwccF/jvTJ0JvZe/4fMALVGua/SGA/vACv3LmEc9UM4VPkGCvN3ULp3B9l7d8rrt1fWEI+1WkPchHjlDorvA4lzUy3H0AevKog8lSsTW1tNOi0vFRnHR7UHi5EphG8DoV9v1Y8LN93vKOR7W0jio0p5lNeqX1+09plyD55YHjISvDqDfNOSiuXjh559VIvH5gx2H1+3PBzaajzLE1KBeNOchSxWN0VrKxeduYCUcgHb0fKxfN/dh9+grMkJrbb041wayMVqy0A2VoJUEZhM1CYVJVD+5rq6m5UfCOiXVav0kMR8zZOSBKH+YYC6TASyRaBQjVllAmrTK/3GmKE8SWzXDyR0cQsngN0il73rGqfxYZ3qHcbEdYIpoBjSXYtsXMfs3N8qhFKpVOrBx2g+kCCg9PJRPw7Ve4cbkM49R/ylUSMyi+jIR5h8bGM5QwJQnkcQxs0Ol8d0fuxV8U5zQ3vvFiTtcs/zJIxMoU9VkbpEEATGzGMYM3djfNyHMXEfQRDc2PPuAWPfRuj8JhINQ1JweARF/gjpJa5K4oR45Q7izz6x90VS3XC4gdVnbxv3kM9eH8jDBBEREZER9rw7dgRFvoHM3Se1dcHPn0Vk8W2sXOnGqjN0krDn3XvYI+U9jJm7MT7uw5i4jyAIbLwTuQEb797Dm5r3MGbuxvi4D2PiPhw2Q0RERETkIWy8ExERERF5BBvvREREREQewcY7EREREZFH9HXCKhEREREROfeNfh6Mq80QGeNqM97DVRi8RxAE/Md2YtDZIBN/sRBnfFyGMXGfv1iIc9gMEREREZFXsPFOREREROQRbLwTEREREXkEG+9ERERERB7Bxju5hirfgno4gAMfZhGVswM4MBEREZE9bLyTK2hry0hMXEZwbAAHH5OwMnEf0T07Gx1Bmb4FtVd5IiIiIjLQ16Uim2URHZGRxlkkH9+B3KLhpspTmLsLBN7fQvbKaP+yOFSOoMo3kLj7BLnKbwJL72JduQSxg71qa8vwPXsbJUVytoPDDYQ3Z7B+r31cOz6WCfHKZUxO34I6ex1BKxvsfYLMmQs47q8/3IB07jniLy1uT0TkxB8P8POt3+D/2jvCg+NfjuL87P+C9y4GMPs/t9789/+WwtmPjir/ew2b2/8Zs2aJf/uv+It/fFj+98QcnvxLAP/JUib/HT//h/+Cf3jWIsns3+I/roxb2pvb/f6PB0gmf4M7z450vx3F+Yn/Ce/F/nN3Y+Igfc2/Y2/t/8T7Xx/hwXFsRnF+9jv45ZVxi7H1BvsxsVc2v/9tDsnP/nv9/idGsfzm/44P/+p/tJHTynGb6vN38MuL4/hPJueOC3reFxFZAjKfH7VIk8X23XI60juCMj1lscf4CMr0Rczhbay/fITSy0covdxCHPvwjTT2INvZb+fUD/fhv9bZA0TnRiFfA+YsDp9RdzSErnb3AYK6QFMgCQKEph8JimZpB1CiUm07KWpxOzKnQZEECJKC5qKs/M0wZgKEqIV3W5qKqH4fwxyzP+bw1+/8Cv9Qd6MHgCM82NvF4jv/ipaX7d/+q67R19rvf/uv+Otqw922P+FZq4b7MPntv+LsO79qaCQCwBEePHuIxXfiuPrbNttbjImj9McOcHXhv2BxT984reRz71c4+w9tzh0vsR0Te2Xz+39L4ew/7jbv/9kR7vzjf8FfrB1YzKjuuI353PsVzraozy5ovGuYnBeR2/zS4MJesXcf6aULWOhntobN3ieI4V0UFUnXSB5FULmJ5PlNy43WrjvcQOLpDFasdRv01uwFRO7ebz8UppLn+UEM8aH2AkkUSyWU6n6ykNs+HWpQJB8yiB9vX4wDMZ/Vhj/V06AqUUhCGAhFTNKIkLONsSqhVCoiGQAiC23eY2kKJN8cEC8ebzu8Mft3/Dy523CTb/QQ7//bvxv/6Y85S43x3//xAFf/IY6z//iwzbFa+OOfkHe6racc4KqFMr3zWQ6/N/qDxZg4Tq+zt/Yr3GmV4FmLc8dT7MfEXtkcINnu4WnvV/hrC2XZ9rh4iEWTBwEXNN4BjF1A5ME+dkwmK6o7mwhMnOpvnrriCKq8DKGpZ7v/NE0Dzpwy6N0ehZzaQrHLw1Cs0j7fBxa/PeBe9yoJC0ub2G7T/aB97oY3BdR16ipiSGI9FTyOrRhMYTeSQ2Zn6FqCfVDEdmES8WIWst3REZVYrLRru+9kkIvsIhWs1cahjdkf/4RnGMX5ifLwwvNv/z3+YzuB//jF32JZl+zB0Z8MNj7A1XfaNfwrPYrv/Ap3Ou01/+P/VzvWxByebCfKedX/DMOQmT/+CZjQ/X/2byuf9e/xL/rfP/vvUP/YuLG1mDhPX7/t/62/r1Vj8ou/xbIunw++/J3xQ4aX2I6JzbL57f+ra3CPYvn/qNTD7b/Hv8wapDf17yh+rc/nnHE+v/6T4X7c0XiHhIWlJyZDZ7LYvnsWoTdajIc+zEKZXoYwMlX+mW5ctaQ8DERaq9+/Kjf/ztn+q+k2EJ2eOk4nTd/A9sRNlPTjoA83IE1vQMP/394ZhbSVrXv8l/fShzIHjhy8w2gS51qvYGnDkPQw3KHdQ+KUsZ45gg+tqBfDteCWKR2LSKVDkNrSki3UEhkdbB8Eb4le7tUwaSkMpwmDLVPwpoJmO8NtOPTAhT6Uefc+7MTsJDvJ3ho1OusHPhj3XmtlfTvmW9/6vv9KEZkcw5O5Vo4V7Dyour/bjvfgj+rGGh3Ddvwigysw9VX6mhLRc7vdDsWiyvW1WUe0bLv6ucgb0w5Irq/SZC9m2wr1ZdZ+gLe1namlUrsQMe6ES+0UpFDkys2PwCLJNeJNzh0trCIbCdwdrYb3xteSux3Z7xAvoZCM17IxVJTAFH0jsik7uhsdBa85Gt1WO61+apxMjPt5Nu7nt8UAzy5k8mpzo9yu2g/ybnzH/aFshK+n14fLRHcuyZfjvFjhl7//Q/fb/xGZDHGsbUT7GfpP7v98FCK8QI2bifHcBYmWG30C71n999ofceTkLlu1yc5suE3eTojr7MfaOGucDOrHabjIOGRYtUkF5ybnP1HZ60/g+FD36/8WuezDDwxrEarEedecJsPUmeiPTLlKpSjE8LfIzLf3kkzncie/AV+LPtpdi/xNO/Hrj7KvRcfwfd/OSNniVzPtky5YfELjNwvZfPKTq0ytvzFsdUkeZdF+idj7l2y9Umh6LdM1meucO8IfMfIqnZ/+6jyJry5m89ClYbbeLxB0Qd/j9DWloufSp/QRxndurrQcY8l2Uyjn9HNxkzb1EXfyozTRMW1BUnZhlGLjdTONhrY12VdZTNpPz+s3RVO41MlpEkV3ClQC8iOcAzPGNhNUNV45Rqwgt0ZlI2EifUNQOUxG3QHsrR0wv5T3eVVZmoeO1qO+N7bBQNsIx/TR2AYf313ILZaLTmYLR129XzNxunSrLslH+EGAZ/0fs0PfHTWl+9+//oKhaN7v394rnQd+2Hmbl1rR8Iec7wyrNrF6fTma/pR9Rur+9MfdNXZYKGOTDGXnpuYPuoVTOse9bYRjbfdot/hdL31yJtvW+jLN6XaGdAWz4xeNd6iqxnlHMk6dUVUVd6m0iuiPJFxXme3P5nLbpUsEXSob+rakYZa7M7ndKZTbYfoem1AGMdm++sMT4t29yFJmMVCLV1GMc6hX7rLWOkMoc229h2vtzcR1jn5kKYy7/WxWOrG+k9lbzSTUnUZyPYTeLxA8+QRfSzoqLJdx5PNJ581n56IWb/8wbawWXOp2NdO0w5Fa7at0Oyafjwz1H1E8ZpdiKWwvueDrGBjOsVnscTtTt+eK13MI9oCNgqLTyA4NoCpdph1JQWWILJqPumOXmR1Zo8vjR4mooEZQ/Hdg1kyNwyGnIK+8FtfZ3Kj7L/8V2nYoXNJlXbTemLoLfp71l1esqQQz3x6hAkkdv/ysFRXrUyvGB7MqPVZtYvV6QSHlbGKJGjff9Rr7AJmUNtOc+rJoWwCu3r9ypXrVZjIYpc6kWApTOmVGGib21Cj/eJW1POdMc6ZlPPIog1w1VyRpoX3ztNNWpm9HQ3PBToS9f2aXMpm1yIoWFU4+Pk8jaUf+nDnnMrOgyJ8LR0Nz7gvSMLGnM4R2MVbTfZWjkvaLPmK+/VKJBZ8dZ/4uQpFFqWAPmVrDeS22Xfi43JHA5/BbrjtRFQ+OwSaWYyYdScHuURUCU31Y2eiwe68x0pRg0OfA5vAxTyNHIJt6B6RYmX5I81C6EO9tnH/LRBqlyzzbxxxz+yeXCd/w0SOdYVyXExzO+d57wX8fqej7O6KTmgqJXvJv/IE/64BZtckB2vBoYMImO6Dugp/VGz56GrQaFFeDlvv+3Vlr7UQnQyWVg1am7xUtfD1gnfdcvK3t+G4/R+1PO1ubz5nnPLPlVD02U0R+eEQgrAKrxNNWKtQ38HDtVjOO6xB8ZaHg0ET79s/P474+jdL6T+noe4qILDPVrRAy24++vf6bBNdHcRy/C65m+tp7ufa5B3uFFE7sUiey1ImsaBKSjnOQNHRyM6TYeA1NrfuhsW++L3WyB8f13Gh83+OXhPRfEqafD2DzV+J8ZDgm5bZKR0icMVDVeENsbelfsOOVZwnOOwgo1/CaDMeqigfHfBPLyZDQ7d9H1KV54u4OCrPYi90Qwe/wkegLspyM4SWCvyuAzzFPMHnEo+81bp4tavuEObrf68sEf3bzxU86hyX6kGOGYe4XtLe9qLjmet0pJ3U4kU7pXz2B9MkZiO5UfrKa2WBgKLfQ1yVdLtAHjy5Ys0mYvbFh4u/vIK1FnlufcJQwZ5N8zM5N3Sk3E6dy9+mjP1nIjHgb55YunczVe5nvLjip4x3RyWwKzsr0f3D/dOFio4oi76SjlL+SKQ0zpUSyOYen5SKB9Y8YCd1k9unL7ZxtI5Lrq0Cx4thdtF/fyUj3KvO3L6aLFS8SQNmFiksmSr5A8pteGten6WoxWWBrtZ/QVdy6ed8/anGe3M0OhrYbsbWtW6/95Dru1p4PwFiVZ/M58yd7Sx4kJqhW7LR2uE0XnWqOewfJWGgHxZaC3ZBcixctGi5ERenykQgmiWUKY+1eQrEYySAMdhnpyh9i3sb5bCjEZ0Na4Wc2IvfugN7nO+6nx6L9pNNgMuNsy4xzI62W8Y7oT3rHvZaGfUjP2Xs2GGjTO4m1jN/4mmcHcuhREZvUfMxfcpRT/kb0LfB2g8hzvU+RX1h7WLFgE8tzs8H9oRCfDaWLsCc3tne6buWo1vwL3hooapNdUlWRdy11RmYxOoxXSqfMlIl0RibugtlTVzfnCHzfTPCWncHrj4j0l895N9u+OtlDoGGBmFLpyGwtdqkWWfIgD8zhaTE37oLxRedYqu8s4XxqOeDeon+vxXkS5tUUSJV7j46GZqaWYoQk/SKncn1Zej7Q0nX6WocN2nlCU2tpRVZDNt+QABqt3yk4CCJ+LVVmS6TK7D8RFqegadnszCdZi7vpmC283t7agXtwjSQcHTvWfMxfWN4uZluZvsexaaMLz/DFKeCnfRybnsw407+uTD+k2Wic0r/uKnWhWijU6k4x9O297fefoedGgC/2b1h5aEorQ5lDhdZf0P7vBjsg0j+bPKm1urFik4lTVufGiePDh6xkPPDoQ5oNvPFt1Zpi1HxAE2zvrBT9nBRZUFVX5B2dVF86Zab0QTjp9IoCqcE3rBWIoaZQ/Hfh1k3kfn3xamXaT66vEg8/JxJNoW6mdhkJ0fThK6lSkly6y+BEkfe7+Svxkoo+GsUUgbTdjJ1h//w8bgN1l8r0ZeX5gMxJvoX1CDEWTR0kVVgEq/7wxNTcCipDRPHgKTidR2VpPm5CMSaC35cgKFJlDgZ1gwRuDJQfi+Cg0R3HcEMluUbc3Wg+/eZQcIIrg+UlAntufIkESP0G2uqLAX57oG/jDOGKa66bGecZwkchfzs/2loGqzappA3rLvw1Vz+8gN+nTcD63EgXyzzfpgqLnQyWKFbN4Or9s+GCquqc98wpl4qpw3u0CK1ezUONzuE/94bG7twr1cnRtHqJNlnegau4v59GKZmyYb59r5JWcrk9Spd/lC6dpnjpPoz7dTTA1Fd6PfIUkYm7xLs/1TkW6fEtFWrE55Mt1s29Vo2O4fkqTF/OoUNF2pUuEeQuju02NK36wOu8ItLoGJ5zPfjNpPjUdzJy8gl38j9sZvsqiXn7aeP+kUTO/KbvmZwGM4cyueysTWRtpkbn6Lq+mje3gr3E62wiPtiFf1teRiXiL1SMURUPNlvuKZyqEiARnD3aedLVTHKNOE04i8x/oc3syCN9TPk8mtLM9oUR/D4LijWHiRo3zx5cZlyqzXMeanE1nCH8IMDEqSL37ielxildZnXxyyMR4f3l5f/s/BTafecEV8a/JixsYoDFudE93zmkC1fNLob1ha+5aJ/n8RtfF10EVFnaDGRSZ3zXmwm+Kr8q8SoLBOV0YSfg7r7K7NNOkvJdXdpFjDv5Rar1nczeeoLDP0driUJNc+1DRB5lrXWGLSX3fjU6hqNlDOd7a6ku9v4ZkozR1XIaX/o1d3dhDr13QKHPL+M4Driulig61aQiI/IoXcdl4pk2Xe10PF5AzvvUGrdbi/x0AeRRHMdloJm+xzeZbR/Fkae/Hl9ZhXZz79U7cJ6Afw5Vyl1AmO2rZNsm7acVpMLI0/wahRh3wnbanpro7OSnhBTwnzuNb4X0mBdyc/AFe4s3xFZSwd/lwJb+4Lj7giQLFGOacOfUGmnR+XjcgW3QoN2+ZbZCIh5vDRXF42Awnn3FYRsE3IbFpOpGAkoWq+bbDPCGSC776Qo4GNz+R+mmbznJkTVXjZMr/U6u9O/0/myha2lOcGU8wJWd/n234zwE1F3w89uFCjRk2iblri9vM6nfjyRsYoDFuTH9fJe2SabwdcL8QAGwbW3lajPsFTabja33L/ejq/1ncw5Py6+MGDroMfzHp2l8NSOKHUugTvbQxc1dSmHurv879plCRzs6hke9tOfjsh0/zT59FAUVwmazCZsdMmw2G78tBg56GIIiHGsbEfapMoRNqo9jbSNVmDZzGKk/S4crTCAvJYXNFIo8zVS3UCkph71/hpH1R9YOjaoUm3PcWe81jpBLwwe2oBAIBAKBQCDIpwrTZg4j2RQPfUpKRp892b9TucjfF16lUOVlX6jvJKSUv0wgEAgEAoHgoBHOe8XQdNll4QQKBAKBQCAQCPYIkTYjEAgEAoFAIBAcEoTzLhAIBAKBQCAQHBKE8y4QCAQCgUAgEBwShPMuEAgEAoFAIBAcEvZV510gEAgEAoFAIBDsnP8HNuDRPGvIfxMAAAAASUVORK5CYII="}}},{"cell_type":"markdown","source":"You can see, for example, D49's max is far from Mean by over std x 300, and B_6, D_50 are far from Mean by over std x 200. Let's remove the records which include them.\n\nD_49は標準偏差の300倍以上、B_6・D_50などは200倍以上、平均から乖離していることが分かります。これら極端な外れ値を含むレコードを除去してみます。","metadata":{}},{"cell_type":"code","source":"all_cols = train_df.columns\nnon_use_cols = ['S_2','B_30','B_38','D_114','D_116','D_117','D_120','D_126','D_63','D_64','D_66','D_68', 'target']\nfeature_cols = [col for col in all_cols if col not in non_use_cols]","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:47:20.420658Z","iopub.execute_input":"2022-07-02T01:47:20.421288Z","iopub.status.idle":"2022-07-02T01:47:20.426062Z","shell.execute_reply.started":"2022-07-02T01:47:20.421254Z","shell.execute_reply":"2022-07-02T01:47:20.425326Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"outlier_list = []\noutlier_col = []\n\nfor col in feature_cols :\n    \n    temp_df = train_df[(train_df[col] > train_df[col].mean() + train_df[col].std() * 200) |\n                       (train_df[col] < train_df[col].mean() - train_df[col].std() * 200) ]\n    if len(temp_df) >0 and len(temp_df) <6 : \n        outliers = temp_df.index.to_list()\n        outlier_list.extend(outliers)\n        outlier_col.append(col)\n        print(col, len(temp_df))\n    \noutlier_list = list(set(outlier_list))","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:47:20.427258Z","iopub.execute_input":"2022-07-02T01:47:20.428337Z","iopub.status.idle":"2022-07-02T01:47:24.106774Z","shell.execute_reply.started":"2022-07-02T01:47:20.428284Z","shell.execute_reply":"2022-07-02T01:47:24.105277Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.drop(outlier_list, inplace = True)\ntrain_df","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:47:24.108707Z","iopub.execute_input":"2022-07-02T01:47:24.109114Z","iopub.status.idle":"2022-07-02T01:47:24.942435Z","shell.execute_reply.started":"2022-07-02T01:47:24.109080Z","shell.execute_reply":"2022-07-02T01:47:24.940944Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"If you run LGBM using the above train data, Public score will show **0.785**.\n\nこれを使って上記のLGBMを実行すると、Public Scoreは**0.785**に改善します。","metadata":{}},{"cell_type":"code","source":"y = train_df['target'].copy()\nx = train_df[feature_cols]\n\n\"\"\"\nmodel_lgbm = lgbm.LGBMClassifier(n_estimators = 300)\ndel train_df\ndel train_labels\nmodel_lgbm.fit(x, y)\n\"\"\"","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:47:24.946824Z","iopub.execute_input":"2022-07-02T01:47:24.948160Z","iopub.status.idle":"2022-07-02T01:47:25.194598Z","shell.execute_reply.started":"2022-07-02T01:47:24.948102Z","shell.execute_reply":"2022-07-02T01:47:25.193084Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# (4) Cross validation (KFold = 3) [Public Score = 0.786]","metadata":{}},{"cell_type":"markdown","source":"So far, we used simple LGBM baseline. Now let's change to the LGBM model which uses Cross Validation with KFold=3.  \nThen, Public score is improved to **0.786**.  \n\nこれまで、BaselineのシンプルなLGBMを使ってきましたが、ここで、Trainデータを3分割してCross Validationを行うモデルに変えてみます。  \nPublic scoreは**0.786**へと改善しました。","metadata":{}},{"cell_type":"markdown","source":"# (5) Tuning parameters [Public Score = 0.787]\n\nThen, tried to tune hyperparameters and improved Public score to **0.787**.\n\nさらに、Optunaを使ってパラメーターを調整し、Public Scoreを**0.787**に上げました。","metadata":{}},{"cell_type":"code","source":"from sklearn.model_selection import KFold\nfrom sklearn.metrics import accuracy_score\n\nkf = KFold(n_splits = 3)\nmodels = []\nlgbm_params ={\"objective\":\"binary\",\n              'num_leaves': 69,\n              'max_bin': 312,\n              'feature_fraction': 0.5193052325515839,\n              'bagging_fraction': 0.597903764208054,\n              'bagging_freq': 0,\n              'min_data_in_leaf': 21,\n              \"random_seed\":1234}\n\nfor train_index, val_index in kf.split(x):\n    X_train = x.iloc[train_index]\n    X_valid = x.iloc[val_index]\n    Y_train = y.iloc[train_index]\n    Y_valid = y.iloc[val_index]\n    \n    lgbm_train = lgbm.Dataset(X_train, Y_train)\n    lgbm_eval = lgbm.Dataset(X_valid, Y_valid, reference=lgbm_train)\n    \n    model_lgbm = lgbm.train(lgbm_params,\n                           lgbm_train,\n                           valid_sets = lgbm_eval,\n                           num_boost_round = 300,\n                           early_stopping_rounds = 20,\n                           verbose_eval = 10,\n                           )\n    y_pred = model_lgbm.predict(X_valid, num_iteration = model_lgbm.best_iteration)\n        \n    print (accuracy_score(Y_valid, np.round(y_pred)))\n    \n    models.append(model_lgbm)","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:47:25.196256Z","iopub.execute_input":"2022-07-02T01:47:25.196676Z","iopub.status.idle":"2022-07-02T01:50:26.477215Z","shell.execute_reply.started":"2022-07-02T01:47:25.196643Z","shell.execute_reply":"2022-07-02T01:50:26.475631Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"del train_df\ndel train_labels\ndel x","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:50:26.479859Z","iopub.execute_input":"2022-07-02T01:50:26.480284Z","iopub.status.idle":"2022-07-02T01:50:26.497434Z","shell.execute_reply.started":"2022-07-02T01:50:26.480247Z","shell.execute_reply":"2022-07-02T01:50:26.496160Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\ntest_df = pd.read_parquet('../input/amex-data-integer-dtypes-parquet-format/test.parquet').groupby('customer_ID').tail(1).set_index('customer_ID', drop=True).sort_index()\ntest_df = test_df[feature_cols]","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:50:26.499797Z","iopub.execute_input":"2022-07-02T01:50:26.500244Z","iopub.status.idle":"2022-07-02T01:51:15.192745Z","shell.execute_reply.started":"2022-07-02T01:50:26.500204Z","shell.execute_reply":"2022-07-02T01:51:15.191446Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = []\n\nfor model in models:\n    pred = model.predict(test_df)\n    preds.append(pred)\n    \npreds_array = np.array(preds)\npreds_mean = np.mean(preds_array, axis =0)\n\npreds_mean","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:51:15.194728Z","iopub.execute_input":"2022-07-02T01:51:15.195586Z","iopub.status.idle":"2022-07-02T01:51:37.246533Z","shell.execute_reply.started":"2022-07-02T01:51:15.195535Z","shell.execute_reply":"2022-07-02T01:51:37.244954Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.read_csv('../input/amex-default-prediction/sample_submission.csv')\nsub[\"prediction\"] = preds_mean\nsub.to_csv('submission.csv', index=False)\nsub.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-02T01:51:37.248371Z","iopub.execute_input":"2022-07-02T01:51:37.249010Z","iopub.status.idle":"2022-07-02T01:51:42.486736Z","shell.execute_reply.started":"2022-07-02T01:51:37.248961Z","shell.execute_reply":"2022-07-02T01:51:42.485120Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}