Created
February 23, 2026 23:35
-
-
Save JackBosco/a6932b3de12a9398ac47577a536fa271 to your computer and use it in GitHub Desktop.
leetcode_fun.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "nbformat": 4, | |
| "nbformat_minor": 0, | |
| "metadata": { | |
| "colab": { | |
| "provenance": [], | |
| "authorship_tag": "ABX9TyNiqReiYXezCza6zklXCqtc", | |
| "include_colab_link": true | |
| }, | |
| "kernelspec": { | |
| "name": "python3", | |
| "display_name": "Python 3" | |
| }, | |
| "language_info": { | |
| "name": "python" | |
| } | |
| }, | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "view-in-github", | |
| "colab_type": "text" | |
| }, | |
| "source": [ | |
| "<a href=\"https://colab.research.google.com/gist/JackBosco/a6932b3de12a9398ac47577a536fa271/leetcode_fun.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "---\n", | |
| "\n", | |
| "# 1. Fetch from GraphQL\n", | |
| "\n", | |
| "---" | |
| ], | |
| "metadata": { | |
| "id": "23XLmh-MjzIs" | |
| } | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Fetch LeetCode contest rating histogram + compute descriptive stats + plot\n", | |
| "\n", | |
| "Use inspect element to get this info and follow the following steps to get the necessary authentication keys:\n", | |
| "> In DevTools -> Application -> Cookies -> leetcode.com, copy:\n", | |
| ">\n", | |
| "> - csrftoken\n", | |
| "> - LEETCODE_SESSION\n", | |
| "\n", | |
| "Then, in the collab menu on the left, follow these steps to add these keys to your notebook instance (that way its safe to share the code):\n", | |
| "\n", | |
| "> 1. click the key icon (secrets)\n", | |
| "> 2. add keys `csrftoken` and `LEETCODE_SESSION` with the corresponding values from the previous step\n", | |
| "> 3. enable notebook access by toggling the switch" | |
| ], | |
| "metadata": { | |
| "id": "tfT32uyqkPGm" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "import os\n", | |
| "import requests\n", | |
| "import numpy as np\n", | |
| "import pandas as pd\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "from scipy import stats\n", | |
| "\n", | |
| "# Recommended: copy your session cookies from the browser.\n", | |
| "# In DevTools -> Application -> Cookies -> leetcode.com, copy:\n", | |
| "# - csrftoken\n", | |
| "# - LEETCODE_SESSION\n", | |
| "#\n", | |
| "# Then set them as environment variables before running:\n", | |
| "# export LEETCODE_CSRF=\"...\"\n", | |
| "# export LEETCODE_SESSION=\"...\"\n", | |
| "#\n", | |
| "LEETCODE_CSRF = os.getenv(\"csrftoken\", \"\")\n", | |
| "LEETCODE_SESSION = os.getenv(\"LEETCODE_SESSION\", \"\")\n", | |
| "\n", | |
| "url = \"https://leetcode.com/graphql/\" # if your Network tab shows a different path, use that exact URL\n", | |
| "payload = {\n", | |
| " \"operationName\": \"contestRatingHistogram\",\n", | |
| " \"variables\": {},\n", | |
| " \"query\": \"\"\"\n", | |
| " query contestRatingHistogram {\n", | |
| " contestRatingHistogram {\n", | |
| " userCount\n", | |
| " ratingStart\n", | |
| " ratingEnd\n", | |
| " topPercentage\n", | |
| " }\n", | |
| " }\n", | |
| " \"\"\",\n", | |
| "}\n", | |
| "\n", | |
| "headers = {\n", | |
| " \"content-type\": \"application/json\",\n", | |
| " \"referer\": \"https://leetcode.com/\",\n", | |
| "}\n", | |
| "cookies = {}\n", | |
| "if LEETCODE_CSRF:\n", | |
| " cookies[\"csrftoken\"] = LEETCODE_CSRF\n", | |
| " headers[\"x-csrftoken\"] = LEETCODE_CSRF\n", | |
| "if LEETCODE_SESSION:\n", | |
| " cookies[\"LEETCODE_SESSION\"] = LEETCODE_SESSION\n", | |
| "\n", | |
| "# If you don't want to fetch live (or don't have cookies), set use_live=False and paste the response JSON below.\n", | |
| "use_live = True\n", | |
| "\n", | |
| "if use_live:\n", | |
| " r = requests.post(url, json=payload, headers=headers, cookies=cookies, timeout=30)\n", | |
| " r.raise_for_status()\n", | |
| " data = r.json()\n", | |
| "else:\n", | |
| " data = {\n", | |
| " \"data\": {\n", | |
| " \"contestRatingHistogram\": [\n", | |
| " ... # paste raw JSON rows here\n", | |
| " ]\n", | |
| " }\n", | |
| " }" | |
| ], | |
| "metadata": { | |
| "id": "RtfAPn9WkVRl" | |
| }, | |
| "execution_count": 1, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### display data" | |
| ], | |
| "metadata": { | |
| "id": "faXo3FotlN-d" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "bins = data[\"data\"][\"contestRatingHistogram\"]\n", | |
| "df = pd.DataFrame(bins)\n", | |
| "df[\"width\"] = df[\"ratingEnd\"] - df[\"ratingStart\"]\n", | |
| "df[\"mid\"] = (df[\"ratingStart\"] + df[\"ratingEnd\"]) / 2.0\n", | |
| "N = int(df[\"userCount\"].sum())\n", | |
| "\n", | |
| "display(df)" | |
| ], | |
| "metadata": { | |
| "id": "sxW7tR33lBP_", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 771 | |
| }, | |
| "outputId": "bef7defb-043d-46b2-cc15-0c6fc9db8562" | |
| }, | |
| "execution_count": 2, | |
| "outputs": [ | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": [ | |
| " userCount ratingStart ratingEnd topPercentage width mid\n", | |
| "0 5236 0 1200 100.000000 1200 600.0\n", | |
| "1 5166 1200 1250 99.391213 50 1225.0\n", | |
| "2 12578 1250 1300 98.790565 50 1275.0\n", | |
| "3 30222 1300 1350 97.328128 50 1325.0\n", | |
| "4 70714 1350 1400 93.814232 50 1375.0\n", | |
| "5 198305 1400 1450 85.592352 50 1425.0\n", | |
| "6 158257 1450 1500 62.535535 50 1475.0\n", | |
| "7 106839 1500 1550 44.135077 50 1525.0\n", | |
| "8 72148 1550 1600 31.712963 50 1575.0\n", | |
| "9 50541 1600 1650 23.324353 50 1625.0\n", | |
| "10 36761 1650 1700 17.447978 50 1675.0\n", | |
| "11 27149 1700 1750 13.173796 50 1725.0\n", | |
| "12 20052 1750 1800 10.017196 50 1775.0\n", | |
| "13 14933 1800 1850 7.685761 50 1825.0\n", | |
| "14 13687 1850 1900 5.949509 50 1875.0\n", | |
| "15 9412 1900 1950 4.358129 50 1925.0\n", | |
| "16 6339 1950 2000 3.263800 50 1975.0\n", | |
| "17 5178 2000 2050 2.526768 50 2025.0\n", | |
| "18 3518 2050 2100 1.924725 50 2075.0\n", | |
| "19 2789 2100 2150 1.515689 50 2125.0\n", | |
| "20 2435 2150 2200 1.191413 50 2175.0\n", | |
| "21 1821 2200 2250 0.908297 50 2225.0\n", | |
| "22 5991 2250 9950 0.696570 7700 6100.0" | |
| ], | |
| "text/html": [ | |
| "\n", | |
| " <div id=\"df-a636b4a5-7359-4e79-820d-ebe02697dffd\" class=\"colab-df-container\">\n", | |
| " <div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>userCount</th>\n", | |
| " <th>ratingStart</th>\n", | |
| " <th>ratingEnd</th>\n", | |
| " <th>topPercentage</th>\n", | |
| " <th>width</th>\n", | |
| " <th>mid</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>5236</td>\n", | |
| " <td>0</td>\n", | |
| " <td>1200</td>\n", | |
| " <td>100.000000</td>\n", | |
| " <td>1200</td>\n", | |
| " <td>600.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>5166</td>\n", | |
| " <td>1200</td>\n", | |
| " <td>1250</td>\n", | |
| " <td>99.391213</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1225.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>12578</td>\n", | |
| " <td>1250</td>\n", | |
| " <td>1300</td>\n", | |
| " <td>98.790565</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1275.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>30222</td>\n", | |
| " <td>1300</td>\n", | |
| " <td>1350</td>\n", | |
| " <td>97.328128</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1325.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>70714</td>\n", | |
| " <td>1350</td>\n", | |
| " <td>1400</td>\n", | |
| " <td>93.814232</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1375.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>198305</td>\n", | |
| " <td>1400</td>\n", | |
| " <td>1450</td>\n", | |
| " <td>85.592352</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1425.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>158257</td>\n", | |
| " <td>1450</td>\n", | |
| " <td>1500</td>\n", | |
| " <td>62.535535</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1475.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>106839</td>\n", | |
| " <td>1500</td>\n", | |
| " <td>1550</td>\n", | |
| " <td>44.135077</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1525.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>8</th>\n", | |
| " <td>72148</td>\n", | |
| " <td>1550</td>\n", | |
| " <td>1600</td>\n", | |
| " <td>31.712963</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1575.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>9</th>\n", | |
| " <td>50541</td>\n", | |
| " <td>1600</td>\n", | |
| " <td>1650</td>\n", | |
| " <td>23.324353</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1625.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>10</th>\n", | |
| " <td>36761</td>\n", | |
| " <td>1650</td>\n", | |
| " <td>1700</td>\n", | |
| " <td>17.447978</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1675.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>11</th>\n", | |
| " <td>27149</td>\n", | |
| " <td>1700</td>\n", | |
| " <td>1750</td>\n", | |
| " <td>13.173796</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1725.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>12</th>\n", | |
| " <td>20052</td>\n", | |
| " <td>1750</td>\n", | |
| " <td>1800</td>\n", | |
| " <td>10.017196</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1775.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>13</th>\n", | |
| " <td>14933</td>\n", | |
| " <td>1800</td>\n", | |
| " <td>1850</td>\n", | |
| " <td>7.685761</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1825.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>14</th>\n", | |
| " <td>13687</td>\n", | |
| " <td>1850</td>\n", | |
| " <td>1900</td>\n", | |
| " <td>5.949509</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1875.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>15</th>\n", | |
| " <td>9412</td>\n", | |
| " <td>1900</td>\n", | |
| " <td>1950</td>\n", | |
| " <td>4.358129</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1925.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>16</th>\n", | |
| " <td>6339</td>\n", | |
| " <td>1950</td>\n", | |
| " <td>2000</td>\n", | |
| " <td>3.263800</td>\n", | |
| " <td>50</td>\n", | |
| " <td>1975.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>17</th>\n", | |
| " <td>5178</td>\n", | |
| " <td>2000</td>\n", | |
| " <td>2050</td>\n", | |
| " <td>2.526768</td>\n", | |
| " <td>50</td>\n", | |
| " <td>2025.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>18</th>\n", | |
| " <td>3518</td>\n", | |
| " <td>2050</td>\n", | |
| " <td>2100</td>\n", | |
| " <td>1.924725</td>\n", | |
| " <td>50</td>\n", | |
| " <td>2075.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>19</th>\n", | |
| " <td>2789</td>\n", | |
| " <td>2100</td>\n", | |
| " <td>2150</td>\n", | |
| " <td>1.515689</td>\n", | |
| " <td>50</td>\n", | |
| " <td>2125.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>20</th>\n", | |
| " <td>2435</td>\n", | |
| " <td>2150</td>\n", | |
| " <td>2200</td>\n", | |
| " <td>1.191413</td>\n", | |
| " <td>50</td>\n", | |
| " <td>2175.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>21</th>\n", | |
| " <td>1821</td>\n", | |
| " <td>2200</td>\n", | |
| " <td>2250</td>\n", | |
| " <td>0.908297</td>\n", | |
| " <td>50</td>\n", | |
| " <td>2225.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>22</th>\n", | |
| " <td>5991</td>\n", | |
| " <td>2250</td>\n", | |
| " <td>9950</td>\n", | |
| " <td>0.696570</td>\n", | |
| " <td>7700</td>\n", | |
| " <td>6100.0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>\n", | |
| " <div class=\"colab-df-buttons\">\n", | |
| "\n", | |
| " <div class=\"colab-df-container\">\n", | |
| " <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a636b4a5-7359-4e79-820d-ebe02697dffd')\"\n", | |
| " title=\"Convert this dataframe to an interactive table.\"\n", | |
| " style=\"display:none;\">\n", | |
| "\n", | |
| " <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
| " <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
| " </svg>\n", | |
| " </button>\n", | |
| "\n", | |
| " <style>\n", | |
| " .colab-df-container {\n", | |
| " display:flex;\n", | |
| " gap: 12px;\n", | |
| " }\n", | |
| "\n", | |
| " .colab-df-convert {\n", | |
| " background-color: #E8F0FE;\n", | |
| " border: none;\n", | |
| " border-radius: 50%;\n", | |
| " cursor: pointer;\n", | |
| " display: none;\n", | |
| " fill: #1967D2;\n", | |
| " height: 32px;\n", | |
| " padding: 0 0 0 0;\n", | |
| " width: 32px;\n", | |
| " }\n", | |
| "\n", | |
| " .colab-df-convert:hover {\n", | |
| " background-color: #E2EBFA;\n", | |
| " box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
| " fill: #174EA6;\n", | |
| " }\n", | |
| "\n", | |
| " .colab-df-buttons div {\n", | |
| " margin-bottom: 4px;\n", | |
| " }\n", | |
| "\n", | |
| " [theme=dark] .colab-df-convert {\n", | |
| " background-color: #3B4455;\n", | |
| " fill: #D2E3FC;\n", | |
| " }\n", | |
| "\n", | |
| " [theme=dark] .colab-df-convert:hover {\n", | |
| " background-color: #434B5C;\n", | |
| " box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
| " filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
| " fill: #FFFFFF;\n", | |
| " }\n", | |
| " </style>\n", | |
| "\n", | |
| " <script>\n", | |
| " const buttonEl =\n", | |
| " document.querySelector('#df-a636b4a5-7359-4e79-820d-ebe02697dffd button.colab-df-convert');\n", | |
| " buttonEl.style.display =\n", | |
| " google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
| "\n", | |
| " async function convertToInteractive(key) {\n", | |
| " const element = document.querySelector('#df-a636b4a5-7359-4e79-820d-ebe02697dffd');\n", | |
| " const dataTable =\n", | |
| " await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
| " [key], {});\n", | |
| " if (!dataTable) return;\n", | |
| "\n", | |
| " const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
| " '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
| " + ' to learn more about interactive tables.';\n", | |
| " element.innerHTML = '';\n", | |
| " dataTable['output_type'] = 'display_data';\n", | |
| " await google.colab.output.renderOutput(dataTable, element);\n", | |
| " const docLink = document.createElement('div');\n", | |
| " docLink.innerHTML = docLinkHtml;\n", | |
| " element.appendChild(docLink);\n", | |
| " }\n", | |
| " </script>\n", | |
| " </div>\n", | |
| "\n", | |
| "\n", | |
| " <div id=\"id_e82b9480-d7a2-446f-8c06-b1c39c06a5a4\">\n", | |
| " <style>\n", | |
| " .colab-df-generate {\n", | |
| " background-color: #E8F0FE;\n", | |
| " border: none;\n", | |
| " border-radius: 50%;\n", | |
| " cursor: pointer;\n", | |
| " display: none;\n", | |
| " fill: #1967D2;\n", | |
| " height: 32px;\n", | |
| " padding: 0 0 0 0;\n", | |
| " width: 32px;\n", | |
| " }\n", | |
| "\n", | |
| " .colab-df-generate:hover {\n", | |
| " background-color: #E2EBFA;\n", | |
| " box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
| " fill: #174EA6;\n", | |
| " }\n", | |
| "\n", | |
| " [theme=dark] .colab-df-generate {\n", | |
| " background-color: #3B4455;\n", | |
| " fill: #D2E3FC;\n", | |
| " }\n", | |
| "\n", | |
| " [theme=dark] .colab-df-generate:hover {\n", | |
| " background-color: #434B5C;\n", | |
| " box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
| " filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
| " fill: #FFFFFF;\n", | |
| " }\n", | |
| " </style>\n", | |
| " <button class=\"colab-df-generate\" onclick=\"generateWithVariable('df')\"\n", | |
| " title=\"Generate code using this dataframe.\"\n", | |
| " style=\"display:none;\">\n", | |
| "\n", | |
| " <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
| " width=\"24px\">\n", | |
| " <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n", | |
| " </svg>\n", | |
| " </button>\n", | |
| " <script>\n", | |
| " (() => {\n", | |
| " const buttonEl =\n", | |
| " document.querySelector('#id_e82b9480-d7a2-446f-8c06-b1c39c06a5a4 button.colab-df-generate');\n", | |
| " buttonEl.style.display =\n", | |
| " google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
| "\n", | |
| " buttonEl.onclick = () => {\n", | |
| " google.colab.notebook.generateWithVariable('df');\n", | |
| " }\n", | |
| " })();\n", | |
| " </script>\n", | |
| " </div>\n", | |
| "\n", | |
| " </div>\n", | |
| " </div>\n" | |
| ], | |
| "application/vnd.google.colaboratory.intrinsic+json": { | |
| "type": "dataframe", | |
| "variable_name": "df", | |
| "summary": "{\n \"name\": \"df\",\n \"rows\": 23,\n \"fields\": [\n {\n \"column\": \"userCount\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52496,\n \"min\": 1821,\n \"max\": 198305,\n \"num_unique_values\": 23,\n \"samples\": [\n 9412,\n 50541,\n 5236\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ratingStart\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 479,\n \"min\": 0,\n \"max\": 2250,\n \"num_unique_values\": 23,\n \"samples\": [\n 1900,\n 1600,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ratingEnd\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1744,\n \"min\": 1200,\n \"max\": 9950,\n \"num_unique_values\": 23,\n \"samples\": [\n 1950,\n 1650,\n 1200\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"topPercentage\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 39.902662236782966,\n \"min\": 0.696570399420513,\n \"max\": 100.0,\n \"num_unique_values\": 23,\n \"samples\": [\n 4.358128573106174,\n 23.32435345454038,\n 100.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"width\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1602,\n \"min\": 50,\n \"max\": 7700,\n \"num_unique_values\": 3,\n \"samples\": [\n 1200,\n 50,\n 7700\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mid\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 997.0869130888061,\n \"min\": 600.0,\n \"max\": 6100.0,\n \"num_unique_values\": 23,\n \"samples\": [\n 1925.0,\n 1625.0,\n 600.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
| } | |
| }, | |
| "metadata": {} | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "\n", | |
| "---\n", | |
| "\n", | |
| "# 2) Compute stats (binned approximation)\n", | |
| "\n", | |
| "---" | |
| ], | |
| "metadata": { | |
| "id": "yE5x4Ju-mOsO" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "import os\n", | |
| "import requests\n", | |
| "import numpy as np\n", | |
| "import pandas as pd\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import seaborn as sns # Added seaborn import\n", | |
| "from scipy import stats\n", | |
| "\n", | |
| "# We approximate each user's rating by the bin midpoint. This is standard for grouped data,\n", | |
| "# -----------------------------\n", | |
| "# 2) Compute stats (binned approximation)\n", | |
| "# -----------------------------\n", | |
| "# but note the last bin is extremely wide (2250..9950), which can distort mean/std/skew/kurtosis.\n", | |
| "vals_full = np.repeat(df[\"mid\"].to_numpy(), df[\"userCount\"].to_numpy())\n", | |
| "\n", | |
| "# Also compute \"core\" stats excluding the last wide bin to avoid tail distortion.\n", | |
| "df_core = df[(df[\"ratingEnd\"] <= 2250) & (df[\"ratingEnd\"] > 1200)].copy()\n", | |
| "vals_core = np.repeat(df_core[\"mid\"].to_numpy(), df_core[\"userCount\"].to_numpy())\n", | |
| "\n", | |
| "def summarize(arr: np.ndarray) -> dict:\n", | |
| " return {\n", | |
| " \"N\": int(arr.size),\n", | |
| " \"mean\": float(np.mean(arr)),\n", | |
| " \"std\": float(np.std(arr, ddof=0)),\n", | |
| " \"skew\": float(stats.skew(arr, bias=False)),\n", | |
| " \"kurtosis_excess\": float(stats.kurtosis(arr, fisher=True, bias=False)),\n", | |
| " \"min\": float(np.min(arr)),\n", | |
| " \"p25\": float(np.percentile(arr, 25)),\n", | |
| " \"median\": float(np.percentile(arr, 50)),\n", | |
| " \"p75\": float(np.percentile(arr, 75)),\n", | |
| " \"p90\": float(np.percentile(arr, 90)),\n", | |
| " \"p95\": float(np.percentile(arr, 95)),\n", | |
| " \"p99\": float(np.percentile(arr, 99)),\n", | |
| " \"max\": float(np.max(arr)),\n", | |
| " }\n", | |
| "\n", | |
| "summary = pd.DataFrame(\n", | |
| " [summarize(vals_full), summarize(vals_core)],\n", | |
| " index=[\"full midpoint\", \"1200 < midpoint <= 2250\"]\n", | |
| ")\n", | |
| "display(summary)\n", | |
| "\n", | |
| "tail_mass = 1.0 - (df_core[\"userCount\"].sum() / N)\n", | |
| "print(f\"Total users N = {N}\")\n", | |
| "print(f\"Mass in tail-excluded bins (x>2250): {tail_mass:.6%} ({N - int(df_core['userCount'].sum())} users)\")\n", | |
| "\n", | |
| "# -----------------------------\n", | |
| "# 3) Plot histogram (bar chart from bins)\n", | |
| "# -----------------------------\n", | |
| "\n", | |
| "sns.set_theme(style=\"whitegrid\") # Apply seaborn style\n", | |
| "import math\n", | |
| "fig, ax = plt.subplots(2, 1, figsize=(12, 12))\n", | |
| "# Normalize userCount by bin width for accurate representation of density\n", | |
| "ax[0].bar(df[\"mid\"], df[\"userCount\"] / df[\"width\"], width=df[\"width\"], align=\"center\", log=True)\n", | |
| "ax[0].set_ylabel(\"User count (logarithmic scale, tails included)\") # Updated label for clarity\n", | |
| "ax[0].set_title(\"LeetCode contest rating histogram (including tails)\") # Updated title\n", | |
| "\n", | |
| "ax[1].bar(df_core[\"mid\"], df_core[\"userCount\"], width=df_core[\"width\"], align=\"center\", log=False)\n", | |
| "ax[1].set_xlabel(\"Contest rating (bin midpoint)\")\n", | |
| "ax[1].set_ylabel(\"User count\")\n", | |
| "ax[1].set_title(\"LeetCode contest rating histogram within range (1200,2250]\")\n", | |
| "plt.show()" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 1000 | |
| }, | |
| "id": "_1_hwQrGmEeF", | |
| "outputId": "b88bc06e-baae-470a-ee04-4aaf59b17765" | |
| }, | |
| "execution_count": 28, | |
| "outputs": [ | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": [ | |
| " N mean std skew \\\n", | |
| "full midpoint 860071 1551.785318 418.499192 8.921245 \n", | |
| "1200 < midpoint <= 2250 848844 1525.555756 158.688265 1.457022 \n", | |
| "\n", | |
| " kurtosis_excess min p25 median p75 \\\n", | |
| "full midpoint 94.436302 600.0 1425.0 1475.0 1575.0 \n", | |
| "1200 < midpoint <= 2250 2.641940 1225.0 1425.0 1475.0 1575.0 \n", | |
| "\n", | |
| " p90 p95 p99 max \n", | |
| "full midpoint 1775.0 1875.0 2175.0 6100.0 \n", | |
| "1200 < midpoint <= 2250 1725.0 1875.0 2075.0 2225.0 " | |
| ], | |
| "text/html": [ | |
| "\n", | |
| " <div id=\"df-7632bb58-dfd6-43f3-b31e-2560fe1af214\" class=\"colab-df-container\">\n", | |
| " <div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>N</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>std</th>\n", | |
| " <th>skew</th>\n", | |
| " <th>kurtosis_excess</th>\n", | |
| " <th>min</th>\n", | |
| " <th>p25</th>\n", | |
| " <th>median</th>\n", | |
| " <th>p75</th>\n", | |
| " <th>p90</th>\n", | |
| " <th>p95</th>\n", | |
| " <th>p99</th>\n", | |
| " <th>max</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>full midpoint</th>\n", | |
| " <td>860071</td>\n", | |
| " <td>1551.785318</td>\n", | |
| " <td>418.499192</td>\n", | |
| " <td>8.921245</td>\n", | |
| " <td>94.436302</td>\n", | |
| " <td>600.0</td>\n", | |
| " <td>1425.0</td>\n", | |
| " <td>1475.0</td>\n", | |
| " <td>1575.0</td>\n", | |
| " <td>1775.0</td>\n", | |
| " <td>1875.0</td>\n", | |
| " <td>2175.0</td>\n", | |
| " <td>6100.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1200 < midpoint <= 2250</th>\n", | |
| " <td>848844</td>\n", | |
| " <td>1525.555756</td>\n", | |
| " <td>158.688265</td>\n", | |
| " <td>1.457022</td>\n", | |
| " <td>2.641940</td>\n", | |
| " <td>1225.0</td>\n", | |
| " <td>1425.0</td>\n", | |
| " <td>1475.0</td>\n", | |
| " <td>1575.0</td>\n", | |
| " <td>1725.0</td>\n", | |
| " <td>1875.0</td>\n", | |
| " <td>2075.0</td>\n", | |
| " <td>2225.0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>\n", | |
| " <div class=\"colab-df-buttons\">\n", | |
| "\n", | |
| " <div class=\"colab-df-container\">\n", | |
| " <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-7632bb58-dfd6-43f3-b31e-2560fe1af214')\"\n", | |
| " title=\"Convert this dataframe to an interactive table.\"\n", | |
| " style=\"display:none;\">\n", | |
| "\n", | |
| " <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
| " <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
| " </svg>\n", | |
| " </button>\n", | |
| "\n", | |
| " <style>\n", | |
| " .colab-df-container {\n", | |
| " display:flex;\n", | |
| " gap: 12px;\n", | |
| " }\n", | |
| "\n", | |
| " .colab-df-convert {\n", | |
| " background-color: #E8F0FE;\n", | |
| " border: none;\n", | |
| " border-radius: 50%;\n", | |
| " cursor: pointer;\n", | |
| " display: none;\n", | |
| " fill: #1967D2;\n", | |
| " height: 32px;\n", | |
| " padding: 0 0 0 0;\n", | |
| " width: 32px;\n", | |
| " }\n", | |
| "\n", | |
| " .colab-df-convert:hover {\n", | |
| " background-color: #E2EBFA;\n", | |
| " box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
| " fill: #174EA6;\n", | |
| " }\n", | |
| "\n", | |
| " .colab-df-buttons div {\n", | |
| " margin-bottom: 4px;\n", | |
| " }\n", | |
| "\n", | |
| " [theme=dark] .colab-df-convert {\n", | |
| " background-color: #3B4455;\n", | |
| " fill: #D2E3FC;\n", | |
| " }\n", | |
| "\n", | |
| " [theme=dark] .colab-df-convert:hover {\n", | |
| " background-color: #434B5C;\n", | |
| " box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
| " filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
| " fill: #FFFFFF;\n", | |
| " }\n", | |
| " </style>\n", | |
| "\n", | |
| " <script>\n", | |
| " const buttonEl =\n", | |
| " document.querySelector('#df-7632bb58-dfd6-43f3-b31e-2560fe1af214 button.colab-df-convert');\n", | |
| " buttonEl.style.display =\n", | |
| " google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
| "\n", | |
| " async function convertToInteractive(key) {\n", | |
| " const element = document.querySelector('#df-7632bb58-dfd6-43f3-b31e-2560fe1af214');\n", | |
| " const dataTable =\n", | |
| " await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
| " [key], {});\n", | |
| " if (!dataTable) return;\n", | |
| "\n", | |
| " const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
| " '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
| " + ' to learn more about interactive tables.';\n", | |
| " element.innerHTML = '';\n", | |
| " dataTable['output_type'] = 'display_data';\n", | |
| " await google.colab.output.renderOutput(dataTable, element);\n", | |
| " const docLink = document.createElement('div');\n", | |
| " docLink.innerHTML = docLinkHtml;\n", | |
| " element.appendChild(docLink);\n", | |
| " }\n", | |
| " </script>\n", | |
| " </div>\n", | |
| "\n", | |
| "\n", | |
| " <div id=\"id_b4ca728d-89d5-48fd-b1ba-b008d69ce5e0\">\n", | |
| " <style>\n", | |
| " .colab-df-generate {\n", | |
| " background-color: #E8F0FE;\n", | |
| " border: none;\n", | |
| " border-radius: 50%;\n", | |
| " cursor: pointer;\n", | |
| " display: none;\n", | |
| " fill: #1967D2;\n", | |
| " height: 32px;\n", | |
| " padding: 0 0 0 0;\n", | |
| " width: 32px;\n", | |
| " }\n", | |
| "\n", | |
| " .colab-df-generate:hover {\n", | |
| " background-color: #E2EBFA;\n", | |
| " box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
| " fill: #174EA6;\n", | |
| " }\n", | |
| "\n", | |
| " [theme=dark] .colab-df-generate {\n", | |
| " background-color: #3B4455;\n", | |
| " fill: #D2E3FC;\n", | |
| " }\n", | |
| "\n", | |
| " [theme=dark] .colab-df-generate:hover {\n", | |
| " background-color: #434B5C;\n", | |
| " box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
| " filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
| " fill: #FFFFFF;\n", | |
| " }\n", | |
| " </style>\n", | |
| " <button class=\"colab-df-generate\" onclick=\"generateWithVariable('summary')\"\n", | |
| " title=\"Generate code using this dataframe.\"\n", | |
| " style=\"display:none;\">\n", | |
| "\n", | |
| " <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
| " width=\"24px\">\n", | |
| " <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n", | |
| " </svg>\n", | |
| " </button>\n", | |
| " <script>\n", | |
| " (() => {\n", | |
| " const buttonEl =\n", | |
| " document.querySelector('#id_b4ca728d-89d5-48fd-b1ba-b008d69ce5e0 button.colab-df-generate');\n", | |
| " buttonEl.style.display =\n", | |
| " google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
| "\n", | |
| " buttonEl.onclick = () => {\n", | |
| " google.colab.notebook.generateWithVariable('summary');\n", | |
| " }\n", | |
| " })();\n", | |
| " </script>\n", | |
| " </div>\n", | |
| "\n", | |
| " </div>\n", | |
| " </div>\n" | |
| ], | |
| "application/vnd.google.colaboratory.intrinsic+json": { | |
| "type": "dataframe", | |
| "variable_name": "summary", | |
| "summary": "{\n \"name\": \"summary\",\n \"rows\": 2,\n \"fields\": [\n {\n \"column\": \"N\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7938,\n \"min\": 848844,\n \"max\": 860071,\n \"num_unique_values\": 2,\n \"samples\": [\n 848844,\n 860071\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mean\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 18.547101084103065,\n \"min\": 1525.555755827926,\n \"max\": 1551.7853177237694,\n \"num_unique_values\": 2,\n \"samples\": [\n 1525.555755827926,\n 1551.7853177237694\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"std\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 183.71406839884193,\n \"min\": 158.68826515903004,\n \"max\": 418.4991922874107,\n \"num_unique_values\": 2,\n \"samples\": [\n 158.68826515903004,\n 418.4991922874107\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"skew\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 5.278002312616033,\n \"min\": 1.4570221060459818,\n \"max\": 8.921244558784137,\n \"num_unique_values\": 2,\n \"samples\": [\n 1.4570221060459818,\n 8.921244558784137\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"kurtosis_excess\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 64.9084162816047,\n \"min\": 2.641939852321446,\n \"max\": 94.43630246992544,\n \"num_unique_values\": 2,\n \"samples\": [\n 2.641939852321446,\n 94.43630246992544\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"min\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 441.9417382415922,\n \"min\": 600.0,\n \"max\": 1225.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 1225.0,\n 600.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"p25\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.0,\n \"min\": 1425.0,\n \"max\": 1425.0,\n \"num_unique_values\": 1,\n \"samples\": [\n 1425.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"median\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.0,\n \"min\": 1475.0,\n \"max\": 1475.0,\n \"num_unique_values\": 1,\n \"samples\": [\n 1475.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"p75\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.0,\n \"min\": 1575.0,\n \"max\": 1575.0,\n \"num_unique_values\": 1,\n \"samples\": [\n 1575.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"p90\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 35.35533905932738,\n \"min\": 1725.0,\n \"max\": 1775.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 1725.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"p95\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.0,\n \"min\": 1875.0,\n \"max\": 1875.0,\n \"num_unique_values\": 1,\n \"samples\": [\n 1875.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"p99\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 70.71067811865476,\n \"min\": 2075.0,\n \"max\": 2175.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 2075.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"max\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2740.038777097872,\n \"min\": 2225.0,\n \"max\": 6100.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 2225.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
| } | |
| }, | |
| "metadata": {} | |
| }, | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Total users N = 860071\n", | |
| "Mass in tail-excluded bins (x>2250): 1.305357% (11227 users)\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 1200x1200 with 2 Axes>" | |
| ], | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAABBQAAAP6CAYAAAAg9g7gAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA9wdJREFUeJzs3Xd8U2X///F3Ai0USotVKBsFTNl7F4qUJYiWJUOmyM0QWYICbr5MuXEARUQBAUUZKg5kI8uCiICiLNlC0YqMNl20kPP7g19zE9ICAdok7ev5ePjQc50r53ySXo3NO9e5jskwDEMAAAAAAAAuMLu7AAAAAAAA4H0IFAAAAAAAgMsIFAAAAAAAgMsIFAAAAAAAgMsIFAAAAAAAgMsIFAAAAAAAgMsIFAAAAAAAgMsIFAAAAAAAgMsIFAAAAAAAgMsIFAAAHic8PFxjxoxxdxlw0c6dOxUSEqKdO3dm+blnzpypkJAQXbhw4ZZ9GV93JyEhQQ0aNNA333xjb0t7/TNLZoyt9I45ZswYhYeH37NzZKUzZ84oJCREX375pb3tTn4uR48eVcWKFfXHH3/c6xIBZEMECgDggb788kuFhITot99+y9Lzvv/++9qwYUOG+//880+99tpratasmapUqaKaNWuqa9euWrhwoZKTk7OwUs+XlJSkmTNnZvqH6y1btmjmzJmZeo4bLV682OFDS07gjtfZUy1atEj58+fXY4895u5SshVP+b0qV66cmjRpohkzZri7FABegEABAGA3Z86cDAOFzZs36/HHH9fq1avVtGlTvfrqqxo5cqSKFSum//73v5o4cWIWV+vZkpKSFBkZqZ9++ilTz7NlyxZFRkZm6jlu9Nlnn2nFihVO7XXq1NG+fftUp06dLK3HVWvWrNH48eNdeow7XmdPlJqaqkWLFunJJ59Urly57O2DBg3Svn373FjZvTF+/HitWbPGLefO6PfqdhUvXlz79u1TRETEXdfStWtXrV+/Xn/++eddHwtA9pbb3QUAADzf6dOnNWLECBUrVkwLFy5U4cKF7fu6d++uU6dOafPmze4rEHfMMAxdvnxZefPmvetjmc1m5cmT5x5Ulbl8fX3dXYLLEhMTlS9fPneXoc2bN+vChQtq3bq1Q3vu3LmVO7f3/1np4+Pj7hLumMlkume/fw0bNlRgYKBWrFihYcOG3ZNjAsiemKEAAF4sJiZGY8eOVcOGDVW5cmU99thj+vzzz536paSkaMaMGWrRooUqV66sJk2aaOrUqUpJSbH3CQkJUWJiolasWKGQkBCFhITYrzOfO3euEhMTNXHiRIcwIU3p0qXVu3dv+/aVK1c0a9YsNW/eXJUrV1Z4eLjefvtth/NJ1z7MvvfeewoLC1O1atXUs2dPHTlyJN3nGhcXp4kTJ6pJkyaqXLmyWrRooQ8++EA2m+22XqstW7aoR48eqlGjhmrWrKmOHTvq22+/deizevVqdejQQVWrVlW9evU0atQoxcTEOPQZM2aMatSooZiYGD377LOqUaOG6tevrzfffFNXr16VdO1a5gYNGkiSIiMj7a/n9VPmjx07pqFDh6pu3bqqUqWKOnTooI0bNzqcKzU1VZGRkWrZsqWqVKmievXqqVu3boqKirLXsnjxYkmyn+NW10uHh4drwIAB2rZtm/25LlmyRJL0xRdfqFevXmrQoIEqV66sNm3a6NNPP3V6/JEjR/TTTz/Zz9ezZ09J6V+T3rNnT7Vt21ZHjx5Vz549Va1aNTVu3FgffvihU23R0dEaOHCgqlevrgYNGmjSpEnatm2bS9fOW61WjRkzRrVr11atWrU0duxYJSUlOT2H69dQuNvXOTExUVOmTLGPzVatWmnevHkyDMPhvMnJyZowYYLq1aunGjVqaODAgYqJiXEaG2nXvR89elQjR45UnTp19NRTT0mSDh06pDFjxtgvOwoNDdXYsWN18eJFh3OlHePEiRMaNWqUatWqpfr16+vdd9+VYRj666+/NGjQINWsWVOhoaGaP3/+bb2+GzZsUPHixVWqVKl0z3e9kJAQ/d///Z82bNigtm3b2t+jtm7d6nTcmJgYvfTSS2rUqJH9PeP11193es+4XkZrYfTs2dM+JtP8/fffevbZZx3GVnrHvnENhbR1CebNm6elS5fa39M6duyY7oyM1atXq02bNqpSpYratm2r9evX39a6DDf7vbp06ZLefPNNPf744/b3r379+unQoUMOx0hvDYX0REVFqVu3bqpdu7Zq1KihVq1a6e2333bo4+Pjo7p16zq9JwHAjbw/SgaAHOrff/9V586dZTKZ1L17dwUFBWnr1q16+eWXFR8frz59+kiSbDabBg0apN27d6tz584qW7as/vjjDy1cuFAnT57Ue++9J0maOnWqXnnlFVWtWlWdO3eWJPuHhk2bNqlkyZKqWbPmbdX2yiuvaMWKFWrVqpWefvpp7du3T3PmzNGxY8c0a9Yse7/p06dr9uzZatKkiZo0aaL9+/erb9++Sk1NdTheUlKSevTooZiYGHXt2lVFixbV3r179fbbb+vcuXN6+eWXb1rPl19+qZdeekkPP/ywBgwYoAIFCujgwYPatm2bHn/8cXufsWPHqkqVKnr++ed1/vx5LVq0SHv27NFXX32lgIAA+/GuXr2qZ555RlWrVtWLL76oHTt2aP78+SpZsqSeeuopBQUF6Y033tAbb7yhFi1aqEWLFpJk/8B15MgRdevWTcHBwfrPf/6jfPnyafXq1Ro8eLBmzpxp7x8ZGak5c+boySefVNWqVRUfH6/ff/9d+/fvV2hoqLp06aJ//vlHUVFRmjp16m39bCTpxIkTGjlypLp06aLOnTvroYceknRtyvXDDz+s8PBw5c6dW5s2bdK4ceNkGIa6d+8uSXrppZc0fvx45cuXTwMHDpQkPfDAAzc9X2xsrPr166cWLVqodevWWrt2raZNmyaLxaImTZpIuvahvHfv3jp37px69eqlBx54QCtXrnR5DYrhw4erRIkSev7553XgwAEtX75cQUFBeuGFFzJ8zN28zoZhaNCgQdq5c6c6deqkChUqaNu2bZo6dar9Q3KaMWPGaPXq1YqIiFC1atW0a9cu9e/fP8O6hg0bptKlS2vEiBH2cGL79u06ffq0OnTooEKFCunIkSNatmyZjh49qmXLlslkMjkcY8SIESpbtqxGjhypLVu2aPbs2SpYsKCWLFmi+vXra9SoUfr222/15ptvqkqVKre8XGXv3r2qVKnSTftcb/fu3Vq3bp2eeuop5c+fXx9//LGGDh2qTZs26b777pN0LUzo1KmTrFarOnfurDJlyigmJkZr165VcnLyXc8oSU5OVu/evfXXX3+pZ8+eKly4sL7++mv9+OOPt32MlStXKiEhQV26dJHJZNLcuXM1ZMgQbdiwwT6rYfPmzRoxYoQsFotGjhyp2NhYvfzyywoODr7l8W/2e3X69Glt2LBBjz76qEqUKKF///1XS5cuVY8ePfTdd9/d1vHTHDlyRAMGDFBISIiGDh0qX19fnTp1Snv27HHqW6lSJW3cuFHx8fHy9/e/7XMAyGEMAIDH+eKLLwyLxWLs27cvwz4vvfSSERoaaly4cMGhfcSIEUatWrWMpKQkwzAM46uvvjLKly9v7Nq1y6HfZ599ZlgsFmP37t32turVqxujR4926Ge1Wg2LxWIMGjTotmo/ePCgYbFYjJdfftmhfcqUKYbFYjF27NhhGIZhnD9/3qhUqZLRv39/w2az2fu9/fbbhsVicahj1qxZRvXq1Y0TJ044HHPatGlGhQoVjLNnz2ZYT1xcnFGjRg3jySefNJKTkx32pZ03JSXFaNCggdG2bVuHPps2bTIsFosxffp0e9vo0aMNi8ViREZGOhyrXbt2Rvv27e3b58+fNywWizFjxgynmnr37m20bdvWuHz5skMtXbp0MVq2bGlve+KJJ4z+/ftn+NwMwzDGjRtnWCyWm/a5XtOmTQ2LxWJs3brVaV/amLle3759jWbNmjm0PfbYY0aPHj2c+v7444+GxWIxfvzxR3tbjx49DIvFYqxYscLedvnyZSM0NNQYMmSIvW3+/PmGxWIx1q9fb29LTk42Hn30UadjpmfGjBmGxWIxxo4d69A+ePBgo27dug5tTZs2dRhfd/M6r1+/3rBYLMZ7773n0D5kyBAjJCTEOHXqlGEYhvH7778bFovFmDhxokO/MWPGOI2TtOfy/PPPO50vvZ/RypUrDYvF4vA7nnaMV1991d525coVIywszAgJCTHmzJljb4+NjTWqVq3q9Lt/o9TUVCMkJMSYMmWK0760813PYrEYlSpVsr8GhvG/94ePP/7Y3vbiiy8a5cuXT/f9Lu13NL2xdePPMU2PHj0cxueCBQsMi8VirFq1yt6WmJhotGjRwumYo0ePNpo2bWrfPn36tGGxWIy6desaly5dsrdv2LDBsFgsxvfff29va9u2rREWFmbEx8fb23bu3GlYLBaHY2Yko9+ry5cvG1evXnVoO336tFG5cmWH96G0Wr/44gt7240/l48++siwWCzG+fPnb1nPt99+a1gsFuPXX3+9ZV8AOReXPACAFzIMQ+vWrVN4eLgMw9CFCxfs/zRq1EhWq1X79++XdG0BurJly6pMmTIO/erXry9Jt/wGOD4+XpKUP3/+26pty5YtkqSnn37aob1v374O+7dv367U1FT16NHD4VvV6y+dSLNmzRrVqlVLAQEBDs+hYcOGunr1qnbt2pVhPVFRUUpISFD//v2dri9OO+/vv/+u8+fPq1u3bg59HnnkEZUpUybd9SG6devmsF2rVi2dOXMmwzrSXLp0ST/++KNat26t+Ph4+3O5ePGiGjVqpJMnT9ovswgICNCRI0d08uTJWx7XFSVKlFDjxo2d2q9fR8FqterChQuqW7euTp8+LavVesfny5cvn8NCcb6+vqpSpYpOnz5tb9u2bZuCg4PVrFkze1uePHnss2VuV9euXR22a9eurUuXLtnHcXru5nXeunWrcuXK5TTFvm/fvjIMwz69f9u2bZJkv3QhTY8ePTI89o3PRXL8GV2+fFkXLlxQtWrVJMn+O3+9Tp062f87V65cqly5sgzDcGgPCAjQQw895PDzSE9sbKwMw3CYrXMrDRs2dLg8onz58vL397efy2azacOGDWratKmqVKni9PgbZ1zcia1bt6pQoUJ69NFH7W1+fn4uja02bdooMDDQvl27dm1Jsj+PmJgY/fHHH2rXrp3De2XdunVlsVjuqn5fX1+Zzdf+ZL969aouXryofPny6aGHHtKBAwdcOlbaz27jxo23vFwsre+Nl9MAwPW45AEAvNCFCxcUFxenpUuXaunSpRn2kaRTp07p2LFj9mv6b3T+/PmbnittqmtCQsJt1RYdHS2z2ex0jXWhQoUUEBCg6OhoSdLZs2clSQ8++KBDv6CgIIc/3NOew+HDhzN8DmnPNT1pq5Q//PDDGfZJqyVt6v/1ypQpo927dzu05cmTR0FBQQ5tgYGBio2NzfAc19djGIamT5+u6dOnp9vn/PnzCg4O1tChQ/Xss8+qVatWslgsatSokSIiIlS+fPlbnudmSpQokW777t27NXPmTP3yyy9O6w5YrVYVKFDgjs5XpEgRpw+GgYGBOnz4sH07OjpapUqVcup34zi6lWLFijlsp30oio2NzXDa9t28ztHR0SpcuLDTscuWLWvfL10bY2az2em1L126dIbHTu/ndOnSJUVGRmrVqlVOv7vphT43vh4FChRId/wWKFBAly5dyrCW6xk3rA1xM0WLFnVqCwwMVFxcnKRrv7vx8fE3/f28W9HR0SpdurTT2Erv9z0jNz6PtPeotOeR9h6S3ngtXbq0yx/8r2ez2bRo0SJ9+umnOnPmjH2tFkkqWLCgS8dq06aNli9frldeeUVvvfWWGjRooBYtWujRRx+1hxZpXPk5A8i5CBQAwAulfbP0xBNPqH379un2Sbte32azyWKxaOzYsen2K1KkyE3P5e/vr8KFC2e4WGJG7sU3i2lsNptCQ0PVr1+/dPffGEpktutvl+eqtJ9d3759050lIP3vQ0mdOnW0fv16bdy4UVFRUfr888+1cOFCjRs3Tk8++eQd15DeHR3+/PNP9enTR2XKlNGYMWNUtGhR+fj4aMuWLVqwYMFtL36Znrt5vVx144eiNDf7cJRZr/PdSm/F/uHDh2vv3r165plnVKFCBeXLl082m039+vVL9zmm93pk9PO41QfIwMBAmUwm+4fo23Gn57obV69evedjzh3PI83777+v6dOnq2PHjho2bJgCAwNlNps1adIkl8+fN29eLV68WDt37tTmzZu1bds2rVq1SkuXLtX8+fMdnmfazzltrQsASA+BAgB4oaCgIOXPn182m00NGza8ad9SpUrp0KFDatCgwR1/yG/atKmWLl2qvXv3qkaNGjftW7x4cdlsNp06dcr+La10bRHJuLg4FS9eXNL/vjk9efKkSpYsae934cIFp2/6S5UqpcTExFs+1/SkfTg/cuRIht8Gp9Vy4sQJp1kQJ06ccPqW93Zk9FqnPVcfH5/bej4FCxZUx44d1bFjRyUkJKhHjx6aOXOm/YPuvQpuvv/+e6WkpGj27NkOzze9S2LuZViUpnjx4jp69KgMw3A4ftoMk8x2p69z8eLFtWPHDqeF644fP27fL10bYzabTWfOnHEIwE6dOnXbNcbGxmrHjh0aMmSInnvuOXv7vb4kJiO5c+dWqVKlbuvSntsVFBQkf39/lwNLyXGmw/XOnj3r8J5SvHhx/fHHH05j68SJE3dWdDrSfmfSG6+3+zPOaIytXbtW9erV06RJkxza4+Li7ujDvtlsVoMGDdSgQQONHTtW77//vt555x3t3LnT4T3pzJkzMpvNLs3kAJDzsIYCAHihXLlyqVWrVlq7dq3++OMPp/3XXwLQunVrxcTEaNmyZU79kpOTlZiYaN/Oly9fun+g9+vXT/ny5dMrr7yif//912n/n3/+qYULF0qSfdX+tO00H330kcP+hg0bysfHR5988onDt2w3Pi7tOezdu9d+Hfr14uLidOXKFaf2NI0aNVL+/Pk1Z84cXb582WFf2nkrV66s+++/X0uWLHG4ldyWLVt07NgxPfLIIxkePyN+fn72+q53//33q27dulq6dKn++ecfp8dd/7O78drl/Pnzq1SpUg41ZnQeV6V9M3n9z8JqteqLL75w6uvn53fX57tRo0aNFBMT43CbusuXL6c7bu+1u3mdw8LCdPXqVfttJdMsWLBAJpNJYWFhkq49P0lOt+H85JNPbrvOjL4lT+93JrNUr15dv//++z07ntlsVvPmzbVp0yb99ttvTvtv9g18yZIl9euvvzr8nDZt2qS//vrLoV9YWJj++ecfrVmzxt6WlJR0T8dWcHCwLBaLvvrqK4fLw3766ad036PTk9HvVa5cuZxeh9WrVzvd0vZ2pHdZS4UKFSTJ6Taa+/fvV7ly5e74UicAOQMzFADAg33xxRfpfoju1auXRo4cqZ07d6pz58568sknVa5cOcXGxmr//v3asWOHfvrpJ0lSRESEVq9erddff107d+5UzZo1dfXqVR0/flxr1qzR3Llz7YuhVapUSTt27NBHH32kwoULq0SJEqpWrZpKlSqladOmacSIEWrTpo0iIiJksViUkpKivXv3as2aNerQoYOka4uutW/fXkuXLlVcXJzq1Kmj3377TStWrFDz5s3ti0EGBQWpb9++mjNnjgYMGKAmTZrowIED2rp1q9O3bs8884y+//57DRw4UO3bt1elSpWUlJSkP/74Q2vXrtXGjRudrglP4+/vr7Fjx+qVV15Rp06d1LZtWwUEBOjQoUNKTk7Wm2++KR8fH40aNUpjx45Vjx499Nhjj9lvG1m8eHH7LThdkTdvXpUrV06rV6/Wgw8+qIIFC+rhhx+WxWLR66+/rqeeekqPP/64OnfurJIlS+rff//VL7/8or///lvffPONJOmxxx5T3bp1ValSJRUsWFC//fab1q5d67CQX9ot/CZMmKBGjRopV65ceuyxx1yuNzQ0VD4+Pho4cKC6du2qhIQELV++XPfff7/OnTvn0LdSpUr67LPP9N5776l06dIKCgrKcH2L29WlSxd98sknGjlypHr16qVChQrp22+/tU/7z4xZEWnu5nUODw9XvXr19M477yg6OlohISGKiorSxo0b1bt3b/sMmcqVK6tVq1ZauHChLl26ZL9tZNrsgtt5fv7+/qpTp47mzp2r1NRUBQcHKyoq6p7OGLiVZs2a6euvv9aJEyfu2TfXzz//vKKiotSzZ0/7rW3PnTunNWvW6NNPP81wEcgnn3xSa9euVb9+/dS6dWv9+eef+vbbb53WMejcubMWL16s0aNHa//+/SpUqJC+/vrrdC/9uRsjRozQs88+q27duqlDhw6Ki4vT4sWLZbFYbmsNmox+rx555BHNmjVLY8eOVY0aNfTHH3/o22+/dZiFcbtmzZqln3/+WU2aNFHx4sV1/vx5ffrppypSpIhq1apl75eamqpdu3Y5LT4LADciUAAAD/bZZ5+l296hQwcVKVJEy5cv16xZs7R+/Xp99tlnKliwoMqVK6dRo0bZ+5rNZs2aNUsLFizQ119/rfXr18vPz08lSpRQz549HT4UjBkzRq+99preffddJScnq3379vYV5Js1a6ZvvvlG8+bN08aNG/XZZ5/J19dXISEhGjNmjMOK6RMmTFCJEiW0YsUKbdiwQQ888IAGDBjgME1bunY9uK+vr5YsWaKdO3eqatWqmj9/vgYMGODQz8/PTx9//LHmzJmjNWvW6KuvvpK/v78efPBBDRky5JbfoD355JO6//779cEHH+i9995T7ty5VaZMGYegoEOHDsqbN68+/PBDTZs2Tfny5VPz5s31wgsvuLSq/fUmTJig8ePHa/LkyUpNTdVzzz0ni8WicuXK6YsvvlBkZKRWrFihS5cuKSgoSBUrVtTgwYPtj+/Zs6e+//57RUVFKSUlRcWKFdPw4cP1zDPP2Pu0bNlSPXv21HfffadvvvlGhmHcUaBQpkwZzZgxQ++++67efPNNPfDAA+rWrZuCgoL00ksvOfQdPHiwzp49q7lz5yohIUF169a960Ahf/78WrhwoSZMmKBFixYpX758ateunWrUqKEhQ4aku57AvXI3r7PZbNbs2bM1Y8YMrVq1Sl9++aWKFy+uF1980X5nkzRpr+t3332n9evXq2HDhnrnnXf06KOPytfX97ZqfeuttzR+/Hh9+umnMgxDoaGh+vDDDzNcj+Nea9q0qe677z6tXr1azz777D05ZnBwsJYtW6bp06fr22+/VXx8vIKDgxUWFnbTD/2NGzfWmDFj9NFHH2nSpEmqXLmy3n//fb355psO/fz8/LRgwQKNHz9en3zyifLmzavHH39cYWFhGa7LcifCw8P19ttva+bMmXrrrbf04IMPavLkyfrqq69u65KOjH6vBg4cqKSkJH377bdatWqVKlasqDlz5uitt966oxqjo6P1xRdf6OLFi7rvvvtUt25dp/fRHTt26NKlSxmu0QMAaUwGS7gCAAAPtWDBAk2ePFlbt25VcHCwu8u55w4ePKh27drpv//9r5544gl3l3NbZs2apS+//FLr1q3L0gU3vVVERISCgoLsl315g2effVYmk0mzZs1ydykAPBxrKAAAAI+QnJzssH358mUtXbpUDz74YLYIE258ftK19Q/MZrPq1KnjhoruTJ8+fZSYmKjvvvvO3aV4lNTUVKf1XHbu3KlDhw6pbt26bqrKdceOHdPmzZs1bNgwd5cCwAtwyQMAAPAIzz33nIoVK6by5csrPj5e33zzjY4fP65p06a5u7R7Yu7cufr9999Vv3595cqVS1u3btXWrVvVpUsXFS1a1N3l3bb8+fNrx44d7i7D48TExOjpp5/WE088ocKFC+v48eNasmSJChUqpK5du7q7vNtWtmxZHThwwN1lAPASXPIAAAA8woIFC/T5558rOjpaV69eVbly5dSvXz+1adPG3aXdE1FRUYqMjNSxY8eUmJiookWLKiIiQgMHDlTu3HzH4+2sVqteffVV7dmzRxcuXFC+fPlUv359jRo1ymmhSADILggUAAAAAACAy1hDAQAAAAAAuIxAAQAAAAAAuIwL9jzc3r17ZRiGfHx83F0KAAAAACAHSE1NlclkUo0aNW7ajxkKHs4wDHnDMheGYSglJcUrakXOxTiFN2CcwhswTuENGKfwdJ48Rm/3cygzFDxc2syEKlWquLmSm0tMTNTBgwdVrlw55cuXz93lAOlinMIbME7hDRin8AaMU3g6Tx6jv/322231Y4YCAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECAAAAAABwGYECgFuy2YybbgMAAADIeXK7uwAAns9sNmna4t06E2NVieACGtW9lrtLAgAAAOBmBAoAbsuZGKuORce6uwwAAAAAHoJLHgAAAAAAgMsIFAAAAAAAgMsIFAAAAAAAgMsIFAAAAAAAgMsIFAAAAAAAgMu85i4PZ86c0caNG7Vnzx4dO3ZMFy9elMlk0n333acyZcqoZs2aCg8PV8mSJd1dKgAAAAAA2Z7HBwqbNm3S/PnztXv3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AAAAAACyF6/66n7cuHEqU6aMJk+erIoVK8rf31/+/v6qVKmSJk+erNKlS+utt95ShQoVNGXKFDVq1Ehff/21u8sGAAAAACDb8apA4ccff1SdOnUy3F+nTh1FRUXZt5s0aaKzZ89mRWkAAAAAAOQoXhUo+Pr6at++fRnu//XXX+Xj42PfvnLlivLly5cVpQEAAAAAkKN41RoKbdu21eLFi1WwYEF169ZNJUqUkCSdOXNGn376qb755ht1797d3n/nzp0qV66cu8oFAAAAACDb8qpA4YUXXtC///6rjz76SAsWLLDfvcFms8kwDLVs2VIvvPCCJOny5cuqVKmSatas6c6SAQAAAADIlrwqUMiTJ4/effddHThwQFu3brWvj1C8eHE1atRIlSpVcuj73HPPuatUAAAAAACyNa8KFNJUrFhRFStWdHcZGXrttde0adMm/fPPPzp8+LC7ywEAAAAA4J7zykDh9OnTTjMUGjdurJIlS7q5smsef/xxDR06VKGhoe4uBQAAAACATOF1gcKUKVO0aNEi2Ww2h3az2azevXtr9OjRd3TcU6dOad68efr111915MgRlSlTRitXrnTqd+zYMU2YMEF79+5V/vz5FRERoeHDh8vX19fe52a3tgQAAAAAIDvwqkBh/vz5WrBggVq1aqW+ffuqbNmykq59yF+wYIEWLFig4OBg9enTx+VjHzlyRFu2bFG1atXsizzeKDY2Vr1799aDDz6omTNnKiYmRlOmTFFycrJee+21u316AAAAAAB4Da8KFJYtW6bw8HBNnz7dob1atWp65513dPnyZS1ZsuSOAoXw8HA1b95ckjRmzBj9/vvvTn2WLFmihIQERUZGqmDBgpKkq1evaty4cRowYICCg4NdPi8AAAAAAN7I7O4CXBEdHa1GjRpluL9Ro0aKjo6+o2On3YLyZrZu3aoGDRrYwwRJat26tWw2m6Kiou7ovAAAAAAAeCOvmqFw//3369ChQxnuP3TokIKCgjLt/MePH1fHjh0d2gICAlSoUCEdP348085rGIYSExMz7fj3QlJSksO/4RlMJpP8/PzcXUaOkJSUlO6lUoCreD+FN2CcwhswTuHpPHmMGoYhk8l0y35eFSg8+uijWrRokUqUKKEePXooX758kqTExER98skn+vzzz9W7d+9MO39cXJwCAgKc2gMDAxUbG2vfHjNm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UaNGZjxFeLkKFSpo0aJFDv+MHTtWkjRu3Di9/vrrjFO4XdOmTXXp0iUdPHjQ3nbx4kXt379flSpVkq+vr+rVq6e1a9c6PG7VqlUqW7asSpQoIUlq1KiRzGaz1q1bZ+8TGxurH374wWmM8rcCXFWsWDEdOHDAoS06OloXL15U8eLFJfH/fXged4zJmjVryt/fX6tXr7b3SU1N1bp16xyOlamy5OaUyJYuXbpkhIaGGj169DC2bdtmfP7550bt2rWNcePGubs0ZEOvvPKKYbFYjPnz5xt79+51+CftXrzffvutERISYkyfPt348ccfjddee82oWLGisWfPHodj9e3b12jSpImxatUqY+PGjUbbtm2NJ554wkhNTbX3OXnypFG9enVjyJAhxvbt240FCxYYlSpVMubOnZulzxve7ccffzQsFouxb98+exvjFO509epVo2PHjkbz5s2N7777ztiwYYPRuXNno27dusY///xjGIZh7Nq1y6hQoYLx+uuvGz/++KMxffp0IyQkxFi1apXDsV599VWjdu3axueff25s27bN6NGjh9G4cWMjLi7O3oe/FXAnFixYYFgsFmP8+PFGVFSU8d133xlt27Y1GjZsaFy4cMHej/dTZKXExERj9erVxurVq40ePXoYTZo0sW+fP3/eMAz3jMk5c+YYlStXNhYsWGBs377dGDJkiFGjRg3jzz//zPwXxTAMk2HcMNcCcMGxY8c0fvx47d27V/nz51dERIRGjBjhcL9U4F4IDw9XdHR0uvs2btxo/9Zs+fLl+vDDD3X27Fk99NBDev7559W0aVOH/larVZMnT9b69et15coVNWrUSK+88orTrIc9e/ZoypQpOnjwoIKCgtS9e3f95z//cbrND5CRnTt3qlevXvr8889VpUoVezvjFO504cIFTZ48WZs2bVJqaqpq166tsWPHOlwOsXHjRr377rs6ceKEihUrpv79+6tTp04Ox0lJSdE777yjr7/+WgkJCapZs6ZeeeUV+y0m0/C3AlxlGIaWLFmizz77TKdPn1b+/PlVvXp1jRgxwml88X6KrHLmzBk1a9Ys3X2LFi1SvXr1JGX9mDQMQx988IE+/fRTXbhwQRUqVNDYsWOzbGYNgQIAAAAAAHAZaygAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAAAAAAACXESgAQA4SHh6uMWPGuLsMuGjnzp0KCQnRzp07s/zcM2fOVEhIiC5cuHDLvoyvrOXKuEjru2bNmlv2HTNmjMLDw+9FidmezWZT27ZtNXv2bHeXkuNMnDhRISEhCgkJUY0aNdxdDpBjESgAyFG+/PJLhYSE6LfffsvS877//vvasGFDhvv//PNPvfbaa2rWrJmqVKmimjVrqmvXrlq4cKGSk5OzsFLPl5SUpJkzZ2b6h+stW7Zo5syZmXqOGy1evFhffvlllp7T3dzxOmdn3377rRYsWODuMnKMlStX6q+//lKPHj3sbQkJCZoxY4aeeeYZ1a1bVyEhIen+XttsNn355ZcaOHCgmjRpourVq6tt27Z67733dPny5XTPt3z5crVu3VpVqlRRy5Yt9fHHH6fbLyYmRsOGDVPt2rVVs2ZNDRo0SKdPn77l83Glpr/++kuRkZHq1KmT6tSpo3r16qlnz57avn2703HT/t+b3j/nzp1z6r9x40a1b99eVapU0SOPPKIZM2boypUrDn0iIiI0depU1a5d+5bPC0Dmye3uAgAgJ5gzZ45atWql5s2bO+3bvHmzhg0bJl9fX0VERMhisSg1NVW7d+/Wf//7Xx09elTjx493Q9WeKSkpSZGRkXruuedUr169TDvPli1btHjxYg0ZMiTTznGjzz77TPfdd586dOjg0F6nTh3t27dPPj4+WVbLnVizZo1MJpNLj3HH65xdpDcuVq5cqSNHjqhPnz53fNzx48fLMIx7UGH2N2/ePD322GMqUKCAve3ixYuaNWuWihUrppCQEP3000/pPjYpKUljx45V9erV1bVrV91///3au3evZs6cqR07dmjRokUOv09LlizR66+/rlatWunpp5/Wzz//rAkTJigpKUn9+/e390tISFCvXr1ktVo1YMAA+fj4aMGCBerRo4e++uor3XfffRk+H1dq2rhxoz788EM1b95c7du315UrV/T111/r6aef1qRJk9SxY0en4w8dOlQlSpRwaAsICHDY3rJliwYPHqy6devq1Vdf1R9//KHZs2fr/PnzGjdunL1f5cqVVblyZe3YsUMHDhzI8DkByFwECgDgRqdPn9aIESNUrFgxLVy4UIULF7bv6969u06dOqXNmze7r0DcMcMwdPnyZeXNm/euj2U2m5UnT557UFXm8vX1dXcJLktMTFS+fPncXcYdyaxxkRXBlTe/7mkOHDigQ4cOOV3mU7hwYf3www8qVKiQfvvtN3Xq1Cndx/v4+Oizzz5TzZo17W2dO3dW8eLF7R/gGzZsKElKTk7WO++8Y/+2Pq2vzWbT7Nmz1aVLFwUGBkqSPv30U508eVLLly9X1apVJUmNGzfW448/ro8++kjPP/98hs/JlZrq1aunTZs2KSgoyN63W7duioiI0IwZM9INFMLCwlSlSpWMX1RJU6dOVUhIiObPn6/cua99VMmfP7/mzJmjXr16qWzZsjd9PICsxSUPAJCOmJgYjR07Vg0bNlTlypX12GOP6fPPP3fql5KSohkzZqhFixaqXLmymjRpoqlTpyolJcXeJyQkRImJiVqxYoV9imfaH6Bz585VYmKiJk6c6BAmpCldurR69+5t375y5YpmzZql5s2bq3LlygoPD9fbb7/tcD7p2ofZ9957T2FhYapWrZp69uypI0eOpPtc4+LiNHHiRDVp0kSVK1dWixYt9MEHH8hms93Wa7Vlyxb16NFDNWrUUM2aNdWxY0d9++23Dn1Wr16tDh06qGrVqqpXr55GjRqlmJgYhz5jxoxRjRo1FBMTo2effVY1atRQ/fr19eabb+rq1auSpDNnzqhBgwaSpMjISPvref2U+WPHjmno0KGqW7euqlSpog4dOmjjxo0O50pNTVVkZKRatmypKlWqqF69eurWrZuioqLstSxevFiSHKbm3kx4eLgGDBigbdu22Z/rkiVLJElffPGFevXqpQYNGqhy5cpq06aNPv30U6fHHzlyRD/99JP9fD179pSU/rXyPXv2VNu2bXX06FH17NlT1apVU+PGjfXhhx861RYdHa2BAweqevXqatCggSZNmqRt27a5tC6D1WrVmDFjVLt2bdWqVUtjx45VUlKS03O4/sPV3b7OiYmJmjJlin1stmrVSvPmzXP69jw5OVkTJkxQvXr1VKNGDQ0cOFAxMTFOYyNtPYijR49q5MiRqlOnjp566ilJsn8wTLvsKDQ0VGPHjtXFixcdzpV2jBMnTmjUqFGqVauW6tevr3fffVeGYeivv/7SoEGDVLNmTYWGhmr+/Pm3fG2fe+45tW/f3qFt4MCBCgkJcRi7v/76q0JCQrRlyxZJzuOiZ8+e2rx5s6Kjo+2v5Y1rIaR9AE37YNe7d2+dOnXKoc+NayicOXNGISEhmjdvnpYuXWp//+nYsaP27dt3y+eXNt39p59+0htvvKEGDRqoSZMmkq6NzTfeeEOtWrWyvz8MHTpUZ86cSfcYu3fv1uTJk1W/fn1Vr15dgwcPdlrfw2azaebMmWrUqJH9/e/o0aPprvFxN+9/GzZskI+Pj9OUe19fXxUqVOiWj/f19XX44J6mRYsWkq69l6XZuXOnLl26ZB+vabp3767ExESH4Hnt2rWqUqWKPUyQpLJly6pBgwZavXr1Pavp4YcfdggT0h7fpEkT/f3334qPj0/3HPHx8fb39BsdPXpUR48eVefOne1hgiQ99dRTMgxDa9euvWn9ALIeMxQA4Ab//vuvOnfuLJPJpO7duysoKEhbt27Vyy+/rPj4ePtUYpvNpkGDBmn37t3q3LmzypYtqz/++EMLFy7UyZMn9d5770m69m3LK6+8oqpVq6pz586SpFKlSkmSNm3apJIlS6b7B1x6XnnlFa1YscI+5XXfvn2aM2eOjh07plmzZtn7TZ8+XbNnz1aTJk3UpEkT7d+/X3379lVqaqrD8ZKSktSjRw/FxMSoa9euKlq0qPbu3au3335b586d08svv3zTer788ku99NJLevjhhzVgwAAVKFBABw8e1LZt2/T444/b+4wdO1ZVqlTR888/r/Pnz2vRokXas2ePvvrqK4fprlevXtUzzzyjqlWr6sUXX9SOHTs0f/58lSxZUk899ZSCgoL0xhtv6I033lCLFi3sf+SmfQg9cuSIunXrpuDgYP3nP/9Rvnz5tHr1ag0ePFgzZ86094+MjNScOXP05JNPqmrVqoqPj9fvv/+u/fv3KzQ0VF26dNE///yjqKgoTZ069bZ+NpJ04sQJjRw5Ul26dFHnzp310EMPSbp2KcPDDz+s8PBw5c6dW5s2bdK4ceNkGIa6d+8uSXrppZc0fvx45cuXTwMHDpQkPfDAAzc9X2xsrPr166cWLVqodevWWrt2raZNmyaLxWL/wJaYmKjevXvr3Llz6tWrlx544AGtXLnS5TUohg8frhIlSuj555/XgQMHtHz5cgUFBemFF17I8DF38zobhqFBgwZp586d6tSpkypUqKBt27Zp6tSpiomJ0UsvvWTvO2bMGK1evVoRERGqVq2adu3a5TAF/EbDhg1T6dKlNWLECHs4sX37dp0+fVodOnRQoUKFdOTIES1btkxHjx7VsmXLnC7lGDFihMqWLauRI0dqy5Ytmj17tgoWLKglS5aofv36GjVqlL799lu9+eabqlKliurUqZNhPbVr19bGjRsVHx8vf39/GYahPXv2yGw26+eff1azZs0kST///LPMZrNq1aqV7nEGDhwoq9Wqv//+W2PHjpV07Zvd63344YcymUzq27ev4uPjNXfuXI0aNUrLly/PsL40K1euVEJCgrp06SKTyaS5c+dqyJAh9g/WtzJu3DgFBQVp8ODBSkxMlCT99ttv2rt3rx577DEVKVJE0dHR+uyzz9SrVy9999138vPzczjGhAkTFBAQoOeee07R0dFauHCh/u///k/vvvuuvc9bb72luXPnqmnTpmrcuLEOHTqkZ555xmkNgLt9/9u7d68sFss9n9Hx77//SpLDpQlpU/orV67s0LdSpUoym806ePCgIiIiZLPZdPjw4XRnB1SpUkU//PCDfZzdbU0ZOXfunPz8/Jx+dpLUq1cvJSYmysfHR40aNdKYMWP04IMP2venPc8bZzEEBwerSJEiOnjwoEt1A8gCBgDkIF988YVhsViMffv2ZdjnpZdeMkJDQ40LFy44tI8YMcKoVauWkZSUZBiGYXz11VdG+fLljV27djn0++yzzwyLxWLs3r3b3la9enVj9OjRDv2sVqthsViMQYMG3VbtBw8eNCwWi/Hyyy87tE+ZMsWwWCzGjh07DMMwjPPnzxuVKlUy+vfvb9hsNnu/t99+27BYLA51zJo1y6hevbpx4sQJh2NOmzbNqFChgnH27NkM64mLizNq1KhhPPnkk0ZycrLDvrTzpqSkGA0aNDDatm3r0GfTpk2GxWIxpk+fbm8bPXq0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LcT1xBNPOC2Slibten2bzSaLxWK/VvlGRYoUuem5/P39Vbhw4QwXS8yIq7fluxmbzabQ0FD169cv3f03hhKZ7cZvL12R9rPr27dvurMEpP99yPh/7d17XFTV/v/x9yAMQoiEmXkX9IB4IcG8EEReM9EyO5lZmQYSdVLzdsrMzE4etbI0tQviWGYdU7OOWWqWmRyNk5WaWeYN9KTmpYybXI39+8Mf++s4qAygM+jr+Xj0oFn7M2s+s1kOM59Za+0OHTros88+07p167Rp0ya9//77WrhwoZ599lkNGDCgwjmU9Wb3f//7n4YOHarg4GCNHz9e9evXl5eXlzZs2KC33nqr3JtflqUy58tZHh5lT2o83weqi3WeK6usD1SjRo3S1q1blZCQoLCwMPn6+qqkpETDhg0r8zmWdT7O9fsoz4fOyMhIvfHGGyosLNS3336rhx9+WP7+/vrLX/6i7777TnXq1JGkShcUKvJ7LFWZ5yeVfd6fe+45ffDBBxoyZIjatWunWrVqyWKx2O1vcabK5H+2yr7+BQQElLuYciGbNm3S448/ri5duthdGrFU3bp19eeff+r33383x4J0+oN3ZmamualvQECArFarjh8/7tBHaVtZGwBXJKczTZw4UV9++aVmzJhxzgJNWa677jplZGSYt0s3szx+/LhDAev48eN2G00CcA8UFADgDIGBgbrqqqtUUlJiXhrrXJo0aaKff/5ZUVFRFf6Q37VrVy1ZskRbt25VRETEeWMbNmyokpISHThwwO6yWb/99puys7PVsGFDSf/3Dd7+/fvVuHFjM+7EiRMO3/Q3adJEeXl5F3yuZSn9cL5nz55zfhtcmktGRobDm8yMjAyHbxvL41znuvS5enl5lev5BAQE6K9//av++te/6uTJk7r//vs1Z84c84NuVRVuvvjiCxUVFen111+3e75lLYmpymJRqYYNG2rv3r0yDMOu/9IZJhdbRc9zw4YNlZaW5rCBXHp6unlcOj3GSkpKdPDgQbsPgGdfueB8srKylJaWphEjRmj48OFme1UviTmfG264QcXFxfr444919OhRs3DQoUMHffvtt6pTp46aNWt2wY06L8YYupg+/fRT3XHHHXZXXygsLKzwUqDSf2P/+9//7F7//vjjjyp9/ZNOz7Iqz3KsC/n+++81fPhwtWnTRrNmzbK7ukGpsLAwSaeXkZVuuFp6u6SkxJz14+HhoZCQEO3YscOhj+3bt6tx48bl2pCxPDmVev75580Nevv27XvBvs/0yy+/2G30WPo8f/jhB7viwdGjR3XkyBGnl2oBuPjYQwEAzlCjRg316tVLn376qXbv3u1w/MwpsL1799bRo0e1dOlSh7iCggJzF3Pp9Fr3sr7JGjZsmHx9fTVx4kRzF+0z/e9//9PChQslyXwTWXq71Jtvvml3/MYbb5SXl5feeecdu2/tzr5f6XPYunWruQ79TNnZ2Tp16pRDe6mYmBjz2uBnr8ktfdw2bdqoTp06eu+99+ymsG7YsEH79u1Tly5dztn/uZTuHH72+axTp446duyoJUuW6NixYw73O/N3d/alAK+66io1adLELsdzPY6zSr/VPXsq9/Llyx1ifXx8quwbz1IxMTE6evSo3eUHCwsLyxy3Va0y5zk2NlZ//vmneVnJUm+99ZYsFotiY2MlnX5+khwuw/nOO++UO89zffNe1r+Zi+X666+Xl5eXUlJSFBAQYC4lat++vb7//nt988035Zqd4OPjU6l9OS61ss79okWLznlZwQuJioqSp6enFi9ebNd+9jiSKvf6J0nt2rXTnj17ypyeX1779u3TQw89pIYNGyo5OfmcU/o7d+6sgIAAh+e1ePFi+fj42L2W9urVSz/88IN++OEHsy09PV3//e9/deutt1ZZTtLpSx8vWLBADz/8cJn79JQqa/nIhg0b9OOPP9rNKPvLX/6i4OBgLV261G4MLF68WBaLpVz5A7i0mKEA4Iq0fPnyMt9EPvDAAxo7dqy+/vpr3X333RowYIBatGihrKws/fjjj0pLS9PmzZslSf369dPq1av1zDPP6Ouvv1ZkZKT+/PNPpaena82aNZo/f7556avWrVsrLS1Nb775pq699lo1atRI119/vZo0aaIZM2Zo9OjRiouLU79+/RQSEqKioiJt3bpVa9as0Z133ilJatmypfr3768lS5YoOztbHTp00A8//KAPP/xQPXr0MDeDDAwMVHx8vJKTk5WUlKSbb75ZP/30k1JTUx0u+ZWQkKAvvvhCDz/8sPr376/WrVsrPz9fu3fv1qeffqp169Y5rAkv5efnpyeffFITJ07UXXfdpb59+8rf318///yzCgoK9Pzzz8vLy0vjxo3Tk08+qfvvv199+vQxLxvZsGFD8xKczqhZs6ZatGih1atXq1mzZuaHr5CQED3zzDO69957ddttt+nuu+9W48aN9dtvv2nbtm06cuSIPvroI0lSnz591LFjR7Vu3VoBAQH64Ycf9Omnn9pt3Na6dWtJpy9TFxMToxo1aqhPnz5O5xsdHS0vLy89/PDDuueee3Ty5EktW7ZMderUcZiW3Lp1ay1evFivvfaamjZtqsDAQKemD5dl4MCBeueddzR27Fg98MADqlu3rlauXGlOP7+Y32hX5jx369ZNnTp10syZM3Xo0CGFhoZq06ZNWrdunYYMGWLOkGnTpo169eqlhQsXKjMz07xsZOnsgvI8Pz8/P3Xo0EHz589XcXGx6tWrp02bNlXJt8/l5ePjo9atW2vbtm3q2rWrmXeHDh2Ul5envLy8chUUWrdurVWrVmnatGlq27atfH191a1bt4udfoV16dJFK1askJ+fn1q0aKFt27bpq6++UkBAQIX6u+aaa/TAAw+YH3Jvuukm7dq1y3z9O3M8VOb1T5K6d++u1157TZs3bzYLW6XeeecdZWdnm8XN9evX68iRI5KkwYMHq1atWsrNzVVCQoKys7OVkJDgsEltkyZNzJlrNWvW1MiRI/WPf/xDI0eO1E033aRvv/1WH330kUaPHm13vu69914tW7ZMSUlJio+Pl6enp9566y3VqVPH3MS31ODBg7V582Zz3xVncvrss8/04osvqlmzZgoODtaKFSvsYqOjo80ZNffcc4/CwsLUpk0b1apVSz/99JOWL1+u+vXrm5fJLfX444/rkUceUXx8vPr06aPdu3fr3Xff1YABA+xm5wFwDxQUAFyRzv6Wp9Sdd96p6667TsuWLdOrr76qzz77TIsXL1ZAQIBatGihcePGmbEeHh569dVX9dZbb2nFihX67LPP5OPjo0aNGmnw4MF2GxGOHz9ekyZN0qxZs1RQUKD+/fubO8h3795dH330kWw2m9atW6fFixfLarUqNDRU48ePt5viOWXKFDVq1EgffvihPv/8c11zzTVKSkqym6YtnV4PbrVa9d577+nrr79WeHi4FixYoKSkJLs4Hx8fLVq0SMnJyVqzZo3+/e9/y8/PT82aNdOIESMuuFnggAEDVKdOHc2bN0+vvfaaPD09FRwcbFcouPPOO1WzZk2lpKRoxowZ8vX1VY8ePfT3v/+9wjukT5kyRc8995ymTZum4uJiDR8+XCEhIWrRooWWL1+uuXPn6sMPP1RmZqYCAwPVqlUrPfroo+b9Bw8erC+++EKbNm1SUVGRGjRooFGjRikhIcGMueWWWzR48GB98skn+uijj2QYRoUKCsHBwZo9e7ZmzZql559/Xtdcc40GDRqkwMBATZgwwS720Ucf1eHDhzV//nydPHlSHTt2rHRB4aqrrtLChQs1ZcoUvf322/L19dUdd9yhiIgIjRgxwqkN2pxVmfPs4eGh119/XbNnz9aqVav0wQcfqGHDhnr88ccdPhSVntdPPvlEn332mW688UbNnDlTt956a5m7xZflpZde0nPPPad//etfMgxD0dHRSklJOed+HBdD+/bttW3bNrsrOdStW1dNmzbVgQMHylVQuPfee7Vz50598MEHeuutt9SwYUO3Lig89dRT8vDw0MqVK1VYWKjIyEi9+eab59zXoDzGjRunmjVratmyZUpLS1O7du1ks9l077332o2Hyr7+tWnTRqGhoVq9erVDQWHBggXmxqGStHbtWq1du1bS6T16Sjfr/PXXXyWdHn9n69+/v91SuPvuu09eXl5asGCBvvjiC9WvX19PPvmkw8wAPz8/LVq0SFOnTtXrr7+ukpISderUSU8++aRDgeTkyZPmvgWSnMrp559/lnR6adDjjz/uEPv222+bBYXevXtrw4YN2rRpkwoKClS3bl0NGDBAw4cPd1jG07VrV82dO1dz587Vc889p8DAQCUlJdm9hgNwHxajKrenBQAA1cJbb72ladOmKTU1tVw7slc3O3fu1B133KEXX3xRt99+u6vTgYuVzuoaNWqUHnnkkSrr99///rf+8Y9/6Msvv6zyS0hebLm5uerUqZMmTJig++67z9XpOC0vL08FBQWaMmWK1q9fr61bt7o6JeCKxB4KAABc5s6+dnthYaGWLFmiZs2aXRbFhLKuTb9w4UJ5eHioQ4cOLsgIrnSu8SBJHTt2rNLHuv3229WgQYMy92hwd99++63q1avn0iuuVMbMmTMVFRWlTz75xNWpAFc0ZigAAHCZGzZsmBo0aKCWLVsqNzdXH330kfbs2aMZM2botttuc3V6lTZ37lzt2LFDnTt3Vo0aNZSamqrU1FQNHDhQ//jHP1ydHi6xDz74QB9++KFiY2Pl6+urLVu26OOPP1ZMTIxsNpur00MVycjIMJdn1KhRQ506dXJx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hhvs2nDluNAYPNOsWbOM++67r8w4xiAqqjxjcObMmUb37t2NkydPnrOfX3/91QgLCzPee+89s+2PP/4w2rVrZ8ybN89se+ONN4x27doZf/zxh9n23nvvGWFhYcaRI0cq+WxQHV1oDP7555/G9ddfb8yePduu/fHHHze6d+9u3uZ1EBX1+++/O7RNnDjRiIyMNMfnLbfcYowZM8YuZuDAgcawYcPM24xBVNSFxiCfSdwTMxQgD4/zDwNfX1/5+PjYtV111VVq0qSJ3dSh1NRU+fv7Kzo62mwLDg5WWFiYUlNT7eK6d+8uq9VqtsXFxSk7O1tbt26t7NNBNXShMVjqf//7n958801NnDixzOOMQVRUecbg+++/r7/+9a/y9fU9Z8zGjRtVUlKiW2+91WwLCAhQdHS0wxiMiopSQECA2da7d2+VlJRo06ZNFXsSqNYuNAYNw9CpU6dUq1Ytu/ZatWrZzZLhdRAVFRgY6NAWFham3Nxc5eXl6ZdfftH+/fvVu3dvu5i4uDilpaWZS7YYg6ioC41BPpO4JwoKqJDs7Gzt2bNHwcHBZlt6erqCgoJksVjsYoODg831w3l5efr111/t7lcaY7FYylxnDJT65z//qX79+qlly5ZlHmcM4mI5ePCgjh8/rquvvloPP/yw2rRpo44dO2rixIk6efKkGZeenq46deqodu3advdv3ry53dhKT093GIP+/v6qW7cuYxBlqlGjhu68806988472r59u06ePKmvvvpKK1as0P3332/G8TqIqvTdd9+pXr168vPzM8dFUFCQXUzz5s1VXFysX375RRJjEFXrzDFYFj6TuB4FBVTIiy++KIvFokGDBplt2dnZDt+cSFLt2rWVlZUlSeYaYn9/f7sYq9UqHx8fMw442xdffKGtW7fqscceO2cMYxAXy2+//SZJev7551W7dm2lpKRo9OjRWrNmjZ5++mkz7lxj0N/f325sZWdnO4xByX6sAmd75pln1LlzZw0YMECRkZF68MEHNWjQID344INmDK+DqCrffvutVq1apfj4eEkyx8XZ46b0dulxxiCqytljsCx8JnE9T1cngOpn+fLl5uZh1113navTwRWgsLBQU6dO1YgRI8qcDgdcbCUlJZJOfzP3/PPPS5KioqLk6empiRMnavTo0WrcuLErU8QVYMaMGfryyy81ZcoUNWvWTNu2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Fi5cqGuvvdY8dt999+nAgQP68ssvXZegmzh16pRKSkpktVor3Zenp6c8PV3zFuT333/Xhg0bNHny5Ar3URXnoCpZLBZ5e3u7Og1TjRo1VKNGjSrv18PDQ7169dKKFSs0cuRIWSyWKn8MAIBzmKEAALiizZ8/X3l5efrnP/9pV0wo1bRpUw0ZMsS8ferUKb366qvq0aOH2rRpo27duunll19WUVGR3f26deumpKQkffvtt7rrrrvUtm1bde/eXf/+97/NmA8++ECPPfaYJOmBBx5QaGioQkND7ZYJbNiwQffee6/atWuniIgIPfTQQ9qzZ4/dYx0/flxPPvmkYmNj1aZNG8XExOiRRx4xp41369ZNe/bs0ebNm83HON8eAKVr8m02m9566y316NFDbdu21b59+1RUVKRXXnlFd955p9q3b6927drp3nvv1X//+1+7+0dFRUmS5s6daz7mnDlzJJW9h0JoaKj+8Y9/6PPPP1ffvn3Vpk0b9enTR6mpqQ75ff3117rzzjvVtm1b9ejRQ++9916592X48ssvderUKd14441lHi8oKNCkSZPUqVMnRUZG6vHHH1dWVpZdzNl7KHz99dcKDQ3VqlWr9Prrrys2NlZt27bVkCFDdODAgQvmVJp7RkaGxo0bp/bt26tz586aNWuWDMPQr7/+qkceeUSRkZGKjo7WggUL7O5/rj0USs9l27Zt1bdvX3322WcOj33277pr164KDw/X/fffr927dzvEp6WlmePxhhtu0COPPKJ9+/bZxZS1h0JV/Xu48cYbdejQIe3cufOC5xUAcPExQwEAcEVbv369GjdurMjIyHLFT5w4UR9++KF69eqlBx98UNu3b1dycrL27dunV1991S72wIEDeuyxx3TXXXepf//+Wr58ucaPH6/WrVvrL3/5izp06KDBgwdr0aJFevjhhxUcHCxJat68uSTp3//+t8aPH6+YmBiNGzdO+fn5Wrx4se699159+OGHatSokSRpxIgR2rt3r+6//341bNhQJ06c0KZNm/Trr7+qUaNGmjBhgp577jn5+vrq4YcfliRdc801F3yuH3zwgQoLC3X33XfLarWqdu3ays3N1bJly9S3b18NGDBAJ0+e1Pvvv69hw4Zp2bJlCgsLU2BgoCZPnqzJkyerZ8+e6tmzpyRd8AP/d999p7Vr1+ree+/VVVddpUWL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\n" | |
| }, | |
| "metadata": {} | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "93774eec" | |
| }, | |
| "source": [ | |
| "---\n", | |
| "\n", | |
| "# Summary Report of LeetCode Contest Ratings\n", | |
| "\n", | |
| "## Descriptive Statistics Analysis\n", | |
| "The `summary` table provides descriptive statistics for LeetCode contest ratings, calculated using two approaches: 'full_midpoint' (including all bins) and 'core_1200_2250' (excluding the very low and very high rating bins).\n", | |
| "\n", | |
| "### Key Observations:\n", | |
| "- **Total Users:** There are `N` total users included in this analysis, which is `860071`.\n", | |
| "- **Tail Mass:** Approximately `1.305357%` (`11227` users) of the total users fall into the last wide bin (ratings >= 2250). The 'core' dataset now specifically focuses on ratings between 1200 and 2250, excluding both the lowest and highest rating groups to provide a more representative view of the central rating distribution.\n", | |
| "- **Mean and Standard Deviation:**\n", | |
| " - **Full Midpoint:** The mean rating is `1551.79` with a standard deviation of `418.50`. The high standard deviation indicates a wide spread of ratings when the last bin (up to 9950) is included.\n", | |
| " - **Core (1200 < x <= 2250):** When the very low and very high ratings are excluded, the mean rating is `1525.56`, and the standard deviation is `158.69`. This shows a more concentrated distribution for the majority of active users within this specific range, with a significantly lower spread.\n", | |
| "- **Skewness:**\n", | |
| " - **Full Midpoint:** The skewness is `8.92`, indicating a very strong positive (right) skew. This is primarily caused by the long tail of extremely high ratings.\n", | |
| " - **Core (1200 < x <= 2250):** The skewness is `1.46`, which is still positive but significantly lower than the full dataset. This suggests that even within this core range, there is a slight tendency for more users to be on the lower end of this interval, with a tail extending towards higher ratings within the core.\n", | |
| "- **Kurtosis (Excess):**\n", | |
| " - **Full Midpoint:** The kurtosis is `94.44`, which is extremely high. This points to a highly 'peaked' distribution with very heavy tails, largely driven by the extreme values in the widest bins.\n", | |
| " - **Core (1200 < x <= 2250):** The kurtosis is `2.64`, which is still positive (leptokurtic) but substantially lower than the full dataset. This indicates that while the distribution within the core range has a sharper peak and heavier tails than a normal distribution, it is far less extreme than the overall distribution.\n", | |
| "- **Percentiles:** The percentiles for both 'full_midpoint' and 'core_1200_2250' are very similar up to the 90th percentile. However, for `p99` and `max`, the 'full_midpoint' values (`2175.0` and `6100.0` respectively) are much higher than the 'core' values (`2075.0` and `2225.0`), clearly demonstrating the impact of the high-rating outliers that are excluded from the core analysis.\n", | |
| "\n", | |
| "### Conclusion\n", | |
| "The LeetCode contest rating distribution for all users is heavily right-skewed and leptokurtic due to a small number of extremely highly rated users and the broadness of the highest rating bin. By analyzing the 'core' dataset (ratings between 1200 and 2250), we gain a more focused and representative understanding of the majority of active users. This core distribution is still positively skewed and leptokurtic, but to a much lesser degree, emphasizing the significant influence of outlying data points and the choice of data range on descriptive statistical analysis." | |
| ] | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment