Skip to content

Instantly share code, notes, and snippets.

@QuantumDamage QuantumDamage/026.ipynb
Last active Jan 19, 2019

Embed
What would you like to do?
Jakość powietrza w Polsce #3 - gdzie brakuje nam czujników?
{
"cells": [
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\nimport requests\nimport pandas as pd\nimport numpy as np\nimport json",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import time",
"execution_count": 2,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "r = requests.get('http://api.gios.gov.pl/pjp-api/rest/station/findAll')\nallStations = pd.io.json.json_normalize(r.json())",
"execution_count": 3,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "pollutants = [\"PM2.5\", \"PM10\", \"C6H6\", \"NO2\", \"SO2\", \"O3\", \"CO\"]",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def get_sensors(Id):\n stationId = Id\n r = requests.get('http://api.gios.gov.pl/pjp-api/rest/station/sensors/' + str(stationId))\n \n sensors = pd.io.json.json_normalize(r.json())\n return sensors[[\"param.paramCode\",\"id\"]].set_index(\"param.paramCode\").to_dict(orient = \"index\")",
"execution_count": 5,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "allStations[\"gegrLat\"] = allStations[\"gegrLat\"].astype(\"float\")\nallStations[\"gegrLon\"] = allStations[\"gegrLon\"].astype(\"float\")",
"execution_count": 6,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%%time\nallStations[\"sensors\"] = allStations[\"id\"].apply(get_sensors)",
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": "CPU times: user 3.13 s, sys: 91 ms, total: 3.22 s\nWall time: 6min 43s\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "allStations2 = pd.concat([allStations, allStations['sensors'].str.join('|').str.get_dummies()], axis=1, sort=False)\nallStations2[pollutants].sum()",
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 8,
"data": {
"text/plain": "PM2.5 64\nPM10 136\nC6H6 54\nNO2 144\nSO2 126\nO3 101\nCO 77\ndtype: int64"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "#points = allStations2[allStations2[\"PM2.5\"] == 1][[\"gegrLat\",\"gegrLon\"]].values\n#points = allStations2[allStations2[\"PM10\"] == 1][[\"gegrLat\",\"gegrLon\"]].values\n#points = allStations2[allStations2[\"C6H6\"] == 1][[\"gegrLat\",\"gegrLon\"]].values\n#points = allStations2[allStations2[\"NO2\"] == 1][[\"gegrLat\",\"gegrLon\"]].values\n#points = allStations2[allStations2[\"SO2\"] == 1][[\"gegrLat\",\"gegrLon\"]].values\n#points = allStations2[allStations2[\"O3\"] == 1][[\"gegrLat\",\"gegrLon\"]].values\npoints = allStations2[allStations2[\"CO\"] == 1][[\"gegrLat\",\"gegrLon\"]].values",
"execution_count": 9,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "points",
"execution_count": 10,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 10,
"data": {
"text/plain": "array([[51.129378, 17.02925 ],\n [51.086225, 17.012689],\n [51.204503, 16.180513],\n [50.768729, 16.269677],\n [51.150391, 15.008175],\n [50.913433, 15.765608],\n [51.119011, 15.275539],\n [53.121764, 17.987906],\n [53.134083, 17.995708],\n [51.75805 , 19.529786],\n [51.775411, 19.4509 ],\n [51.856692, 19.421231],\n [51.754613, 19.434925],\n [51.404406, 19.696956],\n [51.067439, 19.448694],\n [52.080625, 21.111186],\n [50.349608, 18.236575],\n [50.024242, 22.010575],\n [50.040675, 22.004656],\n [50.529892, 22.112467],\n [54.305908, 22.307681],\n [53.694628, 19.968892],\n [52.398175, 16.959519],\n [52.420319, 16.877289],\n [51.749053, 18.048389],\n [52.225633, 18.269036],\n [53.154408, 16.759572],\n [52.449331, 16.999683],\n [50.329111, 19.231222],\n [50.246795, 19.019469],\n [50.3165 , 18.772375],\n [50.111181, 18.516139],\n [50.029416, 18.689527],\n [49.802075, 19.04861 ],\n [50.817676, 19.117426],\n [50.836389, 19.130111],\n [49.738136, 18.639069],\n [50.007629, 18.455548],\n [50.878998, 20.633692],\n [50.429014, 21.277367],\n [51.1211 , 20.880631],\n [53.789233, 20.486075],\n [54.167847, 19.410942],\n [50.057678, 19.926189],\n [50.069308, 20.053492],\n [50.018253, 20.992578],\n [53.126689, 23.155869],\n [53.859528, 23.00075 ],\n [54.353336, 18.635283],\n [54.400833, 18.657497],\n [54.560836, 18.493331],\n [54.328336, 18.557781],\n [54.431667, 18.579722],\n [54.380279, 18.620274],\n [54.463611, 17.046722],\n [54.120694, 17.975861],\n [54.031247, 19.032899],\n [54.546167, 17.746194],\n [54.104111, 18.182972],\n [50.159406, 19.477464],\n [49.293564, 19.960083],\n [52.219298, 21.004724],\n [52.556279, 19.687672],\n [52.550938, 19.709791],\n [51.399084, 21.147474],\n [51.83512 , 20.791556],\n [52.115725, 21.237297],\n [52.656866, 18.987368],\n [51.259431, 22.569133],\n [52.738214, 15.228667],\n [51.939783, 15.518861],\n [52.437722, 15.122444],\n [51.799722, 16.3175 ],\n [51.642656, 15.127808],\n [53.017628, 18.612808],\n [52.658467, 19.059314],\n [53.49355 , 18.762139]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "lat_max = points[:,0].max()\nlat_min = points[:,0].min()\nlon_max = points[:,1].max()\nlon_min = points[:,1].min()\n\n\nlat_max, lat_min, lon_max, lon_min",
"execution_count": 11,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 11,
"data": {
"text/plain": "(54.560836, 49.293564, 23.155869, 15.008175)"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from scipy.spatial import voronoi_plot_2d\nfrom scipy.spatial import Voronoi\n\nvor = Voronoi(points)",
"execution_count": 12,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "vertices = pd.DataFrame(vor.vertices, columns = [\"Lat\", \"Lon\"])",
"execution_count": 13,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import matplotlib.pyplot as plt\nvoronoi_plot_2d(vor)\nplt.show()\n",
"execution_count": 14,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "vertices[(vertices[\"Lat\"] < lat_max) & (vertices[\"Lat\"] > lat_min)]",
"execution_count": 15,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 15,
"data": {
"text/plain": " Lat Lon\n2 49.897723 18.583786\n3 49.854969 18.830590\n4 49.308101 16.986539\n5 51.003759 17.803593\n6 54.479894 18.121208\n7 54.375205 18.275268\n8 53.296104 22.147586\n9 54.075733 15.687073\n10 52.667340 16.069961\n11 52.708752 18.240208\n12 52.945606 18.279678\n13 53.513054 17.383704\n14 50.008111 18.573507\n15 50.193205 18.660792\n16 50.159064 18.315523\n17 50.384333 18.507644\n18 51.782235 17.330251\n19 49.849356 17.101874\n20 50.846444 17.701989\n21 54.413209 18.412363\n24 52.597859 16.056563\n25 52.582287 16.043141\n26 51.935533 16.790836\n27 51.761505 16.953055\n30 52.429693 15.623297\n31 53.628493 18.040671\n32 54.107948 17.443307\n33 54.466625 18.107778\n34 53.721794 17.300789\n35 53.615311 17.385385\n.. ... ...\n108 50.137116 18.855150\n109 49.633657 19.552235\n110 50.036401 19.216659\n111 50.047572 19.218790\n112 52.164610 19.034313\n113 53.257792 19.421552\n114 53.134216 19.074293\n115 53.059749 19.014394\n117 49.850550 21.502581\n118 49.970607 21.499921\n119 51.417238 20.348145\n120 51.421510 20.322266\n121 50.737898 21.014177\n122 50.447929 20.811464\n123 51.401440 18.963387\n124 51.408946 19.337980\n125 50.648311 19.509588\n126 50.618141 19.612016\n127 50.899488 20.029468\n128 52.185398 19.609821\n129 52.294766 19.322655\n130 53.123465 19.836333\n131 53.213456 19.472058\n132 50.719729 20.000882\n133 50.334253 20.538827\n134 49.622034 20.500106\n135 50.624694 19.818841\n136 50.678968 19.933613\n137 49.660411 19.600233\n138 49.679250 20.024944\n\n[130 rows x 2 columns]",
"text/html": "<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>Lat</th>\n <th>Lon</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>2</th>\n <td>49.897723</td>\n <td>18.583786</td>\n </tr>\n <tr>\n <th>3</th>\n <td>49.854969</td>\n <td>18.830590</td>\n </tr>\n <tr>\n <th>4</th>\n <td>49.308101</td>\n <td>16.986539</td>\n </tr>\n <tr>\n <th>5</th>\n <td>51.003759</td>\n <td>17.803593</td>\n </tr>\n <tr>\n <th>6</th>\n <td>54.479894</td>\n <td>18.121208</td>\n </tr>\n <tr>\n <th>7</th>\n <td>54.375205</td>\n <td>18.275268</td>\n </tr>\n <tr>\n <th>8</th>\n <td>53.296104</td>\n <td>22.147586</td>\n </tr>\n <tr>\n <th>9</th>\n <td>54.075733</td>\n <td>15.687073</td>\n </tr>\n <tr>\n <th>10</th>\n <td>52.667340</td>\n <td>16.069961</td>\n </tr>\n <tr>\n <th>11</th>\n <td>52.708752</td>\n <td>18.240208</td>\n </tr>\n <tr>\n <th>12</th>\n <td>52.945606</td>\n <td>18.279678</td>\n </tr>\n <tr>\n <th>13</th>\n <td>53.513054</td>\n <td>17.383704</td>\n </tr>\n <tr>\n <th>14</th>\n <td>50.008111</td>\n <td>18.573507</td>\n </tr>\n <tr>\n <th>15</th>\n <td>50.193205</td>\n <td>18.660792</td>\n </tr>\n <tr>\n <th>16</th>\n <td>50.159064</td>\n <td>18.315523</td>\n </tr>\n <tr>\n <th>17</th>\n <td>50.384333</td>\n <td>18.507644</td>\n </tr>\n <tr>\n <th>18</th>\n <td>51.782235</td>\n <td>17.330251</td>\n </tr>\n <tr>\n <th>19</th>\n <td>49.849356</td>\n <td>17.101874</td>\n </tr>\n <tr>\n <th>20</th>\n <td>50.846444</td>\n <td>17.701989</td>\n </tr>\n <tr>\n <th>21</th>\n <td>54.413209</td>\n <td>18.412363</td>\n </tr>\n <tr>\n <th>24</th>\n <td>52.597859</td>\n <td>16.056563</td>\n </tr>\n <tr>\n <th>25</th>\n <td>52.582287</td>\n <td>16.043141</td>\n </tr>\n <tr>\n <th>26</th>\n <td>51.935533</td>\n <td>16.790836</td>\n </tr>\n <tr>\n <th>27</th>\n <td>51.761505</td>\n <td>16.953055</td>\n </tr>\n <tr>\n <th>30</th>\n <td>52.429693</td>\n <td>15.623297</td>\n </tr>\n <tr>\n <th>31</th>\n <td>53.628493</td>\n <td>18.040671</td>\n </tr>\n <tr>\n <th>32</th>\n <td>54.107948</td>\n <td>17.443307</td>\n </tr>\n <tr>\n <th>33</th>\n <td>54.466625</td>\n <td>18.107778</td>\n </tr>\n <tr>\n <th>34</th>\n <td>53.721794</td>\n <td>17.300789</td>\n </tr>\n <tr>\n <th>35</th>\n <td>53.615311</td>\n <td>17.385385</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>108</th>\n <td>50.137116</td>\n <td>18.855150</td>\n </tr>\n <tr>\n <th>109</th>\n <td>49.633657</td>\n <td>19.552235</td>\n </tr>\n <tr>\n <th>110</th>\n <td>50.036401</td>\n <td>19.216659</td>\n </tr>\n <tr>\n <th>111</th>\n <td>50.047572</td>\n <td>19.218790</td>\n </tr>\n <tr>\n <th>112</th>\n <td>52.164610</td>\n <td>19.034313</td>\n </tr>\n <tr>\n <th>113</th>\n <td>53.257792</td>\n <td>19.421552</td>\n </tr>\n <tr>\n <th>114</th>\n <td>53.134216</td>\n <td>19.074293</td>\n </tr>\n <tr>\n <th>115</th>\n <td>53.059749</td>\n <td>19.014394</td>\n </tr>\n <tr>\n <th>117</th>\n <td>49.850550</td>\n <td>21.502581</td>\n </tr>\n <tr>\n <th>118</th>\n <td>49.970607</td>\n <td>21.499921</td>\n </tr>\n <tr>\n <th>119</th>\n <td>51.417238</td>\n <td>20.348145</td>\n </tr>\n <tr>\n <th>120</th>\n <td>51.421510</td>\n <td>20.322266</td>\n </tr>\n <tr>\n <th>121</th>\n <td>50.737898</td>\n <td>21.014177</td>\n </tr>\n <tr>\n <th>122</th>\n <td>50.447929</td>\n <td>20.811464</td>\n </tr>\n <tr>\n <th>123</th>\n <td>51.401440</td>\n <td>18.963387</td>\n </tr>\n <tr>\n <th>124</th>\n <td>51.408946</td>\n <td>19.337980</td>\n </tr>\n <tr>\n <th>125</th>\n <td>50.648311</td>\n <td>19.509588</td>\n </tr>\n <tr>\n <th>126</th>\n <td>50.618141</td>\n <td>19.612016</td>\n </tr>\n <tr>\n <th>127</th>\n <td>50.899488</td>\n <td>20.029468</td>\n </tr>\n <tr>\n <th>128</th>\n <td>52.185398</td>\n <td>19.609821</td>\n </tr>\n <tr>\n <th>129</th>\n <td>52.294766</td>\n <td>19.322655</td>\n </tr>\n <tr>\n <th>130</th>\n <td>53.123465</td>\n <td>19.836333</td>\n </tr>\n <tr>\n <th>131</th>\n <td>53.213456</td>\n <td>19.472058</td>\n </tr>\n <tr>\n <th>132</th>\n <td>50.719729</td>\n <td>20.000882</td>\n </tr>\n <tr>\n <th>133</th>\n <td>50.334253</td>\n <td>20.538827</td>\n </tr>\n <tr>\n <th>134</th>\n <td>49.622034</td>\n <td>20.500106</td>\n </tr>\n <tr>\n <th>135</th>\n <td>50.624694</td>\n <td>19.818841</td>\n </tr>\n <tr>\n <th>136</th>\n <td>50.678968</td>\n <td>19.933613</td>\n </tr>\n <tr>\n <th>137</th>\n <td>49.660411</td>\n <td>19.600233</td>\n </tr>\n <tr>\n <th>138</th>\n <td>49.679250</td>\n <td>20.024944</td>\n </tr>\n </tbody>\n</table>\n<p>130 rows × 2 columns</p>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "proper_vertices = pd.DataFrame(vertices[(vertices[\"Lon\"] < lon_max) & \n (vertices[\"Lon\"] > lon_min) & \n (vertices[\"Lat\"] < lat_max) & \n (vertices[\"Lat\"] > lat_min)], copy = True)",
"execution_count": 16,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import geopy.distance",
"execution_count": 17,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "for index, row in proper_vertices.iterrows():\n list_of_dists = []\n for point in points:\n #list_of_dists.append(np.sqrt(np.square(row[\"Lat\"] - point[0]) + np.square(row[\"Lon\"] - point[0])))\n coords_1 = (row[\"Lat\"], row[\"Lon\"])\n coords_2 = (point[0], point[1])\n #print(coords_1,coords_2)\n list_of_dists.append(geopy.distance.vincenty(coords_1, coords_2).km)\n #print(list_of_dists)\n proper_vertices.at[index, 'dist'] = min(list_of_dists)",
"execution_count": 18,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "proper_vertices.sort_values(\"dist\").tail(n=1)",
"execution_count": 19,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 19,
"data": {
"text/plain": " Lat Lon dist\n4 49.308101 16.986539 128.84905",
"text/html": "<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>Lat</th>\n <th>Lon</th>\n <th>dist</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>4</th>\n <td>49.308101</td>\n <td>16.986539</td>\n <td>128.84905</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import folium\nfrom folium.plugins import MarkerCluster",
"execution_count": 20,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "boulder_coords = [lat_min + (lat_max - lat_min)/2, lon_min + (lon_max - lon_min)/2]",
"execution_count": 21,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "my_map = folium.Map(location = boulder_coords)\nmy_map.fit_bounds(bounds=[(lat_min, lon_min), (lat_max, lon_max)])",
"execution_count": 22,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "for point in points:\n folium.Marker(point).add_to(my_map)",
"execution_count": 23,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from geopy.geocoders import Nominatim\ngeolocator = Nominatim(user_agent=\"jakbadacdane.pl\")",
"execution_count": 24,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "for index, row in proper_vertices.sort_values(\"dist\", ascending=False).iterrows():\n location = geolocator.reverse(\"{}, {}\".format(row[\"Lat\"], row[\"Lon\"]), timeout = 30)\n #print(location.raw)\n #print(row[\"Lat\"], row[\"Lon\"])\n \n if location.raw == {'error': 'Unable to geocode'}:\n print(\"Out of space\")\n continue\n \n try:\n is_poland = location.raw[\"address\"][\"country\"] == \"RP\"\n except KeyError:\n print(location)\n break\n \n if is_poland:\n print(location)\n folium.Circle(radius=row[\"dist\"]*1000, location=[row[\"Lat\"], row[\"Lon\"]], fill = True).add_to(my_map)\n break\n else:\n print(location.raw[\"address\"][\"country\"])",
"execution_count": 25,
"outputs": [
{
"output_type": "stream",
"text": "Česko\nŚwielubie, gmina Dygowo, powiat kołobrzeski, zachodniopomorskie, 78-113, RP\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "#for index, row in proper_vertices.sort_values(\"dist\").tail(n=1).iterrows():\n# #print(row[\"dist\"]*1000)\n# folium.Circle(radius=row[\"dist\"]*1000, location=[row[\"Lat\"], row[\"Lon\"]], fill = True).add_to(my_map)",
"execution_count": 26,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "my_map",
"execution_count": 27,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 27,
"data": {
"text/plain": "<folium.folium.Map at 0x7f74518fbba8>",
"text/html": "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNTEuOTI3MiwxOS4wODIwMjJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyXzdmOGFmY2Y4ODAyYjRmNGViNzM5OWYwZTEyMTgxZGQyID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICJtYXhab29tIjogMTgsCiAgIm1pblpvb20iOiAxLAogICJub1dyYXAiOiBmYWxzZSwKICAic3ViZG9tYWlucyI6ICJhYmMiCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAKICAgIAogICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgbWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0LmZpdEJvdW5kcygKICAgICAgICAgICAgICAgICAgICBbWzQ5LjI5MzU2NCwgMTUuMDA4MTc1XSwgWzU0LjU2MDgzNiwgMjMuMTU1ODY5XV0sCiAgICAgICAgICAgICAgICAgICAge30KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZDgyZGVjZGRmOWI0NjUyYjkzYjA3ZTA0ODAxNTM0OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjEyOTM3OCwxNy4wMjkyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWM0OTMyMjA3ODI2NDZiN2E1YjBlOWNlNjQ1MjgzZjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4wODYyMjUsMTcuMDEyNjg5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZGRjMTY1NTc1OTg0ZTQyOTVmOTM1MTQxZjY2ZWI4NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjIwNDUwMywxNi4xODA1MTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M2ZTkzYTVhYjkzZTRlNWU5OTM2NjE2OTliYzU1NTgxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNzY4NzI5LDE2LjI2OTY3N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWJmYjUzZmIzMjZkNDI3MzhkNmJlZTE5OTY4ZGQ3NGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4xNTAzOTEsMTUuMDA4MTc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MGM2ZWZhMjRiZDc0ZTEwYmI4ODRjYjM2ZDZkYTFiZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjkxMzQzMywxNS43NjU2MDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBiZGZjM2EyMGRmNjQ0NTdiNzRkZmVmODE4ZDg1ZTdhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMTE5MDExLDE1LjI3NTUzOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzM2NGZkODEzMDM3NDYyNDhlNGJmZDc5NGU4MTYxYmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4xMjE3NjQsMTcuOTg3OTA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZmJhOGNjNGY4YWQ0MzBjOGFkODI4YThkZmIyMTRmZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjEzNDA4MywxNy45OTU3MDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhkNGU5OTc2MDZhMzQ2YWQ5NTE4YjA3ZTViZjcxZTI0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzU4MDUsMTkuNTI5Nzg2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZGJlYzg0NWUxMGM0NDViOGM4N2IwMjg1ZTUzMGUxMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjc3NTQxMSwxOS40NTA5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMmJiMDUyNTcwOWY0ZmI1OTQxNzJlYzllOTgxYjdlMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg1NjY5MiwxOS40MjEyMzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzViN2MzMjc4ZmEyZjQ3MTI5ZjgyYTNkZjNkY2NiNzk1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzU0NjEzLDE5LjQzNDkyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODNlNDA1YzdjZTQyNGMyNjg5MmZmNDZkY2U4NzE1OWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS40MDQ0MDYsMTkuNjk2OTU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYTllNmQxMDEyODk0MmFhODc1NjA3NTZjMjgzNjg3ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjA2NzQzOSwxOS40NDg2OTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZkYzZhN2UxMDM2MjRhYWU4OGIwOTRmMmJiNDE4MWE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMDgwNjI1LDIxLjExMTE4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTM4ODBkYzFiNmQzNGY2OGI0ZjBkNmI1ZWQwYmNlNmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zNDk2MDgsMTguMjM2NTc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NDNlMTZkM2UxOWQ0MWI2YjQ3MmNkNjQ0ZjY3NzQ0MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjAyNDI0MiwyMi4wMTA1NzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdiZTIyMDI4YzU4ODQxYjlhOTIwYjI2MGRhNTMxMTlhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMDQwNjc1LDIyLjAwNDY1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2Q1MjNhM2E4M2I1NDg3NTg2YTg2OTg3ZjFlYTEzMGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC41Mjk4OTIsMjIuMTEyNDY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYTdhNTk4YWI3YTk0NjRkOGZlMTMzNTI1ODMyNjhiZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzU0LjMwNTkwOCwyMi4zMDc2ODFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFmODA4MmU0NDdmYzRmMWU4OTFlNTY2YmEwOWVkMjJhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuNjk0NjI4LDE5Ljk2ODg5Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDUyOWI1ODEwNjI1NDFhYjhkZTkzMzVmMTk2OWI0ODYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4zOTgxNzUsMTYuOTU5NTE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81YThmZmUyMDEyM2M0YzE4YTY3MzdhODRiYjBhOGFiMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjQyMDMxOSwxNi44NzcyODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VjZDNjOWY2MTdlYzQ3YjA4OTI2NGQ2ZDBmZGNkODcwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzQ5MDUzLDE4LjA0ODM4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzk5YmUyNWE1Mjg1NDBiZWExZTY0M2VlNThjMGUwZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4yMjU2MzMsMTguMjY5MDM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MTAxYzc4Yzc2NWU0MDlkYTdjNTkwZmZlMmZjZGQ4NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjE1NDQwOCwxNi43NTk1NzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVlZDhhOWY4OTBlZjQ3NDRiZDU0YTRhZDQwMjg1NzkwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDQ5MzMxLDE2Ljk5OTY4M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGYxZmZkNzkwODQ1NDVhZjkwOTA0NWMzMzYzZGM0ODIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zMjkxMTEsMTkuMjMxMjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNjM2OTljNDVkZTU0MGFlYjQ0NTM2NTZlNzY1ZDQxNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjI0Njc5NSwxOS4wMTk0NjldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc2NjRhMTdjNWUwNjRlZjQ5ZDIwYzdkNjIyNDZjNjY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMzE2NSwxOC43NzIzNzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FhNGIzMmM2MTg3ODQzZjlhYzg5MjUxNzkyNDc0YjU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMTExMTgxLDE4LjUxNjEzOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmNkODY0ZWNlMmRmNGNkN2FjZTMzMGJkY2QxNzQ1OGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4wMjk0MTYsMTguNjg5NTI3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYjNiODEzYjM2Y2Q0NTQ4YTljZWMxY2RmZDMxNWZiNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjgwMjA3NSwxOS4wNDg2MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzNjYjU1ZTMwMWRjNGExNWJjYmMwOGFkOWZhYTcyYmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC44MTc2NzYsMTkuMTE3NDI2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MTY2NWE1MmExZTY0MjRlYWVmZTg4NWQ3ZmJkMjg2YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjgzNjM4OSwxOS4xMzAxMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ2NWJkM2ZkMWUwNTQyZGRiNDU0YWY3N2YyZWFmZTRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzM4MTM2LDE4LjYzOTA2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTk5ZDA4MWQyZDMxNDY5NjlkYjFmZjRlZjYwNGE0OTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4wMDc2MjksMTguNDU1NTQ4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZGNkOTgxMGQ5ZTU0YzUyODdiZWZmODVjYTQ4YThlZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjg3ODk5OCwyMC42MzM2OTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ExZTU0ZDk2ZTU5YjRhMjlhOTczMmYyMTQyMTMzYzJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDI5MDE0LDIxLjI3NzM2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWU5ZGQ1ZTlhODY3NDBjNmI3ODI3MGRmODQ3NTQzYWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4xMjExLDIwLjg4MDYzMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjQyNDBiOWM1MmEyNDI4N2IyMjllYTQ0NzdlY2QzNDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1My43ODkyMzMsMjAuNDg2MDc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNDkwNDE3NzJhZjU0ZjExOWQwZmJkZmI0MmRhNmE0NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzU0LjE2Nzg0NywxOS40MTA5NDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA1OTFlZTE4NDA0ODQ2NDc4MzRmOGVlM2E4OWZlNTQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMDU3Njc4LDE5LjkyNjE4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzgxMWYxYjgzNTNhNGMxZThiNTYwNmNhZDY4NzE2Y2EgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4wNjkzMDgsMjAuMDUzNDkyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84MmUwNzFmMWUwNGI0ZmRkYmY0NTgxODhkM2JmYjA1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjAxODI1MywyMC45OTI1NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ4ZjQyM2U1YmQyYjQ1ZWFhMWFhYjk3MDk0NjYxZTk2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMTI2Njg5LDIzLjE1NTg2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWRlOTdkZjcwOWE3NGZkNmJkNDI1MmIzZTgzODQwNTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1My44NTk1MjgsMjMuMDAwNzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y5NmU1NDgwNWFlNTQxN2Q5NjYxMzk3NzE0MDUzMTBkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuMzUzMzM2LDE4LjYzNTI4M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGJlNzY2NTVkNTE4NDc4YTkzMGFhNDdiOTZjYWJjMzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1NC40MDA4MzMsMTguNjU3NDk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMjgyZTM3OWMyNTI0MWNmYWRmNzBlNzJjMWNhNzM4MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzU0LjU2MDgzNiwxOC40OTMzMzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAzY2UzYWEwYjVlZTQ0NjU4MDVjZWYwODViYTdlYjQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuMzI4MzM2LDE4LjU1Nzc4MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDE2NDAzNWQ2ZDRhNDY4Zjk2OGQwM2UzOGVjMmEwY2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1NC40MzE2NjcsMTguNTc5NzIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NWRkZTI3ZjY0YzE0NGE5ODgzM2IwNzNmZmYxODg1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzU0LjM4MDI3OSwxOC42MjAyNzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk5YTQxZTMwZjZmMzRjMTE4Y2MyNjVhMjAzZjY2NGE3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuNDYzNjExLDE3LjA0NjcyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmFmYzg0ZTNkZGE3NGUwZWJhYmFlNGI4NTdmMTU1ZWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1NC4xMjA2OTQsMTcuOTc1ODYxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYTVhZDUyODMyNzM0Y2ExYmQzMzRlZWUzNDc2MDJhNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzU0LjAzMTI0NywxOS4wMzI4OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VlMjUyNGQzY2JhNDQwMWQ4NjUzMTZkMzE1ODYwYzVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuNTQ2MTY3LDE3Ljc0NjE5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTJhYTgzOWM3YWZmNDdkNThlZjFiYWE0YTFhMDc5ZGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1NC4xMDQxMTEsMTguMTgyOTcyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNmYwMTgwNDc1MWY0MGIyOGE2NDM2NmY0NDgxZDg4NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjE1OTQwNiwxOS40Nzc0NjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlkZmZiYmUzZTQ4NzQ2NTNhZjJkY2FjYTVkZWM0NWFiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuMjkzNTY0LDE5Ljk2MDA4M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTZjYTYwMjAzYjM4NDJkMDkwM2U0ZWI0MjQ2ZjA5MjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4yMTkyOTgsMjEuMDA0NzI0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNWMyOTg3Y2E3MGQ0ZjZjYWQ5MzA2M2RkMDYwNjg5NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjU1NjI3OSwxOS42ODc2NzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMzOTUwMjVkNDBmZDQ1MjViOTNmNTA1ZjBhNWI1NWE4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNTUwOTM4LDE5LjcwOTc5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjQ4N2U4MTE1NzQyNDY4Zjk4YjAxNzZiODU4NjkzM2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4zOTkwODQsMjEuMTQ3NDc0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MjUzZjYwMWEzMjY0NWJjYjRmZDUwOWJiZmZhM2IzYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjgzNTEyLDIwLjc5MTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2I4Mzg1MjhjZDNjNDE2YWI1Zjg1Njc5ODNmYTRlMjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4xMTU3MjUsMjEuMjM3Mjk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YzMwMjI5N2FjNWM0NGZiYmQ2ODY5Y2U4MmMzNDQwZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjY1Njg2NiwxOC45ODczNjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FjN2NlZjM5NTFjODRjZWI5ZDYyZDJiOGJiYjQxYzZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjU5NDMxLDIyLjU2OTEzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWE5ZWIyODg0Y2I2NDNjZGE3M2I0ZTlmNmVjNjljMDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi43MzgyMTQsMTUuMjI4NjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMDE4OGFiM2I2Y2I0NThjYTE4ODMwY2I4N2VkNDMwYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjkzOTc4MywxNS41MTg4NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q3M2Y2YjQzMzI3OTRlYWRiYmYyNWMwZGI3OWRmNTJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDM3NzIyLDE1LjEyMjQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTQ1ZDUyNGJkNzIwNDNmNzliYTM3M2QxNmQ2NDc5NGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS43OTk3MjIsMTYuMzE3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTk0OWM5ZjIyMDY5NDMwM2E2MWNhNDcwMjk0NjJiNWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS42NDI2NTYsMTUuMTI3ODA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWZjZTkyODcwZTAzNDA2NGFkZjIyNjcyZmNiY2MzYTQpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZGQ2NDA4MTAyMjA0NTI1YmMxYTlmMzA1MTg3YWE0MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjAxNzYyOCwxOC42MTI4MDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I5NTlkMTI2OTMwZTQyN2NiMjg1YTVmM2Q2NTZiNTI4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNjU4NDY3LDE5LjA1OTMxNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTE0NmMyYzZjZGEyNGZhMDljZDEzMTkyOWM0NTBmMTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1My40OTM1NSwxOC43NjIxMzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hZmNlOTI4NzBlMDM0MDY0YWRmMjI2NzJmY2JjYzNhNCk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2VkNmVmYzUyYzhhZjQ2Y2JiMTQ4MmEwNWM2M2Y4NjI0ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNTQuMDc1NzMzMzA0NDI1MTQsMTUuNjg3MDczMTUzODQwMTAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA5ODU0MS45NDA4OTc4NTk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2FmY2U5Mjg3MGUwMzQwNjRhZGYyMjY3MmZjYmNjM2E0KTsKICAgICAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "\n",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"_draft": {
"nbviewer_url": "https://gist.github.com/bbcf796d75dfe7a8d06040fcd73d35eb"
},
"gist": {
"id": "bbcf796d75dfe7a8d06040fcd73d35eb",
"data": {
"description": "Jakość powietrza w Polsce #3 - gdzie brakuje nam czujników?",
"public": true
}
},
"kernelspec": {
"name": "conda-env-jakbadacdane.pl-py",
"display_name": "Python [conda env:jakbadacdane.pl]",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.6.6",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.