{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Image et doublons\n", "\n", "Material for the hackathon ENSAE / BRGM / 2018. Les images sont extraites de tweets mais sont retweet\u00e9es sans \u00eatre retweet\u00e9es."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": ["%matplotlib inline\n", "import matplotlib.pyplot as plt"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 3, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## S\u00e9paration des doublons\n", "\n", "Pour le challenge, il faut rep\u00e9rer les doublons dans les images. Pour cela, je zoom chaque image sur un carr\u00e9 50x50 en noir et blanc, suivi d'une ACP puis k plus proches voisins pour d\u00e9tecter les doublons."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Images en gris 50x50"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": ["folder = \"c:/temp/suricatenat_images\""]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": ["from ensae_projects.hackathon.image_helper import apply_image_transform, image_zoom, img2gray\n", "\n", "dest_folder = \"img5050\"\n", "list(apply_image_transform(folder, dest_folder, lambda img: image_zoom(img2gray(img), (50, 50)), fLOG=print))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Images en features\n", "\n", "Pas utilis\u00e9 par la suite."]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": ["from ensae_projects.hackathon.image_helper import stream_image2features\n", "import numpy\n", "\n", "dest_folder = \"img5050\"\n", "dest_batch = \"batch\"\n", "for b in stream_image2features(dest_folder, dest_batch, numpy.array, fLOG=print):\n", " pass"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### voisins"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "code", "execution_count": 7, "metadata": {"scrolled": true}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["[ImageNearestNeighbors] processing image 0: 'inondation_2016\\735614357036519425_CjVtTTrUoAAUUZp.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 1000: 'inondation_2016\\737596119933321217_Cjx3w1FVAAAyyY1.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 2000: 'inondation_2016\\737891662077255685_Cj2EjjXWUAA8Dhq.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 3000: 'inondation_2016\\738050337521709056_Cj4UpFDUoAIR2gD.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 4000: 'inondation_2016\\738283056302313472_Cj7oe7VWkAAPwAT.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 5000: 'inondation_2016\\738366585526718464_Cj80fFNXEAAx9T2.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 6000: 'inondation_2016\\738439428159377408_Cj92vvAUYAARP2A.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 7000: 'inondation_2016\\738629637845221376_CkAjvUFVAAErbJF.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 8000: 'inondation_2016\\738695722296614912_CkBf1CbXIAAonp1.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 9000: 'inondation_2016\\738766013416787968_CkCfqR3XIAEuX8m.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 10000: 'inondation_2016\\738894521304526849_CkEUnRhW0AEh1e1.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 11000: 'inondation_2016\\739101985295728640_CkHRVZ-WUAAyCrp.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 12000: 'inondation_2016\\739400457899114496_CkLgzBAWkAE9hCa.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 13000: 'inondation_2016\\739732522427424768_CkQOztKWYAAlOul.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 14000: 'inondation_2016\\740054590863859712_CkUzuikWgAAJUTK.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 15000: 'inondation_2016\\740416207296299008_CkZ8nAnWYAAG7cC.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 16000: 'inondation_2016\\740833843914153985_Ckf4dIFWEAANSOT.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 17000: 'inondation_2016\\742361701924937728_Ck1mBsLWkAE6EQX.jpg' - class 'inondation_2016'\n", "[ImageNearestNeighbors] processing image 18000: 'inondation_2018\\955391968712019968_DUI76ywW4AA2J1b.jpg' - class 'inondation_2018'\n", "[ImageNearestNeighbors] processing image 19000: 'inondation_2018\\956216357934325761_LKmRQ9hLmVxOkWtm.jpg' - class 'inondation_2018'\n", "[ImageNearestNeighbors] processing image 20000: 'inondation_2018\\957254473604268032_DUjZ2vSWkAAdzd2.jpg' - class 'inondation_2018'\n", "[ImageNearestNeighbors] processing image 21000: 'inondation_2018\\959020320320565248_DU8fYlpX4AAZIRV.jpg' - class 'inondation_2018'\n", "[ImageNearestNeighbors] processing image 22000: 'inondation_2018\\964034081381109761_DWDv4vHWsAAMQIS.jpg' - class 'inondation_2018'\n", "[ImageNearestNeighbors] processing image 23000: 'seisme_Amatrice\\768290329543995392_MwkGcfSrCBzWbxwK.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 24000: 'seisme_Amatrice\\768326333034364928_CqmktbfXEAAw2RU.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 25000: 'seisme_Amatrice\\768345861646581760_Cqm2eUjWYAAWS68.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 26000: 'seisme_Amatrice\\768361403522646016_CqnEgFrWcAANqdO.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 27000: 'seisme_Amatrice\\768374709645967361_CqnQt96XEAAew2V.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 28000: 'seisme_Amatrice\\768387852862455810_CqncoxLWYAAulnb.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 29000: 'seisme_Amatrice\\768401257769865216_CqnlYItWAAAbc7p.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 30000: 'seisme_Amatrice\\768417849652027394_Cqnz5_gXgAAx967.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 31000: 'seisme_Amatrice\\768433724564377600_CqoGZC4WAAEh8zG.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 32000: 'seisme_Amatrice\\768451168372662272_CqoWQCGW8AQIbHV.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 33000: 'seisme_Amatrice\\768468307288743936_Cqol1cDXgAEychm.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 34000: 'seisme_Amatrice\\768488406091386880_Cqo4H6GWIAAr4YP.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 35000: 'seisme_Amatrice\\768511762429800448_CqpNXTxXYAATvNk.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 36000: 'seisme_Amatrice\\768543842845032448_CqplczAWIAAhINz.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 37000: 'seisme_Amatrice\\768647190260518912_CqrIhKnUkAAyvf6.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 38000: 'seisme_Amatrice\\768716815279063040_CqsH3mqUEAA6gXD.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 39000: 'seisme_Amatrice\\768743738634080256_CqsgWwgWcAE0rWO.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 40000: 'seisme_Amatrice\\768772807568351232_Cqs6ORfWIAAXlf8.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 41000: 'seisme_Amatrice\\768804543748575232_CqtXniSXYAAp7Tt.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 42000: 'seisme_Amatrice\\768843712357076993_Cqt7R_1WYAE6tr6.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 43000: 'seisme_Amatrice\\768901703898771456_Cquv7mKWgAAn6ZX.jpg' - class 'seisme_Amatrice'\n", "[ImageNearestNeighbors] processing image 44000: 'suricatenat_inondation_aude\\1052220109740228608_Dpo8nOhXgAYLNEm.jpg' - class 'suricatenat_inondation_aude'\n"]}], "source": ["from ensae_projects.hackathon.image_knn import ImageNearestNeighbors\n", "folder = \"img5050\"\n", "knn = ImageNearestNeighbors()\n", "knn.fit(folder, fLOG=print)"]}, {"cell_type": "code", "execution_count": 8, "metadata": {"scrolled": false}, "outputs": [{"data": {"text/plain": ["44053"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["from ensae_projects.hackathon.image_helper import enumerate_image_class\n", "folder = \"img5050\"\n", "iter = enumerate_image_class(folder)\n", "imgs = [_[0] for _ in zip(iter, range(0,1000000))]\n", "len(imgs)"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["dist = [[ 0. 0. 7.93725393 366.16662874 380.73481585]]\n", "ind = [[ 12 3 10 21464 8684]]\n"]}], "source": ["for i, img in enumerate(imgs):\n", " dist, ind = knn.kneighbors(img[0])\n", " if dist[0, 1] <= 10:\n", " print(\"dist =\", dist)\n", " print(\"ind =\", ind)\n", " break"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"image/png": "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s3EAJElC69atGTlyZHrQQQex2Wab8eCDD/4BYMCAAey2224/aNOmDcOGDeOhhx5KkyThwAMPZIsttjjpkUceuVV9RBYvXsytt95K3759ufDCC3n00UdPbdWqFQceeCA777zzwHHjxgGw8cYbc91114175pmG+IMrr7ySO+64gyeffDJt3bp1ts9ll1126auvvnrpK6+8Qr9+/Xj22WdTXStA//79OeKIIw56+eWXAejevTu//OUvx7711luceuqpvPvuuxXjS5KE4447jiOPPJL+/ftz5plnTp01axYLFy5kzTXX5KWXXprzzjvvoM/s3nvv5bLLLmP69OnHNXZxNg3LgHNoWBpqmabpQhrekJssDy6rndRqK9dffz333XdfmqYpF154ISNHjsxs5fLLL1+htqLPuHXr1owaNarCVpIkyWxl9dVXZ+jQoTz88MMpUGErZXYCcOutt9KvXz9+9rOf8dRTT50KcPDBB7PDDjsMHDduHGmasvHGG/Pb3/523DPPPMOiRYsyWxk7dmwKsGDBAjbeeGNuuOGGzFb69u3Ls88+m8pOPv/8c/r3788PfvCDzFa23nprfvGLX4ydOHEip59+eoWtaLz//u//zmGHHVZhK/Pnz2fNNddk7Nixc9555x1kr9FWOnbsmASbWCm24ntK9XvKVVddxe23385TTz1VcU+5/PLLL33ttdcunTBhAn379uW5555rck858sgjD3rllYa/e927d29iJ8UxHn/88Rx22GGZ7fTo0YOLLrqIqVOnDgGk/tCyZcOfn+nTp2fHduzY8WYa/jiuAWwDjG7sfwPgviRJDkzTdNyy2smcOXOye0qbNm2YM2dOOnz4cK655hpmz56dAhx77LH07NnzpB49enDOOecwe/bsNE1T7r77bm6++WY++OCDtHPnzjz66KPT/v73v/Pwww9zwQUX8MEHH6Q9evTg5ptvnjx7doMXS4cOHXjuuedm33vvvfTu3Zs77riDNm3acPDBB3P66aePmTFjBm3atGHWrFnZPaVNmza8//776QknnMBWW23F+++//weAQw89lAMOOOAHbdu25Xe/+x0zZ85MAX74wx+y3XbbnTRjxoxbl3Tdl112Gfvuuy833ngjM2bMOBXgqKOOol+/fgNnzGj42m2++eYMHTp03IwZM0jTlLvuuovrr7+e6dOnN0iPH37IJptswlNPPXXwtGnTePbZZzn66KOZNm2a/g6Qpilbb701N9xww+SpU6cC0L59ex5//PHZU6ZM4dBDD2XevHnE/QHOOeccdt111+weCPDEE09w3HHHMXny5PPPPPNMvvjiC0499dS5AGeddRa77777xFNOOWVDYFqaps81HjaU5XioBvYDXmh8KAVg7ty5KcDqq6/OvHnz0pEjR3LVVVcxb968FODEE0+kV69eJ2233Xb813/9F59++mkKDfe83//+93z88cdp586dGT169LQPP/wws5PZs2enPXr04Kabbpr8/vsNp+vQoQNPP/307HvuuYeddtqJ22+/nVatWnHYYYdxxhlnjJkyZQpt2rRh6tSpFfY7derU9LjjjqN79+5Mnz79DwDf+973Mju5/vrrK+ykZ8+eJ82aNetWgFVXXRWAFi1aZD8vueQSBg4cyO23387cuXNPbdGiBcceeyy77777wPnz5wPQrVs3HnzwwXH6/wMPPMBVV13Fp59+mtnwFltswfDhwy/9/PPPL/3ss8/YYIMN+PzzzyseYvfff3+GDBlykPrZfvvtufrqq8fOnz+fo48+mkmTJlHklFNO4aijjqrYNnfuXDbaaCPmz59/zIknnsjOO+/MEUccMRjg5JNPZq+99prcqVMn9txzz4fCYUv7e3MEDUp4E9I0nZEkyWs0rNoMLdsHvqYp9Tp16sT777/PzJkzARg9ejQ9evSoekyPHj34618bAoPHjRvH3LlzAZg3bx5t27alVatWTJs2jYkTJ2bHrLLKKixcuLBJX9tssw1PPPEEixYt4qOPPuLVV19lyy23XObrGDVqFOPHj+fss8/ODBhgl1124YEHHiBNUyZMmEDbtm1ZZ53qQdK7774748ePz65vk002abJPr169ePDBBwF4++23eeutt7K2yy+/nOHDh3Pvvfdm/0aOHMkhhzS4L+6zzz7cddddAIwYMYJ+/fo1+WPZs2dP3n33XaZMmcKXX34JDQbY8DQLj9Ow1ALw/4B7a52neujUqRMffPDBP42tnHPOORW2svvuuy+XrTz//PPZ9W288cZN9unVqxcjR44EGmwlXuvll1/exE5GjhyZPSjtu+++ma2MHDlyqbbSqAZ9pbbie0pT4j1l7NixS7ynjBo1CoC33nqr4p5y5ZVXct999zFixIjs36hRo7J7CsDkyZP5+OOP2WGHHZY4jjlz5gDw0UcfQb5U/nGapuukabppmqab0qDeLdcD9bLSrVs3pk6digSFoUOH0rdvk8QSFfTp04dhw4YB8Oijj+pa+OSTT2jfvj1t2rThrbfeyuYbGh5uFixo6urbp08f7rvvPhYtWsScOXMYM2YMvXr1Wubr+L//+z9Gjx7NNddcU2Er++yzD0OHDiVNU8aPH0+7du1Yf/0li2/t27fnk08+yebjySefpGvXpsk/dt55Z4YPHw7A448/zscff5y1DR06lFGjRjX5t+uuuwJUvMQ/8sgjdOnSBYC99tqLcePGsXDhQubPn8/LL79M165dSdN0FjA1SRJ9ifakwS1lWVmSr/9S2WKLLZgyZQqTJ08G4M4778yuZ0n06dOHe+5pELCjnXz66aeZnbz99tu8+OKL2TEtW7YstZPevXtz//33s2jRIj788EOee+45evbsuczXccstt/DYY4/xhz/8ocJOBg0axG233Uaapjz//PO0a9eODTfcsGpf+++/P6NHjwaWbCe77rord9xxBwCvvfYar776atZ266238txzzzX5pwfqt99+O9t31KhRmZ00vsSQpinz5s3j+eefZ8stt9R9p1vSkHEq+ztUNvZGW1qTBncZbeuUJMlqjb+vCewCTCw7XjSrUr3KKqtkv7do0aLiTSlNU5IkIUkSWrVqxWmnncavf/1rFi1aRLdu3Rg0aBCrrLIKSZJkP/WvRYsWHHXUUfz617/mtNNOY5tttmHddddllVVWoXfv3jz00EOccsopdOrUie7du9OyZUtWXXVV9ttvP37yk5/QtWtXzjqr4SW3ZcuW7L777kycOJEhQxpWoE488UTWX399Zs6cSYsWLVh11VWz866yyiqZ4qK3b13XVVddxfrrr8/pp58OwG677cYJJ5zArrvuytixYzn44INp3bo15513Xnb8j3/8Y6ZMmcL8+fM55JBDOP/88+nbty8/+tGPOP/887n77rtZbbXVOO+887I3Tj3QHH300Zx77rkcfvjhbLXVVmy33XYsXryYRYsWZWOLDz/xj/8hhxzCGWecQZ8+fejQoQNXXHEFCxYsYMaMGZxzzjnZH9bLL7+co48+WsrCXWmavtbYxX8DdyRJchENPm5/qNdO4nxqTuP4a7GVaCP12MrAgQOXaCuTJk1iyJAhJEmS2cqsWbMyW9E1yFaKdpIkSWYrp556KgB77LEHxx57LLvssgtPP/10ha3o+J/85Ce89957zJ8/n/3335/zzjuP3r1786Mf/YgLLriAW265pcJWoiJ29NFHc/7552e2su2227J48eJMMVqSnUCDIiJbad++PVdeeSWLFi3i/fff5xe/+AV//vOfgQaV7OijjwZ4gwYfupVmK0U78T2l/J7yve99L7un/PCHP+T888/nrrvuyuwkzifk95Tvf//7S7ynRIrbhg0bxsCBA/nyyy8zm0qShEGDBmUvfqeeeioTJkzQIZeE5fQVjsaX5v6STdpbtWrFFVdcwfHHH8/ChQvp2bMnxxxzTHbMokWLsn9pmrJ48WLOOOMMTj75ZPbcc0/69u1Lp06dWLx4MQMGDOCPf/wje+yxB127dmWHHXbI7PQHP/gBAwYMYNttt+Xaa6/Nzr/ffvsxbtw4BgwYQJIknHfeeay77rqZglfLvEODqtupUycOPPBAAPbbbz9OP/10BgwYwGOPPcYuu+xC69atueyyy7Ljv/e97/H2228zb948dtxxRy699FL69+/P//zP/3DiiSfSokUL2rdvz29+85sm5zz99NMZMmQIAwcOpHfv3my00UbZ/Czt8/j1r3/NO++8Q4sWLdhoo434+c9/TpqmdOnShd13351BgwbRokULvv/977PFFlvo8J8AtzU+LL1DQ+YJksa0Z2maXpckyQY0+Pe2AxYnDWnztk7T9JMkSdoAewP/HscU73cLFizIPmdt1zW1bNmSq6++mmOOOYaFCxfSq1cvjjnmGBYtavAcWLRoEQsWLGDhwoWkacqCBQs45ZRTGDJkCA888AC9e/emY8eOfPnll/Tr14+bb76ZAQMGsNlmm9GzZ08WLVrEwoULOeKII9hnn33YZpttuOKKK7K+9957b8aNG8fee+9NkiT89Kc/Za211mLRokUsXrw4exBfvHgxCxculBBW8T3U59a5c2f23ntvoOHB+KyzzmLAgAGMGjWKHj160KZNG6655pqsz+9+97tMmjSJefPm0b17d37729+y1157cfrpp3Pcccdx9dVX07ZtW6655ppsPsSxxx7LySefzE477cS2227LDjvskN1TinZRtJVrr72W0aNH07JlSzp06MC1117Ll19+yQ9/+EOGDBnCTjvtRJqmDB48mC233FL9DAH+QoPvefZ3KEmSnwPj0jTVQ/aRNGQQiSffCvj/kiSR6+KlaZpOoApJ2eBXFg8++GAK1W8Ksa24X/x/2UNWkaLxlBHfzJZ0XNynWp9lD0tF9JCln/E4Gb3+oMbfdWOKx8kItZyr833rW3na33gjKI5JfetnbIs3BoCOHTtmbRpL27Zta47uXhZsJ7aTWrGtLL+t6DMrs4PVVlut4nxxH/WpMRVfbJZE8TrXXXfdJuNdY401VoqtyP2j2t+7Wtt0jbLv2Fb8fPX/+GBZ7SGz2E+Z7db6UL2iWN7zFR+mqvUd+yvOT5nNd+nSZaXdUz766KMmF1ccQ62fi74ruqalPTjGfePv1e4pS/r/kmjVqlXF/mXf31ruhbXYfbXjyo4v67vacdX2Fx06dFhptlLG19L9wxhjjDHGmG8Szer+ISWl7K202lt/2f+LilrRLaDazyVtW9rx0PSNUcsuCvrQth//+Mf069dviX3HfnTtemNcY401mlyn1KXoWyXlUdukJsW34eKbYzxvsS1epz4rnffTT/OUlBqTgplWNP+sdgJU2Iq2DRkyhD59+pTubzupzj+rrazoe8rqq6/e5LgyW5GKVbSVuCSuPos/41jKlCPtp/N+8sknTfaJNr0iqUUdrlUBK9pV7Lt4/fpMymywFreIsm3Fn8cffzwKDhQ//elP6d+//xL7XxLVVktqHadYljmvpvxWW/1YGUhdjiyvkqq+dK+N36Oiq121udd3p+x+UwtpmnLSSScxbdq0iuPOPfdcBgwYkP1/WZTqsrZabHpZlepqx1VbefyqaNaH6n9WLr74YiD/4sRlWGMiF198cRM7ae4/Gubrj+8pplZuvPHGr8XDhPl6c9111wFN3QDNiuUrV6r1R6PsDaeaH2I1v6slqVFlRlSL/2MtihXkb5O6zqjgFP3LYlvRZzWOqaj2ffbZZ1mb1CdFEOv4L774IttHvpFl/o/F+ShTJ/WzLPp4ZWE7ocm+YDspw7ZCk32hqa3EtlpsRZkbdHxU7/RHuaxvURbwWvT9Vkqt5mBZ/TCrtRXV57LVjuLPWlW9en1L66XWeWrOh/jmfmEou4ctq4+wkDKtn7FvfX+r+SOX3aeKbdXuRbVQtspXzW6L5y/2Ufx/NaW5eN5lHW+RWvz4VzaWyIwxxhhjjKmTr0Spjm8lxUjqSLU3uBX19lrt7XBZ/SbVVzHVXRll0fi1+JdFpBDJ77GoIMV9ql1nLWqIfC2XtP+KxHaSYzupjm0lp1ZbKZ43qmA6Tp+jVjBi9o/i6kTZiknxHBF9Luq7OVhW/+VqbbX4m5b58y9pn1ptsJrit6JcyGpVDGvxZV1Wn996x7SikKq8rP7L1e6PxTiP4u9x37LMQBpT2edc5m9djVrU3FriQ8ooizNY0j0o/r9szovnq/a9qyVOobmwUm2MMcYYY0yd+KHaGGOMMcaYOvlKKiqWLRdWWz6qJeVMGbUsUVVbOqllGbesr7LAneJxMZq/uHQRl9CLy4hx7j7//PMm24p9lxXsqOVaqgXarOxsFbYT20mt2FZqsxW5/MQxl9lKsbCLKLOVMpZlyb9aPyuaWoLtanX/KS5VV7Pzamkd600ttjJY3uDNWsZULaBzece0MqglwLkaZZ/nsrjV1ZpesBb7LdtWdP+odX6rBXnXkvau2nmK36myvyNlc1ityNJXhZVqY4wxxhhj6qRZleplVa6WN0XMsvSzIksKi2pKVZnypLc0qUSxrZgyLBbS0P7FAg3x+GIi+7K+dXxZ2i291VZTU1Y0thPbSa3YVpbfVqTqxMIw2l/Ktj7XMjW7TD1T31pFiWp00VYiK9tWalHLam1TKkpdW7UVguUt8FJt/3pTklWjVtVyeVT+WtMDLimAr7koprqLvy+rnVb73pcFqkK5ylu2UlXsp+y4srbivbrsuFqupdrKQ7U+a1kdrHZ/rNZmpdoYY4wxxph/AppVqa6WTqrs/8vid1VL+qpa/UWXJf1VbCu+4ca3S71dlfkRSvmQAvSPf/wja1tzzTWBXDlae+21mxwnpUklouOb3PTp0yvGFFUVqZllCmTxeufMmdOkrV27dk22rQhsJ7aTWrGt1GYrf//737O2oq2stdZaWZv6qmYrs2bNAvI5jOfXcbKVsrHpWmbPnt2kbWWVKV9eVbgMzW2Z0qjPZ3kV52qqZbUxfh39rFdUmfLmppqvey2KdTyuuMJU5g9cnKeydHT6PpUV3iobi/ooK4RVvL5qbdXuU7X2uaTjq/UdV7NqUaPV1tzFx8qwUm2MMcYYY0yd+KHaGGOMMcaYOmlW9w8tI0eJXsuLc+fOBcqXTj777DMAPv744yZt6lNLmnFbcemxbLlBSwlxuVuULe9pm5ZT4xKmlmPWW2+9inFDvmS4wQYbAOXVxDbeeGOgcgldyyBdu3YFYNq0aVnbOuusA8CMGTMA2HDDDYF8LuP5NBexMloxuK1syUXH6ZqaA9uJ7aRWbCvLbyvdunUDym1l5syZQLmtaJ9abCUGwBZdWDTu5kBzFceq8WhOY9pB/a62uOxeDMIscy+qtmStINJi1cvi70uiWjXQWlxS4ndlScFy8Tp1fLRLuXTpWvS5x77lyqPvmFJ7lvVdtmxfDKyO17AyKQZtQ3WXsmrbin2VuZQU3enKXKaquVXIHqq50CxvoGI8X/H64t+BZamyqrZqboRlAZ06XzxvcT6aI43r0vjqR2CMMcYYY8w3nKQ5gwHGjh2bQrmCozfV+DZUVATiWKXK6O1XSkTcX8cXFQmAefPmAfnbcFRitE1KSlQwtJ/eltq0adOkT73FlykCUr/ideo4vWW1b98+a/voo48qrj2mStO1r7/++gB88MEHFf3EscyfPx+onCd9DrqG+Llo7HrTjtcZAl6O2n4AACAASURBVJRWSh4s24ntpFZsK81vK+prWW1FiqP2L/vMWrVqtVJsZcqUKU3sRDZbpiZLRfvkk0+Ays9EtlCmEBbVtLKAr6KaFz/TYqBw7FufjcYZlT7ZV1m6wqLyWbbSpL6iKiy7VN/RTjR22ZL6LLs3RFsXsgH1EwtZaQw6fzyv5mPLLbdcafeU8ePHp1A9GLFWpbr4eZStbBVXHqqljKumKtcS+Ar5/C5vsLYoC5os+04U1eSyFKDF72LZSp7GHW20WpCn6NOnz0qzlTKsVBtjjDHGGFMnzapUT5gwoYlaUFSMqiUwj299RT+xam9GxeIV8feosizt+HiczheP1xt12Vt/sWBCVA+KaXfiG5yUsM6dOwO5MhD7kJqisUVf0DKlpHidZX51xbdnqVKRtm3brpQ3QNuJ7aRWbCvNbyvV0oqVFZsQRTWrbJ5WllL9yiuvpFCZsk/Kr64tjkfXrbmK1y//dM1pmf9ocR7i/Ot32V78TIvKbTWlulphnWpp3arFREQ71fk0F2VtUvD1M9qSUFucJ90n1Gf8HmmbzlFmZ9tvv/1Ku6c8//zzS3woqqZel+1TzRd7SQp12fFl8SxF5TZ+5tV8nJclbWPZ2Mvu9cuiqJeNqSw+QRS/J9V87Mt8qvv162el2hhjjDHGmG8Sfqg2xhhjjDGmTpo1pd57770HlAcOaZkzBjVoGUhLcHG5QftrOS9WbdNyl5ZHi9XFYt/qc911183atDSrFFcx4Ejn0ZJWXIJT/2XBF1rCUHqheJxSVKnPGLiiPt59910gT3EVr1NLk2UV71R1T/NallJKVFuyicEiKxvbie2kVmwrX72tRFeWaqm/qqV9W9lorqItFCsjKrgT8nmXncTPueiKE+dGc6GfZW5GxWDGMjcO2VCco+JnUZburCxQsbgkHm1hSSkA435K5xjnR/tpDjt06NBkTBqn7CW2Fd1N4vdBVTllw9GlpDncVctSvdXbVy2BjdUqUJYFrlYLDqxWvbDoNlZrNcvieMsCjYv9xN+rjanM3kW1lHrFsTXnPWVJWKk2xhhjjDGmTppVqV577bWbbNPbd1kwg96U9Va71lprZW3aX284sbiB3oykyEidiIqA3mikyHz44YdZm/qUchUVp6KSENEblK4hqiLF4hFlb5XqMyoJOndZIIhSW40YMQKAfffdt0nfepvUXMT5LQa1xPkppmEqu96yYhMrAtuJ7aRWbCvNbytS32QzcQ50njIVtqhslSlOKwutEMR5Lyp80U71ORdtApoWhokBjrqmYvBptWuNn6mC8zTeOO+ydc1jVI6LNlAWBCbKUpJpmwpEAbz++usA9OvXD6j8rmiuHnnkESBXlSMaSzHAMl5DGVK9pV7HglKxgMzKYnnV8LLj9LnXoqRWW+XRZ72sqnLZeYtKfK2BlcW2uHqzvGMRsoeyfarNSzHIs6yIUHNjpdoYY4wxxpg6+UrKlJf5gumtRyWGoam/VlSl5KdVLC0MTX3Iysqz6rxSaWJy/2IJ1qhSqG+9WcVzaZx6q4zHSS2Qv1h8E9N16nzRn3Xq1KkADB48uOK8AC+88ELF/lKZdA6ATp06AblqFudg++23B+Cwww4DYM8996SI5rk5fWVtJ7aTWrGtfPNsRSpsWVGQOGcrkldffRUo/7z02WiuIU8pWCy1DTBr1qyKbbEAkD4TKbmax7IS6BpLVF+lzqp0fByv7KpYmAZg8803B8pXk4q+2NVKZUdb0GevbVGZXNKqQ1RBZWf6TKN9quS5ri+uEuh7OHnyZAA6duyYtem73KNHD1YW+u7UqlhX26+40lSWUq/YT5kaXVbIqloqvmpjiva6tD7LCrxUU5PL+iz2VZZ2r1isqkzNrlZIaUX6wdeLlWpjjDHGGGPqpFmLvxx00EEpVPqCFd9wo++ZxiZ/LSkkkJf73WyzzQDo1q1b1iblQUrK3/72NyB/+4f8jVcKzMyZM7M27a+3ffmUQa7ETJkyBYDHH388a1MfUpPef//9rE1KmpSxsqT+eluPypr8yaQglUWKS0EoU9ikVKnscGyT8iHlqCx7QNG/LTJu3LiVEmprO7Gd1IptpfltRfNZr62U+ZA/++yzK8VWLr744hTKCx7Jfzq2aW6kskpZjftJ8YtqslThor95nCMpwDq+zOdf36PYd9EHPCrHuoaiD2/ZWMr8a8t8nGVfsqGyz0tqedmqg8ZSplTLHovZbeJ5ZcPRp1rzcdZZZ620e8rjjz++xIeisuelas9QxfLbZcVJRLHIVuw7Zv0ptpX5HBeLD8Ux1rIaVKZGF7fFe27xfGU+/UU1uSymp5oKXqZUF0uel83vzjvv7OIvxhhjjDHGfJPwQ7UxxhhjjDF18pUEKsYUTgpK0LJZDKjR0omWwhQgAvlyQzHIB5a83FC2PKJlq7hErKVwbbvvvvuytvg7VC5FaJlMy5wxzZDOp2XkuByrZRQtp8brVB8DBw5scg3FAg9KhxRTH2m5TEvScZ7Upj5jm65dS3AK2GkObCe2k1qxrXzzbEVuBM1pK7qu+JkUl9vjvKswjuY/pkeUS46OizYhO5Gd6XsRl+/1eSkgLrp4FAMd4xK55k22VEyVF/uK11kMFIvj1XdD44tuLjq3XDw22mijrK3otqHvk+wtjkXXWWbXxbR7cT/ZoFL7xeOam6KLR61uINWKmhTTLepnTHmobWWfa3F+ox0V94/f8WK6xthW3L9aoa8yl50y94+y1JvF88r+qhV/KZvfottHdEkRO++8c5NtKxMr1cYYY4wxxtRJsyrVTz31FAB77713k216Q9p1112zttGjRwN5KeJjjjkma5NyIIUqphdSwFFMZA/QvXv37He9/erNOipdUhL01h5TLemtUAFOH3zwQZPr1FtXfBNT/3pri4UlNAa9pUU1SkFTEydOBCqDaTQWvZ2psEFUIjT2l156CYDtttuuyXWOGzeu4ppim+Y1vnnGYgcrA9uJ7aRWZBf77LNPtu3pp58GcmVj9913z9oUBKjAwa+7rcg2ypScYgrAGMSo0uNSh6KCuMkmmwDwxhtvAHngHOTBc8XCG1FxXlG2Eu1vZduK0rPF1ID6XQq/0u5Bfp/RZxiPK6YkK1MP9TmVfW7FIL2yeShTuLVN6mfZKkCZel1UtuN3VH1JvYzjlO1plSL2XUzrp+uePn16to+UbZ0/BjFrDnQviqtJnTt3BvIg4Jg+Lwb/riyuvPLKJtu0qqJxxhSL+sz0PYrXWVRpowqt69M9RKsjMehTn0FZESL1pdSFW265ZZMx6V4SU4fqs9Pn884772Rt+huh72o8n+6nupfE+6P2l03H+dF5ZBuai3jf0b1M1xm/YxrDtttuC+R/5+N4N954Y6ByRak5i0tFrFQbY4wxxhhTJ82qVB9++OEADBo0KNtW9Cfq06dP1jZ27FggV5P0NgMwadIkAHr37g1UvtnoTUxvT3rbf+aZZ7J9unTpAuRv/zE9kd7Wpf7FtzwpVXob1Tni73oDjT5AatOb1aabbpq1SQ169tlnK8YWr0vXHtN86Tr1NlpWKlbHHXTQQUCeKipeZ//+/YFcvYP8TVfjjimhVnYaRtuJ7aRWvv/97wOw//77Z9uKfoH67AGef/554J/DVqSeSsnp2rVr1iYFcMyYMUClHek8UpO22mqrJtcpH2yplHE1RQrVN8lWlK4wKr+61qKffdxWloauqKqX+YHWUpZainGZ0h0VzWJbWaGVascV04xVK9pR5s9blsqs6AtdNiatsslOYyo3qbGy/egPLAVTymtcZYnfm5WF5iB+zlLWpTzH8eq7ITVbqinkNqXvQexT9wutouh7EedJ+5elWFTBH6n38X6l/fQ3I66waRVL54nfQ9m9Vi7iCoI+R/m1x5W4t956q+Ia4vdM9y4dp1VU3W8hnzudN9qRzvvaa68B5QVppPLH8ZaVNW8OrFQbY4wxxhhTJ36oNsYYY4wxpk6a1f1DywUxEEBLLQoSiSl9tNSi5YNYvUxLHloSiCl5dtttt4ptWkqPqVUU1KMl0F69emVtcqjXkktcItaSi7bF5RwtQWgpIy5TaMlDS2gxAEBLLhp3DDjS/CgYKB6n+VRgh643LtNpH7lIRJcBzaHOp6WXOBYt4cUxxaCdlYHtxHZSKxr3FVdckW3TUrRsJQb+aTlfwT36CbnLw9fJVuS2UJZiTQGDsv94nJZ/d9lll4qxxbYyW9HYO3bsWHG98bzfRFspq7RWbWldc1pWlbOaS4coq2RXC3EMxXNVS5NWdEuI59U1qK+yCqOanzL3j2rL6MXzxfHKHaGsyqPcEmQL8Rz6vsrm5VoAlcFxKwvZd/z+F1OGxtR+cjmQ60MMotd+Q4cOBSr/bimweaeddgLygEUFRQPcc889QH6fKqu2qLmMQZxy7ZDrTLw3FO8b0VVDdlCWErNYWTMGVBbdxMo+T9mW5kkuanF8+vsXz6u+1U+ssKnjyqqTOlDRGGOMMcaYbyjNqlTrbSKmk9Jbj4Jltt5666xNb4x6uzv55JOzNr0lDRs2DKh825JTvlKt6Q1p8ODB2T4quCAn/RgUpzRQ2ieeV9uUluq3v/1t1jZ8+HAgV1hjIvJ+/foBcO655wLQt2/frE0pv8qSnOst7e233wYqgxj01q43OClGr7zySraPxqmgAKXBgnyu1U9UeJVuS+eLb45lgW4rEtuJ7aRWNHfRVqQqSfmp1VZ0DV8nW1Hb5ZdfDlQWeJHye/755wO57UCulmmc8XORQqTPOipOSkklxUcBrzHdnK7lm2QrZenr9P3RHEWVWKpqWdDa8hQgqVYsJCq4xQDHqLxVU8illureUKasF6837qfzlI1FlCnWxRWAskI4ZQVQZB8ad5wf2bgC+KKdNEfwmT7reC7Zj36WBZeWFddRX1oVisfdfvvtQH59UuRjwKHmR4WaYsCh7n3f/va3gcr7udRu9R1TW2quNbayYEQFW8bvhO6xund+5zvfydq0TYp6DNKWHei+qBWquBKg1Tqp2DHNn+xA8xoVefWhlbWy1dvmxkq1McYYY4wxddKsSrV8BuNbiHxopHbExN5S3/RWe80112RtZ5xxBgAvvvgiAAcccEDWNnLkSCBX5vQW9PDDD2f7SIVSqpuYguyEE04A8jed6PszatQoIFe8dthhh6zt3/7t34DcR++QQw7J2h599FEArrvuOiBXlyBXfPQWG30U77rrLiB/y4sJ+PUmvc022wB5IYxYUlhvti+//DIAl1xySdZ28803A7DjjjsClf6h+qykysS3ymKp5hWN7cR2UitltqK0W/rM5ZcMuR3Jdzjayplnnllx3NfBVpQqUOrVYYcdlrWpkM21114LwHnnnZe1SRUWMd3enXfeCeSfWZkf4vbbbw/kKfliKjOpUd8kW9H8xfNIOdX3I6py2k+faTyuqIAtq9+09i8rxqJtOl+ZSltLur2osmr/Mn/Xot9pvG9US8W3pH3iXBRV6Ji6TWpjMSUf5KsW6juuzjRHmk6NKc5F0VaiEqux654SbUW2rviKqDRrleuRRx6pOP/48eOz37VSqVXK+L3+y1/+AuSfffx7IMVX8Ttlq0L6PsYUnppfKetvvvlm1ialWisPKrIF+fdE941oo4899hiQp/LbYostmsyF5lX3wLjSKnTvLisApO+34mKgeYqPlWGl2hhjjDHGmDrxQ7UxxhhjjDF10qzuH1qKiCmutHRxww03APmyN+RLHwrciUuYqionJ3YFJUG+zHDOOecA+RJGdNbXsuS4ceMAOOuss7K2iy66CIDf/OY3ABxxxBFZmwLltMQTqwppiUiBPwpqgjyoQEs7celDKF2PllUhXwLTUk1MJyP3AS1Xa4k2LsnpvErbE5fgNIdK7RODveQqoMCljTbaKGtb2UtwthPbSa3IVmKqKi3H/v73vwcqbUXBfFdddRVQuWT6dbQVIVt54oknsm36XFUlMi59Cn1WSn8H+eei5WpdWzy3bEtLrnE5V9/Fb5KtaDk5BmUV08mVuUzouLgcLVurJbXesrIsgYpxzrTUXXac0LY4B/qulAXnFSlLUVZMHVgtQDLaie7tsvkYLKvxyc0guuWUXdeKpiwFYNHtIwYT6n5cnEvI76tyj4hzoO+PXDr0XZELYPxd9hiDZHWesgq7slG5RMa0meqj+HcIclcb9R0rohZddeL9ccKECUCejjS6lOj+or5jJUWhseh8sW+5q2gOog3o75zuffosoNLlpTmxUm2MMcYYY0ydJM2hJokxY8akUOmYr0CYU089FchTggGcdtppQB5QFYOKLrjgAiB/A4uBPwqkUcoXpXWKaaHk+K/0ZhG1HX/88RVjg/yNU29fsc8ePXoAeTBdfKtUqikpjzGAR2+ACrZSEBTkb4VSeaKKpYISunY58O+9997ZPkqur5QzsRiDrkXqZizAoLk+6qijgEoVTJ/H9ddfv+KlGmwnYDuplWeeeSaFSnVHtiK7KLMVKbBXX3111vazn/0M+HrbSlRMpXBXsxUp+UqRBU2DkWJBDfWl1Qxd55577pntIzv4JtnKYYcdlkJlEJm+M1L8pdxDrkxq/FFhlFpZplQXtxWV50hRKYdcjdP+Ma2j1EP9jEpcUcmMfUrpVeBdtCEdJxsoG2dZgGMxHWBRlY5j1/ljYLTOp88jBsLqc9A9Sd/VeJ577713pd1TttpqqzSeC/J7wv/f3tn16lVVX3z4Cbwz3mgElWIUJC21pUAKlNIKtggaCWikAoIo8UaMCdEQjQleGUk0SqhGLVWkQW1LTVukhtdSwBqrUYk3ykfwC/R/9dtz7HWWJw/Z3Q//1jFuzjnP2i/rZa51njnmG/11WWEfsC6eZpM9zRy4lWD37t2Sav/AVPv/A9YH5nnDhg1DGxYf2F23OLEOsNC+LvQXOfCgS1LSMedYN/0zzkXfE7DtyKQzxqQK5WxhvDt37hyu4TOYbp8n5BbrhrdR3Ib5ces2a3bq1KnZZKWHMNVBEARBEARBMBFL9amGEfjud787fIbPEWlW9u/fP7T9+Mc/llQajvuX4rNHqpqHHnpoaPva174mqbQ0mBFPD3Pw4EFJVcYXnyCp/BbxVXJGACYRv8lLLrlkaEOj4pmMVyrGCe0dDUsqHyMSvHuqKVhJxu5+UyR4b8uAulYK0wJbCXMlFTvAvDhjRZo3nk2qHGmsvc6ByEnkZFEgFxRH8c/wy3NZ+clPfiKpxunpmf4/ygpygC+4zz330Sf3UaZf1113naQxywhzDwt93nnnDW2wiW35aO/v2Sgrbco5qVjHXgl490Ft7+v53IKWue0x1W16tl6RkUXG0GPdYah7aRJ7bDJtjNfZx9aK3Stv3pZA93G2KfXcDxnAUL797W8fPqMvrIsXx1qGTzWsp8s8Y4GtdZ9hzgvOcY+zwI+4V+SG/dOmy/OCSfgT89MtP5z17Fn/f8D1zLlbk+gf93nKUdaT/xHvec97hjbOGbeQAlLcwlD7+zhLOBv4/0dqV/8M+cPSJdXc8X6XUVh69k2vtPyyEaY6CIIgCIIgCCYiX6qDIAiCIAiCYCKW6v6BIz4BMlI59VOVy01hONJTMQzHfKlMlpgbvvSlLw1tmB4xveD87k7sBPUQgPPTn/50aMNk0ksnhWkK53uc/r3vmKjcfISJBROtVwTkekw7nsaGqmyM3c2SPPPUqVOSyjXCzTlcT4CDuxrQd8biZjbMQJhVqPomjQO45kDkJHKyKJh73GakkhXS17msYEokQNHNjGeDrHiQDsGTBCh5VUnM8Jip6a9UKSeRFXc5+G+y4i4eZ6Os8E53p8JFCrcfr6CH2wrz52nSmFvcIXpBjMwR17h7A2vaS8HWBrT5faw3feq5qyBfnm4TVwCu8fWijbXpucfQF3e9QJ45e2nz9SZYGpmg//5eTPS4CEgr3XE86M2rK84F+uuBf+9617sk1fx6Gjp+56f3kXlhnL7WuI3ggsZ8expKPmO+e/8PkBGf39ZFy4NEkT/2v685+5Y+ufyxJ0g56m4grfuFB5dydrCetPm+YV7Yg34u03c+I2hbKvcU3E38f/8yKvr2EKY6CIIgCIIgCCZiqSn1brvtttOSdNNNNw2fkTYN7dATvbca4N69e4e2iy66SFIF9eDkL5XWwk+0tauuumq4hsCfPXv2SBprTQQA9FLOoEWj7fn80XdYQw/aQNvm2a6xornBCHgaJTROtC7XONHKnn76aUnSxo0bJVXAkyStXbtWUjFPn/rUp4a2119/ffRM11jpL23Hjh0b2mBW9+7dO0uqmshJ5GRRfPrTnz4tSTfeeOPwGeMkjZyzwjAhyMrjjz8+tJGOMLJy7snKI488cloaBy9RdAkLhbP5yAeMnc8R8tRLBwcLzLqxtm45Yp1b5l4q+WTePCAOppBnulyz9tzn/aUvsMjehrWL4DWXL5hB+ut94Tr6wDV+PzIIC+2ygDz22GjkGZl32WX/7du3b7Yz5Y477jgtjRljGFvWzPcoY26DNv062pztZ84YE/Pjwb2cYW3Ao7QyzZ8z1TDrpK30OWQPYB3yPcFn7GNne9mjyIq/D0se8u/WNsbD2HlHTx5aC5EkXXrppZJKHt06CAt+8uTJUR+l2lf/+c9/klIvCIIgCIIgCM4mLNWnGo3D08KgDaIJejoafARhC/BBkopJIFl5z+cN30G0RS82ACuFX+A///nPoQ0tCU3K05PB2OAT5uU0YW5gv0iVI5VPFGPHV9Hfg4+h+zGhRV577bWSxr5GJKC/8847JdV8bdu2bbjmiSeekCStW7dO0ti/FAbj8OHDksbM8MMPPyyp0na5z6qv0RyInEROFgWy4gUtWlmBtZFq/XqyAlsSWTn3ZIVxODvGfMNouSz88Y9/lFTnh/sKM5fEPbgPLaxjyyY7q8d9MHfeJ+SY9/mzW19uZ6rbMblc8sy21LZUPrS8x+UEueJ9zmiyzjCTMKheuATGmff6GjM+0te5PztsI9Yg95N1n/i5wPo4u0v/emkQ21SFzmKzRvx0Cyv+wKwVLK2n6Wz9gn196GcrM1LNIWPoscJc4+nvWE/2i58NPAP23NeFd9NfzlCp5ofPeikASSOIHPn8Hj16dNQXnwPu61kA/RnLRJjqIAiCIAiCIJiIfKkOgiAIgiAIgolYqvsHtP++ffuGzzB1Ysr06meYILZv3y5pTO3j7E5wiTu2A8wTmIMxbUqVfo1gCDfLkEoH85ebETARUhnNU+tgLiZwhwp4UplACIrxvmDyWL9+vaRx2hyCYAhK8HQyXMccfPazn5U0TplEXzB349AvVaAO1eIITpCkyy67bPQZJh9JeuWVVzQnIieRk0XBuF1WPvCBD0iquXBZYa6RlZ47QGTl3JMV5oo1lsr8TYowd7Vg7XFPcPciAqUwebs5GhcgqmnyDnfp4T0EsvrcusxIYxckzPZc4wFxvWe14+TsdDcBXBV4NuOVKngQlw53BWB+uAZXFg/IZF5wfdi6devQRiDbj370o1HfpKq8eeTIEUljN6FlJFbgHe5es1pApgfH+f3e1ganSuOzx//2YEaud/kDPBO3EXfj4Bl+lgDcRpAZ/3/Z/p8lLaJU5wtnn6fBJIUj55vfh5sYY0DWqOwq1fnIueVzw1xfccUVo/FK5f7BnvD94vtymQhTHQRBEARBEAQTsVSmGibGgw0I/EFrca0UbRjNxLVZAj927NghaZzyCQaF+9HeXYOEUSFYx9katKU2CEMqjYhCD56eCG0Lrc21JgJCmINrrrlmaIMpob9r1qwZ2tD80NZuvvnmoe2xxx6TVEFEBEYR3CRJt95662gsx48fH9rQWOmva8i7du2SJP3pT3+SJD377LNDmwd+zYHISeRkUTBP73znO4fPkBXSLbmsME+Rlf8tWWGszubxO+w/6TelYv8JlvN1xhJCwGWPZed6mDRPGUfAHmvjDDny2Cu4whhgKD0oEIa5l3IUywJ9eeqpp4Y21gsLjKeB5Jm8x1PMsV5YNOi3jxNGHOuAW1lo27x5s6SxNen555+XVJYML2Tj/ZsLvblfjSGnjTl3lpVn9awLpOxEDmGCnZWGRYZ1dQsXwZOw6H4fbbzXzzn6wPicqWb9OHecjWa/c374/LzjHe+QVEHabhlDjpAD+unnMuN78cUXV9zPmLGUIMeS9OEPf3g0Ti9SRduyEaY6CIIgCIIgCCZiqUw1zKNrm/jDPvfcc5LGvmewKz//+c8lSTt37hza0A5hg1yD4z2kqkHT9pQ+MFVo2jATUpWtRVvz9ERoQmhk7p/G9TAQpBTy/sFCeYESNHKYMtewYAd4Fn5mknT55ZdLWpky6YYbbhiugZW4+uqrJUlf/epXhzY0v7/+9a+Sag2k0i557x133DG0udY7ByInkZNFAUPirB0sLYxXT1Z+9rOfSRqnfGNeIivnnqwgE84iwrQhQ/h+SuUb3PocS8Us9kpsw+LBFMIce3pQGG6sbl7SmWdzv/vgtmyns6fIIXLmvuPIOveThlKqNGekeHTrCr7+yAKWGO8n42KczrrDfnN2+16jjT3qKdhIDUlswgsvvDC08dmc6LHSzHlrLZBKpnq+2FyPrPh9WJhgipEjX/M33nhDUskIafikklvk2PvdpgXtFfVBxnzuYYFJ6+f3MU7+L7tMIw/sbfomlaWB+A7OJGfW2Z/IhVuuGAN98/di3cNa5menWwOXiTDVQRAEQRAEQTAR+VIdBEEQBEEQBBOxVPcPzH9uIsKsevfdd0uSXn311aENMwFVxDxNC+YqAkncPAcIXsJ84OmdMKP861//kiR985vfHNq+/e1vj57jgRIEA2GW9Tr0mFEwVxHQIpXp4vzzz5ckbdy4cWjDnEIADz+9n4yXVE1SBRFhlsEs+/Wvf3245q677hr10x35MSn3qkQRpLVp0yZJY9NfL03PmUTkJHKyKJAVT2vFet5zzz2SxoFkrax4aVecLgAAHRZJREFUGro2OC2ycu7ICm4D7pLzhz/8YdQfr/DG75jUvVol8061SuZfKvcZKjKuXbt29BxJOnDggKRyw3HXHOaS+XfzO24FzJX3l7OyrdYo1dnJZ7hqSJVekT3iZndkG/cilz32AWuIO5S7ePz617+WVCZ95kSqoEXe5wFx7Dtch7xPvl/nAvPqZ0pb/dLlmrY2ANCv4zNvA4wXd4jemjOH7uaGiwb/73quYbhAuDsQ8oNLibtT8Bly4WlF6XsvJV4rm76euGRwlrXjlerM7AWA47bE+3Gfkuo8Zy58fnsVR5eBMNVBEARBEARBMBFvSaAiKa+kCqwglYprRgSvoNl40m8CHNDEPNUU2hJaDPe5xgsbBUvjhQhwsieAhxRSkvTMM89IKu2LIAyptNhbbrlFUrE+UqW/QntyR34Cm2CqXENGA+MaZ0xgSJjD++67T1KlxfL3oAm6Bnj//fdLKs3cA4cIkGBM3l8PbJgDkZPIyaKAMesFBfZkBUYPWfEAucjKuSsrsK2erpBzhn5deeWVQxvFhOijB0ARxNhrQ+awFMCqeTAoTDGy5Kwe9zFHHrRGYBmy6O9FnpEFl13YR2SHdZdKfntnJ2wna+l7pU0LiMw++uijwzXME5YRT2fIWLCWeHpF0roxPgJ4/b450WOV+Z359YDXtrCLM81uTWifCevcpkj0eYalpY3UnlKx11zvxU7oC2vulirOSvrWKwYEe+0Md1tgxYMmeT5r7HKLjHA+sm98zbmGn54Skr7wTE8B+Jvf/EZSWYT87PRCRMtEmOogCIIgCIIgmIilMtVoPTAlUmlX+NJ4Ym+0dvzMvI2k8WhprjWdOHFCUml3MBKu4eBjR58OHz68op/XXXedpLFGBTPG+zydEpojqXJIKyVViV78+ChnKxWTQKob17BgDtDWKNUplc9aq+m6rxOpsHjHsWPHhjbYGDRPZzBg0pgz9/P0crVzIHISOVkUMI/u24yvKrICEymVrFBcILLyvyErrLsXIGHekQ9fS8YPM+rsI76gsI7ed+7jvOIa91vFXxWrgLOvsHgwdRQSksoCgqw7Mwnr2LKfUskz4ySeQKpUZqQmO3To0NAGawiD7+cxv9N39pzHwQAYeZ8D1oMxOTuLXG3ZskXSmOX3Ik9zoec3DXp+0+19DiwAyEjPwgoDCwvuLC+gzd8Lo98rDU7feZ+nbfz9738vqSxdnrr26aefllTnjMsmFpaLL75Y0rgYEOcwljG/j5gB5IC+cNZIta701/cb5xptP/jBD4Y2+o7cMSZpOf9/eghTHQRBEARBEAQTkS/VQRAEQRAEQTARS3X/wNTkgTGYKTBdePAKTvkEKrh5kzYc692sh6kTMwOO+O6Qj3mNFD0XXXTR0EbFKdJ1fexjHxvaSIWFQzxmYKlMJjjkewoiKqgRvISZRCozEKmd9u/fP7Qxdsw+mFB8DH//+98llQnEU86cOnVKji9/+cvD76Slo4qWm6+YF9bH58fNTHMgchI5WRSRlcjKm4GbwVlT3DG8D5ijMbu7ORuzO/PubiO41mDCJ5jT38v68sxetUbWDXca7yeBje4KRFpGXEpwG5LKFQe3D09fiAsJ1RPpr1SuJDzTU+IR7IarEoGw7u5DP5EpT+XHdYzXZYH0kchLz61hTvAOd0HoVbFs0WtD/tlruKRJtZ6sFWeJP6dNs+fuH1zHz146OX76M5FFXOC8T8gGMuMBzsgG56S78+DGgxz6niCIERc4AsE9pR79Y0+4PODG4e5iABmjL+5+5MGOy0SY6iAIgiAIgiCYiKUy1STGd22YVEokLvc0amhnv/vd7ySN01eh3cEoOGOEdoUjPZqRB3bAKKAtwiBJ0pNPPjl6JumDpGInYLGcZVi3bp2k0pY84ABtC8d6mCupgpbQzEng7/2ClXLGhMCm9evXS5JOnjwpacw8MdcUTfFCD7AMt99+uyTpiSeeWNGnHTt2SJIeeeSRoc2LFcyByEnkZFFEViIri4C19aAsGEnWgvnwNubbrQdtwQkPjkK+YHeRJQrFSCUDMIaeepG5Yb0vueSSoY2UjzwbNlsqRpSUfn4fjDZsnr+P4O5eUC9jRq69mAZ9J0ASVtAZeVhPGG8vXILlg2e75YZ9y9y5xcgDGudCj6kGvc9axtjBvHCfM6mwrMxBmz7Pr+kFT8IGc18vzV/v73Z8PibkvReIyVpj4fEzgX6SHtRTOgI+w2rm4/TfvR9SBVb22HrYbs45Z797Y1gGwlQHQRAEQRAEwUQslammVK9rpSR/R4t2dghtFv++48ePD21o22jY7vuDNkgaKNgJ2CWptC2YKtfWeGabQF0qbRC/Ir+PZ/Ie93/E9/PCCy+UVKVqpUpnxLM8/RWaP+mzPIE+PlFoZ/i5OUuBLyZz6L6V+GCiQXpqLRhA+u3sxtylYiMnkZNFEVmJrCwC5t3ZaJhF5sN9S7F2wOJ70ZiWlfX5Y7ywurCJH/zgB4dr8J2HFfZ5wO/06NGjksZpy2iD2fziF784tGERIP2dM7qMgbgDZ+sZA/3dvn370Ib889MZeeSROYTxdqaQfYcM4istSR/96EclFRvuJbZhLZlXZ2B7aevONHrM82o+1asx1ew71sCvwSLV+la7VYn1gV32fYz8MM89f2vWya1RWLiQLfeNZq3Zjz3LAOvj6QHxdyb1pxe92bZtmyTplVdekVSstu95nomlzJlqzhI+65W0Z+/6/Lhf9zIRpjoIgiAIgiAIJiJfqoMgCIIgCIJgIpbq/oEJwk1EVDTDpEZ1MKkqR2FmcGr/wQcfHF3j5jnMKAQ4tEEV/sy2Hr1UARKY6TyYibRCPad5TC2YTDwo4frrrx/187nnnhvaMJ0Q+HL11VcPbaSmeuqppySNA6Na0x0mNK9+hjkSs6ebejADMQZfl2984xuSyux04403Dm1uypwDkZPIyaKIrERWFgFp8DwtFyZy3Aw8EA8XC+Cp4tasWSOpKmbifiNVMCauPGvXrpU0NnUzR7zfq4FifqdPnk6OMSBf3/rWt4Y2AkupiPfxj398aMMd6rXXXpM0dpXCfI4MuGsIfUD2ea9U5nrGwH0u15jfGYPPfetCwHxJ5eJE0KunivT+zYXVXDxWu77nBuIyJY2DkNuAVX66+0eb0tHPBtwiOIM8VSJnH9d7oCIyhiuNu3jwDFwtfL65jj753sYlg/PUq9Fy5jEv7AU/d3DfIGjYz2Uq1TJfPhbu45z0fRv3jyAIgiAIgiA4S7FUphoNxYsHkOT7sccekzQO+kCbxZHftRCCNmAGPMiE+9Du0FhcG0ZLQsNyrYZ+oiF7cATXo1U6A8HvBAAQvCGVxvf4449Lkm677bahjefDJv32t79dMZaLL75YUjFeUrFQMEXXXnutpLGTP2wZ6W9cCybwhHny+SWQBG3UAx1gEOZC5CRysigiK5GVRcC4fBzIAJYNlxOYMtbU1xI2D9bRg+x4BswZxXCcHSZQEwvD3/72t6ENOUb2PEUdjDEp9VyGWAvm1oNHCTal+IqPE9YP9tLXgbnCisBY/D28FxnywMq22I/LCfchZ24VIngRttVTU7bM7xxYJBjS2ejVmGqY4l66PNaY/Y+seYB0G+zpe6btp9+H/PLTU9yxVqxvL90ebc5+M/c8C4uLVGcRVhG/j+BnrBhYynwsyCYy49abtoiLB3LDnjP2XsGeZSNMdRAEQRAEQRBMxFKZalgPT2MFewGj4Smq0Hbwydq7d+/QRnoeNDHXsNF00Z7Qvnp+RaROcq0PBgJWiUIR/gyud5YHDRUfJ/efQstvfRalSs6PvybpsKSaFzR6n5//ltaI1DVSsRpoia71wRzgK+esCCm0Dh06JGlcYnZuX6XISeRkUURWIiuLgFLJXnQHwI65ZaL1b3e/8dZn39MNwkIzf6ytWzSQJVg298lmTbEw8C6pZPall16SVKXFpWL9YPjc35W1oL9eyAY/a57tDCEM6pYtWySN4wdAK7vuC8scsM69Ijn4WXsbe5S0k878LsOnehE2vMdU90qoM07YXWdnkS1kn7G5HAKucTa67ae3wTTzPu8bcsc8exvPRFb8HYyzx5rDPiOTHoOAFQJLy+bNmyWNLRDsIeJCev73jM99sduUoX4WpUx5EARBEARBEJylWCpT/ec//1nSWPsmqhyNo1dmkrK4rqVyH5HCRJj6s4gsRktsS2FKpf04EwFbg/ZF9KlULBR+hZ/73OeGtu9973ujMbhvJP6aaGAeqY+WRVS9a44wCDBFFK+QyicSzROW5K677hquwccJdsNLi/Jsijh4qeBf/vKXkmpevAy0l7KdA5GTyMmiiKxEVhYBTKr3FV/PHmMPG0a2FfdJZZ3IcOBltFtrA7LgLC/rRfYUL07E3FKS3Blc/JWRHZc9Msjg/+xWFmSGZzmD166zM/kwi8is7yNYSjKSwEy6zzoyhww4k8ocMhdu1WGPIkO+LvjBz4k361PNOHs+1YwZptnZXZji9ixxn3fml/vdTxgWmZ+eGYT3tpY1aaU1yrN/cB/v9cwr+FDz0/cEhYg4E9yi1gKr0a5du4bPkFEsNW69YZ7op/eXPnDu+Hken+ogCIIgCIIgOEuRL9VBEARBEARBMBFvWy2p+ZnG7t27T0vj9FcEcFCgwU1EOLJ//vOflzQ2LRF8gYO7m9Awo2AaaM1J0spUSZ4ChuAcTL3+Xkwz/PSgIkwXPNvTSX3yk5+UJB08eFDS2ASHyY4AEgJ5pAr0+cQnPiFpHEgCMFdh1nFTKqaSnTt3ShqbDDHjME4PKsKMQz89OAATy+7du2exr0ROIieLIrJy9sqKp19DVh599NFZZGXTpk2npXGQHuuLW4Ovd2ta96BA5oKxuomcZzB/mLX9vQQAtoVepApSY46ZR38WLixeMAe5xJXFn0lKPfbFhg0bhjbcPnBhcZclXEhYXy8gxJwxF8iprymFb3j2zTffvGIszCHBrz4HpBr0IM8LLrhAkvSd73xntjPlzjvvPC3107O1gZn+Gdcs6nbQuov0gp/b4EBccqSSA1yLfK+xPuy13vc87nM3DmQS1zJk1dvYE8iVJB09elRSzYvLAX3B3Ym1vvTSS4drCNxui9ZIdVbi0uapGTmzOaf8Pvp54sSJpfqBhKkOgiAIgiAIgolYaqDiQw89JEn6zGc+M3xGcA1pdwgekUoj4fpjx46teOb3v/99SdIDDzwwfAZrhbaElkcQiFQaH6ySB0MQTIA27do7LBLanTvNwyb1nPTR1tetWydpXDAAjRwW7UMf+tDQRqARBR5ci6XIxbvf/W5JpXm+/PLLwzWUAiYoybU85oB58WAvtFDG6W3Oss2ByEnkZFFEViIriwAGq1dWHibNLRoEPsGOEaznzyJozlOgEehJsRlYbE8fxvquxkwiO14UpbUeuHzxTPriAY4EA2I58XRnyDNz4Mw4awLrzZikSqfI2vf22osvviipAis9PRvXw+x7gBl9wLrj6SAXCSKcCt7RY5xZnx5TDfy+1fq7CFMNWDtfH+YedtcDSQFy0Sud7vLTgn57/zmzsFx4GlOeDwvthWHoF6kZ+ftXv/rVcA0yxtx539hvjMXZaOSHz/wcWYas9BCmOgiCIAiCIAgmYqlM9datWyWN/QLRwEgr5YDxQVt33ypAqidnAvClJMk4qY96ZTzR8pzBgIFAa/I2NCM+g5mQSov8y1/+ImmsfcPKoKG75ohWBjviic/RWkk/40USYM9IvwS75Gms8OXDb9K1YHyc0BzdNxLNj5Rl119//dDmbMQciJxEThZFZOXslRWK9Ejzp9SjP16chLRhMHc+R6TSY33dl5W1hwlzX2zYeywL7AHmUar5Zm56z4Zxc3932D/3zwYwx8yjWwHwoaaYiss1PtU80/uCDPV8v1ln5BmZd/9y5PG+++6TJO3Zs2dogyFHnv29+POS3s8ZWN/ncwF56DHVb9anepGYtdVS8vE7c+9MbFugqFf4BKuQ34fVjPvcCsbv7A1njNsiSW5R45lteXSp2GvOQPYZlgipUiyyN/x8pJ/IoY+Fzxivpyx8qxCmOgiCIAiCIAgmIl+qgyAIgiAIgmAilsqVY2I6cuTI8BnmJ2h7T+9y//33S5J2794taVyBC9qfqmeehgpzCiYxTApuHsG8gVmlV6kM85wHWGBy4X6qr0llFiG4yM1AmGEZgz8TEy+BAF6hC9Pi4cOHJY0rDRFU9Nprr0kqs7ebBzGjkBKKqnH+Pt7BWkjSyZMnJUm33nqrpPGauRlwDkROIieLIrISWVkEmLU9qJA1Zd6ZT6nM+7gJeapI3BIwS3swIS4WuHFQ6dADB3HNoJKlrxvBfcyjp5rDRE4/3dSNKR1Zd9mlT6ybm89xHcKtwt11cD3ARcP7Qv9I64YblbtnsDcIoMU1RqogO9L0uQsRqfwYH3Ij1VrNiUXcP7y/qwUqIiOrBT2uhtalxIP0+Kz3HOaOn57eEznopdtr3T/8fbjotG5n3hfkwJ+J6xOVFAn69T2FO1AvQLJ1r+lVrGyvafu+TISpDoIgCIIgCIKJWCpTjYbizu9ovLA6OLNLlSz+hz/8oaQxg0PgEAnEST4uSevXr5dUgR28o5fiCgbJnfXRfrjf2Q00bAJZPJCkTV9FcJFU7AAaoGv0aOa0eTASQRokOfd+wqgRREQ/nYmAKYHdcO2NuSb91pVXXjm0wYoAL37QCwA7k4icRE4WRWQlsvJm4AwYTB2MW4956wVcws7C3p84cWJow0IAQw/z/773vW+4hs9gRD3FHfNMX5zFJghwzZo1K+6DqUMG3YLCmhA85mNp06t5sCbsIcymFzqin8hAT85gFB988EFJtS+kspwQ8OjWEmQBZtzTT3rf50KP9WzbXI5aptjvW43Fbu9rAxYdnB+9PvGZWy7aYjW9Nvat9xELHPveA7F5BnLhFkD2Cdf4mnEuIT9Y1vzcaVON+rnaFmLydH30j/V4q9hpx1vfgyAIgiAIgiA4y7FUphrfqF6ifzRz14Yp7ICG61o0zA1MDiV7pSp5iUZF+U5nQ/CDa8sPS6W50eapY9D2e6mxYAR6JTNhadDavKQoGhh+cfjjSeXbCDvhvoewBDt27BjNhacnYiytf5tUmuL27dtH75fKt++WW24ZXSuNtdc5EDmJnCyKyMrZKyvu57laIYozAdbNWS5+h9V3JpV5hgFz+WLNKeHsvqH4ScP0wVwz5/5s1tktKVwP4+t9ahlUivhIZbFhvl0ub7/9dkm1D5xlfeaZZyQV0+xySf9YJxh2qfxkKQqEnHgqv3Y/eIwB74PZJJWjJN1zzz2jd7A+0ni/zoVe8ZeW+e35VPdY5NanusdCt6XIVysp3itu0kvFx/7nbPF15T2wwr4PeSb3ufWLNtbMz3esNzzLLTPIHVYwZLvH2vM+t7RwNhAn4ClAuQ+587a5z5T/hjDVQRAEQRAEQTAR+VIdBEEQBEEQBBPxtkXSupwpnH/++aelsUkB09dXvvIVSZXqSipTAiZFT12EyZKgHg90IDgGh3ie42YOgnQwTXmfmJM2hZED84qb7jCZYFZ08whmm+PHj0uq1FxSmcUwYbgJHVMJ5hVPKYS5F5PYVVddteK9PIuUTm6SxiTJe908x/io7uZVuJjrAwcOrLR3nQFETiIniyKyEllZBA888MBpaZxCkb5hMj7vvPOGNuYdE7Kb+1lXzOdePQ4QZIfZ3ueBZxF42KsSiFy6OwUuHbzXXSFwlUCuPOiSQFje5/3lmaybu1ogx7i5EKwrlQvAL37xC0klH7jZ+Lh45pYtW4a2V199VVLJG++QSk4+8pGPSKoUhlK51dx7772znSk33XTTaenMBCqullKvRc+NAyCjvQC+XjAi7hOstbuN0CfOAT8b2kBFdxthn/NsX2v2FbJ5ww03DG0ELZNSETl0VzbGwH7xKqU88/3vf/9oTA7ObJ9nxvf666/PJis9hKkOgiAIgiAIgolYaqDi5s2bJVUScEm64IILJEn/+Mc/JElf+MIXhjaCgyhScPfddw9tsDOXX365pLGGjUM8Gi6amAepwM6gKTs7BDuA1u/prwgkQQv3dEq8D2YARkaS/v3vf0sqLc0ZLoonwC64pkqfYS5I9yVVkAn3oeV54BDO/TASHvjC3KP5XXbZZUMbmuIbb7whacxGzV2oIXISOVkUkZWzV1Y8qMjncQ7QR2f6GBvBdp7yjz6SKszZMeYNppD1k4rZQwbYAx58yn0UZYGB8/exlp6iDhmCkfTAQZhi+ubMJH0gUNTZPN5HsKWzlrTRX98PyOV73/teSSXPXmQI+UeWPAUgcgJb6efGpk2bJEl79uxZMRYsAPfee6/mwiIp9dxysRpTDav7Zpjq3me+V0Cbas6Z3zaI0Vls1hqZ9KBW5Jxn+X2t1cbX2osNtf3F4kGwNPf7GUhfkF+3IDIWUo6ShlGqtJbImv/P6QWvLwNhqoMgCIIgCIJgIpbKVKNRUaZWKgYInzr3L4MdWbdunSRp27ZtQ9uTTz45ut79H9FySAPFc3oFENCQPMk+2jrMimtraHJcQwolqfyK0ATdZxAtCwbDCzzAOLR+kFIxELSROkkqXyO0QjRH19Bgz/bt2ydpnOpmw4YNkoo9c7YIdoG+eLouLz08ByInkZNFARO0a9eu4TNYa+bL/QLpEwzq1q1bh7b9+/dLKnlwVhg5YH57pcxBWwZYKjmgL+6j3MqKF6TBTxvm0tkdfse30dPXsX4wVd42VVa45oUXXpBUbKVUBV2Yw16RG+TffTJdzufAww8/LGmc/g4fdFhTZ5NhYumjM2esIYV4nMVnn3MW9NhsmDqYcWf1kAFkxwvk0HdkgbNCKmaRfvv5iHwhw76W+LtirfC1pOQ0+94tKFh1kAXGyVz6Z8iAW26QR8biRV2QK8biLLafzXOBuXTmuC3Msgjz3HuWP7P9bLVn85lbEpBXPvP/B6Rb5HzDciXVOcd9znDzGX3ppfBjLrzACzKC5dCLVCHL9Jf7/VxmD/AOtyjRxv9Z/x/D9ciPW308DegyEaY6CIIgCIIgCCYiX6qDIAiCIAiCYCKW6v7h5j4AzU9FJUxUUpmdof0xW0hlZsDk8eyzzw5tmLAwTWN2crMKJiXMHG7W53fa3DyCOaSXKof3YupzkyEmMJ7t5i7aMNN5G8/vOd23ZiPG5P0l4Gbjxo2Sxq4Ghw4dklSmPzcfkf4GE5z3ae5KeZGTyMmiwBTopnBcWai26LJyzTXXjK4/cuTI0IasEEDmsoKMEGyDrLg5FpN7W41PWl1W+N0/AwRmYSb39Hf8zrN9vlt3pTlkhZRnLisEgOKKhQuBJL300kuSKrDSTfkeZDkHOBs8VRcp6ZATd/9g3Mybn0kE0uHi0TOD8xkuJi4LBJgScOVrijxxvQcHkgIRl6NemrS2CqJUcoksuUsO7ho809eEvcU43U3Fn+Hv9/cie9zvafNaVwJH6wbhQaJ+9vwvgTn01IysK2cv/welklHkHRmXVs59L7VdL2iyDdL0MwXZ6J0pvA83EP52eeLs4qe7UrZnkrfxvkXdcZaBMNVBEARBEARBMBFLLf4SBEEQBEEQBOciwlQHQRAEQRAEwUTkS3UQBEEQBEEQTES+VAdBEARBEATBRORLdRAEQRAEQRBMRL5UB0EQBEEQBMFE5Et1EARBEARBEExEvlQHQRAEQRAEwUTkS3UQBEEQBEEQTES+VAdBEARBEATBRORLdRAEQRAEQRBMRL5UB0EQBEEQBMFE5Et1EARBEARBEExEvlQHQRAEQRAEwUTkS3UQBEEQBEEQTES+VAdBEARBEATBRORLdRAEQRAEQRBMRL5UB0EQBEEQBMFE5Et1EARBEARBEExEvlQHQRAEQRAEwUTkS3UQBEEQBEEQTES+VAdBEARBEATBRORLdRAEQRAEQRBMRL5UB0EQBEEQBMFE/B8G8vGOwlRzbwAAAABJRU5ErkJggg==\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["knn.plot_neighbors(ind, dist, obs=img[0], folder_or_images=folder);"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["0/44053 done\n", "1000/44053 done\n", "2000/44053 done\n", "3000/44053 done\n", "4000/44053 done\n", "5000/44053 done\n", "6000/44053 done\n", "7000/44053 done\n", "8000/44053 done\n", "9000/44053 done\n", "10000/44053 done\n", "11000/44053 done\n", "12000/44053 done\n", "13000/44053 done\n", "14000/44053 done\n", "15000/44053 done\n", "16000/44053 done\n", "17000/44053 done\n", "18000/44053 done\n", "19000/44053 done\n", "20000/44053 done\n", "21000/44053 done\n", "22000/44053 done\n", "23000/44053 done\n", "24000/44053 done\n", "25000/44053 done\n", "26000/44053 done\n", "27000/44053 done\n", "28000/44053 done\n", "29000/44053 done\n", "30000/44053 done\n", "31000/44053 done\n", "32000/44053 done\n", "33000/44053 done\n", "34000/44053 done\n", "35000/44053 done\n", "36000/44053 done\n", "37000/44053 done\n", "38000/44053 done\n", "39000/44053 done\n", "40000/44053 done\n", "41000/44053 done\n", "42000/44053 done\n", "43000/44053 done\n", "44000/44053 done\n"]}], "source": ["pairs = []\n", "for i, img in enumerate(imgs):\n", " if i % 1000 == 0:\n", " print(\"{0}/{1} done\".format(i, len(imgs)))\n", " dist, ind = knn.kneighbors(img[0])\n", " sub = ind.ravel()[dist.ravel() <= 10]\n", " if len(sub) > 0:\n", " for j in sub:\n", " pairs.append((i, j))"]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["[(0, 0),\n", " (1, 1),\n", " (2, 2),\n", " (3, 12),\n", " (3, 3),\n", " (3, 10),\n", " (4, 4),\n", " (5, 133),\n", " (5, 1549),\n", " (5, 158)]"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["pairs[:10]"]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"data": {"text/plain": ["(75725, 33675)"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["pairs2 = [(i,j) for i,j in pairs if i != j]\n", "len(pairs), len(pairs2)"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"data": {"text/plain": ["[(3, 12),\n", " (3, 10),\n", " (5, 133),\n", " (5, 1549),\n", " (5, 158),\n", " (5, 5632),\n", " (5, 16784),\n", " (8, 14699),\n", " (8, 23),\n", " (8, 35)]"]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}], "source": ["pairs2[:10]"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"image/png": "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RXHAAQcUK1asKIqiKB555JHi5JNPLjZs2FAcccQRxaxZs4rVq1cXRVEUe+21V7FixYpi2rRpxYknnlg+PmnSpGLatGnFmjVryvMoiqJYv359MXDgwGL9+vXF5ZdfXvz0pz8tx84777ziP/7jP4p777230/neeOONxfr164v169eXj2/evLnYvHlzsXbt2uLKK68sPv7xjxebN28uiqIo1q1bV/zLv/xL8ctf/rJ8/tixY4u5c+eWf//jH/9YnHHGGcXatWvLxw455JBi3rx5RVEUxZYtW4pBgwaVY5s2bSo2bdpUTJkypbjvvvuKjRu6FVXzAAAgAElEQVQ3Fhs3biwmTJhQzJgxo9iyZUtx7rnnFkcddVSn/26++eZiy5YtxWmnnVb813/9V1EURbFx48Zi8ODBxZYtW8pjb9q0qZg+fXoxefLk8u/03C2u0rZi5dJLL+0UK0VRbDNWHnzwweLkk08uVq9eXcZK6CpW7rnnnlqsxL91/D3HyoYNG8pYaT7fz33uc2WstIqTiJVPfOITxebNm4t169YV69atKy6++OIyVtasWVOMHTu2WLJkSVEURbF27doyVrJtxUr8u23evLmYMmVKce+995axcvTRRxczZswoiqLYZqz827/92zZjZePGjduMlY6Y6NFY8XeKv1PaiZOuYsXfKf5OKfydUhSFv1Piv3dkm7dDDz2U+fPnM2fOHAD+/d//nUmTJnX5mokTJ3LbbbcB8Ic//IGVK7dOzFatWsVee+3FrrvuyjPPPMNDDz1UvuY973kPGzdu7HSsk08+mdtuu43NmzezYsUK/vznP3Pccce94c9x8803c++99/Lzn/+cHXaovuqPf/zj/PznP6coCh566CEGDRrE8OHDuzzWJz/5SaZOnQrAf/7nf3LwwQe3PO9f/vKXADz11FP89a9/Lcduu+02Zs6cWfvvscce4zOf+QwA//iP/8jPfvYzAH7zm9/w4Q9/mEajPuE67rjjmDNnDvPmzWPDhg2wtUj+9o7fVtPYemsD4ALg/233e3or+lus3HrrrbVYmTJlShkrM2bM6LFYefLJchLfKVYee+wxHnvsMT772c+W5/RGYqVjpfDbGiv9LU78ndJz+lus+DulZ/S3OPF3SgtvcGbVKxnkLVu2FPfee28xYcKE4vDDDy8uvPDCYt26dUVRVDOz1atXF9OnTy8m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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["dist, ind = knn.kneighbors(imgs[5][0])\n", "knn.plot_neighbors(ind, dist, obs=imgs[5][0], folder_or_images=folder);"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Composantes connectes"]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["0 9096\n", "1 6\n", "2 0\n", "3 0\n", "4 0\n", "5 0\n", "6 0\n", "7 0\n", "8 0\n", "9 0\n"]}], "source": ["distincts = []\n", "for i, j in pairs2:\n", " distincts.append(i)\n", " distincts.append(j)\n", "distincts = set(distincts)\n", "connex = {}\n", "for k in distincts:\n", " connex[k] = k\n", "\n", "n = 0\n", "while n < 10:\n", " modif = 0\n", " for i, j in pairs2: \n", " a = min(connex[i], connex[j])\n", " if a != connex[i] or a != connex[j]:\n", " modif += 1\n", " connex[i] = connex[j] = a\n", " print(n, modif)\n", " n += 1"]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"data": {"text/plain": ["(13271, 4185)"]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["len(connex), len(set(connex.values()))"]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [{"data": {"text/plain": ["['inondation_2016/735614357036519425_CjVtTTrUoAAUUZp.jpg',\n", " 'inondation_2016/735616090261184512_CjVu73ZVEAAlWmu.jpg']"]}, "execution_count": 19, "metadata": {}, "output_type": "execute_result"}], "source": ["names = knn.image_names_\n", "names[:2]"]}, {"cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [{"data": {"text/plain": ["9086"]}, "execution_count": 20, "metadata": {}, "output_type": "execute_result"}], "source": ["dups = []\n", "for i, j in connex.items():\n", " if i != j:\n", " dups.append(names[i])\n", "len(dups)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Images tr\u00e8s proches"]}, {"cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["dist = [[ 0. 21.97726098 21.97726098 21.97726098 161.13348504]]\n", "ind = [[ 285 308 351 311 3005]]\n"]}], "source": ["for i, img in enumerate(imgs):\n", " dist, ind = knn.kneighbors(img[0])\n", " if 10 < dist[0, 1] <= 30:\n", " print(\"dist =\", dist)\n", " print(\"ind =\", ind)\n", " break"]}, {"cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [{"data": {"image/png": "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tGnTsveNHDky288777yTvvPOO2nfvn3TiRMnpmmapitXrky32GKLwn6WL1+eDhkyJH3ooYey495rr73SZ599Nk3TNB06dGg6cODAZv9de+21aZqm6eDBg9MnnngiTdM0XbZsWdqlS5fsusgTTzyRDh48OPs38IPafwkwj6bHLwAHAMOrxkn8Tv7xj3+kRx99dPb6ueeeu8pYOemkk7JYmTVrVrps2bL02WefbRYrK1asKMTKXXfdle6///7pokWLsli59957C7FSf1zf+c530ssuuyx9//330xUrVmSxEr/DNC3GSlmcKFaGDBmSrlixIl28eHG6ePHi9Oyzz85iZfny5WmfPn2yWI6xojhZtmxZ2rdv33Ty5MnNYkX7SdM0HTJkSHrfffdlsbL33ns3HCtpmqYPPPBA2q9fv3TOnDlpvfpzb+m7pqn2bXrt9+8B/xnaLga+39L7678P/01Zd/6mpOlqx0m6qu95TcVJ/E78N8V/U8r+0/9+6/+mLF68OLvuV111VTpq1Kj0oIMOyv73rr8pK1euTHv27JnOnTs3XbJkSfr444+X/k1J0zTt3LlzOm3atHT48OHpAQcckM6bNy+Lk5EjR6ZLliz50L8p+l4VJw8++GCLf1NE70vTNP3Rj36UDhkyJF2+fHm6cuXKdOnSpenZZ5+dXnfddenSpUvTpUuXrjJOIsXJokWL0oULFxb+pixatChdtGhROmTIkHTEiBHZ66sbJ2mapl/5ylfSW2+9Nft3/Ludpml63XXXpeeee67+WTlTHdoPbak9XUcy1c3069ePKVOm8NprrwHwl7/8hUMPPbTF9xxyyCHccMMNANx7770sWNDUAXznnXfYcsst2WSTTRg/fjxPPfVU9p4OHTqwbNmy0s+6+eabWbFiBW+++SaPPvoo++2332qfx1VXXcX999/PDTfcwAYb5Jf6uOOO4/rrrydNU5566im22GILunXr1uJnnXjiiYwcORKARx55hD59+rR4DcaNG8fYsWOztptvvpkXXnih2X9f/vKXs8+/9tqmkurbbruNww47jPoyrEGDBjFx4kQmT57M0qVLoWlA451pU7SNpKk8BOArwLBGr1MVZbFyyCEtJyJWFSvvvvvuR4qV2267bY3Fyl//+tdCrJxwwgkfKVYeeughoOVYuemmm4CmWBkzJksWfGisjB49mm9+85vceeedbLvttqt9rkmSbJ0kiU7yB+TZjKk0ZZvaJ00j0A+lKTNQmf+mNLe2/6Z8HOME/DeljP+mNNevXz/eeOONNfY3pVOnTpX/pgwaNKjZdh/myiuvZPjw4c3i5Pjjj+eGG24gTVOefvppttxyyw+Nk5NOOimLk0cffZRddtml2TYHH3xwdg1eeuml1YqTVRk0aBALFizgzTffBOChhx5iwIABjV2AFtTq1nfR7zQNZBzf0nvaV97rapg3b16z15IkoUOHDnzwwQesWLGCpUuXsnLlSv7nf/6Hk08+meXLl7N48WIWLFjAdtttx6JFixg2bBgTJkxg9uzZLFu2jHnz5jFmzBjGjh3LL37xCzp37kzHjh0588wzad++PS+++CI9e/bksMMOY7/99mPJkiV84xvfYPvtt6dLly506tSJQYMGsWTJEk455RTatWvHlClT6NGjqV6/X79+XHDBBcydO5dXXnmFU045hWXLljF27Fgef/xx7rjjDgA23LBpFrn27Zsu60033UTHjh3p2rUrO++8M8cffzw/+9nPOPnkkxkxYgT9+vVjk0024YorrmDlypW0a9eOgw8+mPHjx7Nw4UJ69OjBVVddxVFHHcWFF17Il770JS699FI222wzrrjiiuwP2HHHHQfAOeecw1lnncV+++3HXnvttVp/iL/2ta9x5plnsssuu7DVVltlnz1z5kzOPvts7r77bjbYYAMuvfRSjjrqKFasWAFwS5qm42of8f8ANyVJ8v/SVNN01WoFR6A42XrrfPab9u3bkyQJH3zwAQDLly/PYuU3v/kNJ598MlOnTqVTp04cfvjh3HrrrSxatIj/+q//YpNNNuHoo49m2bJlDB48mKVLlxZiZeONN+bMM89k880358UXX2T33XenT58+7Lfffvz617/m+uuvZ5tttmkWK0OHDiVNU2bOnEmPHj1I05T+/ftzwQUXMHPmTCZOnMgJJ5wANP3xUKzUx8msWbN45JFH6NixY/adnXbaaVx88cWccMIJDB8+nH79+rHxxhtz5ZVXZtckxsqAAQO46qqrOPLII7nwwgs588wz+e1vf8tmm23Gqaeeyk033ZTFyeabb14pVr73ve+xcOFCTjvtNAB23HFH7rzzzmbH1KNHD6644gqOOeYYkiT5L2BUmqZ30pQN+FmSJCnwT+C82kffRtOA17E0PWa8L03T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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["obs = imgs[ind[0, 0]][0]\n", "knn.plot_neighbors(ind, dist, obs=obs, folder_or_images=folder);"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Recopie de la base"]}, {"cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [{"data": {"text/plain": ["9086"]}, "execution_count": 23, "metadata": {}, "output_type": "execute_result"}], "source": ["not_allowed = set(dups)\n", "len(not_allowed)"]}, {"cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [{"data": {"text/plain": ["['inondation_2016/735805396657397762_CjYbG-DUgAQTu19.jpg',\n", " 'inondation_2016/735829559329853440_CjYxFcrXEAAvjlH.jpg',\n", " 'inondation_2016/735870604038045696_CjZWafAXEAA3sOb.jpg',\n", " 'inondation_2016/735892072960512000_CjZp8CoWsAIOhL5.jpg',\n", " 'inondation_2016/735892650583306240_CjZqdvoXAAEaSRM.jpg']"]}, "execution_count": 24, "metadata": {}, "output_type": "execute_result"}], "source": ["list(sorted(not_allowed))[:5]"]}, {"cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["[stream_copy_images] copy image 0: 'bing\\01-9.jpg' - class 'bing'\n", "[stream_copy_images] copy image 1000: 'imagenet1\\3271012508_955158b073.jpg' - class 'imagenet1'\n", "[stream_copy_images] copy image 2000: 'imagenet2\\3287016043_987800dc67.jpg' - class 'imagenet2'\n", "[stream_copy_images] copy image 3000: 'imagenet4\\106994_5349_big_200907_voyager11.jpg' - class 'imagenet4'\n", "[stream_copy_images] copy image 4000: 'imagenet5\\532346050_dafb11ec86.jpg' - class 'imagenet5'\n", "[stream_copy_images] copy image 5000: 'inondation_2016\\736966968138473472_Cjo7jTrXAAAeffo.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 6000: 'inondation_2016\\737629970399252480_CjySiGiUkAUr8TC.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 7000: 'inondation_2016\\737923554407256064_Cj2hYNwWUAElsOP.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 8000: 'inondation_2016\\738072076880347136_Cj4opLHXEAAuuGK.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 9000: 'inondation_2016\\738298504267730945_Cj72k1kUoAAIKUA.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 10000: 'inondation_2016\\738378724442296321_Cj8_iRUXEAEIYex.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 11000: 'inondation_2016\\738456441082793984_Cj-GNbPWkAAecmj.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 12000: 'inondation_2016\\738642491671379968_CkAvbhyVAAQdhnl.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 13000: 'inondation_2016\\738708144893927424_CkBrBsFXIAAesMt.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 14000: 'inondation_2016\\738775822753013760_CkCosKRXEAAL3QS.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 15000: 'inondation_2016\\738983572388913152_CkFlodbW0AAjH1A.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 16000: 'inondation_2016\\739133036877467649_CkHtiX3XEAAQ5qt.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 17000: 'inondation_2016\\739435820709519360_CkMA9WNXAAEBBwW.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 18000: 'inondation_2016\\739759634534141958_CkQnd1TUUAQli3i.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 19000: 'inondation_2016\\740101248225935361_CkVVPYDWUAAc8U3.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 20000: 'inondation_2016\\740462147130556416_CkamZeeXAAIf6ru.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 21000: 'inondation_2016\\740924772062769152_CkhLHExW0AIpwYC.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 22000: 'inondation_2016\\742979124050964480_Ck-XkQfXEAE46Wh.jpg' - class 'inondation_2016'\n", "[stream_copy_images] copy image 23000: 'inondation_2018\\955500762070769664_DUKe4P3WAAEBJFC.jpg' - class 'inondation_2018'\n", "[stream_copy_images] copy image 24000: 'inondation_2018\\956447069216165890_DUX7giCXUAANfkI.jpg' - class 'inondation_2018'\n", "[stream_copy_images] copy image 25000: 'inondation_2018\\957555126931279872_DUnrT9aXUAARFxJ.jpg' - class 'inondation_2018'\n", "[stream_copy_images] copy image 26000: 'inondation_2018\\959394452564598784_DVB0KQsWkAA4Bta.jpg' - class 'inondation_2018'\n", "[stream_copy_images] copy image 27000: 'inondation_2018\\965549350599487488_DWZSA7cWsAEWGaK.jpg' - class 'inondation_2018'\n", "[stream_copy_images] copy image 28000: 'seisme_Amatrice\\768296828550819841_CqmJ4k4UsAEcTaF.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 29000: 'seisme_Amatrice\\768330792049205248_CqmooXdXgAAJ2b3.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 30000: 'seisme_Amatrice\\768348574694408192_Cqm4itvWcAAsv_s.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 31000: 'seisme_Amatrice\\768363756728516608_CqnGo90WIAAfA1I.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 32000: 'seisme_Amatrice\\768376884677738496_CqnOR17WIAAP2Hn.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 33000: 'seisme_Amatrice\\768390411228422144_Cqne_UWWYAAnY6V.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 34000: 'seisme_Amatrice\\768404063755141120_CqnrVy8XYAAYIGO.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 35000: 'seisme_Amatrice\\768420565745106944_Cqn6bjbWIAEAbck.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 36000: 'seisme_Amatrice\\768436635444908032_CqoI-OfWIAEpe5T.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 37000: 'seisme_Amatrice\\768453842098880512_CqoYsPEXEAARM5o.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 38000: 'seisme_Amatrice\\768471447140458496_CqoosvJW8AIjpEA.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 39000: 'seisme_Amatrice\\768492129882517506_Cqo7hBpW8AA64OU.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 40000: 'seisme_Amatrice\\768516668515577856_CqpR0mDWIAAEGkL.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 41000: 'seisme_Amatrice\\768550981206441984_Cqpw-qOWAAAVGTB.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 42000: 'seisme_Amatrice\\768679088013778944_CqrlaXlVUAAcqVG.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 43000: 'seisme_Amatrice\\768721000015892480_CqsLrL6UkAAofwM.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 44000: 'seisme_Amatrice\\768749206500741120_CqslU7hWEAA_Cyn.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 45000: 'seisme_Amatrice\\768777504609931264_Cqs_DzcWAAAZ2_h.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 46000: 'seisme_Amatrice\\768810730250461184_CqtdRvNWAAAE_HJ.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 47000: 'seisme_Amatrice\\768850688487022592_Cqsp-GyWgAEJ6Kp.jpg' - class 'seisme_Amatrice'\n", "[stream_copy_images] copy image 48000: 'seisme_Amatrice\\768916332322648064_Cqu9OPSWgAEzaux.jpg' - class 'seisme_Amatrice'\n"]}], "source": ["from ensae_projects.hackathon.image_helper import stream_copy_images\n", "\n", "src_folder = \"c:/temp/suricatenat_images/\"\n", "dest_folder = \"c:/temp/suricatenat_clean/\"\n", "\n", "def valid(name):\n", " spl = name.split(\"suricatenat_images\")[-1].replace(\"\\\\\", \"/\").strip(\"/\\\\\")\n", " return spl not in allowed\n", "\n", "for img in stream_copy_images(src_folder, dest_folder, valid, fLOG=print):\n", " pass"]}, {"cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": ["l1 = list(enumerate_image_class(\"c:/temp/suricatenat_images/\"))"]}, {"cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": ["l2 = list(enumerate_image_class(\"c:/temp/suricatenat_clean/\"))"]}, {"cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [{"data": {"text/plain": ["(48884, 39798)"]}, "execution_count": 28, "metadata": {}, "output_type": "execute_result"}], "source": ["len(l1), len(l2)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Takes a random sample"]}, {"cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": ["from ensae_projects.hackathon.image_helper import stream_random_sample, last_element\n", "rnd = last_element(stream_random_sample(\"c:/temp/suricatenat_clean/\", abspath=False))"]}, {"cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [{"data": {"text/plain": ["[('imagenet2\\\\2611787731_6b65bdaf6a.jpg', 'imagenet2'),\n", " ('inondation_2016\\\\740608740169224192_CkcruUEXIAEsWUl.jpg',\n", " 'inondation_2016'),\n", " ('inondation_2016\\\\738614580658606080_CkAWBegUgAA5Z9l.jpg',\n", " 'inondation_2016'),\n", " ('inondation_2018\\\\956548703552245760_DUZX5TRWsAAyDqH.jpg',\n", " 'inondation_2018'),\n", " ('inondation_2018\\\\956925376936148993_DUeuiGQX4AAocq-.jpg',\n", " 'inondation_2018')]"]}, "execution_count": 30, "metadata": {}, "output_type": "execute_result"}], "source": ["rnd[:5]"]}, {"cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": ["import os\n", "import shutil\n", "\n", "src_folder = \"c:/temp/suricatenat_clean/\"\n", "dest_folder = \"c:/temp/suricatenat_sample/\"\n", "\n", " \n", "for img, sub in rnd:\n", " src = os.path.join(src_folder, img)\n", " dst = os.path.join(dest_folder, img)\n", " d = os.path.dirname(dst)\n", " if not os.path.exists(d):\n", " os.makedirs(d)\n", " \n", " shutil.copy(src, dst)"]}, {"cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": []}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0"}}, "nbformat": 4, "nbformat_minor": 2}